haixunMaster/haixun-backend/web/src/components/Layout.tsx

63 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-06-23 16:55:10 +00:00
import { Outlet } from 'react-router-dom'
2026-06-23 10:10:22 +00:00
import { AuthTicketIcon, SceneDecor } from './AuthDecor'
2026-06-23 16:55:10 +00:00
import { AppSidebar } from './AppSidebar'
2026-06-23 09:54:27 +00:00
import { MobileBottomNav } from './MobileBottomNav'
2026-06-23 16:55:10 +00:00
import { AccountSwitcher } from './AccountSwitcher'
import { MemberMenu } from './MemberMenu'
import { JobMonitor } from './JobMonitor'
import { IslanderCompanion } from './islander/IslanderCompanion'
import { IslanderPageProvider } from '../lib/islander'
import { OnboardingBanner } from './OnboardingBanner'
import { OnboardingRouteGuard } from './OnboardingRouteGuard'
import { OnboardingProvider } from '../onboarding/OnboardingContext'
import { ThreadsAccountProvider } from '../threads/ThreadsAccountContext'
2026-06-23 09:54:27 +00:00
export function Layout() {
return (
2026-06-23 16:55:10 +00:00
<ThreadsAccountProvider>
<OnboardingProvider>
<div className="hx-scene ac-app-shell flex min-h-dvh flex-col">
<SceneDecor />
2026-06-23 10:10:22 +00:00
2026-06-23 16:55:10 +00:00
<div className="ac-workbench relative z-10 flex min-h-0 w-full flex-1">
<AppSidebar />
2026-06-23 09:54:27 +00:00
2026-06-23 16:55:10 +00:00
<div className="ac-workspace-column flex min-w-0 flex-1 flex-col">
<header className="ac-app-chrome">
<div className="ac-app-header-brand lg:hidden">
<AuthTicketIcon className="ac-app-header-icon" />
<div className="min-w-0">
<p className="display-en text-[10px] font-semibold tracking-[0.16em] text-accent uppercase">
Haixun Patrol
</p>
<h1 className="truncate text-lg font-bold leading-snug text-ink"></h1>
2026-06-23 10:10:22 +00:00
</div>
</div>
2026-06-23 16:55:10 +00:00
<div className="ac-app-chrome-spacer hidden min-w-0 flex-1 lg:block" aria-hidden />
<div className="ac-app-header-actions flex shrink-0 items-center gap-2">
<AccountSwitcher />
<MemberMenu />
</div>
</header>
2026-06-23 09:54:27 +00:00
2026-06-23 16:55:10 +00:00
<main className="ac-workspace layout-main min-h-0 min-w-0 flex-1">
<IslanderPageProvider>
<div className="ac-workspace-inner">
<OnboardingBanner />
<OnboardingRouteGuard>
<Outlet />
</OnboardingRouteGuard>
</div>
</IslanderPageProvider>
</main>
2026-06-23 09:54:27 +00:00
</div>
2026-06-23 16:55:10 +00:00
</div>
2026-06-23 09:54:27 +00:00
2026-06-23 16:55:10 +00:00
<MobileBottomNav />
<JobMonitor />
<IslanderCompanion />
</div>
</OnboardingProvider>
</ThreadsAccountProvider>
2026-06-23 09:54:27 +00:00
)
}