feat: add plugin marketplace renderer

This commit is contained in:
2026-08-28 18:41:23 +08:00
parent 8b6824a8ba
commit 97c9ad1aad
27 changed files with 1585 additions and 23 deletions

View File

@@ -39,6 +39,8 @@ export function MainLayout() {
const isChatWorkspace = location.pathname === '/chat';
const isInitializationSafeRoute = location.pathname === '/project-config'
|| location.pathname === '/project-plugins'
|| location.pathname === '/plugin-marketplace'
|| location.pathname === '/my-plugins'
|| !isProgrammingModule;
const handleSidebarPeekChange = useCallback((open: boolean, source: SidebarPeekSource) => {

View File

@@ -13,6 +13,8 @@ import {
LogOut,
Plus,
Puzzle,
Library,
Store,
Settings as SettingsIcon,
UserCircle2,
} from 'lucide-react';
@@ -586,6 +588,38 @@ export function Sidebar({ workspaceLayout = false, sidebarPeekOpen = false, onSi
<Plus className="h-4 w-4 shrink-0 text-brand" />
{!sidebarCollapsed && '新建项目'}
</button>
<div className="mt-3 grid gap-1">
<button
type="button"
data-testid="sidebar-nav-plugin-marketplace"
aria-current={location.pathname === '/plugin-marketplace' ? 'page' : undefined}
aria-label="插件中心"
onClick={() => navigate('/plugin-marketplace')}
className={cn(
'motion-press flex min-h-10 w-full items-center gap-2 rounded-lg px-2 py-2 text-left text-sm font-medium transition-colors duration-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/35',
location.pathname === '/plugin-marketplace' ? 'bg-brand-selected text-foreground' : 'text-foreground hover:bg-surface-subtle',
sidebarCollapsed && 'justify-center px-0',
)}
>
<Store className="h-4 w-4 shrink-0 text-brand" />
{!sidebarCollapsed ? <span>插件中心</span> : null}
</button>
<button
type="button"
data-testid="sidebar-nav-my-plugins"
aria-current={location.pathname === '/my-plugins' ? 'page' : undefined}
aria-label="我的插件"
onClick={() => navigate('/my-plugins')}
className={cn(
'motion-press flex min-h-10 w-full items-center gap-2 rounded-lg px-2 py-2 text-left text-sm font-medium transition-colors duration-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand/35',
location.pathname === '/my-plugins' ? 'bg-brand-selected text-foreground' : 'text-foreground hover:bg-surface-subtle',
sidebarCollapsed && 'justify-center px-0',
)}
>
<Library className="h-4 w-4 shrink-0 text-brand" />
{!sidebarCollapsed ? <span>我的插件</span> : null}
</button>
</div>
<div className="mt-3">
<button
type="button"