This commit is contained in:
1
LOG.md
1
LOG.md
@@ -7,6 +7,7 @@
|
|||||||
- Restored the missing local `chess.js` install in `node_modules` so build verification could run; no dependency version changes were intended.
|
- Restored the missing local `chess.js` install in `node_modules` so build verification could run; no dependency version changes were intended.
|
||||||
- Refined the desktop layout after review: the sidebar can now collapse on PC, the main window width is more consistent across dashboard/list/reader/chess/admin views, the sidebar archive shortcut was removed, and the top menu now uses WYPark branding with GitHub/email links plus theme switching only.
|
- Refined the desktop layout after review: the sidebar can now collapse on PC, the main window width is more consistent across dashboard/list/reader/chess/admin views, the sidebar archive shortcut was removed, and the top menu now uses WYPark branding with GitHub/email links plus theme switching only.
|
||||||
- Moved auth/admin/write/logout actions into the Dock and changed category windows/menu labels to show the actual category name instead of Finder/posts copy.
|
- Moved auth/admin/write/logout actions into the Dock and changed category windows/menu labels to show the actual category name instead of Finder/posts copy.
|
||||||
|
- Tuned the follow-up layout: main content now centers inside the area remaining after the desktop sidebar, sidebar GitHub/email shortcuts were removed, top-bar GitHub/email links now sit as plain left-side menu items, and the home labels were simplified to 홈/WYPark.
|
||||||
- Validation: `npm run lint` passed, `npm run build` passed. The build logged a sitemap fetch warning because the backend API at the local default was not reachable, but the command completed successfully.
|
- Validation: `npm run lint` passed, `npm run build` passed. The build logged a sitemap fetch warning because the backend API at the local default was not reachable, but the command completed successfully.
|
||||||
- Browser verification: previously started this app on `http://localhost:3100` because ports 3000 and 3001 were already occupied; confirmed desktop background gradients, menu bar, Dock, and window surfaces on `/`, `/archive`, and `/login`. For this follow-up, the dev/standalone server started successfully in foreground but exited when launched as a background non-interactive process, so browser verification was skipped after lint/build passed.
|
- Browser verification: previously started this app on `http://localhost:3100` because ports 3000 and 3001 were already occupied; confirmed desktop background gradients, menu bar, Dock, and window surfaces on `/`, `/archive`, and `/login`. For this follow-up, the dev/standalone server started successfully in foreground but exited when launched as a background non-interactive process, so browser verification was skipped after lint/build passed.
|
||||||
- Recommended next task: review the remaining older Korean strings in admin/editor flows and normalize any mojibake that predates this redesign.
|
- Recommended next task: review the remaining older Korean strings in admin/editor flows and normalize any mojibake that predates this redesign.
|
||||||
|
|||||||
@@ -279,8 +279,7 @@ function HomeContent() {
|
|||||||
<main className="mx-auto w-full px-0 py-4 md:w-[78vw] md:max-w-[1280px] md:py-6">
|
<main className="mx-auto w-full px-0 py-4 md:w-[78vw] md:max-w-[1280px] md:py-6">
|
||||||
<h1 className="sr-only">WYPark Blog</h1>
|
<h1 className="sr-only">WYPark Blog</h1>
|
||||||
<WindowSurface
|
<WindowSurface
|
||||||
title="WYPark Desktop"
|
title="WYPark"
|
||||||
subtitle="Blog dashboard"
|
|
||||||
controls={(
|
controls={(
|
||||||
<Link
|
<Link
|
||||||
href="/archive"
|
href="/archive"
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import Link from 'next/link';
|
|||||||
import { usePathname } from 'next/navigation';
|
import { usePathname } from 'next/navigation';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { clsx } from 'clsx';
|
import { clsx } from 'clsx';
|
||||||
import { Github, Mail } from 'lucide-react';
|
|
||||||
import { getProfile } from '@/api/profile';
|
import { getProfile } from '@/api/profile';
|
||||||
import ThemeToggle from '@/components/theme/ThemeToggle';
|
import ThemeToggle from '@/components/theme/ThemeToggle';
|
||||||
|
|
||||||
@@ -36,7 +35,7 @@ const getAppTitle = (pathname: string) => {
|
|||||||
if (pathname.startsWith('/play/chess')) return 'Chess';
|
if (pathname.startsWith('/play/chess')) return 'Chess';
|
||||||
if (pathname.startsWith('/login')) return 'Login';
|
if (pathname.startsWith('/login')) return 'Login';
|
||||||
if (pathname.startsWith('/signup')) return 'Signup';
|
if (pathname.startsWith('/signup')) return 'Signup';
|
||||||
return 'Desktop';
|
return '홈';
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarProps) {
|
export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarProps) {
|
||||||
@@ -50,9 +49,7 @@ export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarPro
|
|||||||
|
|
||||||
const githubUrl = profile?.githubUrl || defaultProfile.githubUrl;
|
const githubUrl = profile?.githubUrl || defaultProfile.githubUrl;
|
||||||
const email = profile?.email || defaultProfile.email;
|
const email = profile?.email || defaultProfile.email;
|
||||||
|
const menuLinkClass = 'text-xs font-semibold text-[var(--color-text-subtle)] transition hover:text-[var(--color-text)]';
|
||||||
const linkClass =
|
|
||||||
'inline-flex h-8 shrink-0 items-center gap-2 rounded-full border border-[var(--color-line)] bg-[var(--color-control)] px-3 text-sm font-semibold text-[var(--color-text-muted)] shadow-[var(--shadow-control)] backdrop-blur-2xl transition hover:bg-[var(--window-bg-strong)] hover:text-[var(--color-text)]';
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -70,26 +67,17 @@ export default function DesktopMenuBar({ isSidebarCollapsed }: DesktopMenuBarPro
|
|||||||
<span className="truncate text-sm font-semibold text-[var(--color-text-muted)]">
|
<span className="truncate text-sm font-semibold text-[var(--color-text-muted)]">
|
||||||
{getAppTitle(pathname)}
|
{getAppTitle(pathname)}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
<div className="hidden items-center gap-3 md:flex">
|
||||||
|
<a href={githubUrl} target="_blank" rel="noreferrer" className={menuLinkClass}>
|
||||||
<div className="flex shrink-0 items-center gap-2">
|
GitHub
|
||||||
<div className="hidden items-center gap-2 md:flex">
|
|
||||||
<a
|
|
||||||
href={githubUrl}
|
|
||||||
target="_blank"
|
|
||||||
rel="noreferrer"
|
|
||||||
className={linkClass}
|
|
||||||
>
|
|
||||||
<Github size={15} />
|
|
||||||
<span>GitHub</span>
|
|
||||||
</a>
|
</a>
|
||||||
<a href={`mailto:${email}`} className={linkClass}>
|
<a href={`mailto:${email}`} className={menuLinkClass}>
|
||||||
<Mail size={15} />
|
Email
|
||||||
<span>Email</span>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ThemeToggle />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<ThemeToggle />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ export default function DesktopShell({ children }: { children: ReactNode }) {
|
|||||||
|
|
||||||
<main
|
<main
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'relative w-full flex-1 transition-[margin] duration-300 ease-out',
|
'relative w-full flex-1 transition-[margin,width] duration-300 ease-out',
|
||||||
isSidebarCollapsed ? 'md:ml-20' : 'md:ml-72',
|
isSidebarCollapsed
|
||||||
|
? 'md:ml-20 md:w-[calc(100%-5rem)]'
|
||||||
|
: 'md:ml-72 md:w-[calc(100%-18rem)]',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="mx-auto w-full px-4 pb-28 pt-20 md:px-6 md:pb-32 md:pt-24 lg:px-8">
|
<div className="mx-auto w-full px-4 pb-28 pt-20 md:px-6 md:pb-32 md:pt-24 lg:px-8">
|
||||||
|
|||||||
@@ -14,9 +14,7 @@ import {
|
|||||||
FileQuestion,
|
FileQuestion,
|
||||||
Folder,
|
Folder,
|
||||||
FolderOpen,
|
FolderOpen,
|
||||||
Github,
|
|
||||||
Home,
|
Home,
|
||||||
Mail,
|
|
||||||
Menu,
|
Menu,
|
||||||
X,
|
X,
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
@@ -386,30 +384,10 @@ function SidebarContent({
|
|||||||
<div
|
<div
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'shrink-0 border-t border-[var(--color-line)] bg-[var(--window-titlebar)] p-5',
|
'shrink-0 border-t border-[var(--color-line)] bg-[var(--window-titlebar)] p-5',
|
||||||
isDesktopCollapsed && 'md:px-3 md:py-4',
|
isDesktopCollapsed && 'md:hidden',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className={clsx('flex justify-center gap-3', isDesktopCollapsed && 'md:flex-col md:items-center')}>
|
<p className="text-center text-[10px] font-light text-[var(--color-text-subtle)]">
|
||||||
<a
|
|
||||||
href={displayProfile.githubUrl || '#'}
|
|
||||||
target="_blank"
|
|
||||||
rel="noreferrer"
|
|
||||||
className="rounded-full border border-[var(--color-line)] bg-[var(--color-control)] p-2.5 text-[var(--color-text-muted)] shadow-[var(--shadow-control)] transition-all hover:bg-[var(--color-text)] hover:text-white dark:hover:bg-white dark:hover:text-black"
|
|
||||||
aria-label="GitHub"
|
|
||||||
title="GitHub"
|
|
||||||
>
|
|
||||||
<Github size={18} />
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href={`mailto:${displayProfile.email}`}
|
|
||||||
className="rounded-full border border-[var(--color-line)] bg-[var(--color-control)] p-2.5 text-[var(--color-text-muted)] shadow-[var(--shadow-control)] transition-all hover:bg-[var(--color-accent)] hover:text-white"
|
|
||||||
aria-label="이메일"
|
|
||||||
title="이메일"
|
|
||||||
>
|
|
||||||
<Mail size={18} />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<p className={clsx('mt-4 text-center text-[10px] font-light text-[var(--color-text-subtle)]', isDesktopCollapsed && 'md:hidden')}>
|
|
||||||
© {new Date().getFullYear()} {displayProfile.name}
|
© {new Date().getFullYear()} {displayProfile.name}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user