diff --git a/docs/features/assistant-workbar/prd.md b/docs/features/assistant-workbar/prd.md index f2d233f4..49f16dc8 100644 --- a/docs/features/assistant-workbar/prd.md +++ b/docs/features/assistant-workbar/prd.md @@ -393,7 +393,7 @@ Renderer 不接收任意系统 PID 控制能力。控制动作引用 Main 签发 当前项目目录的文件浏览与 Git 交互遵循以下规则: -- FR-W1:顶部同一行放置“文件 / Git 工作区”视图切换和右侧刷新;非 Git 目录仍保留刷新。 +- FR-W1:顶部同一行放置“文件 / Git 工作区”视图切换和右侧刷新;非 Git 目录仍显示选中的“文件”入口和刷新,仅隐藏“Git 工作区”。 下一行只提供当前视图的工具:文件视图提供新建文件、新建目录,Git 视图提供分支、Fetch 和更改显示方式, 不在 Git 视图重复目录导航或新建文件操作。操作使用带名称和提示的紧凑图标按钮。 文件视图在根目录不显示孤立的文件夹图标或空路径行;进入子目录后提供“项目目录名 / 子目录” @@ -401,6 +401,7 @@ Renderer 不接收任意系统 PID 控制能力。控制动作引用 Main 签发 长目录名单行省略,完整路径通过提示查看;多级路径在导航内部横向滚动,不撑宽工作栏。 选中目录时在该目录创建,选中文件时在其父目录创建,未选择时在当前浏览目录创建。 无可用目录时隐藏无关操作。 + 文件列表独立纵向滚动;顶部视图切换、刷新、新建操作和子目录路径导航保持可见,不随列表滚走。 - 使用共享 `SegmentedControl` 切换“文件”和“Git 工作区”,默认显示文件; 选择只在当前面板挂载期间保存在内存中,不持久化。未提交更改包含当前项目的全部 Git 更改,不按 AI、用户或其他工具的修改来源筛选。 diff --git a/src/renderer/src/WorkspaceFilesPanel.test.tsx b/src/renderer/src/WorkspaceFilesPanel.test.tsx index c9c86072..bb8b83a4 100644 --- a/src/renderer/src/WorkspaceFilesPanel.test.tsx +++ b/src/renderer/src/WorkspaceFilesPanel.test.tsx @@ -211,6 +211,9 @@ describe('WorkspaceFilesPanel', () => { expect(css).toMatch(/\.workspace-git__toolbar > \.segmented-control\s*\{[^}]*width: max-content;[^}]*border: 0/) expect(css).toMatch(/\.workspace-git__branch-trigger\s*\{[^}]*width: auto;[^}]*height: 32px;[^}]*flex: 0 1 auto;[^}]*text-align: left/) expect(css).toMatch(/\.workspace-files__header\s*\{[^}]*justify-content: space-between/) + expect(css).toMatch(/\.workspace-files__files-view\s*\{[^}]*flex: 1;[^}]*min-height: 0;[^}]*overflow: auto/) + expect(css).toContain('.workspace-files__navigation:has(.workspace-files__list:not([hidden]) .workspace-files__files-view:not([hidden]))') + expect(css).toMatch(/\.workspace-files__header,\s*\.workspace-files__actions,\s*\.workspace-files__breadcrumbs,[^{]*\{\s*flex-shrink: 0/) expect(css).toMatch(/\.workspace-git__branches\s*\{[^}]*width: min\(100%, 360px\);[^}]*border-radius: var\(--radius-control\)/) expect(css).toMatch(/\.workspace-git__branches\s*\{[^}]*position: fixed;[^}]*max-height: calc\(100vh - 32px\);[^}]*overflow: auto/) expect(css).toMatch(/\.workspace-git__branch-list\s*\{[^}]*max-height: 240px;[^}]*overflow: auto/) @@ -535,6 +538,7 @@ describe('WorkspaceFilesPanel', () => { ) await screen.findByText('工作区为空。') + expect(screen.getByRole('button', { name: '文件' })).toHaveAttribute('aria-pressed', 'true') expect(onListDirectory).toHaveBeenCalledOnce() await changeUiLocale('en-US') @@ -705,6 +709,7 @@ describe('WorkspaceFilesPanel', () => { expect(screen.queryByRole('status')).not.toBeInTheDocument() expect(screen.queryByRole('button', { name: 'Git 工作区' })).not.toBeInTheDocument() rerender() + expect(screen.getByRole('button', { name: '文件' })).toHaveAttribute('aria-pressed', 'true') expect(screen.queryByRole('button', { name: 'Git 工作区' })).not.toBeInTheDocument() rerender() fireEvent.click(screen.getByRole('button', { name: 'Git 工作区' })) diff --git a/src/renderer/src/WorkspaceFilesPanel.tsx b/src/renderer/src/WorkspaceFilesPanel.tsx index 7ee66c43..d503ad74 100644 --- a/src/renderer/src/WorkspaceFilesPanel.tsx +++ b/src/renderer/src/WorkspaceFilesPanel.tsx @@ -492,10 +492,10 @@ export function WorkspaceFilesPanel({ } {activeView === 'files' && root &&
@@ -555,7 +555,7 @@ export function WorkspaceFilesPanel({
} -