5.3 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			5.3 KiB
		
	
	
	
	
	
	
	
Wikilinks & Graph View - Guide de démarrage rapide
🚀 Intégration en 5 minutes
Étape 1 : Scanner le vault
Dans votre service principal de gestion du vault :
// vault.service.ts ou app.component.ts
import { NoteIndexService } from './services/note-index.service';
export class VaultService {
  private noteIndexService = inject(NoteIndexService);
  
  loadVault() {
    this.http.get<Note[]>('/api/notes').subscribe(notes => {
      this.notes.set(notes);
      
      // Scanner pour construire l'index
      this.noteIndexService.scanVault(notes);
    });
  }
}
Étape 2 : Activer les previews dans note-viewer
// Votre composant de vue de note
@Component({
  selector: 'app-note-page',
  template: `
    <app-note-viewer
      [note]="note()"
      [noteHtmlContent]="htmlContent()"
      [allNotes]="allNotes()"  <!-- IMPORTANT -->
      (wikiLinkActivated)="navigateToNote($event)">
    </app-note-viewer>
  `
})
export class NotePageComponent {
  note = signal<Note>(...);
  allNotes = signal<Note[]>(...); // Toutes les notes du vault
  
  navigateToNote(link: WikiLinkActivation) {
    this.router.navigate(['/note', link.target], {
      fragment: link.heading || link.block
    });
  }
}
Étape 3 : Ajouter le Graph View
// note-page.component.ts
import { GraphViewContainerComponent } from './components/graph-view-container/graph-view-container.component';
@Component({
  template: `
    <div class="note-page">
      <!-- Toggle Document/Graph -->
      <div class="toolbar">
        <button (click)="viewMode.set('document')">Document</button>
        <button (click)="viewMode.set('graph')">Graph</button>
      </div>
      
      <!-- Content -->
      @if (viewMode() === 'document') {
        <app-note-viewer [note]="note()" [allNotes]="allNotes()">
        </app-note-viewer>
      } @else {
        <app-graph-view-container
          [centerNoteId]="note().id"
          (nodeSelected)="navigateToNote($event)">
        </app-graph-view-container>
      }
    </div>
  `,
  imports: [NoteViewerComponent, GraphViewContainerComponent]
})
export class NotePageComponent {
  viewMode = signal<'document' | 'graph'>('document');
  note = signal<Note>(...);
  allNotes = signal<Note[]>(...);
  
  navigateToNote(noteIdOrLink: string | WikiLinkActivation) {
    if (typeof noteIdOrLink === 'string') {
      this.router.navigate(['/note', noteIdOrLink]);
    } else {
      this.router.navigate(['/note', noteIdOrLink.target], {
        fragment: noteIdOrLink.heading || noteIdOrLink.block
      });
    }
  }
}
✅ Vérification
Test 1 : Wikilinks
Créez une note avec ce contenu :
# Test Note
Ce lien [[autre-note]] devrait être cliquable.
Ce lien avec alias [[autre-note|Mon Alias]] aussi.
Ce lien vers une section [[autre-note#Introduction]].
Attendu :
- Les liens sont bleus et soulignés
- Hover → preview card apparaît
- Clic → navigation
Test 2 : Graph View
- Ouvrez une note
- Cliquez sur "Graph"
- Vous devriez voir :
- Le nœud central (note actuelle) mis en évidence
- Les notes liées autour
- Un panneau d'options à droite
 
Test 3 : Preview au survol
- Hovez sur un wikilink
- Attendez 300ms
- Une carte devrait apparaître avec :
- Le titre de la note
- Un extrait du contenu
- Un bouton "↗" pour ouvrir
 
🎨 Personnalisation
Changer les couleurs des wikilinks
/* styles.css */
:root {
  --wiki-link: #10b981;           /* Vert pour les liens valides */
  --wiki-link-hover: #059669;
  --wiki-link-orphan: #ef4444;    /* Rouge pour les orphelins */
  --wiki-link-orphan-hover: #dc2626;
}
Ajuster les forces du graphe
<app-graph-view-container
  [centerNoteId]="note().id"
  [initialOptions]="{
    forces: {
      chargeStrength: -150,      // Plus de répulsion
      linkDistance: 120,         // Liens plus longs
      centerStrength: 0.1        // Plus de centrage
    }
  }">
</app-graph-view-container>
🐛 Problèmes courants
"Les previews ne fonctionnent pas"
// ❌ MAUVAIS
<app-note-viewer [note]="note()">
</app-note-viewer>
// ✅ BON
<app-note-viewer [note]="note()" [allNotes]="allNotes()">
</app-note-viewer>
"Le graphe est vide"
// Vérifiez que le scan a été fait
ngOnInit() {
  this.noteIndexService.scanVault(this.allNotes());
  
  // Vérifiez qu'il y a des nœuds
  const nodes = this.noteIndexService.getAllNodes();
  console.log('Nodes:', nodes.length);
}
"Les performances sont mauvaises"
// Limiter la profondeur du graphe
buildGraphData(centerNoteId, 1)  // Au lieu de 2
// Ou filtrer les orphelins
const graphData = this.noteIndexService.buildGraphData(centerNoteId)
  .filter(node => node.backlinks.length > 0 || node.outlinks.length > 0);
📖 Documentation complète
Pour plus de détails, consultez :
- WIKILINKS_GRAPH_IMPLEMENTATION.md - Documentation complète
- Architecture et API
- Tests et benchmarks
🎯 Prochaines étapes
- ✅ Intégration de base fonctionnelle
- ⏭️ Ajouter le zoom/pan au graphe (d3-zoom)
- ⏭️ Implémenter les groupes de nœuds
- ⏭️ Export du graphe en PNG
- ⏭️ Support mobile (long-press + bottom sheet)