From 0b376c234f0d6f8f803cf72ecea651b8d880e2a8 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Sun, 10 May 2026 09:18:04 +0800 Subject: [PATCH] feat(ui): add connection color tinting --- src/components/layout/AppTabBar.vue | 21 +++++++++++++++++---- src/components/layout/EditorToolbar.vue | 10 ++++++++++ src/components/sidebar/TreeItem.vue | 13 ++++++++++++- src/lib/color.ts | 18 ++++++++++++++++++ 4 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 src/lib/color.ts diff --git a/src/components/layout/AppTabBar.vue b/src/components/layout/AppTabBar.vue index 7f769cccf..ff9f0c98e 100644 --- a/src/components/layout/AppTabBar.vue +++ b/src/components/layout/AppTabBar.vue @@ -12,7 +12,9 @@ import { import { Tooltip, TooltipTrigger, TooltipContent } from "@/components/ui/tooltip"; import { useQueryStore } from "@/stores/queryStore"; import { useTabScroll } from "@/composables/useTabScroll"; -import { tabDisplayTitle, tabTooltipLines } from "@/lib/tabPresentation"; +import { connectionColor, tabDisplayTitle, tabTooltipLines } from "@/lib/tabPresentation"; +import { hexToRgba } from "@/lib/color"; +import type { QueryTab } from "@/types/database"; const { t } = useI18n(); const queryStore = useQueryStore(); @@ -41,6 +43,19 @@ watch( }); }, ); + +function tabColorStyle(tab: QueryTab) { + const color = connectionColor(tab.connectionId); + const isActive = tab.id === queryStore.activeTabId; + if (!color) { + return isActive ? { boxShadow: "0 1px 0 0 var(--color-background)" } : undefined; + } + + return { + backgroundColor: hexToRgba(color, isActive ? 0.16 : 0.07), + boxShadow: isActive ? `inset 0 -2px 0 ${color}` : undefined, + }; +}