blob: c29fdb60581cbc90c46a3d84b0af2744bdd2a11b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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)" }
}
|