@@ -5,7 +5,7 @@ import type { AppConfig } from '@nuxt/schema'
55import theme from '#build/ui/input-menu'
66import type { UseComponentIconsProps } from '../composables/useComponentIcons'
77import type { AvatarProps, ChipProps, InputProps } from '../types'
8-import type { AcceptableValue, ArrayOrNested, GetItemKeys, GetModelValue, GetModelValueEmits, NestedItem, EmitsToProps, ComponentConfig } from '../types/utils'
8+import type { AcceptableValue, ArrayOrNested, GetItemKeys, GetItemValue, GetModelValue, GetModelValueEmits, NestedItem, EmitsToProps, ComponentConfig } from '../types/utils'
991010type InputMenu = ComponentConfig<typeof theme, AppConfig, 'inputMenu'>
1111@@ -183,7 +183,7 @@ import { useComponentIcons } from '../composables/useComponentIcons'
183183import { useFormField } from '../composables/useFormField'
184184import { useLocale } from '../composables/useLocale'
185185import { usePortal } from '../composables/usePortal'
186-import { compare, get, isArrayOfArray } from '../utils'
186+import { compare, get, getDisplayValue, isArrayOfArray } from '../utils'
187187import { tv } from '../utils/tv'
188188import UIcon from './Icon.vue'
189189import UAvatar from './Avatar.vue'
@@ -233,9 +233,11 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.inputMenu ||
233233 buttonGroup: orientation.value
234234}))
235235236-function displayValue(value: T): string {
237- const item = items.value.find(item => compare(typeof item === 'object' && props.valueKey ? get(item as Record<string, any>, props.valueKey as string) : item, value))
238- return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
236+function displayValue(value: GetItemValue<T, VK>): string {
237+ return getDisplayValue(items.value, value, {
238+ labelKey: props.labelKey,
239+ valueKey: props.valueKey
240+ }) ?? ''
239241}
240242241243const groups = computed<InputMenuItem[][]>(() =>
@@ -246,7 +248,7 @@ const groups = computed<InputMenuItem[][]>(() =>
246248 : []
247249)
248250// eslint-disable-next-line vue/no-dupe-keys
249-const items = computed(() => groups.value.flatMap(group => group))
251+const items = computed(() => groups.value.flatMap(group => group) as T[])
250252251253const filteredGroups = computed(() => {
252254 if (props.ignoreFilter || !searchTerm.value) {
@@ -441,7 +443,7 @@ defineExpose({
441443<TagsInputItem v-for="(item, index) in tags" :key="index" :value="item" :class="ui.tagsItem({ class: [props.ui?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })">
442444<TagsInputItemText :class="ui.tagsItemText({ class: [props.ui?.tagsItemText, isInputItem(item) && item.ui?.tagsItemText] })">
443445<slot name="tags-item-text" :item="(item as NestedItem<T>)" :index="index">
444- {{ displayValue(item as T) ?? item }}
446+ {{ displayValue(item as GetItemValue<T, VK>) }}
445447</slot>
446448</TagsInputItemText>
447449