{"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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"}