feat: add sidebar collapse, category/tag filtering, and workspace CRUD (Phase D)

- Sidebar collapse/expand toggle with icon-only rail mode (persisted)
- Sidebar category/tag clicks navigate to /trees with URL params
- TreeLibraryPage syncs filters from URL search params bidirectionally
- Workspace create modal with icon picker and auto-slug generation
- TopBar logo adapts to collapsed sidebar state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Michael Chihlas
2026-02-15 05:05:25 -05:00
parent 09cd05e143
commit f334ba861b
9 changed files with 301 additions and 40 deletions

View File

@@ -14,6 +14,7 @@ export function TopBar() {
const { user, logout } = useAuthStore()
const { effectiveRole, isSuperAdmin } = usePermissions()
const activeWorkspace = useWorkspaceStore(s => s.getActiveWorkspace())
const sidebarCollapsed = useWorkspaceStore(s => s.sidebarCollapsed)
const labels = getWorkspaceLabels(activeWorkspace?.slug)
const [userMenuOpen, setUserMenuOpen] = useState(false)
@@ -57,14 +58,20 @@ export function TopBar() {
<>
<header className="topbar flex items-center gap-4 border-b border-border bg-background px-4">
{/* Logo area */}
<Link to="/" className="flex items-center gap-2.5 pr-4" style={{ width: 'calc(260px - 40px)' }}>
<div className="flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-brand">
<Link
to="/"
className="flex items-center gap-2.5 pr-4 transition-all duration-200"
style={{ width: sidebarCollapsed ? '32px' : 'calc(260px - 40px)' }}
>
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-brand">
<BrandLogo size="sm" className="h-4 w-4" />
</div>
<span className="text-sm font-heading font-bold tracking-tight">
<span className="text-foreground">Resolution</span>
<span className="text-gradient-brand">Flow</span>
</span>
{!sidebarCollapsed && (
<span className="text-sm font-heading font-bold tracking-tight">
<span className="text-foreground">Resolution</span>
<span className="text-gradient-brand">Flow</span>
</span>
)}
</Link>
{/* Search trigger */}