File size: 2,274 Bytes
a318da0
 
 
 
 
2c2d0e1
a318da0
519f85d
a318da0
 
 
d77c01e
954dc6b
 
d7f06c8
 
a318da0
 
 
 
 
954dc6b
 
e73f178
2dc6fe4
e73f178
519f85d
e73f178
 
2dc6fe4
2c2d0e1
954dc6b
 
 
 
 
a318da0
 
a6e9d9d
 
 
 
 
 
2c2d0e1
a318da0
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"use client";

import { usePathname } from "next/navigation";
import type { ReactNode } from "react";

import { PresenceProvider } from "@/components/presence-provider";
import { TopNav } from "@/components/top-nav";
import { useBranding } from "@/lib/branding";

export function AppShell({ children }: { children: ReactNode }) {
  const pathname = usePathname();
  const branding = useBranding({ applyDocument: true, documentKey: pathname });
  const normalizedPath = pathname.replace(/\/+$/, "") || "/";
  const isLoginPage = normalizedPath === "/login";
  // 批量生图页是画图页的副本,布局沿用画图页那套(浮动导航 + 无外框卡片)。
  const isImagePage = normalizedPath === "/image" || normalizedPath === "/batch";

  if (isLoginPage) {
    return <main className="h-dvh overflow-hidden text-stone-900">{children}</main>;
  }

  if (isImagePage) {
    return (
      <main className="app-page-background min-h-screen overflow-x-hidden px-4 pt-0 pb-2 text-stone-900 sm:px-6 lg:px-8">
        <div className="fixed inset-x-0 top-0 z-40 bg-transparent px-4 pt-[env(safe-area-inset-top)] pb-2 sm:px-6 sm:pt-2 lg:px-8">
          <div className="mx-auto max-w-[1440px]">
            <TopNav branding={branding} />
          </div>
        </div>
        <div className="mx-auto box-border flex min-h-screen max-w-[1440px] flex-col gap-2 pt-[calc(env(safe-area-inset-top)+7.75rem)] sm:gap-5 lg:pt-[5.25rem]">
          <PresenceProvider>{children}</PresenceProvider>
        </div>
      </main>
    );
  }

  return (
    <main className="min-h-screen overflow-x-hidden bg-[radial-gradient(circle_at_top_left,_rgba(255,255,255,0.92),_rgba(245,239,231,0.96)_42%,_rgba(240,235,227,0.99)_100%)] px-4 pt-0 pb-2 text-stone-900 sm:px-6 sm:pt-2 lg:px-8">
      <div className="fixed inset-x-0 top-0 z-40 bg-transparent px-4 pt-[env(safe-area-inset-top)] pb-2 sm:px-6 sm:pt-2 lg:px-8">
        <div className="mx-auto max-w-[1440px]">
          <TopNav branding={branding} />
        </div>
      </div>
      <div className="mx-auto box-border flex min-h-screen max-w-[1440px] flex-col gap-2 pt-[calc(env(safe-area-inset-top)+7.75rem)] sm:gap-5 lg:pt-[5.25rem]">
        <PresenceProvider>{children}</PresenceProvider>
      </div>
    </main>
  );
}