feat: move nav to left rail and slim width
Shift the vertical navigation to the left, narrow the rail, and sync light/dark styling with layout offsets.
This commit is contained in:
parent
28d0f445c5
commit
04706deb17
@ -43,7 +43,7 @@ export default async function AdminLayout({
|
|||||||
tutorialEnabled={siteSettings.tutorialEnabled ?? false}
|
tutorialEnabled={siteSettings.tutorialEnabled ?? false}
|
||||||
rankingEnabled={siteSettings.rankingEnabled ?? true}
|
rankingEnabled={siteSettings.rankingEnabled ?? true}
|
||||||
/>
|
/>
|
||||||
<div className="flex-1 pr-20">{children}</div>
|
<div className="flex-1 pl-16">{children}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@ async function SidebarWrapper({ children }: { children: React.ReactNode }) {
|
|||||||
tutorialEnabled={siteSettings.tutorialEnabled ?? false}
|
tutorialEnabled={siteSettings.tutorialEnabled ?? false}
|
||||||
rankingEnabled={siteSettings.rankingEnabled ?? true}
|
rankingEnabled={siteSettings.rankingEnabled ?? true}
|
||||||
/>
|
/>
|
||||||
<div className="flex h-svh w-full overflow-hidden pr-20">
|
<div className="flex h-svh w-full overflow-hidden pl-16 [--sidebar-offset:4rem]">
|
||||||
<AppSidebar user={session?.user} />
|
<AppSidebar user={session?.user} />
|
||||||
<SidebarInset className="h-full">{children}</SidebarInset>
|
<SidebarInset className="h-full">{children}</SidebarInset>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -59,7 +59,7 @@ async function CanvasLayoutWrapper({ children }: { children: React.ReactNode })
|
|||||||
tutorialEnabled={siteSettings.tutorialEnabled ?? false}
|
tutorialEnabled={siteSettings.tutorialEnabled ?? false}
|
||||||
rankingEnabled={siteSettings.rankingEnabled ?? true}
|
rankingEnabled={siteSettings.rankingEnabled ?? true}
|
||||||
/>
|
/>
|
||||||
<div className="h-full pr-20">
|
<div className="h-full pl-16">
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -140,8 +140,8 @@ export function TopNavbar({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const navItemBaseClass =
|
const navItemBaseClass =
|
||||||
"flex h-14 w-14 flex-col items-center justify-center gap-1 rounded-xl text-white hover:bg-white/10 transition-colors";
|
"flex h-12 w-12 flex-col items-center justify-center gap-1 rounded-xl text-gray-800 hover:bg-black/5 transition-colors dark:text-white dark:hover:bg-white/10";
|
||||||
const navLabelClass = "text-[10px] leading-none font-medium";
|
const navLabelClass = "text-[10px] leading-none font-medium text-gray-700 dark:text-white/90";
|
||||||
|
|
||||||
// 打开图片编辑器 - 直接打开,不触发上传
|
// 打开图片编辑器 - 直接打开,不触发上传
|
||||||
const handleOpenImageEditor = () => {
|
const handleOpenImageEditor = () => {
|
||||||
@ -201,7 +201,7 @@ export function TopNavbar({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const navContent = (
|
const navContent = (
|
||||||
<nav className="fixed right-0 top-0 bottom-0 z-[100] flex w-20 flex-col items-center bg-black/90 backdrop-blur-sm text-white border-l border-white/10 shadow-sm">
|
<nav className="fixed left-0 top-0 bottom-0 z-[100] flex w-16 flex-col items-center bg-white/90 backdrop-blur-sm text-gray-900 border-r border-gray-200 shadow-sm dark:bg-black/90 dark:text-white dark:border-white/10">
|
||||||
{/* 顶部:LOGO + 网站名称 */}
|
{/* 顶部:LOGO + 网站名称 */}
|
||||||
<a
|
<a
|
||||||
href="/"
|
href="/"
|
||||||
@ -238,7 +238,7 @@ export function TopNavbar({
|
|||||||
<span className={navLabelClass}>{getShortLabel(toolbox1Name)}</span>
|
<span className={navLabelClass}>{getShortLabel(toolbox1Name)}</span>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent side="left" align="center" className="w-[320px] p-2">
|
<DropdownMenuContent side="right" align="center" className="w-[320px] p-2">
|
||||||
<div className="grid grid-cols-2 gap-2">
|
<div className="grid grid-cols-2 gap-2">
|
||||||
{customLinks
|
{customLinks
|
||||||
.filter(l => (l.toolboxGroup || 1) === 1)
|
.filter(l => (l.toolboxGroup || 1) === 1)
|
||||||
@ -276,7 +276,7 @@ export function TopNavbar({
|
|||||||
<span className={navLabelClass}>{getShortLabel(toolbox2Name)}</span>
|
<span className={navLabelClass}>{getShortLabel(toolbox2Name)}</span>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent side="left" align="center" className="w-[320px] p-2">
|
<DropdownMenuContent side="right" align="center" className="w-[320px] p-2">
|
||||||
<div className="grid grid-cols-2 gap-2">
|
<div className="grid grid-cols-2 gap-2">
|
||||||
{customLinks
|
{customLinks
|
||||||
.filter(l => l.toolboxGroup === 2)
|
.filter(l => l.toolboxGroup === 2)
|
||||||
@ -328,7 +328,7 @@ export function TopNavbar({
|
|||||||
<span className={navLabelClass}>{getShortLabel("功能教程")}</span>
|
<span className={navLabelClass}>{getShortLabel("功能教程")}</span>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent side="left" align="center" className="w-[320px] p-2">
|
<DropdownMenuContent side="right" align="center" className="w-[320px] p-2">
|
||||||
<div className="space-y-1 max-h-[400px] overflow-y-auto">
|
<div className="space-y-1 max-h-[400px] overflow-y-auto">
|
||||||
{tutorialVideos
|
{tutorialVideos
|
||||||
.sort((a, b) => a.order - b.order)
|
.sort((a, b) => a.order - b.order)
|
||||||
@ -387,7 +387,7 @@ export function TopNavbar({
|
|||||||
<span className={navLabelClass}>{getShortLabel("精选榜")}</span>
|
<span className={navLabelClass}>{getShortLabel("精选榜")}</span>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent side="left" align="center" className="w-[280px] p-3">
|
<DropdownMenuContent side="right" align="center" className="w-[280px] p-3">
|
||||||
<div className="flex items-center gap-2 mb-3 pb-2 border-b">
|
<div className="flex items-center gap-2 mb-3 pb-2 border-b">
|
||||||
<Trophy className="h-5 w-5 text-orange-500" />
|
<Trophy className="h-5 w-5 text-orange-500" />
|
||||||
<span className="font-semibold">精选榜单 TOP5</span>
|
<span className="font-semibold">精选榜单 TOP5</span>
|
||||||
|
|||||||
@ -245,8 +245,8 @@ const Sidebar = React.forwardRef<
|
|||||||
className={cn(
|
className={cn(
|
||||||
"fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear md:flex",
|
"fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear md:flex",
|
||||||
side === "left"
|
side === "left"
|
||||||
? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]"
|
? "left-[var(--sidebar-offset,0px)] group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-offset,0px)_-_var(--sidebar-width))]"
|
||||||
: "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
|
: "right-[var(--sidebar-offset,0px)] group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-offset,0px)_-_var(--sidebar-width))]",
|
||||||
// Adjust the padding for floating and inset variants.
|
// Adjust the padding for floating and inset variants.
|
||||||
variant === "floating" || variant === "inset"
|
variant === "floating" || variant === "inset"
|
||||||
? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]"
|
? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user