Sidebar redesign, dropdown fixes, and soft-delete UI #57

Merged
uz1mani merged 50 commits from staging into main 2026-03-19 00:08:16 +00:00
14 changed files with 1491 additions and 312 deletions
Showing only changes of commit 7ae5facd0c - Show all commits

View File

@@ -112,9 +112,7 @@ function LayoutInner({ children }: { children: React.ReactNode }) {
return <LoadingOverlay logoSrc="/pulse_icon_no_margins.png" title="Pulse" portal={false} /> return <LoadingOverlay logoSrc="/pulse_icon_no_margins.png" title="Pulse" portal={false} />
} }
return ( const headerElement = (
<div className="flex flex-col min-h-screen">
{auth.user && <OfflineBanner isOnline={isOnline} />}
<Header <Header
auth={auth} auth={auth}
LinkComponent={Link} LinkComponent={Link}
@@ -148,12 +146,24 @@ function LayoutInner({ children }: { children: React.ReactNode }) {
</> </>
} }
/> />
{isAuthenticated ? ( )
// Authenticated: sidebar layout — children include DashboardShell
<>{children}</> if (isAuthenticated) {
) : ( // Dashboard layout: header pinned, sidebar + content fill remaining viewport
// Public: standard content with footer return (
<> <div className="flex flex-col h-screen overflow-hidden">
{auth.user && <OfflineBanner isOnline={isOnline} />}
<div className="shrink-0">{headerElement}</div>
{children}
<SettingsModalWrapper />
</div>
)
}
// Public/marketing layout: floating header, scrollable page, footer
return (
<div className="flex flex-col min-h-screen">
{headerElement}
<main className="flex-1 pb-8 pt-24"> <main className="flex-1 pb-8 pt-24">
{children} {children}
</main> </main>
@@ -162,15 +172,6 @@ function LayoutInner({ children }: { children: React.ReactNode }) {
appName="Pulse" appName="Pulse"
isAuthenticated={false} isAuthenticated={false}
/> />
</>
)}
{isAuthenticated && (
<Footer
LinkComponent={Link}
appName="Pulse"
isAuthenticated={true}
/>
)}
<SettingsModalWrapper /> <SettingsModalWrapper />
</div> </div>
) )

View File

@@ -13,9 +13,9 @@ export default function DashboardShell({
const { mobileOpen, closeMobile } = useSidebar() const { mobileOpen, closeMobile } = useSidebar()
return ( return (
<div className="flex flex-1"> <div className="flex flex-1 overflow-hidden">
<Sidebar siteId={siteId} mobileOpen={mobileOpen} onMobileClose={closeMobile} /> <Sidebar siteId={siteId} mobileOpen={mobileOpen} onMobileClose={closeMobile} />
<main className="flex-1 min-w-0 pb-8"> <main className="flex-1 min-w-0 overflow-y-auto">
{children} {children}
</main> </main>
</div> </div>

View File

@@ -319,7 +319,7 @@ export default function Sidebar({
{/* Desktop sidebar */} {/* Desktop sidebar */}
<aside <aside
className={`hidden lg:flex flex-col shrink-0 sticky top-0 h-screen border-r border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 transition-[width] duration-200 overflow-hidden ${ className={`hidden lg:flex flex-col shrink-0 border-r border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 transition-[width] duration-200 overflow-hidden ${
collapsed ? 'w-[68px]' : 'w-60' collapsed ? 'w-[68px]' : 'w-60'
}`} }`}
> >