Render interactive architecture diagrams natively in the transcript

This commit is contained in:
Ian Gulliver
2026-10-21 15:01:28 -07:00
parent 08b8a3ab32
commit 47b62763ce
8 changed files with 1016 additions and 13 deletions
+14 -2
View File
@@ -44,6 +44,7 @@ enum LeftTab {
final class Overlays {
var alerts: [OverlayAlert] = []
var image: NSImage?
var diagram: BoxLayout?
var menu: OverlayMenu? {
didSet {
menuHover = false
@@ -64,7 +65,7 @@ final class Overlays {
@ObservationIgnored private var ctrl: @MainActor (String) -> Bool = { _ in false }
var isOpen: Bool {
!alerts.isEmpty || image != nil || menu != nil || modal != nil || switcher != nil
!alerts.isEmpty || image != nil || diagram != nil || menu != nil || modal != nil || switcher != nil
}
var dialogOpen: Bool {
@@ -121,6 +122,8 @@ final class Overlays {
answerModal("cancel")
} else if image != nil {
image = nil
} else if diagram != nil {
diagram = nil
} else if let switcher {
switcher.close()
} else if menu != nil {
@@ -190,7 +193,7 @@ final class Overlays {
}
return false
}
if image == nil, !marked, let switcher {
if image == nil, diagram == nil, !marked, let switcher {
if code == 48 {
switcher.inList.toggle()
return true
@@ -276,6 +279,15 @@ struct OverlayHost: View {
overlays.image = nil
}
}
if let diagram = overlays.diagram {
Palette.imageBackdrop
.onTapGesture {
overlays.diagram = nil
}
DiagramViewer(layout: diagram)
.id(diagram.id)
.padding(24)
}
if let menu = overlays.menu {
VStack(alignment: .leading, spacing: 0) {
ForEach(menu.entries) { entry in