{"version":3,"file":"useSelect.mjs","sources":["../../../../../../packages/components/select/src/useSelect.ts"],"sourcesContent":["import {\r\n  nextTick,\r\n  computed,\r\n  watch,\r\n  ref,\r\n  reactive,\r\n  shallowRef,\r\n  triggerRef\r\n} from 'vue'\r\nimport { isObject, toRawType } from '@vue/shared'\r\nimport lodashDebounce from 'lodash/debounce'\r\nimport isEqual from 'lodash/isEqual'\r\nimport { isClient } from '@vueuse/core'\r\nimport { UPDATE_MODEL_EVENT } from '@sgui-plus/utils/constants'\r\nimport { EVENT_CODE } from '@sgui-plus/utils/aria'\r\nimport { useLocale, useSize } from '@sgui-plus/hooks'\r\nimport scrollIntoView from '@sgui-plus/utils/scroll-into-view'\r\nimport { isKorean } from '@sgui-plus/utils/isDef'\r\nimport { getValueByPath } from '@sgui-plus/utils/util'\r\nimport { debugWarn } from '@sgui-plus/utils/error'\r\nimport { useFormItem } from '@sgui-plus/hooks/use-form-item'\r\n\r\nimport type { ComponentPublicInstance } from 'vue'\r\nimport type SgTooltip from '@sgui-plus/components/tooltip'\r\nimport type SgMultipleTags from './multiple-tags.vue'\r\nimport type { QueryChangeCtx, SelectOptionProxy } from './token'\r\nexport function useSelectStates(props) {\r\n  const { t } = useLocale()\r\n  return reactive({\r\n    filterInputText: '' ,\r\n    selectedOption: {} as any,\r\n    options: new Map(),\r\n    cachedOptions: new Map(),\r\n    createdLabel: null,\r\n    createdSelected: false,\r\n    selected: props.multiple ? [] : ({} as any),\r\n    inputLength: 20,\r\n    inputWidth: 0,\r\n    initialInputHeight: 0,\r\n    optionsCount: 0,\r\n    filteredOptionsCount: 0,\r\n    visible: false,\r\n    softFocus: false,\r\n    selectedLabel: '',\r\n    hoverIndex: -1,\r\n    query: '',\r\n    previousQuery: null,\r\n    inputHovering: false,\r\n    cachedPlaceHolder: '',\r\n    currentPlaceholder: t('sg.select.placeholder'),\r\n    menuVisibleOnFocus: false,\r\n    isOnComposition: false,\r\n    isSilentBlur: false,\r\n    prefixWidth: 0,\r\n    tagInMultiLine: false\r\n  })\r\n}\r\n\r\ntype States = ReturnType<typeof useSelectStates>\r\n\r\nexport const useSelect = (props, states: States, ctx) => {\r\n  const { t } = useLocale()\r\n  const isListShow = ref(!props.listInitHidden)\r\n  if(props.defaultLabel) {\r\n    if(!props.multiple) {\r\n      states.selectedLabel = props.defaultLabel\r\n    } else {\r\n      states.selected = props.defaultLabel.map((item)=> {\r\n        return {\r\n          currentLabel: item.label,\r\n          value: item.value\r\n        }\r\n      })\r\n      nextTick(() => {\r\n        resetInputHeight()\r\n      })\r\n    }\r\n  }\r\n  // template refs\r\n  const reference = ref<ComponentPublicInstance<{\r\n    focus: () => void\r\n    blur: () => void\r\n    input: HTMLInputElement\r\n  }> | null>(null)\r\n  const inputRef = ref<HTMLInputElement | null>(null)\r\n  const tooltipRef = ref<InstanceType<typeof SgTooltip> | null>(null)\r\n  const tagsRef = ref<HTMLElement | null>(null)\r\n  const selectWrapper = ref<HTMLElement | null>(null)\r\n  const multipleTagsRef = ref<InstanceType<typeof SgMultipleTags> | null>(null)\r\n  const scrollbar = ref<{\r\n    handleScroll: () => void\r\n  } | null>(null)\r\n  const hoverOption = ref(-1)\r\n  const queryChange = shallowRef<QueryChangeCtx>({ query: '' })\r\n  const groupQueryChange = shallowRef('')\r\n\r\n  // inject\r\n  const { form, formItem } = useFormItem()\r\n\r\n  const isReadonly = computed(\r\n    () => !props.filterable || props.multiple || !states.visible\r\n  )\r\n\r\n  const selectDisabled = computed(() => props.disabled || form?.disabled)\r\n\r\n  const showClose = computed(() => {\r\n    const hasValue = props.multiple\r\n      ? Array.isArray(props.modelValue) && props.modelValue.length > 0\r\n      : props.modelValue !== undefined &&\r\n        props.modelValue !== null &&\r\n        props.modelValue !== ''\r\n\r\n    const criteria =\r\n      props.clearable &&\r\n      !selectDisabled.value &&\r\n      states.inputHovering &&\r\n      hasValue\r\n    return criteria\r\n  })\r\n  const iconComponent = computed(() =>\r\n     props.suffixIcon\r\n  )\r\n  const iconReverse = computed(() =>\r\n    iconComponent.value && states.visible ? 'is-reverse' : ''\r\n  )\r\n\r\n  const debounce = computed(() => ( 0))\r\n\r\n  const emptyText = computed(() => {\r\n      if (props.remote && states.query === ''  && states.options.size === 0)\r\n        return false\r\n      if (\r\n        props.filterable &&\r\n        states.options.size > 0 &&\r\n        states.filteredOptionsCount === 0\r\n      ) {\r\n        if(states.query && !props.showSingleFilterInput ) {\r\n          return props.noMatchText || t('sg.select.noMatch')\r\n        }else if(states.filterInputText && props.showSingleFilterInput) {\r\n          return props.noMatchText || t('sg.select.noMatch')\r\n        }\r\n      }\r\n      if (states.options.size === 0) {\r\n        return props.noDataText || t('sg.select.noData')\r\n      }\r\n\r\n    return null\r\n  })\r\n\r\n  const optionsArray = computed(() => Array.from(states.options.values()))\r\n\r\n  const cachedOptionsArray = computed(() =>\r\n    Array.from(states.cachedOptions.values())\r\n  )\r\n\r\n  const showNewOption = computed(() => {\r\n    const hasExistingOption = optionsArray.value\r\n      .filter((option) => {\r\n        return !option.isCreated\r\n      })\r\n      .some((option) => {\r\n        return option.currentLabel === states.query\r\n      })\r\n    return (\r\n      props.filterable &&\r\n      props.allowCreate &&\r\n      states.query !== '' &&\r\n      !hasExistingOption\r\n    )\r\n  })\r\n  const selectSize = useSize()\r\n\r\n  const tagSize = computed(() =>\r\n    ['small'].indexOf(selectSize.value) > -1 ? 'small' : 'default'\r\n  )\r\n\r\n  const dropMenuVisible = computed({\r\n    get() {\r\n      return states.visible && emptyText.value !== false && !ctx.attrs.readonly\r\n    },\r\n    set(val: boolean) {\r\n      states.visible = val\r\n    },\r\n  })\r\n\r\n  const handelShowOverflowText = computed(() => {\r\n    if (!isClient) return false\r\n    const inputInnerWidth = selectSize.value=='default' ? states.inputWidth - 44 : selectSize.value=='large' ? states.inputWidth - 52 : states.inputWidth - 34\r\n    const overflow:boolean = getTextSize(states.selectedLabel)!.width > inputInnerWidth\r\n    const disable:boolean = !props.showOverflowText || dropMenuVisible.value || states.selectedLabel == '' || !overflow\r\n    return disable\r\n  })\r\n\r\n  // watch\r\n  watch(\r\n    () => selectDisabled.value,\r\n    () => {\r\n      nextTick(() => {\r\n        resetInputHeight()\r\n      })\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => ctx.attrs.placeholder,\r\n    (val) => {\r\n      states.cachedPlaceHolder = states.currentPlaceholder = val\r\n    }\r\n  )\r\n  watch(\r\n    () => props.modelValue,\r\n    (val, oldVal) => {\r\n      if (props.multiple) {\r\n        resetInputHeight()\r\n        if ((val && val.length > 0) || (inputRef.value && states.query !== '')) {\r\n          states.currentPlaceholder = ''\r\n        } else {\r\n          states.currentPlaceholder = states.cachedPlaceHolder\r\n        }\r\n        if (props.filterable) {\r\n          states.query = ''\r\n          handleQueryChange(states.query)\r\n        }\r\n      }\r\n      setSelected()\r\n      if (props.filterable && !props.multiple) {\r\n        states.inputLength = 20\r\n      }\r\n      if (!isEqual(val, oldVal) && props.validateEvent) {\r\n        formItem?.validate('change').catch((err) => debugWarn(err))\r\n      }\r\n    },\r\n    {\r\n      flush: 'post',\r\n      deep: true,\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => states.visible,\r\n    (val) => {\r\n      if (!val) {\r\n        inputRef.value && inputRef.value.blur()\r\n        states.query = ''\r\n        states.previousQuery = null\r\n        states.selectedLabel = ''\r\n        states.filterInputText = ''\r\n        states.inputLength = 20\r\n        states.menuVisibleOnFocus = false\r\n        resetHoverIndex()\r\n        nextTick(() => {\r\n          if (\r\n            inputRef.value &&\r\n            inputRef.value.value === '' &&\r\n            states.selected.length === 0\r\n          ) {\r\n            states.currentPlaceholder = states.cachedPlaceHolder\r\n          }\r\n        })\r\n\r\n        if (!props.multiple) {\r\n          if (states.selected) {\r\n            if (\r\n              props.filterable &&\r\n              props.allowCreate &&\r\n              states.createdSelected &&\r\n              states.createdLabel\r\n            ) {\r\n              states.selectedLabel = states.createdLabel\r\n            } else {\r\n              states.selectedLabel = states.selected.currentLabel\r\n            }\r\n            if (props.filterable) states.query = states.selectedLabel\r\n          }\r\n\r\n          if (props.filterable) {\r\n            states.currentPlaceholder = states.cachedPlaceHolder\r\n          }\r\n        }\r\n      } else {\r\n        tooltipRef.value?.updatePopper?.()\r\n\r\n        if (props.filterable) {\r\n          states.filteredOptionsCount = states.optionsCount\r\n          states.query = states.selectedLabel\r\n          if (props.multiple) {\r\n            inputRef.value?.focus()\r\n          } else {\r\n            if (states.selectedLabel) {\r\n              states.currentPlaceholder = states.selectedLabel\r\n              states.selectedLabel = ''\r\n            }\r\n          }\r\n          handleQueryChange(states.query)\r\n          if (!props.multiple) {\r\n            queryChange.value.query = ''\r\n\r\n            triggerRef(queryChange)\r\n            triggerRef(groupQueryChange)\r\n          }\r\n        }\r\n          if(!isListShow.value) {\r\n            isListShow.value = true\r\n            nextTick(()=> {\r\n              setSelected()\r\n            })\r\n          }\r\n        ctx.emit('on-open-change', val)\r\n      }\r\n    },\r\n  )\r\n\r\n  watch(\r\n    () => ctx.attrs.readonly,\r\n    (val) => {\r\n      if(props.multiple) {\r\n        const value = Array.isArray(props.modelValue) ? props.modelValue.join(props.contentSeparator) : props.modelValue\r\n        states.selectedLabel = val ? value : ''\r\n      }\r\n      resetInputHeight()\r\n    }\r\n  )\r\n\r\n  watch(\r\n    // fix `Array.prototype.push/splice/..` cannot trigger non-deep watcher\r\n    // https://github.com/vuejs/vue-next/issues/2116\r\n    () => states.options.entries(),\r\n    () => {\r\n      if (!isClient) return\r\n      tooltipRef.value?.updatePopper?.()\r\n      if (props.multiple) {\r\n        resetInputHeight()\r\n      }\r\n      const inputs = selectWrapper.value?.querySelectorAll('input') || []\r\n      if (\r\n        Array.from(inputs).indexOf(\r\n          document.activeElement as HTMLInputElement\r\n        ) === -1\r\n      ) {\r\n        setSelected()\r\n      }\r\n      if (\r\n        props.defaultFirstOption &&\r\n        (props.filterable) &&\r\n        states.filteredOptionsCount\r\n      ) {\r\n        checkDefaultFirstOption()\r\n      }\r\n    },\r\n    {\r\n      flush: 'post',\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => states.hoverIndex,\r\n    (val) => {\r\n      if (typeof val === 'number' && val > -1) {\r\n        hoverOption.value = optionsArray.value[val] || {}\r\n      }\r\n      optionsArray.value.forEach((option) => {\r\n        option.hover = hoverOption.value === option\r\n      })\r\n    }\r\n  )\r\n  // methods\r\n  const getTextSize = (text:string) => {\r\n    if(isClient) {\r\n      const span = document.createElement(\"span\")\r\n      span.id = 'referenceSpan'\r\n      let result = {\r\n        width: 0,\r\n        height: 0\r\n      }\r\n      result.width = span.offsetWidth\r\n      result.height = span.offsetHeight\r\n      span.style.visibility = \"hidden\"\r\n      span.style.display = \"inline-block\"\r\n      span.style.fontSize = '14px'\r\n      let isExists = document.getElementById(\"referenceSpan\")\r\n      if (isExists) {\r\n        document.body.removeChild(isExists);\r\n      }\r\n      document.body.appendChild(span)\r\n      if (typeof span.textContent != \"undefined\") {\r\n        span.textContent = text;\r\n      } else {\r\n        span.innerText = text;\r\n      }\r\n      result.width = parseFloat(window.getComputedStyle(span).width) - result.width;\r\n      result.height = parseFloat(window.getComputedStyle(span).height) - result.height;\r\n      document.body.removeChild(span)\r\n      return result\r\n    }\r\n  }\r\n\r\n  const resetInputHeight = () => {\r\n    if ((props.collapseTags || props.ellipsisTag) && !props.filterable) {\r\n      return\r\n    }\r\n    nextTick(() => {\r\n      if (!reference.value) return\r\n      const inputChildNodes = reference.value.$el.childNodes\r\n      const input = Array.from(inputChildNodes).filter(\r\n        (item) => (item as HTMLElement).tagName === 'INPUT'\r\n      )[0] as HTMLInputElement\r\n      const _tags = tagsRef.value\r\n      const sizeInMap = states.initialInputHeight || 40\r\n      input.style.height =\r\n        states.selected.length === 0\r\n          ? `${sizeInMap}px`\r\n          : `${Math.max(\r\n              _tags\r\n                ? _tags.clientHeight + (_tags.clientHeight > sizeInMap ? 6 : 0)\r\n                : 0,\r\n              sizeInMap\r\n            )}px`\r\n\r\n      states.tagInMultiLine = parseFloat(input.style.height) > sizeInMap\r\n\r\n      if (states.visible && emptyText.value !== false) {\r\n        tooltipRef.value?.updatePopper?.()\r\n      }\r\n    })\r\n  }\r\n\r\n  const handleQueryChange = (val) => {\r\n    if (states.previousQuery === val || states.isOnComposition) return\r\n    if (\r\n      states.previousQuery === null &&\r\n      (typeof props.filterMethod === 'function'\r\n        )\r\n    ) {\r\n      states.previousQuery = val\r\n      return\r\n    }\r\n    states.previousQuery = val\r\n    nextTick(() => {\r\n      if (states.visible) tooltipRef.value?.updatePopper?.()\r\n    })\r\n    states.hoverIndex = -1\r\n    if (props.multiple && props.filterable) {\r\n      nextTick(() => {\r\n        const length = inputRef.value!.value.length * 15 + 20\r\n        states.inputLength = (props.collapseTags || props.ellipsisTag) ? Math.min(50, length) : length\r\n        managePlaceholder()\r\n        resetInputHeight()\r\n      })\r\n    }\r\n    if (typeof props.filterMethod === 'function') {\r\n      props.filterMethod(val)\r\n      triggerRef(groupQueryChange)\r\n    } else {\r\n      states.filteredOptionsCount = states.optionsCount\r\n      queryChange.value.query = val\r\n\r\n      triggerRef(queryChange)\r\n      triggerRef(groupQueryChange)\r\n    }\r\n    if (\r\n      props.defaultFirstOption &&\r\n      (props.filterable) &&\r\n      states.filteredOptionsCount\r\n    ) {\r\n      checkDefaultFirstOption()\r\n    }\r\n  }\r\n  const managePlaceholder = () => {\r\n    if (states.currentPlaceholder !== '') {\r\n      states.currentPlaceholder = inputRef.value!.value\r\n        ? ''\r\n        : states.cachedPlaceHolder\r\n    }\r\n  }\r\n\r\n  /**\r\n   * find and highlight first option as default selected\r\n   * @remark\r\n   * - if the first option in dropdown list is user-created,\r\n   *   it would be at the end of the optionsArray\r\n   *   so find it and set hover.\r\n   *   (NOTE: there must be only one user-created option in dropdown list with query)\r\n   * - if there's no user-created option in list, just find the first one as usual\r\n   *   (NOTE: exclude options that are disabled or in disabled-group)\r\n   */\r\n  const checkDefaultFirstOption = () => {\r\n    const optionsInDropdown = optionsArray.value.filter(\r\n      (n) => n.visible && !n.disabled && !n.states.groupDisabled\r\n    )\r\n    const userCreatedOption = optionsInDropdown.filter((n) => n.isCreated)[0]\r\n    const firstOriginOption = optionsInDropdown[0]\r\n    states.hoverIndex = getValueIndex(\r\n      optionsArray.value,\r\n      userCreatedOption || firstOriginOption\r\n    )\r\n  }\r\n\r\n  const setSelected = () => {\r\n    if (!props.multiple) {\r\n      const option = getOption(props.modelValue)\r\n      if (option.props?.isCreated) {\r\n        states.createdLabel = option.props.value\r\n        states.createdSelected = true\r\n      } else {\r\n        states.createdSelected = false\r\n      }\r\n      states.selectedLabel = option.currentLabel\r\n      states.selected = option\r\n      if (props.filterable) states.query = states.selectedLabel\r\n      return\r\n    }\r\n    const result: any[] = []\r\n    if (Array.isArray(props.modelValue)) {\r\n      props.modelValue.forEach((value) => {\r\n        result.push(getOption(value))\r\n      })\r\n    }\r\n    states.selected = result\r\n    nextTick(() => {\r\n      resetInputHeight()\r\n    })\r\n  }\r\n\r\n  const getOption = (value) => {\r\n    let option\r\n    const isObjectValue = toRawType(value).toLowerCase() === 'object'\r\n    const isNull = toRawType(value).toLowerCase() === 'null'\r\n    const isUndefined = toRawType(value).toLowerCase() === 'undefined'\r\n    for (let i = states.cachedOptions.size - 1; i >= 0; i--) {\r\n      const cachedOption = cachedOptionsArray.value[i]\r\n      const isEqualValue = isObjectValue\r\n        ? getValueByPath(cachedOption.value, props.valueKey) ===\r\n          getValueByPath(value, props.valueKey)\r\n        : cachedOption.value === value\r\n      if (isEqualValue) {\r\n        option = {\r\n          value,\r\n          currentLabel: cachedOption.currentLabel,\r\n          isDisabled: cachedOption.isDisabled,\r\n        }\r\n        break\r\n      }\r\n    }\r\n    if (option) return option\r\n    const label = !isObjectValue && !isNull && !isUndefined ? value : ''\r\n    const newOption = {\r\n      value,\r\n      currentLabel: label,\r\n    }\r\n    if (props.multiple) {\r\n      ;(newOption as any).hitState = false\r\n    }\r\n    return newOption\r\n  }\r\n\r\n  const resetHoverIndex = () => {\r\n    setTimeout(() => {\r\n      const valueKey = props.valueKey\r\n      if (!props.multiple) {\r\n        states.hoverIndex = optionsArray.value.findIndex((item) => {\r\n          return getValueKey(item) === getValueKey(states.selected)\r\n        })\r\n      } else {\r\n        if (states.selected.length > 0) {\r\n          states.hoverIndex = Math.min.apply(\r\n            null,\r\n            states.selected.map((selected) => {\r\n              return optionsArray.value.findIndex((item) => {\r\n                return (\r\n                  getValueByPath(item, valueKey) ===\r\n                  getValueByPath(selected, valueKey)\r\n                )\r\n              })\r\n            })\r\n          )\r\n        } else {\r\n          states.hoverIndex = -1\r\n        }\r\n      }\r\n    }, 300)\r\n  }\r\n\r\n  const handleResize = () => {\r\n    if (props.multiple) multipleTagsRef.value?.calculateTags(props.modelValue)\r\n    resetInputWidth()\r\n    tooltipRef.value?.updatePopper?.()\r\n    if (props.multiple) resetInputHeight()\r\n  }\r\n\r\n  const resetInputWidth = () => {\r\n    states.inputWidth = reference.value?.$el.getBoundingClientRect().width\r\n  }\r\n\r\n  const onInputChange = () => {\r\n    if(props.filterable && props.showSingleFilterInput) {\r\n      handleQueryChange(states.filterInputText)\r\n    }\r\n    if (props.filterable && states.query !== states.selectedLabel  && !props.showSingleFilterInput) {\r\n      states.query = states.selectedLabel\r\n      handleQueryChange(states.query)\r\n    }\r\n  }\r\n  const debouncedOnInputChange = lodashDebounce(() => {\r\n    onInputChange()\r\n  }, debounce.value)\r\n\r\n  const debouncedQueryChange = lodashDebounce((e) => {\r\n    handleQueryChange(e.target.value)\r\n  }, debounce.value)\r\n\r\n  const emitChange = (val) => {\r\n    if (!isEqual(props.modelValue, val)) {\r\n      if(props.labelInValue) {\r\n        states.selectedOption = {}\r\n        Array.from(states.options.values()).forEach((item)=> {\r\n          if(props.multiple) {\r\n            if(item.value == val[val.length - 1]) {\r\n              const completeObject = Object.assign({}, item)\r\n              states.selectedOption = {label:completeObject.label,value:completeObject.value}\r\n            }\r\n          }else {\r\n            if(item.value == val) {\r\n              const completeObject = Object.assign({}, item)\r\n              states.selectedOption = {label:completeObject.label,value:completeObject.value}\r\n            }\r\n          }\r\n        })\r\n        ctx.emit('on-change',  JSON.parse(JSON.stringify(states.selectedOption)))\r\n      }else {\r\n        ctx.emit('on-change', val)\r\n      }\r\n    }\r\n  }\r\n\r\n  const deletePrevTag = (e) => {\r\n    if (e.target.value.length <= 0 && !toggleLastOptionHitState()) {\r\n      const value = props.modelValue.slice()\r\n      value.pop()\r\n      ctx.emit(UPDATE_MODEL_EVENT, value)\r\n      emitChange(value)\r\n    }\r\n\r\n    if (e.target.value.length === 1 && props.modelValue.length === 0) {\r\n      states.currentPlaceholder = states.cachedPlaceHolder\r\n    }\r\n  }\r\n\r\n  const deleteTag = (tag) => {\r\n    const index = states.selected.indexOf(tag)\r\n    if (index > -1 && !selectDisabled.value) {\r\n      const value = props.modelValue.slice()\r\n      value.splice(index, 1)\r\n      ctx.emit(UPDATE_MODEL_EVENT, value)\r\n      emitChange(value)\r\n      ctx.emit('on-remove-tag', tag.value)\r\n    }\r\n  }\r\n\r\n  const deleteSelected = (event) => {\r\n    event.stopPropagation()\r\n    const value: string | any[] = props.multiple ? [] : ''\r\n    if (typeof value !== 'string') {\r\n      for (const item of states.selected) {\r\n        if (item.isDisabled) value.push(item.value)\r\n      }\r\n    }\r\n    ctx.emit(UPDATE_MODEL_EVENT, value)\r\n    emitChange(value)\r\n    states.visible = false\r\n    ctx.emit('on-clear')\r\n  }\r\n\r\n  const handleOptionSelect = (option, byClick) => {\r\n    if (props.multiple) {\r\n      const value = (props.modelValue || []).slice()\r\n      const optionIndex = getValueIndex(value, option.value)\r\n      if (optionIndex > -1) {\r\n        value.splice(optionIndex, 1)\r\n      } else if (\r\n        props.multipleLimit <= 0 ||\r\n        value.length < props.multipleLimit\r\n      ) {\r\n        value.push(option.value)\r\n      }\r\n      multipleTagsRef.value?.calculateTags(value)\r\n      ctx.emit(UPDATE_MODEL_EVENT, value)\r\n      emitChange(value)\r\n      if (option.isCreated) {\r\n        states.query = ''\r\n        handleQueryChange('')\r\n        states.inputLength = 20\r\n      }\r\n      if (props.filterable) inputRef.value?.focus()\r\n    } else {\r\n      ctx.emit(UPDATE_MODEL_EVENT, option.value)\r\n      emitChange(option.value)\r\n      states.visible = false\r\n    }\r\n    states.isSilentBlur = byClick\r\n    setSoftFocus()\r\n    if (states.visible) return\r\n    nextTick(() => {\r\n      scrollToOption(option)\r\n    })\r\n  }\r\n\r\n  const getValueIndex = (arr: any[] = [], value) => {\r\n    if (!isObject(value)) return arr.indexOf(value)\r\n\r\n    const valueKey = props.valueKey\r\n    let index = -1\r\n    arr.some((item, i) => {\r\n      if (getValueByPath(item, valueKey) === getValueByPath(value, valueKey)) {\r\n        index = i\r\n        return true\r\n      }\r\n      return false\r\n    })\r\n    return index\r\n  }\r\n\r\n  const setSoftFocus = () => {\r\n    states.softFocus = true\r\n    const _input = inputRef.value || reference.value\r\n    if (_input) {\r\n      _input?.focus()\r\n    }\r\n  }\r\n\r\n  const scrollToOption = (option) => {\r\n    const targetOption = Array.isArray(option) ? option[0] : option\r\n    let target = null\r\n\r\n    if (targetOption?.value) {\r\n      const options = optionsArray.value.filter(\r\n        (item) => item.value === targetOption.value\r\n      )\r\n      if (options.length > 0) {\r\n        target = options[0].$el\r\n      }\r\n    }\r\n\r\n    if (tooltipRef.value && target) {\r\n      const menu = tooltipRef.value?.popperRef?.contentRef?.querySelector?.(\r\n        '.sg-select-dropdown__wrap'\r\n      )\r\n      if (menu) {\r\n        scrollIntoView(menu as HTMLElement, target)\r\n      }\r\n    }\r\n    scrollbar.value?.handleScroll()\r\n  }\r\n\r\n  const onOptionCreate = (vm: SelectOptionProxy) => {\r\n    states.optionsCount++\r\n    states.filteredOptionsCount++\r\n    states.options.set(vm.value, vm)\r\n    states.cachedOptions.set(vm.value, vm)\r\n  }\r\n\r\n  const onOptionDestroy = (key) => {\r\n    states.optionsCount--\r\n    states.filteredOptionsCount--\r\n    states.options.delete(key)\r\n  }\r\n\r\n  const resetInputState = (e: KeyboardEvent) => {\r\n    if (e.code !== EVENT_CODE.backspace) toggleLastOptionHitState(false)\r\n    states.inputLength = inputRef.value!.value.length * 15 + 20\r\n    resetInputHeight()\r\n  }\r\n\r\n  const toggleLastOptionHitState = (hit?: boolean) => {\r\n    if (!Array.isArray(states.selected)) return\r\n    const option = states.selected[states.selected.length - 1]\r\n    if (!option) return\r\n\r\n    if (hit === true || hit === false) {\r\n      option.hitState = hit\r\n      return hit\r\n    }\r\n\r\n    option.hitState = !option.hitState\r\n    return option.hitState\r\n  }\r\n\r\n  const handleComposition = (event) => {\r\n    const text = event.target.value\r\n    if (event.type === 'compositionend') {\r\n      states.isOnComposition = false\r\n      nextTick(() => handleQueryChange(text))\r\n    } else {\r\n      const lastCharacter = text[text.length - 1] || ''\r\n      states.isOnComposition = !isKorean(lastCharacter)\r\n    }\r\n  }\r\n\r\n  const handleMenuEnter = () => {\r\n    nextTick(() => scrollToOption(states.selected))\r\n  }\r\n\r\n  const handleFocus = (event) => {\r\n    if (!states.softFocus) {\r\n      if (props.filterable) {\r\n        if(!ctx.attrs.readonly) {\r\n          states.visible = true\r\n        }\r\n        if (props.filterable) {\r\n          states.menuVisibleOnFocus = true\r\n        }\r\n      }\r\n      ctx.emit('on-focus', event)\r\n    } else {\r\n      states.softFocus = false\r\n    }\r\n  }\r\n\r\n  const blur = () => {\r\n    states.visible = false\r\n    reference.value?.blur()\r\n  }\r\n\r\n  const handleBlur = (event: Event) => {\r\n    // https://github.com/ElemeFE/element/pull/10822\r\n    nextTick(() => {\r\n      if (states.isSilentBlur) {\r\n        states.isSilentBlur = false\r\n      } else {\r\n        ctx.emit('on-blur', event)\r\n      }\r\n    })\r\n    states.softFocus = false\r\n  }\r\n\r\n  const handleClearClick = (event: Event) => {\r\n    deleteSelected(event)\r\n  }\r\n\r\n  const handleClose = () => {\r\n    states.visible = false\r\n  }\r\n\r\n  const toggleMenu = () => {\r\n    if (!selectDisabled.value) {\r\n      if (states.menuVisibleOnFocus) {\r\n        states.menuVisibleOnFocus = false\r\n      } else if (!ctx.attrs.readonly) {\r\n        states.visible = !states.visible\r\n      }\r\n      if (states.visible) {\r\n        ;(inputRef.value || reference.value)?.focus()\r\n      }\r\n    }\r\n  }\r\n\r\n  const selectOption = () => {\r\n    if (!states.visible) {\r\n      toggleMenu()\r\n    } else {\r\n      if (optionsArray.value[states.hoverIndex]) {\r\n        handleOptionSelect(optionsArray.value[states.hoverIndex], undefined)\r\n      }\r\n    }\r\n  }\r\n\r\n  const getValueKey = (item) => {\r\n    return isObject(item.value)\r\n      ? getValueByPath(item.value, props.valueKey)\r\n      : item.value\r\n  }\r\n\r\n  const optionsAllDisabled = computed(() =>\r\n    optionsArray.value\r\n      .filter((option) => option.visible)\r\n      .every((option) => option.disabled)\r\n  )\r\n\r\n  const navigateOptions = (direction) => {\r\n    if (!states.visible && !ctx.attrs.readonly) {\r\n      states.visible = true\r\n      return\r\n    }\r\n    if (states.options.size === 0 || states.filteredOptionsCount === 0) return\r\n    if (states.isOnComposition) return\r\n\r\n    if (!optionsAllDisabled.value) {\r\n      if (direction === 'next') {\r\n        states.hoverIndex++\r\n        if (states.hoverIndex === states.options.size) {\r\n          states.hoverIndex = 0\r\n        }\r\n      } else if (direction === 'prev') {\r\n        states.hoverIndex--\r\n        if (states.hoverIndex < 0) {\r\n          states.hoverIndex = states.options.size - 1\r\n        }\r\n      }\r\n      const option = optionsArray.value[states.hoverIndex]\r\n      if (\r\n        option.disabled === true ||\r\n        option.states.groupDisabled === true ||\r\n        !option.visible\r\n      ) {\r\n        navigateOptions(direction)\r\n      }\r\n      nextTick(() => scrollToOption(hoverOption.value))\r\n    }\r\n  }\r\n\r\n  const handleMultipleTagRest = (rest) => {\r\n    ctx.emit('on-tag-rest', rest)\r\n  }\r\n\r\n  const updatePopper = () => {\r\n    tooltipRef.value?.updatePopper?.()\r\n  }\r\n\r\n  return {\r\n    isListShow,\r\n    optionsArray,\r\n    selectSize,\r\n    handleResize,\r\n    debouncedOnInputChange,\r\n    debouncedQueryChange,\r\n    deletePrevTag,\r\n    deleteTag,\r\n    deleteSelected,\r\n    handleOptionSelect,\r\n    handleMultipleTagRest,\r\n    scrollToOption,\r\n    isReadonly,\r\n    resetInputHeight,\r\n    showClose,\r\n    iconComponent,\r\n    iconReverse,\r\n    showNewOption,\r\n    tagSize,\r\n    setSelected,\r\n    managePlaceholder,\r\n    selectDisabled,\r\n    emptyText,\r\n    toggleLastOptionHitState,\r\n    resetInputState,\r\n    handleComposition,\r\n    onOptionCreate,\r\n    onOptionDestroy,\r\n    handleMenuEnter,\r\n    handleFocus,\r\n    blur,\r\n    handleBlur,\r\n    handleClearClick,\r\n    handleClose,\r\n    toggleMenu,\r\n    selectOption,\r\n    navigateOptions,\r\n    dropMenuVisible,\r\n    handelShowOverflowText,\r\n    queryChange,\r\n    groupQueryChange,\r\n    updatePopper,\r\n\r\n    // DOM ref\r\n    reference,\r\n    inputRef,\r\n    tooltipRef,\r\n    tagsRef,\r\n    multipleTagsRef,\r\n    selectWrapper,\r\n    scrollbar,\r\n  }\r\n}\r\n"],"names":["debounce","lodashDebounce"],"mappings":"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"}