Към съдържанието

Справочник за API

Пълен справочник за всички експорти от пакета onedocs.

Входни точки

Импорт Описание
onedocs Основен вход — оформления, компоненти, mdxComponents, defineConfig, помощни функции за източници
onedocs/components Fumadocs компоненти UI плюс InstallBlock, CodeBlock, Button и Logo
onedocs/config Помощни функции за конфигурация
onedocs/source Помощни функции за източници на съдържание
onedocs/metadata Генериране на метаданни
onedocs/og Генериране на изображения OpenGraph
onedocs/llms Генериране на LLMs.txt
onedocs/seo Карта на сайта и robots.txt
onedocs/css/preset.css Готова конфигурация Tailwind CSS

Оформления

DocsLayout

Основна обвивка на оформлението за документационни страници. Предоставя странична навигация, търсене и превключване на темата.

TSX
import { DocsLayout } from "onedocs";

export default function Layout({ children }: { children: React.ReactNode }) {
  return (
    <DocsLayout config={config} pageTree={source.pageTree}>
      {children}
    </DocsLayout>
  );
}

Свойства:

  • config — вашият обект OnedocsConfig
  • pageTree — дърво на страниците от източника ви (e.g., source.pageTree)
  • children — съдържание на страницата

DocsPage

Обвивка за отделни документационни страници. Обгръща Fumadocs UI DocsPage и поставя съдържанието в DocsBody.

TSX
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>
  );
}

Свойства:

  • toc — съдържание от данните на страницата
  • children — съдържание MDX
  • Всяко друго свойство на Fumadocs UI DocsPage, например full

DocsBody

Вътрешна обвивка за съдържанието на документацията. Използва се вътрешно от DocsPage.

TSX
import { DocsBody } from "onedocs";

<DocsBody>
  <MDX components={mdxComponents} />
</DocsBody>

HomePage

Пълен компонент за начална страница с основен банер, функции и долен колонтитул.

TSX
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>
  );
}

Свойства:

  • config — вашият обект OnedocsConfig
  • packageName — име на пакета за блока за инсталиране (незадължително)
  • children — съдържание между функциите и долния колонтитул (незадължително)

Вижте начална страница и долен колонтитул, за да разберете какво управлява конфигурацията.

HomeLayout

Основно оформление за началната страница (използва се вътрешно от HomePage).

TSX
import { HomeLayout } from "onedocs";

<HomeLayout config={config}>
  {/* Custom homepage content */}
</HomeLayout>

createBaseOptions

Изгражда опциите за оформлението на Fumadocs UI (заглавие или лого на навигационната лента, nav.links и връзката GitHub) от конфигурацията ви. DocsLayout и HomeLayout го използват; извикайте го сами, когато визуализирате директно оформление Fumadocs UI.

TSX
import { DocsLayout } from "fumadocs-ui/layouts/docs";
import { createBaseOptions } from "onedocs";

<DocsLayout {...createBaseOptions(config)} tree={source.pageTree}>
  {children}
</DocsLayout>

Компоненти

InstallBlock

Раздели за мениджъри на пакети, показващи команди за инсталиране на npm, yarn, pnpm и bun (npm i, yarn add, pnpm add, bun add). Това е асинхронен сървърен компонент.

TSX
import { InstallBlock } from "onedocs";

<InstallBlock packageName="onedocs" />

Свойства:

  • packageName — името на пакета npm за инсталиране
  • title — заглавие над разделите (незадължително)
  • description — текст над разделите (незадължително)
  • children — съдържание под разделите (незадължително)

Button

Заоблена връзка, оформена като основен бутон. Има един стил.

TSX
import { Button } from "onedocs";

<Button href="/docs">Get Started</Button>

Свойства:

  • href — цел на връзката
  • children — текст на бутона
  • className — допълнителни класове (незадължително)

Показва светло и тъмно изображение и избира това, което съответства на текущата тема. DocsLayout и HomePage го използват за logo със светъл и тъмен вариант.

TSX
import { Logo } from "onedocs";

<Logo light="/logo-light.svg" dark="/logo-dark.svg" alt="My Project" className="h-6" />

Свойства:

  • light — път до изображението за светъл режим
  • dark — път до изображението за тъмен режим
  • alt — алтернативен текст (по подразбиране: "Logo")
  • className — класове за двете изображения (незадължително)

