- Toolbar de sélection sous le surlignage : ligne de style (T + type de bloc
dynamique → sous-menu Turn into), A/B/I/U/T barré/Tx, lien/surlignage/
code/équation/…, Comment + Ask AI, section grise Skills (4 actions) et pied
« Edit with AI » (Alt+⇧+E) ; positionnée sous la sélection (au-dessus si
manque de place), fermée au clic hors sélection
- « … » → menu contextuel de bloc existant (recherche « Search actions… »,
groupe Text, 10 actions + raccourcis, pied auteur/heure/taille)
- Info-bulle claire à droite des éléments du menu : data-tooltip-html +
classe .tooltip-light dans le tooltip global (app.js)
- Persistance du formatage inline : sérialiseur gtMd() (DOM formaté → source
markdown) branché sur sync() ; mdEsc() rend __…__ (u), ==…== (mark) et
$$…$$ (équation inline KaTeX, data-tex conservé)
- Fixes racine : askAI(idx) écrasé par askAI() → askAIBlock(idx) (menu de bloc,
Ctrl+J, Alt+⇧+E) ; ed.__x (Alpine v2) inexistant sous v3 → _xed() via
_x_dataStack[0] (showFmt/hideCommentBtn/mentions ne s'exécutaient jamais) ;
ancre de sélection nœud élément gérée ; checkMd() appelé avec un id au lieu
de l'index (exception à chaque barre d'espace)
- Tests : tests/test_v762_selection_toolbar.py (roundtrip gtMd/mdEsc sous node)
+ e2e/v762_selection_toolbar.spec.js (structure, sous-menus, géométrie,
persistance bold/highlight après reload) ; suite complète 1368 passed / 0
failed, ruff OK, OpenAPI régénérée 7.62.0 (525 chemins)
- panneau de gauche : recherche « Search actions... », section « Text », les
10 actions dans l'ordre Notion (Turn into, Color, Copy link Alt+⇧+L,
Duplicate Ctrl+D, Move to Ctrl+⇧+P, Delete Del, Comment Ctrl+⇧+M,
Suggest edits Ctrl+⇧+Alt+X, Ask AI Ctrl+J, Skills) + pied métadonnées
(auteur / heure de dernière édition / mots-caractères du bloc)
- panneau de droite au survol (fermeture différée) : Turn into avec ✓ du
type actuel + Heading 1-4, listes, To-do, Toggle, Code, Quote, Callout,
Block equation, Synced block, 2/3/4/5 columns (info-bulle « Create N
columns of blocks ») ; Color avec Last used / Text color / Background
color (10 couleurs nommées, ✓ courante, carré de couleur) ; Skills =
compétences réelles de l'espace appliquées au bloc via l'IA
- turnInto(idx,type,cols) : crée N colonnes, sélecteur de source pour les
blocs synchronisés ; setBlockColor mémorise la dernière couleur (Ctrl+⇧+H)
- nouvelles actions éditeur : commentBlock (sélection + tiroir), askAI
(composeur sans effacer le bloc), suggestEdit / runSkill (IA, insertion
sous le bloc), applyLastColor
- raccourcis : handler clavier dédié (Ctrl+J, Ctrl+⇧+H, Ctrl+⇧+M,
Ctrl+⇧+Alt+X, Alt+⇧+L, Ctrl+⇧+P, Ctrl+D sans double, Del seulement avec le
menu ouvert, Échap) — les entrées Copy/Cut/Paste du menu sont retirées
(Ctrl+C/X/V conservés)
- styles : .bm-group, .bm-foot, .bm-check, .bm-current, .bm-dot, sous-menu
60vh, recherche focalisée à l'ouverture
- tests : tests/test_v761_block_menu.py (9 tests, dont node : colonnes) +
test_v7593 adapté ; suite complète 1362 passed / 0 failed, ruff 0, eslint 0
- livraison : VERSION + app/main = 7.61.0, OpenAPI 525 chemins, CHANGELOG