{"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  size: 'sm',\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      ['Input', 'InputWrapper', '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\nexport namespace NumberInput {\n  export type Props<T extends NumberInputNumericType = number> = NumberInputProps<T>;\n  export type StylesNames = NumberInputStylesNames;\n  export type Factory = NumberInputFactory;\n  export type CssVariables = NumberInputCssVariables;\n  export type Handlers = NumberInputHandlers;\n}\n"],"mappings":"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"}