{"version":3,"file":"numeric-input.mjs","sources":["../../../../../../packages/components/numeric-input/src/numeric-input.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[\n      ns.b(),\n      ns.m(numericInputSize),\n      ns.is('disabled', numericInputDisabled),\n      ns.is('without-controls', !controls),\n      ns.is('controls-right', controlsAtRight),\n    ]\"\n    data-test-name=\"numeric-input\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n    @dragstart.prevent\n  >\n    <b-input\n      :id=\"id\"\n      ref=\"input\"\n      type=\"number\"\n      :step=\"step\"\n      :model-value=\"displayValue\"\n      :placeholder=\"placeholder\"\n      :disabled=\"numericInputDisabled\"\n      :size=\"numericInputSize\"\n      :max=\"max\"\n      :min=\"min\"\n      :name=\"name\"\n      :label=\"label\"\n      :validate-event=\"false\"\n      prefix-class=\"is-button\"\n      suffix-class=\"is-button\"\n      @keydown.up.prevent=\"increase\"\n      @keydown.down.prevent=\"decrease\"\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n      @input=\"handleInput\"\n      @change=\"handleInputChange\"\n    >\n      <template v-if=\"controls && !controlsAtRight\" #prefix>\n        <b-button\n          v-repeat-click=\"decrease\"\n          ghost\n          :small=\"numericInputSize === 'large'\"\n          :xsmall=\"!['large', 'small'].includes(numericInputSize)\"\n          :xxsmall=\"numericInputSize === 'small'\"\n          :disabled=\"numericInputDisabled\"\n          :aria-label=\"t('b.numericInput.decrease')\"\n          :class=\"[ns.e('decrease'), ns.is('disabled', minDisabled)]\"\n          :icon=\"ControlMinus\"\n          @keydown.enter=\"decrease\"\n        />\n      </template>\n      <template v-if=\"controls\" #suffix>\n        <div v-if=\"controlsAtRight\" :class=\"ns.e('controls-right')\">\n          <b-button\n            v-repeat-click=\"increase\"\n            ghost\n            :xsmall=\"numericInputSize === 'large'\"\n            :xxsmall=\"numericInputSize !== 'large'\"\n            :disabled=\"numericInputDisabled\"\n            :aria-label=\"t('b.numericInput.increase')\"\n            :class=\"[ns.e('increase'), ns.is('disabled', maxDisabled)]\"\n            :icon=\"ChevronUp\"\n            @keydown.enter=\"increase\"\n          />\n          <b-button\n            v-repeat-click=\"decrease\"\n            ghost\n            :xsmall=\"numericInputSize === 'large'\"\n            :xxsmall=\"numericInputSize !== 'large'\"\n            :disabled=\"numericInputDisabled\"\n            :aria-label=\"t('b.numericInput.decrease')\"\n            :class=\"[ns.e('decrease'), ns.is('disabled', minDisabled)]\"\n            :icon=\"ChevronDown\"\n            @keydown.enter=\"decrease\"\n          />\n        </div>\n        <b-button\n          v-else\n          v-repeat-click=\"increase\"\n          ghost\n          :small=\"numericInputSize === 'large'\"\n          :xsmall=\"!['large', 'small'].includes(numericInputSize)\"\n          :xxsmall=\"numericInputSize === 'small'\"\n          :disabled=\"numericInputDisabled\"\n          :aria-label=\"t('b.numericInput.increase')\"\n          :class=\"[ns.e('increase'), ns.is('disabled', maxDisabled)]\"\n          :icon=\"ControlPlus\"\n          @keydown.enter=\"increase\"\n        />\n      </template>\n    </b-input>\n  </div>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUpdated, reactive, ref, watch } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { BInput } from '@bigin/components/input'\nimport { BButton } from '@bigin/components/button'\nimport { vRepeatClick } from '@bigin/directives'\nimport {\n  useDisabled,\n  // useFormItem,\n  useLocale,\n  useNamespace,\n  useSize,\n} from '@bigin/hooks'\nimport { debugWarn, isNumber, isString, isUndefined } from '@bigin/utils'\nimport {\n  ChevronDown,\n  ChevronUp,\n  ControlMinus,\n  ControlPlus,\n} from '@bigin/icons-vue'\nimport { numericInputEmits, numericInputProps } from './numeric-input'\nimport type { InputInstance } from '@bigin/components/input'\n\ndefineOptions({\n  name: 'BNumericInput',\n})\n\nconst props = defineProps(numericInputProps)\nconst emit = defineEmits(numericInputEmits)\n\nconst { t } = useLocale()\nconst ns = useNamespace('numeric-input')\nconst input = ref<InputInstance>()\n\ninterface Data {\n  currentValue: number | null | undefined\n  userInput: null | number | string\n}\nconst data = reactive<Data>({\n  currentValue: props.modelValue,\n  userInput: null,\n})\n\n// const { formItem } = useFormItem()\n\nconst minDisabled = computed(\n  () =>\n    isNumber(props.modelValue) &&\n    ensurePrecision(props.modelValue, -1)! < props.min\n)\nconst maxDisabled = computed(\n  () =>\n    isNumber(props.modelValue) && ensurePrecision(props.modelValue)! > props.max\n)\n\nconst numPrecision = computed(() => {\n  const stepPrecision = getPrecision(props.step)\n  if (!isUndefined(props.precision)) {\n    if (stepPrecision > props.precision) {\n      debugWarn(\n        'NumericInput',\n        'precision should not be less than the decimal places of step'\n      )\n    }\n    return props.precision\n  } else {\n    return Math.max(getPrecision(props.modelValue), stepPrecision)\n  }\n})\nconst controlsAtRight = computed(() => {\n  return props.controls && props.controlsPosition === 'right'\n})\n\nconst numericInputSize = useSize()\nconst numericInputDisabled = useDisabled()\n\nconst displayValue = computed(() => {\n  if (data.userInput !== null) {\n    return data.userInput\n  }\n  let currentValue: number | string | undefined | null = data.currentValue\n  if (isNil(currentValue)) return ''\n  if (isNumber(currentValue)) {\n    if (Number.isNaN(currentValue)) return ''\n    if (!isUndefined(props.precision)) {\n      currentValue = currentValue.toFixed(props.precision)\n    }\n  }\n  return currentValue\n})\nconst toPrecision = (num: number, pre?: number) => {\n  if (isUndefined(pre)) pre = numPrecision.value\n  if (pre === 0) return Math.round(num)\n  let snum = String(num)\n  const pointPos = snum.indexOf('.')\n  if (pointPos === -1) return num\n  const nums = snum.replace('.', '').split('')\n  const datum = nums[pointPos + pre]\n  if (!datum) return num\n  const length = snum.length\n  if (snum.charAt(length - 1) === '5') {\n    snum = `${snum.slice(0, Math.max(0, length - 1))}6`\n  }\n  return Number.parseFloat(Number(snum).toFixed(pre))\n}\nconst getPrecision = (value: number | null | undefined) => {\n  if (isNil(value)) return 0\n  const valueString = value.toString()\n  const dotPosition = valueString.indexOf('.')\n  let precision = 0\n  if (dotPosition !== -1) {\n    precision = valueString.length - dotPosition - 1\n  }\n  return precision\n}\nconst ensurePrecision = (val: number, coefficient: 1 | -1 = 1) => {\n  if (!isNumber(val)) return data.currentValue\n  // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n  return toPrecision(val + props.step * coefficient)\n}\nconst increase = () => {\n  if (numericInputDisabled.value || maxDisabled.value) return\n  const value = props.modelValue || 0\n  const newVal = ensurePrecision(value)\n  setCurrentValue(newVal)\n}\nconst decrease = () => {\n  if (numericInputDisabled.value || minDisabled.value) return\n  const value = props.modelValue || 0\n  const newVal = ensurePrecision(value, -1)\n  setCurrentValue(newVal)\n}\nconst verifyValue = (\n  value: number | string | null | undefined,\n  update?: boolean\n): number | null | undefined => {\n  const { max, min, step, precision, stepStrictly, valueOnClear } = props\n  let newVal = Number(value)\n  if (isNil(value) || Number.isNaN(newVal)) {\n    return null\n  }\n  if (value === '') {\n    if (valueOnClear === null) {\n      return null\n    }\n    newVal = isString(valueOnClear) ? { min, max }[valueOnClear] : valueOnClear\n  }\n  if (stepStrictly) {\n    newVal = Math.round(newVal / step) * step\n  }\n  if (!isUndefined(precision)) {\n    newVal = toPrecision(newVal, precision)\n  }\n  if (newVal > max || newVal < min) {\n    newVal = newVal > max ? max : min\n    update && emit('update:modelValue', newVal)\n  }\n  return newVal\n}\nconst setCurrentValue = (value: number | string | null | undefined) => {\n  const oldVal = data.currentValue\n  const newVal = verifyValue(value)\n  if (oldVal === newVal) return\n  data.userInput = null\n  emit('update:modelValue', newVal!)\n  emit('input', newVal)\n  emit('change', newVal!, oldVal!)\n  data.currentValue = newVal\n}\nconst handleInput = (value: string) => {\n  return (data.userInput = value)\n}\nconst handleInputChange = (value: string) => {\n  const newVal = value !== '' ? Number(value) : ''\n  if ((isNumber(newVal) && !Number.isNaN(newVal)) || value === '') {\n    setCurrentValue(newVal)\n  }\n  data.userInput = null\n}\n\nconst focus = () => {\n  input.value?.focus?.()\n}\n\nconst blur = () => {\n  input.value?.blur?.()\n}\n\nconst handleFocus = (event: MouseEvent | FocusEvent) => {\n  emit('focus', event)\n}\n\nconst handleBlur = (event: MouseEvent | FocusEvent) => {\n  emit('blur', event)\n}\n\nwatch(\n  () => props.modelValue,\n  (value) => {\n    data.currentValue = verifyValue(value, true)\n    data.userInput = null\n  },\n  { immediate: true }\n)\n\nonMounted(() => {\n  const { min, max, modelValue } = props\n  const innerInput = input.value?.input as HTMLInputElement\n  innerInput.setAttribute('role', 'spinbutton')\n  if (Number.isFinite(max)) {\n    innerInput.setAttribute('aria-valuemax', String(max))\n  } else {\n    innerInput.removeAttribute('aria-valuemax')\n  }\n  if (Number.isFinite(min)) {\n    innerInput.setAttribute('aria-valuemin', String(min))\n  } else {\n    innerInput.removeAttribute('aria-valuemin')\n  }\n  innerInput.setAttribute('aria-valuenow', String(data.currentValue))\n  innerInput.setAttribute('aria-disabled', String(numericInputDisabled.value))\n  if (!isNumber(modelValue) && modelValue != null) {\n    let val: number | null = Number(modelValue)\n    if (Number.isNaN(val)) {\n      val = null\n    }\n    emit('update:modelValue', val!)\n  }\n})\n\nonUpdated(() => {\n  const innerInput = input.value?.input\n  innerInput?.setAttribute('aria-valuenow', `${data.currentValue}`)\n})\n\ndefineExpose({\n  /** @description get focus the input component */\n  focus,\n  /** @description remove focus the input component */\n  blur,\n})\n</script>\n"],"names":[],"mappings":"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"}