wiki-vitepress
microsoft/skills
Ces packages génèrent du contenu wiki au format Markdown sous la forme d'un site statique VitePress avec un thème sombre, des diagrammes Mermaid en mode sombre avec zoom par clic, ainsi qu'une version finale prête pour la production.
...Développer toutWiki VitePress Packager
Transformez les fichiers Markdown wiki générés en un site statique VitePress soigné, doté d’un thème sombre et de diagrammes Mermaid interactifs.
Quand l'activer
- L'utilisateur demande de « créer un site » ou de « générer un package VitePress ».
- L'utilisateur exécute la commande
/deep-wiki:build - L'utilisateur souhaite obtenir un fichier HTML consultable à partir des pages wiki générées
Structure de base VitePress
Générez la structure suivante dans un répertoire wiki-site/:
wiki-site/
├── .vitepress/
│ ├── config.mts
│ └── theme/
│ ├── index.ts
│ └── custom.css
├── public/
├── [pages .md générées]
├── package.json
└── index.md
Exigences de configuration (config.mts)
- Utilisez le wrapper
withMermaiddevitepress-plugin-mermaid - Définissez
appearance: 'dark'pour un thème exclusivement sombre - Configurez
themeConfig.navetthemeConfig.sidebaren fonction de la structure du catalogue - La configuration Mermaid doit définir les variables du thème sombre :
mermaid: {
theme: 'dark',
themeVariables: {
primaryColor: '#1e3a5f',
primaryTextColor: '#e0e0e0',
primaryBorderColor: '#4a9eed',
lineColor: '#4a9eed',
secondaryColor: '#2d4a3e',
tertiaryColor: '#2d2d3d',
background: '#1a1a2e',
fondPrincipal : '#1e3a5f',
bordureNœud : '#4a9eed',
fondGroupe : '#16213e',
couleurTitre : '#e0e0e0',
edgeLabelBackground : '#1a1a2e'
}
}
Mode sombre Mermaid : correction à trois couches
Couche 1 : variables de thème (dans config.mts)
Définies via ` mermaid.themeVariables ` comme indiqué ci-dessus.
Couche 2 : Remplacements CSS (custom.css)
Ciblez les éléments SVG de Mermaid avec !important:
.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; }
Couche 3 : Remplacement des styles en ligne (theme/index.ts)
Les attributs de style en ligne de Mermaid ont priorité sur tout le reste. Utilisez onMounted + un polling pour les remplacer :
import { onMounted } from 'vue'
// Dans 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)
})
Utilisez setup() avec onMounted, et NON enhanceApp() — le DOM n'existe pas pendant le SSR.
Zoom par clic pour les diagrammes Mermaid
Enveloppez chaque conteneur .mermaid dans un wrapper cliquable qui ouvre une fenêtre modale en plein écran :
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 de la fenêtre modale :
.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); }
Règles de post-traitement
Avant la compilation avec VitePress, analysez tous les fichiers .md et corrigez :
- Remplacer
par(compatibilité avec le compilateur de modèles Vue) - Envelopper les
par des guillemets inversés à l'extérieur des blocs de code - S'assurer que chaque page comporte un frontmatter YAML avec
un titreetune description
Créer
cd wiki-site && npm install && npm run docs:build
Le résultat est placé dans wiki-site/.vitepress/dist/.
Pièges connus
- Mermaid effectue le rendu de manière asynchrone — les fichiers SVG n'existent pas lorsque
la méthode onMountedest déclenchée. Il faut effectuer une interrogation. - L'option de compilation
isCustomElementpour les éléments « bare »provoque des plantages plus graves — ne l’utilisez PAS - Le texte des nœuds dans Mermaid utilise
un styleen ligne avec la spécificité la plus élevée — le CSS seul ne suffit pas à résoudre le problème - La fonction
`enhanceApp()`s'exécute pendant le SSR alors quele documentn'existe pas — utilisez uniquement`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
Tous les fichiers
0 fichiersInstaller wiki-vitepress
Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/deep-wiki/skills/wiki-vitepress # Copy SKILL.md to your .claude/skills/ directory
Copier





Maison
