feat(draw): graph card template — circular node/edge layout (T-321)

graphTemplateHandler lowers a {nodes,edges} payload to SVG: a deterministic
circular layout of labelled <circle> nodes with <line> edges, self-contained
(own light backdrop + content colors, like a d2 card) and painted by the
shared renderer. Display-only (D-78); decoupled from the interactive graph
pane (T-323) since a static card only needs a layout->SVG. Honest error on
a duplicate id or an edge to an unknown node.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-30 00:00:44 +02:00
co-authored by Claude Opus 4.8
parent 64410e8047
commit c167a37ea7
4 changed files with 174 additions and 0 deletions
+2
View File
@@ -43,6 +43,7 @@ import 'package:clide/src/daemon/dispatcher.dart';
import 'package:clide/src/daemon/draw_commands.dart';
import 'package:clide/src/draw/compare_template.dart' show compareTemplateHandler;
import 'package:clide/src/draw/d2_template.dart' show d2TemplateHandler;
import 'package:clide/src/draw/graph_template.dart' show graphTemplateHandler;
import 'package:clide/src/daemon/editor_commands.dart';
import 'package:clide/src/daemon/files_commands.dart';
import 'package:clide/src/daemon/git_commands.dart';
@@ -405,6 +406,7 @@ Future<void> main() async {
() => kernelMessages?.publish,
registry: DrawingRegistry()
..register('d2', d2TemplateHandler())
..register('graph', graphTemplateHandler())
..register(
'compare',
compareTemplateHandler(