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