diff --git a/web/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue b/web/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue index 80de0d7..16f3e2d 100644 --- a/web/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue +++ b/web/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue @@ -3,7 +3,21 @@ import type { Component } from 'vue'; import { computed } from 'vue'; -import { IconDefault, IconifyIcon } from '@vben-core/icons'; +import { + AlignEndHorizontal, + AlignHorizontalSpaceAround, + AlignStartVertical, + Bot, + BookOpen, + IconDefault, + IconifyIcon, + LayoutGrid, + Mail, + Megaphone, + UserRound, + Users, + Workflow, +} from '@vben-core/icons'; import { isFunction, isHttpUrl, @@ -17,10 +31,30 @@ const props = defineProps<{ icon?: Component | Function | string; }>(); +const localIconMap: Record = { + 'carbon:agent-detached': Bot, + 'carbon:align-box-middle-right': AlignEndHorizontal, + 'carbon:align-vertical-top': AlignStartVertical, + 'carbon:arrange': LayoutGrid, + 'carbon:arrange-horizontal': AlignHorizontalSpaceAround, + 'carbon:email': Mail, + 'carbon:user-multiple': Users, + 'lucide:bot': Bot, + 'lucide:library-big': BookOpen, + 'lucide:megaphone': Megaphone, + 'lucide:square-user': UserRound, + 'lucide:workflow': Workflow, +}; + const isRemoteIcon = computed(() => { return isString(props.icon) && isHttpUrl(props.icon); }); +const localIcon = computed(() => { + if (!isString(props.icon)) return; + return localIconMap[props.icon.replace(/^i-/, '')]; +}); + const isComponent = computed(() => { const { icon } = props; return !isString(icon) && (isObject(icon) || isFunction(icon)); @@ -29,6 +63,7 @@ const isComponent = computed(() => {