{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { useState as $hVAG6$useState, useRef as $hVAG6$useRef, useCallback as $hVAG6$useCallback } from \"react\";\n\nfunction $parcel$export(e, n, v, s) {\n  Object.defineProperty(e, n, {\n    get: v,\n    set: s,\n    enumerable: true,\n    configurable: true\n  });\n}\n\nvar $7eb364dbb661fcb7$exports = {};\n$parcel$export($7eb364dbb661fcb7$exports, \"useControlledState\", function () {\n  return $7eb364dbb661fcb7$export$40bfa8c7b0832715;\n});\n\nfunction $7eb364dbb661fcb7$export$40bfa8c7b0832715(value1, defaultValue, onChange) {\n  var _$hVAG6$useState = $hVAG6$useState(value1 || defaultValue),\n      _$hVAG6$useState2 = _slicedToArray(_$hVAG6$useState, 2),\n      stateValue = _$hVAG6$useState2[0],\n      setStateValue = _$hVAG6$useState2[1];\n\n  var ref = $hVAG6$useRef(value1 !== undefined);\n  var wasControlled = ref.current;\n  var isControlled = value1 !== undefined;\n  var stateRef = $hVAG6$useRef(stateValue);\n  if (wasControlled !== isControlled) console.warn(\"WARN: A component changed from \" + (wasControlled ? 'controlled' : 'uncontrolled') + \" to \" + (isControlled ? 'controlled' : 'uncontrolled') + \".\");\n  ref.current = isControlled;\n  var setValue = $hVAG6$useCallback(function (value2) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var onChangeCaller = function onChangeCaller(value) {\n      if (onChange) {\n        for (var _len2 = arguments.length, onChangeArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          onChangeArgs[_key2 - 1] = arguments[_key2];\n        }\n\n        if (!Object.is(stateRef.current, value)) onChange.apply(void 0, [value].concat(onChangeArgs));\n      }\n\n      if (!isControlled) stateRef.current = value;\n    };\n\n    if (typeof value2 === '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\n      var updateFunction = function updateFunction(oldValue) {\n        for (var _len3 = arguments.length, functionArgs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n          functionArgs[_key3 - 1] = arguments[_key3];\n        }\n\n        var interceptedValue = value2.apply(void 0, [isControlled ? stateRef.current : oldValue].concat(functionArgs));\n        onChangeCaller.apply(void 0, [interceptedValue].concat(args));\n        if (!isControlled) return interceptedValue;\n        return oldValue;\n      };\n\n      setStateValue(updateFunction);\n    } else {\n      if (!isControlled) setStateValue(value2);\n      onChangeCaller.apply(void 0, [value2].concat(args));\n    }\n  }, [isControlled, onChange]);\n  if (isControlled) stateRef.current = value1;else value1 = stateValue;\n  return [value1, setValue];\n}\n\nvar $0538fb457bd4249d$exports = {};\n$parcel$export($0538fb457bd4249d$exports, \"clamp\", function () {\n  return $0538fb457bd4249d$export$7d15b64cf5a3a4c4;\n});\n$parcel$export($0538fb457bd4249d$exports, \"snapValueToStep\", function () {\n  return $0538fb457bd4249d$export$cb6e0bb50bc19463;\n});\n$parcel$export($0538fb457bd4249d$exports, \"toFixedNumber\", function () {\n  return $0538fb457bd4249d$export$b6268554fba451f;\n});\n\nfunction $0538fb457bd4249d$export$7d15b64cf5a3a4c4(value) {\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -Infinity;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity;\n  var newValue = Math.min(Math.max(value, min), max);\n  return newValue;\n}\n\nfunction $0538fb457bd4249d$export$cb6e0bb50bc19463(value, min, max, step) {\n  var remainder = (value - (isNaN(min) ? 0 : min)) % step;\n  var snappedValue = Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder;\n\n  if (!isNaN(min)) {\n    if (snappedValue < min) snappedValue = min;else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor((max - min) / step) * step;\n  } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor(max / step) * step;\n\n  var string = step.toString();\n  var index = string.indexOf('.');\n  var precision = index >= 0 ? string.length - index : 0;\n\n  if (precision > 0) {\n    var pow = Math.pow(10, precision);\n    snappedValue = Math.round(snappedValue * pow) / pow;\n  }\n\n  return snappedValue;\n}\n\nfunction $0538fb457bd4249d$export$b6268554fba451f(value, digits) {\n  var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n  var pow = Math.pow(base, digits);\n  return Math.round(value * pow) / pow;\n}\n\nexport { $7eb364dbb661fcb7$export$40bfa8c7b0832715 as useControlledState, $0538fb457bd4249d$export$7d15b64cf5a3a4c4 as clamp, $0538fb457bd4249d$export$cb6e0bb50bc19463 as snapValueToStep, $0538fb457bd4249d$export$b6268554fba451f as toFixedNumber };","map":{"version":3,"sources":["packages/@react-stately/utils/src/useControlledState.ts","packages/@react-stately/utils/src/number.ts"],"names":[],"mappings":"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","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, ...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"]},"metadata":{},"sourceType":"module"}