vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 27 kB
Source Map (JSON)
{"version":3,"file":"auto-complete.vue2.cjs","sources":["../../../components/auto-complete/auto-complete.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Select } from '@/components/select'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, onMounted, ref, toRef, watch, watchEffect } from 'vue'\n\nimport {\n createIconProp,\n createSizeProp,\n createStateProp,\n emitEvent,\n useLocale,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\nimport { autoCompleteProps } from './props'\n\nimport type { SelectExposed } from '@/components/select'\nimport type {\n AutoCompleteListSlotParams,\n AutoCompleteRawOption,\n AutoCompleteSlots,\n ChangeEvent,\n EnterEvent,\n} from './symbol'\n\ndefineOptions({ name: 'AutoComplete' })\n\nconst select = ref<SelectExposed>()\nconst control = ref<HTMLInputElement>()\n\nconst {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n clearField,\n getFieldValue,\n setFieldValue,\n} = useFieldStore<string | number>(() => control.value?.focus())\n\nconst nh = useNameHelper('auto-complete')\n\nconst _props = defineProps(autoCompleteProps)\nconst props = useProps('autoComplete', _props, {\n size: createSizeProp(size),\n state: createStateProp(state),\n locale: null,\n transfer: false,\n value: {\n default: () => getFieldValue(),\n static: true,\n },\n options: {\n default: () => [],\n static: true,\n },\n filter: false,\n prefix: createIconProp(),\n prefixColor: '',\n suffix: createIconProp(),\n suffixColor: '',\n placeholder: null,\n disabled: () => disabled.value,\n transitionName: () => nh.ns('drop'),\n dropDisabled: false,\n placement: {\n default: 'bottom',\n validator: value => placementWhileList.includes(value),\n },\n clearable: false,\n ignoreCase: false,\n autofocus: false,\n spellcheck: false,\n keyConfig: () => ({}),\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingLock: false,\n loadingEffect: null,\n transparent: false,\n debounce: false,\n delay: null,\n showEmpty: false,\n name: {\n default: '',\n static: true,\n },\n popperAlive: null,\n slots: () => ({}),\n shift: true,\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<AutoCompleteSlots>()\n\nconst locale = useLocale('input', toRef(props, 'locale'))\n\nconst { timer } = useSetTimeout()\n\nconst currentValue = ref(props.value)\nconst currentIndex = ref(-1)\nconst currentVisible = ref(false)\nconst composing = ref(false)\n\nlet changed = false\nlet lastValue = props.value\nlet lastInput = String(lastValue)\n\nconst isReadonly = computed(() => props.loading && props.loadingLock)\nconst optionStates = computed(() => select.value?.optionStates || [])\nconst filteredOptions = computed(() => select.value?.visibleOptions || [])\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\n\nwatch(\n () => props.value,\n value => {\n currentValue.value = value\n lastValue = value\n lastInput = String(value)\n\n if (control.value) {\n control.value.value = String(value)\n }\n },\n)\nwatch(currentIndex, computeHitting)\nwatch(currentVisible, value => {\n if (!value) {\n currentIndex.value = -1\n } else {\n control.value?.focus()\n }\n})\nwatch(currentValue, value => {\n if (props.filter && select.value) {\n select.value.currentFilter = `${value}`\n }\n})\nwatchEffect(() => {\n if (!props.filter || !currentVisible.value || !select.value) return\n\n select.value.currentFilter = String(currentValue.value)\n})\n\ndefineExpose({\n idFor,\n composing,\n select,\n control,\n focus: (options?: FocusOptions) => control.value?.focus(options),\n blur: () => control.value?.blur(),\n})\n\nonMounted(() => {\n nextTick(() => {\n if (control.value && !isNull(currentValue.value)) {\n control.value.value = String(currentValue.value)\n }\n })\n})\n\nfunction computeHitting() {\n const hitting = currentIndex.value\n let index = -1\n\n optionStates.value.forEach(state => {\n if (!state.hidden) {\n index += 1\n state.hitting = hitting === index\n\n if (state.hitting) {\n if (control.value) {\n control.value.value = String(state.value)\n }\n }\n } else {\n state.hitting = false\n }\n })\n\n if (control.value && hitting < 0) {\n control.value.value = lastInput\n }\n}\n\nlet focused = false\n\nfunction handleFocus(event: FocusEvent) {\n if (!focused) {\n focused = true\n emitEvent(props.onFocus, event)\n }\n}\n\nfunction handleBlur(event: FocusEvent) {\n if (focused) {\n focused = false\n\n timer.focus = setTimeout(() => {\n if (!focused) {\n emitEvent(props.onBlur, event)\n handleChange()\n }\n }, 120)\n }\n}\n\nfunction handleSelect(value: string | number, data: AutoCompleteRawOption) {\n if (composing.value || isNull(value)) {\n return\n }\n\n const prevValue = currentValue.value\n currentValue.value = value\n\n emitEvent(props.onSelect as ChangeEvent, value, data)\n\n if (value !== prevValue) {\n changed = true\n handleChange()\n } else {\n currentVisible.value = false\n }\n}\n\nfunction handleInputInternal(event: string | Event) {\n const value = typeof event === 'string' ? event : (event.target as HTMLInputElement).value\n\n currentValue.value = value\n changed = true\n lastInput = value\n\n if (currentIndex.value !== -1) {\n currentIndex.value = 0\n }\n\n if (props.showEmpty) {\n currentVisible.value = !props.dropDisabled\n\n if (select.value) {\n select.value.currentVisible = currentVisible.value\n }\n }\n\n emitEvent(props.onInput, value)\n nextTick(testOptionCanDrop)\n select.value?.updatePopper()\n}\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n ? debounce(handleInputInternal, delay || 100)\n : throttle(handleInputInternal, delay || 16)\n\nfunction handleChange(valid = true) {\n if (!changed || currentValue.value === lastValue) return\n\n changed = false\n lastValue = currentValue.value\n lastInput = String(lastValue)\n\n const option = optionStates.value.find(option => option.value === lastValue)\n\n if (select.value) {\n select.value.currentValues.length = 0\n ;(currentValue.value || currentValue.value === 0) &&\n select.value.currentValues.push(currentValue.value)\n }\n\n emit('update:value', currentValue.value)\n setFieldValue(currentValue.value)\n emitEvent(props.onChange as ChangeEvent, currentValue.value, option?.data || null!)\n valid && validateField()\n\n currentVisible.value = false\n\n if (control.value) {\n control.value.value = String(lastValue)\n }\n}\n\nlet beforeVisible = false\nlet inClickProcess = false\n\nfunction beforeClick() {\n if (props.disabled || isReadonly.value) return\n\n beforeVisible = currentVisible.value\n inClickProcess = true\n\n if (select.value) {\n select.value.currentFilter = String(currentValue.value)\n }\n}\n\nfunction handleClick() {\n if (props.disabled || isReadonly.value) return\n\n inClickProcess = false\n\n if (!select.value) return\n\n currentVisible.value = true\n\n if (!beforeVisible) {\n testOptionCanDrop()\n beforeVisible = currentVisible.value\n beforeVisible && emitEvent(props.onToggle, beforeVisible)\n } else {\n select.value.currentVisible = true\n }\n}\n\nfunction handleToggle(visible: boolean) {\n if (props.disabled || isReadonly.value || inClickProcess) return\n\n currentVisible.value = visible\n\n visible && testOptionCanDrop()\n beforeVisible = currentVisible.value\n\n if (currentVisible.value !== visible) {\n emitEvent(props.onToggle, currentVisible.value)\n }\n\n if (!currentVisible.value) {\n currentIndex.value = -1\n }\n}\n\nfunction testOptionCanDrop() {\n currentVisible.value = !(\n props.dropDisabled ||\n (!props.showEmpty && !filteredOptions.value.length)\n )\n\n if (select.value) {\n select.value.currentVisible = currentVisible.value\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (composing.value) {\n event.stopPropagation()\n return\n }\n\n const key = event.code || event.key\n\n if (key === 'Enter' || key === 'NumpadEnter') {\n handleEnter(event)\n } else if (key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n\n const options = filteredOptions.value\n const length = options.length\n\n if (!length) return\n\n const step = key === 'ArrowDown' ? 1 : -1\n\n // 初始状态时 currentIndex 为 -1,往上时会得到 -2 导致行为不按预期,需限制\n let index = (Math.max(currentIndex.value + step, -1) + length) % length\n let option = options[index]\n\n for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\n index += step\n index = (index + length) % length\n option = options[index]\n }\n\n currentIndex.value = index\n } else {\n if (['Space', ' '].includes(key)) {\n event.stopPropagation()\n }\n\n if (!['Enter', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n // 进行了其他按键则重置\n currentIndex.value = -1\n }\n }\n}\n\nfunction handleEnter(event: KeyboardEvent) {\n event.stopPropagation()\n\n if (composing.value) return\n\n if (currentIndex.value >= 0 && filteredOptions.value.length) {\n const option = filteredOptions.value[currentIndex.value === -1 ? 0 : currentIndex.value]\n\n handleSelect(option.value, option.data)\n } else {\n handleChange()\n }\n\n emitEvent(props.onEnter as EnterEvent, currentValue.value)\n currentVisible.value = false\n}\n\nfunction handleClear() {\n if (props.clearable) {\n const prevValue = currentValue.value\n\n currentValue.value = ''\n currentVisible.value = false\n\n if (!isNull(prevValue) && prevValue !== currentValue.value) {\n changed = true\n }\n\n handleChange(false)\n emitEvent(props.onClear)\n nextTick(clearField)\n control.value?.focus()\n }\n}\n\nfunction handleCompositionEnd() {\n if (composing.value) {\n composing.value = false\n\n if (control.value) {\n control.value.dispatchEvent(new Event('input'))\n }\n }\n}\n</script>\n\n<template>\n <Select\n :id=\"idFor\"\n ref=\"select\"\n v-model:visible=\"currentVisible\"\n :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\"\n :inherit=\"props.inherit\"\n :label-id=\"labelId\"\n :list-class=\"nh.be('list')\"\n :value=\"currentValue\"\n :size=\"props.size\"\n :state=\"props.state\"\n :clearable=\"props.clearable\"\n :transition-name=\"props.transitionName\"\n :disabled=\"props.disabled\"\n :transfer=\"props.transfer\"\n :placement=\"props.placement\"\n :prefix-color=\"props.prefixColor\"\n :suffix-color=\"props.suffixColor\"\n :no-suffix=\"!hasSuffix\"\n :placeholder=\"props.placeholder\"\n :options=\"props.options\"\n :key-config=\"props.keyConfig\"\n :loading=\"props.loading\"\n :loading-icon=\"props.loadingIcon\"\n :loading-lock=\"props.loadingLock\"\n :loading-effect=\"props.loadingEffect\"\n :transparent=\"transparent\"\n :filter=\"props.filter\"\n :ignore-case=\"props.ignoreCase\"\n :popper-alive=\"props.popperAlive\"\n :shift=\"props.shift\"\n @toggle=\"handleToggle\"\n @select=\"handleSelect\"\n @clear=\"handleClear\"\n @focus=\"control?.focus()\"\n @outside-close=\"handleChange\"\n @click=\"handleClick\"\n @click.capture=\"beforeClick\"\n >\n <template v-if=\"hasPrefix\" #prefix>\n <slot name=\"prefix\">\n <Renderer :renderer=\"props.slots.prefix\">\n <Icon :icon=\"props.prefix\"></Icon>\n </Renderer>\n </slot>\n </template>\n <template #control>\n <slot\n name=\"control\"\n :value=\"currentValue\"\n :on-input=\"handleInput\"\n :on-change=\"handleChange\"\n :on-enter=\"handleEnter\"\n :on-clear=\"handleClear\"\n >\n <Renderer\n :renderer=\"props.slots.control\"\n :data=\"{\n value: currentValue,\n onInput: handleInput,\n onChange: handleChange,\n onEnter: handleEnter,\n onClear: handleClear\n }\"\n >\n <input\n ref=\"control\"\n :class=\"nh.be('input')\"\n :autofocus=\"props.autofocus\"\n :spellcheck=\"props.spellcheck\"\n :disabled=\"props.disabled\"\n :placeholder=\"props.placeholder ?? locale.placeholder\"\n :readonly=\"isReadonly\"\n :name=\"props.name\"\n autocomplete=\"off\"\n tabindex=\"-1\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n @submit.prevent\n @input=\"handleInput\"\n @keydown=\"handleKeyDown\"\n @focus=\"handleFocus($event)\"\n @blur=\"handleBlur($event)\"\n @compositionstart=\"composing = true\"\n @compositionend=\"handleCompositionEnd\"\n @change=\"handleCompositionEnd\"\n />\n </Renderer>\n </slot>\n </template>\n <template v-if=\"hasSuffix\" #suffix>\n <slot name=\"suffix\">\n <Renderer :renderer=\"props.slots.suffix\">\n <Icon :icon=\"props.suffix\"></Icon>\n </Renderer>\n </slot>\n </template>\n <template v-if=\"$slots.default || props.slots.default\" #default=\"{ option, index, selected }\">\n <slot :option=\"option\" :index=\"index\" :selected=\"selected\">\n <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index, selected }\"></Renderer>\n </slot>\n </template>\n <template v-if=\"$slots.group || props.slots.group\" #group=\"{ option, index }\">\n <slot name=\"group\" :option=\"option\" :index=\"index\">\n <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\"></Renderer>\n </slot>\n </template>\n <template v-if=\"$slots.prepend || props.slots.prepend\" #prepend>\n <slot name=\"prepend\">\n <Renderer :renderer=\"props.slots.prepend\"></Renderer>\n </slot>\n </template>\n <template v-if=\"$slots.append || props.slots.append\" #append>\n <slot name=\"append\">\n <Renderer :renderer=\"props.slots.append\"></Renderer>\n </slot>\n </template>\n <template\n v-if=\"$slots.list || props.slots.list\"\n #list=\"{ options, isSelected, handleSelect: onSelect }\"\n >\n <slot\n name=\"list\"\n :options=\"options\"\n :is-selected=\"isSelected as AutoCompleteListSlotParams['isSelected']\"\n :handle-select=\"onSelect as AutoCompleteListSlotParams['handleSelect']\"\n >\n <Renderer\n :renderer=\"props.slots.list\"\n :data=\"{\n options,\n isSelected,\n handleSelect: onSelect\n }\"\n ></Renderer>\n </slot>\n </template>\n </Select>\n</template>\n"],"names":["select","ref","control","idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","_a","nh","useNameHelper","_props","__props","props","useProps","createSizeProp","createStateProp","createIconProp","value","placementWhileList","emit","__emit","slots","_useSlots","locale","useLocale","toRef","timer","useSetTimeout","currentValue","currentIndex","currentVisible","composing","changed","lastValue","lastInput","isReadonly","computed","optionStates","filteredOptions","hasPrefix","hasSuffix","watch","computeHitting","watchEffect","__expose","options","onMounted","nextTick","isNull","hitting","index","focused","handleFocus","event","emitEvent","handleBlur","handleChange","handleSelect","data","prevValue","handleInputInternal","testOptionCanDrop","delay","toNumber","handleInput","debounce","throttle","valid","option","beforeVisible","inClickProcess","beforeClick","handleClick","handleToggle","visible","handleKeyDown","key","handleEnter","length","step","i","handleClear","handleCompositionEnd","_createBlock","_unref","Select","$event","_normalizeClass","transparent","_cache","_renderSlot","_ctx","_createVNode","Renderer","_createElementVNode","args","Icon","$slots","_withCtx","selected","isSelected","onSelect"],"mappings":"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"}