import { ChevronLeft, ChevronRight, Clapperboard, Menu } from "lucide-react"; import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react"; import { Link, NavLink, Outlet, useLocation } from "react-router"; import { ApiKeyDialog } from "~/components/console/api-key-dialog.tsx"; import { findNavItem, NAV_GROUPS, NAV_ITEMS, type NavGroup } from "~/components/console/nav.ts"; import PrismLeak from "~/components/prism-leak.tsx"; import { ThemeToggle } from "~/components/theme-toggle.tsx"; import { Button } from "~/components/ui/button.tsx"; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "~/components/ui/sheet.tsx"; import { cn } from "~/lib/utils.ts"; const PORTAL_NAME = "媒体自动化"; // ─── 展开态导航:选中项由一枚玻璃滑块(seg-thumb)滑到激活链接背后 ─── function ExpandedNav({ groups, onNavigate }: { groups: NavGroup[]; onNavigate?: () => void }) { const location = useLocation(); const navRef = useRef(null); const [pill, setPill] = useState<{ x: number; y: number; w: number; h: number } | null>(null); const measure = useCallback(() => { const nav = navRef.current; if (!nav) return; const active = nav.querySelector('[aria-current="page"]'); if (!active) { setPill(null); return; } const navRect = nav.getBoundingClientRect(); const rect = active.getBoundingClientRect(); setPill({ x: rect.left - navRect.left, y: rect.top - navRect.top + nav.scrollTop, w: rect.width, h: rect.height }); }, []); // biome-ignore lint/correctness/useExhaustiveDependencies: 路由变化时重新量测 useLayoutEffect(() => { measure(); }, [measure, location.pathname]); useEffect(() => { window.addEventListener("resize", measure); return () => window.removeEventListener("resize", measure); }, [measure]); return ( ); } // ─── 折叠态:只显示图标 ─── function CollapsedNav() { return ( ); } function Brand({ collapsed = false }: { collapsed?: boolean }) { return ( {!collapsed &&

UHD Media Tool

} ); } export default function ConsoleLayout() { const location = useLocation(); const [collapsed, setCollapsed] = useState(false); const [sheetOpen, setSheetOpen] = useState(false); const activeLabel = findNavItem(location.pathname)?.label ?? PORTAL_NAME; return (
{/* 桌面端侧栏 */} {/* 主内容区 */}
setSheetOpen(false)} /> {activeLabel}
); }