feat(nav): Settings as a page module (Design B)

Move Settings out of the right-side overlay into a left-nav page (page='settings'),
so it opens where you're already looking — no cross-screen mouse travel. The Settings
rail item now sets the page (with active highlight) instead of opening a dialog; the
panel is refactored to an in-flow .glass card (keeps the frosted look over the ambient
backdrop), with the page title shown in the header. Removed the overlay + Esc/backdrop
close path.
This commit is contained in:
npeter83 2026-06-16 01:05:05 +02:00
parent 7b1fc02c68
commit d30dc7f760
5 changed files with 71 additions and 102 deletions

View file

@ -23,13 +23,11 @@ export default function NavSidebar({
me,
page,
setPage,
onOpenSettings,
onOpenAbout,
}: {
me: Me;
page: Page;
setPage: (p: Page) => void;
onOpenSettings: () => void;
onOpenAbout: () => void;
}) {
const { t } = useTranslation();
@ -115,9 +113,14 @@ export default function NavSidebar({
<div className="mt-2 pt-2 border-t border-border flex flex-col gap-1">
<button
onClick={onOpenSettings}
onClick={() => setPage("settings")}
title={collapsed ? t("header.account.settings") : undefined}
className={`${rowBase} ${collapsed ? "justify-center px-0" : ""} text-muted hover:text-fg hover:bg-card`}
aria-current={page === "settings" ? "page" : undefined}
className={`${rowBase} ${collapsed ? "justify-center px-0" : ""} ${
page === "settings"
? "bg-accent text-accent-fg"
: "text-muted hover:text-fg hover:bg-card"
}`}
>
<Settings className="w-[18px] h-[18px] shrink-0" />
{!collapsed && <span className="truncate">{t("header.account.settings")}</span>}