{"version":3,"sources":["jsdelivr-header.js","/npm/use-stepper@4.0.2/src/use-stepper.ts","/npm/use-stepper@4.0.2/src/utils/call-all.ts","/npm/use-stepper@4.0.2/src/utils/merge-refs.ts","/npm/use-stepper@4.0.2/src/utils/decimals.ts","/npm/use-stepper@4.0.2/src/utils/use-previous.ts"],"names":[],"mappings":"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","file":"/npm/use-stepper@4.0.2/dist/use-stepper.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/use-stepper@4.0.2/dist/use-stepper.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import * as React from 'react';\nimport { callAll } from './utils/call-all';\nimport { mergeRefs } from './utils/merge-refs';\nimport { sum } from './utils/decimals';\nimport { usePrevious } from './utils/use-previous';\n\nconst actionTypes = {\n  increment: 'increment',\n  decrement: 'decrement',\n  coerce: 'coerce',\n  setValue: 'setValue',\n};\n\nexport interface State {\n  value: string;\n}\n\nexport interface Action {\n  type: string;\n  payload?: string;\n}\n\nexport type FormProps = React.PropsWithRef<\n  React.DetailedHTMLProps<\n    React.FormHTMLAttributes<HTMLFormElement>,\n    HTMLFormElement\n  >\n>;\n\nexport type InputProps = React.PropsWithRef<\n  React.DetailedHTMLProps<\n    React.InputHTMLAttributes<HTMLInputElement>,\n    HTMLInputElement\n  >\n>;\n\nexport type ButtonProps = React.PropsWithRef<\n  React.DetailedHTMLProps<\n    React.ButtonHTMLAttributes<HTMLButtonElement>,\n    HTMLButtonElement\n  >\n>;\n\nexport interface Options {\n  defaultValue?: number;\n  step?: number;\n  min?: number;\n  max?: number;\n  enableReinitialize?: boolean;\n  stateReducer?: (state: State, action: Action) => State;\n}\n\nexport interface ReturnValue {\n  value: string;\n  setValue: (newValue: string) => void;\n  increment: () => void;\n  decrement: () => void;\n  getFormProps: (formProps?: FormProps) => FormProps;\n  getInputProps: (inputProps?: InputProps) => InputProps;\n  getIncrementProps: (incrementProps?: ButtonProps) => ButtonProps;\n  getDecrementProps: (decrementProps?: ButtonProps) => ButtonProps;\n}\n\nexport interface UseStepper {\n  (options?: Options): ReturnValue;\n  actionTypes: typeof actionTypes;\n  defaultReducer: (state: State, action: Action) => State;\n}\n\n// @ts-ignore - `actionTypes` and `defaultReducer` are added at invocation time\nexport const useStepper: UseStepper = ({\n  defaultValue = 0,\n  step = 1,\n  min = -Number.MAX_VALUE,\n  max = Number.MAX_VALUE,\n  enableReinitialize = false,\n  stateReducer: userReducer,\n} = {}) => {\n  const previousDefaultValue = usePrevious(defaultValue);\n  const inputRef = React.useRef<HTMLInputElement>(null);\n\n  const validValueClosestTo = React.useCallback(\n    (newValue: number | string) => {\n      const newValueNum =\n        typeof newValue === 'number' ? newValue : Number.parseFloat(newValue);\n      return String(Math.min(max, Math.max(newValueNum, min)));\n    },\n    [max, min],\n  );\n\n  const initialState: State = { value: String(defaultValue) };\n\n  const defaultReducer = React.useCallback(\n    (state: State, action: Action): State => {\n      const currentNumericValue = Number.parseFloat(state.value);\n      switch (action.type) {\n        case actionTypes.increment: {\n          const newValue = validValueClosestTo(sum(currentNumericValue, step));\n          if (newValue !== state.value) {\n            return { value: newValue };\n          }\n          return state;\n        }\n        case actionTypes.decrement: {\n          const newValue = validValueClosestTo(sum(currentNumericValue, -step));\n          if (newValue !== state.value) {\n            return { value: newValue };\n          }\n          return state;\n        }\n        case actionTypes.coerce: {\n          if (Number.isNaN(currentNumericValue)) {\n            return { value: String(defaultValue) };\n          }\n          const newValue = validValueClosestTo(currentNumericValue);\n          if (newValue !== state.value) {\n            return { value: newValue };\n          }\n          return state;\n        }\n        case actionTypes.setValue: {\n          if (action.payload !== undefined && action.payload !== state.value) {\n            return { value: action.payload };\n          }\n          return state;\n          /* c8 ignore start */\n        }\n        default:\n          throw new Error(`Unsupported action type: ${action.type}`);\n        /* c8 ignore stop */\n      }\n    },\n    [validValueClosestTo, defaultValue, step],\n  );\n\n  // Expose our internal/default reducer and action types\n  useStepper.defaultReducer = defaultReducer;\n  useStepper.actionTypes = actionTypes;\n\n  const [{ value }, dispatch] = React.useReducer(\n    userReducer || defaultReducer,\n    initialState,\n  );\n\n  const setValue = React.useCallback((newValue: string) => {\n    dispatch({\n      type: actionTypes.setValue,\n      payload: newValue,\n    });\n  }, []);\n\n  const setValueClosestTo = React.useCallback(\n    (newValue: string): void => {\n      setValue(validValueClosestTo(newValue));\n    },\n    [validValueClosestTo, setValue],\n  );\n\n  function handleIncrement() {\n    dispatch({ type: actionTypes.increment });\n  }\n\n  function handleDecrement() {\n    dispatch({ type: actionTypes.decrement });\n  }\n\n  function handleFocus() {\n    if (inputRef.current !== null) {\n      inputRef.current.value = value;\n      inputRef.current.select();\n    }\n  }\n\n  function handleBlur() {\n    dispatch({ type: actionTypes.coerce });\n  }\n\n  function handleChange(ev: React.ChangeEvent<HTMLInputElement>) {\n    setValue(ev.target.value);\n  }\n\n  function handleKeyDown(ev: React.KeyboardEvent<HTMLInputElement>) {\n    switch (ev.key) {\n      case 'ArrowUp': {\n        dispatch({ type: actionTypes.coerce });\n        handleIncrement();\n        ev.preventDefault();\n        break;\n      }\n      case 'ArrowDown': {\n        dispatch({ type: actionTypes.coerce });\n        handleDecrement();\n        ev.preventDefault();\n        break;\n      }\n      case 'Home': {\n        setValueClosestTo(String(min));\n        ev.preventDefault();\n        break;\n      }\n      case 'End': {\n        setValueClosestTo(String(max));\n        ev.preventDefault();\n        break;\n      }\n      default:\n        break;\n    }\n  }\n\n  function handleSubmit(ev: React.FormEvent<HTMLFormElement>) {\n    ev.preventDefault();\n    if (inputRef.current !== null) {\n      inputRef.current.blur();\n    }\n  }\n\n  function getFormProps(formProps: FormProps = {}): FormProps {\n    const { onSubmit, ...otherFormProps } = formProps;\n    return {\n      ...otherFormProps,\n      onSubmit: callAll(handleSubmit, onSubmit),\n    };\n  }\n\n  function getIncrementProps(incrementProps: ButtonProps = {}): ButtonProps {\n    const { onClick, ...otherIncrementProps } = incrementProps;\n    return {\n      ...otherIncrementProps,\n      'aria-hidden': true,\n      tabIndex: -1,\n      disabled: value === String(max),\n      onClick: callAll(handleIncrement, onClick),\n    };\n  }\n\n  function getDecrementProps(decrementProps: ButtonProps = {}): ButtonProps {\n    const { onClick, ...otherButtonProps } = decrementProps;\n    return {\n      ...otherButtonProps,\n      'aria-hidden': true,\n      tabIndex: -1,\n      disabled: value === String(min),\n      onClick: callAll(handleDecrement, onClick),\n    };\n  }\n\n  function getInputProps(inputProps: InputProps = {}): InputProps {\n    const { ref, onBlur, onFocus, onChange, onKeyDown, ...otherInputProps } =\n      inputProps;\n    return {\n      ...otherInputProps,\n      role: 'spinbutton',\n      'aria-valuemin': min,\n      'aria-valuemax': max,\n      'aria-valuenow': Number.isNaN(Number.parseFloat(value))\n        ? undefined\n        : Number.parseFloat(value),\n      'aria-valuetext': value,\n      autoComplete: 'off',\n      autoCorrect: 'off',\n      spellCheck: 'false',\n      type: 'text',\n      value: String(value),\n      ref: mergeRefs(ref, inputRef),\n      onBlur: callAll(handleBlur, onBlur),\n      onFocus: callAll(handleFocus, onFocus),\n      onChange: callAll(handleChange, onChange),\n      onKeyDown: callAll(handleKeyDown, onKeyDown),\n    };\n  }\n\n  // If the `defaultValue` parameter changes and the current value is still the\n  // original default value (e.g. the user hasn't changed it), update the value\n  // to the new default. This behavior is enabled via the `enableReinitialize`\n  // parameter.\n  React.useEffect(() => {\n    if (\n      enableReinitialize &&\n      previousDefaultValue !== defaultValue &&\n      previousDefaultValue === Number.parseFloat(value)\n    ) {\n      setValue(validValueClosestTo(defaultValue));\n    }\n  }, [\n    enableReinitialize,\n    defaultValue,\n    previousDefaultValue,\n    value,\n    validValueClosestTo,\n    setValue,\n  ]);\n\n  return {\n    value,\n    setValue: setValueClosestTo,\n    increment: handleIncrement,\n    decrement: handleDecrement,\n    getFormProps,\n    getInputProps,\n    getIncrementProps,\n    getDecrementProps,\n  };\n};\n","type CallbackFn = (...args: Array<any>) => void;\n\nexport function callAll(...fns: Array<CallbackFn | undefined>): CallbackFn {\n  const callAllCallbackFnsWithOriginalArgs: CallbackFn = (\n    ...args: Array<unknown>\n  ) => {\n    fns.forEach((fn) => {\n      if (typeof fn === 'function') fn(...args);\n    });\n  };\n  return callAllCallbackFnsWithOriginalArgs;\n}\n","type Ref<T> = React.LegacyRef<T> | React.MutableRefObject<T> | undefined;\n\nfunction isMutableRefObject<T>(ref: Ref<T>): ref is React.MutableRefObject<T> {\n  return typeof ref === 'object' && ref !== null && 'current' in ref;\n}\n\nexport function mergeRefs<T>(...refs: Array<Ref<T>>): (ref: T) => void {\n  function assignSingleRef(ref: T) {\n    refs.forEach((resolvableRef) => {\n      if (typeof resolvableRef === 'function') {\n        resolvableRef(ref);\n      } else if (isMutableRefObject(resolvableRef)) {\n        // eslint-disable-next-line no-param-reassign\n        resolvableRef.current = ref;\n      }\n    });\n  }\n  return assignSingleRef;\n}\n","export function countDecimals(value: string | number) {\n  const text = value.toString();\n\n  // verify if number 0.000005 is represented as \"5e-6\"\n  if (text.indexOf('e-') > -1) {\n    const [, trail] = text.split('e-');\n    const deg = Number.parseInt(trail, 10);\n    return deg;\n  }\n\n  // count decimals for number in representation like \"0.123456\"\n  return text.split('.')[1]?.length ?? 0;\n}\n\n// Sum two numbers with any number of decimals\nexport function sum(a: number, b: number) {\n  if (Number.isNaN(a)) {\n    return b;\n  }\n  if (Number.isNaN(b)) {\n    return a;\n  }\n\n  const decimalsA = countDecimals(a);\n  const decimalsB = countDecimals(b);\n  const decimals = Math.max(decimalsA, decimalsB);\n  const alpha = 10 ** decimals;\n\n  return (a * alpha + b * alpha) / alpha;\n}\n","import * as React from 'react';\n\nexport function usePrevious<T>(value: T): T | undefined {\n  const previousValue = React.useRef<T>();\n  React.useEffect(() => {\n    previousValue.current = value;\n  }, [value]);\n  return previousValue.current;\n}\n"]}