Content
Installation
To get started, you can follow the official guide or in summary:
pnpm add @nuxt/content
yarn add @nuxt/content
npm install @nuxt/content
bun add @nuxt/content
Then, add the @nuxt/content
module in your nuxt.config.ts
:
export default defineNuxtConfig({
modules: [
'@nuxt/ui',
'@nuxt/content'
],
css: ['~/assets/css/main.css']
})
@nuxt/content
after @nuxt/ui
in the modules
array, otherwise the prose components will not be available.@source
directive in your CSS file.Components
You might be using @nuxt/content
to build a documentation. To help you with that, we've built some components that you can use in your pages:
- a built-in full-text search command palette with ContentSearch, replacing the need for Algolia DocSearch
- a navigation tree with the ContentNavigation component
- a sticky Table of Contents with the ContentToc component
- a prev / next navigation with the ContentSurround component
Typography
Nuxt UI provides its own custom implementations of all prose components for seamless integration with @nuxt/content
. This approach ensures consistent styling, complete control over typography, and perfect alignment with the Nuxt UI design system so your content always looks and feels cohesive out of the box.
Utils
mapContentNavigation
This util will map the navigation from queryCollectionNavigation
and transform it recursively into an array of objects that can be used by various components.
mapContentNavigation(navigation, options?)
navigation
: The navigation tree (array of ContentNavigationItem).options
(optional):labelAttribute
: (string) Which field to use as label (title
by default)deep
: (number or undefined) Controls how many levels of navigation are included (undefined
by default : includes all levels)
Example: As shown in the breadcrumb example below, it's commonly used to transform the navigation data into the correct format.
<script setup lang="ts">
import { mapContentNavigation } from '@nuxt/ui/utils/content'
import { findPageBreadcrumb } from '@nuxt/content/utils'
const { data: navigation } = await useAsyncData('navigation', () => queryCollectionNavigation('content'))
const breadcrumb = computed(() => mapContentNavigation(findPageBreadcrumb(navigation?.value, page.value?.path, { indexAsChild: true })).map(({ icon, ...link }) => link), { deep: 0 })
</script>
<template>
<UPage>
<UPageHeader v-bind="page">
<template #headline>
<UBreadcrumb :items="breadcrumb" />
</template>
</UPageHeader>
</UPage>
</template>