element-plus
Version:
A Component Library for Vue 3
1 lines • 54.3 kB
Source Map (JSON)
{"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 useSlots,\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 slots = useSlots()\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 ||\n !isRemoteSearchEmpty.value ||\n (props.remote && !!slots.empty)) &&\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 states.menuVisibleOnFocus = false\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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