{"version":3,"file":"NumberInput.cjs","names":["createVarsResolver","getSize","genericFactory","useProps","useStyles","useResolvedStylesApi","noop","UnstyledButton","NumberInputChevron","InputBase","NumericFormat","classes"],"sources":["../../../src/components/NumberInput/NumberInput.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport cx from 'clsx';\nimport { NumberFormatValues, NumericFormat, OnValueChange } from 'react-number-format';\nimport { assignRef, clamp, useMergedRef, useUncontrolled } from '@mantine/hooks';\nimport {\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  Factory,\n  genericFactory,\n  getSize,\n  noop,\n  StylesApiProps,\n  useProps,\n  useResolvedStylesApi,\n  useStyles,\n} from '../../core';\nimport { __BaseInputProps, __InputStylesNames, InputVariant } from '../Input';\nimport { InputBase } from '../InputBase';\nimport { UnstyledButton } from '../UnstyledButton';\nimport { NumberInputChevron } from './NumberInputChevron';\nimport classes from './NumberInput.module.css';\n\n// Re for negative -0, -0., -0.0, -0.00, -0.000 ... strings\n// And for positive 0., 0.0, 0.00, 0.000 ... strings\nconst leadingDecimalZeroPattern = /^(0\\.0*|-0(\\.0*)?)$/;\n\n// Re for 01, 006, 00.02, -0010, -000.293 ... and negative counterparts\nconst leadingZerosPattern = /^-?0\\d+(\\.\\d+)?\\.?$/;\n\n// Re for decimal numbers with trailing zeros like 13.0, 13.00, 5.10 ... strings\nconst trailingZerosPattern = /\\.\\d*0$/;\n\n// Re for numbers with trailing decimal separator like 10. or -3.\nconst trailingDecimalSeparatorPattern = /^-?\\d+\\.$/;\n\nexport interface NumberInputHandlers {\n  increment: () => void;\n  decrement: () => void;\n}\n\nexport type NumberInputMode = 'number' | 'bigint';\nexport type NumberInputNumericType = number | bigint;\nexport type NumberInputValue<T extends NumberInputNumericType = number> = T | string;\ntype NumberInputNumericValue<T extends NumberInputNumericType = number> = T;\ntype InternalNumberInputValue = string | number | bigint;\n\nfunction isNumberString(value: unknown) {\n  return typeof value === 'string' && value !== '' && !Number.isNaN(Number(value));\n}\n\nfunction isBigIntValue(value: unknown): value is bigint {\n  return typeof value === 'bigint';\n}\n\nfunction canStep(value: number | string) {\n  if (typeof value === 'number') {\n    return value < Number.MAX_SAFE_INTEGER;\n  }\n\n  return value === '' || (isNumberString(value) && Number(value) < Number.MAX_SAFE_INTEGER);\n}\n\nfunction isValidBigIntString(value: string, allowNegative: boolean) {\n  if (value === '') {\n    return false;\n  }\n\n  if (value === '-') {\n    return false;\n  }\n\n  if (!allowNegative && value.startsWith('-')) {\n    return false;\n  }\n\n  return /^-?\\d+$/.test(value);\n}\n\nfunction canStepBigInt(value: bigint | string, allowNegative: boolean) {\n  if (typeof value === 'bigint') {\n    return true;\n  }\n\n  return value === '' || isValidBigIntString(value, allowNegative);\n}\n\nfunction parseBigIntFromString(value: string): bigint | null {\n  if (!/^-?\\d+$/.test(value)) {\n    return null;\n  }\n\n  try {\n    return BigInt(value);\n  } catch {\n    return null;\n  }\n}\n\nfunction toBigIntOrUndefined(value: unknown): bigint | undefined {\n  if (typeof value === 'bigint') {\n    return value;\n  }\n\n  if (typeof value === 'number' && Number.isFinite(value) && Number.isInteger(value)) {\n    return BigInt(value);\n  }\n\n  return undefined;\n}\n\nfunction clampBigInt(value: bigint, min?: bigint, max?: bigint) {\n  if (min !== undefined && value < min) {\n    return min;\n  }\n\n  if (max !== undefined && value > max) {\n    return max;\n  }\n\n  return value;\n}\n\nfunction getTotalDigits(inputValue: string | number): number {\n  // All digits must be counted, parseFloat precision depends\n  // on the number of digits in the input, not only on the decimal scale\n  return inputValue.toString().replace('.', '').length;\n}\n\nfunction isValidNumber(floatValue: number | undefined, value: string): floatValue is number {\n  return (\n    (typeof floatValue === 'number'\n      ? floatValue < Number.MAX_SAFE_INTEGER\n      : !Number.isNaN(Number(floatValue))) &&\n    !Number.isNaN(floatValue) &&\n    getTotalDigits(value) < 14 &&\n    value !== ''\n  );\n}\n\nfunction isInRange(value: number | undefined, min: number | undefined, max: number | undefined) {\n  if (value === undefined) {\n    return true;\n  }\n\n  const minValid = min === undefined || value >= min;\n  const maxValid = max === undefined || value <= max;\n\n  return minValid && maxValid;\n}\n\nexport type NumberInputStylesNames = 'controls' | 'control' | __InputStylesNames;\nexport type NumberInputCssVariables = {\n  controls: '--ni-chevron-size';\n};\n\nexport interface NumberInputProps<T extends NumberInputNumericType = number>\n  extends\n    BoxProps,\n    Omit<__BaseInputProps, 'pointer'>,\n    StylesApiProps<NumberInputFactory>,\n    ElementProps<\n      'input',\n      'size' | 'type' | 'onChange' | 'value' | 'defaultValue' | 'min' | 'max' | 'step'\n    > {\n  /** Controlled component value */\n  value?: NumberInputValue<T>;\n\n  /** Uncontrolled component default value */\n  defaultValue?: NumberInputValue<T>;\n\n  /** Called when value changes */\n  onChange?: (value: NumberInputValue<T>) => void;\n\n  /** Called when value changes with `react-number-format` payload */\n  onValueChange?: OnValueChange;\n\n  /** Determines whether leading zeros are allowed during input. If `false`, leading zeros are removed as you type (e.g., typing `007` results in `7`). Works in conjunction with `trimLeadingZeroesOnBlur`. @default true */\n  allowLeadingZeros?: boolean;\n\n  /** Determines whether negative numbers are allowed. If `false`, the input will not accept negative values, and the decrement button will stop at `0` (when `min` is not set). @default true */\n  allowNegative?: boolean;\n\n  /** Characters which when pressed result in a decimal separator. These characters will be replaced by the `decimalSeparator` in the input value. @default ['.', ','] */\n  allowedDecimalSeparators?: string[];\n\n  /** Limits the number of digits that can be entered after the decimal point @default Infinity */\n  decimalScale?: number;\n\n  /** Character used as a decimal separator. Generally used with `allowedDecimalSeparators` prop. @default '.' */\n  decimalSeparator?: string;\n\n  /** If `true`, automatically pads the decimal part with zeros to match `decimalScale` (e.g., with `decimalScale={2}`, typing `5.1` displays as `5.10`). Requires `decimalScale` to be set. @default false */\n  fixedDecimalScale?: boolean;\n\n  /** Prefix added before the input value */\n  prefix?: string;\n\n  /** Suffix added after the input value */\n  suffix?: string;\n\n  /** Defines the thousand grouping style. 'thousand' (1,000), 'lakh' (1,00,000), 'wan' (1,0000), 'none'. */\n  thousandsGroupStyle?: 'thousand' | 'lakh' | 'wan' | 'none';\n\n  /** A function to validate the input value. If this function returns `false`, the `onChange` will not be called and the input value will not change. */\n  isAllowed?: (values: NumberFormatValues) => boolean;\n\n  /** Advanced: Set to `true` if you're passing numeric strings (e.g., `\"12345\"`) and using formatting props like `prefix` or `suffix`. In most cases, you don't need this prop. See [react-number-format docs](https://www.npmjs.com/package/react-number-format) for details. @default false */\n  valueIsNumericString?: boolean;\n\n  /** Controls input `type` attribute @default 'text' */\n  type?: 'text' | 'tel' | 'password';\n\n  /** A character used to separate thousands */\n  thousandSeparator?: string | boolean;\n\n  /** Minimum possible value */\n  min?: NumberInputNumericValue<T>;\n\n  /** Maximum possible value */\n  max?: NumberInputNumericValue<T>;\n\n  /** Number by which value will be incremented/decremented with up/down controls and keyboard arrows @default 1 */\n  step?: NumberInputNumericValue<T>;\n\n  /** If set, the up/down controls are hidden @default false */\n  hideControls?: boolean;\n\n  /** Controls how values are clamped to the `min`/`max` range:\n   * - `'blur'` (default): User can type any value, but it's clamped when the input loses focus\n   * - `'strict'`: User cannot type values outside the range\n   * - `'none'`: No clamping; `min`/`max` only apply to increment/decrement controls and arrow keys\n   */\n  clampBehavior?: 'strict' | 'blur' | 'none';\n\n  /** If set, decimal values are allowed @default true */\n  allowDecimal?: boolean;\n\n  /** Increment/decrement handlers */\n  handlersRef?: React.Ref<NumberInputHandlers | undefined>;\n\n  /** Value used when incrementing/decrementing an empty input. If `min` is set and `startValue < min`, `min` is used instead. @default 0 */\n  startValue?: NumberInputNumericValue<T>;\n\n  /** Interval in milliseconds between value steps when increment/decrement button is held down. Can be a number or a function `(stepCount) => number` for dynamic intervals. Requires `stepHoldDelay` to be set. @default undefined */\n  stepHoldInterval?: number | ((stepCount: number) => number);\n\n  /** Initial delay in milliseconds before stepping the value. */\n  stepHoldDelay?: number;\n\n  /** If set, up/down keyboard events increment/decrement value @default true */\n  withKeyboardEvents?: boolean;\n\n  /** If set, leading zeros are removed on blur. For example, `00100` -> `100` @default true */\n  trimLeadingZeroesOnBlur?: boolean;\n\n  /** If set, all text is selected when the input receives focus @default false */\n  selectAllOnFocus?: boolean;\n\n  /** Called when the increment button or arrow up key is pressed and the value has reached the maximum */\n  onMinReached?: () => void;\n\n  /** Called when the decrement button or arrow down key is pressed and the value has reached the minimum */\n  onMaxReached?: () => void;\n}\n\nexport type NumberInputFactory = Factory<{\n  props: NumberInputProps;\n  ref: HTMLInputElement;\n  stylesNames: NumberInputStylesNames;\n  vars: NumberInputCssVariables;\n  variant: InputVariant;\n  signature: <T extends NumberInputNumericType = number>(\n    props: NumberInputProps<T>\n  ) => React.JSX.Element;\n}>;\n\nconst defaultProps = {\n  step: 1,\n  clampBehavior: 'blur',\n  allowDecimal: true,\n  allowNegative: true,\n  withKeyboardEvents: true,\n  allowLeadingZeros: true,\n  trimLeadingZeroesOnBlur: true,\n  startValue: 0,\n  allowedDecimalSeparators: ['.', ','],\n} satisfies Partial<NumberInputProps<number | bigint>>;\n\nconst varsResolver = createVarsResolver<NumberInputFactory>((_, { size }) => ({\n  controls: {\n    '--ni-chevron-size': getSize(size, 'ni-chevron-size'),\n  },\n}));\n\nfunction clampAndSanitizeInput(sanitizedValue: string | number, max?: number, min?: number) {\n  const stringValue = sanitizedValue.toString();\n  const hasTrailingDecimalSeparator = trailingDecimalSeparatorPattern.test(stringValue);\n\n  const replaced = stringValue.replace(/^0+(?=\\d)/, '');\n  const parsedValue = parseFloat(replaced);\n\n  if (Number.isNaN(parsedValue)) {\n    return replaced;\n  }\n\n  if (parsedValue > Number.MAX_SAFE_INTEGER) {\n    return max !== undefined ? max : replaced;\n  }\n\n  const clamped = clamp(parsedValue, min, max);\n\n  if (hasTrailingDecimalSeparator) {\n    const clampedString = clamped.toString().replace(/^0+(?=\\d)/, '');\n    return `${clampedString}.`;\n  }\n\n  return clamped;\n}\n\nfunction clampAndSanitizeBigIntInput(\n  sanitizedValue: string,\n  options: { min?: bigint; max?: bigint; clampBehavior: NumberInputProps['clampBehavior'] }\n) {\n  if (sanitizedValue === '' || sanitizedValue === '-') {\n    return sanitizedValue;\n  }\n\n  const parsed = parseBigIntFromString(sanitizedValue);\n\n  if (parsed === null) {\n    return sanitizedValue;\n  }\n\n  return options.clampBehavior === 'blur' ? clampBigInt(parsed, options.min, options.max) : parsed;\n}\n\nexport const NumberInput = genericFactory<NumberInputFactory>(\n  <T extends NumberInputNumericType = number>(_props: NumberInputProps<T>) => {\n    const props = useProps(\n      'NumberInput',\n      defaultProps as Partial<NumberInputProps>,\n      _props as unknown as NumberInputProps\n    );\n    const {\n      className,\n      classNames,\n      styles,\n      unstyled,\n      vars,\n      onChange,\n      onValueChange,\n      value,\n      defaultValue,\n      max,\n      min,\n      step,\n      hideControls,\n      rightSection,\n      isAllowed,\n      clampBehavior,\n      onBlur,\n      allowDecimal,\n      decimalScale,\n      onKeyDown,\n      onKeyDownCapture,\n      handlersRef,\n      startValue,\n      disabled,\n      rightSectionPointerEvents,\n      allowNegative,\n      readOnly,\n      size,\n      rightSectionWidth,\n      stepHoldInterval,\n      stepHoldDelay,\n      allowLeadingZeros,\n      withKeyboardEvents,\n      trimLeadingZeroesOnBlur,\n      allowedDecimalSeparators,\n      selectAllOnFocus,\n      onMinReached,\n      onMaxReached,\n      onFocus,\n      attributes,\n      ref,\n      ...others\n    } = props;\n    const allowNegativeResolved = allowNegative ?? true;\n    const allowLeadingZerosResolved = allowLeadingZeros ?? true;\n\n    const getStyles = useStyles<NumberInputFactory>({\n      name: 'NumberInput',\n      classes,\n      props: props as NumberInputProps,\n      classNames,\n      styles,\n      unstyled,\n      attributes,\n      vars,\n      varsResolver,\n    });\n\n    const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<NumberInputFactory>({\n      classNames,\n      styles,\n      props: props as NumberInputProps,\n    });\n\n    const valueModeRef = useRef<NumberInputMode>(\n      isBigIntValue(value) || isBigIntValue(defaultValue) ? 'bigint' : 'number'\n    );\n\n    if (isBigIntValue(value)) {\n      valueModeRef.current = 'bigint';\n    } else if (typeof value === 'number') {\n      valueModeRef.current = 'number';\n    }\n\n    const isBigIntMode = valueModeRef.current === 'bigint';\n\n    const [_value, setValue] = useUncontrolled<InternalNumberInputValue>({\n      value: value as InternalNumberInputValue | undefined,\n      defaultValue: defaultValue as InternalNumberInputValue | undefined,\n      finalValue: '',\n      onChange: onChange as ((value: InternalNumberInputValue) => void) | undefined,\n    });\n\n    const shouldUseStepInterval = stepHoldDelay !== undefined && stepHoldInterval !== undefined;\n    const inputRef = useRef<HTMLInputElement>(null);\n    const onStepTimeoutRef = useRef<number | null>(null);\n    const stepCountRef = useRef<number>(0);\n\n    const minNumber = typeof min === 'number' ? min : undefined;\n    const maxNumber = typeof max === 'number' ? max : undefined;\n    const stepNumber = typeof step === 'number' ? step : defaultProps.step;\n    const startValueNumber = typeof startValue === 'number' ? startValue : defaultProps.startValue;\n\n    const minBigInt = toBigIntOrUndefined(min);\n    const maxBigInt = toBigIntOrUndefined(max);\n    const stepBigInt = toBigIntOrUndefined(step) ?? BigInt(1);\n    const startValueBigInt = toBigIntOrUndefined(startValue) ?? BigInt(0);\n\n    const parseBigIntOrString = (inputValue: string): bigint | string => {\n      if (\n        !isValidBigIntString(inputValue, allowNegativeResolved) ||\n        (allowLeadingZerosResolved && leadingZerosPattern.test(inputValue))\n      ) {\n        return inputValue;\n      }\n\n      const parsed = parseBigIntFromString(inputValue);\n      return parsed ?? inputValue;\n    };\n\n    const getBigIntFloatValue = (inputValue: bigint) => {\n      const numericValue = Number(inputValue);\n      return Number.isSafeInteger(numericValue) ? numericValue : undefined;\n    };\n\n    const handleValueChange: OnValueChange = (payload, event) => {\n      if (event.source === 'event') {\n        if (isBigIntMode) {\n          setValue(parseBigIntOrString(payload.value));\n        } else {\n          setValue(\n            isValidNumber(payload.floatValue, payload.value) &&\n              !leadingDecimalZeroPattern.test(payload.value) &&\n              !(allowLeadingZerosResolved ? leadingZerosPattern.test(payload.value) : false) &&\n              !trailingZerosPattern.test(payload.value) &&\n              !trailingDecimalSeparatorPattern.test(payload.value)\n              ? payload.floatValue\n              : payload.value\n          );\n        }\n      }\n      onValueChange?.(payload, event);\n    };\n\n    const getDecimalPlaces = (inputValue: number | string): number => {\n      const match = String(inputValue).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n      if (!match) {\n        return 0;\n      }\n      return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n    };\n\n    const adjustCursor = (position?: number) => {\n      if (inputRef.current && typeof position !== 'undefined') {\n        inputRef.current.setSelectionRange(position, position);\n      }\n    };\n\n    const incrementRef = useRef<() => void>(noop);\n    incrementRef.current = () => {\n      if (isBigIntMode) {\n        if (!canStepBigInt(_value as bigint | string, allowNegativeResolved)) {\n          return;\n        }\n\n        let val: bigint;\n        const currentValue = _value;\n\n        if (typeof currentValue === 'bigint') {\n          const incrementedValue = currentValue + stepBigInt;\n          if (maxBigInt !== undefined && incrementedValue > maxBigInt) {\n            onMaxReached?.();\n          }\n          val =\n            maxBigInt !== undefined && incrementedValue > maxBigInt ? maxBigInt : incrementedValue;\n        } else if (typeof currentValue === 'string' && currentValue !== '') {\n          const parsed = parseBigIntFromString(currentValue);\n          if (parsed === null) {\n            return;\n          }\n\n          const incrementedValue = parsed + stepBigInt;\n          if (maxBigInt !== undefined && incrementedValue > maxBigInt) {\n            onMaxReached?.();\n          }\n          val =\n            maxBigInt !== undefined && incrementedValue > maxBigInt ? maxBigInt : incrementedValue;\n        } else {\n          val = clampBigInt(startValueBigInt, minBigInt, maxBigInt);\n        }\n\n        const formattedValue = val.toString();\n        setValue(val);\n        onValueChange?.(\n          { floatValue: getBigIntFloatValue(val), formattedValue, value: formattedValue },\n          { source: 'increment' as any }\n        );\n        setTimeout(() => adjustCursor(inputRef.current?.value.length), 0);\n        return;\n      }\n\n      if (!canStep(_value as number | string)) {\n        return;\n      }\n\n      let val: number;\n      const currentValuePrecision = getDecimalPlaces(_value as number | string);\n      const stepPrecision = getDecimalPlaces(stepNumber);\n      const maxPrecision = Math.max(currentValuePrecision, stepPrecision);\n      const factor = 10 ** maxPrecision;\n\n      if (!isNumberString(_value) && (typeof _value !== 'number' || Number.isNaN(_value))) {\n        val = clamp(startValueNumber, minNumber, maxNumber);\n      } else if (maxNumber !== undefined) {\n        const incrementedValue =\n          (Math.round(Number(_value) * factor) + Math.round(stepNumber * factor)) / factor;\n        if (incrementedValue > maxNumber) {\n          onMaxReached?.();\n        }\n        val = incrementedValue <= maxNumber ? incrementedValue : maxNumber;\n      } else {\n        val = (Math.round(Number(_value) * factor) + Math.round(stepNumber * factor)) / factor;\n      }\n\n      const formattedValue = val.toFixed(maxPrecision);\n      setValue(parseFloat(formattedValue));\n      onValueChange?.(\n        { floatValue: parseFloat(formattedValue), formattedValue, value: formattedValue },\n        { source: 'increment' as any }\n      );\n      setTimeout(() => adjustCursor(inputRef.current?.value.length), 0);\n    };\n\n    const decrementRef = useRef<() => void>(noop);\n    decrementRef.current = () => {\n      if (isBigIntMode) {\n        if (!canStepBigInt(_value as bigint | string, allowNegativeResolved)) {\n          return;\n        }\n\n        let val: bigint;\n        const minValue =\n          minBigInt !== undefined ? minBigInt : !allowNegativeResolved ? BigInt(0) : undefined;\n        const currentValue = _value;\n\n        if (typeof currentValue === 'bigint') {\n          const decrementedValue = currentValue - stepBigInt;\n          if (minValue !== undefined && decrementedValue < minValue) {\n            onMinReached?.();\n          }\n          val = minValue !== undefined && decrementedValue < minValue ? minValue : decrementedValue;\n        } else if (typeof currentValue === 'string' && currentValue !== '') {\n          const parsed = parseBigIntFromString(currentValue);\n          if (parsed === null) {\n            return;\n          }\n\n          const decrementedValue = parsed - stepBigInt;\n          if (minValue !== undefined && decrementedValue < minValue) {\n            onMinReached?.();\n          }\n          val = minValue !== undefined && decrementedValue < minValue ? minValue : decrementedValue;\n        } else {\n          val = clampBigInt(startValueBigInt, minValue, maxBigInt);\n        }\n\n        const formattedValue = val.toString();\n        setValue(val);\n        onValueChange?.(\n          { floatValue: getBigIntFloatValue(val), formattedValue, value: formattedValue },\n          { source: 'decrement' as any }\n        );\n        setTimeout(() => adjustCursor(inputRef.current?.value.length), 0);\n        return;\n      }\n\n      if (!canStep(_value as number | string)) {\n        return;\n      }\n\n      let val: number;\n      const minValue =\n        minNumber !== undefined ? minNumber : !allowNegativeResolved ? 0 : Number.MIN_SAFE_INTEGER;\n      const currentValuePrecision = getDecimalPlaces(_value as number | string);\n      const stepPrecision = getDecimalPlaces(stepNumber);\n      const maxPrecision = Math.max(currentValuePrecision, stepPrecision);\n      const factor = 10 ** maxPrecision;\n\n      if ((!isNumberString(_value) && typeof _value !== 'number') || Number.isNaN(_value)) {\n        val = clamp(startValueNumber, minValue, maxNumber);\n      } else {\n        const decrementedValue =\n          (Math.round(Number(_value) * factor) - Math.round(stepNumber * factor)) / factor;\n        if (minValue !== undefined && decrementedValue < minValue) {\n          onMinReached?.();\n        }\n        val = minValue !== undefined && decrementedValue < minValue ? minValue : decrementedValue;\n      }\n\n      const formattedValue = val.toFixed(maxPrecision);\n      setValue(parseFloat(formattedValue));\n      onValueChange?.(\n        { floatValue: parseFloat(formattedValue), formattedValue, value: formattedValue },\n        { source: 'decrement' as any }\n      );\n      setTimeout(() => adjustCursor(inputRef.current?.value.length), 0);\n    };\n\n    const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n      const pastedText = event.clipboardData.getData('text');\n      const _decimalSeparator = others.decimalSeparator || '.';\n      const separatorsToReplace = (allowedDecimalSeparators || ['.', ',']).filter(\n        (s) => s !== _decimalSeparator\n      );\n\n      if (separatorsToReplace.some((s) => pastedText.includes(s))) {\n        event.preventDefault();\n        let modifiedText = pastedText;\n        separatorsToReplace.forEach((s) => {\n          modifiedText = modifiedText.split(s).join(_decimalSeparator);\n        });\n\n        const input = inputRef.current;\n        if (input) {\n          const start = input.selectionStart ?? 0;\n          const end = input.selectionEnd ?? 0;\n          const currentValue = input.value;\n          const newValue =\n            currentValue.substring(0, start) + modifiedText + currentValue.substring(end);\n\n          const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n            window.HTMLInputElement.prototype,\n            'value'\n          )?.set;\n          nativeInputValueSetter?.call(input, newValue);\n          input.dispatchEvent(new Event('change', { bubbles: true }));\n\n          const cursorPos = start + modifiedText.length;\n          setTimeout(() => adjustCursor(cursorPos), 0);\n        }\n      }\n\n      others.onPaste?.(event as any);\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n      onKeyDown?.(event);\n\n      if (readOnly || !withKeyboardEvents) {\n        return;\n      }\n\n      if (event.key === 'ArrowUp') {\n        event.preventDefault();\n        incrementRef.current?.();\n      }\n\n      if (event.key === 'ArrowDown') {\n        event.preventDefault();\n        decrementRef.current?.();\n      }\n    };\n\n    const handleKeyDownCapture = (event: React.KeyboardEvent<HTMLInputElement>) => {\n      onKeyDownCapture?.(event);\n      if (event.key === 'Backspace') {\n        const input = inputRef.current;\n        if (input && input.selectionStart === 0 && input.selectionStart === input.selectionEnd) {\n          event.preventDefault();\n          window.setTimeout(() => adjustCursor(0), 0);\n        }\n      }\n    };\n\n    const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n      if (selectAllOnFocus) {\n        setTimeout(() => event.currentTarget.select(), 0);\n      }\n      onFocus?.(event);\n    };\n\n    const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n      let sanitizedValue = _value;\n\n      if (isBigIntMode) {\n        if (clampBehavior === 'blur' && typeof sanitizedValue === 'bigint') {\n          sanitizedValue = clampBigInt(sanitizedValue, minBigInt, maxBigInt);\n        }\n\n        if (trimLeadingZeroesOnBlur && typeof sanitizedValue === 'string') {\n          sanitizedValue = clampAndSanitizeBigIntInput(sanitizedValue, {\n            min: minBigInt,\n            max: maxBigInt,\n            clampBehavior,\n          });\n        }\n      } else {\n        if (clampBehavior === 'blur' && typeof sanitizedValue === 'number') {\n          sanitizedValue = clamp(sanitizedValue, minNumber, maxNumber);\n        }\n\n        if (\n          trimLeadingZeroesOnBlur &&\n          typeof sanitizedValue === 'string' &&\n          getDecimalPlaces(sanitizedValue) < 15\n        ) {\n          sanitizedValue = clampAndSanitizeInput(sanitizedValue, maxNumber, minNumber);\n        }\n      }\n\n      if (_value !== sanitizedValue) {\n        setValue(sanitizedValue);\n      }\n\n      onBlur?.(event);\n    };\n\n    assignRef(handlersRef, { increment: incrementRef.current, decrement: decrementRef.current });\n\n    const onStepHandleChange = (isIncrement: boolean) => {\n      if (isIncrement) {\n        incrementRef.current?.();\n      } else {\n        decrementRef.current?.();\n      }\n      stepCountRef.current += 1;\n    };\n\n    const onStepLoop = (isIncrement: boolean) => {\n      onStepHandleChange(isIncrement);\n\n      if (shouldUseStepInterval) {\n        const interval =\n          typeof stepHoldInterval === 'number'\n            ? stepHoldInterval\n            : stepHoldInterval(stepCountRef.current);\n        onStepTimeoutRef.current = window.setTimeout(() => onStepLoop(isIncrement), interval);\n      }\n    };\n\n    const onStep = (\n      event: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n      isIncrement: boolean\n    ) => {\n      event.preventDefault();\n      inputRef.current?.focus();\n      onStepHandleChange(isIncrement);\n      if (shouldUseStepInterval) {\n        onStepTimeoutRef.current = window.setTimeout(() => onStepLoop(isIncrement), stepHoldDelay);\n      }\n    };\n\n    const onStepDone = () => {\n      if (onStepTimeoutRef.current) {\n        window.clearTimeout(onStepTimeoutRef.current);\n      }\n      onStepTimeoutRef.current = null;\n      stepCountRef.current = 0;\n    };\n\n    const controls = (\n      <div {...getStyles('controls')}>\n        <UnstyledButton\n          {...getStyles('control')}\n          tabIndex={-1}\n          aria-hidden\n          disabled={\n            disabled ||\n            (typeof _value === 'number' && maxNumber !== undefined && _value >= maxNumber) ||\n            (typeof _value === 'bigint' && maxBigInt !== undefined && _value >= maxBigInt)\n          }\n          mod={{ direction: 'up' }}\n          onMouseDown={(event) => event.preventDefault()}\n          onPointerDown={(event) => {\n            onStep(event, true);\n          }}\n          onPointerUp={onStepDone}\n          onPointerLeave={onStepDone}\n        >\n          <NumberInputChevron direction=\"up\" />\n        </UnstyledButton>\n        <UnstyledButton\n          {...getStyles('control')}\n          tabIndex={-1}\n          aria-hidden\n          disabled={\n            disabled ||\n            (typeof _value === 'number' && minNumber !== undefined && _value <= minNumber) ||\n            (typeof _value === 'bigint' && minBigInt !== undefined && _value <= minBigInt)\n          }\n          mod={{ direction: 'down' }}\n          onMouseDown={(event) => event.preventDefault()}\n          onPointerDown={(event) => {\n            onStep(event, false);\n          }}\n          onPointerUp={onStepDone}\n          onPointerLeave={onStepDone}\n        >\n          <NumberInputChevron direction=\"down\" />\n        </UnstyledButton>\n      </div>\n    );\n\n    return (\n      <InputBase\n        component={NumericFormat}\n        allowNegative={allowNegative}\n        className={cx(classes.root, className)}\n        size={size}\n        {...others}\n        inputMode={isBigIntMode ? 'numeric' : 'decimal'}\n        readOnly={readOnly}\n        disabled={disabled}\n        value={typeof _value === 'bigint' ? _value.toString() : _value}\n        getInputRef={useMergedRef(ref, inputRef)}\n        onValueChange={handleValueChange}\n        rightSection={\n          hideControls ||\n          readOnly ||\n          !(isBigIntMode\n            ? canStepBigInt(_value as bigint | string, allowNegativeResolved)\n            : canStep(_value as number | string))\n            ? rightSection\n            : rightSection || controls\n        }\n        classNames={resolvedClassNames}\n        styles={resolvedStyles}\n        unstyled={unstyled}\n        __staticSelector=\"NumberInput\"\n        decimalScale={isBigIntMode ? 0 : allowDecimal ? decimalScale : 0}\n        onPaste={handlePaste}\n        onFocus={handleFocus}\n        onKeyDown={handleKeyDown}\n        onKeyDownCapture={handleKeyDownCapture}\n        rightSectionPointerEvents={rightSectionPointerEvents ?? (disabled ? 'none' : undefined)}\n        rightSectionWidth={rightSectionWidth ?? `var(--ni-right-section-width-${size || 'sm'})`}\n        allowLeadingZeros={allowLeadingZeros}\n        allowedDecimalSeparators={allowedDecimalSeparators}\n        onBlur={handleBlur}\n        attributes={attributes}\n        isAllowed={(val) => {\n          const userAllowed = isAllowed ? isAllowed(val) : true;\n          if (!userAllowed) {\n            return false;\n          }\n\n          if (clampBehavior !== 'strict') {\n            return true;\n          }\n\n          if (!isBigIntMode) {\n            return isInRange(val.floatValue, minNumber, maxNumber);\n          }\n\n          if (val.value === '' || val.value === '-') {\n            return true;\n          }\n\n          const parsed = parseBigIntFromString(val.value);\n\n          if (parsed === null) {\n            return true;\n          }\n\n          return (\n            (minBigInt === undefined || parsed >= minBigInt) &&\n            (maxBigInt === undefined || parsed <= maxBigInt)\n          );\n        }}\n      />\n    );\n  }\n);\n\nNumberInput.classes = { ...InputBase.classes, ...classes };\nNumberInput.varsResolver = varsResolver;\nNumberInput.displayName = '@mantine/core/NumberInput';\n"],"mappings":"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"}