ADR 0055 – Commandes « / » et dates en ligne dans l'éditeur
Accepté (2026-10-16, mode autonome)
ADR 0055 – Commandes « / » et dates en ligne dans l’éditeur
Statut : Accepté (2026-10-16, mode autonome)
Item 24 du jalon 3 (vague 2 du document d’idées) :
- taper
/dans l’éditeur visuel ouvre un menu pour insérer un encadré, un lien, une date, une table, un bloc de code ou un modèle ; - dans le texte,
@demain(et les autres dates relatives) devient une date cliquable.
Contexte
- L’éditeur visuel est Tiptap (ADR 0008). Il a déjà une autocomplétion après
[[(ADR 0009), construite sur@tiptap/suggestion. - Les
#tagsdu corps sont des décorations sur du texte, pas des nœuds (ADR 0011). Les encadrés sont des citations> [!type](ADR 0010). - La capture en une ligne (ADR 0042) comprend déjà les dates en français, mais côté serveur (
CaptureDates). - Le Markdown est la forme de stockage : tout ajout doit survivre à l’aller-retour Markdown ↔ éditeur sans perte.
Décision
Dates en ligne : @AAAA-MM-JJ dans le Markdown
- Stockage : une date en ligne est écrite
@2026-10-17. C’est du texte, sans nœud ni balise propre : la même forme dans l’export, les autres outils et la recherche plein texte. Il faut une frontière avant le@(début, blanc, ouvrant) :jean@exemple.comn’est jamais une date. - Saisie :
@ouvre un menu de dates : la saisie si elle est une date (« 22/10 »), puis les formes usuelles qui commencent par elle (« dem » → demain, « dans » → dans 1 semaine…), chacune avec la date complète. Le menu s’arrête à la première espace : les formes en plusieurs mots (« dans 3 jours », « 1er novembre ») se choisissent parmi les propositions ou s’écrivent en chiffres (« 01/11 ») ;@demainsuivi d’une espace ou d’une ponctuation devient directement@2026-10-17.
- Grammaire :
french-date.tsreprend celle de la capture (CaptureDates) : aujourd’hui, demain, après-demain, jours de la semaine, « la semaine prochaine », « dans N jours / semaines / mois », 22/10, « 1er novembre 2026 ». La tablefrench-date-cases.jsonest lue par Vitest et parCaptureDatesTest: les deux grammaires ne peuvent pas diverger sans qu’un test casse. - Éditeur : la date reste visible sous sa forme écrite, décorée et avec la date complète en infobulle (« samedi 17 octobre 2026 · demain »). Cacher le texte derrière un libellé rendrait le curseur et la sélection trompeurs.
- Clic : le sélecteur de date du navigateur s’ouvre sur la date, et la nouvelle valeur la remplace.
- Ctrl/⌘+clic : ce qui en parle.
- Aperçu : un lien « sam. 17 oct. », date complète en infobulle. Le nettoyage HTML retire les boutons ; un lien reste focalisable et s’active à Entrée. Un clic (avec ou sans Ctrl) ouvre la palette sur
"2026-10-17": la recherche plein texte trouve les notes qui citent ce jour. Elle ne lit pas les champs date des aspects (les échéances ne sont pas indexées) : montrer aussi les nœuds dus ce jour-là est une piste pour le backlog, pas une promesse de cette tranche.
Menu « / »
/en début de ligne ou après une espace (jamais au milieu d’un mot, ni dans le code) ouvre les commandes, filtrées par mots sans casse ni accents :- titres 1 à 3, listes (puces, numérotée, tâches), citation ;
- lien vers un nœud (insère
[[, qui ouvre la recherche existante) ; - date (insère
@, qui ouvre le menu des dates) et date du jour ; - table 3×3, bloc de code, séparateur, bloc de vue (ADR 0054) ;
- encadrés de chaque type (les plus courants d’abord ;
> [!type]sans titre écrit, l’encadré affiche celui de son type) ; - un modèle (ADR 0016) qui a un corps : son corps, variables résolues par le serveur (
templateDraft, fuseau du navigateur), est inséré en Markdown à la place de la saisie.
- La saisie
/…est retirée avant la commande. Échap ferme le menu. - Accessibilité : même motif que les liens wiki. La liste est un
role="listbox"reliée au contenu éditable pararia-controlsetaria-activedescendant; ↑↓, Entrée, Tab et la souris sont pris en charge ; le nombre de propositions est annoncé.
Alternatives écartées
- Nœud Tiptap « date » avec une forme Markdown propre (
<time>) : il faudrait une syntaxe de stockage qui ne serait ni du Markdown courant ni lisible ailleurs. Une décoration sur du texte suit déjà la règle des#tags. - Libellé « demain » figé dans le texte : il devient faux le lendemain. L’ISO est stable ; le relatif est calculé à l’affichage.
- Analyser les dates côté serveur à chaque frappe : trop lent pour un menu, et inutile hors ligne. La table partagée garantit l’égalité des deux grammaires.
Conséquences
- Dans l’éditeur, la date reste
@2026-10-17à l’écran ; la forme lisible est dans l’aperçu et l’infobulle. - La palette garde sa règle (ADR 0014) : la première entrée reste « Capturer ». Après un clic sur une date, les résultats sont dessous : ↓ puis Entrée.
- Le menu « / » lit la liste des modèles à l’ouverture de l’éditeur : une requête par application, mise en cache par
DefinitionsStore. - Pendant une recherche
[[…]], ni « / » ni « @ » n’ouvrent leur menu : Entrée revient toujours à la recherche de lien. - Le libellé relatif (« demain ») est calculé à l’affichage : une page laissée ouverte après minuit le garde jusqu’à la modification suivante.