import SwiftUI /// Renders a `@math` block asynchronously with a fallback to `VerbatimBlock`. struct MathBlockView: View { @Environment(\.norgTheme) private var theme let latex: String @State private var rendered: NorgMathImage? var body: some View { content .task(id: renderKey) { guard let renderer = theme.mathRenderer else { return } rendered = await renderer.render( latex: latex, mode: .block, fontSize: theme.mathFontSize, color: nil) } } @ViewBuilder private var content: some View { if let rendered { rendered.swiftUIImage .frame(width: rendered.size.width, height: rendered.size.height, alignment: .leading) .padding(theme.verbatimPadding) .frame(maxWidth: .infinity, alignment: .leading) .background(theme.codeBackground, in: RoundedRectangle(cornerRadius: 8)) } else { VerbatimBlock(label: nil, content: latex) } } private var renderKey: String { "\(latex)@\(theme.mathFontSize)" } }