CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-nuxt--content

File-based content management system for Nuxt.js applications with powerful querying and Vue component rendering in Markdown

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

navigation.mddocs/

Navigation

Navigation utilities for creating hierarchical structures, breadcrumbs, and finding related content based on file-system organization and content relationships.

Capabilities

Find Page Breadcrumb

Generates breadcrumb trail from navigation tree for a given path.

/**
 * Finds breadcrumb trail for given path in navigation tree
 * @param navigation - Navigation tree to search in
 * @param path - Path to find breadcrumbs for
 * @param options - Configuration options for breadcrumb generation
 * @returns Array of navigation items forming the breadcrumb trail
 */
function findPageBreadcrumb(
  navigation?: ContentNavigationItem[],
  path?: string,
  options?: FindPageBreadcrumbOptions
): ContentNavigationItem[];

interface FindPageBreadcrumbOptions {
  /** Include current page in breadcrumb trail */
  current?: boolean;
  /** Treat index pages as child pages */
  indexAsChild?: boolean;
}

Usage Examples:

import { findPageBreadcrumb } from '@nuxt/content/utils';

// Generate breadcrumb for current page
const navigation = await queryCollectionNavigation('docs');
const breadcrumb = findPageBreadcrumb(navigation, '/docs/guide/getting-started');

// Include current page in breadcrumb
const breadcrumbWithCurrent = findPageBreadcrumb(
  navigation, 
  '/docs/guide/getting-started',
  { current: true }
);

// Treat index pages as children
const breadcrumbWithIndex = findPageBreadcrumb(
  navigation,
  '/docs/guide/index',
  { indexAsChild: true }
);

Find Page Children

Finds child pages for a given path in the navigation tree.

/**
 * Finds child pages for given path in navigation tree
 * @param navigation - Navigation tree to search in
 * @param path - Parent path to find children for
 * @param options - Configuration options for child finding
 * @returns Array of child navigation items
 */
function findPageChildren(
  navigation?: ContentNavigationItem[],
  path?: string,
  options?: FindPageOptions
): ContentNavigationItem[];

interface FindPageOptions {
  /** Treat index pages as child pages */
  indexAsChild?: boolean;
}

Usage Examples:

import { findPageChildren } from '@nuxt/content/utils';

// Find children of a section
const navigation = await queryCollectionNavigation('docs');
const children = findPageChildren(navigation, '/docs/guide');

// Include index pages as children
const childrenWithIndex = findPageChildren(
  navigation,
  '/docs/guide',
  { indexAsChild: true }
);

Find Page Siblings

Finds sibling pages at the same level as the given path.

/**
 * Finds sibling pages for given path in navigation tree
 * @param navigation - Navigation tree to search in
 * @param path - Path to find siblings for
 * @param options - Configuration options for sibling finding
 * @returns Array of sibling navigation items
 */
function findPageSiblings(
  navigation?: ContentNavigationItem[],
  path?: string,
  options?: FindPageOptions
): ContentNavigationItem[];

Usage Examples:

import { findPageSiblings } from '@nuxt/content/utils';

// Find sibling pages
const navigation = await queryCollectionNavigation('docs');
const siblings = findPageSiblings(navigation, '/docs/guide/installation');

// Include index pages as siblings
const siblingsWithIndex = findPageSiblings(
  navigation,
  '/docs/guide/installation',
  { indexAsChild: true }
);

Find Page Headline

Finds the headline or parent title for a given path.

/**
 * Finds headline/parent title for given path
 * @param navigation - Navigation tree to search in
 * @param path - Path to find headline for
 * @param options - Configuration options for headline finding
 * @returns Headline string or undefined if not found
 */
function findPageHeadline(
  navigation?: ContentNavigationItem[],
  path?: string,
  options?: FindPageOptions
): string | undefined;

Usage Examples:

import { findPageHeadline } from '@nuxt/content/utils';

// Find section headline for a page
const navigation = await queryCollectionNavigation('docs');
const headline = findPageHeadline(navigation, '/docs/guide/installation');
// Returns the title of the parent section, e.g., "Guide"

// Use with index pages
const headlineWithIndex = findPageHeadline(
  navigation,
  '/docs/guide/index',
  { indexAsChild: true }
);

Usage Patterns

Complete Navigation Component

<template>
  <nav>
    <!-- Breadcrumb -->
    <ol class="breadcrumb">
      <li v-for="item in breadcrumb" :key="item.path">
        <NuxtLink :to="item.path">{{ item.title }}</NuxtLink>
      </li>
    </ol>

    <!-- Current section headline -->
    <h1 v-if="headline">{{ headline }}</h1>

    <!-- Navigation sidebar -->
    <aside>
      <ul>
        <li v-for="child in children" :key="child.path">
          <NuxtLink :to="child.path">{{ child.title }}</NuxtLink>
        </li>
      </ul>
    </aside>

    <!-- Previous/Next navigation -->
    <div class="pagination">
      <NuxtLink v-if="siblings.length" :to="previousSibling?.path">
        Previous: {{ previousSibling?.title }}
      </NuxtLink>
      <NuxtLink v-if="siblings.length" :to="nextSibling?.path">
        Next: {{ nextSibling?.title }}
      </NuxtLink>
    </div>
  </nav>
</template>

<script setup>
import { findPageBreadcrumb, findPageChildren, findPageSiblings, findPageHeadline } from '@nuxt/content/utils';

const route = useRoute();
const navigation = await queryCollectionNavigation('docs');

const breadcrumb = findPageBreadcrumb(navigation, route.path);
const children = findPageChildren(navigation, route.path);
const siblings = findPageSiblings(navigation, route.path);
const headline = findPageHeadline(navigation, route.path);

// Find previous and next siblings
const currentIndex = siblings.findIndex(item => item.path === route.path);
const previousSibling = currentIndex > 0 ? siblings[currentIndex - 1] : null;
const nextSibling = currentIndex < siblings.length - 1 ? siblings[currentIndex + 1] : null;
</script>

Navigation Tree Component

<template>
  <ul class="navigation-tree">
    <li v-for="item in navigation" :key="item.path" class="nav-item">
      <NuxtLink 
        :to="item.path" 
        :class="{ active: isActive(item.path) }"
      >
        {{ item.title }}
      </NuxtLink>
      
      <!-- Recursive children -->
      <NavigationTree 
        v-if="item.children?.length" 
        :navigation="item.children"
        class="nav-children"
      />
    </li>
  </ul>
</template>

<script setup>
interface Props {
  navigation: ContentNavigationItem[];
}

const props = defineProps<Props>();
const route = useRoute();

const isActive = (path: string) => {
  return route.path === path || route.path.startsWith(path + '/');
};
</script>

Types

interface ContentNavigationItem {
  /** Display title for navigation item */
  title: string;
  /** URL path for navigation item */
  path: string;
  /** File stem (filename without extension) */
  stem?: string;
  /** Child navigation items */
  children?: ContentNavigationItem[];
  /** Whether this is a page (true) or directory (false) */
  page?: boolean;
  /** Additional custom fields from content frontmatter */
  [key: string]: unknown;
}

interface FindPageBreadcrumbOptions {
  /** Include current page in breadcrumb trail */
  current?: boolean;
  /** Treat index pages as child pages */
  indexAsChild?: boolean;
}

interface FindPageOptions {
  /** Treat index pages as child pages */
  indexAsChild?: boolean;
}

Install with Tessl CLI

npx tessl i tessl/npm-nuxt--content

docs

collections.md

configuration.md

index.md

navigation-utilities.md

navigation.md

preview.md

querying.md

rendering.md

runtime-utilities.md

tile.json