|
|
|
@ -1,7 +1,7 @@ |
|
|
|
<script setup lang="ts"> |
|
|
|
import type { VNode } from 'vue'; |
|
|
|
|
|
|
|
import { computed, ref, watch, watchEffect } from 'vue'; |
|
|
|
import { computed, ref, useAttrs, watch, watchEffect } from 'vue'; |
|
|
|
|
|
|
|
import { usePagination } from '@vben/hooks'; |
|
|
|
import { EmptyIcon, Grip, listIcons } from '@vben/icons'; |
|
|
|
@ -22,8 +22,9 @@ import { |
|
|
|
VbenIconButton, |
|
|
|
VbenPopover, |
|
|
|
} from '@vben-core/shadcn-ui'; |
|
|
|
import { isFunction } from '@vben-core/shared/utils'; |
|
|
|
|
|
|
|
import { refDebounced, watchDebounced } from '@vueuse/core'; |
|
|
|
import { objectOmit, refDebounced, watchDebounced } from '@vueuse/core'; |
|
|
|
|
|
|
|
import { fetchIconsData } from './icons'; |
|
|
|
|
|
|
|
@ -64,6 +65,8 @@ const emit = defineEmits<{ |
|
|
|
change: [string]; |
|
|
|
}>(); |
|
|
|
|
|
|
|
const attrs = useAttrs(); |
|
|
|
|
|
|
|
const modelValue = defineModel({ default: '', type: String }); |
|
|
|
|
|
|
|
const visible = ref(false); |
|
|
|
@ -167,7 +170,14 @@ const searchInputProps = computed(() => { |
|
|
|
|
|
|
|
function updateCurrentSelect(v: string) { |
|
|
|
currentSelect.value = v; |
|
|
|
const eventKey = `onUpdate:${props.modelValueProp}`; |
|
|
|
if (attrs[eventKey] && isFunction(attrs[eventKey])) { |
|
|
|
attrs[eventKey](v); |
|
|
|
} |
|
|
|
} |
|
|
|
const getBindAttrs = computed(() => { |
|
|
|
return objectOmit(attrs, [`onUpdate:${props.modelValueProp}`]); |
|
|
|
}); |
|
|
|
|
|
|
|
defineExpose({ toggleOpenState, open, close }); |
|
|
|
</script> |
|
|
|
@ -189,7 +199,7 @@ defineExpose({ toggleOpenState, open, close }); |
|
|
|
:aria-label="$t('ui.iconPicker.placeholder')" |
|
|
|
aria-expanded="visible" |
|
|
|
:[`onUpdate:${modelValueProp}`]="updateCurrentSelect" |
|
|
|
v-bind="$attrs" |
|
|
|
v-bind="getBindAttrs" |
|
|
|
> |
|
|
|
<template #[iconSlot]> |
|
|
|
<VbenIcon |
|
|
|
|