{"version":3,"sources":["../src/index.tsx","../src/hooks.ts","../src/utils/defer.ts","../src/utils/input.ts","../src/utils/helpers.ts","../src/constants.ts","../src/validate-props.ts","../src/utils/parse-mask.ts","../src/utils/mask.ts","../src/v2-compat.ts","../src/utils/transform.ts","../src/use-mask.ts","../src/set-native-value.ts","../src/bind-mask.ts"],"sourcesContent":["import React, { useLayoutEffect, forwardRef } from \"react\";\n\nimport { useInputState, useInputElement, usePrevious } from \"./hooks\";\nimport { validateMaxLength, validateChildren, validateMaskPlaceholder } from \"./validate-props\";\nimport { defer } from \"./utils/defer\";\nimport { isInputFocused } from \"./utils/input\";\nimport { isFunction, toString, getElementDocument } from \"./utils/helpers\";\nimport MaskUtils from \"./utils/mask\";\nimport {\n  resolveMaskPlaceholder,\n  normalizeFormatChars,\n  createBeforeMaskedStateChangeAdapter,\n  warnDeprecatedOnce\n} from \"./v2-compat\";\nimport { resolveTransform } from \"./utils/transform\";\nimport type { InputMaskProps, InputState, V2MaskOptions } from \"./types\";\n\nconst InputMask = forwardRef<HTMLInputElement, InputMaskProps>(function InputMask(\n  props,\n  forwardedRef\n) {\n  const {\n    alwaysShowMask = false,\n    children,\n    mask,\n    maskPlaceholder: maskPlaceholderProp,\n    beforeMaskedStateChange: beforeMaskedStateChangeProp,\n    transform,\n    maskChar,\n    formatChars,\n    beforeMaskedValueChange,\n    ...restProps\n  } = props;\n\n  if (maskChar !== undefined) {\n    warnDeprecatedOnce(\"maskChar\", \"maskChar is deprecated, use maskPlaceholder instead. See migration guide: https://github.com/Temirtator/react-input-mask-format#migrating-from-react-input-mask\");\n  }\n  if (beforeMaskedValueChange !== undefined) {\n    warnDeprecatedOnce(\"beforeMaskedValueChange\", \"beforeMaskedValueChange is deprecated, use beforeMaskedStateChange. See migration guide: https://github.com/Temirtator/react-input-mask-format#migrating-from-react-input-mask\");\n  }\n\n  const resolvedPlaceholder = resolveMaskPlaceholder(maskPlaceholderProp, maskChar);\n  const maskPlaceholder = resolvedPlaceholder === undefined ? \"_\" : resolvedPlaceholder;\n\n  validateMaxLength(props);\n  validateMaskPlaceholder({ ...props, maskPlaceholder });\n\n  const { formatChars: normalizedFormatChars, hasLegacyString } =\n    normalizeFormatChars(formatChars);\n  if (hasLegacyString) {\n    warnDeprecatedOnce(\n      \"formatChars\",\n      \"string values in formatChars are deprecated, pass RegExp values instead (e.g. { \\\"#\\\": /[0-9]/ }). See migration guide: https://github.com/Temirtator/react-input-mask-format#migrating-from-react-input-mask\"\n    );\n  }\n\n  const maskUtils = new MaskUtils({\n    mask,\n    maskPlaceholder,\n    formatChars: normalizedFormatChars,\n    transform: resolveTransform(transform)\n  });\n\n  let beforeMaskedStateChange = beforeMaskedStateChangeProp;\n  if (!beforeMaskedStateChange && beforeMaskedValueChange) {\n    const v2MaskOptions: V2MaskOptions = {\n      mask,\n      maskChar: maskPlaceholder,\n      alwaysShowMask,\n      formatChars: formatChars ?? { \"9\": \"[0-9]\", a: \"[A-Za-z]\", \"*\": \"[A-Za-z0-9]\" },\n      permanents: maskUtils.maskOptions.permanents\n    };\n    beforeMaskedStateChange = createBeforeMaskedStateChangeAdapter(\n      beforeMaskedValueChange,\n      v2MaskOptions\n    );\n  }\n\n  const isMasked = !!mask;\n  const isEditable = !restProps.disabled && !restProps.readOnly;\n  const isControlled = props.value !== null && props.value !== undefined;\n  const previousIsMasked = usePrevious(isMasked);\n  const initialValue = toString(\n    (isControlled ? props.value : props.defaultValue) || \"\"\n  );\n\n  const {\n    inputRef,\n    getInputState,\n    setInputState,\n    getLastInputState\n  } = useInputState(initialValue, isMasked);\n  const getInputElement = useInputElement(inputRef);\n\n  function onChange(event: React.ChangeEvent<HTMLInputElement>): void {\n    const currentState = getInputState();\n    const previousState = getLastInputState();\n    let newInputState: InputState = maskUtils.processChange(currentState, previousState);\n\n    if (beforeMaskedStateChange) {\n      newInputState = beforeMaskedStateChange({\n        currentState,\n        previousState,\n        nextState: newInputState\n      });\n    }\n\n    setInputState(newInputState);\n\n    if (props.onChange) {\n      props.onChange(event);\n    }\n  }\n\n  function onFocus(event: React.FocusEvent<HTMLInputElement>): void {\n    // If autoFocus property is set, focus event fires before the ref handler gets called\n    inputRef.current = event.target;\n\n    const currentValue = getInputState().value;\n\n    if (isMasked && !maskUtils.isValueFilled(currentValue)) {\n      let newValue = maskUtils.formatValue(currentValue);\n      let newSelection = maskUtils.getDefaultSelectionForValue(newValue);\n      let newInputState: InputState = {\n        value: newValue,\n        selection: newSelection\n      };\n\n      if (beforeMaskedStateChange) {\n        newInputState = beforeMaskedStateChange({\n          currentState: getInputState(),\n          nextState: newInputState\n        });\n        newValue = newInputState.value;\n        newSelection = newInputState.selection;\n      }\n\n      setInputState(newInputState);\n\n      if (newValue !== currentValue && props.onChange) {\n        props.onChange(event as unknown as React.ChangeEvent<HTMLInputElement>);\n      }\n\n      // Chrome resets selection after focus event,\n      // so we want to restore it later\n      defer(() => {\n        setInputState(getLastInputState());\n      });\n    }\n\n    if (props.onFocus) {\n      props.onFocus(event);\n    }\n  }\n\n  function onBlur(event: React.FocusEvent<HTMLInputElement>): void {\n    const currentValue = getInputState().value;\n    const lastValue = getLastInputState().value;\n\n    if (isMasked && !alwaysShowMask && maskUtils.isValueEmpty(lastValue)) {\n      let newValue = \"\";\n      let newInputState: InputState = {\n        value: newValue,\n        selection: { start: null, end: null }\n      };\n\n      if (beforeMaskedStateChange) {\n        newInputState = beforeMaskedStateChange({\n          currentState: getInputState(),\n          nextState: newInputState\n        });\n        newValue = newInputState.value;\n      }\n\n      setInputState(newInputState);\n\n      if (newValue !== currentValue && props.onChange) {\n        props.onChange(event as unknown as React.ChangeEvent<HTMLInputElement>);\n      }\n    }\n\n    if (props.onBlur) {\n      props.onBlur(event);\n    }\n  }\n\n  // Tiny unintentional mouse movements can break cursor\n  // position on focus, so we have to restore it in that case\n  //\n  // https://github.com/sanniassin/react-input-mask/issues/108\n  function onMouseDown(event: React.MouseEvent<HTMLInputElement>): void {\n    const input = getInputElement();\n    const { value } = getInputState();\n    const inputDocument = getElementDocument(input);\n\n    if (!isInputFocused(input as HTMLInputElement) && !maskUtils.isValueFilled(value)) {\n      const mouseDownX = event.clientX;\n      const mouseDownY = event.clientY;\n      const mouseDownTime = new Date().getTime();\n\n      const mouseUpHandler = (mouseUpEvent: MouseEvent): void => {\n        inputDocument!.removeEventListener(\"mouseup\", mouseUpHandler);\n\n        if (!isInputFocused(input as HTMLInputElement)) {\n          return;\n        }\n\n        const deltaX = Math.abs(mouseUpEvent.clientX - mouseDownX);\n        const deltaY = Math.abs(mouseUpEvent.clientY - mouseDownY);\n        const axisDelta = Math.max(deltaX, deltaY);\n        const timeDelta = new Date().getTime() - mouseDownTime;\n\n        if (\n          (axisDelta <= 10 && timeDelta <= 200) ||\n          (axisDelta <= 5 && timeDelta <= 300)\n        ) {\n          const lastState = getLastInputState();\n          const newSelection = maskUtils.getDefaultSelectionForValue(\n            lastState.value\n          );\n          const newState = {\n            ...lastState,\n            selection: newSelection\n          };\n          setInputState(newState);\n        }\n      };\n\n      inputDocument!.addEventListener(\"mouseup\", mouseUpHandler);\n    }\n\n    if (props.onMouseDown) {\n      props.onMouseDown(event);\n    }\n  }\n\n  // For controlled inputs we want to provide properly formatted value\n  // prop. Computed purely during render; refs/DOM are synced in a layout\n  // effect so render stays side-effect free (StrictMode / concurrent).\n  let renderValue = props.value as string | undefined;\n  if (isMasked && isControlled) {\n    const input = getInputElement();\n    const isFocused = !!input && isInputFocused(input);\n    let newValue =\n      isFocused || alwaysShowMask || props.value\n        ? maskUtils.formatValue(props.value as string)\n        : (props.value as string);\n\n    if (beforeMaskedStateChange) {\n      newValue = beforeMaskedStateChange({\n        nextState: { value: newValue, selection: { start: null, end: null } }\n      }).value;\n    }\n\n    renderValue = newValue;\n  }\n\n  const lastSelection = getLastInputState().selection;\n\n  useLayoutEffect(() => {\n    if (isMasked && isControlled) {\n      setInputState({\n        ...getLastInputState(),\n        value: renderValue as string\n      });\n    }\n  });\n\n  useLayoutEffect(() => {\n    if (!isMasked) {\n      return;\n    }\n\n    const input = getInputElement();\n    const isFocused = isInputFocused(input as HTMLInputElement);\n    const previousSelection = lastSelection;\n    const currentState = getInputState();\n    let newInputState: InputState = { ...currentState };\n\n    // Update value for uncontrolled inputs to make sure\n    // it's always in sync with mask props\n    if (!isControlled) {\n      const currentValue = currentState.value;\n      const formattedValue = maskUtils.formatValue(currentValue);\n      const isValueEmpty = maskUtils.isValueEmpty(formattedValue);\n      const shouldFormatValue = !isValueEmpty || isFocused || alwaysShowMask;\n      if (shouldFormatValue) {\n        newInputState.value = formattedValue;\n      } else if (isValueEmpty && !isFocused) {\n        newInputState.value = \"\";\n      }\n    }\n\n    if (isFocused && !previousIsMasked) {\n      // Adjust selection if input got masked while being focused\n      newInputState.selection = maskUtils.getDefaultSelectionForValue(\n        newInputState.value\n      );\n    } else if (isControlled && isFocused && previousSelection) {\n      // Restore cursor position if value has changed outside change event\n      if (previousSelection.start !== null && previousSelection.end !== null) {\n        newInputState.selection = previousSelection;\n      }\n    }\n\n    if (beforeMaskedStateChange) {\n      newInputState = beforeMaskedStateChange({\n        currentState,\n        nextState: newInputState\n      });\n    }\n\n    setInputState(newInputState);\n  });\n\n  const inputProps = {\n    ...restProps,\n    onFocus,\n    onBlur,\n    onChange: isMasked && isEditable ? onChange : props.onChange,\n    onMouseDown: isMasked && isEditable ? onMouseDown : props.onMouseDown,\n    // `ref` may target either the plain <input> DOM node or, when custom\n    // children are used, whatever node the child's own ref forwards to.\n    ref: (ref: unknown) => {\n      inputRef.current = ref as HTMLInputElement | null;\n\n      if (isFunction(forwardedRef)) {\n        (forwardedRef as (instance: unknown) => void)(ref);\n      } else if (forwardedRef !== null && typeof forwardedRef === \"object\") {\n        (forwardedRef as React.MutableRefObject<unknown>).current = ref;\n      }\n    },\n    value: isMasked && isControlled ? renderValue : props.value\n  };\n\n  if (children) {\n    validateChildren(props, children);\n\n    // Clone the child injecting our props and callback ref directly.\n    // If the child forwards its ref to a non-input node, useInputElement\n    // falls back to querySelector(\"input\") to find the real input.\n    return React.cloneElement(children, inputProps);\n  }\n\n  return <input {...inputProps} />;\n});\n\nInputMask.displayName = \"InputMask\";\n\nexport { defaultFormatChars, extendedFormatChars } from \"./constants\";\nexport { useMask } from \"./use-mask\";\nexport type {\n  InputMaskProps,\n  InputState,\n  Selection,\n  BeforeMaskedStateChangeFn,\n  BeforeMaskedValueChangeFn,\n  Mask,\n  Transform,\n  FormatChars,\n  UseMaskOptions\n} from \"./types\";\nexport default InputMask;\n","import { useCallback, useEffect, useLayoutEffect, useRef } from \"react\";\nimport type React from \"react\";\n\nimport { defer, cancelDefer } from \"./utils/defer\";\nimport { setInputSelection, getInputSelection, isInputFocused } from \"./utils/input\";\nimport { isDOMElement } from \"./utils/helpers\";\nimport type { InputState, Selection } from \"./types\";\n\nexport type InputElementGetter = () => HTMLInputElement | null;\n\nexport function useInputElement(\n  inputRef: React.MutableRefObject<HTMLInputElement | null>\n): InputElementGetter {\n  return useCallback(() => {\n    let input: HTMLInputElement | Element | null = inputRef.current;\n    const isDOMNode = typeof window !== \"undefined\" && isDOMElement(input);\n\n    // workaround for react-test-renderer\n    // https://github.com/sanniassin/react-input-mask/issues/147\n    if (!input || !isDOMNode) {\n      return null;\n    }\n\n    if (input.nodeName !== \"INPUT\") {\n      input = input.querySelector(\"input\");\n    }\n\n    if (!input) {\n      throw new Error(\"react-input-mask: inputComponent doesn't contain input node\");\n    }\n\n    return input as HTMLInputElement;\n  }, [inputRef]);\n}\n\nfunction useDeferLoop(callback: () => void): [() => void, () => void] {\n  const deferIdRef = useRef<number | null>(null);\n\n  const runLoop = useCallback(() => {\n    // If there are simulated focus events, runLoop could be\n    // called multiple times without blur or re-render\n    if (deferIdRef.current !== null) {\n      return;\n    }\n\n    function loop() {\n      callback();\n      deferIdRef.current = defer(loop);\n    }\n\n    loop();\n  }, [callback]);\n\n  const stopLoop = useCallback(() => {\n    cancelDefer(deferIdRef.current);\n    deferIdRef.current = null;\n  }, []);\n\n  useEffect(() => {\n    if (deferIdRef.current) {\n      stopLoop();\n      runLoop();\n    }\n  }, [runLoop, stopLoop]);\n\n  useEffect(() => cancelDefer(deferIdRef.current), []);\n\n  return [runLoop, stopLoop];\n}\n\nfunction useSelection(\n  inputRef: React.MutableRefObject<HTMLInputElement | null>,\n  isMasked: boolean\n) {\n  const selectionRef = useRef<Selection>({ start: null, end: null });\n  const getInputElement = useInputElement(inputRef);\n\n  const getSelection = useCallback(() => {\n    const input = getInputElement();\n    return getInputSelection(input as HTMLInputElement);\n  }, [getInputElement]);\n\n  const getLastSelection = useCallback(() => {\n    return selectionRef.current;\n  }, []);\n\n  const setSelection = useCallback(\n    (selection: Selection) => {\n      const input = getInputElement();\n\n      // Don't change selection on unfocused input\n      // because Safari sets focus on selection change (#154)\n      if (!input || !isInputFocused(input)) {\n        return;\n      }\n\n      setInputSelection(input, selection.start!, selection.end!);\n\n      // Use actual selection in case the requested one was out of range\n      selectionRef.current = getSelection();\n    },\n    [getInputElement, getSelection]\n  );\n\n  const selectionLoop = useCallback(() => {\n    selectionRef.current = getSelection();\n  }, [getSelection]);\n  const [runSelectionLoop, stopSelectionLoop] = useDeferLoop(selectionLoop);\n\n  useLayoutEffect(() => {\n    if (!isMasked) {\n      return;\n    }\n\n    const input = getInputElement();\n    if (!input) return;\n    input.addEventListener(\"focus\", runSelectionLoop);\n    input.addEventListener(\"blur\", stopSelectionLoop);\n\n    if (isInputFocused(input)) {\n      runSelectionLoop();\n    }\n\n    return () => {\n      input.removeEventListener(\"focus\", runSelectionLoop);\n      input.removeEventListener(\"blur\", stopSelectionLoop);\n\n      stopSelectionLoop();\n    };\n  });\n\n  return { getSelection, getLastSelection, setSelection };\n}\n\nfunction useValue(\n  inputRef: React.MutableRefObject<HTMLInputElement | null>,\n  initialValue: string\n) {\n  const getInputElement = useInputElement(inputRef);\n  const valueRef = useRef(initialValue);\n\n  const getValue = useCallback(() => {\n    return getInputElement()!.value;\n  }, [getInputElement]);\n\n  const getLastValue = useCallback(() => {\n    return valueRef.current;\n  }, []);\n\n  const setValue = useCallback(\n    (newValue: string) => {\n      valueRef.current = newValue;\n\n      const input = getInputElement();\n      if (input) {\n        input.value = newValue;\n      }\n    },\n    [getInputElement]\n  );\n\n  return {\n    getValue,\n    getLastValue,\n    setValue\n  };\n}\n\nexport function useInputState(\n  initialValue: string,\n  isMasked: boolean\n): {\n  inputRef: React.MutableRefObject<HTMLInputElement | null>;\n  getInputState: () => InputState;\n  getLastInputState: () => InputState;\n  setInputState: (state: InputState) => void;\n} {\n  const inputRef = useRef<HTMLInputElement | null>(null);\n  const { getSelection, getLastSelection, setSelection } = useSelection(inputRef, isMasked);\n  const { getValue, getLastValue, setValue } = useValue(inputRef, initialValue);\n\n  function getLastInputState(): InputState {\n    return {\n      value: getLastValue(),\n      selection: getLastSelection()\n    };\n  }\n\n  function getInputState(): InputState {\n    return {\n      value: getValue(),\n      selection: getSelection()\n    };\n  }\n\n  function setInputState({ value, selection }: InputState): void {\n    setValue(value);\n    setSelection(selection);\n  }\n\n  return {\n    inputRef,\n    getInputState,\n    getLastInputState,\n    setInputState\n  };\n}\n\nexport function usePrevious<T>(value: T): T | undefined {\n  const ref = useRef<T | undefined>(undefined);\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n}\n","export function defer(fn: FrameRequestCallback): number {\n  return requestAnimationFrame(fn);\n}\n\nexport function cancelDefer(deferId: number | null): void {\n  if (deferId !== null) {\n    cancelAnimationFrame(deferId);\n  }\n}\n","import type { Selection } from \"../types\";\n\nexport function setInputSelection(\n  input: HTMLInputElement,\n  start: number,\n  end?: number\n): void {\n  if (end === undefined) {\n    end = start;\n  }\n  input.setSelectionRange(start, end);\n}\n\nexport function getInputSelection(input: HTMLInputElement): Required<Selection> {\n  const start = input.selectionStart;\n  const end = input.selectionEnd;\n\n  return {\n    start,\n    end,\n    length: (end ?? 0) - (start ?? 0)\n  };\n}\n\nexport function isInputFocused(input: HTMLInputElement): boolean {\n  const inputDocument = input.ownerDocument;\n  return inputDocument.hasFocus() && inputDocument.activeElement === input;\n}\n","// Element's window may differ from the one within React instance\n// if element rendered within iframe.\n// See https://github.com/sanniassin/react-input-mask/issues/182\nexport function getElementDocument(element: Element | null | undefined) {\n  return element?.ownerDocument;\n}\n\nexport function getElementWindow(element: Element | null | undefined) {\n  return getElementDocument(element)?.defaultView;\n}\n\nexport function isDOMElement(element: unknown): element is HTMLElement {\n  const elementWindow = getElementWindow(element as Element | null);\n  return (\n    !!elementWindow && (element as Element) instanceof elementWindow.HTMLElement\n  );\n}\n\nexport function isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === \"function\";\n}\n\nexport function findLastIndex<T>(\n  array: readonly T[],\n  predicate: (item: T, index: number) => boolean\n): number {\n  for (let i = array.length - 1; i >= 0; i--) {\n    const x = array[i];\n    if (predicate(x, i)) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function repeat(string: string, n = 1): string {\n  let result = \"\";\n  for (let i = 0; i < n; i++) {\n    result += string;\n  }\n  return result;\n}\n\nexport function toString(value: unknown): string {\n  return `${value}`;\n}\n","import type { FormatChars } from \"./types\";\n\nexport const CONTROLLED_PROPS = [\n  \"disabled\",\n  \"onBlur\",\n  \"onChange\",\n  \"onFocus\",\n  \"onMouseDown\",\n  \"readOnly\",\n  \"value\"\n] as const;\n\nexport const defaultFormatChars: FormatChars = {\n  \"9\": /[0-9]/,\n  a: /[A-Za-z]/,\n  \"*\": /[A-Za-z0-9]/\n};\n\nexport const extendedFormatChars: FormatChars = {\n  ...defaultFormatChars,\n  A: /[A-Z]/,\n  \"Я\": /[А-Яа-яЁёӘәҒғҚқҢңӨөҰұҮүҺһІі]/,\n  \"#\": /[0-9A-Fa-f]/\n};\n","import type React from \"react\";\nimport { CONTROLLED_PROPS } from \"./constants\";\nimport type { InputMaskProps } from \"./types\";\n\nfunction warnDev(condition: boolean, message: string): void {\n  if (process.env.NODE_ENV !== \"production\" && !condition) {\n    console.error(`react-input-mask-format: ${message}`);\n  }\n}\n\nfunction invariant(condition: boolean, message: string): void {\n  if (!condition) {\n    throw new Error(`react-input-mask-format: ${message}`);\n  }\n}\n\nexport function validateMaxLength(props: InputMaskProps): void {\n  warnDev(\n    !props.maxLength || !props.mask,\n    \"maxLength property shouldn't be passed to the masked input. It breaks masking and unnecessary because length is limited by the mask length.\"\n  );\n}\n\nexport function validateMaskPlaceholder(props: InputMaskProps & { maskPlaceholder?: string | null }): void {\n  const { mask, maskPlaceholder } = props;\n\n  invariant(\n    !mask ||\n      !maskPlaceholder ||\n      maskPlaceholder.length === 1 ||\n      maskPlaceholder.length === mask.length,\n    \"maskPlaceholder should either be a single character or have the same length as the mask:\\n\" +\n      `mask: ${mask}\\n` +\n      `maskPlaceholder: ${maskPlaceholder}`\n  );\n}\n\nexport function validateChildren(\n  props: InputMaskProps,\n  inputElement: React.ReactElement\n): void {\n  const conflictProps = CONTROLLED_PROPS.filter(\n    propId =>\n      (inputElement.props as Record<string, unknown>)[propId] != null &&\n      (inputElement.props as Record<string, unknown>)[propId] !==\n        (props as Record<string, unknown>)[propId]\n  );\n\n  invariant(\n    !conflictProps.length,\n    `the following props should be passed to the InputMask component, not to children: ${conflictProps.join(\",\")}`\n  );\n}\n","import { defaultFormatChars } from \"../constants\";\nimport type { FormatChars, Mask } from \"../types\";\n\nexport interface ParsedMaskOptions {\n  maskPlaceholder: string | null;\n  mask: Array<string | RegExp> | null;\n  prefix: string | null;\n  lastEditablePosition: number | null;\n  permanents: number[];\n}\n\nexport default function parseMask({\n  mask,\n  maskPlaceholder,\n  formatChars = defaultFormatChars\n}: {\n  mask?: Mask | null;\n  maskPlaceholder?: string | null;\n  formatChars?: FormatChars;\n}): ParsedMaskOptions {\n  const permanents: number[] = [];\n\n  if (!mask) {\n    return {\n      maskPlaceholder: null,\n      mask: null,\n      prefix: null,\n      lastEditablePosition: null,\n      permanents: []\n    };\n  }\n\n  let parsedMask: Array<string | RegExp>;\n\n  if (typeof mask === \"string\") {\n    let isPermanent = false;\n    let parsedMaskString = \"\";\n    mask.split(\"\").forEach(character => {\n      if (!isPermanent && character === \"\\\\\") {\n        isPermanent = true;\n      } else {\n        if (isPermanent || !formatChars[character]) {\n          permanents.push(parsedMaskString.length);\n        }\n        parsedMaskString += character;\n        isPermanent = false;\n      }\n    });\n\n    parsedMask = parsedMaskString.split(\"\").map((character, index) => {\n      if (permanents.indexOf(index) === -1) {\n        return formatChars[character];\n      }\n      return character;\n    });\n  } else {\n    mask.forEach((character, index) => {\n      if (typeof character === \"string\") {\n        permanents.push(index);\n      }\n    });\n    parsedMask = mask;\n  }\n\n  let parsedPlaceholder: string | null = maskPlaceholder ?? null;\n\n  if (parsedPlaceholder) {\n    let placeholderChars: Array<string | RegExp>;\n\n    if (parsedPlaceholder.length === 1) {\n      placeholderChars = parsedMask.map((character, index) => {\n        if (permanents.indexOf(index) !== -1) {\n          return character;\n        }\n        return parsedPlaceholder as string;\n      });\n    } else {\n      placeholderChars = parsedPlaceholder.split(\"\");\n    }\n\n    permanents.forEach(position => {\n      placeholderChars[position] = parsedMask[position];\n    });\n\n    parsedPlaceholder = placeholderChars.join(\"\");\n  }\n\n  const prefix = permanents\n    .filter((position, index) => position === index)\n    .map(position => parsedMask[position])\n    .join(\"\");\n\n  let lastEditablePosition = parsedMask.length - 1;\n  while (permanents.indexOf(lastEditablePosition) !== -1) {\n    lastEditablePosition--;\n  }\n\n  return {\n    maskPlaceholder: parsedPlaceholder,\n    prefix,\n    mask: parsedMask,\n    lastEditablePosition,\n    permanents\n  };\n}\n","import { findLastIndex, repeat } from \"./helpers\";\nimport parseMask, { ParsedMaskOptions } from \"./parse-mask\";\nimport type { FormatChars, InputState, Selection } from \"../types\";\n\nexport default class MaskUtils {\n  maskOptions: ParsedMaskOptions;\n  transform?: (char: string, position: number) => string;\n\n  constructor(options: {\n    mask?: string | Array<string | RegExp> | null;\n    maskPlaceholder?: string | null;\n    formatChars?: FormatChars;\n    transform?: (char: string, position: number) => string;\n  }) {\n    this.maskOptions = parseMask(options);\n    this.transform = options.transform;\n  }\n\n  isCharacterAllowedAtPosition = (character: string, position: number): boolean => {\n    const { maskPlaceholder } = this.maskOptions;\n\n    if (this.isCharacterFillingPosition(character, position)) {\n      return true;\n    }\n\n    if (!maskPlaceholder) {\n      return false;\n    }\n\n    return maskPlaceholder[position] === character;\n  };\n\n  isCharacterFillingPosition = (character: string, position: number): boolean => {\n    const { mask } = this.maskOptions;\n\n    if (!character || position >= mask!.length) {\n      return false;\n    }\n\n    if (!this.isPositionEditable(position)) {\n      return mask![position] === character;\n    }\n\n    const charRule = mask![position];\n    return new RegExp(charRule).test(character);\n  };\n\n  isPositionEditable = (position: number): boolean => {\n    const { mask, permanents } = this.maskOptions;\n    return position < mask!.length && permanents.indexOf(position) === -1;\n  };\n\n  isValueEmpty = (value: string): boolean => {\n    return value.split(\"\").every((character, position) => {\n      return (\n        !this.isPositionEditable(position) ||\n        !this.isCharacterFillingPosition(character, position)\n      );\n    });\n  };\n\n  isValueFilled = (value: string): boolean => {\n    return (\n      this.getFilledLength(value) === this.maskOptions.lastEditablePosition! + 1\n    );\n  };\n\n  getDefaultSelectionForValue = (value: string): Selection => {\n    const filledLength = this.getFilledLength(value);\n    const cursorPosition = this.getRightEditablePosition(filledLength);\n    return { start: cursorPosition, end: cursorPosition };\n  };\n\n  getFilledLength = (value: string): number => {\n    const characters = value.split(\"\");\n    const lastFilledIndex = findLastIndex(characters, (character, position) => {\n      return (\n        this.isPositionEditable(position) &&\n        this.isCharacterFillingPosition(character, position)\n      );\n    });\n    return lastFilledIndex + 1;\n  };\n\n  getStringFillingLengthAtPosition = (string: string, position: number): number => {\n    const characters = string.split(\"\");\n    const insertedValue = characters.reduce((value, character) => {\n      return this.insertCharacterAtPosition(value, character, value.length);\n    }, repeat(\" \", position));\n\n    return insertedValue.length - position;\n  };\n\n  getLeftEditablePosition = (position: number): number | null => {\n    for (let i = position; i >= 0; i--) {\n      if (this.isPositionEditable(i)) {\n        return i;\n      }\n    }\n    return null;\n  };\n\n  getRightEditablePosition = (position: number): number | null => {\n    const { mask } = this.maskOptions;\n    for (let i = position; i < mask!.length; i++) {\n      if (this.isPositionEditable(i)) {\n        return i;\n      }\n    }\n    return null;\n  };\n\n  formatValue = (value: string): string => {\n    const { maskPlaceholder, mask } = this.maskOptions;\n\n    if (!maskPlaceholder) {\n      value = this.insertStringAtPosition(\"\", value, 0);\n\n      while (\n        value.length < mask!.length &&\n        !this.isPositionEditable(value.length)\n      ) {\n        value += mask![value.length];\n      }\n\n      return value;\n    }\n\n    return this.insertStringAtPosition(maskPlaceholder, value, 0);\n  };\n\n  clearRange = (value: string, start: number, len: number): string => {\n    if (!len) {\n      return value;\n    }\n\n    const end = start + len;\n    const { maskPlaceholder, mask } = this.maskOptions;\n\n    const clearedValue = value\n      .split(\"\")\n      .map((character, i) => {\n        const isEditable = this.isPositionEditable(i);\n\n        if (!maskPlaceholder && i >= end && !isEditable) {\n          return \"\";\n        }\n        if (i < start || i >= end) {\n          return character;\n        }\n        if (!isEditable) {\n          return mask![i];\n        }\n        if (maskPlaceholder) {\n          return maskPlaceholder[i];\n        }\n        return \"\";\n      })\n      .join(\"\");\n\n    return this.formatValue(clearedValue);\n  };\n\n  insertCharacterAtPosition = (value: string, character: string, position: number): string => {\n    const { mask, maskPlaceholder } = this.maskOptions;\n    if (position >= mask!.length) {\n      return value;\n    }\n\n    const transformedCharacter =\n      this.transform && this.isPositionEditable(position)\n        ? this.transform(character, position)\n        : character;\n\n    const isAllowed = this.isCharacterAllowedAtPosition(transformedCharacter, position);\n    const isEditable = this.isPositionEditable(position);\n    const nextEditablePosition = this.getRightEditablePosition(position);\n    const isNextPlaceholder =\n      maskPlaceholder && nextEditablePosition\n        ? transformedCharacter === maskPlaceholder[nextEditablePosition]\n        : null;\n    const valueBefore = value.slice(0, position);\n\n    if (isAllowed || !isEditable) {\n      const insertedCharacter = isAllowed ? transformedCharacter : mask![position];\n      value = valueBefore + insertedCharacter;\n    }\n\n    if (!isAllowed && !isEditable && !isNextPlaceholder) {\n      value = this.insertCharacterAtPosition(value, character, position + 1);\n    }\n\n    return value;\n  };\n\n  insertStringAtPosition = (value: string, string: string, position: number): string => {\n    const { mask, maskPlaceholder } = this.maskOptions;\n    if (!string || position >= mask!.length) {\n      return value;\n    }\n\n    const characters = string.split(\"\");\n    const isFixedLength = this.isValueFilled(value) || !!maskPlaceholder;\n    const valueAfter = value.slice(position);\n\n    value = characters.reduce((value, character) => {\n      return this.insertCharacterAtPosition(value, character, value.length);\n    }, value.slice(0, position));\n\n    if (isFixedLength) {\n      value += valueAfter.slice(value.length - position);\n    } else if (this.isValueFilled(value)) {\n      value += mask!.slice(value.length).join(\"\");\n    } else {\n      const editableCharactersAfter = valueAfter\n        .split(\"\")\n        .filter((character, i) => {\n          return this.isPositionEditable(position + i);\n        });\n      value = editableCharactersAfter.reduce((value, character) => {\n        const nextEditablePosition = this.getRightEditablePosition(\n          value.length\n        );\n        if (nextEditablePosition === null) {\n          return value;\n        }\n\n        if (!this.isPositionEditable(value.length)) {\n          value += mask!.slice(value.length, nextEditablePosition).join(\"\");\n        }\n\n        return this.insertCharacterAtPosition(value, character, value.length);\n      }, value);\n    }\n\n    return value;\n  };\n\n  processChange = (currentState: InputState, previousState: InputState): InputState & { enteredString: string } => {\n    const { mask, prefix, lastEditablePosition } = this.maskOptions;\n    const { value, selection } = currentState;\n    const previousValue = previousState.value;\n    const previousSelection = previousState.selection;\n    let newValue = value;\n    let enteredString = \"\";\n    let formattedEnteredStringLength = 0;\n    let removedLength = 0;\n    let cursorPosition = Math.min(previousSelection.start!, selection.start!);\n\n    if (selection.end! > previousSelection.start!) {\n      enteredString = newValue.slice(previousSelection.start!, selection.end!);\n      formattedEnteredStringLength = this.getStringFillingLengthAtPosition(\n        enteredString,\n        cursorPosition\n      );\n      if (!formattedEnteredStringLength) {\n        removedLength = 0;\n      } else {\n        removedLength = previousSelection.length!;\n      }\n    } else if (newValue.length < previousValue.length) {\n      removedLength = previousValue.length - newValue.length;\n    }\n\n    newValue = previousValue;\n\n    if (removedLength) {\n      if (removedLength === 1 && !previousSelection.length) {\n        const deleteFromRight = previousSelection.start === selection.start;\n        cursorPosition = (deleteFromRight\n          ? this.getRightEditablePosition(selection.start!)\n          : this.getLeftEditablePosition(selection.start!))!;\n      }\n      newValue = this.clearRange(newValue, cursorPosition, removedLength);\n    }\n\n    newValue = this.insertStringAtPosition(\n      newValue,\n      enteredString,\n      cursorPosition\n    );\n\n    cursorPosition += formattedEnteredStringLength;\n    if (cursorPosition >= mask!.length) {\n      cursorPosition = mask!.length;\n    } else if (\n      cursorPosition < prefix!.length &&\n      !formattedEnteredStringLength\n    ) {\n      cursorPosition = prefix!.length;\n    } else if (\n      cursorPosition >= prefix!.length &&\n      cursorPosition < lastEditablePosition! &&\n      formattedEnteredStringLength\n    ) {\n      cursorPosition = this.getRightEditablePosition(cursorPosition)!;\n    }\n\n    newValue = this.formatValue(newValue);\n\n    return {\n      value: newValue,\n      enteredString,\n      selection: { start: cursorPosition, end: cursorPosition }\n    };\n  };\n}\n","import type {\n  BeforeMaskedStateChangeFn,\n  BeforeMaskedValueChangeFn,\n  FormatChars,\n  InputState,\n  V2MaskOptions\n} from \"./types\";\n\nconst warned = new Set<string>();\n\nexport function __resetDeprecationWarnings(): void {\n  warned.clear();\n}\n\nexport function warnDeprecatedOnce(prop: string, message: string): void {\n  if (process.env.NODE_ENV !== \"production\" && !warned.has(prop)) {\n    warned.add(prop);\n    console.warn(`react-input-mask-format: ${message}`);\n  }\n}\n\nexport function resolveMaskPlaceholder(\n  maskPlaceholder: string | null | undefined,\n  maskChar: string | null | undefined\n): string | null | undefined {\n  if (maskPlaceholder !== undefined) {\n    return maskPlaceholder;\n  }\n  return maskChar;\n}\n\nexport function normalizeFormatChars(\n  formatChars: Record<string, RegExp | string> | undefined\n): { formatChars: FormatChars | undefined; hasLegacyString: boolean } {\n  if (!formatChars) {\n    return { formatChars: undefined, hasLegacyString: false };\n  }\n  const result: FormatChars = {};\n  let hasLegacyString = false;\n  for (const key of Object.keys(formatChars)) {\n    const value = formatChars[key];\n    if (typeof value === \"string\") {\n      hasLegacyString = true;\n      result[key] = new RegExp(value);\n    } else {\n      result[key] = value;\n    }\n  }\n  return { formatChars: result, hasLegacyString };\n}\n\nexport function toRegExpFormatChars(\n  formatChars: Record<string, RegExp | string> | undefined\n): FormatChars | undefined {\n  return normalizeFormatChars(formatChars).formatChars;\n}\n\nexport function createBeforeMaskedStateChangeAdapter(\n  beforeMaskedValueChange: BeforeMaskedValueChangeFn,\n  maskOptions: V2MaskOptions\n): BeforeMaskedStateChangeFn {\n  return ({ previousState, currentState, nextState }) =>\n    beforeMaskedValueChange(\n      nextState,\n      previousState ?? currentState ?? null,\n      (nextState as InputState & { enteredString?: string }).enteredString ?? null,\n      maskOptions\n    );\n}\n","import type { Transform } from \"../types\";\n\nexport function resolveTransform(\n  transform: Transform | undefined\n): ((char: string, position: number) => string) | undefined {\n  if (!transform) {\n    return undefined;\n  }\n  if (transform === \"uppercase\") {\n    return char => char.toUpperCase();\n  }\n  if (transform === \"lowercase\") {\n    return char => char.toLowerCase();\n  }\n  if (typeof transform === \"function\") {\n    return transform;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    console.error(\n      `react-input-mask-format: invalid transform \"${String(\n        transform\n      )}\", expected \"uppercase\" | \"lowercase\" | (char, position) => char`\n    );\n  }\n  return undefined;\n}\n","import { useRef, useCallback, useEffect } from \"react\";\nimport type React from \"react\";\nimport MaskUtils from \"./utils/mask\";\nimport { createMaskController } from \"./bind-mask\";\nimport type { MaskController, MaskControllerOptions } from \"./bind-mask\";\nimport {\n  resolveMaskPlaceholder,\n  normalizeFormatChars,\n  createBeforeMaskedStateChangeAdapter,\n  warnDeprecatedOnce\n} from \"./v2-compat\";\nimport { resolveTransform } from \"./utils/transform\";\nimport type { UseMaskOptions, BeforeMaskedStateChangeFn, V2MaskOptions } from \"./types\";\n\nexport function useMask(options: UseMaskOptions): React.RefCallback<HTMLInputElement> {\n  const {\n    mask,\n    maskPlaceholder: maskPlaceholderProp,\n    alwaysShowMask = false,\n    formatChars,\n    transform,\n    beforeMaskedStateChange: beforeMaskedStateChangeProp,\n    beforeMaskedValueChange\n  } = options;\n\n  if (beforeMaskedValueChange !== undefined) {\n    warnDeprecatedOnce(\n      \"beforeMaskedValueChange\",\n      \"beforeMaskedValueChange is deprecated, use beforeMaskedStateChange.\"\n    );\n  }\n\n  const resolvedPlaceholder = resolveMaskPlaceholder(maskPlaceholderProp, undefined);\n  const maskPlaceholder = resolvedPlaceholder === undefined ? \"_\" : resolvedPlaceholder;\n\n  const { formatChars: normalizedFormatChars, hasLegacyString } = normalizeFormatChars(formatChars);\n  if (hasLegacyString) {\n    warnDeprecatedOnce(\n      \"formatChars\",\n      \"string values in formatChars are deprecated, pass RegExp values instead.\"\n    );\n  }\n\n  const maskUtils = new MaskUtils({\n    mask: mask ?? null,\n    maskPlaceholder,\n    formatChars: normalizedFormatChars,\n    transform: resolveTransform(transform)\n  });\n\n  let beforeMaskedStateChange: BeforeMaskedStateChangeFn | undefined = beforeMaskedStateChangeProp;\n  if (!beforeMaskedStateChange && beforeMaskedValueChange) {\n    const v2MaskOptions: V2MaskOptions = {\n      mask: mask ?? undefined,\n      maskChar: maskPlaceholder,\n      alwaysShowMask,\n      formatChars: formatChars ?? { \"9\": \"[0-9]\", a: \"[A-Za-z]\", \"*\": \"[A-Za-z0-9]\" },\n      permanents: maskUtils.maskOptions.permanents\n    };\n    beforeMaskedStateChange = createBeforeMaskedStateChangeAdapter(beforeMaskedValueChange, v2MaskOptions);\n  }\n\n  const controllerOptions: MaskControllerOptions = { alwaysShowMask, beforeMaskedStateChange };\n\n  const controllerRef = useRef<MaskController | null>(null);\n\n  // Keep the live controller's engine/options current across re-renders\n  // without re-binding DOM listeners. Done in an effect (not during render)\n  // so the hook stays render-pure under StrictMode / concurrent React.\n  useEffect(() => {\n    controllerRef.current?.update(maskUtils, controllerOptions);\n  });\n\n  return useCallback((el: HTMLInputElement | null) => {\n    if (el) {\n      const controller = createMaskController(maskUtils, controllerOptions);\n      controller.bind(el);\n      controllerRef.current = controller;\n    } else {\n      controllerRef.current?.unbind();\n      controllerRef.current = null;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n}\n","// Write to input.value through the native prototype setter so React's\n// internal value tracker stays stale. The user's keystroke `input` event then\n// bubbles into React's root listener, which sees masked value != stale tracker\n// and fires the consumer's onChange with the masked value. Using the tracked\n// (React-wrapped) setter instead would suppress that onChange.\nexport function setNativeValue(input: HTMLInputElement, value: string): void {\n  const descriptor = Object.getOwnPropertyDescriptor(\n    HTMLInputElement.prototype,\n    \"value\"\n  );\n  const setter = descriptor && descriptor.set;\n  if (setter) {\n    setter.call(input, value);\n  } else {\n    input.value = value;\n  }\n}\n","import type MaskUtils from \"./utils/mask\";\nimport type { BeforeMaskedStateChangeFn, InputState, Selection } from \"./types\";\nimport { getInputSelection, setInputSelection, isInputFocused } from \"./utils/input\";\nimport { setNativeValue } from \"./set-native-value\";\nimport { getElementDocument } from \"./utils/helpers\";\nimport { defer } from \"./utils/defer\";\n\nexport interface MaskControllerOptions {\n  alwaysShowMask: boolean;\n  beforeMaskedStateChange?: BeforeMaskedStateChangeFn;\n}\n\nconst IS_JSDOM =\n  typeof navigator !== \"undefined\" && navigator.userAgent.includes(\"jsdom\");\n\nexport interface MaskController {\n  bind(input: HTMLInputElement): void;\n  unbind(): void;\n  update(maskUtils: MaskUtils, options: MaskControllerOptions): void;\n}\n\nexport function createMaskController(\n  maskUtils: MaskUtils,\n  options: MaskControllerOptions\n): MaskController {\n  let input: HTMLInputElement | null = null;\n  let lastValue = \"\";\n  let lastSelection: Selection = { start: null, end: null };\n\n  function getInputState(): InputState {\n    return { value: input!.value, selection: getInputSelection(input!) };\n  }\n  function getLastInputState(): InputState {\n    return { value: lastValue, selection: lastSelection };\n  }\n  function setInputState({ value, selection }: InputState): void {\n    setNativeValue(input!, value);\n    lastValue = value;\n    if (input && isInputFocused(input) && selection.start !== null && selection.end !== null) {\n      setInputSelection(input, selection.start, selection.end);\n      lastSelection = getInputSelection(input);\n    } else {\n      lastSelection = selection;\n    }\n    // JSDOM-ONLY: resync @testing-library/user-event v14's shadow-value cache.\n    // setNativeValue() above bypasses React's value tracker so the consumer's\n    // onChange fires with the masked value on the same bubbling event. That same\n    // bypass leaves user-event's per-input shadow value stale, corrupting masking\n    // from the 3rd keystroke — so under jsdom we resync it with a plain reassignment.\n    // This MUST NOT run in a real browser: there, microtasks drain BETWEEN event\n    // listeners, so this plain write would re-sync React's tracker before React's\n    // delegated onChange listener runs, permanently suppressing onChange (verified\n    // by the real-Chrome e2e). Real browsers read the live DOM value and need no\n    // resync, so the gate is correct, not a workaround-hiding hack.\n    if (IS_JSDOM) {\n      const resyncValue = value;\n      const resyncSelection = selection;\n      queueMicrotask(() => {\n        if (!input || input.value !== resyncValue) return;\n        input.value = resyncValue;\n        if (isInputFocused(input) && resyncSelection.start !== null && resyncSelection.end !== null) {\n          setInputSelection(input, resyncSelection.start, resyncSelection.end);\n        }\n      });\n    }\n  }\n\n  function handleInput(): void {\n    const currentState = getInputState();\n    const previousState = getLastInputState();\n    let nextState: InputState = maskUtils.processChange(currentState, previousState);\n    if (options.beforeMaskedStateChange) {\n      nextState = options.beforeMaskedStateChange({ currentState, previousState, nextState });\n    }\n    setInputState(nextState);\n  }\n\n  function handleFocus(): void {\n    const currentValue = getInputState().value;\n    if (!maskUtils.isValueFilled(currentValue)) {\n      const newValue = maskUtils.formatValue(currentValue);\n      const newSelection = maskUtils.getDefaultSelectionForValue(newValue);\n      let nextState: InputState = { value: newValue, selection: newSelection };\n      if (options.beforeMaskedStateChange) {\n        nextState = options.beforeMaskedStateChange({ currentState: getInputState(), nextState });\n      }\n      setInputState(nextState);\n      // Chrome resets selection after focus; restore on next frame.\n      defer(() => {\n        if (input && isInputFocused(input)) {\n          setInputSelection(input, lastSelection.start!, lastSelection.end!);\n        }\n      });\n    }\n  }\n\n  function handleBlur(): void {\n    const lastValueOnBlur = getLastInputState().value;\n    if (!options.alwaysShowMask && maskUtils.isValueEmpty(lastValueOnBlur)) {\n      let nextState: InputState = { value: \"\", selection: { start: null, end: null } };\n      if (options.beforeMaskedStateChange) {\n        nextState = options.beforeMaskedStateChange({ currentState: getInputState(), nextState });\n      }\n      setInputState(nextState);\n    }\n  }\n\n  function handleMouseDown(event: MouseEvent): void {\n    if (!input) return;\n    const { value } = getInputState();\n    const inputDocument = getElementDocument(input);\n    if (!isInputFocused(input) && !maskUtils.isValueFilled(value)) {\n      const mouseDownX = event.clientX;\n      const mouseDownY = event.clientY;\n      const mouseDownTime = new Date().getTime();\n      const mouseUpHandler = (mouseUpEvent: MouseEvent): void => {\n        inputDocument!.removeEventListener(\"mouseup\", mouseUpHandler);\n        if (!input || !isInputFocused(input)) return;\n        const deltaX = Math.abs(mouseUpEvent.clientX - mouseDownX);\n        const deltaY = Math.abs(mouseUpEvent.clientY - mouseDownY);\n        const axisDelta = Math.max(deltaX, deltaY);\n        const timeDelta = new Date().getTime() - mouseDownTime;\n        if ((axisDelta <= 10 && timeDelta <= 200) || (axisDelta <= 5 && timeDelta <= 300)) {\n          const newSelection = maskUtils.getDefaultSelectionForValue(lastValue);\n          if (newSelection.start !== null && newSelection.end !== null) {\n            setInputSelection(input, newSelection.start, newSelection.end);\n            lastSelection = getInputSelection(input);\n          }\n        }\n      };\n      inputDocument!.addEventListener(\"mouseup\", mouseUpHandler);\n    }\n  }\n\n  function bind(el: HTMLInputElement): void {\n    input = el;\n    // Format any pre-existing (defaultValue) content.\n    lastValue = el.value;\n    lastSelection = getInputSelection(el);\n    const formatted = maskUtils.formatValue(el.value);\n    if (!maskUtils.isValueEmpty(formatted) || options.alwaysShowMask) {\n      setNativeValue(el, formatted);\n      lastValue = formatted;\n    }\n    el.addEventListener(\"input\", handleInput);\n    el.addEventListener(\"focus\", handleFocus);\n    el.addEventListener(\"blur\", handleBlur);\n    el.addEventListener(\"mousedown\", handleMouseDown);\n  }\n\n  function unbind(): void {\n    if (input) {\n      input.removeEventListener(\"input\", handleInput);\n      input.removeEventListener(\"focus\", handleFocus);\n      input.removeEventListener(\"blur\", handleBlur);\n      input.removeEventListener(\"mousedown\", handleMouseDown);\n    }\n    input = null;\n  }\n\n  function update(nextMaskUtils: MaskUtils, nextOptions: MaskControllerOptions): void {\n    maskUtils = nextMaskUtils;\n    options = nextOptions;\n  }\n\n  return { bind, unbind, update };\n}\n"],"mappings":"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","names":["import_react","value","import_react","InputMask","React"]}