API — dokumentacja referencyjna
Kompletna dokumentacja wszystkich eksportów z pakietu onedocs.
Punkty wejścia
| Import | Opis |
|---|---|
onedocs |
Główne wejście — układy, komponenty, mdxComponents, defineConfig, pomocnicze funkcje źródłowe |
onedocs/components |
Komponenty Fumadocs UI oraz InstallBlock, CodeBlock, Button i Logo |
onedocs/config |
Pomocnicze funkcje konfiguracji |
onedocs/source |
Narzędzia źródeł treści |
onedocs/metadata |
Generowanie metadanych |
onedocs/og |
Generowanie obrazów OpenGraph |
onedocs/llms |
Generowanie LLMs.txt |
onedocs/seo |
Mapa witryny i robots.txt |
onedocs/css/preset.css |
Ustawienie Tailwind CSS |
Układy
DocsLayout
Główny komponent układu stron dokumentacji. Zapewnia nawigację boczną, wyszukiwanie i przełączanie motywu.
import { DocsLayout } from "onedocs";
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<DocsLayout config={config} pageTree={source.pageTree}>
{children}
</DocsLayout>
);
}
Właściwości:
config— obiektOnedocsConfigpageTree— drzewo stron ze źródła (np. e.g,source.pageTree)children— treść strony
DocsPage
Opakowanie dla poszczególnych stron dokumentacji. Opakowuje Fumadocs UI DocsPage i umieszcza treść w DocsBody.
import { DocsPage, mdxComponents } from "onedocs";
import { notFound } from "next/navigation";
export default async function Page(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
const MDX = page.data.body;
return (
<DocsPage toc={page.data.toc}>
<MDX components={mdxComponents} />
</DocsPage>
);
}
Właściwości:
toc— spis treści z danych stronychildren— treść MDX- Każda inna właściwość Fumadocs UI
DocsPage, na przykładfull
DocsBody
Wewnętrzne opakowanie treści dokumentacji. Używane wewnętrznie przez DocsPage.
import { DocsBody } from "onedocs";
<DocsBody>
<MDX components={mdxComponents} />
</DocsBody>
HomePage
Kompletny komponent strony docelowej z sekcją główną, funkcjami i stopką.
import { HomePage, CTASection } from "onedocs";
export default function Home() {
return (
<HomePage config={config} packageName="my-package">
<CTASection
title="Ready to get started?"
cta={{ label: "Read the Docs", href: "/docs" }}
/>
</HomePage>
);
}
Właściwości:
config— obiektOnedocsConfigpackageName— nazwa pakietu w bloku instalacji (opcjonalnie)children— treść między sekcją funkcji a stopką (opcjonalnie)
Zobacz stronę główną homepage i stopkę footer, aby dowiedzieć się, na co wpływa konfiguracja.
HomeLayout
Podstawowy układ strony głównej (używany wewnętrznie przez HomePage).
import { HomeLayout } from "onedocs";
<HomeLayout config={config}>
{/* Custom homepage content */}
</HomeLayout>
createBaseOptions
Tworzy opcje układu Fumadocs UI (tytuł lub logo paska nawigacyjnego, nav.links i link GitHub) na podstawie konfiguracji. Korzystają z niego DocsLayout i HomeLayout; wywołaj go samodzielnie, gdy bezpośrednio renderujesz układ Fumadocs UI.
import { DocsLayout } from "fumadocs-ui/layouts/docs";
import { createBaseOptions } from "onedocs";
<DocsLayout {...createBaseOptions(config)} tree={source.pageTree}>
{children}
</DocsLayout>
Komponenty
InstallBlock
Karty menedżerów pakietów z poleceniami instalacji dla npm, yarn, pnpm i bun (npm i, yarn add, pnpm add, bun add). To asynchroniczny komponent serwerowy.
import { InstallBlock } from "onedocs";
<InstallBlock packageName="onedocs" />
Właściwości:
packageName— nazwa pakietu npm do zainstalowaniatitle— nagłówek nad kartami (opcjonalnie)description— tekst nad kartami (opcjonalnie)children— treść pod kartami (opcjonalnie)
Button
Zaokrąglony link w stylu głównego przycisku. Dostępny w jednym stylu.
import { Button } from "onedocs";
<Button href="/docs">Get Started</Button>
Właściwości:
href— docelowy adres linkuchildren— tekst przyciskuclassName— dodatkowe klasy (opcjonalnie)
Logo
Renderuje jasny i ciemny obraz, a następnie wyświetla ten pasujący do bieżącego motywu. DocsLayout i HomePage używają go dla logo z wariantami jasnym i ciemnym.
import { Logo } from "onedocs";
<Logo light="/logo-light.svg" dark="/logo-dark.svg" alt="My Project" className="h-6" />
Właściwości:
light— ścieżka obrazu dla trybu jasnegodark— ścieżka obrazu dla trybu ciemnegoalt— tekst alternatywny (domyślnie:"Logo")className— klasy dla obu obrazów (opcjonalnie)
CTASection
Sekcja wezwania do działania na stronie głównej.
import { CTASection } from "onedocs";
<CTASection
title="Ready to get started?"
description="Optional description text"
cta={{ label: "Get Started", href: "/docs" }}
/>
Właściwości:
title— nagłówek sekcjidescription— tekst pod nagłówkiem (opcjonalnie)cta— konfiguracja przycisku zlabelihrefchildren— treść pod przyciskiem (opcjonalnie)
FontHead
Wstępnie ładuje zmienną czcionkę Inter, deklaruje jej @font-face i ustawia ją jako czcionkę strony. Dodaj do <head> układu głównego.
import { FontHead } from "onedocs";
<html>
<head>
<FontHead />
</head>
<body>{children}</body>
</html>
Onedocs nie zawiera czcionki. Domyślnie FontHead ładuje /fonts/InterVariable.woff2, dlatego umieść plik w public/fonts/ albo przekaż inny URL za pomocą fontPath:
<FontHead fontPath="/assets/Inter.woff2" />
GitHubIcon
Komponent ikony GitHub (używany wewnętrznie w nawigacji).
import { GitHubIcon } from "onedocs";
<GitHubIcon className="size-5" />
CodeBlock
Blok kodu z podświetlaną składnią, podświetlany po stronie serwera za pomocą Shiki przez Fumadocs. To asynchroniczny komponent serwerowy.
import { CodeBlock } from "onedocs";
<CodeBlock lang="tsx" code="const x = 1;" />
Konfiguracja
defineConfig
Pomocnicza funkcja do konfiguracji z kontrolą typów.
import { defineConfig } from "onedocs/config";
export default defineConfig({
title: "My Docs",
// ... other options
});
OnedocsConfig
Typ TypeScript dla konfiguracji.
import type { OnedocsConfig } from "onedocs/config";
const config: OnedocsConfig = {
title: "My Docs",
};
Wszystkie opcje znajdziesz w sekcji Configuration.
Narzędzia źródeł
loader
Ponowny eksport loadera fumadocs-core/source do tworzenia źródeł treści.
import { loader } from "onedocs/source";
export const source = loader({
baseUrl: "/docs",
source: docs.toFumadocsSource(),
});
createSource
Funkcja pomocnicza do tworzenia źródła treści (opakowanie wokół loadera). Domyślną wartością bazową URL jest /docs.
import { createSource } from "onedocs/source";
import { docs } from "../../.source/server";
export const source = createSource(docs);
// export const source = createSource(docs, { baseUrl: "/guide" });
W 0.1.27 createSource zwraca źródło bez określonego typu, więc TypeScript zgłasza błędy, takie jak Property 'data' does not exist on type 'unknown', gdy odczytujesz page.data (#4). Używaj loader, jak pokazano wyżej, dopóki nie zostanie to naprawione.
Metadane
createMetadata
Generuje metadane Next.js dla głównego układu strony.
import { createMetadata } from "onedocs/metadata";
export const metadata = createMetadata(config, {
baseUrl: "https://example.com",
});
Opcje:
baseUrl- Podstawowy URL witryny (opcjonalnie)additional- Dodatkowe polaMetadata, scalane na końcu (opcjonalnie)
Zwraca: obiekt Next.js Metadata zawierający:
- Tytuł (
config.title) i szablon tytułu (%s | Site Name) - Opis
- Ikonę favicon z
config.icon, jeśli ją ustawiono - Gdy ustawiono
baseUrl:metadataBase, metadane OpenGraph i kartę Twittersummary_large_image
createDocsPageMetadata
Generuje metadane tytułu i opisu strony dokumentacji. Przyjmuje jeden obiekt z title i opcjonalnym description.
import { createDocsPageMetadata } from "onedocs/metadata";
import { notFound } from "next/navigation";
export async function generateMetadata(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
return createDocsPageMetadata({
title: page.data.title,
description: page.data.description,
});
}
Obraz Open Graph dla pojedynczej strony opisano w sekcji Dynamiczne obrazy OG.
Obrazy OpenGraph
createRootOGImage
Tworzy obraz OG strony głównej: logo wyśrodkowane na czarnym tle.
// src/app/opengraph-image.tsx
import {
createRootOGImage,
loadPublicFile,
ogImageSize,
ogImageContentType,
type OGImageLogo,
} from "onedocs/og";
export const size = ogImageSize;
export const contentType = ogImageContentType;
export default async function Image() {
const logo = await loadPublicFile("logo-dark.svg");
return createRootOGImage(logo as OGImageLogo);
}
createDocsOGImage
Tworzy obraz OG dla stron dokumentacji: logo w lewym górnym rogu, a tytuł biały na czarnym tle. Argument fontu jest opcjonalny; bez niego tytuł używa czcionki systemowej.
// src/app/docs/opengraph-image.tsx
import {
createDocsOGImage,
loadPublicFile,
loadInterFont,
ogImageSize,
ogImageContentType,
type OGImageLogo,
} from "onedocs/og";
export const size = ogImageSize;
export const contentType = ogImageContentType;
export default async function Image() {
const [logo, font] = await Promise.all([
loadPublicFile("logo-dark.svg"),
loadInterFont(),
]);
return createDocsOGImage("Documentation", logo as OGImageLogo, font);
}
Dynamiczne obrazy OG
Aby uzyskać obrazy OG dla poszczególnych stron, udostępnij je przez trasę. Strony nie są automatycznie kierowane do tej trasy: dodaj ją samodzielnie do metadanych każdej strony, na przykład za pomocą openGraph: { images: "/docs/og/getting-started" } obok pól z createDocsPageMetadata.
// src/app/docs/og/[...slug]/route.tsx
import {
createDocsOGImage,
loadPublicFile,
loadInterFont,
type OGImageLogo,
} from "onedocs/og";
import { source } from "@/lib/source";
export async function GET(
_request: Request,
{ params }: { params: Promise<{ slug: string[] }> }
) {
const { slug } = await params;
const page = source.getPage(slug);
const title = page?.data.title ?? "Documentation";
const [logo, font] = await Promise.all([
loadPublicFile("logo-dark.svg"),
loadInterFont(),
]);
return createDocsOGImage(title, logo as OGImageLogo, font);
}
Funkcje pomocnicze
| Funkcja | Opis |
|---|---|
loadPublicFile(path) |
Ładuje plik z public/ jako dane URL i bufor; w przypadku SVG odczytuje także atrybuty width i height |
loadInterFont(path?) |
Ładuje czcionkę z public/ dla obrazów OG, domyślnie fonts/Inter-Medium.ttf |
ogImageSize |
Standardowe wymiary obrazu OG { width: 1200, height: 630 } |
ogImageContentType |
Typ MIME "image/png" |
Wymagane pliki:
public/logo-dark.svg- Logo do obrazów OG. Funkcje pomocnicze OG określają jego rozmiar na podstawie atrybutówwidthiheight, dlatego tag<svg>musi zawierać obie wartości jako zwykłe liczby.public/fonts/Inter-Medium.ttf- Czcionka tytułów. Onedocs nie zawiera tego pliku.
LLMs.txt
Generuje pliki LLMs.txt dla asystentów AI.
generateLLMsText
Generuje zwięzłą treść LLMs.txt. Przyjmuje źródło ujęte w createLLMsSource i { title, description? }, a następnie zwraca promise.
// src/app/llms.txt/route.ts
import { createLLMsSource, generateLLMsText } from "onedocs/llms";
import { source } from "@/lib/source";
export async function GET() {
const content = await generateLLMsText(createLLMsSource(source), {
title: "My Project",
description: "Project description",
});
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}
Adresy URL stron są zapisywane w postaci pobranej ze źródła, na przykład /docs/getting-started, bez domeny.
generateLLMsFullText
Generuje pełne LLMs.txt z kompletną treścią stron. Przyjmuje wyłącznie ujęte źródło i zwraca promise.
// src/app/llms-full.txt/route.ts
import { createLLMsSource, generateLLMsFullText } from "onedocs/llms";
import { source } from "@/lib/source";
export async function GET() {
const content = await generateLLMsFullText(createLLMsSource(source));
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}
Treści stron są dołączane tylko wtedy, gdy Fumadocs MDX includeProcessedMarkdown jest włączona; zobacz SEO i wyszukiwanie.
createLLMsSource
Opakowuje źródło Fumadocs (wynik loader() lub createSource()) w strukturę odczytywaną przez dwie funkcje powyżej: dla każdej strony jej URL, tytuł, opis oraz moduły ładujące tekst.
SEO
generateSitemap
Generuje mapę witryny dla dokumentacji. Przyjmuje jeden obiekt: baseUrl, listę pages (zwykle z meta.json) oraz opcjonalne docsPath (domyślnie /docs).
// src/app/sitemap.ts
import { generateSitemap } from "onedocs/seo";
import meta from "../../content/docs/meta.json";
export default function sitemap() {
return generateSitemap({
baseUrl: "https://example.com",
pages: meta.pages ?? [],
});
}
Informacje o tym, jak wpisy stają się adresami URL, znajdziesz w sekcji SEO i wyszukiwanie.
generateRobots
Generuje treść robots.txt: zezwala na wszystko, a także na linie Host i Sitemap. Domyślna wartość sitemapPath to /sitemap.xml.
// src/app/robots.ts
import { generateRobots } from "onedocs/seo";
export default function robots() {
return generateRobots({
baseUrl: "https://example.com",
});
}
Ustawienie wstępne CSS
Zaimportuj ustawienie wstępne CSS w pliku globals.css:
@import "onedocs/css/preset.css";
@source "./**/*.tsx";
@source "../../content/**/*.mdx";
Ścieżki w ustawieniu wstępnym @source są względne względem src/app/globals.css.
Ustawienie wstępne zawiera:
- Tailwind CSS v4 (zainstaluj samodzielnie
tailwindcssi@tailwindcss/postcss) - neutralny motyw Fumadocs
- style ustawienia wstępnego Fumadocs
--font-sansustawione na zmienną--font-interdefiniowaną przezFontHead- Funkcje OpenType fontu Inter dla tekstu głównego i nagłówków
- Style układu o pełnej wysokości oraz poprawki układu Onedocs
Komponenty MDX
Eksport mdxComponents rozszerza domyślne komponenty Fumadocs UI MDX i dodaje poniższe komponenty:
import { mdxComponents } from "onedocs";
<MDX components={mdxComponents} />
Dołączone komponenty:
- Domyślne komponenty Fumadocs UI:
pre(bloki kodu),a,img,h1–h6(nagłówki z kotwicami),table,CodeBlockTab,CodeBlockTabs,CodeBlockTabsList,CodeBlockTabsTrigger,CalloutContainer,CalloutTitle,CalloutDescription Callout- Komunikaty informacyjne, ostrzegawcze i o błędachCard,Cards- Układy kartTab,Tabs- Treści z kartamiStep,Steps- Numerowane krokiAccordion,Accordions- Zwijane sekcjeFile,Folder,Files- Drzewa plikówImageZoom- Powiększane obrazyTypeTable- Tabele dokumentujące typy
InstallBlock i CodeBlock nie są dołączone; dodaj je samodzielnie, jak pokazano w sekcji Komponenty.
Przykłady użycia znajdziesz w sekcji Komponenty.