opção
LarLar Skill Documentação wiki-vitepress

wiki-vitepress

microsoft/skills microsoft/skills

Pacotes que geram conteúdo wiki em Markdown em um site estático do VitePress com tema escuro, diagramas Mermaid em modo escuro com zoom ao clicar e saída de compilação para produção.

...Expandir tudo
33
Tempo atualizado 11 de Setembro de 2026

Wiki VitePress Packager

Transforme arquivos Markdown do wiki gerados em um site estático VitePress com acabamento profissional, com tema escuro e diagramas Mermaid interativos.

Quando ativar

  • O usuário solicita “criar um site” ou “empacotar como VitePress”
  • O usuário executa o comando /deep-wiki:build
  • O usuário deseja uma saída em HTML navegável a partir das páginas wiki geradas

Estrutura do VitePress

Gere a seguinte estrutura no diretório wiki-site/:

wiki-site/
├── .vitepress/
│   ├── config.mts
│   └── theme/
│       ├── index.ts
│       └── custom.css
├── public/
├── [páginas .md geradas]
├── package.json
└── index.md

Requisitos de configuração (config.mts)

  • Use o wrapper ` withMermaid ` do vitepress-plugin-mermaid
  • Defina appearance: 'dark' para um tema exclusivamente escuro
  • Configure themeConfig.nav e themeConfig.sidebar de acordo com a estrutura do catálogo
  • A configuração do Mermaid deve definir as variáveis do tema escuro:
mermaid: {
  theme: 'dark',
  themeVariables: {
    primaryColor: '#1e3a5f',
    primaryTextColor: '#e0e0e0',
    primaryBorderColor: '#4a9eed',
    lineColor: '#4a9eed',
    secondaryColor: '#2d4a3e',
    tertiaryColor: '#2d2d3d',
    background: '#1a1a2e',
    fundoPrincipal: '#1e3a5f',
    bordaDoNó: '#4a9eed',
    fundoDoAgrupamento: '#16213e',
    corDoTítulo: '#e0e0e0',
    fundoDaEtiquetaDaAresta: '#1a1a2e'
  }
}

Modo escuro do Mermaid: correção em três camadas

Camada 1: Variáveis do tema (no arquivo config.mts)

Defina por meio de ` mermaid.themeVariables `, conforme mostrado acima.

Camada 2: Substituições de CSS (custom.css)

Aplique !important aos elementos SVG do Mermaid:

.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 { cor: #e0e0e0 !important; }

Camada 3: Substituição de estilos inline (theme/index.ts)

Os atributos de estilo inline do Mermaid substituem tudo. Use onMounted + polling para substituí-los:

import { onMounted } from 'vue'

// Em 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() com onMounted, NÃO enhanceApp() — o DOM não existe durante o SSR.

Clique para ampliar diagramas Mermaid

Envolva cada contêiner .mermaid em um wrapper clicável que abra um modal em tela cheia:

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 do 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); }

Regras de pós-processamento

Antes da compilação do VitePress, verifique todos os arquivos .md e corrija:

  • Substituir
    por
    (compatibilidade com o compilador de modelos do Vue)
  • Envolva parâmetros genéricos entre crases fora das cercas de código
  • Garantir que todas as páginas tenham frontmatter YAML com título e descrição

Compilar

cd wiki-site && npm install && npm run docs:build

A saída vai para wiki-site/.vitepress/dist/.

Armadilhas conhecidas

  • O Mermaid é renderizado de forma assíncrona — os SVGs ainda não existem quando o evento onMounted é disparado. É necessário fazer uma consulta.
  • A opção de compilador `isCustomElement ` para `bare` causa falhas mais graves — NÃO a utilize
  • O texto do `Node` no Mermaid usa estilo inline com a maior especificidade — o CSS por si só não resolve o problema
  • O `enhanceApp()` é executado durante o SSR quando o documento ainda não existe — use apenas o `setup()`
Ver no GitHub
---
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

Todos os arquivos

1 arquivos

Instalar wiki-vitepress

Baixe e descompacte os arquivos de habilidades no diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/deep-wiki/skills/wiki-vitepress # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta da habilidade para .claude/skills/ O Claude detectará e utilizará automaticamente a habilidade
Repositório microsoft/skills

Habilidades relacionadas

tc-tracker
Tempo atualizado 27 de Agosto de 2026
nuxthub
Tempo atualizado 23 de Agosto de 2026
golang-dependency-injection
Tempo atualizado 29 de Junho de 2026
altimate-data-engineering-skills
Tempo atualizado 23 de Agosto de 2026
OR