@@ -22,11 +22,24 @@ fileprivate let dateFormatter: DateFormatter = {
22
22
} ( )
23
23
24
24
struct Text < R: CustomRegistry > : View {
25
- let element : ElementNode
26
25
let context : LiveContext < R >
27
26
28
- init ( element: ElementNode , context: LiveContext < R > ) {
29
- self . element = element
27
+ // The view that's in the SwiftUI view tree needs to observe an element to respond to DOM changes,
28
+ // but we also need to construct a Text view with a specific element to handle nested <text>s.
29
+ // The `element` property returns the effective one, avoiding accessing the @ObservedElement when not
30
+ // installed in a view.
31
+ @ObservedElement private var observedElement : ElementNode
32
+ private var overrideElement : ElementNode ?
33
+ private var element : ElementNode {
34
+ overrideElement ?? observedElement
35
+ }
36
+
37
+ init ( context: LiveContext < R > ) {
38
+ self . context = context
39
+ }
40
+
41
+ private init ( overrideElement: ElementNode , context: LiveContext < R > ) {
42
+ self . overrideElement = overrideElement
30
43
self . context = context
31
44
}
32
45
@@ -119,7 +132,7 @@ struct Text<R: CustomRegistry>: View {
119
132
if let element = next. asElement ( ) {
120
133
switch element. tag {
121
134
case " text " :
122
- prev = prev + Self( element : element, context: context) . body
135
+ prev = prev + Self( overrideElement : element, context: context) . body
123
136
case " lvn-link " :
124
137
prev = prev + SwiftUI. Text (
125
138
. init( " [ \( element. innerText ( ) ) ]( \( element. attributeValue ( for: " destination " ) !) ) " )
0 commit comments