@react-stately/utils 3.11.0 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/import.mjs +3 -3
- package/dist/main.js +6 -6
- package/dist/main.js.map +1 -1
- package/dist/module.js +3 -3
- package/dist/module.js.map +1 -1
- package/dist/types/src/index.d.ts +2 -0
- package/package.json +17 -12
- package/src/index.ts +3 -2
- package/dist/number.main.js +0 -61
- package/dist/number.main.js.map +0 -1
- package/dist/number.mjs +0 -54
- package/dist/number.module.js +0 -54
- package/dist/number.module.js.map +0 -1
- package/dist/types.d.ts +0 -11
- package/dist/types.d.ts.map +0 -1
- package/dist/useControlledState.main.js +0 -72
- package/dist/useControlledState.main.js.map +0 -1
- package/dist/useControlledState.mjs +0 -63
- package/dist/useControlledState.module.js +0 -63
- package/dist/useControlledState.module.js.map +0 -1
- package/src/number.ts +0 -71
- package/src/useControlledState.ts +0 -66
package/dist/import.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {useControlledState as $
|
|
2
|
-
import {clamp as $
|
|
1
|
+
import {useControlledState as $fd7ccfc2ebe0ae74$re_export$useControlledState} from "react-stately/useControlledState";
|
|
2
|
+
import {clamp as $fd7ccfc2ebe0ae74$re_export$clamp, snapValueToStep as $fd7ccfc2ebe0ae74$re_export$snapValueToStep, toFixedNumber as $fd7ccfc2ebe0ae74$re_export$toFixedNumber} from "react-stately/private/utils/number";
|
|
3
3
|
|
|
4
4
|
/*
|
|
5
5
|
* Copyright 2020 Adobe. All rights reserved.
|
|
@@ -15,5 +15,5 @@ import {clamp as $9446cca9a3875146$export$7d15b64cf5a3a4c4, snapValueToStep as $
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
export {$
|
|
18
|
+
export {$fd7ccfc2ebe0ae74$re_export$useControlledState as useControlledState, $fd7ccfc2ebe0ae74$re_export$clamp as clamp, $fd7ccfc2ebe0ae74$re_export$snapValueToStep as snapValueToStep, $fd7ccfc2ebe0ae74$re_export$toFixedNumber as toFixedNumber};
|
|
19
19
|
//# sourceMappingURL=module.js.map
|
package/dist/main.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
var $
|
|
2
|
-
var $
|
|
1
|
+
var $g1Hlx$reactstatelyuseControlledState = require("react-stately/useControlledState");
|
|
2
|
+
var $g1Hlx$reactstatelyprivateutilsnumber = require("react-stately/private/utils/number");
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
function $parcel$export(e, n, v, s) {
|
|
6
6
|
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
$parcel$export(module.exports, "useControlledState", ()
|
|
10
|
-
$parcel$export(module.exports, "clamp", ()
|
|
11
|
-
$parcel$export(module.exports, "snapValueToStep", ()
|
|
12
|
-
$parcel$export(module.exports, "toFixedNumber", ()
|
|
9
|
+
$parcel$export(module.exports, "useControlledState", function () { return $g1Hlx$reactstatelyuseControlledState.useControlledState; });
|
|
10
|
+
$parcel$export(module.exports, "clamp", function () { return $g1Hlx$reactstatelyprivateutilsnumber.clamp; });
|
|
11
|
+
$parcel$export(module.exports, "snapValueToStep", function () { return $g1Hlx$reactstatelyprivateutilsnumber.snapValueToStep; });
|
|
12
|
+
$parcel$export(module.exports, "toFixedNumber", function () { return $g1Hlx$reactstatelyprivateutilsnumber.toFixedNumber; });
|
|
13
13
|
/*
|
|
14
14
|
* Copyright 2020 Adobe. All rights reserved.
|
|
15
15
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-stately/utils/src/index.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 */\nexport {useControlledState} from '
|
|
1
|
+
{"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-stately/utils/src/index.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 */\nexport {useControlledState} from 'react-stately/useControlledState';\n\nexport {clamp, snapValueToStep, toFixedNumber} from 'react-stately/private/utils/number';\n"],"names":[],"version":3,"file":"main.js.map"}
|
package/dist/module.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {useControlledState as $
|
|
2
|
-
import {clamp as $
|
|
1
|
+
import {useControlledState as $fd7ccfc2ebe0ae74$re_export$useControlledState} from "react-stately/useControlledState";
|
|
2
|
+
import {clamp as $fd7ccfc2ebe0ae74$re_export$clamp, snapValueToStep as $fd7ccfc2ebe0ae74$re_export$snapValueToStep, toFixedNumber as $fd7ccfc2ebe0ae74$re_export$toFixedNumber} from "react-stately/private/utils/number";
|
|
3
3
|
|
|
4
4
|
/*
|
|
5
5
|
* Copyright 2020 Adobe. All rights reserved.
|
|
@@ -15,5 +15,5 @@ import {clamp as $9446cca9a3875146$export$7d15b64cf5a3a4c4, snapValueToStep as $
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
export {$
|
|
18
|
+
export {$fd7ccfc2ebe0ae74$re_export$useControlledState as useControlledState, $fd7ccfc2ebe0ae74$re_export$clamp as clamp, $fd7ccfc2ebe0ae74$re_export$snapValueToStep as snapValueToStep, $fd7ccfc2ebe0ae74$re_export$toFixedNumber as toFixedNumber};
|
|
19
19
|
//# sourceMappingURL=module.js.map
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-stately/utils/src/index.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 */\nexport {useControlledState} from '
|
|
1
|
+
{"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-stately/utils/src/index.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 */\nexport {useControlledState} from 'react-stately/useControlledState';\n\nexport {clamp, snapValueToStep, toFixedNumber} from 'react-stately/private/utils/number';\n"],"names":[],"version":3,"file":"module.js.map"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-stately/utils",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.0",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
7
7
|
"module": "dist/module.js",
|
|
8
8
|
"exports": {
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
"./dist/types.d.ts",
|
|
12
|
-
"./
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"
|
|
9
|
+
".": {
|
|
10
|
+
"source": "./src/index.ts",
|
|
11
|
+
"types": "./dist/types/src/index.d.ts",
|
|
12
|
+
"import": "./dist/import.mjs",
|
|
13
|
+
"require": "./dist/main.js"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
16
|
},
|
|
17
|
-
"types": "dist/types.d.ts",
|
|
17
|
+
"types": "dist/types/src/index.d.ts",
|
|
18
18
|
"source": "src/index.ts",
|
|
19
19
|
"files": [
|
|
20
20
|
"dist",
|
|
@@ -26,13 +26,18 @@
|
|
|
26
26
|
"url": "https://github.com/adobe/react-spectrum"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
|
|
29
|
+
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
|
|
30
|
+
"react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@swc/helpers": "^0.5.0"
|
|
33
|
+
"@swc/helpers": "^0.5.0",
|
|
34
|
+
"react-stately": "3.46.0"
|
|
33
35
|
},
|
|
34
36
|
"publishConfig": {
|
|
35
37
|
"access": "public"
|
|
36
38
|
},
|
|
37
|
-
"
|
|
39
|
+
"targets": {
|
|
40
|
+
"types": false
|
|
41
|
+
},
|
|
42
|
+
"gitHead": "a6999bdf494a2e9c0381a5881908328bdd22ddae"
|
|
38
43
|
}
|
package/src/index.ts
CHANGED
|
@@ -9,5 +9,6 @@
|
|
|
9
9
|
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
|
-
export {useControlledState} from '
|
|
13
|
-
|
|
12
|
+
export {useControlledState} from 'react-stately/useControlledState';
|
|
13
|
+
|
|
14
|
+
export {clamp, snapValueToStep, toFixedNumber} from 'react-stately/private/utils/number';
|
package/dist/number.main.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
function $parcel$export(e, n, v, s) {
|
|
3
|
-
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
$parcel$export(module.exports, "clamp", () => $ac8e4d4816275668$export$7d15b64cf5a3a4c4);
|
|
7
|
-
$parcel$export(module.exports, "snapValueToStep", () => $ac8e4d4816275668$export$cb6e0bb50bc19463);
|
|
8
|
-
$parcel$export(module.exports, "toFixedNumber", () => $ac8e4d4816275668$export$b6268554fba451f);
|
|
9
|
-
/*
|
|
10
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
11
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
12
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
13
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
-
*
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
16
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
17
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
18
|
-
* governing permissions and limitations under the License.
|
|
19
|
-
*/ /**
|
|
20
|
-
* Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
|
|
21
|
-
*/ function $ac8e4d4816275668$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {
|
|
22
|
-
let newValue = Math.min(Math.max(value, min), max);
|
|
23
|
-
return newValue;
|
|
24
|
-
}
|
|
25
|
-
function $ac8e4d4816275668$export$e1a7b8e69ef6c52f(value, step) {
|
|
26
|
-
let roundedValue = value;
|
|
27
|
-
let precision = 0;
|
|
28
|
-
let stepString = step.toString();
|
|
29
|
-
// Handle negative exponents in exponential notation (e.g., "1e-7" → precision 8)
|
|
30
|
-
let eIndex = stepString.toLowerCase().indexOf('e-');
|
|
31
|
-
if (eIndex > 0) precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;
|
|
32
|
-
else {
|
|
33
|
-
let pointIndex = stepString.indexOf('.');
|
|
34
|
-
if (pointIndex >= 0) precision = stepString.length - pointIndex;
|
|
35
|
-
}
|
|
36
|
-
if (precision > 0) {
|
|
37
|
-
let pow = Math.pow(10, precision);
|
|
38
|
-
roundedValue = Math.round(roundedValue * pow) / pow;
|
|
39
|
-
}
|
|
40
|
-
return roundedValue;
|
|
41
|
-
}
|
|
42
|
-
function $ac8e4d4816275668$export$cb6e0bb50bc19463(value, min, max, step) {
|
|
43
|
-
min = Number(min);
|
|
44
|
-
max = Number(max);
|
|
45
|
-
let remainder = (value - (isNaN(min) ? 0 : min)) % step;
|
|
46
|
-
let snappedValue = $ac8e4d4816275668$export$e1a7b8e69ef6c52f(Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder, step);
|
|
47
|
-
if (!isNaN(min)) {
|
|
48
|
-
if (snappedValue < min) snappedValue = min;
|
|
49
|
-
else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor($ac8e4d4816275668$export$e1a7b8e69ef6c52f((max - min) / step, step)) * step;
|
|
50
|
-
} else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor($ac8e4d4816275668$export$e1a7b8e69ef6c52f(max / step, step)) * step;
|
|
51
|
-
// correct floating point behavior by rounding to step precision
|
|
52
|
-
snappedValue = $ac8e4d4816275668$export$e1a7b8e69ef6c52f(snappedValue, step);
|
|
53
|
-
return snappedValue;
|
|
54
|
-
}
|
|
55
|
-
function $ac8e4d4816275668$export$b6268554fba451f(value, digits, base = 10) {
|
|
56
|
-
const pow = Math.pow(base, digits);
|
|
57
|
-
return Math.round(value * pow) / pow;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=number.main.js.map
|
package/dist/number.main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;AAAA;;;;;;;;;;CAUC,GAED;;CAEC,GACM,SAAS,0CAAM,KAAa,EAAE,MAAc,CAAC,QAAQ,EAAE,MAAc,QAAQ;IAClF,IAAI,WAAW,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,MAAM;IAC9C,OAAO;AACT;AAEO,SAAS,0CAAqB,KAAa,EAAE,IAAY;IAC9D,IAAI,eAAe;IACnB,IAAI,YAAY;IAChB,IAAI,aAAa,KAAK,QAAQ;IAC9B,iFAAiF;IACjF,IAAI,SAAS,WAAW,WAAW,GAAG,OAAO,CAAC;IAC9C,IAAI,SAAS,GACX,YAAY,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,WAAW;SAC1D;QACL,IAAI,aAAa,WAAW,OAAO,CAAC;QACpC,IAAI,cAAc,GAChB,YAAY,WAAW,MAAM,GAAG;IAEpC;IACA,IAAI,YAAY,GAAG;QACjB,IAAI,MAAM,KAAK,GAAG,CAAC,IAAI;QACvB,eAAe,KAAK,KAAK,CAAC,eAAe,OAAO;IAClD;IACA,OAAO;AACT;AAEO,SAAS,0CAAgB,KAAa,EAAE,GAAuB,EAAE,GAAuB,EAAE,IAAY;IAC3G,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,YAAa,AAAC,CAAA,QAAS,CAAA,MAAM,OAAO,IAAI,GAAE,CAAC,IAAK;IACpD,IAAI,eAAe,0CAAqB,KAAK,GAAG,CAAC,aAAa,KAAK,OAC/D,QAAQ,KAAK,IAAI,CAAC,aAAc,CAAA,OAAO,KAAK,GAAG,CAAC,UAAS,IACzD,QAAQ,WAAW;IAEvB,IAAI,CAAC,MAAM,MAAM;QACf,IAAI,eAAe,KACjB,eAAe;aACV,IAAI,CAAC,MAAM,QAAQ,eAAe,KACvC,eAAe,MAAM,KAAK,KAAK,CAAC,0CAAqB,AAAC,CAAA,MAAM,GAAE,IAAK,MAAM,SAAS;IAEtF,OAAO,IAAI,CAAC,MAAM,QAAQ,eAAe,KACvC,eAAe,KAAK,KAAK,CAAC,0CAAqB,MAAM,MAAM,SAAS;IAGtE,gEAAgE;IAChE,eAAe,0CAAqB,cAAc;IAElD,OAAO;AACT;AAGO,SAAS,yCAAc,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE;IAC5E,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM;IAE3B,OAAO,KAAK,KAAK,CAAC,QAAQ,OAAO;AACnC","sources":["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\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 roundToStepPrecision(value: number, step: number): number {\n let roundedValue = value;\n let precision = 0;\n let stepString = step.toString();\n // Handle negative exponents in exponential notation (e.g., \"1e-7\" → precision 8)\n let eIndex = stepString.toLowerCase().indexOf('e-');\n if (eIndex > 0) {\n precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;\n } else {\n let pointIndex = stepString.indexOf('.');\n if (pointIndex >= 0) {\n precision = stepString.length - pointIndex;\n }\n }\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n roundedValue = Math.round(roundedValue * pow) / pow;\n }\n return roundedValue;\n}\n\nexport function snapValueToStep(value: number, min: number | undefined, max: number | undefined, step: number): number {\n min = Number(min);\n max = Number(max);\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = roundToStepPrecision(Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder, step);\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor(roundToStepPrecision((max - min) / step, step)) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(roundToStepPrecision(max / step, step)) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n snappedValue = roundToStepPrecision(snappedValue, step);\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":"number.main.js.map"}
|
package/dist/number.mjs
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/ /**
|
|
12
|
-
* Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
|
|
13
|
-
*/ function $9446cca9a3875146$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {
|
|
14
|
-
let newValue = Math.min(Math.max(value, min), max);
|
|
15
|
-
return newValue;
|
|
16
|
-
}
|
|
17
|
-
function $9446cca9a3875146$export$e1a7b8e69ef6c52f(value, step) {
|
|
18
|
-
let roundedValue = value;
|
|
19
|
-
let precision = 0;
|
|
20
|
-
let stepString = step.toString();
|
|
21
|
-
// Handle negative exponents in exponential notation (e.g., "1e-7" → precision 8)
|
|
22
|
-
let eIndex = stepString.toLowerCase().indexOf('e-');
|
|
23
|
-
if (eIndex > 0) precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;
|
|
24
|
-
else {
|
|
25
|
-
let pointIndex = stepString.indexOf('.');
|
|
26
|
-
if (pointIndex >= 0) precision = stepString.length - pointIndex;
|
|
27
|
-
}
|
|
28
|
-
if (precision > 0) {
|
|
29
|
-
let pow = Math.pow(10, precision);
|
|
30
|
-
roundedValue = Math.round(roundedValue * pow) / pow;
|
|
31
|
-
}
|
|
32
|
-
return roundedValue;
|
|
33
|
-
}
|
|
34
|
-
function $9446cca9a3875146$export$cb6e0bb50bc19463(value, min, max, step) {
|
|
35
|
-
min = Number(min);
|
|
36
|
-
max = Number(max);
|
|
37
|
-
let remainder = (value - (isNaN(min) ? 0 : min)) % step;
|
|
38
|
-
let snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder, step);
|
|
39
|
-
if (!isNaN(min)) {
|
|
40
|
-
if (snappedValue < min) snappedValue = min;
|
|
41
|
-
else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f((max - min) / step, step)) * step;
|
|
42
|
-
} else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f(max / step, step)) * step;
|
|
43
|
-
// correct floating point behavior by rounding to step precision
|
|
44
|
-
snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(snappedValue, step);
|
|
45
|
-
return snappedValue;
|
|
46
|
-
}
|
|
47
|
-
function $9446cca9a3875146$export$b6268554fba451f(value, digits, base = 10) {
|
|
48
|
-
const pow = Math.pow(base, digits);
|
|
49
|
-
return Math.round(value * pow) / pow;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
export {$9446cca9a3875146$export$7d15b64cf5a3a4c4 as clamp, $9446cca9a3875146$export$e1a7b8e69ef6c52f as roundToStepPrecision, $9446cca9a3875146$export$cb6e0bb50bc19463 as snapValueToStep, $9446cca9a3875146$export$b6268554fba451f as toFixedNumber};
|
|
54
|
-
//# sourceMappingURL=number.module.js.map
|
package/dist/number.module.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/ /**
|
|
12
|
-
* Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
|
|
13
|
-
*/ function $9446cca9a3875146$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {
|
|
14
|
-
let newValue = Math.min(Math.max(value, min), max);
|
|
15
|
-
return newValue;
|
|
16
|
-
}
|
|
17
|
-
function $9446cca9a3875146$export$e1a7b8e69ef6c52f(value, step) {
|
|
18
|
-
let roundedValue = value;
|
|
19
|
-
let precision = 0;
|
|
20
|
-
let stepString = step.toString();
|
|
21
|
-
// Handle negative exponents in exponential notation (e.g., "1e-7" → precision 8)
|
|
22
|
-
let eIndex = stepString.toLowerCase().indexOf('e-');
|
|
23
|
-
if (eIndex > 0) precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;
|
|
24
|
-
else {
|
|
25
|
-
let pointIndex = stepString.indexOf('.');
|
|
26
|
-
if (pointIndex >= 0) precision = stepString.length - pointIndex;
|
|
27
|
-
}
|
|
28
|
-
if (precision > 0) {
|
|
29
|
-
let pow = Math.pow(10, precision);
|
|
30
|
-
roundedValue = Math.round(roundedValue * pow) / pow;
|
|
31
|
-
}
|
|
32
|
-
return roundedValue;
|
|
33
|
-
}
|
|
34
|
-
function $9446cca9a3875146$export$cb6e0bb50bc19463(value, min, max, step) {
|
|
35
|
-
min = Number(min);
|
|
36
|
-
max = Number(max);
|
|
37
|
-
let remainder = (value - (isNaN(min) ? 0 : min)) % step;
|
|
38
|
-
let snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder, step);
|
|
39
|
-
if (!isNaN(min)) {
|
|
40
|
-
if (snappedValue < min) snappedValue = min;
|
|
41
|
-
else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f((max - min) / step, step)) * step;
|
|
42
|
-
} else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f(max / step, step)) * step;
|
|
43
|
-
// correct floating point behavior by rounding to step precision
|
|
44
|
-
snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(snappedValue, step);
|
|
45
|
-
return snappedValue;
|
|
46
|
-
}
|
|
47
|
-
function $9446cca9a3875146$export$b6268554fba451f(value, digits, base = 10) {
|
|
48
|
-
const pow = Math.pow(base, digits);
|
|
49
|
-
return Math.round(value * pow) / pow;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
export {$9446cca9a3875146$export$7d15b64cf5a3a4c4 as clamp, $9446cca9a3875146$export$e1a7b8e69ef6c52f as roundToStepPrecision, $9446cca9a3875146$export$cb6e0bb50bc19463 as snapValueToStep, $9446cca9a3875146$export$b6268554fba451f as toFixedNumber};
|
|
54
|
-
//# sourceMappingURL=number.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA;;;;;;;;;;CAUC,GAED;;CAEC,GACM,SAAS,0CAAM,KAAa,EAAE,MAAc,CAAC,QAAQ,EAAE,MAAc,QAAQ;IAClF,IAAI,WAAW,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,MAAM;IAC9C,OAAO;AACT;AAEO,SAAS,0CAAqB,KAAa,EAAE,IAAY;IAC9D,IAAI,eAAe;IACnB,IAAI,YAAY;IAChB,IAAI,aAAa,KAAK,QAAQ;IAC9B,iFAAiF;IACjF,IAAI,SAAS,WAAW,WAAW,GAAG,OAAO,CAAC;IAC9C,IAAI,SAAS,GACX,YAAY,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,WAAW;SAC1D;QACL,IAAI,aAAa,WAAW,OAAO,CAAC;QACpC,IAAI,cAAc,GAChB,YAAY,WAAW,MAAM,GAAG;IAEpC;IACA,IAAI,YAAY,GAAG;QACjB,IAAI,MAAM,KAAK,GAAG,CAAC,IAAI;QACvB,eAAe,KAAK,KAAK,CAAC,eAAe,OAAO;IAClD;IACA,OAAO;AACT;AAEO,SAAS,0CAAgB,KAAa,EAAE,GAAuB,EAAE,GAAuB,EAAE,IAAY;IAC3G,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,YAAa,AAAC,CAAA,QAAS,CAAA,MAAM,OAAO,IAAI,GAAE,CAAC,IAAK;IACpD,IAAI,eAAe,0CAAqB,KAAK,GAAG,CAAC,aAAa,KAAK,OAC/D,QAAQ,KAAK,IAAI,CAAC,aAAc,CAAA,OAAO,KAAK,GAAG,CAAC,UAAS,IACzD,QAAQ,WAAW;IAEvB,IAAI,CAAC,MAAM,MAAM;QACf,IAAI,eAAe,KACjB,eAAe;aACV,IAAI,CAAC,MAAM,QAAQ,eAAe,KACvC,eAAe,MAAM,KAAK,KAAK,CAAC,0CAAqB,AAAC,CAAA,MAAM,GAAE,IAAK,MAAM,SAAS;IAEtF,OAAO,IAAI,CAAC,MAAM,QAAQ,eAAe,KACvC,eAAe,KAAK,KAAK,CAAC,0CAAqB,MAAM,MAAM,SAAS;IAGtE,gEAAgE;IAChE,eAAe,0CAAqB,cAAc;IAElD,OAAO;AACT;AAGO,SAAS,yCAAc,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE;IAC5E,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM;IAE3B,OAAO,KAAK,KAAK,CAAC,QAAQ,OAAO;AACnC","sources":["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\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 roundToStepPrecision(value: number, step: number): number {\n let roundedValue = value;\n let precision = 0;\n let stepString = step.toString();\n // Handle negative exponents in exponential notation (e.g., \"1e-7\" → precision 8)\n let eIndex = stepString.toLowerCase().indexOf('e-');\n if (eIndex > 0) {\n precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;\n } else {\n let pointIndex = stepString.indexOf('.');\n if (pointIndex >= 0) {\n precision = stepString.length - pointIndex;\n }\n }\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n roundedValue = Math.round(roundedValue * pow) / pow;\n }\n return roundedValue;\n}\n\nexport function snapValueToStep(value: number, min: number | undefined, max: number | undefined, step: number): number {\n min = Number(min);\n max = Number(max);\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = roundToStepPrecision(Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder, step);\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor(roundToStepPrecision((max - min) / step, step)) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(roundToStepPrecision(max / step, step)) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n snappedValue = roundToStepPrecision(snappedValue, step);\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":"number.module.js.map"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { SetStateAction } from "react";
|
|
2
|
-
export function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];
|
|
3
|
-
export function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];
|
|
4
|
-
/**
|
|
5
|
-
* Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
|
|
6
|
-
*/
|
|
7
|
-
export function clamp(value: number, min?: number, max?: number): number;
|
|
8
|
-
export function snapValueToStep(value: number, min: number | undefined, max: number | undefined, step: number): number;
|
|
9
|
-
export function toFixedNumber(value: number, digits: number, base?: number): number;
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";AAmBA,mCAAmC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAChO,mCAAmC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;ACRhO;;GAEG;AACH,sBAAsB,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,EAAE,GAAG,GAAE,MAAiB,GAAG,MAAM,CAG5F;AAuBD,gCAAgC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBrH;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 */\nexport {useControlledState} from './useControlledState';\nexport {clamp, snapValueToStep, toFixedNumber} from './number';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
var $ecn6s$react = require("react");
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
function $parcel$interopDefault(a) {
|
|
5
|
-
return a && a.__esModule ? a.default : a;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function $parcel$export(e, n, v, s) {
|
|
9
|
-
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
$parcel$export(module.exports, "useControlledState", () => $8d8fdfab47455712$export$40bfa8c7b0832715);
|
|
13
|
-
/*
|
|
14
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
15
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
16
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
17
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
-
*
|
|
19
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
20
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
21
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
22
|
-
* governing permissions and limitations under the License.
|
|
23
|
-
*/
|
|
24
|
-
var $8d8fdfab47455712$var$_React_useInsertionEffect;
|
|
25
|
-
// Use the earliest effect possible to reset the ref below.
|
|
26
|
-
const $8d8fdfab47455712$var$useEarlyEffect = typeof document !== 'undefined' ? ($8d8fdfab47455712$var$_React_useInsertionEffect = (0, ($parcel$interopDefault($ecn6s$react)))['useInsertionEffect']) !== null && $8d8fdfab47455712$var$_React_useInsertionEffect !== void 0 ? $8d8fdfab47455712$var$_React_useInsertionEffect : (0, ($parcel$interopDefault($ecn6s$react))).useLayoutEffect : ()=>{};
|
|
27
|
-
function $8d8fdfab47455712$export$40bfa8c7b0832715(value, defaultValue, onChange) {
|
|
28
|
-
// Store the value in both state and a ref. The state value will only be used when uncontrolled.
|
|
29
|
-
// The ref is used to track the most current value, which is passed to the function setState callback.
|
|
30
|
-
let [stateValue, setStateValue] = (0, $ecn6s$react.useState)(value || defaultValue);
|
|
31
|
-
let valueRef = (0, $ecn6s$react.useRef)(stateValue);
|
|
32
|
-
let isControlledRef = (0, $ecn6s$react.useRef)(value !== undefined);
|
|
33
|
-
let isControlled = value !== undefined;
|
|
34
|
-
(0, $ecn6s$react.useEffect)(()=>{
|
|
35
|
-
let wasControlled = isControlledRef.current;
|
|
36
|
-
if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);
|
|
37
|
-
isControlledRef.current = isControlled;
|
|
38
|
-
}, [
|
|
39
|
-
isControlled
|
|
40
|
-
]);
|
|
41
|
-
// After each render, update the ref to the current value.
|
|
42
|
-
// This ensures that the setState callback argument is reset.
|
|
43
|
-
// Note: the effect should not have any dependencies so that controlled values always reset.
|
|
44
|
-
let currentValue = isControlled ? value : stateValue;
|
|
45
|
-
$8d8fdfab47455712$var$useEarlyEffect(()=>{
|
|
46
|
-
valueRef.current = currentValue;
|
|
47
|
-
});
|
|
48
|
-
let [, forceUpdate] = (0, $ecn6s$react.useReducer)(()=>({}), {});
|
|
49
|
-
let setValue = (0, $ecn6s$react.useCallback)((value, ...args)=>{
|
|
50
|
-
// @ts-ignore - TS doesn't know that T cannot be a function.
|
|
51
|
-
let newValue = typeof value === 'function' ? value(valueRef.current) : value;
|
|
52
|
-
if (!Object.is(valueRef.current, newValue)) {
|
|
53
|
-
// Update the ref so that the next setState callback has the most recent value.
|
|
54
|
-
valueRef.current = newValue;
|
|
55
|
-
setStateValue(newValue);
|
|
56
|
-
// Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.
|
|
57
|
-
forceUpdate();
|
|
58
|
-
// Trigger onChange. Note that if setState is called multiple times in a single event,
|
|
59
|
-
// onChange will be called for each one instead of only once.
|
|
60
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(newValue, ...args);
|
|
61
|
-
}
|
|
62
|
-
}, [
|
|
63
|
-
onChange
|
|
64
|
-
]);
|
|
65
|
-
return [
|
|
66
|
-
currentValue,
|
|
67
|
-
setValue
|
|
68
|
-
];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=useControlledState.main.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;IAMG;AAFJ,2DAA2D;AAC3D,MAAM,uCAA+C,OAAO,aAAa,cACrE,CAAA,kDAAA,CAAA,GAAA,sCAAI,CAAC,CAAC,qBAAqB,cAA3B,6DAAA,kDAA+B,CAAA,GAAA,sCAAI,EAAE,eAAe,GACpD,KAAO;AAIJ,SAAS,0CAA6B,KAAQ,EAAE,YAAe,EAAE,QAAyC;IAC/G,gGAAgG;IAChG,sGAAsG;IACtG,IAAI,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAE,SAAS;IACpD,IAAI,WAAW,CAAA,GAAA,mBAAK,EAAE;IAEtB,IAAI,kBAAkB,CAAA,GAAA,mBAAK,EAAE,UAAU;IACvC,IAAI,eAAe,UAAU;IAC7B,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,gBAAgB,gBAAgB,OAAO;QAC3C,IAAI,kBAAkB,gBAAgB,QAAQ,GAAG,CAAC,QAAQ,KAAK,cAC7D,QAAQ,IAAI,CAAC,CAAC,+BAA+B,EAAE,gBAAgB,eAAe,eAAe,IAAI,EAAE,eAAe,eAAe,eAAe,CAAC,CAAC;QAEpJ,gBAAgB,OAAO,GAAG;IAC5B,GAAG;QAAC;KAAa;IAEjB,0DAA0D;IAC1D,6DAA6D;IAC7D,4FAA4F;IAC5F,IAAI,eAAe,eAAe,QAAQ;IAC1C,qCAAe;QACb,SAAS,OAAO,GAAG;IACrB;IAEA,IAAI,GAAG,YAAY,GAAG,CAAA,GAAA,uBAAS,EAAE,IAAO,CAAA,CAAC,CAAA,GAAI,CAAC;IAC9C,IAAI,WAAW,CAAA,GAAA,wBAAU,EAAE,CAAC,OAA0B,GAAG;QACvD,4DAA4D;QAC5D,IAAI,WAAW,OAAO,UAAU,aAAa,MAAM,SAAS,OAAO,IAAI;QACvE,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,WAAW;YAC1C,+EAA+E;YAC/E,SAAS,OAAO,GAAG;YAEnB,cAAc;YAEd,6GAA6G;YAC7G;YAEA,sFAAsF;YACtF,6DAA6D;YAC7D,qBAAA,+BAAA,SAAW,aAAa;QAC1B;IACF,GAAG;QAAC;KAAS;IAEb,OAAO;QAAC;QAAc;KAAS;AACjC","sources":["packages/@react-stately/utils/src/useControlledState.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 React, {SetStateAction, useCallback, useEffect, useReducer, useRef, useState} from 'react';\n\n// Use the earliest effect possible to reset the ref below.\nconst useEarlyEffect: typeof React.useLayoutEffect = typeof document !== 'undefined'\n ? React['useInsertionEffect'] ?? React.useLayoutEffect\n : () => {};\n\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void] {\n // Store the value in both state and a ref. The state value will only be used when uncontrolled.\n // The ref is used to track the most current value, which is passed to the function setState callback.\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let valueRef = useRef(stateValue);\n\n let isControlledRef = useRef(value !== undefined);\n let isControlled = value !== undefined;\n useEffect(() => {\n let wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n isControlledRef.current = isControlled;\n }, [isControlled]);\n\n // After each render, update the ref to the current value.\n // This ensures that the setState callback argument is reset.\n // Note: the effect should not have any dependencies so that controlled values always reset.\n let currentValue = isControlled ? value : stateValue;\n useEarlyEffect(() => {\n valueRef.current = currentValue;\n });\n\n let [, forceUpdate] = useReducer(() => ({}), {});\n let setValue = useCallback((value: SetStateAction<T>, ...args: any[]) => {\n // @ts-ignore - TS doesn't know that T cannot be a function.\n let newValue = typeof value === 'function' ? value(valueRef.current) : value;\n if (!Object.is(valueRef.current, newValue)) {\n // Update the ref so that the next setState callback has the most recent value.\n valueRef.current = newValue;\n\n setStateValue(newValue);\n\n // Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.\n forceUpdate();\n\n // Trigger onChange. Note that if setState is called multiple times in a single event,\n // onChange will be called for each one instead of only once.\n onChange?.(newValue, ...args);\n }\n }, [onChange]);\n\n return [currentValue, setValue];\n}\n"],"names":[],"version":3,"file":"useControlledState.main.js.map"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import $3whtM$react, {useState as $3whtM$useState, useRef as $3whtM$useRef, useEffect as $3whtM$useEffect, useReducer as $3whtM$useReducer, useCallback as $3whtM$useCallback} from "react";
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
5
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
7
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
10
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
11
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
12
|
-
* governing permissions and limitations under the License.
|
|
13
|
-
*/
|
|
14
|
-
var $458b0a5536c1a7cf$var$_React_useInsertionEffect;
|
|
15
|
-
// Use the earliest effect possible to reset the ref below.
|
|
16
|
-
const $458b0a5536c1a7cf$var$useEarlyEffect = typeof document !== 'undefined' ? ($458b0a5536c1a7cf$var$_React_useInsertionEffect = (0, $3whtM$react)['useInsertionEffect']) !== null && $458b0a5536c1a7cf$var$_React_useInsertionEffect !== void 0 ? $458b0a5536c1a7cf$var$_React_useInsertionEffect : (0, $3whtM$react).useLayoutEffect : ()=>{};
|
|
17
|
-
function $458b0a5536c1a7cf$export$40bfa8c7b0832715(value, defaultValue, onChange) {
|
|
18
|
-
// Store the value in both state and a ref. The state value will only be used when uncontrolled.
|
|
19
|
-
// The ref is used to track the most current value, which is passed to the function setState callback.
|
|
20
|
-
let [stateValue, setStateValue] = (0, $3whtM$useState)(value || defaultValue);
|
|
21
|
-
let valueRef = (0, $3whtM$useRef)(stateValue);
|
|
22
|
-
let isControlledRef = (0, $3whtM$useRef)(value !== undefined);
|
|
23
|
-
let isControlled = value !== undefined;
|
|
24
|
-
(0, $3whtM$useEffect)(()=>{
|
|
25
|
-
let wasControlled = isControlledRef.current;
|
|
26
|
-
if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);
|
|
27
|
-
isControlledRef.current = isControlled;
|
|
28
|
-
}, [
|
|
29
|
-
isControlled
|
|
30
|
-
]);
|
|
31
|
-
// After each render, update the ref to the current value.
|
|
32
|
-
// This ensures that the setState callback argument is reset.
|
|
33
|
-
// Note: the effect should not have any dependencies so that controlled values always reset.
|
|
34
|
-
let currentValue = isControlled ? value : stateValue;
|
|
35
|
-
$458b0a5536c1a7cf$var$useEarlyEffect(()=>{
|
|
36
|
-
valueRef.current = currentValue;
|
|
37
|
-
});
|
|
38
|
-
let [, forceUpdate] = (0, $3whtM$useReducer)(()=>({}), {});
|
|
39
|
-
let setValue = (0, $3whtM$useCallback)((value, ...args)=>{
|
|
40
|
-
// @ts-ignore - TS doesn't know that T cannot be a function.
|
|
41
|
-
let newValue = typeof value === 'function' ? value(valueRef.current) : value;
|
|
42
|
-
if (!Object.is(valueRef.current, newValue)) {
|
|
43
|
-
// Update the ref so that the next setState callback has the most recent value.
|
|
44
|
-
valueRef.current = newValue;
|
|
45
|
-
setStateValue(newValue);
|
|
46
|
-
// Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.
|
|
47
|
-
forceUpdate();
|
|
48
|
-
// Trigger onChange. Note that if setState is called multiple times in a single event,
|
|
49
|
-
// onChange will be called for each one instead of only once.
|
|
50
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(newValue, ...args);
|
|
51
|
-
}
|
|
52
|
-
}, [
|
|
53
|
-
onChange
|
|
54
|
-
]);
|
|
55
|
-
return [
|
|
56
|
-
currentValue,
|
|
57
|
-
setValue
|
|
58
|
-
];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
export {$458b0a5536c1a7cf$export$40bfa8c7b0832715 as useControlledState};
|
|
63
|
-
//# sourceMappingURL=useControlledState.module.js.map
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import $3whtM$react, {useState as $3whtM$useState, useRef as $3whtM$useRef, useEffect as $3whtM$useEffect, useReducer as $3whtM$useReducer, useCallback as $3whtM$useCallback} from "react";
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
5
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
7
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
10
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
11
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
12
|
-
* governing permissions and limitations under the License.
|
|
13
|
-
*/
|
|
14
|
-
var $458b0a5536c1a7cf$var$_React_useInsertionEffect;
|
|
15
|
-
// Use the earliest effect possible to reset the ref below.
|
|
16
|
-
const $458b0a5536c1a7cf$var$useEarlyEffect = typeof document !== 'undefined' ? ($458b0a5536c1a7cf$var$_React_useInsertionEffect = (0, $3whtM$react)['useInsertionEffect']) !== null && $458b0a5536c1a7cf$var$_React_useInsertionEffect !== void 0 ? $458b0a5536c1a7cf$var$_React_useInsertionEffect : (0, $3whtM$react).useLayoutEffect : ()=>{};
|
|
17
|
-
function $458b0a5536c1a7cf$export$40bfa8c7b0832715(value, defaultValue, onChange) {
|
|
18
|
-
// Store the value in both state and a ref. The state value will only be used when uncontrolled.
|
|
19
|
-
// The ref is used to track the most current value, which is passed to the function setState callback.
|
|
20
|
-
let [stateValue, setStateValue] = (0, $3whtM$useState)(value || defaultValue);
|
|
21
|
-
let valueRef = (0, $3whtM$useRef)(stateValue);
|
|
22
|
-
let isControlledRef = (0, $3whtM$useRef)(value !== undefined);
|
|
23
|
-
let isControlled = value !== undefined;
|
|
24
|
-
(0, $3whtM$useEffect)(()=>{
|
|
25
|
-
let wasControlled = isControlledRef.current;
|
|
26
|
-
if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);
|
|
27
|
-
isControlledRef.current = isControlled;
|
|
28
|
-
}, [
|
|
29
|
-
isControlled
|
|
30
|
-
]);
|
|
31
|
-
// After each render, update the ref to the current value.
|
|
32
|
-
// This ensures that the setState callback argument is reset.
|
|
33
|
-
// Note: the effect should not have any dependencies so that controlled values always reset.
|
|
34
|
-
let currentValue = isControlled ? value : stateValue;
|
|
35
|
-
$458b0a5536c1a7cf$var$useEarlyEffect(()=>{
|
|
36
|
-
valueRef.current = currentValue;
|
|
37
|
-
});
|
|
38
|
-
let [, forceUpdate] = (0, $3whtM$useReducer)(()=>({}), {});
|
|
39
|
-
let setValue = (0, $3whtM$useCallback)((value, ...args)=>{
|
|
40
|
-
// @ts-ignore - TS doesn't know that T cannot be a function.
|
|
41
|
-
let newValue = typeof value === 'function' ? value(valueRef.current) : value;
|
|
42
|
-
if (!Object.is(valueRef.current, newValue)) {
|
|
43
|
-
// Update the ref so that the next setState callback has the most recent value.
|
|
44
|
-
valueRef.current = newValue;
|
|
45
|
-
setStateValue(newValue);
|
|
46
|
-
// Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.
|
|
47
|
-
forceUpdate();
|
|
48
|
-
// Trigger onChange. Note that if setState is called multiple times in a single event,
|
|
49
|
-
// onChange will be called for each one instead of only once.
|
|
50
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(newValue, ...args);
|
|
51
|
-
}
|
|
52
|
-
}, [
|
|
53
|
-
onChange
|
|
54
|
-
]);
|
|
55
|
-
return [
|
|
56
|
-
currentValue,
|
|
57
|
-
setValue
|
|
58
|
-
];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
export {$458b0a5536c1a7cf$export$40bfa8c7b0832715 as useControlledState};
|
|
63
|
-
//# sourceMappingURL=useControlledState.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;AAAA;;;;;;;;;;CAUC;IAMG;AAFJ,2DAA2D;AAC3D,MAAM,uCAA+C,OAAO,aAAa,cACrE,CAAA,kDAAA,CAAA,GAAA,YAAI,CAAC,CAAC,qBAAqB,cAA3B,6DAAA,kDAA+B,CAAA,GAAA,YAAI,EAAE,eAAe,GACpD,KAAO;AAIJ,SAAS,0CAA6B,KAAQ,EAAE,YAAe,EAAE,QAAyC;IAC/G,gGAAgG;IAChG,sGAAsG;IACtG,IAAI,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,eAAO,EAAE,SAAS;IACpD,IAAI,WAAW,CAAA,GAAA,aAAK,EAAE;IAEtB,IAAI,kBAAkB,CAAA,GAAA,aAAK,EAAE,UAAU;IACvC,IAAI,eAAe,UAAU;IAC7B,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,gBAAgB,gBAAgB,OAAO;QAC3C,IAAI,kBAAkB,gBAAgB,QAAQ,GAAG,CAAC,QAAQ,KAAK,cAC7D,QAAQ,IAAI,CAAC,CAAC,+BAA+B,EAAE,gBAAgB,eAAe,eAAe,IAAI,EAAE,eAAe,eAAe,eAAe,CAAC,CAAC;QAEpJ,gBAAgB,OAAO,GAAG;IAC5B,GAAG;QAAC;KAAa;IAEjB,0DAA0D;IAC1D,6DAA6D;IAC7D,4FAA4F;IAC5F,IAAI,eAAe,eAAe,QAAQ;IAC1C,qCAAe;QACb,SAAS,OAAO,GAAG;IACrB;IAEA,IAAI,GAAG,YAAY,GAAG,CAAA,GAAA,iBAAS,EAAE,IAAO,CAAA,CAAC,CAAA,GAAI,CAAC;IAC9C,IAAI,WAAW,CAAA,GAAA,kBAAU,EAAE,CAAC,OAA0B,GAAG;QACvD,4DAA4D;QAC5D,IAAI,WAAW,OAAO,UAAU,aAAa,MAAM,SAAS,OAAO,IAAI;QACvE,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,WAAW;YAC1C,+EAA+E;YAC/E,SAAS,OAAO,GAAG;YAEnB,cAAc;YAEd,6GAA6G;YAC7G;YAEA,sFAAsF;YACtF,6DAA6D;YAC7D,qBAAA,+BAAA,SAAW,aAAa;QAC1B;IACF,GAAG;QAAC;KAAS;IAEb,OAAO;QAAC;QAAc;KAAS;AACjC","sources":["packages/@react-stately/utils/src/useControlledState.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 React, {SetStateAction, useCallback, useEffect, useReducer, useRef, useState} from 'react';\n\n// Use the earliest effect possible to reset the ref below.\nconst useEarlyEffect: typeof React.useLayoutEffect = typeof document !== 'undefined'\n ? React['useInsertionEffect'] ?? React.useLayoutEffect\n : () => {};\n\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void] {\n // Store the value in both state and a ref. The state value will only be used when uncontrolled.\n // The ref is used to track the most current value, which is passed to the function setState callback.\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let valueRef = useRef(stateValue);\n\n let isControlledRef = useRef(value !== undefined);\n let isControlled = value !== undefined;\n useEffect(() => {\n let wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n isControlledRef.current = isControlled;\n }, [isControlled]);\n\n // After each render, update the ref to the current value.\n // This ensures that the setState callback argument is reset.\n // Note: the effect should not have any dependencies so that controlled values always reset.\n let currentValue = isControlled ? value : stateValue;\n useEarlyEffect(() => {\n valueRef.current = currentValue;\n });\n\n let [, forceUpdate] = useReducer(() => ({}), {});\n let setValue = useCallback((value: SetStateAction<T>, ...args: any[]) => {\n // @ts-ignore - TS doesn't know that T cannot be a function.\n let newValue = typeof value === 'function' ? value(valueRef.current) : value;\n if (!Object.is(valueRef.current, newValue)) {\n // Update the ref so that the next setState callback has the most recent value.\n valueRef.current = newValue;\n\n setStateValue(newValue);\n\n // Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.\n forceUpdate();\n\n // Trigger onChange. Note that if setState is called multiple times in a single event,\n // onChange will be called for each one instead of only once.\n onChange?.(newValue, ...args);\n }\n }, [onChange]);\n\n return [currentValue, setValue];\n}\n"],"names":[],"version":3,"file":"useControlledState.module.js.map"}
|
package/src/number.ts
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.
|
|
15
|
-
*/
|
|
16
|
-
export function clamp(value: number, min: number = -Infinity, max: number = Infinity): number {
|
|
17
|
-
let newValue = Math.min(Math.max(value, min), max);
|
|
18
|
-
return newValue;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function roundToStepPrecision(value: number, step: number): number {
|
|
22
|
-
let roundedValue = value;
|
|
23
|
-
let precision = 0;
|
|
24
|
-
let stepString = step.toString();
|
|
25
|
-
// Handle negative exponents in exponential notation (e.g., "1e-7" → precision 8)
|
|
26
|
-
let eIndex = stepString.toLowerCase().indexOf('e-');
|
|
27
|
-
if (eIndex > 0) {
|
|
28
|
-
precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;
|
|
29
|
-
} else {
|
|
30
|
-
let pointIndex = stepString.indexOf('.');
|
|
31
|
-
if (pointIndex >= 0) {
|
|
32
|
-
precision = stepString.length - pointIndex;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (precision > 0) {
|
|
36
|
-
let pow = Math.pow(10, precision);
|
|
37
|
-
roundedValue = Math.round(roundedValue * pow) / pow;
|
|
38
|
-
}
|
|
39
|
-
return roundedValue;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function snapValueToStep(value: number, min: number | undefined, max: number | undefined, step: number): number {
|
|
43
|
-
min = Number(min);
|
|
44
|
-
max = Number(max);
|
|
45
|
-
let remainder = ((value - (isNaN(min) ? 0 : min)) % step);
|
|
46
|
-
let snappedValue = roundToStepPrecision(Math.abs(remainder) * 2 >= step
|
|
47
|
-
? value + Math.sign(remainder) * (step - Math.abs(remainder))
|
|
48
|
-
: value - remainder, step);
|
|
49
|
-
|
|
50
|
-
if (!isNaN(min)) {
|
|
51
|
-
if (snappedValue < min) {
|
|
52
|
-
snappedValue = min;
|
|
53
|
-
} else if (!isNaN(max) && snappedValue > max) {
|
|
54
|
-
snappedValue = min + Math.floor(roundToStepPrecision((max - min) / step, step)) * step;
|
|
55
|
-
}
|
|
56
|
-
} else if (!isNaN(max) && snappedValue > max) {
|
|
57
|
-
snappedValue = Math.floor(roundToStepPrecision(max / step, step)) * step;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// correct floating point behavior by rounding to step precision
|
|
61
|
-
snappedValue = roundToStepPrecision(snappedValue, step);
|
|
62
|
-
|
|
63
|
-
return snappedValue;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/* Takes a value and rounds off to the number of digits. */
|
|
67
|
-
export function toFixedNumber(value: number, digits: number, base: number = 10): number {
|
|
68
|
-
const pow = Math.pow(base, digits);
|
|
69
|
-
|
|
70
|
-
return Math.round(value * pow) / pow;
|
|
71
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import React, {SetStateAction, useCallback, useEffect, useReducer, useRef, useState} from 'react';
|
|
14
|
-
|
|
15
|
-
// Use the earliest effect possible to reset the ref below.
|
|
16
|
-
const useEarlyEffect: typeof React.useLayoutEffect = typeof document !== 'undefined'
|
|
17
|
-
? React['useInsertionEffect'] ?? React.useLayoutEffect
|
|
18
|
-
: () => {};
|
|
19
|
-
|
|
20
|
-
export function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];
|
|
21
|
-
export function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];
|
|
22
|
-
export function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void] {
|
|
23
|
-
// Store the value in both state and a ref. The state value will only be used when uncontrolled.
|
|
24
|
-
// The ref is used to track the most current value, which is passed to the function setState callback.
|
|
25
|
-
let [stateValue, setStateValue] = useState(value || defaultValue);
|
|
26
|
-
let valueRef = useRef(stateValue);
|
|
27
|
-
|
|
28
|
-
let isControlledRef = useRef(value !== undefined);
|
|
29
|
-
let isControlled = value !== undefined;
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
let wasControlled = isControlledRef.current;
|
|
32
|
-
if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') {
|
|
33
|
-
console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);
|
|
34
|
-
}
|
|
35
|
-
isControlledRef.current = isControlled;
|
|
36
|
-
}, [isControlled]);
|
|
37
|
-
|
|
38
|
-
// After each render, update the ref to the current value.
|
|
39
|
-
// This ensures that the setState callback argument is reset.
|
|
40
|
-
// Note: the effect should not have any dependencies so that controlled values always reset.
|
|
41
|
-
let currentValue = isControlled ? value : stateValue;
|
|
42
|
-
useEarlyEffect(() => {
|
|
43
|
-
valueRef.current = currentValue;
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
let [, forceUpdate] = useReducer(() => ({}), {});
|
|
47
|
-
let setValue = useCallback((value: SetStateAction<T>, ...args: any[]) => {
|
|
48
|
-
// @ts-ignore - TS doesn't know that T cannot be a function.
|
|
49
|
-
let newValue = typeof value === 'function' ? value(valueRef.current) : value;
|
|
50
|
-
if (!Object.is(valueRef.current, newValue)) {
|
|
51
|
-
// Update the ref so that the next setState callback has the most recent value.
|
|
52
|
-
valueRef.current = newValue;
|
|
53
|
-
|
|
54
|
-
setStateValue(newValue);
|
|
55
|
-
|
|
56
|
-
// Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.
|
|
57
|
-
forceUpdate();
|
|
58
|
-
|
|
59
|
-
// Trigger onChange. Note that if setState is called multiple times in a single event,
|
|
60
|
-
// onChange will be called for each one instead of only once.
|
|
61
|
-
onChange?.(newValue, ...args);
|
|
62
|
-
}
|
|
63
|
-
}, [onChange]);
|
|
64
|
-
|
|
65
|
-
return [currentValue, setValue];
|
|
66
|
-
}
|