UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 32.1 kB
{"version":3,"file":"number-input.vue2.cjs","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","__props","props","useProps","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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"}