{
  "type": "module",
  "source": "doc/api/customization.md",
  "modules": [
    {
      "textRaw": "Customizing the site",
      "name": "customizing_the_site",
      "type": "module",
      "desc": "<p>This page walks the customizations most projects make, in the\norder they usually make them. The complete option list lives in the\n<a href=\"./generators/html.html\"><code>html</code> generator reference</a>.</p>\n<p>All of it goes in the <code>html</code> section of your configuration file:</p>\n<pre><code class=\"language-mjs\">export default {\n  target: ['html'],\n  global: {\n    input: ['docs/**/*.md'],\n    output: 'out',\n  },\n\n  html: {\n    // ... everything on this page\n  },\n};\n</code></pre>",
      "modules": [
        {
          "textRaw": "Name and titles",
          "name": "name_and_titles",
          "type": "module",
          "desc": "<pre><code class=\"language-js\">html: {\n  project: 'My Project', // Used in page titles and the version selector\n  title: '{project} Documentation', // Browser-tab title template\n  // Suppress the Node.js announcement banner fetched at runtime\n  remoteConfigUrl: '',\n},\n</code></pre>\n<p><code>title</code> supports <code>{project}</code> and <code>{version}</code> placeholders.</p>",
          "displayName": "Name and titles"
        },
        {
          "textRaw": "The `<head>`",
          "name": "the_`<head>`",
          "type": "module",
          "desc": "<p><code>head</code> controls the markup injected into every page's <code>&#x3C;head></code>:</p>\n<pre><code class=\"language-js\">html: {\n  head: {\n    meta: [\n      { name: 'description', content: 'My project documentation' },\n      { property: 'og:image', content: 'https://example.com/og.png' },\n    ],\n    links: [{ rel: 'icon', href: '/favicon.ico' }],\n    html: [\n      `&#x3C;style>\n        :root, :root.dark {\n          --color-brand-400: #b8adff;\n          --color-brand-600: #6e5cd9;\n        }\n      &#x3C;/style>`,\n    ],\n  },\n},\n</code></pre>\n<p>The <code>&#x3C;style></code> override above re-brands the accent color: the UI derives its\npalette from <code>--color-brand-*</code> custom properties, so a few lines of CSS\nrestyle the whole site.</p>",
          "displayName": "The `<head>`"
        },
        {
          "textRaw": "Navigation",
          "name": "navigation",
          "type": "module",
          "desc": "<p>Without configuration, the sidebar is one group holding every page. The\n<code>navigation</code> key allows you to customize it:</p>\n<pre><code class=\"language-js\">html: {\n  navigation: {\n    sidebar: [\n      {\n        groupName: 'Guides',\n        items: [{ label: 'Getting started', link: '/getting-started' }],\n      },\n      {\n        groupName: 'Reference',\n        items: [{ label: '`api`', link: '/api' }],\n      },\n    ],\n    navbar: [\n      {\n        text: 'GitHub',\n        link: 'https://github.com/nodejs/doc-kit',\n        target: '_blank',\n      },\n    ],\n  },\n},\n</code></pre>\n<p>Sidebar <code>link</code>s are page paths without extensions; backticked spans in a\n<code>label</code> render as code. Items can nest through their own <code>items</code> array. The\nsidebar also shows a version selector when your configuration provides a\n<a href=\"./configuration.html\"><code>changelog</code></a>.</p>",
          "displayName": "Navigation"
        },
        {
          "textRaw": "Logo and theme components",
          "name": "logo_and_theme_components",
          "type": "module",
          "desc": "<p>Every piece of the page surrounding your content is a component you can replace. Override any\n<code>#theme/*</code> alias with a path to your own:</p>\n<pre><code class=\"language-js\">html: {\n  imports: {\n    '#theme/Logo': './src/MyLogo.jsx',\n    '#theme/Footer': './src/MyFooter.jsx',\n  },\n},\n</code></pre>\n<pre><code class=\"language-jsx\">export default () => (\n  &#x3C;svg height=\"30\" width=\"30\" viewBox=\"0 0 10 10\">\n    &#x3C;circle cx=\"5\" cy=\"5\" r=\"5\" fill=\"var(--color-brand-400)\" />\n  &#x3C;/svg>\n);\n</code></pre>\n<p>Available slots: <code>#theme/Logo</code>, <code>#theme/Navigation</code>, <code>#theme/Sidebar</code>,\n<code>#theme/Metabar</code>, <code>#theme/Footer</code> (renders nothing by default), and\n<code>#theme/Layout</code> (the outermost wrapper). Custom components can import\nwhatever build-time data they need — project name, version list, page index\n— from the <code>#theme/config</code> virtual module; see the\n<a href=\"./generators/html.html\"><code>html</code> reference</a> for its exports.</p>",
          "displayName": "Logo and theme components"
        },
        {
          "textRaw": "Custom components and MDX",
          "name": "custom_components_and_mdx",
          "type": "module",
          "desc": "<p>Register your own JSX components and use them directly in content:</p>\n<pre><code class=\"language-js\">html: {\n  components: {\n    Hero: '#theme/Hero',\n  },\n  imports: {\n    '#theme/Hero': './src/components/Hero.jsx',\n  },\n},\n</code></pre>\n<pre><code class=\"language-md\">---\ntitle: Welcome\n---\n\n# Welcome\n\n&#x3C;Hero title=\"My Project\" />\n</code></pre>\n<p>Author component-bearing pages as <code>.mdx</code> files (or set <code>mdx: true</code> in a\npage's frontmatter). Regular <code>.md</code> files treat <code>&#x3C;</code> and <code>{</code> literally, which\nis what API documentation wants; MDX pages get real JSX and skip API-doc\nsignature parsing while keeping headings, TOC, and sidebar behavior.</p>",
          "displayName": "Custom components and MDX"
        },
        {
          "textRaw": "The bundler",
          "name": "the_bundler",
          "type": "module",
          "desc": "<p>Vite builds the site by default, and accepts your plugins and options:</p>\n<pre><code class=\"language-mjs\">import { createViteBundler } from '@doc-kit/generator-react/html/bundlers/vite';\n\nexport default {\n  html: {\n    bundler: createViteBundler({\n      plugins: [myVitePlugin()],\n    }),\n  },\n};\n</code></pre>\n<p>A different bundler entirely (webpack, Rspack, …) can be supplied as a small\nadapter object — see <a href=\"./generators/html.html\">Bundler adapters</a> in the\nreference.</p>",
          "displayName": "The bundler"
        }
      ],
      "displayName": "Customizing the site"
    }
  ]
}