{"version":3,"file":"InputElement.mjs","sources":["../../../../../../packages/components/input-number/src/InputElement.tsx"],"sourcesContent":["import type { ChangeEvent, CustomSlotsType, KeyboardEventHandler } from '@antdv/types';\n\nimport type { HTMLAttributes } from 'vue';\nimport type { DecimalClass, ValueType } from './interface';\nimport { classNames, KeyCode } from '@antdv/utils';\n\n// base rc-input-number@7.3.4\nimport { computed, defineComponent, shallowRef, watch } from 'vue';\nimport useCursor from './hooks/useCursor';\nimport useFrame from './hooks/useFrame';\nimport { inputElementProps } from './props';\nimport StepHandler from './StepHandler';\nimport getMiniDecimal, { toFixed } from './utils/MiniDecimal';\nimport { getNumberPrecision, num2str, validateNumber } from './utils/numberUtil';\n\n/**\n * We support `stringMode` which need handle correct type when user call in onChange\n * format max or min value\n * 1. if isInvalid return null\n * 2. if precision is undefined, return decimal\n * 3. format with precision\n *    I. if max > 0, round down with precision. Example: max= 3.5, precision=0  afterFormat: 3\n *    II. if max < 0, round up with precision. Example: max= -3.5, precision=0  afterFormat: -4\n *    III. if min > 0, round up with precision. Example: min= 3.5, precision=0  afterFormat: 4\n *    IV. if min < 0, round down with precision. Example: max= -3.5, precision=0  afterFormat: -3\n */\nfunction getDecimalValue(stringMode: boolean, decimalValue: DecimalClass) {\n  if (stringMode || decimalValue.isEmpty())\n    return decimalValue.toString();\n\n  return decimalValue.toNumber();\n}\nfunction getDecimalIfValidate(value: ValueType) {\n  const decimal = getMiniDecimal(value);\n  return decimal.isInvalidate() ? null : decimal;\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'InputElement',\n  inheritAttrs: false,\n  props: {\n    ...inputElementProps(),\n    lazy: Boolean,\n  },\n  slots: Object as CustomSlotsType<{\n    upHandler: any\n    downHandler: any\n    default: any\n  }>,\n  setup(props, { attrs, slots, emit, expose }) {\n    const inputRef = shallowRef<HTMLInputElement>();\n    const focus = shallowRef(false);\n    const userTypingRef = shallowRef(false);\n    const compositionRef = shallowRef(false);\n    const decimalValue = shallowRef(getMiniDecimal(props.value));\n\n    function setUncontrolledDecimalValue(newDecimal: DecimalClass) {\n      if (props.value === undefined)\n        decimalValue.value = newDecimal;\n    }\n\n    // ====================== Parser & Formatter ======================\n    /**\n     * `precision` is used for formatter & onChange.\n     * It will auto generate by `value` & `step`.\n     * But it will not block user typing.\n     *\n     * Note: Auto generate `precision` is used for legacy logic.\n     * We should remove this since we already support high precision with BigInt.\n     *\n     * @param numStr  Provide which number should calculate precision\n     * @param userTyping  Change by user typing\n     */\n    const getPrecision = (numStr: string, userTyping: boolean) => {\n      if (userTyping)\n        return undefined;\n\n      if (props.precision >= 0)\n        return props.precision;\n\n      return Math.max(getNumberPrecision(numStr), getNumberPrecision(props.step));\n    };\n\n    // >>> Parser\n    const mergedParser = (num: string | number) => {\n      const numStr = String(num);\n\n      if (props.parser)\n        return props.parser(numStr);\n\n      let parsedStr = numStr;\n      if (props.decimalSeparator)\n        parsedStr = parsedStr.replace(props.decimalSeparator, '.');\n\n      // [Legacy] We still support auto convert `$ 123,456` to `123456`\n      return parsedStr.replace(/[^\\w.-]+/g, '');\n    };\n\n    // >>> Formatter\n    const inputValue = shallowRef<string | number>('');\n\n    const mergedFormatter = (number: string, userTyping: boolean) => {\n      if (props.formatter)\n        return props.formatter(number, { userTyping, input: String(inputValue.value) });\n\n      let str = typeof number === 'number' ? num2str(number) : number;\n\n      // User typing will not auto format with precision directly\n      if (!userTyping) {\n        const mergedPrecision = getPrecision(str, userTyping);\n\n        if (validateNumber(str) && (props.decimalSeparator || mergedPrecision >= 0)) {\n          // Separator\n          const separatorStr = props.decimalSeparator || '.';\n\n          str = toFixed(str, separatorStr, mergedPrecision);\n        }\n      }\n\n      return str;\n    };\n    // ========================== InputValue ==========================\n    /**\n     * Input text value control\n     *\n     * User can not update input content directly. It update with follow rules by priority:\n     *  1. controlled `value` changed\n     *    * [SPECIAL] Typing like `1.` should not immediately convert to `1`\n     *  2. User typing with format (not precision)\n     *  3. Blur or Enter trigger revalidate\n     */\n    const initValue = (() => {\n      if (decimalValue.value.isInvalidate() && ['string', 'number'].includes(typeof props.value))\n        return Number.isNaN(props.value) ? '' : props.value;\n\n      return mergedFormatter(decimalValue.value.toString(), false);\n    })();\n    inputValue.value = initValue;\n\n    // Should always be string\n    function setInputValue(newValue: DecimalClass, userTyping: boolean) {\n      inputValue.value = mergedFormatter(\n        // Invalidate number is sometime passed by external control, we should let it go\n        // Otherwise is controlled by internal interactive logic which check by userTyping\n        // You can ref 'show limited value when input is not focused' test for more info.\n        newValue.isInvalidate() ? newValue.toString(false) : newValue.toString(!userTyping),\n        userTyping,\n      );\n    }\n\n    // >>> Max & Min limit\n    const maxDecimal = computed(() => getDecimalIfValidate(props.max));\n    const minDecimal = computed(() => getDecimalIfValidate(props.min));\n\n    const upDisabled = computed(() => {\n      if (!maxDecimal.value || !decimalValue.value || decimalValue.value.isInvalidate())\n        return false;\n\n      return maxDecimal.value.lessEquals(decimalValue.value);\n    });\n\n    const downDisabled = computed(() => {\n      if (!minDecimal.value || !decimalValue.value || decimalValue.value.isInvalidate())\n        return false;\n\n      return decimalValue.value.lessEquals(minDecimal.value);\n    });\n\n    // Cursor controller\n    const [recordCursor, restoreCursor] = useCursor(inputRef, focus);\n\n    // ============================= Data =============================\n    /**\n     * Find target value closet within range.\n     * e.g. [11, 28]:\n     *    3  => 11\n     *    23 => 23\n     *    99 => 28\n     */\n    const getRangeValue = (target: DecimalClass) => {\n      // target > max\n      if (maxDecimal.value && !target.lessEquals(maxDecimal.value))\n        return maxDecimal.value;\n\n      // target < min\n      if (minDecimal.value && !minDecimal.value.lessEquals(target))\n        return minDecimal.value;\n\n      return null;\n    };\n\n    /**\n     * Check value is in [min, max] range\n     */\n    const isInRange = (target: DecimalClass) => !getRangeValue(target);\n\n    /**\n     * Trigger `onChange` if value validated and not equals of origin.\n     * Return the value that re-align in range.\n     */\n    const triggerValueUpdate = (newValue: DecimalClass, userTyping: boolean): DecimalClass => {\n      let updateValue = newValue;\n\n      let isRangeValidate = isInRange(updateValue) || updateValue.isEmpty();\n\n      // Skip align value when trigger value is empty.\n      // We just trigger onChange(null)\n      // This should not block user typing\n      if (!updateValue.isEmpty() && !userTyping) {\n        // Revert value in range if needed\n        updateValue = getRangeValue(updateValue) || updateValue;\n        isRangeValidate = true;\n      }\n\n      if (!props.readonly && !props.disabled && isRangeValidate) {\n        const numStr = updateValue.toString();\n        const mergedPrecision = getPrecision(numStr, userTyping);\n        if (mergedPrecision >= 0)\n          updateValue = getMiniDecimal(toFixed(numStr, '.', mergedPrecision));\n\n        // Trigger event\n        if (!updateValue.equals(decimalValue.value)) {\n          setUncontrolledDecimalValue(updateValue);\n          props.onChange?.(\n            updateValue.isEmpty() ? null : getDecimalValue(props.stringMode, updateValue),\n          );\n\n          // Reformat input if value is not controlled\n          if (props.value === undefined)\n            setInputValue(updateValue, userTyping);\n        }\n\n        return updateValue;\n      }\n\n      return decimalValue.value;\n    };\n\n    // ========================== User Input ==========================\n    const onNextPromise = useFrame();\n\n    // >>> Collect input value\n    const collectInputValue = (inputStr: string) => {\n      recordCursor();\n\n      // Update inputValue incase input can not parse as number\n      inputValue.value = inputStr;\n      // Parse number\n      if (!compositionRef.value) {\n        const finalValue = mergedParser(inputStr);\n        const finalDecimal = getMiniDecimal(finalValue);\n        if (!finalDecimal.isNaN())\n          triggerValueUpdate(finalDecimal, true);\n      }\n\n      // Trigger onInput later to let user customize value if they want do handle something after onChange\n      props.onInput?.(inputStr);\n\n      // optimize for chinese input experience\n      // https://github.com/ant-design/ant-design/issues/8196\n      onNextPromise(() => {\n        let nextInputStr = inputStr;\n        if (!props.parser)\n          nextInputStr = inputStr.replace(/。/g, '.');\n\n        if (nextInputStr !== inputStr)\n          collectInputValue(nextInputStr);\n      });\n    };\n\n    // >>> Composition\n    const onCompositionStart = () => {\n      compositionRef.value = true;\n    };\n\n    const onCompositionEnd = () => {\n      compositionRef.value = false;\n\n      collectInputValue(inputRef.value.value);\n    };\n\n    // >>> Input\n    const onInternalInput = (e: ChangeEvent) => {\n      collectInputValue(e.target.value);\n    };\n\n    // ============================= Step =============================\n    const onInternalStep = (up: boolean) => {\n      // Ignore step since out of range\n      if ((up && upDisabled.value) || (!up && downDisabled.value))\n        return;\n\n      // Clear typing status since it may caused by up & down key.\n      // We should sync with input value.\n      userTypingRef.value = false;\n\n      let stepDecimal = getMiniDecimal(props.step);\n      if (!up)\n        stepDecimal = stepDecimal.negate();\n\n      const target = (decimalValue.value || getMiniDecimal(0)).add(stepDecimal.toString());\n\n      const updatedValue = triggerValueUpdate(target, false);\n\n      props.onStep?.(getDecimalValue(props.stringMode, updatedValue), {\n        offset: props.step,\n        type: up ? 'up' : 'down',\n      });\n\n      inputRef.value?.focus();\n    };\n\n    // ============================ Flush =============================\n    /**\n     * Flush current input content to trigger value change & re-formatter input if needed\n     */\n    const flushInputValue = (userTyping: boolean) => {\n      const parsedValue = getMiniDecimal(mergedParser(inputValue.value));\n      let formatValue: DecimalClass = parsedValue;\n\n      if (!parsedValue.isNaN()) {\n        // Only validate value or empty value can be re-fill to inputValue\n        // Reassign the formatValue within ranged of trigger control\n        formatValue = triggerValueUpdate(parsedValue, userTyping);\n      } else {\n        formatValue = decimalValue.value;\n      }\n\n      if (props.value !== undefined) {\n        // Reset back with controlled value first\n        setInputValue(decimalValue.value, false);\n      } else if (!formatValue.isNaN()) {\n        // Reset input back since no validate value\n        setInputValue(formatValue, false);\n      }\n    };\n\n    // Solve the issue of the event triggering sequence when entering numbers in chinese input (Safari)\n    const onBeforeInput = () => {\n      userTypingRef.value = true;\n    };\n\n    const onKeyDown: KeyboardEventHandler = (event) => {\n      const { which } = event;\n      userTypingRef.value = true;\n\n      if (which === KeyCode.ENTER) {\n        if (!compositionRef.value)\n          userTypingRef.value = false;\n\n        flushInputValue(false);\n        props.onPressEnter?.(event);\n      }\n\n      if (props.keyboard === false)\n        return;\n\n      // Do step\n      if (!compositionRef.value && [KeyCode.UP, KeyCode.DOWN].includes(which)) {\n        onInternalStep(KeyCode.UP === which);\n        event.preventDefault();\n      }\n    };\n\n    const onKeyUp = () => {\n      userTypingRef.value = false;\n    };\n\n    // >>> Focus & Blur\n    const onBlur = (e: FocusEvent) => {\n      flushInputValue(false);\n      focus.value = false;\n      userTypingRef.value = false;\n      emit('blur', e);\n    };\n\n    // ========================== Controlled ==========================\n    // Input by precision\n    watch(\n      () => props.precision,\n      () => {\n        if (!decimalValue.value.isInvalidate())\n          setInputValue(decimalValue.value, false);\n      },\n      { flush: 'post' },\n    );\n\n    // Input by value\n    watch(\n      () => props.value,\n      () => {\n        const newValue = getMiniDecimal(props.value);\n        decimalValue.value = newValue;\n\n        const currentParsedValue = getMiniDecimal(mergedParser(inputValue.value));\n\n        // When user typing from `1.2` to `1.`, we should not convert to `1` immediately.\n        // But let it go if user set `formatter`\n        if (!newValue.equals(currentParsedValue) || !userTypingRef.value || props.formatter) {\n          // Update value as effect\n          setInputValue(newValue, userTypingRef.value);\n        }\n      },\n      { flush: 'post' },\n    );\n\n    // ============================ Cursor ============================\n    watch(\n      inputValue,\n      () => {\n        if (props.formatter)\n          restoreCursor();\n      },\n      { flush: 'post' },\n    );\n\n    watch(\n      () => props.disabled,\n      (val) => {\n        if (val)\n          focus.value = false;\n      },\n    );\n\n    expose({\n      focus: () => {\n        inputRef.value?.focus();\n      },\n      blur: () => {\n        inputRef.value?.blur();\n      },\n    });\n\n    return () => {\n      const {\n        prefixCls = 'rc-input-number',\n        min,\n        max,\n        step = 1,\n        defaultValue,\n        value,\n        disabled,\n        readonly,\n        keyboard,\n        controls = true,\n        autofocus,\n\n        stringMode,\n\n        parser,\n        formatter,\n        precision,\n        decimalSeparator,\n\n        onChange,\n        onInput,\n        onPressEnter,\n        onStep,\n        lazy,\n        class: className,\n        style,\n\n        ...inputProps\n      } = { ...(attrs as HTMLAttributes), ...props };\n      const { upHandler, downHandler } = slots;\n      const inputClassName = `${prefixCls}-input`;\n      const eventProps = {} as any;\n      if (lazy)\n        eventProps.onChange = onInternalInput;\n      else\n        eventProps.onInput = onInternalInput;\n\n      return (\n        <div\n          class={classNames(prefixCls, className, {\n            [`${prefixCls}-focused`]: focus.value,\n            [`${prefixCls}-disabled`]: disabled,\n            [`${prefixCls}-readonly`]: readonly,\n            [`${prefixCls}-not-a-number`]: decimalValue.value.isNaN(),\n            [`${prefixCls}-out-of-range`]:\n              !decimalValue.value.isInvalidate() && !isInRange(decimalValue.value),\n          })}\n          style={style}\n          onKeydown={onKeyDown}\n          onKeyup={onKeyUp}\n        >\n          {controls && (\n            <StepHandler\n              prefixCls={prefixCls}\n              upDisabled={upDisabled.value}\n              downDisabled={downDisabled.value}\n              onStep={onInternalStep}\n              v-slots={{ upNode: upHandler, downNode: downHandler }}\n            />\n          )}\n          <div class={`${inputClassName}-wrap`}>\n            <input\n              autofocus={autofocus}\n              autocomplete=\"off\"\n              role=\"spinbutton\"\n              aria-valuemin={min as any}\n              aria-valuemax={max as any}\n              aria-valuenow={\n                decimalValue.value.isInvalidate() ? null : (decimalValue.value.toString() as any)\n              }\n              step={step}\n              {...inputProps}\n              ref={inputRef}\n              class={inputClassName}\n              value={inputValue.value}\n              disabled={disabled}\n              readonly={readonly}\n              onFocus={(e: FocusEvent) => {\n                focus.value = true;\n                emit('focus', e);\n              }}\n              {...eventProps}\n              onBlur={onBlur}\n              onCompositionstart={onCompositionStart}\n              onCompositionend={onCompositionEnd}\n              onBeforeinput={onBeforeInput}\n            />\n          </div>\n        </div>\n      );\n    };\n  },\n});\n"],"names":["getDecimalValue","stringMode","decimalValue","isEmpty","toString","toNumber","getDecimalIfValidate","value","decimal","getMiniDecimal","isInvalidate","compatConfig","MODE","name","inheritAttrs","props","inputElementProps","lazy","Boolean","slots","Object","setup","attrs","emit","expose","inputRef","shallowRef","focus","userTypingRef","compositionRef","setUncontrolledDecimalValue","newDecimal","undefined","getPrecision","numStr","userTyping","precision","Math","max","getNumberPrecision","step","mergedParser","num","String","parser","parsedStr","decimalSeparator","replace","inputValue","mergedFormatter","number","formatter","input","str","num2str","mergedPrecision","validateNumber","separatorStr","toFixed","initValue","includes","Number","isNaN","setInputValue","newValue","maxDecimal","computed","minDecimal","min","upDisabled","lessEquals","downDisabled","recordCursor","restoreCursor","useCursor","getRangeValue","target","isInRange","triggerValueUpdate","updateValue","isRangeValidate","readonly","disabled","equals","onChange","onNextPromise","useFrame","collectInputValue","inputStr","finalValue","finalDecimal","onInput","nextInputStr","onCompositionStart","onCompositionEnd","onInternalInput","e","onInternalStep","up","stepDecimal","negate","add","updatedValue","onStep","offset","type","flushInputValue","parsedValue","formatValue","onBeforeInput","onKeyDown","event","which","KeyCode","ENTER","onPressEnter","keyboard","UP","DOWN","preventDefault","onKeyUp","onBlur","watch","flush","currentParsedValue","val","blur","prefixCls","defaultValue","controls","autofocus","class","className","style","inputProps","upHandler","downHandler","inputClassName","eventProps","_createVNode","classNames","StepHandler","upNode","downNode"],"mappings":"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"}