From 95acfd2b3b46de3c60077dc4b830e5e3702f4a73 Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Tue, 17 Mar 2026 09:26:39 +0800 Subject: [PATCH] refactor(DomainManager): improve expand/collapse UI with card style and chevron toggles - Collapsed state: card style, ChevronDown button, no hover effect - Expanded state: card style, ChevronUp in header - Selected domain: 3px left indicator bar with primary color - Remove bottom toggle areas - Add expand/collapse translation keys --- .../DomainManager/DomainManager.tsx | 128 +++++++----------- src/renderer/src/locales/en-US/domain.json | 6 +- src/renderer/src/locales/ja-JP/domain.json | 6 +- src/renderer/src/locales/zh-CN/domain.json | 6 +- 4 files changed, 61 insertions(+), 85 deletions(-) diff --git a/src/renderer/src/components/DomainManager/DomainManager.tsx b/src/renderer/src/components/DomainManager/DomainManager.tsx index 34b18c8..515d8ae 100644 --- a/src/renderer/src/components/DomainManager/DomainManager.tsx +++ b/src/renderer/src/components/DomainManager/DomainManager.tsx @@ -2,19 +2,14 @@ * DomainManager Component * Main container for domain management * Supports collapsed/expanded view - * Expand/collapse triggered by clicking bottom area + * Expand/collapse triggered by clicking header chevron */ import React from "react"; -import { Spin, Space } from "antd"; +import { Spin } from "antd"; import { Button, Tooltip, Avatar, Empty } from "@lobehub/ui"; import { useTranslation } from "react-i18next"; -import { - Plus, - Cloud, - ChevronUp, - ChevronDown, -} from "lucide-react"; +import { Plus, Cloud, ChevronUp, ChevronDown } from "lucide-react"; import { createStyles } from "antd-style"; import { useDomainStore, useUIStore } from "@renderer/stores"; import DomainList from "./DomainList"; @@ -25,13 +20,17 @@ const useStyles = createStyles(({ token, css }) => ({ height: 100%; display: flex; flex-direction: column; - background: ${token.colorBgContainer}; + background: ${token.colorFillSecondary}; + border-radius: ${token.borderRadiusLG}px; + padding: ${token.paddingSM}px; `, collapsedContainer: css` height: 100%; display: flex; flex-direction: column; - background: ${token.colorBgContainer}; + background: ${token.colorFillSecondary}; + border-radius: ${token.borderRadiusLG}px; + padding: ${token.paddingSM}px; position: relative; `, header: css` @@ -70,10 +69,6 @@ const useStyles = createStyles(({ token, css }) => ({ padding: ${token.paddingSM}px ${token.paddingMD}px; cursor: pointer; transition: background 0.2s; - - &:hover { - background: ${token.colorBgTextHover}; - } `, collapsedInfo: css` display: flex; @@ -105,31 +100,6 @@ const useStyles = createStyles(({ token, css }) => ({ font-size: ${token.fontSizeSM}px; padding: ${token.paddingSM}px ${token.paddingMD}px; `, - // Bottom toggle icon - minimal style - bottomToggleIcon: css` - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 20px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - color: ${token.colorTextTertiary}; - font-size: 12px; - z-index: 10; - opacity: 0.6; - transition: all 0.2s; - - &:hover { - opacity: 1; - background: ${token.colorFillTertiary}; - } - `, - bottomToggleVisible: css` - opacity: 0.6; - `, })); interface DomainManagerProps { @@ -147,7 +117,6 @@ const DomainManager: React.FC = ({ const { domainIconColors } = useUIStore(); const [formOpen, setFormOpen] = React.useState(false); const [editingDomain, setEditingDomain] = React.useState(null); - const [isHoveringToggle, setIsHoveringToggle] = React.useState(false); React.useEffect(() => { loadDomains(); @@ -177,7 +146,7 @@ const DomainManager: React.FC = ({ if (collapsed) { return (
-
+
} @@ -203,27 +172,30 @@ const DomainManager: React.FC = ({ )}
- -
- - {/* Bottom toggle icon */} -
setIsHoveringToggle(true)} - onMouseLeave={() => setIsHoveringToggle(false)} - > - +
+ +
= ({ // Expanded view - full list return ( -
+

{t("domainManagement")}

- + +
@@ -252,25 +235,12 @@ const DomainManager: React.FC = ({
) : domains.length === 0 ? ( - - + ) : ( )}
- {/* Bottom toggle icon */} -
setIsHoveringToggle(true)} - onMouseLeave={() => setIsHoveringToggle(false)} - > - -
-