UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 55.9 kB
{"version":3,"file":"useSelect.mjs","sources":["../../../../../../packages/components/select/src/useSelect.ts"],"sourcesContent":["import {\n computed,\n nextTick,\n onMounted,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport { clamp, findLastIndex, get, isEqual, isNil } from 'lodash-unified'\nimport { useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport {\n ValidateComponentsMap,\n debugWarn,\n ensureArray,\n getEventCode,\n isArray,\n isClient,\n isEmpty,\n isFunction,\n isIOS,\n isNumber,\n isObject,\n isPlainObject,\n isUndefined,\n scrollIntoView,\n} from '@element-plus/utils'\nimport {\n CHANGE_EVENT,\n EVENT_CODE,\n MINIMUM_INPUT_WIDTH,\n UPDATE_MODEL_EVENT,\n} from '@element-plus/constants'\nimport {\n useComposition,\n useEmptyValues,\n useFocusController,\n useId,\n useLocale,\n useNamespace,\n} from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\n\nimport type { Component } from 'vue'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { ScrollbarInstance } from '@element-plus/components/scrollbar'\nimport type { SelectEmits, SelectProps } from './select'\nimport type {\n OptionBasic,\n OptionPublicInstance,\n OptionValue,\n SelectStates,\n} from './type'\n\nexport const useSelect = (props: SelectProps, emit: SelectEmits) => {\n const { t } = useLocale()\n const contentId = useId()\n const nsSelect = useNamespace('select')\n const nsInput = useNamespace('input')\n\n const states = reactive<SelectStates>({\n inputValue: '',\n options: new Map(),\n cachedOptions: new Map(),\n optionValues: [], // sorted value of options\n selected: [],\n selectionWidth: 0,\n collapseItemWidth: 0,\n selectedLabel: '',\n hoveringIndex: -1,\n previousQuery: null,\n inputHovering: false,\n menuVisibleOnFocus: false,\n isBeforeHide: false,\n })\n\n // template refs\n const selectRef = ref<HTMLElement>()\n const selectionRef = ref<HTMLElement>()\n const tooltipRef = ref<TooltipInstance>()\n const tagTooltipRef = ref<TooltipInstance>()\n const inputRef = ref<HTMLInputElement>()\n const prefixRef = ref<HTMLElement>()\n const suffixRef = ref<HTMLElement>()\n const menuRef = ref<HTMLElement>()\n const tagMenuRef = ref<HTMLElement>()\n const collapseItemRef = ref<HTMLElement>()\n const scrollbarRef = ref<ScrollbarInstance>()\n // the controller of the expanded popup\n const expanded = ref(false)\n const hoverOption = ref()\n const debouncing = ref(false)\n\n const { form, formItem } = useFormItem()\n const { inputId } = useFormItemInputId(props, {\n formItemContext: formItem,\n })\n const { valueOnClear, isEmptyValue } = useEmptyValues(props)\n\n const {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n } = useComposition({\n afterComposition: (e) => onInput(e),\n })\n\n const selectDisabled = useFormDisabled()\n\n const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n disabled: selectDisabled,\n afterFocus() {\n if (props.automaticDropdown && !expanded.value) {\n expanded.value = true\n states.menuVisibleOnFocus = true\n }\n },\n beforeBlur(event) {\n return (\n tooltipRef.value?.isFocusInsideContent(event) ||\n tagTooltipRef.value?.isFocusInsideContent(event)\n )\n },\n afterBlur() {\n expanded.value = false\n states.menuVisibleOnFocus = false\n if (props.validateEvent) {\n formItem?.validate?.('blur').catch((err) => debugWarn(err))\n }\n },\n })\n\n const hasModelValue = computed(() => {\n return isArray(props.modelValue)\n ? props.modelValue.length > 0\n : !isEmptyValue(props.modelValue)\n })\n\n const needStatusIcon = computed(() => form?.statusIcon ?? false)\n\n const showClearBtn = computed(() => {\n return (\n props.clearable &&\n !selectDisabled.value &&\n hasModelValue.value &&\n (isFocused.value || states.inputHovering)\n )\n })\n const iconComponent = computed(() =>\n props.remote && props.filterable && !props.remoteShowSuffix\n ? ''\n : props.suffixIcon\n )\n const iconReverse = computed(() =>\n nsSelect.is('reverse', !!(iconComponent.value && expanded.value))\n )\n\n const validateState = computed(() => formItem?.validateState || '')\n const validateIcon = computed(\n () =>\n validateState.value &&\n (ValidateComponentsMap[validateState.value] as Component)\n )\n\n const debounce = computed(() => (props.remote ? props.debounce : 0))\n\n const isRemoteSearchEmpty = computed(\n () => props.remote && !states.inputValue && states.options.size === 0\n )\n\n const emptyText = computed(() => {\n if (props.loading) {\n return props.loadingText || t('el.select.loading')\n } else {\n if (\n props.filterable &&\n states.inputValue &&\n states.options.size > 0 &&\n filteredOptionsCount.value === 0\n ) {\n return props.noMatchText || t('el.select.noMatch')\n }\n if (states.options.size === 0) {\n return props.noDataText || t('el.select.noData')\n }\n }\n return null\n })\n\n const filteredOptionsCount = computed(\n () => optionsArray.value.filter((option) => option.visible).length\n )\n\n const optionsArray = computed(() => {\n const list = Array.from(states.options.values())\n const newList: OptionPublicInstance[] = []\n states.optionValues.forEach((item) => {\n const index = list.findIndex((i) => i.value === item)\n if (index > -1) {\n newList.push(list[index])\n }\n })\n return newList.length >= list.length ? newList : list\n })\n\n const cachedOptionsArray = computed(() =>\n Array.from(states.cachedOptions.values())\n )\n\n const showNewOption = computed(() => {\n const hasExistingOption = optionsArray.value\n .filter((option) => {\n return !option.created\n })\n .some((option) => {\n return option.currentLabel === states.inputValue\n })\n return (\n props.filterable &&\n props.allowCreate &&\n states.inputValue !== '' &&\n !hasExistingOption\n )\n })\n\n const updateOptions = () => {\n if (props.filterable && isFunction(props.filterMethod)) return\n if (props.filterable && props.remote && isFunction(props.remoteMethod))\n return\n optionsArray.value.forEach((option) => {\n option.updateOption?.(states.inputValue)\n })\n }\n\n const selectSize = useFormSize()\n\n const collapseTagSize = computed(() =>\n ['small'].includes(selectSize.value) ? 'small' : 'default'\n )\n\n const dropdownMenuVisible = computed({\n get() {\n return (\n expanded.value &&\n (props.loading || !isRemoteSearchEmpty.value) &&\n (!debouncing.value || !isEmpty(states.previousQuery))\n )\n },\n set(val: boolean) {\n expanded.value = val\n },\n })\n\n const shouldShowPlaceholder = computed(() => {\n if (props.multiple && !isUndefined(props.modelValue)) {\n return ensureArray(props.modelValue).length === 0 && !states.inputValue\n }\n const value = isArray(props.modelValue)\n ? props.modelValue[0]\n : props.modelValue\n return props.filterable || isUndefined(value) ? !states.inputValue : true\n })\n\n const currentPlaceholder = computed(() => {\n const _placeholder = props.placeholder ?? t('el.select.placeholder')\n return props.multiple || !hasModelValue.value\n ? _placeholder\n : states.selectedLabel\n })\n\n // iOS Safari does not handle click events when a mouseenter event is registered and a DOM-change happens in a child\n // We use a Vue custom event binding to only register the event on non-iOS devices\n // ref.: https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n // Github Issue: https://github.com/vuejs/vue/issues/9859\n const mouseEnterEventName = computed(() => (isIOS ? null : 'mouseenter'))\n\n watch(\n () => props.modelValue,\n (val, oldVal) => {\n if (props.multiple) {\n if (props.filterable && !props.reserveKeyword) {\n states.inputValue = ''\n handleQueryChange('')\n }\n }\n setSelected()\n if (!isEqual(val, oldVal) && props.validateEvent) {\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n },\n {\n flush: 'post',\n deep: true,\n }\n )\n\n watch(\n () => expanded.value,\n (val) => {\n if (val) {\n handleQueryChange(states.inputValue)\n } else {\n states.inputValue = ''\n states.previousQuery = null\n states.isBeforeHide = true\n }\n }\n )\n\n watch(\n // fix `Array.prototype.push/splice/..` cannot trigger non-deep watcher\n // https://github.com/vuejs/vue-next/issues/2116\n () => states.options.entries(),\n () => {\n if (!isClient) return\n // tooltipRef.value?.updatePopper?.()\n setSelected()\n if (\n props.defaultFirstOption &&\n (props.filterable || props.remote) &&\n filteredOptionsCount.value\n ) {\n checkDefaultFirstOption()\n }\n },\n {\n flush: 'post',\n }\n )\n\n watch([() => states.hoveringIndex, optionsArray], ([val]) => {\n if (isNumber(val) && val > -1) {\n hoverOption.value = optionsArray.value[val] || {}\n } else {\n hoverOption.value = {}\n }\n optionsArray.value.forEach((option) => {\n option.hover = hoverOption.value === option\n })\n })\n\n watchEffect(() => {\n // Anything could cause options changed, then update options\n // If you want to control it by condition, write here\n if (states.isBeforeHide) return\n updateOptions()\n })\n\n const handleQueryChange = (val: string) => {\n if (states.previousQuery === val || isComposing.value) {\n return\n }\n states.previousQuery = val\n if (props.filterable && isFunction(props.filterMethod)) {\n props.filterMethod(val)\n } else if (\n props.filterable &&\n props.remote &&\n isFunction(props.remoteMethod)\n ) {\n props.remoteMethod(val)\n }\n if (\n props.defaultFirstOption &&\n (props.filterable || props.remote) &&\n filteredOptionsCount.value\n ) {\n nextTick(checkDefaultFirstOption)\n } else {\n nextTick(updateHoveringIndex)\n }\n }\n\n /**\n * find and highlight first option as default selected\n * @remark\n * - if the first option in dropdown list is user-created,\n * it would be at the end of the optionsArray\n * so find it and set hover.\n * (NOTE: there must be only one user-created option in dropdown list with query)\n * - if there's no user-created option in list, just find the first one as usual\n * (NOTE: exclude options that are disabled or in disabled-group)\n */\n const checkDefaultFirstOption = () => {\n const optionsInDropdown = optionsArray.value.filter(\n (n) => n.visible && !n.disabled && !n.states.groupDisabled\n )\n const userCreatedOption = optionsInDropdown.find((n) => n.created)\n const firstOriginOption = optionsInDropdown[0]\n const valueList = optionsArray.value.map((item) => item.value)\n states.hoveringIndex = getValueIndex(\n valueList,\n userCreatedOption || firstOriginOption\n )\n }\n\n const setSelected = () => {\n if (!props.multiple) {\n const value = isArray(props.modelValue)\n ? props.modelValue[0]\n : props.modelValue\n const option = getOption(value)\n states.selectedLabel = option.currentLabel\n states.selected = [option]\n return\n } else {\n states.selectedLabel = ''\n }\n const result: SelectStates['selected'] = []\n if (!isUndefined(props.modelValue)) {\n ensureArray(props.modelValue).forEach((value) => {\n result.push(getOption(value))\n })\n }\n states.selected = result\n }\n\n const getOption = (value: OptionValue) => {\n let option\n const isObjectValue = isPlainObject(value)\n\n for (let i = states.cachedOptions.size - 1; i >= 0; i--) {\n const cachedOption = cachedOptionsArray.value[i]\n const isEqualValue = isObjectValue\n ? get(cachedOption.value, props.valueKey) === get(value, props.valueKey)\n : cachedOption.value === value\n if (isEqualValue) {\n option = {\n index: optionsArray.value\n .filter((opt) => !opt.created)\n .indexOf(cachedOption),\n value,\n currentLabel: cachedOption.currentLabel,\n get isDisabled() {\n return cachedOption.isDisabled\n },\n }\n break\n }\n }\n if (option) return option\n const label = isObjectValue ? value.label : (value ?? '')\n const newOption = {\n index: -1,\n value,\n currentLabel: label,\n }\n return newOption\n }\n\n const updateHoveringIndex = () => {\n const length = states.selected.length\n if (length > 0) {\n const lastOption = states.selected[length - 1]\n states.hoveringIndex = optionsArray.value.findIndex(\n (item) => getValueKey(lastOption) === getValueKey(item)\n )\n } else {\n states.hoveringIndex = -1\n }\n }\n\n const resetSelectionWidth = () => {\n states.selectionWidth = Number.parseFloat(\n window.getComputedStyle(selectionRef.value!).width\n )\n }\n\n const resetCollapseItemWidth = () => {\n states.collapseItemWidth =\n collapseItemRef.value!.getBoundingClientRect().width\n }\n\n const updateTooltip = () => {\n tooltipRef.value?.updatePopper?.()\n }\n\n const updateTagTooltip = () => {\n tagTooltipRef.value?.updatePopper?.()\n }\n\n const onInputChange = () => {\n if (states.inputValue.length > 0 && !expanded.value) {\n expanded.value = true\n }\n handleQueryChange(states.inputValue)\n }\n\n const onInput = (event: Event) => {\n states.inputValue = (event.target as HTMLInputElement).value\n if (props.remote) {\n debouncing.value = true\n debouncedOnInputChange()\n } else {\n return onInputChange()\n }\n }\n\n const debouncedOnInputChange = useDebounceFn(() => {\n onInputChange()\n debouncing.value = false\n }, debounce)\n\n const emitChange = (val: OptionValue | OptionValue[]) => {\n if (!isEqual(props.modelValue, val)) {\n emit(CHANGE_EVENT, val)\n }\n }\n\n const getLastNotDisabledIndex = (value: OptionValue[]) =>\n findLastIndex(value, (it) => {\n const option = states.cachedOptions.get(it)\n return !option?.disabled && !option?.states.groupDisabled\n })\n\n const deletePrevTag = (e: KeyboardEvent) => {\n const code = getEventCode(e)\n if (!props.multiple) return\n if (code === EVENT_CODE.delete) return\n if ((e.target as HTMLInputElement).value.length <= 0) {\n const value = ensureArray(props.modelValue).slice()\n const lastNotDisabledIndex = getLastNotDisabledIndex(value)\n if (lastNotDisabledIndex < 0) return\n const removeTagValue = value[lastNotDisabledIndex]\n value.splice(lastNotDisabledIndex, 1)\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n emit('remove-tag', removeTagValue)\n }\n }\n\n const deleteTag = (event: MouseEvent, tag: OptionBasic) => {\n const index = states.selected.indexOf(tag)\n if (index > -1 && !selectDisabled.value) {\n const value = ensureArray(props.modelValue).slice()\n value.splice(index, 1)\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n emit('remove-tag', tag.value)\n }\n event.stopPropagation()\n focus()\n }\n\n const deleteSelected = (event: Event) => {\n event.stopPropagation()\n const value = props.multiple ? [] : valueOnClear.value\n if (props.multiple) {\n for (const item of states.selected) {\n if (item.isDisabled) value.push(item.value)\n }\n }\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n states.hoveringIndex = -1\n expanded.value = false\n emit('clear')\n focus()\n }\n\n const handleOptionSelect = (option: OptionPublicInstance) => {\n if (props.multiple) {\n const value = ensureArray(props.modelValue ?? []).slice()\n const optionIndex = getValueIndex(value, option)\n if (optionIndex > -1) {\n value.splice(optionIndex, 1)\n } else if (\n props.multipleLimit <= 0 ||\n value.length < props.multipleLimit\n ) {\n value.push(option.value)\n }\n emit(UPDATE_MODEL_EVENT, value)\n emitChange(value)\n if (option.created) {\n handleQueryChange('')\n }\n if (props.filterable && !props.reserveKeyword) {\n states.inputValue = ''\n }\n } else {\n !isEqual(props.modelValue, option.value) &&\n emit(UPDATE_MODEL_EVENT, option.value)\n emitChange(option.value)\n expanded.value = false\n }\n focus()\n if (expanded.value) return\n nextTick(() => {\n scrollToOption(option)\n })\n }\n\n const getValueIndex = (arr: OptionValue[], option: OptionPublicInstance) => {\n if (isUndefined(option)) return -1\n if (!isObject(option.value)) return arr.indexOf(option.value)\n\n return arr.findIndex((item) => {\n return isEqual(get(item, props.valueKey), getValueKey(option))\n })\n }\n\n const scrollToOption = (\n option:\n | OptionPublicInstance\n | OptionPublicInstance[]\n | SelectStates['selected']\n ) => {\n const targetOption = isArray(option) ? option[option.length - 1] : option\n let target = null\n\n if (!isNil(targetOption?.value)) {\n const options = optionsArray.value.filter(\n (item) => item.value === targetOption.value\n )\n if (options.length > 0) {\n target = options[0].$el\n }\n }\n\n if (tooltipRef.value && target) {\n const menu = tooltipRef.value?.popperRef?.contentRef?.querySelector?.(\n `.${nsSelect.be('dropdown', 'wrap')}`\n )\n if (menu) {\n scrollIntoView(menu as HTMLElement, target)\n }\n }\n scrollbarRef.value?.handleScroll()\n }\n\n const onOptionCreate = (vm: OptionPublicInstance) => {\n states.options.set(vm.value, vm)\n states.cachedOptions.set(vm.value, vm)\n }\n\n const onOptionDestroy = (key: OptionValue, vm: OptionPublicInstance) => {\n if (states.options.get(key) === vm) {\n states.options.delete(key)\n }\n }\n\n const popperRef = computed(() => {\n return tooltipRef.value?.popperRef?.contentRef\n })\n\n const handleMenuEnter = () => {\n states.isBeforeHide = false\n nextTick(() => {\n scrollbarRef.value?.update()\n scrollToOption(states.selected)\n })\n }\n\n const focus = () => {\n inputRef.value?.focus()\n }\n\n const blur = () => {\n if (expanded.value) {\n expanded.value = false\n nextTick(() => inputRef.value?.blur())\n return\n }\n inputRef.value?.blur()\n }\n\n const handleClearClick = (event: Event) => {\n deleteSelected(event)\n }\n\n const handleClickOutside = (event: Event) => {\n expanded.value = false\n\n if (isFocused.value) {\n const _event = new FocusEvent('blur', event)\n nextTick(() => handleBlur(_event))\n }\n }\n\n const handleEsc = () => {\n if (states.inputValue.length > 0) {\n states.inputValue = ''\n } else {\n expanded.value = false\n }\n }\n\n const toggleMenu = (event?: Event) => {\n if (\n selectDisabled.value ||\n (props.filterable &&\n expanded.value &&\n event &&\n !suffixRef.value?.contains(event.target as Node))\n )\n return\n\n // We only set the inputHovering state to true on mouseenter event on iOS devices\n // To keep the state updated we set it here to true\n if (isIOS) states.inputHovering = true\n\n if (states.menuVisibleOnFocus) {\n // controlled by automaticDropdown\n states.menuVisibleOnFocus = false\n } else {\n expanded.value = !expanded.value\n }\n }\n\n const selectOption = () => {\n if (!expanded.value) {\n toggleMenu()\n } else {\n const option = optionsArray.value[states.hoveringIndex]\n if (option && !option.isDisabled) {\n handleOptionSelect(option)\n }\n }\n }\n\n const getValueKey = (\n item: OptionPublicInstance | SelectStates['selected'][0]\n ) => {\n return isObject(item.value) ? get(item.value, props.valueKey) : item.value\n }\n\n const optionsAllDisabled = computed(() =>\n optionsArray.value\n .filter((option) => option.visible)\n .every((option) => option.isDisabled)\n )\n\n const showTagList = computed(() => {\n if (!props.multiple) {\n return []\n }\n return props.collapseTags\n ? states.selected.slice(0, props.maxCollapseTags)\n : states.selected\n })\n\n const collapseTagList = computed(() => {\n if (!props.multiple) {\n return []\n }\n return props.collapseTags\n ? states.selected.slice(props.maxCollapseTags)\n : []\n })\n\n const navigateOptions = (direction: 'prev' | 'next') => {\n if (!expanded.value) {\n expanded.value = true\n return\n }\n if (\n states.options.size === 0 ||\n filteredOptionsCount.value === 0 ||\n isComposing.value\n )\n return\n\n if (!optionsAllDisabled.value) {\n if (direction === 'next') {\n states.hoveringIndex++\n if (states.hoveringIndex === states.options.size) {\n states.hoveringIndex = 0\n }\n } else if (direction === 'prev') {\n states.hoveringIndex--\n if (states.hoveringIndex < 0) {\n states.hoveringIndex = states.options.size - 1\n }\n }\n const option = optionsArray.value[states.hoveringIndex]\n if (option.isDisabled || !option.visible) {\n navigateOptions(direction)\n }\n nextTick(() => scrollToOption(hoverOption.value))\n }\n }\n\n const findFocusableIndex = (\n arr: any[],\n start: number,\n step: number,\n len: number\n ) => {\n for (let i = start; i >= 0 && i < len; i += step) {\n const obj = arr[i]\n if (!obj?.isDisabled && obj?.visible) {\n return i\n }\n }\n return null\n }\n\n const focusOption = (targetIndex: number, mode: 'up' | 'down') => {\n const len = states.options.size\n if (len === 0) return\n const start = clamp(targetIndex, 0, len - 1)\n const options = optionsArray.value\n const direction = mode === 'up' ? -1 : 1\n const newIndex =\n findFocusableIndex(options, start, direction, len) ??\n findFocusableIndex(options, start - direction, -direction, len)\n\n if (newIndex != null) {\n states.hoveringIndex = newIndex\n nextTick(() => scrollToOption(hoverOption.value))\n }\n }\n\n const handleKeydown = (e: KeyboardEvent) => {\n const code = getEventCode(e)\n let isPreventDefault = true\n switch (code) {\n case EVENT_CODE.up:\n navigateOptions('prev')\n break\n case EVENT_CODE.down:\n navigateOptions('next')\n break\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n if (!isComposing.value) {\n selectOption()\n }\n break\n case EVENT_CODE.esc:\n handleEsc()\n break\n case EVENT_CODE.backspace:\n isPreventDefault = false\n deletePrevTag(e)\n return\n case EVENT_CODE.home:\n if (!expanded.value) return\n focusOption(0, 'down')\n break\n case EVENT_CODE.end:\n if (!expanded.value) return\n focusOption(states.options.size - 1, 'up')\n break\n case EVENT_CODE.pageUp:\n if (!expanded.value) return\n focusOption(states.hoveringIndex - 10, 'up')\n break\n case EVENT_CODE.pageDown:\n if (!expanded.value) return\n focusOption(states.hoveringIndex + 10, 'down')\n break\n default:\n isPreventDefault = false\n break\n }\n if (isPreventDefault) {\n e.preventDefault()\n e.stopPropagation()\n }\n }\n\n const getGapWidth = () => {\n if (!selectionRef.value) return 0\n const style = window.getComputedStyle(selectionRef.value)\n return Number.parseFloat(style.gap || '6px')\n }\n\n // computed style\n const tagStyle = computed(() => {\n const gapWidth = getGapWidth()\n const inputSlotWidth = props.filterable ? gapWidth + MINIMUM_INPUT_WIDTH : 0\n const maxWidth =\n collapseItemRef.value && props.maxCollapseTags === 1\n ? states.selectionWidth -\n states.collapseItemWidth -\n gapWidth -\n inputSlotWidth\n : states.selectionWidth - inputSlotWidth\n return { maxWidth: `${maxWidth}px` }\n })\n\n const collapseTagStyle = computed(() => {\n return { maxWidth: `${states.selectionWidth}px` }\n })\n\n const popupScroll = (data: { scrollTop: number; scrollLeft: number }) => {\n emit('popup-scroll', data)\n }\n\n useResizeObserver(selectionRef, resetSelectionWidth)\n useResizeObserver(wrapperRef, updateTooltip)\n useResizeObserver(tagMenuRef, updateTagTooltip)\n useResizeObserver(collapseItemRef, resetCollapseItemWidth)\n\n // #21498\n let stop: (() => void) | undefined\n watch(\n () => dropdownMenuVisible.value,\n (newVal) => {\n if (newVal) {\n stop = useResizeObserver(menuRef, updateTooltip).stop\n } else {\n stop?.()\n stop = undefined\n }\n emit('visible-change', newVal)\n }\n )\n\n onMounted(() => {\n setSelected()\n })\n\n return {\n inputId,\n contentId,\n nsSelect,\n nsInput,\n states,\n isFocused,\n expanded,\n optionsArray,\n hoverOption,\n selectSize,\n filteredOptionsCount,\n updateTooltip,\n updateTagTooltip,\n debouncedOnInputChange,\n onInput,\n deletePrevTag,\n deleteTag,\n deleteSelected,\n handleOptionSelect,\n scrollToOption,\n hasModelValue,\n shouldShowPlaceholder,\n currentPlaceholder,\n mouseEnterEventName,\n needStatusIcon,\n showClearBtn,\n iconComponent,\n iconReverse,\n validateState,\n validateIcon,\n showNewOption,\n updateOptions,\n collapseTagSize,\n setSelected,\n selectDisabled,\n emptyText,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd,\n handleKeydown,\n onOptionCreate,\n onOptionDestroy,\n handleMenuEnter,\n focus,\n blur,\n handleClearClick,\n handleClickOutside,\n handleEsc,\n toggleMenu,\n selectOption,\n getValueKey,\n navigateOptions,\n dropdownMenuVisible,\n showTagList,\n collapseTagList,\n popupScroll,\n getOption,\n\n // computed style\n tagStyle,\n collapseTagStyle,\n\n // DOM ref\n popperRef,\n inputRef,\n tooltipRef,\n tagTooltipRef,\n prefixRef,\n suffixRef,\n selectRef,\n wrapperRef,\n selectionRef,\n scrollbarRef,\n menuRef,\n tagMenuRef,\n collapseItemRef,\n }\n}\n"],"names":["ensureArray","_a"],"mappings":"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