element-plus
Version:
A Component Library for Vue 3
1 lines • 25.2 kB
Source Map (JSON)
{"version":3,"file":"input-number.vue2.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 ns.is(align, !!align),\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 <slot name=\"decrease-icon\">\n <el-icon>\n <arrow-down v-if=\"controlsAtRight\" />\n <minus v-else />\n </el-icon>\n </slot>\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 <slot name=\"increase-icon\">\n <el-icon>\n <arrow-up v-if=\"controlsAtRight\" />\n <plus v-else />\n </el-icon>\n </slot>\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 :readonly=\"readonly\"\n :disabled=\"inputNumberDisabled\"\n :size=\"inputNumberSize\"\n :max=\"max\"\n :min=\"min\"\n :name=\"name\"\n :aria-label=\"ariaLabel\"\n :validate-event=\"false\"\n :inputmode=\"inputmode\"\n @keydown=\"handleKeydown\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n @input=\"handleInput\"\n @change=\"handleInputChange\"\n >\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template v-if=\"$slots.suffix\" #suffix>\n <slot name=\"suffix\" />\n </template>\n </el-input>\n </div>\n</template>\n\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 {\n useFormDisabled,\n useFormItem,\n useFormSize,\n} from '@element-plus/components/form'\nimport { vRepeatClick } from '@element-plus/directives'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport {\n debugWarn,\n getEventCode,\n getEventKey,\n isNumber,\n isString,\n isUndefined,\n throwError,\n} from '@element-plus/utils'\nimport { ArrowDown, ArrowUp, Minus, Plus } from '@element-plus/icons-vue'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n INPUT_EVENT,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport { inputNumberEmits } from './input-number'\n\nimport type { InputInstance } from '@element-plus/components/input'\nimport type { InputNumberProps } from './input-number'\n\ndefineOptions({\n name: 'ElInputNumber',\n})\n\nconst props = withDefaults(defineProps<InputNumberProps>(), {\n id: undefined,\n disabled: undefined,\n step: 1,\n max: Number.MAX_SAFE_INTEGER,\n min: Number.MIN_SAFE_INTEGER,\n stepStrictly: false,\n readonly: false,\n controls: true,\n controlsPosition: '',\n valueOnClear: null,\n validateEvent: true,\n inputmode: undefined,\n align: 'center',\n})\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 () => isNumber(props.modelValue) && props.modelValue <= props.min\n)\nconst maxDisabled = computed(\n () => isNumber(props.modelValue) && 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 = useFormSize()\nconst inputNumberDisabled = useFormDisabled()\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 if (val >= Number.MAX_SAFE_INTEGER && coefficient === 1) {\n debugWarn(\n 'InputNumber',\n 'The value has reached the maximum safe integer limit.'\n )\n return val\n } else if (val <= Number.MIN_SAFE_INTEGER && coefficient === -1) {\n debugWarn(\n 'InputNumber',\n 'The value has reached the minimum safe integer limit.'\n )\n return val\n }\n\n // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n return toPrecision(val + props.step * coefficient)\n}\nconst handleKeydown = (event: KeyboardEvent | Event) => {\n const code = getEventCode(event as KeyboardEvent)\n const key = getEventKey(event as KeyboardEvent)\n\n if (props.disabledScientific && ['e', 'E'].includes(key)) {\n event.preventDefault()\n return\n }\n\n switch (code) {\n case EVENT_CODE.up: {\n event.preventDefault()\n increase()\n break\n }\n case EVENT_CODE.down: {\n event.preventDefault()\n decrease()\n break\n }\n }\n}\nconst increase = () => {\n if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return\n const value = Number(displayValue.value) || 0\n const newVal = ensurePrecision(value)\n setCurrentValue(newVal)\n emit(INPUT_EVENT, data.currentValue)\n setCurrentValueToModelValue()\n}\nconst decrease = () => {\n if (props.readonly || inputNumberDisabled.value || minDisabled.value) return\n const value = Number(displayValue.value) || 0\n const newVal = ensurePrecision(value, -1)\n setCurrentValue(newVal)\n emit(INPUT_EVENT, data.currentValue)\n setCurrentValueToModelValue()\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 if (max < min) {\n throwError('InputNumber', 'min should not be greater than max.')\n }\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(\n Math.round(toPrecision(newVal / step)) * step,\n precision\n )\n if (newVal !== value) {\n update && emit(UPDATE_MODEL_EVENT, newVal)\n }\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_MODEL_EVENT, newVal)\n }\n return newVal\n}\nconst setCurrentValue = (\n value: number | string | null | undefined,\n emitChange = true\n) => {\n const oldVal = data.currentValue\n const newVal = verifyValue(value)\n if (!emitChange) {\n emit(UPDATE_MODEL_EVENT, newVal!)\n return\n }\n data.userInput = null\n if (oldVal === newVal && value) return\n emit(UPDATE_MODEL_EVENT, newVal!)\n if (oldVal !== newVal) {\n emit(CHANGE_EVENT, newVal!, oldVal!)\n }\n if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n data.currentValue = newVal\n}\nconst handleInput = (value: string) => {\n data.userInput = value\n const newVal = value === '' ? null : Number(value)\n emit(INPUT_EVENT, newVal)\n setCurrentValue(newVal, false)\n}\nconst handleInputChange = (value: string) => {\n const newVal = value !== '' ? Number(value) : ''\n if ((isNumber(newVal) && !Number.isNaN(newVal)) || value === '') {\n setCurrentValue(newVal)\n }\n setCurrentValueToModelValue()\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 data.userInput = null\n // When non-numeric content is entered into a numeric input box,\n // the content displayed on the page is not cleared after the value is cleared. #18533\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1398528\n if (data.currentValue === null && input.value?.input) {\n input.value.input.value = ''\n }\n emit('blur', event)\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n}\n\nconst setCurrentValueToModelValue = () => {\n if (data.currentValue !== props.modelValue) {\n data.currentValue = props.modelValue\n }\n}\nconst handleWheel = (e: WheelEvent) => {\n if (document.activeElement === e.target) e.preventDefault()\n}\n\nwatch(\n () => props.modelValue,\n (value, oldValue) => {\n const newValue = verifyValue(value, true)\n if (data.userInput === null && newValue !== oldValue) {\n data.currentValue = newValue\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.precision,\n () => {\n data.currentValue = verifyValue(props.modelValue)\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(\n 'aria-valuenow',\n data.currentValue || data.currentValue === 0\n ? String(data.currentValue)\n : ''\n )\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_MODEL_EVENT, val!)\n }\n innerInput.addEventListener('wheel', handleWheel, { passive: false })\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":["_createElementBlock","_normalizeClass","_unref","_renderSlot","_createVNode","_createBlock","$slots"],"mappings":"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"}