nimiq-vitepress-theme
Version:
Nimiq UI theme for VitePress
208 lines (155 loc) • 5.78 kB
Markdown
# Nimiq VitePress Theme
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![bundle][bundle-src]][bundle-href]
[![JSDocs][jsdocs-src]][jsdocs-href]
[![License][license-src]][license-href]
A modern, beautiful VitePress theme with Nimiq branding and design patterns.
## Features
- 🎨 Modern, clean design with Nimiq branding
- 🌙 Dark mode support
- 📱 Fully responsive layout
- 🔍 Advanced search functionality
- 🧭 Smart navigation with breadcrumbs
- 📝 Rich typography and code highlighting
- 🎯 Custom components (NqCard, NqGrid, NqHeadline, etc.)
- **🚨 Beautiful custom 404 error page**
## Components
### Built-in Components
- `NqCard` - Flexible card component with optional icons and links
- `NqGrid` - Responsive grid layout
- `NqHeadline` - Structured headline component
- `NqLargeCard` - Large featured card component
- `NqModulesGrid` - Grid for displaying modules
### Error Page
The theme includes a custom 404 error page with:
- Friendly error message with random emojis
- Quick navigation options (Go Back, Go Home)
- Integrated search functionality
- Quick links to common pages
- Display of available modules
- Responsive design for mobile and desktop
## Installation
```bash
npm install nimiq-vitepress-theme
```
## Usage
```ts
// .vitepress/config.ts
import { defineNimiqVitepressConfig } from 'nimiq-vitepress-theme'
export default defineNimiqVitepressConfig({
title: 'Your Documentation',
description: 'Your description',
themeConfig: {
modules: [
{
text: 'Getting Started',
defaultPageLink: '/getting-started',
description: 'Learn the basics'
}
]
}
})
```
## Theme Configuration
The theme supports various configuration options:
```ts
interface NimiqVitepressThemeConfig {
modules: NimiqVitepressThemeNav[]
links?: {
icon: string
link: string
label: string
}[]
showLastUpdated?: boolean
showEditContent?: boolean
search?: { provider: 'local' }
outlineActions?: OutlineAction[]
pageFooterLeftText?: false | string
}
```
### Configuration Options
- **`modules`** (required): Array of navigation modules for your documentation
- **`links`**: Social and external links displayed in the navigation
- **`showLastUpdated`**: Show last updated timestamp for pages (default: `true`)
- **`showEditContent`**: Show "Edit this page" link (default: `true`)
- **`search`**: Enable local search (set to `{ provider: 'local' }`)
- **`outlineActions`**: Custom actions displayed in the page outline
- **`pageFooterLeftText`**: Customize page footer text. Set to `false` to hide, or provide a string (supports markdown). Can be overridden per-page via frontmatter
## Layout Slots
The theme provides layout slots for extending functionality:
### `layout-bottom`
A slot rendered at the bottom of the layout, useful for mounting global components like modals or notification systems.
**Example usage:**
```ts
import type { Theme } from 'vitepress'
// .vitepress/theme/index.ts
import { defineNimiqThemeConfig } from 'nimiq-vitepress-theme/theme'
import { h } from 'vue'
import MyGlobalModal from './components/MyGlobalModal.vue'
const baseTheme = defineNimiqThemeConfig({
enhanceApp({ app }) {
// your app enhancements
},
})
export default {
extends: baseTheme,
Layout: () => {
return h(baseTheme.Layout!, null, {
'layout-bottom': () => h(MyGlobalModal),
})
},
} satisfies Theme
```
This slot is ideal for:
- Global modals and dialogs
- Feedback widgets
- Cookie consent banners
- Analytics components
- Any component that needs to be available across all pages
## Testing the 404 Page
To test the custom 404 error page:
1. Start your development server
2. Navigate to any non-existent page (e.g., `/non-existent-page`)
3. The custom error page will display with:
- Random emoji
- Friendly error message
- Navigation options
- Search functionality
- Quick links and module exploration
## Development
```bash
# Install dependencies
pnpm install
# Build the theme
pnpm build
# Development
pnpm dev
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
MIT License
<!-- Badges -->
[npm-version-src]: https://img.shields.io/npm/v/nimiq-vitepress-theme?style=flat&colorA=080f12&colorB=1fa669
[npm-version-href]: https://npmjs.com/package/nimiq-vitepress-theme
[npm-downloads-src]: https://img.shields.io/npm/dm/nimiq-vitepress-theme?style=flat&colorA=080f12&colorB=1fa669
[npm-downloads-href]: https://npmjs.com/package/nimiq-vitepress-theme
[bundle-src]: https://img.shields.io/bundlephobia/minzip/nimiq-vitepress-theme?style=flat&colorA=080f12&colorB=1fa669&label=minzip
[bundle-href]: https://bundlephobia.com/result?p=nimiq-vitepress-theme
[license-src]: https://img.shields.io/github/license/onmax/nimiq-ui.svg?style=flat&colorA=080f12&colorB=1fa669
[license-href]: https://github.com/onmax/nimiq-ui/blob/main/LICENSE
[jsdocs-src]: https://img.shields.io/badge/jsdocs-reference-080f12?style=flat&colorA=080f12&colorB=1fa669
[jsdocs-href]: https://www.jsdocs.io/package/nimiq-vitepress-theme
## Git Data Performance
The git data feature fetches information about files from git history, which can be slow for large repositories.
To improve performance, the script implements:
1. **Caching**: File information is cached in `.vitepress/cache/git-data-cache.json`
2. **Change detection**: Only files that have been modified since the last run are processed
### Debugging
To enable debug logs for the git data script, run VitePress with:
```bash
DEBUG=true npm run dev
```
### Configuration
You can adjust the concurrency level by modifying the `CONCURRENCY` constant in `git.data.ts`.