CTASection

Секция с призив към действие за началната страница.

TSX
import { CTASection } from "onedocs";

<CTASection
  title="Ready to get started?"
  description="Optional description text"
  cta={{ label: "Get Started", href: "/docs" }}
/>

Свойства:

  • title — заглавие на секцията
  • description — текст под заглавието (незадължително)
  • cta — конфигурация на бутона с label и href
  • children — съдържание под бутона (незадължително)

FontHead

Предварително зарежда шрифта Inter Variable, задава неговия @font-face и го настройва като шрифт на страницата. Добавете го към <head> на основното оформление.

TSX
import { FontHead } from "onedocs";

<html>
  <head>
    <FontHead />
  </head>
  <body>{children}</body>
</html>

Onedocs не включва шрифта. По подразбиране FontHead зарежда /fonts/InterVariable.woff2, затова поставете файла в public/fonts/ или подайте друг URL с fontPath:

TSX
<FontHead fontPath="/assets/Inter.woff2" />

GitHubIcon

Компонент за икона GitHub (използва се вътрешно в навигацията).

TSX
import { GitHubIcon } from "onedocs";

<GitHubIcon className="size-5" />

CodeBlock

Блок с код и оцветяване на синтаксиса на сървъра чрез Shiki и Fumadocs. Това е асинхронен сървърен компонент.

TSX
import { CodeBlock } from "onedocs";

<CodeBlock lang="tsx" code="const x = 1;" />

Конфигурация

defineConfig

Помощна функция за конфигурация с проверка на типовете.

TSX
import { defineConfig } from "onedocs/config";

export default defineConfig({
  title: "My Docs",
  // ... other options
});

OnedocsConfig

Тип TypeScript за конфигурация.

TSX
import type { OnedocsConfig } from "onedocs/config";

const config: OnedocsConfig = {
  title: "My Docs",
};

Вижте Конфигурация за всички опции.

Помощни функции за източници

loader

Повторно експортиране на зареждащ модул fumadocs-core/source за създаване на източници на съдържание.

TSX
import { loader } from "onedocs/source";

export const source = loader({
  baseUrl: "/docs",
  source: docs.toFumadocsSource(),
});

createSource

Помощна функция за създаване на източник на съдържание (обвивка около зареждащия модул). Основният URL по подразбиране е /docs.

TSX
import { createSource } from "onedocs/source";
import { docs } from "../../.source/server";

export const source = createSource(docs);
// export const source = createSource(docs, { baseUrl: "/guide" });

В 0.1.27 createSource връща нетипизиран източник, затова TypeScript отчита грешки като Property 'data' does not exist on type 'unknown' при четене на page.data (#4). Използвайте loader, както е показано по-горе, докато това не бъде поправено.

Метаданни

createMetadata

Генерира метаданни Next.js за основното оформление.

TSX
import { createMetadata } from "onedocs/metadata";

export const metadata = createMetadata(config, {
  baseUrl: "https://example.com",
});

Опции:

  • baseUrl — основният URL на сайта ви (незадължително)
  • additional — допълнителни полета Metadata, слети накрая (незадължително)

Връща: обект Next.js Metadata със следното:

  • Заглавие (config.title) и шаблон за заглавие (%s | Site Name)
  • Описание
  • Фавикон от config.icon, ако е зададен
  • Когато е зададено baseUrl: metadataBase, метаданни OpenGraph и карта Twitter summary_large_image

createDocsPageMetadata

Генерира метаданните за заглавие и описание на документационна страница. Приема един обект с title и незадължителен description.

TSX
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,
  });
}

За изображение Open Graph за отделна страница вижте Динамични OG изображения.

OpenGraph изображения

createRootOGImage

Създава OG изображение за началната страница: логото е центрирано върху черен фон.

TSX
// 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

Създава OG изображение за документационни страници: логото е горе вляво, а заглавието е с бял текст на черен фон. Аргументът за шрифт е незадължителен; без него заглавието използва системния шрифт.

TSX
// 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);
}

Динамични OG изображения

За OG изображения за отделни страници ги предоставяйте чрез маршрут. Страниците не се свързват автоматично с този маршрут: добавете го сами към метаданните на всяка страница, например с openGraph: { images: "/docs/og/getting-started" } до полетата от createDocsPageMetadata.

