ObsiViewer/vault/tests/nimbus-editor-snapshot.md
Bruno Charest b695095593 ```
feat: add line numbers to code blocks with gutter styling

- Implemented line number display with absolute positioned gutter (40px width, right-aligned text)
- Added dynamic padding to pre element based on showLineNumbers state (3.5rem left padding when enabled)
- Moved hljs import to top-level for better performance and removed redundant dynamic imports
- Added ViewEncapsulation.None to enable global hljs theme styling
- Enhanced gutter styling with semi-transparent background, border, and pointer
2025-11-19 18:53:27 -05:00

9.6 KiB

title, nimbusEditor, documentModelFormat
title nimbusEditor documentModelFormat
Éditeur Nimbus — Section Tests true block-model-v1
{
  "id": "block_1763149113471_461xyut80",
  "title": "Page Tests",
  "blocks": [
    {
      "id": "block_1763595565820_kugx72rs2",
      "type": "bookmark",
      "props": {
        "url": "https://antigravity.google/support",
        "title": "Google Antigravity",
        "description": "Google Antigravity - Build the new way",
        "siteName": "Google Antigravity",
        "imageUrl": "https://antigravity.google/assets/image/sitecards/sitecard-default.png",
        "faviconUrl": "assets/image/antigravity-logo.png",
        "loading": false,
        "error": null
      },
      "meta": {
        "createdAt": "2025-11-19T23:39:25.820Z",
        "updatedAt": "2025-11-19T23:48:19.732Z"
      }
    },
    {
      "id": "block_1763591724959_af8w3g4ra",
      "type": "code",
      "props": {
        "code": "{\r\n  \"id\": \"block_1763149113471_461xyut80\",\r\n  \"title\": \"Page Tests\",\r\n  \"blocks\": [\r\n    {\r\n      \"id\": \"block_1763591049445_1hgsuarl4\",\r\n      \"type\": \"code\",\r\n      \"props\": {\r\n        \"code\": \"#!/usr/bin/env pwsh\\r\\n# Script de démarrage rapide pour ObsiViewer en mode développement\\r\\n\\r\\nparam(\\r\\n    [string]$VaultPath = \\\"./vault\\\",\\r\\n    [switch]$SkipMeili,\\r\\n    [switch]$ResetMeili,\\r\\n    [switch]$Help\\r\\n)\\r\\n\\r\\nif ($Help) {\\r\\n    Write-Host @\\\"\\r\\nUsage: .\\\\start-dev.ps1 [-VaultPath <path>] [-SkipMeili] [-Help]\\r\\n\\r\\nOptions:\\r\\n  -VaultPath <path>  Chemin vers votre vault Obsidian (défaut: ./vault)\\r\\n  -SkipMeili         Ne pas démarrer Meilisearch\\r\\n  -ResetMeili        Supprimer le conteneur et le volume Meilisearch avant de redémarrer\\r\\n  -SkipMeili         Ne pas démarrer Meilisearch\\r\\n  -Help              Afficher cette aide\\r\\n\\r\\nExemples:\\r\\n  .\\\\start-dev.ps1\\r\\n  .\\\\start-dev.ps1 -VaultPath C:\\\\Users\\\\moi\\\\Documents\\\\MonVault\\r\\n  .\\\\start-dev.ps1 -SkipMeili\\r\\n\\\"@\\r\\n    exit 0\\r\\n}\\r\\n\\r\\n$ErrorActionPreference = \\\"Stop\\\"\\r\\n\\r\\nWrite-Host \\\"🚀 Démarrage d'ObsiViewer en mode développement\\\" -ForegroundColor Cyan\\r\\nWrite-Host \\\"\\\"\\r\\n\\r\\n# Diagnostic: Vérifier les variables Meilisearch existantes\\r\\n$meiliVars = Get-ChildItem Env: | Where-Object { $_.Name -like 'MEILI*' }\\r\\nif ($meiliVars) {\\r\\n    Write-Host \\\"⚠️  Variables Meilisearch détectées dans l'environnement:\\\" -ForegroundColor Yellow\\r\\n    foreach ($var in $meiliVars) {\\r\\n        Write-Host \\\"   $($var.Name) = $($var.Value)\\\" -ForegroundColor Gray\\r\\n    }\\r\\n    Write-Host \\\"   Ces variables seront purgées...\\\" -ForegroundColor Yellow\\r\\n    Write-Host \\\"\\\"\\r\\n}\\r\\n\\r\\n# Vérifier que le vault existe\\r\\nif (-not (Test-Path $VaultPath)) {\\r\\n    Write-Host \\\"⚠️  Le vault n'existe pas: $VaultPath\\\" -ForegroundColor Yellow\\r\\n    Write-Host \\\"   Création du dossier...\\\" -ForegroundColor Yellow\\r\\n    New-Item -ItemType Directory -Path $VaultPath -Force | Out-Null\\r\\n}\\r\\n\\r\\n$VaultPathAbsolute = Resolve-Path $VaultPath\\r\\nWrite-Host \\\"📁 Vault: $VaultPathAbsolute\\\" -ForegroundColor Green\\r\\n\\r\\n# Vérifier si .env existe\\r\\nif (-not (Test-Path \\\".env\\\")) {\\r\\n    Write-Host \\\"⚠️  Fichier .env manquant\\\" -ForegroundColor Yellow\\r\\n    if (Test-Path \\\".env.example\\\") {\\r\\n        Write-Host \\\"   Copie de .env.example vers .env...\\\" -ForegroundColor Yellow\\r\\n        Copy-Item \\\".env.example\\\" \\\".env\\\"\\r\\n    }\\r\\n}\\r\\n\\r\\n# Purger TOUTES les variables d'environnement Meilisearch conflictuelles\\r\\n$meiliVarsToPurge = Get-ChildItem Env: | Where-Object { $_.Name -like 'MEILI*' }\\r\\nif ($meiliVarsToPurge) {\\r\\n    Write-Host \\\"🧹 Purge des variables Meilisearch existantes...\\\" -ForegroundColor Cyan\\r\\n    foreach ($var in $meiliVarsToPurge) {\\r\\n        Remove-Item \\\"Env:\\\\$($var.Name)\\\" -ErrorAction SilentlyContinue\\r\\n        Write-Host \\\"   ✓ $($var.Name) supprimée\\\" -ForegroundColor Gray\\r\\n    }\\r\\n    Write-Host \\\"\\\"\\r\\n}\\r\\n\\r\\n# Définir les variables d'environnement pour la session\\r\\n$env:VAULT_PATH = $VaultPathAbsolute\\r\\n$env:MEILI_MASTER_KEY = \\\"devMeiliKey123\\\"\\r\\n$env:MEILI_HOST = \\\"http://127.0.0.1:7700\\\"\\r\\n$env:PORT = \\\"4000\\\"\\r\\n\\r\\nWrite-Host \\\"✅ Variables d'environnement définies:\\\" -ForegroundColor Green\\r\\nWrite-Host \\\"   VAULT_PATH=$env:VAULT_PATH\\\" -ForegroundColor Gray\\r\\nWrite-Host \\\"   MEILI_MASTER_KEY=devMeiliKey123\\\" -ForegroundColor Gray\\r\\nWrite-Host \\\"   MEILI_HOST=$env:MEILI_HOST\\\" -ForegroundColor Gray\\r\\n\\r\\n# Démarrer Meilisearch si demandé\\r\\nif (-not $SkipMeili) {\\r\\n    Write-Host \\\"\\\"\\r\\n    Write-Host \\\"🔍 Démarrage de Meilisearch...\\\" -ForegroundColor Cyan\\r\\n    \\r\\n    if ($ResetMeili) {\\r\\n        Write-Host \\\"🧹 Réinitialisation de Meilisearch (conteneur + volume)...\\\" -ForegroundColor Yellow\\r\\n        try {\\r\\n            Push-Location \\\"docker-compose\\\"\\r\\n            docker compose down -v meilisearch 2>$null | Out-Null\\r\\n            Pop-Location\\r\\n        } catch {\\r\\n            Pop-Location 2>$null\\r\\n        }\\r\\n        # Forcer la suppression ciblée si nécessaire\\r\\n        docker rm -f obsiviewer-meilisearch 2>$null | Out-Null\\r\\n        docker volume rm -f docker-compose_meili_data 2>$null | Out-Null\\r\\n    }\\r\\n\\r\\n    # Vérifier si Meilisearch est déjà en cours\\r\\n    $meiliRunning = docker ps --filter \\\"name=obsiviewer-meilisearch\\\" --format \\\"{{.Names}}\\\" 2>$null\\r\\n    \\r\\n    if ($meiliRunning) {\\r\\n        Write-Host \\\"   ✓ Meilisearch déjà en cours\\\" -ForegroundColor Green\\r\\n    } else {\\r\\n        npm run meili:up\\r\\n        Write-Host \\\"   ⏳ Attente du démarrage de Meilisearch...\\\" -ForegroundColor Yellow\\r\\n    }\\r\\n    \\r\\n    # Attendre la santé du service /health\\r\\n    $healthTimeoutSec = 30\\r\\n    $healthUrl = \\\"http://127.0.0.1:7700/health\\\"\\r\\n    $startWait = Get-Date\\r\\n    while ($true) {\\r\\n        try {\\r\\n            $resp = Invoke-RestMethod -Uri $healthUrl -Method GET -TimeoutSec 3\\r\\n            if ($resp.status -eq \\\"available\\\") {\\r\\n                Write-Host \\\"   ✓ Meilisearch est prêt\\\" -ForegroundColor Green\\r\\n                break\\r\\n            }\\r\\n        } catch {\\r\\n            # ignore and retry\\r\\n        }\\r\\n        if (((Get-Date) - $startWait).TotalSeconds -ge $healthTimeoutSec) {\\r\\n            Write-Host \\\"   ⚠️  Timeout d'attente de Meilisearch (continuer quand même)\\\" -ForegroundColor Yellow\\r\\n            break\\r\\n        }\\r\\n        Start-Sleep -Milliseconds 500\\r\\n    }\\r\\n\\r\\n    Write-Host \\\"\\\"\\r\\n    Write-Host \\\"📊 Indexation du vault...\\\" -ForegroundColor Cyan\\r\\n    npm run meili:reindex\\r\\n}\\r\\n\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"✅ Configuration terminée!\\\" -ForegroundColor Green\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"Les variables d'environnement sont définies dans cette session PowerShell.\\\" -ForegroundColor Yellow\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"Pour démarrer l'application, ouvrez 2 terminaux:\\\" -ForegroundColor Yellow\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"Terminal 1 (Backend):\\\" -ForegroundColor Cyan\\r\\nWrite-Host \\\"  node server/index.mjs\\\" -ForegroundColor White\\r\\nWrite-Host \\\"  (Les variables VAULT_PATH, MEILI_MASTER_KEY sont déjà définies)\\\" -ForegroundColor Gray\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"Terminal 2 (Frontend):\\\" -ForegroundColor Cyan\\r\\nWrite-Host \\\"  npm run dev\\\" -ForegroundColor White\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"⚠️  IMPORTANT: Si vous fermez ce terminal, les variables seront perdues.\\\" -ForegroundColor Yellow\\r\\nWrite-Host \\\"   Relancez ce script ou définissez manuellement:\\\" -ForegroundColor Yellow\\r\\nWrite-Host \\\"   `$env:VAULT_PATH='$VaultPathAbsolute'\\\" -ForegroundColor Gray\\r\\nWrite-Host \\\"   `$env:MEILI_MASTER_KEY='devMeiliKey123'\\\" -ForegroundColor Gray\\r\\nWrite-Host \\\"   Remove-Item Env:\\\\MEILI_API_KEY -ErrorAction SilentlyContinue\\\" -ForegroundColor Gray\\r\\nWrite-Host \\\"\\\"\\r\\nWrite-Host \\\"Accès:\\\" -ForegroundColor Yellow\\r\\nWrite-Host \\\"  Frontend:    http://localhost:3000\\\" -ForegroundColor White\\r\\nWrite-Host \\\"  Backend API: http://localhost:4000\\\" -ForegroundColor White\\r\\nWrite-Host \\\"  Meilisearch: http://localhost:7700\\\" -ForegroundColor White\\r\\nWrite-Host \\\"\\\"\\r\\n\",\r\n        \"lang\": \"powershell\",\r\n        \"theme\": \"default\",\r\n        \"showLineNumbers\": true,\r\n        \"enableWrap\": false,\r\n        \"collapsed\": false,\r\n        \"font\": \"courier\",\r\n        \"autoDetectLang\": false\r\n      },\r\n      \"meta\": {\r\n        \"createdAt\": \"2025-11-19T22:24:09.445Z\",\r\n        \"updatedAt\": \"2025-11-19T22:33:16.600Z\"\r\n      }\r\n    }\r\n  ],\r\n  \"meta\": {\r\n    \"createdAt\": \"2025-11-14T19:38:33.471Z\",\r\n    \"updatedAt\": \"2025-11-19T22:33:16.600Z\"\r\n  }\r\n}\n",
        "lang": "json",
        "showLineNumbers": true,
        "enableWrap": false,
        "collapsed": true,
        "autoDetectLang": false,
        "theme": "darcula",
        "font": "fira"
      },
      "meta": {
        "createdAt": "2025-11-19T22:35:24.959Z",
        "updatedAt": "2025-11-19T23:39:21.275Z"
      }
    }
  ],
  "meta": {
    "createdAt": "2025-11-14T19:38:33.471Z",
    "updatedAt": "2025-11-19T23:48:19.732Z"
  }
}