UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 17.1 kB
{"version":3,"file":"input-number2.mjs","sources":["../../../../../../packages/components/input-number/src/input-number.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n ns.b(),\n ns.m(inputNumberSize),\n ns.is('disabled', inputNumberDisabled),\n ns.is('without-controls', !controls),\n ns.is('controls-right', controlsAtRight),\n ]\"\n @dragstart.prevent\n >\n <span\n v-if=\"controls\"\n v-repeat-click=\"decrease\"\n role=\"button\"\n :aria-label=\"t('el.inputNumber.decrease')\"\n :class=\"[ns.e('decrease'), ns.is('disabled', minDisabled)]\"\n @keydown.enter=\"decrease\"\n >\n <el-icon>\n <arrow-down v-if=\"controlsAtRight\" />\n <minus v-else />\n </el-icon>\n </span>\n <span\n v-if=\"controls\"\n v-repeat-click=\"increase\"\n role=\"button\"\n :aria-label=\"t('el.inputNumber.increase')\"\n :class=\"[ns.e('increase'), ns.is('disabled', maxDisabled)]\"\n @keydown.enter=\"increase\"\n >\n <el-icon>\n <arrow-up v-if=\"controlsAtRight\" />\n <plus v-else />\n </el-icon>\n </span>\n <el-input\n :id=\"id\"\n ref=\"input\"\n type=\"number\"\n :step=\"step\"\n :model-value=\"displayValue\"\n :placeholder=\"placeholder\"\n :disabled=\"inputNumberDisabled\"\n :size=\"inputNumberSize\"\n :max=\"max\"\n :min=\"min\"\n :name=\"name\"\n :label=\"label\"\n :validate-event=\"false\"\n @keydown.up.prevent=\"increase\"\n @keydown.down.prevent=\"decrease\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n @input=\"handleInput\"\n @change=\"handleInputChange\"\n />\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUpdated, reactive, ref, watch } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { ElInput } from '@element-plus/components/input'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { RepeatClick as vRepeatClick } from '@element-plus/directives'\nimport {\n useDisabled,\n useFormItem,\n useLocale,\n useNamespace,\n useSize,\n} from '@element-plus/hooks'\nimport { debugWarn, isNumber, isString, isUndefined } from '@element-plus/utils'\nimport { ArrowDown, ArrowUp, Minus, Plus } from '@element-plus/icons-vue'\nimport { inputNumberEmits, inputNumberProps } from './input-number'\nimport type { InputInstance } from '@element-plus/components/input'\n\ndefineOptions({\n name: 'ElInputNumber',\n})\n\nconst props = defineProps(inputNumberProps)\nconst emit = defineEmits(inputNumberEmits)\n\nconst { t } = useLocale()\nconst ns = useNamespace('input-number')\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\nconst { 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 'InputNumber',\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 inputNumberSize = useSize()\nconst inputNumberDisabled = 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 (inputNumberDisabled.value || maxDisabled.value) return\n const value = props.modelValue || 0\n const newVal = ensurePrecision(value)\n setCurrentValue(newVal)\n}\nconst decrease = () => {\n if (inputNumberDisabled.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 = toPrecision(Math.round(newVal / step) * step, precision)\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 if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\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 if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n}\n\nwatch(\n () => props.modelValue,\n (value) => {\n data.currentValue = verifyValue(value, true)\n data.userInput = null\n },\n { immediate: true }\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(inputNumberDisabled.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})\nonUpdated(() => {\n const innerInput = input.value?.input\n innerInput?.setAttribute('aria-valuenow', `${data.currentValue}`)\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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"}