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