From a45d43f5f7bf2674cfd82d8d54dd9f431830f650 Mon Sep 17 00:00:00 2001 From: Codex Bot Date: Sun, 1 Nov 2026 20:40:01 +0800 Subject: [PATCH] fix(auth): separate account page from workspace navigation --- .../src/components/GuidanceShell.tsx | 15 +++++++++++++++ .../waterfall-wiki/src/components/ThemeToggle.tsx | 2 +- apps/waterfall-wiki/src/pages/account.tsx | 2 +- apps/waterfall-wiki/src/styles/brand.css | 4 ++-- .../waterfall-wiki/src/styles/guidance.module.css | 11 +++++++++++ .../waterfall-wiki/tests/guidance-workspace-ui.ts | 9 ++++++++- 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/apps/waterfall-wiki/src/components/GuidanceShell.tsx b/apps/waterfall-wiki/src/components/GuidanceShell.tsx index 858db64..7a6fe50 100644 --- a/apps/waterfall-wiki/src/components/GuidanceShell.tsx +++ b/apps/waterfall-wiki/src/components/GuidanceShell.tsx @@ -48,9 +48,11 @@ export const useGuidanceAccount = () => useContext(AccountContext); export default function GuidanceShell({ children, title = "探索文档", + standalone = false, }: { children: ReactNode; title?: string; + standalone?: boolean; }) { const router = useRouter(); const dialog = useRef(null); @@ -187,6 +189,19 @@ export default function GuidanceShell({ ); } + if (standalone) return ( + +
+ {`${title} · 啡跃`} + 跳到正文 +
+ +
返回首页
+
+
{children}
+
+
+ ); return (
diff --git a/apps/waterfall-wiki/src/components/ThemeToggle.tsx b/apps/waterfall-wiki/src/components/ThemeToggle.tsx index 6270c2e..7476923 100644 --- a/apps/waterfall-wiki/src/components/ThemeToggle.tsx +++ b/apps/waterfall-wiki/src/components/ThemeToggle.tsx @@ -3,5 +3,5 @@ export function ThemeToggle() { const [dark, setDark] = useState(false); const [ready, setReady] = useState(false); useEffect(() => { const sync = () => setDark(document.documentElement.dataset.mode === 'dark'); sync(); setReady(true); window.addEventListener('endoleap-theme', sync); return () => window.removeEventListener('endoleap-theme', sync); }, []); - return ; + return ; } diff --git a/apps/waterfall-wiki/src/pages/account.tsx b/apps/waterfall-wiki/src/pages/account.tsx index de71eab..9113181 100644 --- a/apps/waterfall-wiki/src/pages/account.tsx +++ b/apps/waterfall-wiki/src/pages/account.tsx @@ -37,7 +37,7 @@ function localNext(value: string | string[] | undefined) { } export default function AccountPage() { return ( - + ); diff --git a/apps/waterfall-wiki/src/styles/brand.css b/apps/waterfall-wiki/src/styles/brand.css index dd892b3..3ef9d42 100644 --- a/apps/waterfall-wiki/src/styles/brand.css +++ b/apps/waterfall-wiki/src/styles/brand.css @@ -8,11 +8,11 @@ body{margin:0} [data-theme$="-dark"] .endoleap-mark-dark{display:block!important} .endoleap-wordmark{display:flex!important;flex-direction:column;font-size:17px!important;color:var(--foreground-strong)!important;letter-spacing:.02em!important;margin:0!important;gap:3px} .endoleap-wordmark small{display:block;font-size:9px;font-weight:500;letter-spacing:.08em;color:var(--muted-foreground)} -button.endoleap-theme-toggle{display:inline-flex;align-items:center;justify-content:center;gap:5px;border:1px solid var(--border);background:var(--surface);color:var(--foreground);border-radius:8px;padding:7px 9px;font-size:12px;line-height:1.2;flex-shrink:0;cursor:pointer} +button.endoleap-theme-toggle{display:inline-flex;align-items:center;justify-content:center;gap:5px;border:0;background:transparent;color:var(--muted-foreground);border-radius:8px;padding:8px;width:32px;height:32px;font-size:16px;line-height:1.2;flex-shrink:0;cursor:pointer} button.endoleap-theme-toggle:hover{background:var(--row-hover)} :where(a,button,input,textarea,select):focus-visible{outline:2px solid var(--ring);outline-offset:3px} ::selection{background:var(--selection);color:var(--foreground)} -@media(max-width:600px){.endoleap-theme-toggle span{display:none}.endoleap-brand{gap:5px}.endoleap-brand .endoleap-mark{width:26px;height:26px}.endoleap-wordmark{font-size:14px!important}} +@media(max-width:600px){.endoleap-theme-toggle span{display:inline}.endoleap-brand{gap:5px}.endoleap-brand .endoleap-mark{width:26px;height:26px}.endoleap-wordmark{font-size:14px!important}} button:disabled{cursor:default} input,textarea,select{accent-color:var(--primary)} diff --git a/apps/waterfall-wiki/src/styles/guidance.module.css b/apps/waterfall-wiki/src/styles/guidance.module.css index b7a0765..4c1df1a 100644 --- a/apps/waterfall-wiki/src/styles/guidance.module.css +++ b/apps/waterfall-wiki/src/styles/guidance.module.css @@ -2380,3 +2380,14 @@ .primaryButton,.primaryButton:hover{color:var(--primary-foreground);background:var(--primary)} .primaryButton:hover{background:var(--primary-hover)} .primaryButton:disabled{background:var(--disabled-background);color:var(--disabled-foreground)} + +/* Authentication has its own public page, without workspace navigation. */ +.accountPage { min-height: 100vh; background: var(--background); color: var(--foreground); } +.accountHeader { max-width: 1200px; margin: 0 auto; padding: 24px 32px; display: flex; align-items: center; justify-content: space-between; gap: 20px; } +.accountHeader a { color: var(--muted-foreground); text-decoration: none; } +.accountHeader > div { display: flex; align-items: center; gap: 20px; font-size: 13px; } +.accountPage > main { max-width: 1120px; margin: 0 auto; padding: 48px 32px 72px; } +@media (max-width: 650px) { + .accountHeader { padding: 20px; } + .accountPage > main { padding: 20px 20px 48px; } +} diff --git a/apps/waterfall-wiki/tests/guidance-workspace-ui.ts b/apps/waterfall-wiki/tests/guidance-workspace-ui.ts index 65897e6..8c86dd0 100644 --- a/apps/waterfall-wiki/tests/guidance-workspace-ui.ts +++ b/apps/waterfall-wiki/tests/guidance-workspace-ui.ts @@ -102,7 +102,11 @@ export async function verifyGuidanceWorkspaceUI(base: string, browser: Browser) try { const navigation = await (reload ? page.reload({waitUntil:"commit"}) : page.goto(url,{waitUntil:"commit"})); assert.ok(navigation?.ok(), "Navigation returns a successful document"); - await page.getByText(signedIn ? "editor@example.com" : "登录你的账户",{exact:true}).first().waitFor({state:"attached"}); + if (new URL(url).pathname === "/account") { + await page.getByRole("heading", { name: signedIn ? "你的账户" : "欢迎回来", exact: true }).waitFor(); + } else { + await page.getByText(signedIn ? "editor@example.com" : "登录你的账户",{exact:true}).first().waitFor({state:"attached"}); + } assert.ok(sessionReplies > previousSessionReplies, "The new document requests its account fixture and renders the resulting account state"); } catch (error) { const probeStarted=Date.now(); @@ -155,6 +159,9 @@ export async function verifyGuidanceWorkspaceUI(base: string, browser: Browser) fullPage: true, }); await navigate(base + "/account"); + assert.equal(await page.getByRole("complementary").count(), 0, "Account page has no workspace sidebar"); + assert.equal(await page.getByRole("link", { name: "创建文档", exact: true }).count(), 0); + await page.getByRole("link", { name: "返回首页", exact: true }).waitFor(); await page.getByRole("button", { name: "创建账户", exact: true }).click(); await page.getByRole("heading", { name: "创建你的账户" }).waitFor(); await page