@react-stately/utils 3.3.0 → 3.5.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/main.js CHANGED
@@ -1,154 +1,110 @@
1
- var {
2
- useCallback,
3
- useRef,
4
- useState
5
- } = require("react");
1
+ var $kC0mY$react = require("react");
6
2
 
7
- function useControlledState(value, defaultValue, onChange) {
8
- let [stateValue, setStateValue] = useState(value || defaultValue);
9
- let ref = useRef(value !== undefined);
10
- let wasControlled = ref.current;
11
- let isControlled = value !== undefined; // Internal state reference for useCallback
12
-
13
- let stateRef = useRef(stateValue);
14
-
15
- if (wasControlled !== isControlled) {
16
- console.warn("WARN: A component changed from " + (wasControlled ? 'controlled' : 'uncontrolled') + " to " + (isControlled ? 'controlled' : 'uncontrolled') + ".");
17
- }
18
-
19
- ref.current = isControlled;
20
- let setValue = useCallback(function (value) {
21
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
22
- args[_key - 1] = arguments[_key];
3
+ function $parcel$exportWildcard(dest, source) {
4
+ Object.keys(source).forEach(function(key) {
5
+ if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
6
+ return;
23
7
  }
24
8
 
25
- let onChangeCaller = function onChangeCaller(value) {
26
- if (onChange) {
27
- if (!Object.is(stateRef.current, value)) {
28
- for (var _len2 = arguments.length, onChangeArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
29
- onChangeArgs[_key2 - 1] = arguments[_key2];
30
- }
31
-
32
- onChange(value, ...onChangeArgs);
33
- }
34
- }
35
-
36
- if (!isControlled) {
37
- stateRef.current = value;
9
+ Object.defineProperty(dest, key, {
10
+ enumerable: true,
11
+ get: function get() {
12
+ return source[key];
38
13
  }
39
- };
40
-
41
- if (typeof value === 'function') {
42
- // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates
43
- // when someone using useControlledState calls setControlledState(myFunc)
44
- // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc
45
- // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning
46
- // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same
47
- let updateFunction = function updateFunction(oldValue) {
48
- for (var _len3 = arguments.length, functionArgs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
49
- functionArgs[_key3 - 1] = arguments[_key3];
50
- }
51
-
52
- let interceptedValue = value(isControlled ? stateRef.current : oldValue, ...functionArgs);
53
- onChangeCaller(interceptedValue, ...args);
14
+ });
15
+ });
54
16
 
55
- if (!isControlled) {
56
- return interceptedValue;
17
+ return dest;
18
+ }
19
+ function $parcel$export(e, n, v, s) {
20
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
21
+ }
22
+ var $8d8fdfab47455712$exports = {};
23
+
24
+ $parcel$export($8d8fdfab47455712$exports, "useControlledState", () => $8d8fdfab47455712$export$40bfa8c7b0832715);
25
+
26
+ function $8d8fdfab47455712$export$40bfa8c7b0832715(value1, defaultValue, onChange) {
27
+ let [stateValue, setStateValue] = $kC0mY$react.useState(value1 || defaultValue);
28
+ let ref = $kC0mY$react.useRef(value1 !== undefined);
29
+ let wasControlled = ref.current;
30
+ let isControlled = value1 !== undefined;
31
+ // Internal state reference for useCallback
32
+ let stateRef = $kC0mY$react.useRef(stateValue);
33
+ if (wasControlled !== isControlled) console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);
34
+ ref.current = isControlled;
35
+ let setValue = $kC0mY$react.useCallback((value2, ...args)=>{
36
+ let onChangeCaller = (value, ...onChangeArgs)=>{
37
+ if (onChange) {
38
+ if (!Object.is(stateRef.current, value)) onChange(value, ...onChangeArgs);
39
+ }
40
+ if (!isControlled) stateRef.current = value;
41
+ };
42
+ if (typeof value2 === 'function') {
43
+ console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');
44
+ // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates
45
+ // when someone using useControlledState calls setControlledState(myFunc)
46
+ // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc
47
+ // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning
48
+ // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same
49
+ let updateFunction = (oldValue, ...functionArgs)=>{
50
+ let interceptedValue = value2(isControlled ? stateRef.current : oldValue, ...functionArgs);
51
+ onChangeCaller(interceptedValue, ...args);
52
+ if (!isControlled) return interceptedValue;
53
+ return oldValue;
54
+ };
55
+ setStateValue(updateFunction);
56
+ } else {
57
+ if (!isControlled) setStateValue(value2);
58
+ onChangeCaller(value2, ...args);
57
59
  }
58
-
59
- return oldValue;
60
- };
61
-
62
- setStateValue(updateFunction);
63
- } else {
64
- if (!isControlled) {
65
- setStateValue(value);
66
- }
67
-
68
- onChangeCaller(value, ...args);
69
- }
70
- }, [isControlled, onChange]); // If a controlled component's value prop changes, we need to update stateRef
71
-
72
- if (isControlled) {
73
- stateRef.current = value;
74
- } else {
75
- value = stateValue;
76
- }
77
-
78
- return [value, setValue];
60
+ }, [
61
+ isControlled,
62
+ onChange
63
+ ]);
64
+ // If a controlled component's value prop changes, we need to update stateRef
65
+ if (isControlled) stateRef.current = value1;
66
+ else value1 = stateValue;
67
+ return [
68
+ value1,
69
+ setValue
70
+ ];
79
71
  }
80
72
 
81
- exports.useControlledState = useControlledState;
82
-
83
- /*
84
- * Copyright 2020 Adobe. All rights reserved.
85
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
86
- * you may not use this file except in compliance with the License. You may obtain a copy
87
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
88
- *
89
- * Unless required by applicable law or agreed to in writing, software distributed under
90
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
91
- * OF ANY KIND, either express or implied. See the License for the specific language
92
- * governing permissions and limitations under the License.
93
- */
94
73
 
95
- /**
96
- * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
97
- */
98
- function clamp(value, min, max) {
99
- if (min === void 0) {
100
- min = -Infinity;
101
- }
74
+ var $ac8e4d4816275668$exports = {};
102
75
 
103
- if (max === void 0) {
104
- max = Infinity;
105
- }
106
-
107
- let newValue = Math.min(Math.max(value, min), max);
108
- return newValue;
76
+ $parcel$export($ac8e4d4816275668$exports, "clamp", () => $ac8e4d4816275668$export$7d15b64cf5a3a4c4);
77
+ $parcel$export($ac8e4d4816275668$exports, "snapValueToStep", () => $ac8e4d4816275668$export$cb6e0bb50bc19463);
78
+ $parcel$export($ac8e4d4816275668$exports, "toFixedNumber", () => $ac8e4d4816275668$export$b6268554fba451f);
79
+ function $ac8e4d4816275668$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {
80
+ let newValue = Math.min(Math.max(value, min), max);
81
+ return newValue;
109
82
  }
110
-
111
- exports.clamp = clamp;
112
-
113
- function snapValueToStep(value, min, max, step) {
114
- let remainder = (value - (isNaN(min) ? 0 : min)) % step;
115
- let snappedValue = Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder;
116
-
117
- if (!isNaN(min)) {
118
- if (snappedValue < min) {
119
- snappedValue = min;
120
- } else if (!isNaN(max) && snappedValue > max) {
121
- snappedValue = min + Math.floor((max - min) / step) * step;
83
+ function $ac8e4d4816275668$export$cb6e0bb50bc19463(value, min, max, step) {
84
+ let remainder = (value - (isNaN(min) ? 0 : min)) % step;
85
+ let snappedValue = Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder;
86
+ if (!isNaN(min)) {
87
+ if (snappedValue < min) snappedValue = min;
88
+ else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor((max - min) / step) * step;
89
+ } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor(max / step) * step;
90
+ // correct floating point behavior by rounding to step precision
91
+ let string = step.toString();
92
+ let index = string.indexOf('.');
93
+ let precision = index >= 0 ? string.length - index : 0;
94
+ if (precision > 0) {
95
+ let pow = Math.pow(10, precision);
96
+ snappedValue = Math.round(snappedValue * pow) / pow;
122
97
  }
123
- } else if (!isNaN(max) && snappedValue > max) {
124
- snappedValue = Math.floor(max / step) * step;
125
- } // correct floating point behavior by rounding to step precision
126
-
127
-
128
- let string = step.toString();
129
- let index = string.indexOf('.');
130
- let precision = index >= 0 ? string.length - index : 0;
131
-
132
- if (precision > 0) {
133
- let pow = Math.pow(10, precision);
134
- snappedValue = Math.round(snappedValue * pow) / pow;
135
- }
136
-
137
- return snappedValue;
98
+ return snappedValue;
99
+ }
100
+ function $ac8e4d4816275668$export$b6268554fba451f(value, digits, base = 10) {
101
+ const pow = Math.pow(base, digits);
102
+ return Math.round(value * pow) / pow;
138
103
  }
139
- /* Takes a value and rounds off to the number of digits. */
140
-
141
104
 
142
- exports.snapValueToStep = snapValueToStep;
143
105
 
144
- function toFixedNumber(value, digits, base) {
145
- if (base === void 0) {
146
- base = 10;
147
- }
106
+ $parcel$exportWildcard(module.exports, $8d8fdfab47455712$exports);
107
+ $parcel$exportWildcard(module.exports, $ac8e4d4816275668$exports);
148
108
 
149
- const pow = Math.pow(base, digits);
150
- return Math.round(value * pow) / pow;
151
- }
152
109
 
153
- exports.toFixedNumber = toFixedNumber;
154
110
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["./packages/@react-stately/utils/src/useControlledState.ts","./packages/@react-stately/utils/src/number.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useRef, useState} from 'react';\n\nexport function useControlledState<T>(\n value: T,\n defaultValue: T,\n onChange: (value: T, ...args: any[]) => void\n): [T, (value: T | ((prevState: T) => T), ...args: any[]) => void] {\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let ref = useRef(value !== undefined);\n let wasControlled = ref.current;\n let isControlled = value !== undefined;\n // Internal state reference for useCallback\n let stateRef = useRef(stateValue);\n if (wasControlled !== isControlled) {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n\n ref.current = isControlled;\n\n let setValue = useCallback((value, ...args) => {\n let onChangeCaller = (value, ...onChangeArgs) => {\n if (onChange) {\n if (!Object.is(stateRef.current, value)) {\n onChange(value, ...onChangeArgs);\n }\n }\n if (!isControlled) {\n stateRef.current = value;\n }\n };\n\n if (typeof value === 'function') {\n // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n // when someone using useControlledState calls setControlledState(myFunc)\n // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n let updateFunction = (oldValue, ...functionArgs) => {\n let interceptedValue = value(isControlled ? stateRef.current : oldValue, ...functionArgs);\n onChangeCaller(interceptedValue, ...args);\n if (!isControlled) {\n return interceptedValue;\n }\n return oldValue;\n };\n setStateValue(updateFunction);\n } else {\n if (!isControlled) {\n setStateValue(value);\n }\n onChangeCaller(value, ...args);\n }\n }, [isControlled, onChange]);\n\n // If a controlled component's value prop changes, we need to update stateRef\n if (isControlled) {\n stateRef.current = value;\n } else {\n value = stateValue;\n }\n\n return [value, setValue];\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\n/**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */\nexport function clamp(value: number, min: number = -Infinity, max: number = Infinity): number {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\n\nexport function snapValueToStep(value: number, min: number, max: number, step: number): number {\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor((max - min) / step) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(max / step) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n let string = step.toString();\n let index = string.indexOf('.');\n let precision = index >= 0 ? string.length - index : 0;\n\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n snappedValue = Math.round(snappedValue * pow) / pow;\n }\n\n return snappedValue;\n}\n\n/* Takes a value and rounds off to the number of digits. */\nexport function toFixedNumber(value: number, digits: number, base: number = 10): number {\n const pow = Math.pow(base, digits);\n\n return Math.round(value * pow) / pow;\n}\n"],"names":["useControlledState","value","defaultValue","onChange","stateValue","setStateValue","useState","ref","useRef","undefined","wasControlled","current","isControlled","stateRef","console","warn","setValue","useCallback","args","onChangeCaller","Object","is","onChangeArgs","updateFunction","oldValue","functionArgs","interceptedValue","clamp","min","max","Infinity","newValue","Math","snapValueToStep","step","remainder","isNaN","snappedValue","abs","sign","floor","string","toString","index","indexOf","precision","length","pow","round","toFixedNumber","digits","base"],"version":3,"file":"main.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-stately/utils/src/index.ts","packages/@react-stately/utils/src/useControlledState.ts","packages/@react-stately/utils/src/number.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport * from './useControlledState';\nexport * from './number';\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 {useCallback, useRef, useState} from 'react';\n\nexport function useControlledState<T>(\n value: T,\n defaultValue: T,\n onChange: (value: T, ...args: any[]) => void\n): [T, (value: T, ...args: any[]) => void] {\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let ref = useRef(value !== undefined);\n let wasControlled = ref.current;\n let isControlled = value !== undefined;\n // Internal state reference for useCallback\n let stateRef = useRef(stateValue);\n if (wasControlled !== isControlled) {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n\n ref.current = isControlled;\n\n let setValue = useCallback((value, ...args) => {\n let onChangeCaller = (value, ...onChangeArgs) => {\n if (onChange) {\n if (!Object.is(stateRef.current, value)) {\n onChange(value, ...onChangeArgs);\n }\n }\n if (!isControlled) {\n stateRef.current = value;\n }\n };\n\n if (typeof value === 'function') {\n console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');\n // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n // when someone using useControlledState calls setControlledState(myFunc)\n // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n let updateFunction = (oldValue, ...functionArgs) => {\n let interceptedValue = value(isControlled ? stateRef.current : oldValue, ...functionArgs);\n onChangeCaller(interceptedValue, ...args);\n if (!isControlled) {\n return interceptedValue;\n }\n return oldValue;\n };\n setStateValue(updateFunction);\n } else {\n if (!isControlled) {\n setStateValue(value);\n }\n onChangeCaller(value, ...args);\n }\n }, [isControlled, onChange]);\n\n // If a controlled component's value prop changes, we need to update stateRef\n if (isControlled) {\n stateRef.current = value;\n } else {\n value = stateValue;\n }\n\n return [value, setValue];\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\n/**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */\nexport function clamp(value: number, min: number = -Infinity, max: number = Infinity): number {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\n\nexport function snapValueToStep(value: number, min: number, max: number, step: number): number {\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor((max - min) / step) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(max / step) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n let string = step.toString();\n let index = string.indexOf('.');\n let precision = index >= 0 ? string.length - index : 0;\n\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n snappedValue = Math.round(snappedValue * pow) / pow;\n }\n\n return snappedValue;\n}\n\n/* Takes a value and rounds off to the number of digits. */\nexport function toFixedNumber(value: number, digits: number, base: number = 10): number {\n const pow = Math.pow(base, digits);\n\n return Math.round(value * pow) / pow;\n}\n"],"names":[],"version":3,"file":"main.js.map"}
package/dist/module.js CHANGED
@@ -1,139 +1,93 @@
1
- import { useCallback, useRef, useState } from "react";
2
- export function useControlledState(value, defaultValue, onChange) {
3
- let [stateValue, setStateValue] = useState(value || defaultValue);
4
- let ref = useRef(value !== undefined);
5
- let wasControlled = ref.current;
6
- let isControlled = value !== undefined; // Internal state reference for useCallback
1
+ import {useState as $6imuh$useState, useRef as $6imuh$useRef, useCallback as $6imuh$useCallback} from "react";
7
2
 
8
- let stateRef = useRef(stateValue);
9
-
10
- if (wasControlled !== isControlled) {
11
- console.warn("WARN: A component changed from " + (wasControlled ? 'controlled' : 'uncontrolled') + " to " + (isControlled ? 'controlled' : 'uncontrolled') + ".");
12
- }
13
-
14
- ref.current = isControlled;
15
- let setValue = useCallback(function (value) {
16
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
17
- args[_key - 1] = arguments[_key];
18
- }
19
-
20
- let onChangeCaller = function onChangeCaller(value) {
21
- if (onChange) {
22
- if (!Object.is(stateRef.current, value)) {
23
- for (var _len2 = arguments.length, onChangeArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
24
- onChangeArgs[_key2 - 1] = arguments[_key2];
25
- }
26
-
27
- onChange(value, ...onChangeArgs);
28
- }
29
- }
30
-
31
- if (!isControlled) {
32
- stateRef.current = value;
33
- }
34
- };
35
-
36
- if (typeof value === 'function') {
37
- // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates
38
- // when someone using useControlledState calls setControlledState(myFunc)
39
- // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc
40
- // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning
41
- // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same
42
- let updateFunction = function updateFunction(oldValue) {
43
- for (var _len3 = arguments.length, functionArgs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
44
- functionArgs[_key3 - 1] = arguments[_key3];
45
- }
46
-
47
- let interceptedValue = value(isControlled ? stateRef.current : oldValue, ...functionArgs);
48
- onChangeCaller(interceptedValue, ...args);
49
-
50
- if (!isControlled) {
51
- return interceptedValue;
3
+ function $parcel$export(e, n, v, s) {
4
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
5
+ }
6
+ var $458b0a5536c1a7cf$exports = {};
7
+
8
+ $parcel$export($458b0a5536c1a7cf$exports, "useControlledState", () => $458b0a5536c1a7cf$export$40bfa8c7b0832715);
9
+
10
+ function $458b0a5536c1a7cf$export$40bfa8c7b0832715(value1, defaultValue, onChange) {
11
+ let [stateValue, setStateValue] = $6imuh$useState(value1 || defaultValue);
12
+ let ref = $6imuh$useRef(value1 !== undefined);
13
+ let wasControlled = ref.current;
14
+ let isControlled = value1 !== undefined;
15
+ // Internal state reference for useCallback
16
+ let stateRef = $6imuh$useRef(stateValue);
17
+ if (wasControlled !== isControlled) console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);
18
+ ref.current = isControlled;
19
+ let setValue = $6imuh$useCallback((value2, ...args)=>{
20
+ let onChangeCaller = (value, ...onChangeArgs)=>{
21
+ if (onChange) {
22
+ if (!Object.is(stateRef.current, value)) onChange(value, ...onChangeArgs);
23
+ }
24
+ if (!isControlled) stateRef.current = value;
25
+ };
26
+ if (typeof value2 === 'function') {
27
+ console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');
28
+ // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates
29
+ // when someone using useControlledState calls setControlledState(myFunc)
30
+ // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc
31
+ // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning
32
+ // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same
33
+ let updateFunction = (oldValue, ...functionArgs)=>{
34
+ let interceptedValue = value2(isControlled ? stateRef.current : oldValue, ...functionArgs);
35
+ onChangeCaller(interceptedValue, ...args);
36
+ if (!isControlled) return interceptedValue;
37
+ return oldValue;
38
+ };
39
+ setStateValue(updateFunction);
40
+ } else {
41
+ if (!isControlled) setStateValue(value2);
42
+ onChangeCaller(value2, ...args);
52
43
  }
53
-
54
- return oldValue;
55
- };
56
-
57
- setStateValue(updateFunction);
58
- } else {
59
- if (!isControlled) {
60
- setStateValue(value);
61
- }
62
-
63
- onChangeCaller(value, ...args);
64
- }
65
- }, [isControlled, onChange]); // If a controlled component's value prop changes, we need to update stateRef
66
-
67
- if (isControlled) {
68
- stateRef.current = value;
69
- } else {
70
- value = stateValue;
71
- }
72
-
73
- return [value, setValue];
44
+ }, [
45
+ isControlled,
46
+ onChange
47
+ ]);
48
+ // If a controlled component's value prop changes, we need to update stateRef
49
+ if (isControlled) stateRef.current = value1;
50
+ else value1 = stateValue;
51
+ return [
52
+ value1,
53
+ setValue
54
+ ];
74
55
  }
75
56
 
76
- /*
77
- * Copyright 2020 Adobe. All rights reserved.
78
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
79
- * you may not use this file except in compliance with the License. You may obtain a copy
80
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
81
- *
82
- * Unless required by applicable law or agreed to in writing, software distributed under
83
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
84
- * OF ANY KIND, either express or implied. See the License for the specific language
85
- * governing permissions and limitations under the License.
86
- */
87
-
88
- /**
89
- * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
90
- */
91
- export function clamp(value, min, max) {
92
- if (min === void 0) {
93
- min = -Infinity;
94
- }
95
57
 
96
- if (max === void 0) {
97
- max = Infinity;
98
- }
58
+ var $9446cca9a3875146$exports = {};
99
59
 
100
- let newValue = Math.min(Math.max(value, min), max);
101
- return newValue;
60
+ $parcel$export($9446cca9a3875146$exports, "clamp", () => $9446cca9a3875146$export$7d15b64cf5a3a4c4);
61
+ $parcel$export($9446cca9a3875146$exports, "snapValueToStep", () => $9446cca9a3875146$export$cb6e0bb50bc19463);
62
+ $parcel$export($9446cca9a3875146$exports, "toFixedNumber", () => $9446cca9a3875146$export$b6268554fba451f);
63
+ function $9446cca9a3875146$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {
64
+ let newValue = Math.min(Math.max(value, min), max);
65
+ return newValue;
102
66
  }
103
- export function snapValueToStep(value, min, max, step) {
104
- let remainder = (value - (isNaN(min) ? 0 : min)) % step;
105
- let snappedValue = Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder;
106
-
107
- if (!isNaN(min)) {
108
- if (snappedValue < min) {
109
- snappedValue = min;
110
- } else if (!isNaN(max) && snappedValue > max) {
111
- snappedValue = min + Math.floor((max - min) / step) * step;
67
+ function $9446cca9a3875146$export$cb6e0bb50bc19463(value, min, max, step) {
68
+ let remainder = (value - (isNaN(min) ? 0 : min)) % step;
69
+ let snappedValue = Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder;
70
+ if (!isNaN(min)) {
71
+ if (snappedValue < min) snappedValue = min;
72
+ else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor((max - min) / step) * step;
73
+ } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor(max / step) * step;
74
+ // correct floating point behavior by rounding to step precision
75
+ let string = step.toString();
76
+ let index = string.indexOf('.');
77
+ let precision = index >= 0 ? string.length - index : 0;
78
+ if (precision > 0) {
79
+ let pow = Math.pow(10, precision);
80
+ snappedValue = Math.round(snappedValue * pow) / pow;
112
81
  }
113
- } else if (!isNaN(max) && snappedValue > max) {
114
- snappedValue = Math.floor(max / step) * step;
115
- } // correct floating point behavior by rounding to step precision
116
-
117
-
118
- let string = step.toString();
119
- let index = string.indexOf('.');
120
- let precision = index >= 0 ? string.length - index : 0;
82
+ return snappedValue;
83
+ }
84
+ function $9446cca9a3875146$export$b6268554fba451f(value, digits, base = 10) {
85
+ const pow = Math.pow(base, digits);
86
+ return Math.round(value * pow) / pow;
87
+ }
121
88
 
122
- if (precision > 0) {
123
- let pow = Math.pow(10, precision);
124
- snappedValue = Math.round(snappedValue * pow) / pow;
125
- }
126
89
 
127
- return snappedValue;
128
- }
129
- /* Takes a value and rounds off to the number of digits. */
130
90
 
131
- export function toFixedNumber(value, digits, base) {
132
- if (base === void 0) {
133
- base = 10;
134
- }
135
91
 
136
- const pow = Math.pow(base, digits);
137
- return Math.round(value * pow) / pow;
138
- }
92
+ export {$458b0a5536c1a7cf$export$40bfa8c7b0832715 as useControlledState, $9446cca9a3875146$export$7d15b64cf5a3a4c4 as clamp, $9446cca9a3875146$export$cb6e0bb50bc19463 as snapValueToStep, $9446cca9a3875146$export$b6268554fba451f as toFixedNumber};
139
93
  //# sourceMappingURL=module.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["./packages/@react-stately/utils/src/useControlledState.ts","./packages/@react-stately/utils/src/number.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useRef, useState} from 'react';\n\nexport function useControlledState<T>(\n value: T,\n defaultValue: T,\n onChange: (value: T, ...args: any[]) => void\n): [T, (value: T | ((prevState: T) => T), ...args: any[]) => void] {\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let ref = useRef(value !== undefined);\n let wasControlled = ref.current;\n let isControlled = value !== undefined;\n // Internal state reference for useCallback\n let stateRef = useRef(stateValue);\n if (wasControlled !== isControlled) {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n\n ref.current = isControlled;\n\n let setValue = useCallback((value, ...args) => {\n let onChangeCaller = (value, ...onChangeArgs) => {\n if (onChange) {\n if (!Object.is(stateRef.current, value)) {\n onChange(value, ...onChangeArgs);\n }\n }\n if (!isControlled) {\n stateRef.current = value;\n }\n };\n\n if (typeof value === 'function') {\n // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n // when someone using useControlledState calls setControlledState(myFunc)\n // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n let updateFunction = (oldValue, ...functionArgs) => {\n let interceptedValue = value(isControlled ? stateRef.current : oldValue, ...functionArgs);\n onChangeCaller(interceptedValue, ...args);\n if (!isControlled) {\n return interceptedValue;\n }\n return oldValue;\n };\n setStateValue(updateFunction);\n } else {\n if (!isControlled) {\n setStateValue(value);\n }\n onChangeCaller(value, ...args);\n }\n }, [isControlled, onChange]);\n\n // If a controlled component's value prop changes, we need to update stateRef\n if (isControlled) {\n stateRef.current = value;\n } else {\n value = stateValue;\n }\n\n return [value, setValue];\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\n/**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */\nexport function clamp(value: number, min: number = -Infinity, max: number = Infinity): number {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\n\nexport function snapValueToStep(value: number, min: number, max: number, step: number): number {\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor((max - min) / step) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(max / step) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n let string = step.toString();\n let index = string.indexOf('.');\n let precision = index >= 0 ? string.length - index : 0;\n\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n snappedValue = Math.round(snappedValue * pow) / pow;\n }\n\n return snappedValue;\n}\n\n/* Takes a value and rounds off to the number of digits. */\nexport function toFixedNumber(value: number, digits: number, base: number = 10): number {\n const pow = Math.pow(base, digits);\n\n return Math.round(value * pow) / pow;\n}\n"],"names":["useControlledState","value","defaultValue","onChange","stateValue","setStateValue","useState","ref","useRef","undefined","wasControlled","current","isControlled","stateRef","console","warn","setValue","useCallback","args","onChangeCaller","Object","is","onChangeArgs","updateFunction","oldValue","functionArgs","interceptedValue","clamp","min","max","Infinity","newValue","Math","snapValueToStep","step","remainder","isNaN","snappedValue","abs","sign","floor","string","toString","index","indexOf","precision","length","pow","round","toFixedNumber","digits","base"],"version":3,"file":"module.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-stately/utils/src/index.ts","packages/@react-stately/utils/src/useControlledState.ts","packages/@react-stately/utils/src/number.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport * from './useControlledState';\nexport * from './number';\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 {useCallback, useRef, useState} from 'react';\n\nexport function useControlledState<T>(\n value: T,\n defaultValue: T,\n onChange: (value: T, ...args: any[]) => void\n): [T, (value: T, ...args: any[]) => void] {\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let ref = useRef(value !== undefined);\n let wasControlled = ref.current;\n let isControlled = value !== undefined;\n // Internal state reference for useCallback\n let stateRef = useRef(stateValue);\n if (wasControlled !== isControlled) {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n\n ref.current = isControlled;\n\n let setValue = useCallback((value, ...args) => {\n let onChangeCaller = (value, ...onChangeArgs) => {\n if (onChange) {\n if (!Object.is(stateRef.current, value)) {\n onChange(value, ...onChangeArgs);\n }\n }\n if (!isControlled) {\n stateRef.current = value;\n }\n };\n\n if (typeof value === 'function') {\n console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');\n // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n // when someone using useControlledState calls setControlledState(myFunc)\n // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n let updateFunction = (oldValue, ...functionArgs) => {\n let interceptedValue = value(isControlled ? stateRef.current : oldValue, ...functionArgs);\n onChangeCaller(interceptedValue, ...args);\n if (!isControlled) {\n return interceptedValue;\n }\n return oldValue;\n };\n setStateValue(updateFunction);\n } else {\n if (!isControlled) {\n setStateValue(value);\n }\n onChangeCaller(value, ...args);\n }\n }, [isControlled, onChange]);\n\n // If a controlled component's value prop changes, we need to update stateRef\n if (isControlled) {\n stateRef.current = value;\n } else {\n value = stateValue;\n }\n\n return [value, setValue];\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\n/**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */\nexport function clamp(value: number, min: number = -Infinity, max: number = Infinity): number {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\n\nexport function snapValueToStep(value: number, min: number, max: number, step: number): number {\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor((max - min) / step) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(max / step) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n let string = step.toString();\n let index = string.indexOf('.');\n let precision = index >= 0 ? string.length - index : 0;\n\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n snappedValue = Math.round(snappedValue * pow) / pow;\n }\n\n return snappedValue;\n}\n\n/* Takes a value and rounds off to the number of digits. */\nexport function toFixedNumber(value: number, digits: number, base: number = 10): number {\n const pow = Math.pow(base, digits);\n\n return Math.round(value * pow) / pow;\n}\n"],"names":[],"version":3,"file":"module.js.map"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export function useControlledState<T>(value: T, defaultValue: T, onChange: (value: T, ...args: any[]) => void): [T, (value: T | ((prevState: T) => T), ...args: any[]) => void];
1
+ export function useControlledState<T>(value: T, defaultValue: T, onChange: (value: T, ...args: any[]) => void): [T, (value: T, ...args: any[]) => void];
2
2
  /**
3
3
  * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
4
4
  */
@@ -1 +1 @@
1
- {"mappings":"AAcA,mCAAmC,CAAC,EAClC,KAAK,EAAE,CAAC,EACR,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAC3C,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAwDjE;AC9DD;A;GAEG;AACH,sBAAsB,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,EAAE,GAAG,GAAE,MAAiB,GAAG,MAAM,CAG5F;AAED,gCAAgC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2B7F;AAGD,8BAA8B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAItF","sources":["./packages/@react-stately/utils/src/packages/@react-stately/utils/src/useControlledState.ts","./packages/@react-stately/utils/src/packages/@react-stately/utils/src/number.ts","./packages/@react-stately/utils/src/packages/@react-stately/utils/src/index.ts"],"sourcesContent":[null,null,null],"names":[],"version":3,"file":"types.d.ts.map"}
1
+ {"mappings":"AAcA,mCAAmC,CAAC,EAClC,KAAK,EAAE,CAAC,EACR,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAC3C,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAyDzC;AC/DD;;GAEG;AACH,sBAAsB,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,EAAE,GAAG,GAAE,MAAiB,GAAG,MAAM,CAG5F;AAED,gCAAgC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2B7F;AAGD,8BAA8B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAItF","sources":["packages/@react-stately/utils/src/packages/@react-stately/utils/src/useControlledState.ts","packages/@react-stately/utils/src/packages/@react-stately/utils/src/number.ts","packages/@react-stately/utils/src/packages/@react-stately/utils/src/index.ts","packages/@react-stately/utils/src/index.ts"],"sourcesContent":[null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport * from './useControlledState';\nexport * from './number';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-stately/utils",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "description": "Spectrum UI components in React",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/main.js",
@@ -17,7 +17,7 @@
17
17
  "url": "https://github.com/adobe/react-spectrum"
18
18
  },
19
19
  "peerDependencies": {
20
- "react": "^16.8.0 || ^17.0.0-rc.1"
20
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
21
21
  },
22
22
  "dependencies": {
23
23
  "@babel/runtime": "^7.6.2"
@@ -25,5 +25,5 @@
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
- "gitHead": "896eabe5521a0349a675c4773ed7629addd4b8c4"
28
+ "gitHead": "8f921ec5094e7c2b3c301bcb6133372e35a2052b"
29
29
  }
@@ -16,7 +16,7 @@ export function useControlledState<T>(
16
16
  value: T,
17
17
  defaultValue: T,
18
18
  onChange: (value: T, ...args: any[]) => void
19
- ): [T, (value: T | ((prevState: T) => T), ...args: any[]) => void] {
19
+ ): [T, (value: T, ...args: any[]) => void] {
20
20
  let [stateValue, setStateValue] = useState(value || defaultValue);
21
21
  let ref = useRef(value !== undefined);
22
22
  let wasControlled = ref.current;
@@ -42,6 +42,7 @@ export function useControlledState<T>(
42
42
  };
43
43
 
44
44
  if (typeof value === 'function') {
45
+ console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');
45
46
  // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates
46
47
  // when someone using useControlledState calls setControlledState(myFunc)
47
48
  // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc