"use client";
import Link from "next/link";
import { useMemo, useState } from "react";
import { usePathname } from "next/navigation";
import clsx from "clsx";
import styles from "./DocsLayout.module.css";
import {
DocsLocale,
DocsPage,
DocsPageContent,
} from "@/content/docs/docs";
import { DOCS_GROUPS } from "@/content/docs/docs.config";
import { DOCS_PAGES } from "@/content/docs/docs";
import { useI18n } from "@/hooks/useI18n";
function DocsHeader() {
const { locale, setLocale } = useI18n();
return (
PolyWeather
{locale === "zh-CN" ? "产品文档中心" : "Product Documentation"}
{locale === "zh-CN" ? "返回主站" : "Back to App"}
);
}
function DocsSidebar({
currentSlug,
locale,
open,
onClose,
}: {
currentSlug: string;
locale: DocsLocale;
open: boolean;
onClose: () => void;
}) {
return (
<>
{open && }
>
);
}
function DocsToc({ page, locale }: { page: DocsPageContent; locale: DocsLocale }) {
return (
);
}
function BlockRenderer({ block }: { block: DocsPageContent["sections"][number]["blocks"][number] }) {
switch (block.type) {
case "paragraph":
return
{block.text}
;
case "callout":
return (
{block.title ?
{block.title}
: null}
{block.text}
);
case "bullets":
case "steps":
return (
{block.items.map((item) => (
- {item}
))}
);
case "link":
return (
);
case "image":
return (
{block.caption ? {block.caption} : null}
);
default:
return null;
}
}
export function DocsScreen({ page }: { page: DocsPage }) {
const pathname = usePathname();
const { locale } = useI18n();
const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
const localizedPage = useMemo(() => page.content[locale], [locale, page]);
const currentSlug = pathname?.split("/").filter(Boolean).at(-1) || page.slug;
return (
setMobileSidebarOpen(false)}
/>
{localizedPage.title}
{localizedPage.description}
{localizedPage.sections.map((section) => (
{section.title}
{section.blocks.map((block, index) => (
))}
))}
);
}