{"version":3,"file":"number-input.vue2.mjs","sources":["../../../components/number-input/number-input.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, onMounted, ref, toRef, watch } from 'vue'\n\nimport { useHover, useModifier, useTimerRecord } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useId,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport {\n  boundRange,\n  debounce,\n  isNull,\n  isValidNumber,\n  minus,\n  plus,\n  throttle,\n  toFixed,\n  toNumber,\n} from '@vexip-ui/utils'\nimport { numberInputProps } from './props'\n\nimport type { NumberInputSlots } from './symbol'\n\ntype InputEventType = 'input' | 'change'\n\nconst isEmpty = (value: unknown) => !value && value !== 0\nconst isNullOrNaN = (value: unknown) => isNull(value) || Number.isNaN(value)\n\ndefineOptions({ name: 'NumberInput' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<number>(focus)\n\nconst _props = defineProps(numberInputProps)\nconst props = useProps('numberInput', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  // 格式化后显示\n  formatter: {\n    default: null,\n    isFunc: true,\n  },\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  min: -Infinity,\n  max: Infinity,\n  placeholder: null,\n  autofocus: false,\n  spellcheck: false,\n  autocomplete: false,\n  precision: -1,\n  readonly: false,\n  step: 1,\n  ctrlStep: 100,\n  shiftStep: 10,\n  altStep: 0.1,\n  disabled: () => disabled.value,\n  controlClass: null,\n  debounce: false,\n  delay: null,\n  clearable: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  sync: false,\n  syncStep: false,\n  controlType: 'right',\n  emptyType: 'NaN',\n  controlAttrs: null,\n  name: {\n    default: '',\n    static: true,\n  },\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<NumberInputSlots>()\n\nconst nh = useNameHelper('number-input')\nconst locale = useLocale('numberInput', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst { timeout, interval } = useTimerRecord()\n\nconst focused = ref(false)\nconst currentValue = ref<string | number>(isEmpty(props.value) ? getEmptyValue() : props.value)\nconst inputting = ref(false)\nconst plusHolding = ref(false)\nconst minusHolding = ref(false)\n\nconst control = ref<HTMLInputElement>()\nconst { wrapper, isHover } = useHover()\n\nuseModifier({\n  target: control,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    emitEvent(props.onKeyDown, event)\n\n    if (modifier.up || modifier.down) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      if ((modifier.up && plusDisabled.value) || (modifier.down && minusDisabled.value)) {\n        return\n      }\n\n      changeStep(\n        modifier.up ? 'plus' : 'minus',\n        event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\n      )\n      modifier.resetAll()\n    } else if (modifier.enter) {\n      event.preventDefault()\n      event.stopPropagation()\n      emitChangeEvent('change')\n      modifier.resetAll()\n    }\n  },\n  onKeyUp: event => {\n    emitEvent(props.onKeyUp, event)\n\n    if (event.key === 'Enter') {\n      handleEnter()\n    }\n  },\n})\n\nlet lastValue: number\n\nconst controlId = useId()\nconst outOfRange = computed(() => {\n  return (\n    !isNullOrNaN(currentValue.value) &&\n    (toNumber(currentValue.value) > props.max || toNumber(currentValue.value) < props.min)\n  )\n})\nconst isReadonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\nconst plusDisabled = computed(() => {\n  return (\n    props.disabled ||\n    isReadonly.value ||\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) >= props.max)\n  )\n})\nconst minusDisabled = computed(() => {\n  return (\n    props.disabled ||\n    isReadonly.value ||\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) <= props.min)\n  )\n})\nconst className = computed(() => {\n  const [display, fade] = (props.controlType || 'right').split('-')\n\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.ns('input-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('focused')]: inputting.value,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: isReadonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm(`control-${display}`)]: display !== 'right',\n      [nh.bm('control-fade')]: fade,\n      [nh.bm('out-of-range')]: outOfRange.value,\n    },\n  ]\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.prefix || props.slots.prefix)\n})\nconst hasSuffix = computed(() => {\n  return !!(slots.suffix || props.suffix || props.slots.suffix)\n})\nconst preciseNumber = computed(() => {\n  return !inputting.value &&\n    typeof currentValue.value === 'number' &&\n    !Number.isNaN(currentValue.value) &&\n    props.precision >= 0\n    ? toFixed(currentValue.value, props.precision)\n    : currentValue.value\n})\nconst formattedValue = computed(() => {\n  if (isNullOrNaN(preciseNumber.value) || typeof preciseNumber.value !== 'number')\n    return preciseNumber.value ?? ''\n\n  return !inputting.value && typeof props.formatter === 'function'\n    ? props.formatter(preciseNumber.value as number)\n    : preciseNumber.value.toString()\n})\nconst hasValue = computed(() => !!(currentValue.value || currentValue.value === 0))\nconst showClear = computed(() => {\n  return !props.disabled && !isReadonly.value && props.clearable && isHover.value && hasValue.value\n})\nconst autoComplete = computed(() => {\n  return typeof props.autocomplete === 'boolean'\n    ? props.autocomplete\n      ? 'on'\n      : 'off'\n    : props.autocomplete\n})\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleChange, delay || 100)\n  : throttle(handleChange, delay || 16)\n\nwatch(\n  () => props.value,\n  value => {\n    if (value !== lastValue) {\n      parseValue()\n    }\n  },\n  { immediate: true },\n)\nwatch(inputting, value => {\n  if (!value) {\n    setInputValue(inputting.value ? currentValue.value : formattedValue.value)\n  }\n})\n\nonMounted(() => {\n  setInputValue(inputting.value ? currentValue.value : formattedValue.value)\n})\n\ndefineExpose({\n  idFor,\n  focused,\n  isHover,\n  outOfRange,\n  preciseNumber,\n  formattedValue,\n  isReadonly,\n  wrapper,\n  input: control,\n  focus,\n  blur: () => control.value?.blur(),\n})\n\nfunction setInputValue(value?: number | string | null) {\n  if (control.value) {\n    control.value.value = isNullOrNaN(value) ? '' : value!.toString()\n  }\n}\n\nfunction boundValueRange(value: number) {\n  return boundRange(value, props.min, props.max)\n}\n\nfunction parseValue() {\n  let value = props.value\n  value = inputting.value ? value : isValidNumber(value, true) ? toNumber(value) : getEmptyValue()\n\n  if (props.precision >= 0 && !isNullOrNaN(value)) {\n    value = toFixed(boundValueRange(value), props.precision)\n  }\n\n  currentValue.value = value\n  lastValue = value\n\n  setInputValue(inputting.value ? value : formattedValue.value)\n}\n\nfunction focus(options?: FocusOptions) {\n  control.value?.focus(options)\n}\n\nfunction handleFocus(event: FocusEvent) {\n  focused.value = true\n  inputting.value = true\n  emitEvent(props.onFocus, event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  focused.value = false\n\n  setTimeout(() => {\n    if (!focused.value) {\n      inputting.value = false\n      emitEvent(props.onBlur, event)\n      emitChangeEvent('change')\n    }\n  }, 120)\n}\n\nfunction handleHold(type: 'plus' | 'minus', event: PointerEvent) {\n  const disabled = type === 'plus' ? plusDisabled : minusDisabled\n  const change = type === 'plus' ? plusNumber : minusNumber\n\n  if (event.button !== 0 || disabled.value) return\n\n  change(event)\n  document.addEventListener('pointerup', cancelStep)\n  document.addEventListener('touchend', cancelStep)\n  clearTimeout(timeout.step)\n  clearInterval(interval.step)\n  ;(type === 'plus' ? plusHolding : minusHolding).value = true\n\n  timeout.step = setTimeout(() => {\n    interval.step = setInterval(() => {\n      disabled.value ? cancelStep() : change(event)\n    }, 32)\n  }, 500)\n}\n\nfunction cancelStep() {\n  document.removeEventListener('pointerup', cancelStep)\n  document.removeEventListener('touchend', cancelStep)\n  clearTimeout(timeout.step)\n  clearInterval(interval.step)\n\n  plusHolding.value = false\n  minusHolding.value = false\n}\n\nfunction plusNumber(event: PointerEvent) {\n  !focused.value && focus()\n  changeStep(\n    'plus',\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\n  )\n}\n\nfunction minusNumber(event: PointerEvent) {\n  !focused.value && focus()\n  changeStep(\n    'minus',\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\n  )\n}\n\nfunction changeStep(type: 'plus' | 'minus', modifier?: 'ctrl' | 'shift' | 'alt') {\n  if (props.disabled || isReadonly.value) return\n\n  let value = currentValue.value || 0\n  let step!: number\n\n  switch (modifier) {\n    case 'ctrl':\n      step = props.ctrlStep\n      break\n    case 'shift':\n      step = props.shiftStep\n      break\n    case 'alt':\n      step = props.altStep\n      break\n    default:\n      step = props.step\n  }\n\n  const stringValue = value.toString().trim()\n\n  if (stringValue.endsWith('.')) {\n    value = toNumber(stringValue.slice(0, -1))\n  }\n\n  if (type === 'plus') {\n    value = plus(value, step)\n  } else {\n    value = minus(value, step)\n  }\n\n  setValue(value, props.syncStep && !props.sync ? 'change' : 'input')\n}\n\nfunction handleChange(event: Event) {\n  const type = event.type as InputEventType\n  const stringValue = (event.target as HTMLInputElement).value\n\n  let value = stringValue.trim()\n\n  // to rollback invalid value to empty in `<input>` when change\n  if (type === 'change' && stringValue && !isValidNumber(stringValue, true)) {\n    const floatValue = parseFloat(stringValue)\n\n    if (Number.isNaN(floatValue)) {\n      value = ''\n    } else {\n      value = floatValue.toString()\n    }\n  }\n\n  inputting.value = type === 'input'\n\n  setValue(value, type)\n}\n\nfunction setValue(value: string | number, type: InputEventType, sync = props.sync) {\n  if (type !== 'input') {\n    currentValue.value = isEmpty(value) ? getEmptyValue() : toNumber(value)\n  } else {\n    currentValue.value = value\n  }\n\n  setInputValue(currentValue.value)\n  emitChangeEvent(type, sync)\n}\n\nfunction getEmptyValue() {\n  switch (props.emptyType) {\n    case 'undefined':\n      return undefined! as number\n    case 'null':\n      return null! as number\n    default:\n      return NaN\n  }\n}\n\nfunction emitChangeEvent(type: InputEventType, sync = props.sync) {\n  type = type === 'input' ? 'input' : 'change'\n\n  if (type === 'change') {\n    const empty = isEmpty(currentValue.value)\n    const value = empty ? getEmptyValue() : toNumber(currentValue.value)\n\n    let boundValue = empty ? value : boundValueRange(toNumber(value))\n\n    if (!empty && props.precision >= 0) {\n      boundValue = toFixed(boundValue, props.precision)\n    }\n\n    const changed = !Object.is(boundValue, value)\n\n    if (!empty) {\n      currentValue.value = boundValue\n    }\n\n    if (!sync && Object.is(lastValue, boundValue)) {\n      !Object.is(props.value, value) && emit('update:value', boundValue)\n      return\n    }\n\n    lastValue = boundValue\n\n    if (!sync || changed) {\n      emit('update:value', boundValue)\n      setFieldValue(boundValue)\n    }\n\n    emitEvent(props.onChange, boundValue)\n\n    if (!sync || changed) {\n      validateField()\n    }\n  } else {\n    const value = parseFloat(currentValue.value as string)\n    const empty = Number.isNaN(value)\n\n    let boundValue = empty ? getEmptyValue() : boundValueRange(toNumber(value))\n\n    if (!empty && props.precision >= 0) {\n      boundValue = toFixed(boundValue, props.precision)\n    }\n\n    const emitUpdate = sync && !Object.is(lastValue, boundValue)\n\n    if (emitUpdate) {\n      lastValue = boundValue\n\n      emit('update:value', boundValue)\n      setFieldValue(boundValue)\n    }\n\n    emitEvent(props.onInput, value)\n\n    if (emitUpdate) {\n      validateField()\n    }\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || isReadonly.value) return\n\n  setValue(NaN, 'change', false)\n  emitEvent(props.onClear)\n  clearField(NaN)\n  focus()\n}\n\nfunction handleEnter() {\n  emitEvent(props.onEnter)\n}\n\nfunction handlePrefixClick(event: MouseEvent) {\n  emitEvent(props.onPrefixClick, event)\n}\n\nfunction handleSuffixClick(event: MouseEvent) {\n  emitEvent(props.onSuffixClick, event)\n}\n\nfunction handleKeyPress(event: KeyboardEvent) {\n  emitEvent(props.onKeyPress, event)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    @click=\"control?.focus()\"\n  >\n    <div\n      v-if=\"hasPrefix\"\n      :class=\"[nh.be('icon'), nh.be('prefix')]\"\n      :style=\"{ color: props.prefixColor }\"\n      @click=\"handlePrefixClick\"\n    >\n      <slot name=\"prefix\">\n        <Renderer :renderer=\"props.slots.prefix\">\n          <Icon :icon=\"props.prefix\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <input\n      v-bind=\"props.controlAttrs\"\n      :id=\"controlId\"\n      ref=\"control\"\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\n      type=\"text\"\n      :autofocus=\"props.autofocus\"\n      :autocomplete=\"autoComplete\"\n      :spellcheck=\"props.spellcheck\"\n      :disabled=\"props.disabled\"\n      :readonly=\"isReadonly\"\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\n      :name=\"props.name || props.controlAttrs?.name\"\n      role=\"spinbutton\"\n      :title=\"outOfRange ? locale.outOfRange : undefined\"\n      :aria-valuenow=\"preciseNumber\"\n      :aria-valuemin=\"props.min !== -Infinity ? props.min : undefined\"\n      :aria-valuemax=\"props.max !== Infinity ? props.max : undefined\"\n      :aria-labelledby=\"labelId\"\n      @submit.prevent\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n      @keypress=\"handleKeyPress\"\n      @input=\"handleInput\"\n      @change=\"handleChange\"\n    />\n    <div\n      v-if=\"hasSuffix\"\n      :class=\"[nh.be('icon'), nh.be('suffix')]\"\n      :style=\"{\n        color: props.suffixColor,\n        opacity: showClear || props.loading ? '0%' : ''\n      }\"\n      @click=\"handleSuffixClick\"\n    >\n      <slot name=\"suffix\">\n        <Renderer :renderer=\"props.slots.suffix\">\n          <Icon :icon=\"props.suffix\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <div\n      v-else-if=\"props.clearable || props.loading\"\n      :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n    ></div>\n    <Transition :name=\"nh.ns('fade')\" appear>\n      <button\n        v-if=\"showClear\"\n        :class=\"[nh.be('icon'), nh.be('clear')]\"\n        type=\"button\"\n        tabindex=\"-1\"\n        :aria-label=\"locale.ariaLabel.clear\"\n        @click.stop=\"handleClear\"\n      >\n        <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n      </button>\n      <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n        <Icon\n          v-bind=\"icons.loading\"\n          :effect=\"props.loadingEffect || icons.loading.effect\"\n          :icon=\"props.loadingIcon || icons.loading.icon\"\n          label=\"loading\"\n        ></Icon>\n      </div>\n    </Transition>\n    <template v-if=\"props.controlType !== 'none'\">\n      <div\n        :class=\"{\n          [nh.be('plus')]: true,\n          [nh.bem('plus', 'disabled')]: plusDisabled,\n          [nh.bem('plus', 'holding')]: plusHolding\n        }\"\n        role=\"button\"\n        :aria-label=\"locale.ariaLabel.increase\"\n        :aria-labelledby=\"labelId\"\n        :aria-controls=\"controlId\"\n        @pointerdown.prevent=\"handleHold('plus', $event)\"\n        @mousedown.prevent\n        @touchstart.prevent\n      >\n        <Icon v-bind=\"icons.angleUp\" :scale=\"+(icons.angleUp.scale || 1) * 0.8\"></Icon>\n      </div>\n      <div\n        :class=\"{\n          [nh.be('minus')]: true,\n          [nh.bem('minus', 'disabled')]: minusDisabled,\n          [nh.bem('minus', 'holding')]: minusHolding\n        }\"\n        :aria-label=\"locale.ariaLabel.decrease\"\n        :aria-labelledby=\"labelId\"\n        :aria-controls=\"controlId\"\n        @pointerdown.prevent=\"handleHold('minus', $event)\"\n        @mousedown.prevent\n        @touchstart.prevent\n      >\n        <Icon v-bind=\"icons.angleDown\" :scale=\"+(icons.angleDown.scale || 1) * 0.8\"></Icon>\n      </div>\n    </template>\n  </div>\n</template>\n"],"names":["isEmpty","value","isNullOrNaN","isNull","idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","focus","props","useProps","__props","createSizeProp","createStateProp","createIconProp","emit","__emit","slots","_useSlots","nh","useNameHelper","locale","useLocale","toRef","icons","useIcons","timeout","interval","useTimerRecord","focused","ref","currentValue","getEmptyValue","inputting","plusHolding","minusHolding","control","wrapper","isHover","useHover","useModifier","event","modifier","emitEvent","plusDisabled","minusDisabled","changeStep","emitChangeEvent","handleEnter","lastValue","controlId","useId","outOfRange","computed","toNumber","isReadonly","className","display","fade","hasPrefix","hasSuffix","preciseNumber","toFixed","formattedValue","hasValue","showClear","autoComplete","delay","handleInput","debounce","handleChange","throttle","watch","parseValue","setInputValue","onMounted","__expose","_a","boundValueRange","boundRange","isValidNumber","options","handleFocus","handleBlur","handleHold","type","change","plusNumber","minusNumber","cancelStep","step","stringValue","plus","minus","setValue","floatValue","sync","empty","boundValue","changed","emitUpdate","handleClear","handlePrefixClick","handleSuffixClick","handleKeyPress","_createElementBlock","_unref","_cache","$event","_normalizeStyle","_renderSlot","_ctx","_createVNode","Renderer","Icon","_createElementVNode","_mergeProps","args","_normalizeClass","_Transition","_Fragment","_withModifiers"],"mappings":"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"}