diff --git a/gitbook/components/DocsHeader.js b/gitbook/components/DocsHeader.js index 02bb62b..2f069c5 100644 --- a/gitbook/components/DocsHeader.js +++ b/gitbook/components/DocsHeader.js @@ -2,7 +2,7 @@ import { useState } from "react"; import Link from "next/link"; -import { DOCS_CONFIG } from "@/constants/docsConfig"; +import { DOCS_CONFIG, t } from "@/constants/docsConfig"; import { DEFAULT_LANG } from "@/constants/languages"; import { ExternalLink, Menu, X } from "lucide-react"; import DocsSidebar from "./DocsSidebar"; @@ -41,7 +41,7 @@ export default function DocsHeader({ lang = DEFAULT_LANG }) { rel="noopener noreferrer" className="flex items-center gap-2 px-3 sm:px-4 py-2 bg-[#E68A6E] text-white rounded-lg font-medium hover:bg-[#d67a5e] transition-colors text-sm" > - Go to App + {t(lang, "goToApp")} diff --git a/gitbook/components/DocsLayout.js b/gitbook/components/DocsLayout.js index 17c6d94..128991f 100644 --- a/gitbook/components/DocsLayout.js +++ b/gitbook/components/DocsLayout.js @@ -17,7 +17,7 @@ export default function DocsLayout({ children, headings = [], lang = DEFAULT_LAN
{children} - +
diff --git a/gitbook/components/DocsSidebar.js b/gitbook/components/DocsSidebar.js index dffd9bc..7700439 100644 --- a/gitbook/components/DocsSidebar.js +++ b/gitbook/components/DocsSidebar.js @@ -1,49 +1,58 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { DOCS_CONFIG } from "@/constants/docsConfig"; +import { getNavigation } from "@/constants/docsConfig"; import { DEFAULT_LANG } from "@/constants/languages"; -import { ChevronDown, ChevronRight, BookOpen, Rocket, Terminal, Monitor, FolderOpen, HelpCircle, MessageCircle, Layers, Plug, Cloud, Zap, Wallet, Gift, GitBranch, BarChart3, Code2, Sparkles, Server, Globe } from "lucide-react"; +import { ChevronDown, ChevronRight, BookOpen, Rocket, Terminal, Monitor, HelpCircle, MessageCircle, Layers, Plug, Cloud, Zap, Wallet, Gift, GitBranch, BarChart3, Code2, Sparkles, Server } from "lucide-react"; +// Icons keyed by structural key (language-independent) const SECTION_ICONS = { - "Getting Started": Rocket, - "Providers": Layers, - "Features": Zap, - "Integration": Plug, - "Deployment": Cloud, - "Help": HelpCircle + gettingStarted: Rocket, + providers: Layers, + features: Zap, + integration: Plug, + deployment: Cloud, + help: HelpCircle }; const ITEM_ICONS = { - "Introduction": BookOpen, - "Quick Start": Rocket, - "Installation": Terminal, - "Subscription (Maximize)": Sparkles, - "Cheap (Backup)": Wallet, - "Free (Fallback)": Gift, - "Smart Routing": GitBranch, - "Combos & Fallback": Layers, - "Quota Tracking": BarChart3, - "Claude Code": Code2, - "OpenAI Codex": Code2, - "Cursor": Code2, - "Cline": Code2, - "Roo": Code2, - "Continue": Code2, - "Other Tools": Plug, - "Localhost": Monitor, - "Cloud (VPS/Docker)": Server, - "Troubleshooting": HelpCircle, - "FAQ": MessageCircle + introduction: BookOpen, + quickStart: Rocket, + installation: Terminal, + subscription: Sparkles, + cheap: Wallet, + free: Gift, + smartRouting: GitBranch, + combos: Layers, + quotaTracking: BarChart3, + claudeCode: Code2, + codex: Code2, + cursor: Code2, + cline: Code2, + roo: Code2, + continue: Code2, + otherTools: Plug, + localhost: Monitor, + cloud: Server, + troubleshooting: HelpCircle, + faq: MessageCircle }; export default function DocsSidebar({ isMobile = false, onClose, lang = DEFAULT_LANG }) { const pathname = usePathname(); - const [openSections, setOpenSections] = useState( - DOCS_CONFIG.navigation.map((_, i) => i) - ); + const navigation = getNavigation(lang); + const [openSections, setOpenSections] = useState(() => { + if (typeof window === "undefined") return []; + try { + return JSON.parse(sessionStorage.getItem("sidebarOpen") || "[]"); + } catch { return []; } + }); + + useEffect(() => { + sessionStorage.setItem("sidebarOpen", JSON.stringify(openSections)); + }, [openSections]); const toggleSection = (index) => { setOpenSections(prev => @@ -53,26 +62,21 @@ export default function DocsSidebar({ isMobile = false, onClose, lang = DEFAULT_ ); }; - // Build URL for a navigation slug under current language const buildHref = (slug) => (slug ? `/${lang}/${slug}` : `/${lang}`); - const isActive = (slug) => pathname === buildHref(slug); const handleLinkClick = () => { - if (isMobile && onClose) { - onClose(); - } + if (isMobile && onClose) onClose(); }; return (