ADR 0054 – Bloc de vue dans le corps d'une note
Accepté (2026-10-16, mode autonome)
ADR 0054 – Bloc de vue dans le corps d’une note
Statut : Accepté (2026-10-16, mode autonome)
Item 25 du backlog (jalon 3, vague 2 du document d’idées), pris par le fil « Documentation, puis capture en une ligne ». L’idée vient d’Obsidian Dataview et de Notion : un bloc dans une note affiche une vue YAML ou une requête en direct. Le moteur de vues existe (ADR 0028), la recherche à opérateurs aussi (ADR 0043) ; il manquait le rendu dans l’éditeur.
Décision
Syntaxe : un bloc de code sb-vue
```sb-vue
factures-a-payer
```
```sb-vue
type:tache statut:a-faire #maison echeance<7j
```
- Le contenu du bloc (lignes jointes par des espaces) est le nom d’une vue de
config/views/s’il en désigne une, sinon une recherche à opérateurs (même grammaire que la palette, ADR 0043). - Le langage s’appelle
sb-vueet nonvue, l’identifiant du langage Vue.js : un extrait de code Vue resterait sinon une recherche refusée. Un texte de plus de 500 caractères n’est ni l’un ni l’autre (aucune requête, l’aide s’affiche). - Une vue contextuelle (ADR 0036) prend la note comme nœud courant :
taches-du-projetdans la note d’un projet liste ses tâches. - Rien de nouveau dans le Markdown enregistré : c’est un bloc de code ordinaire. Hors de l’éditeur visuel (aperçu de la source, aperçu au survol, export), il reste lisible comme du code. Pas de nouvelle syntaxe à apprendre ni à migrer.
Rendu : décoration de l’éditeur visuel
- Une décoration ProseMirror ajoute, sous chaque bloc
sb-vue, un widget non éditable qui monte un composant Angular. Le composant interrogeGET /api/views/{nom}/results(avecnode= la note) ouGET /api/search/results?q=, et affiche les lignes avec la liste des vues (ADR 0030), comme les widgets de l’accueil : titre en lien, métadonnées, mise en forme conditionnelle. - En tête du widget : icône et libellé de la vue (ou « Recherche »), nombre de résultats, « Tout voir » (la vue) et un bouton pour actualiser. Au plus 10 lignes ; au-delà, « Tout voir », sauf pour une vue contextuelle, dont la page n’a pas de nœud courant (« Les 10 premiers seulement »).
- Le widget est recréé quand le texte du bloc change (clé de décoration = texte), avec une courte pause pendant la frappe ; un bloc vide affiche l’aide de la syntaxe ; une recherche refusée affiche les messages du serveur.
- Le document ProseMirror ne change pas : la décoration n’écrit rien, l’annulation et l’enregistrement ne voient que le bloc de code.
- Insertion : un bouton « Bloc de vue » dans la barre d’outils insère un bloc
sb-vuevide, le curseur dedans (l’aide cite une vue deconfig/). Dans un bloc de code ou un paragraphe non vide, il vient juste après, sans couper l’existant.
Côté serveur
Rien : les deux points d’accès existent et appliquent déjà les contrôles des vues (ADR 0028, 0043).
Alternatives écartées
- Nœud Tiptap dédié (atome avec attribut
source) : demande une sérialisation Markdown propre, que d’autres outils ne liraient pas ; le bloc de code est déjà un format portable. - Rendu côté serveur dans le HTML de l’aperçu : l’aperçu est du HTML statique assaini ; des données en direct y demanderaient une hydratation à part.
- Langage de requête propre au bloc (style Dataview) : la grammaire de la palette suffit et reste unique.
- Langage
vue(proposé par le document d’idées) : déjà pris par Vue.js, il aurait changé le sens de notes existantes.
Conséquences
- Une note peut servir de tableau de bord vivant (« Factures à payer » dans la note « Administratif »).
- Pas de pagination ni de tri dans le bloc : on suit le lien vers la vue pour cela.