From 248b487a43760483258df9d2cdcae024fd5323ed Mon Sep 17 00:00:00 2001 From: hanafish <1106510024@qq.com> Date: Fri, 24 Jul 2026 23:32:40 +0800 Subject: [PATCH] refactor(ui): unify dropdown action rows --- .../DropdownActionRows.md | 45 +++++ src/components/Dropdown/DropdownItem.test.ts | 60 ++++++ src/components/Dropdown/DropdownItem.tsx | 68 ++++++- .../components/SessionHeaderActionsMenu.tsx | 185 ++++++++++-------- .../WorkManagement/GitHubWorkItemControls.tsx | 23 ++- .../WorkManagement/GitHubWorkItemList.tsx | 2 +- .../shared/StatusBar/GitSyncStatusMenu.tsx | 78 ++++---- .../shared/TerminalNewSessionSplitButton.tsx | 36 ++-- 8 files changed, 342 insertions(+), 155 deletions(-) create mode 100644 docs/frontend-ui-audit-2026-07-24/DropdownActionRows.md create mode 100644 src/components/Dropdown/DropdownItem.test.ts diff --git a/docs/frontend-ui-audit-2026-07-24/DropdownActionRows.md b/docs/frontend-ui-audit-2026-07-24/DropdownActionRows.md new file mode 100644 index 000000000..0740b59ea --- /dev/null +++ b/docs/frontend-ui-audit-2026-07-24/DropdownActionRows.md @@ -0,0 +1,45 @@ +# Frontend UI Audit — Dropdown Action Rows + +**Files:** `src/components/Dropdown/DropdownItem.tsx`, `src/engines/ChatPanel/components/SessionHeaderActionsMenu.tsx`, `src/modules/MainApp/WorkManagement/GitHubWorkItemControls.tsx`, `src/modules/MainApp/WorkManagement/GitHubWorkItemList.tsx`, `src/modules/WorkStation/shared/StatusBar/GitSyncStatusMenu.tsx`, `src/modules/WorkStation/shared/TerminalNewSessionSplitButton.tsx` +**Date:** 2026-07-24 + +## D1 — Raw HTML vs Design System + +| Line | Element | Verdict | Reason | Suggested change | +| --- | --- | --- | --- | --- | +| Four action-menu callers | raw ` + {t("chat.findInChat")} + )} - - + {moveToWorkstation + ? t("chat.moveToWorkstation", { + defaultValue: "Move to My Workstation", + }) + : t("chat.moveToChatPanel", { + defaultValue: "Move to Chat Panel", + })} + {showTranscriptActions && ( <> - - + {t("chat.rawTranscript.menuItem", { + defaultValue: "View raw transcript", + })} + )} - + {t("chat.linkWorkItem.menuItem")} + {showCloudShareSettings && ( - + {t("navigation:cloud.share.menuItem")} + )} {showTranscriptActions && ( <> - + {t("chat.importExport.exportAction")} +
setMenuVisible(false), []); const droplist = (
- - + {openInMyStationLabel} +
); diff --git a/src/modules/MainApp/WorkManagement/GitHubWorkItemList.tsx b/src/modules/MainApp/WorkManagement/GitHubWorkItemList.tsx index 31d7efb14..34b0bc681 100644 --- a/src/modules/MainApp/WorkManagement/GitHubWorkItemList.tsx +++ b/src/modules/MainApp/WorkManagement/GitHubWorkItemList.tsx @@ -7,7 +7,7 @@ import { RefreshCw, SquarePen, } from "lucide-react"; -import type { ReactNode } from "react"; +import React, { type ReactNode } from "react"; import Button from "@src/components/Button"; import { SearchInput } from "@src/components/SearchInput"; diff --git a/src/modules/WorkStation/shared/StatusBar/GitSyncStatusMenu.tsx b/src/modules/WorkStation/shared/StatusBar/GitSyncStatusMenu.tsx index 5522e483d..757d56748 100644 --- a/src/modules/WorkStation/shared/StatusBar/GitSyncStatusMenu.tsx +++ b/src/modules/WorkStation/shared/StatusBar/GitSyncStatusMenu.tsx @@ -15,6 +15,7 @@ import React, { memo, useCallback, useMemo, useState } from "react"; import { createPortal } from "react-dom"; import { useTranslation } from "react-i18next"; +import { DropdownItem } from "@src/components/Dropdown/exports"; import { DROPDOWN_CLASSES, DROPDOWN_ITEM, @@ -22,7 +23,6 @@ import { DROPDOWN_WIDTHS, } from "@src/components/Dropdown/tokens"; import { useDropdownEngine } from "@src/hooks/dropdown"; -import { classNames } from "@src/util/ui/classNames"; import { StatusBarButton } from "./StatusBarBase"; import { StatusBarTooltip } from "./StatusBarTooltip"; @@ -230,69 +230,65 @@ export const GitSyncStatusMenu: React.FC = memo( const disabled = isSyncBusy || !canSyncDisplayedRepo || action.disabled; return ( - + {action.label} + ); })} ) : ( <> {suggestedAction && SuggestedActionIcon && ( - + )}
- + {t("common.more")} + )}
diff --git a/src/modules/WorkStation/shared/TerminalNewSessionSplitButton.tsx b/src/modules/WorkStation/shared/TerminalNewSessionSplitButton.tsx index b9f8c8e2f..e9c77e183 100644 --- a/src/modules/WorkStation/shared/TerminalNewSessionSplitButton.tsx +++ b/src/modules/WorkStation/shared/TerminalNewSessionSplitButton.tsx @@ -4,7 +4,7 @@ import { createPortal } from "react-dom"; import { useTranslation } from "react-i18next"; import Button from "@src/components/Button"; -import { DropdownPanel } from "@src/components/Dropdown/exports"; +import { DropdownItem, DropdownPanel } from "@src/components/Dropdown/exports"; import { DROPDOWN_CLASSES, DROPDOWN_ITEM, @@ -93,19 +93,22 @@ const TerminalNewSessionSplitButtonComponent: React.FC< {shellProfiles .filter((profile) => profile.category === "shell") .map((profile) => ( - + {profile.name} + ))} {shellProfiles.some((profile) => profile.category === "repl") && ( <> @@ -113,14 +116,15 @@ const TerminalNewSessionSplitButtonComponent: React.FC< {shellProfiles .filter((profile) => profile.category === "repl") .map((profile) => ( - + {profile.name} + ))} )}