wiki-vitepress
microsoft/skills
Die Pakete wandeln Wiki-Markdown in eine statische VitePress-Website mit dunklem Design, Mermaid-Diagramme im Dark-Mode mit Zoomfunktion per Mausklick und einer Ausgabe für die Produktionsumgebung um.
...Alle erweiternWiki VitePress Packager
Wandelt generierte Wiki-Markdown-Dateien in eine ansprechende statische VitePress-Website mit dunklem Design und interaktiven Mermaid-Diagrammen um.
Wann aktivieren?
- Der Benutzer fordert an, eine Website zu erstellen oder als VitePress zu verpacken
- Der Benutzer führt den Befehl
/deep-wiki:buildaus - Der Benutzer wünscht sich eine im Browser anzeigbare HTML-Ausgabe der generierten Wiki-Seiten
VitePress-Gerüst
Erstellen Sie die folgende Struktur im Verzeichnis „wiki-site/ “:
wiki-site/
├── .vitepress/
│ ├── config.mts
│ └── theme/
│ ├── index.ts
│ └── custom.css
├── public/
├── [generierte .md-Seiten]
├── package.json
└── index.md
Konfigurationsanforderungen (config.mts)
- Verwenden Sie den
„withMermaid“-Wrapper ausdem vitepress-plugin-mermaid - Setzen Sie
„appearance: 'dark'“für ein ausschließlich dunkles Theme - Konfigurieren Sie
themeConfig.navundthemeConfig.sidebarentsprechend der Katalogstruktur - Die Mermaid-Konfiguration muss die Variablen für das dunkle Design festlegen:
mermaid: {
theme: 'dark',
themeVariables: {
primaryColor: '#1e3a5f',
primaryTextColor: '#e0e0e0',
primaryBorderColor: '#4a9eed',
lineColor: '#4a9eed',
secondaryColor: '#2d4a3e',
tertiaryColor: '#2d2d3d',
background: '#1a1a2e',
Haupthintergrund: '#1e3a5f',
Knotenrand: '#4a9eed',
Cluster-Hintergrund: '#16213e',
Titel-Farbe: '#e0e0e0',
Hintergrundfarbe für Kantenbeschriftung: '#1a1a2e'
}
}
Dark-Mode Mermaid: Dreischichtige Korrektur
Ebene 1: Theme-Variablen (in config.mts)
Wie oben gezeigt über ` mermaid.themeVariables ` festlegen.
Ebene 2: CSS-Überschreibungen (custom.css)
Mermaid-SVG-Elemente mit !important ansprechen:
.mermaid .node rect,
.mermaid .node circle,
.mermaid .node polygon { fill: #1e3a5f !important; stroke: #4a9eed !important; }
.mermaid .edgeLabel { background-color: #1a1a2e !important; color: #e0e0e0 !important; }
.mermaid text { fill: #e0e0e0 !important; }
.mermaid .label { color: #e0e0e0 !important; }
Ebene 3: Ersetzen von Inline-Stilen (theme/index.ts)
Die Inline -Stilattribute von Mermaid überschreiben alles. Verwende `onMounted ` + Polling, um sie zu ersetzen:
import { onMounted } from 'vue'
// In setup()
onMounted(() => {
let attempts = 0
const fix = setInterval(() => {
document.querySelectorAll('.mermaid svg [style]').forEach(el => {
const s = (el as HTMLElement).style
if (s.fill && !s.fill.includes('#1e3a5f')) s.fill = '#1e3a5f'
if (s.stroke && !s.stroke.includes('#4a9eed')) s.stroke = '#4a9eed'
if (s.color) s.color = '#e0e0e0'
})
if (++attempts >= 20) clearInterval(fix)
}, 500)
})
Verwende setup() mit onMounted, NICHT enhanceApp() – das DOM existiert während SSR nicht.
Klick-zum-Zoomen für Mermaid-Diagramme
Umschließe jeden .mermaid -Container mit einem anklickbaren Wrapper, der ein Vollbild-Modalfenster öffnet:
document.querySelectorAll('.mermaid').forEach(el => {
el.style.cursor = 'zoom-in'
el.addEventListener('click', () => {
const modal = document.createElement('div')
modal.className = 'mermaid-zoom-modal'
modal.innerHTML = el.outerHTML
modal.addEventListener('click', () => modal.remove())
document.body.appendChild(modal)
})
})
CSS für das Modal:
.mermaid-zoom-modal {
position: fixed; inset: 0;
background: rgba(0,0,0,0.9);
display: flex; align-items: center; justify-content: center;
z-index: 9999; cursor: zoom-out;
}
.mermaid-zoom-modal .mermaid { transform: scale(1.5); }
Regeln für die Nachbearbeitung
Vor dem VitePress-Build alle .md -Dateien scannen und Folgendes korrigieren:
- Ersetzen
durch(Kompatibilität mit dem Vue-Template-Compiler) - Umschließe freie
generische Parameter außerhalb von Code-Blöcken in Backticks ein - Stelle sicher, dass jede Seite YAML-Frontmatter mit
TitelundBeschreibungenthält
Erstellen
cd wiki-site && npm install && npm run docs:build
Die Ausgabe erfolgt in wiki-site/.vitepress/dist/.
Bekannte Fallstricke
- Mermaid rendert asynchron – SVGs sind noch nicht vorhanden, wenn
„onMounted“ausgelöst wird. Es muss nachfragen. - Die Compiler-Option
„isCustomElement“für „bare“führt zu schwerwiegenderen Abstürzen – bitte NICHT verwenden - Node-Text in Mermaid verwendet Inline
-Stilemit höchster Spezifität – CSS allein reicht nicht aus, um das Problem zu beheben „enhanceApp()“wird während SSR ausgeführt, wenndas Dokumentnoch nicht existiert – verwende ausschließlich„setup()“
---
name: wiki-vitepress
description: Packages generated wiki Markdown into a VitePress static site with dark theme, dark-mode Mermaid diagrams with click-to-zoom, and production build output.
license: MIT
---
# Wiki VitePress Packager
Transform generated wiki Markdown files into a polished VitePress static site with dark theme and interactive Mermaid diagrams.
## When to Activate
- User asks to "build a site" or "package as VitePress"
- User runs the `/deep-wiki:build` command
- User wants a browsable HTML output from generated wiki pages
## VitePress Scaffolding
Generate the following structure in a `wiki-site/` directory:
```
wiki-site/
├── .vitepress/
│ ├── config.mts
│ └── theme/
│ ├── index.ts
│ └── custom.css
├── public/
├── [generated .md pages]
├── package.json
└── index.md
```
## Config Requirements (`config.mts`)
- Use `withMermaid` wrapper from `vitepress-plugin-mermaid`
- Set `appearance: 'dark'` for dark-only theme
- Configure `themeConfig.nav` and `themeConfig.sidebar` from the catalogue structure
- Mermaid config must set dark theme variables:
```typescript
mermaid: {
theme: 'dark',
themeVariables: {
primaryColor: '#1e3a5f',
primaryTextColor: '#e0e0e0',
primaryBorderColor: '#4a9eed',
lineColor: '#4a9eed',
secondaryColor: '#2d4a3e',
tertiaryColor: '#2d2d3d',
background: '#1a1a2e',
mainBkg: '#1e3a5f',
nodeBorder: '#4a9eed',
clusterBkg: '#16213e',
titleColor: '#e0e0e0',
edgeLabelBackground: '#1a1a2e'
}
}
```
## Dark-Mode Mermaid: Three-Layer Fix
### Layer 1: Theme Variables (in config.mts)
Set via `mermaid.themeVariables` as shown above.
### Layer 2: CSS Overrides (`custom.css`)
Target Mermaid SVG elements with `!important`:
```css
.mermaid .node rect,
.mermaid .node circle,
.mermaid .node polygon { fill: #1e3a5f !important; stroke: #4a9eed !important; }
.mermaid .edgeLabel { background-color: #1a1a2e !important; color: #e0e0e0 !important; }
.mermaid text { fill: #e0e0e0 !important; }
.mermaid .label { color: #e0e0e0 !important; }
```
### Layer 3: Inline Style Replacement (`theme/index.ts`)
Mermaid inline `style` attributes override everything. Use `onMounted` + polling to replace them:
```typescript
import { onMounted } from 'vue'
// In setup()
onMounted(() => {
let attempts = 0
const fix = setInterval(() => {
document.querySelectorAll('.mermaid svg [style]').forEach(el => {
const s = (el as HTMLElement).style
if (s.fill && !s.fill.includes('#1e3a5f')) s.fill = '#1e3a5f'
if (s.stroke && !s.stroke.includes('#4a9eed')) s.stroke = '#4a9eed'
if (s.color) s.color = '#e0e0e0'
})
if (++attempts >= 20) clearInterval(fix)
}, 500)
})
```
Use `setup()` with `onMounted`, NOT `enhanceApp()` — DOM doesn't exist during SSR.
## Click-to-Zoom for Mermaid Diagrams
Wrap each `.mermaid` container in a clickable wrapper that opens a fullscreen modal:
```typescript
document.querySelectorAll('.mermaid').forEach(el => {
el.style.cursor = 'zoom-in'
el.addEventListener('click', () => {
const modal = document.createElement('div')
modal.className = 'mermaid-zoom-modal'
modal.innerHTML = el.outerHTML
modal.addEventListener('click', () => modal.remove())
document.body.appendChild(modal)
})
})
```
Modal CSS:
```css
.mermaid-zoom-modal {
position: fixed; inset: 0;
background: rgba(0,0,0,0.9);
display: flex; align-items: center; justify-content: center;
z-index: 9999; cursor: zoom-out;
}
.mermaid-zoom-modal .mermaid { transform: scale(1.5); }
```
## Post-Processing Rules
Before VitePress build, scan all `.md` files and fix:
- Replace `<br/>` with `<br>` (Vue template compiler compatibility)
- Wrap bare `<T>` generic parameters in backticks outside code fences
- Ensure every page has YAML frontmatter with `title` and `description`
## Build
```bash
cd wiki-site && npm install && npm run docs:build
```
Output goes to `wiki-site/.vitepress/dist/`.
## Known Gotchas
- Mermaid renders async — SVGs don't exist when `onMounted` fires. Must poll.
- `isCustomElement` compiler option for bare `<T>` causes worse crashes — do NOT use it
- Node text in Mermaid uses inline `style` with highest specificity — CSS alone won't fix it
- `enhanceApp()` runs during SSR where `document` doesn't exist — use `setup()` only
Alle Dateien
0 Dateienwiki-vitepress installieren
Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/deep-wiki/skills/wiki-vitepress # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
