@@ -181,6 +187,7 @@ import { useI18n } from 'vue-i18n'
import { Plus } from '@element-plus/icons-vue'
import AgentPickerDialog from '@/components/common/AgentPickerDialog.vue'
import DropdownMenu, { type DropdownMenuItem } from '@/components/common/DropdownMenu.vue'
+import McTooltip from '@/components/common/McTooltip.vue'
import { conversationApi } from '@/api/index'
import { channelIconUrl } from '@/utils/channelSource'
import { mcToast } from '@/composables/useMcToast'
diff --git a/mateclaw-ui/src/components/common/McTooltip.vue b/mateclaw-ui/src/components/common/McTooltip.vue
new file mode 100644
index 00000000..7f317343
--- /dev/null
+++ b/mateclaw-ui/src/components/common/McTooltip.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mateclaw-ui/src/views/ChatConsole.vue b/mateclaw-ui/src/views/ChatConsole.vue
index 3e8a39e1..df6cf904 100644
--- a/mateclaw-ui/src/views/ChatConsole.vue
+++ b/mateclaw-ui/src/views/ChatConsole.vue
@@ -1978,6 +1978,8 @@ function handleCodeCopy(e: MouseEvent) {
}
.agent-badge-icon {
+ display: flex;
+ align-items: center;
font-size: 14px;
}
diff --git a/mateclaw-ui/src/views/layout/MainLayout.vue b/mateclaw-ui/src/views/layout/MainLayout.vue
index dda9d257..05d1fc04 100644
--- a/mateclaw-ui/src/views/layout/MainLayout.vue
+++ b/mateclaw-ui/src/views/layout/MainLayout.vue
@@ -41,32 +41,38 @@
{{ group.label }}
-
-
- {{ item.label }}
-
-
-
+
+
+ {{ item.label }}
+
+
+
+
@@ -196,6 +202,7 @@ import OnboardingWizard from '@/views/Onboarding/OnboardingWizard.vue'
import DoctorDrawer from '@/views/Doctor/DoctorDrawer.vue'
import WorkspaceSwitcher from '@/components/workspace/WorkspaceSwitcher.vue'
import NavBadge from '@/components/common/NavBadge.vue'
+import McTooltip from '@/components/common/McTooltip.vue'
import { useNotificationCenter } from '@/composables/useNotificationCenter'
import { useWorkspaceStore } from '@/stores/useWorkspaceStore'
import { applyLocale, currentLocale, type AppLocale } from '@/i18n'
@@ -746,6 +753,14 @@ watch(() => workspaceStore.currentWorkspaceId, () => {
/* Active indicator bar removed — active state uses bg color + font weight only */
+/* Collapsed rail: the label is hidden, so center the lone icon on the
+ sidebar's vertical axis instead of leaving it left-aligned by the
+ nav-item's horizontal padding. */
+.sidebar.collapsed .nav-item {
+ justify-content: center;
+ gap: 0;
+}
+
.nav-icon { display: flex; align-items: center; flex-shrink: 0; }
.nav-label { overflow: hidden; text-overflow: ellipsis; }