TSX
// 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);
}

Помощни функции

Функция Описание
loadPublicFile(path) Зарежда файл от public/ като данни URL и буфер; за SVG файлове прочита също атрибутите width и height
loadInterFont(path?) Зарежда шрифт от public/ за OG изображения, по подразбиране fonts/Inter-Medium.ttf
ogImageSize Стандартни размери на OG изображение { width: 1200, height: 630 }
ogImageContentType Тип MIME "image/png"

Необходими файлове:

  • public/logo-dark.svg — лого за OG изображения. Помощните функции за OG определят размера му според атрибутите width и height, затова тагът <svg> трябва да съдържа и двете като обикновени числа.
  • public/fonts/Inter-Medium.ttf — шрифт за заглавията. Onedocs не го включва.

LLMs.txt

Генериране на файлове LLMs.txt за AI асистенти.

generateLLMsText

Генерира кратко съдържание LLMs.txt. Приема източник, обвит с createLLMsSource и { title, description? }, и връща обещание.

TSX
// 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" },
  });
}

URL адресите на страниците се записват така, както идват от източника, например /docs/getting-started, без домейн.

generateLLMsFullText

Генерира пълно LLMs.txt с цялото съдържание на страниците. Приема само обвития източник и връща обещание.

TSX
// 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" },
  });
}

Съдържанието на страниците се включва само когато настройката includeProcessedMarkdown на Fumadocs MDX е включена; вижте SEO и търсене.

createLLMsSource

Обгръща източник Fumadocs (резултат от loader() или createSource()) във формата, която използват двете функции по-горе: всеки елемент на страницата съдържа URL, заглавие, описание и зареждащи функции за текста.

SEO

generateSitemap

Генерира карта на сайта за документацията ви. Приема един обект: baseUrl, списъка pages (обикновено от meta.json) и незадължителен docsPath (по подразбиране /docs).

TSX
// 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 ?? [],
  });
}

Вижте SEO и търсене, за да разберете как записите се превръщат в URL адреси.

generateRobots

Генерира съдържание robots.txt: разрешава всичко, както и редовете Host и Sitemap. sitemapPath по подразбиране е /sitemap.xml.

TSX
// src/app/robots.ts
import { generateRobots } from "onedocs/seo";

export default function robots() {
  return generateRobots({
    baseUrl: "https://example.com",
  });
}

Предварителна настройка CSS

Импортирайте предварителната настройка CSS във вашия globals.css:

CSS
@import "onedocs/css/preset.css";

@source "./**/*.tsx";
@source "../../content/**/*.mdx";

Пътищата @source в предварителната настройка са относителни спрямо src/app/globals.css.

Предварителната настройка включва:

  • Tailwind CSS v4 (инсталирайте сами tailwindcss и @tailwindcss/postcss)
  • неутрална тема Fumadocs
  • стилове на предварителна настройка Fumadocs
  • --font-sans настроен към променливата --font-inter, дефинирана от FontHead
  • OpenType функции на Inter за основен текст и заглавия
  • стилове за оформление с пълна височина и настройки на оформлението Onedocs

Компоненти MDX

Експортирането на mdxComponents разширява компонентите по подразбиране на Fumadocs UI MDX и добавя компонентите по-долу:

TSX
import { mdxComponents } from "onedocs";

<MDX components={mdxComponents} />

Включени компоненти:

  • Стандартни настройки на Fumadocs UI: pre (блокове с код), a, img, h1 до h6 (заглавия с котви), table, CodeBlockTab, CodeBlockTabs, CodeBlockTabsList, CodeBlockTabsTrigger, CalloutContainer, CalloutTitle, CalloutDescription
  • Callout — информационни, предупредителни и аварийни карета
  • Card, Cards — оформления с карти
  • Tab, Tabs — съдържание с раздели
  • Step, Steps — номерирани стъпки
  • Accordion, Accordions — разгъващи се секции
  • File, Folder, Files — дървета на файлове
  • ImageZoom — изображения с мащабиране
  • TypeTable — таблици с документация за типове

InstallBlock и CodeBlock не са включени; добавете ги сами, както е показано в Компоненти.

Вижте Компоненти за примери за употреба.