ripple 0.3.71 → 0.3.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +2 -8
  4. package/src/runtime/index-client.js +3 -13
  5. package/src/runtime/internal/client/blocks.js +3 -25
  6. package/src/runtime/internal/client/for.js +80 -5
  7. package/src/runtime/internal/client/index.js +0 -2
  8. package/src/runtime/internal/client/types.d.ts +0 -10
  9. package/tests/client/__snapshots__/computed-properties.test.tsrx.snap +8 -0
  10. package/tests/client/__snapshots__/for.test.tsrx.snap +22 -0
  11. package/tests/client/__snapshots__/html.test.tsrx.snap +4 -0
  12. package/tests/client/array/array.copy-within.test.tsrx +19 -19
  13. package/tests/client/array/array.derived.test.tsrx +97 -109
  14. package/tests/client/array/array.iteration.test.tsrx +28 -28
  15. package/tests/client/array/array.mutations.test.tsrx +68 -68
  16. package/tests/client/array/array.static.test.tsrx +82 -92
  17. package/tests/client/array/array.to-methods.test.tsrx +15 -15
  18. package/tests/client/async-suspend.test.tsrx +180 -179
  19. package/tests/client/basic/__snapshots__/basic.attributes.test.tsrx.snap +2 -0
  20. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +4 -0
  21. package/tests/client/basic/basic.attributes.test.tsrx +273 -317
  22. package/tests/client/basic/basic.collections.test.tsrx +59 -71
  23. package/tests/client/basic/basic.components.test.tsrx +196 -222
  24. package/tests/client/basic/basic.errors.test.tsrx +72 -78
  25. package/tests/client/basic/basic.events.test.tsrx +80 -85
  26. package/tests/client/basic/basic.get-set.test.tsrx +54 -64
  27. package/tests/client/basic/basic.hmr.test.tsrx +15 -19
  28. package/tests/client/basic/basic.reactivity.test.tsrx +121 -135
  29. package/tests/client/basic/basic.rendering.test.tsrx +273 -178
  30. package/tests/client/basic/basic.utilities.test.tsrx +8 -10
  31. package/tests/client/boundaries.test.tsrx +18 -18
  32. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -76
  33. package/tests/client/compiler/compiler.attributes.test.tsrx +18 -14
  34. package/tests/client/compiler/compiler.basic.test.tsrx +364 -296
  35. package/tests/client/compiler/compiler.regex.test.tsrx +40 -44
  36. package/tests/client/compiler/compiler.tracked-access.test.tsrx +57 -38
  37. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  38. package/tests/client/compiler/compiler.typescript.test.tsrx +4 -3
  39. package/tests/client/composite/composite.dynamic-components.test.tsrx +41 -44
  40. package/tests/client/composite/composite.generics.test.tsrx +165 -167
  41. package/tests/client/composite/composite.props.test.tsrx +66 -74
  42. package/tests/client/composite/composite.reactivity.test.tsrx +132 -166
  43. package/tests/client/composite/composite.render.test.tsrx +92 -101
  44. package/tests/client/computed-properties.test.tsrx +14 -18
  45. package/tests/client/context.test.tsrx +14 -18
  46. package/tests/client/css/global-additional-cases.test.tsrx +491 -437
  47. package/tests/client/css/global-advanced-selectors.test.tsrx +169 -153
  48. package/tests/client/css/global-at-rules.test.tsrx +71 -66
  49. package/tests/client/css/global-basic.test.tsrx +105 -98
  50. package/tests/client/css/global-classes-ids.test.tsrx +128 -114
  51. package/tests/client/css/global-combinators.test.tsrx +83 -78
  52. package/tests/client/css/global-complex-nesting.test.tsrx +134 -120
  53. package/tests/client/css/global-edge-cases.test.tsrx +138 -120
  54. package/tests/client/css/global-keyframes.test.tsrx +108 -96
  55. package/tests/client/css/global-nested.test.tsrx +88 -78
  56. package/tests/client/css/global-pseudo.test.tsrx +104 -98
  57. package/tests/client/css/global-scoping.test.tsrx +145 -125
  58. package/tests/client/css/style-identifier.test.tsrx +62 -69
  59. package/tests/client/date.test.tsrx +83 -83
  60. package/tests/client/dynamic-elements.test.tsrx +227 -283
  61. package/tests/client/events.test.tsrx +252 -266
  62. package/tests/client/for.test.tsrx +120 -127
  63. package/tests/client/head.test.tsrx +40 -48
  64. package/tests/client/html.test.tsrx +37 -49
  65. package/tests/client/input-value.test.tsrx +1125 -1354
  66. package/tests/client/lazy-array.test.tsrx +10 -16
  67. package/tests/client/lazy-destructuring.test.tsrx +169 -221
  68. package/tests/client/map.test.tsrx +39 -41
  69. package/tests/client/media-query.test.tsrx +15 -19
  70. package/tests/client/object.test.tsrx +46 -56
  71. package/tests/client/portal.test.tsrx +31 -37
  72. package/tests/client/ref.test.tsrx +173 -193
  73. package/tests/client/return.test.tsrx +62 -37
  74. package/tests/client/set.test.tsrx +33 -33
  75. package/tests/client/svg.test.tsrx +195 -215
  76. package/tests/client/switch.test.tsrx +201 -191
  77. package/tests/client/track-async-hydration.test.tsrx +14 -18
  78. package/tests/client/tracked-index-access.test.tsrx +18 -28
  79. package/tests/client/try.test.tsrx +494 -619
  80. package/tests/client/tsx.test.tsrx +290 -371
  81. package/tests/client/typescript-generics.test.tsrx +121 -129
  82. package/tests/client/url/url.derived.test.tsrx +21 -25
  83. package/tests/client/url/url.parsing.test.tsrx +35 -35
  84. package/tests/client/url/url.partial-removal.test.tsrx +32 -32
  85. package/tests/client/url/url.reactivity.test.tsrx +68 -72
  86. package/tests/client/url/url.serialization.test.tsrx +8 -8
  87. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +21 -27
  88. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +16 -16
  89. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +37 -37
  90. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +56 -60
  91. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +32 -34
  92. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +9 -9
  93. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +10 -10
  94. package/tests/hydration/compiled/client/basic.js +396 -325
  95. package/tests/hydration/compiled/client/composite.js +52 -44
  96. package/tests/hydration/compiled/client/for.js +734 -604
  97. package/tests/hydration/compiled/client/head.js +183 -103
  98. package/tests/hydration/compiled/client/html.js +93 -86
  99. package/tests/hydration/compiled/client/if-children.js +95 -71
  100. package/tests/hydration/compiled/client/if.js +113 -89
  101. package/tests/hydration/compiled/client/mixed-control-flow.js +225 -209
  102. package/tests/hydration/compiled/client/nested-control-flow.js +94 -98
  103. package/tests/hydration/compiled/client/reactivity.js +26 -24
  104. package/tests/hydration/compiled/client/return.js +8 -42
  105. package/tests/hydration/compiled/client/switch.js +208 -173
  106. package/tests/hydration/compiled/client/track-async-serialization.js +176 -128
  107. package/tests/hydration/compiled/client/try.js +29 -21
  108. package/tests/hydration/compiled/server/basic.js +210 -221
  109. package/tests/hydration/compiled/server/composite.js +13 -14
  110. package/tests/hydration/compiled/server/for.js +427 -444
  111. package/tests/hydration/compiled/server/head.js +199 -189
  112. package/tests/hydration/compiled/server/html.js +33 -41
  113. package/tests/hydration/compiled/server/if-children.js +114 -117
  114. package/tests/hydration/compiled/server/if.js +77 -83
  115. package/tests/hydration/compiled/server/mixed-control-flow.js +145 -150
  116. package/tests/hydration/compiled/server/nested-control-flow.js +10 -0
  117. package/tests/hydration/compiled/server/reactivity.js +24 -22
  118. package/tests/hydration/compiled/server/return.js +6 -18
  119. package/tests/hydration/compiled/server/switch.js +179 -176
  120. package/tests/hydration/compiled/server/track-async-serialization.js +88 -70
  121. package/tests/hydration/compiled/server/try.js +31 -35
  122. package/tests/hydration/components/basic.tsrx +216 -286
  123. package/tests/hydration/components/composite.tsrx +32 -42
  124. package/tests/hydration/components/events.tsrx +81 -101
  125. package/tests/hydration/components/for.tsrx +270 -336
  126. package/tests/hydration/components/head.tsrx +43 -39
  127. package/tests/hydration/components/hmr.tsrx +16 -22
  128. package/tests/hydration/components/html-in-template.tsrx +15 -21
  129. package/tests/hydration/components/html.tsrx +442 -526
  130. package/tests/hydration/components/if-children.tsrx +107 -125
  131. package/tests/hydration/components/if.tsrx +68 -90
  132. package/tests/hydration/components/mixed-control-flow.tsrx +65 -72
  133. package/tests/hydration/components/nested-control-flow.tsrx +202 -216
  134. package/tests/hydration/components/portal.tsrx +33 -41
  135. package/tests/hydration/components/reactivity.tsrx +26 -34
  136. package/tests/hydration/components/return.tsrx +4 -6
  137. package/tests/hydration/components/switch.tsrx +73 -78
  138. package/tests/hydration/components/track-async-serialization.tsrx +83 -93
  139. package/tests/hydration/components/try.tsrx +37 -51
  140. package/tests/hydration/switch.test.js +8 -8
  141. package/tests/server/await.test.tsrx +3 -3
  142. package/tests/server/basic.attributes.test.tsrx +120 -167
  143. package/tests/server/basic.components.test.tsrx +163 -197
  144. package/tests/server/basic.test.tsrx +298 -220
  145. package/tests/server/compiler.test.tsrx +142 -72
  146. package/tests/server/composite.props.test.tsrx +54 -58
  147. package/tests/server/composite.test.tsrx +165 -167
  148. package/tests/server/context.test.tsrx +13 -17
  149. package/tests/server/dynamic-elements.test.tsrx +103 -135
  150. package/tests/server/for.test.tsrx +115 -84
  151. package/tests/server/head.test.tsrx +31 -31
  152. package/tests/server/html-nesting-validation.test.tsrx +16 -8
  153. package/tests/server/if.test.tsrx +49 -59
  154. package/tests/server/lazy-destructuring.test.tsrx +288 -366
  155. package/tests/server/return.test.tsrx +58 -36
  156. package/tests/server/streaming-ssr.test.tsrx +4 -4
  157. package/tests/server/style-identifier.test.tsrx +58 -66
  158. package/tests/server/switch.test.tsrx +89 -97
  159. package/tests/server/track-async-serialization.test.tsrx +85 -103
  160. package/tests/server/try.test.tsrx +275 -360
  161. package/tests/utils/ref-types.test.js +72 -0
  162. package/tests/utils/vite-plugin-config.test.js +41 -74
  163. package/types/index.d.ts +1 -0
  164. package/src/runtime/internal/client/compat.js +0 -40
  165. package/tests/utils/compiler-compat-config.test.js +0 -38
@@ -3,11 +3,9 @@ import { createRefKey, track } from 'ripple';
3
3
 
4
4
  describe('server dynamic DOM elements', () => {
5
5
  it('renders static dynamic element', async () => {
6
- function App() {
7
- return <>
8
- let tag = track('div');
9
- <@tag>{'Hello World'}</@tag>
10
- </>;
6
+ function App() @{
7
+ let tag = track('div');
8
+ <@tag>{'Hello World'}</@tag>
11
9
  }
12
10
 
13
11
  const { body } = await render(App);
@@ -18,12 +16,10 @@ describe('server dynamic DOM elements', () => {
18
16
  // The ts errors below are due to limitations in our current tsx generation for dynamic elements.
19
17
  // They can be ignored for now. But we'll fix them via jsx() vs <jsx>
20
18
  it('renders static dynamic element from a plain object with a tracked property', async () => {
21
- function App() {
22
- return <>
23
- let obj = { tag: track('div') };
24
- let tag = obj.tag;
25
- <@tag>{'Hello World'}</@tag>
26
- </>;
19
+ function App() @{
20
+ let obj = { tag: track('div') };
21
+ let tag = obj.tag;
22
+ <@tag>{'Hello World'}</@tag>
27
23
  }
28
24
 
29
25
  const { body } = await render(App);
@@ -32,12 +28,10 @@ describe('server dynamic DOM elements', () => {
32
28
  });
33
29
 
34
30
  it('renders static dynamic element from a tracked object with a tracked property', async () => {
35
- function App() {
36
- return <>
37
- let obj = track({ tag: track('div') });
38
- let tag = obj.value.tag;
39
- <@tag>{'Hello World'}</@tag>
40
- </>;
31
+ function App() @{
32
+ let obj = track({ tag: track('div') });
33
+ let tag = obj.value.tag;
34
+ <@tag>{'Hello World'}</@tag>
41
35
  }
42
36
 
43
37
  const { body } = await render(App);
@@ -48,12 +42,10 @@ describe('server dynamic DOM elements', () => {
48
42
  it(
49
43
  'renders static dynamic element from a tracked object with a computed tracked property',
50
44
  async () => {
51
- function App() {
52
- return <>
53
- let obj = track({ tag: track('div') });
54
- let tag = obj.value['tag'];
55
- <@tag>{'Hello World'}</@tag>
56
- </>;
45
+ function App() @{
46
+ let obj = track({ tag: track('div') });
47
+ let tag = obj.value['tag'];
48
+ <@tag>{'Hello World'}</@tag>
57
49
  }
58
50
 
59
51
  const { body } = await render(App);
@@ -63,11 +55,9 @@ describe('server dynamic DOM elements', () => {
63
55
  );
64
56
 
65
57
  it('renders self-closing dynamic element', async () => {
66
- function App() {
67
- return <>
68
- let tag = track('input');
69
- <@tag type="text" value="test" />
70
- </>;
58
+ function App() @{
59
+ let tag = track('input');
60
+ <@tag type="text" value="test" />
71
61
  }
72
62
 
73
63
  const { body } = await render(App);
@@ -76,12 +66,10 @@ describe('server dynamic DOM elements', () => {
76
66
  });
77
67
 
78
68
  it('handles dynamic element with attributes', async () => {
79
- function App() {
80
- return <>
81
- let tag = track('div');
82
- let &[className] = track('test-class');
83
- <@tag class={className} id="test" data-testid="dynamic-element">{'Content'}</@tag>
84
- </>;
69
+ function App() @{
70
+ let tag = track('div');
71
+ let &[className] = track('test-class');
72
+ <@tag class={className} id="test" data-testid="dynamic-element">{'Content'}</@tag>
85
73
  }
86
74
  const { body } = await render(App);
87
75
  const { document } = parseHtml(body);
@@ -95,14 +83,12 @@ describe('server dynamic DOM elements', () => {
95
83
  });
96
84
 
97
85
  it('handles nested dynamic elements', async () => {
98
- function App() {
99
- return <>
100
- let outerTag = track('div');
101
- let innerTag = track('span');
102
- <@outerTag class="outer">
103
- <@innerTag class="inner">{'Nested content'}</@innerTag>
104
- </@outerTag>
105
- </>;
86
+ function App() @{
87
+ let outerTag = track('div');
88
+ let innerTag = track('span');
89
+ <@outerTag class="outer">
90
+ <@innerTag class="inner">{'Nested content'}</@innerTag>
91
+ </@outerTag>
106
92
  }
107
93
  const { body } = await render(App);
108
94
  const { document } = parseHtml(body);
@@ -117,14 +103,10 @@ describe('server dynamic DOM elements', () => {
117
103
  });
118
104
 
119
105
  it('handles dynamic element with class object', async () => {
120
- function App() {
121
- return <>
122
- let tag = track('div');
123
- let &[active] = track(true);
124
- <@tag class={{ active: active, 'dynamic-element': true }}>
125
- {'Element with class object'}
126
- </@tag>
127
- </>;
106
+ function App() @{
107
+ let tag = track('div');
108
+ let &[active] = track(true);
109
+ <@tag class={{ active: active, 'dynamic-element': true }}>{'Element with class object'}</@tag>
128
110
  }
129
111
 
130
112
  const { body } = await render(App);
@@ -137,19 +119,15 @@ describe('server dynamic DOM elements', () => {
137
119
  });
138
120
 
139
121
  it('handles dynamic element with style object', async () => {
140
- function App() {
141
- return <>
142
- let tag = track('span');
143
- <@tag
144
- style={{
145
- color: 'red',
146
- fontSize: '16px',
147
- fontWeight: 'bold',
148
- }}
149
- >
150
- {'Styled dynamic element'}
151
- </@tag>
152
- </>;
122
+ function App() @{
123
+ let tag = track('span');
124
+ <@tag
125
+ style={{
126
+ color: 'red',
127
+ fontSize: '16px',
128
+ fontWeight: 'bold',
129
+ }}
130
+ >{'Styled dynamic element'}</@tag>
153
131
  }
154
132
 
155
133
  const { body } = await render(App);
@@ -163,16 +141,14 @@ describe('server dynamic DOM elements', () => {
163
141
  });
164
142
 
165
143
  it('handles dynamic element with spread attributes', async () => {
166
- function App() {
167
- return <>
168
- let tag = track('section');
169
- const attrs = {
170
- id: 'spread-section',
171
- 'data-testid': 'spread-test',
172
- class: 'spread-class',
173
- };
174
- <@tag {...attrs} data-extra="additional">{'Element with spread attributes'}</@tag>
175
- </>;
144
+ function App() @{
145
+ let tag = track('section');
146
+ const attrs = {
147
+ id: 'spread-section',
148
+ 'data-testid': 'spread-test',
149
+ class: 'spread-class',
150
+ };
151
+ <@tag {...attrs} data-extra="additional">{'Element with spread attributes'}</@tag>
176
152
  }
177
153
  const { body } = await render(App);
178
154
  const { document } = parseHtml(body);
@@ -188,18 +164,14 @@ describe('server dynamic DOM elements', () => {
188
164
  it('handles dynamic element with ref not rendered', async () => {
189
165
  let capturedElement: HTMLElement | null = null;
190
166
 
191
- function App() {
192
- return <>
193
- let tag = track('article');
194
- <@tag
195
- ref={(node: HTMLElement) => {
196
- capturedElement = node;
197
- }}
198
- id="ref-test"
199
- >
200
- {'Element with ref'}
201
- </@tag>
202
- </>;
167
+ function App() @{
168
+ let tag = track('article');
169
+ <@tag
170
+ ref={(node: HTMLElement) => {
171
+ capturedElement = node;
172
+ }}
173
+ id="ref-test"
174
+ >{'Element with ref'}</@tag>
203
175
  }
204
176
 
205
177
  const { body } = await render(App);
@@ -215,21 +187,19 @@ describe('server dynamic DOM elements', () => {
215
187
  });
216
188
 
217
189
  it('handles dynamic element with createRefKey in spread', async () => {
218
- function App() {
219
- return <>
220
- let tag = track('header');
221
- function elementRef(node: HTMLElement) {
222
- // Set an attribute on the element to prove ref was called
223
- node.setAttribute('data-spread-ref-called', 'true');
224
- node.setAttribute('data-spread-ref-tag', node.tagName.toLowerCase());
225
- }
226
- const dynamicProps = {
227
- id: 'spread-ref-test',
228
- class: 'ref-element',
229
- [createRefKey()]: elementRef,
230
- };
231
- <@tag {...dynamicProps}>{'Element with spread ref'}</@tag>
232
- </>;
190
+ function App() @{
191
+ let tag = track('header');
192
+ function elementRef(node: HTMLElement) {
193
+ // Set an attribute on the element to prove ref was called
194
+ node.setAttribute('data-spread-ref-called', 'true');
195
+ node.setAttribute('data-spread-ref-tag', node.tagName.toLowerCase());
196
+ }
197
+ const dynamicProps = {
198
+ id: 'spread-ref-test',
199
+ class: 'ref-element',
200
+ [createRefKey()]: elementRef,
201
+ };
202
+ <@tag {...dynamicProps}>{'Element with spread ref'}</@tag>
233
203
  }
234
204
 
235
205
  const { body } = await render(App);
@@ -245,16 +215,16 @@ describe('server dynamic DOM elements', () => {
245
215
  });
246
216
 
247
217
  it('applies scoped CSS to dynamic elements', async () => {
248
- function App() {
249
- return <>
250
- let tag = track('div');
218
+ function App() @{
219
+ let tag = track('div');
220
+ <>
251
221
  <@tag class="test-class">{'Dynamic element'}</@tag>
252
222
  <style>
253
223
  .test-class {
254
224
  color: red;
255
225
  }
256
226
  </style>
257
- </>;
227
+ </>
258
228
  }
259
229
 
260
230
  const { body } = await render(App);
@@ -273,9 +243,9 @@ describe('server dynamic DOM elements', () => {
273
243
  function DynamicButton(&{ ...rest }: PropsWithExtras<{
274
244
  class: string;
275
245
  id: string;
276
- }>) {
277
- return <>
278
- const tag = track('button');
246
+ }>) @{
247
+ const tag = track('button');
248
+ <>
279
249
  <@tag {...rest}>{rest.class}</@tag>
280
250
  <style>
281
251
  .even {
@@ -285,14 +255,12 @@ describe('server dynamic DOM elements', () => {
285
255
  background-color: red;
286
256
  }
287
257
  </style>
288
- </>;
258
+ </>
289
259
  }
290
260
 
291
- function App() {
292
- return <>
293
- let &[count] = track(0);
294
- <DynamicButton class={count % 2 ? 'even' : 'odd'} id={count % 2 ? 'even' : 'odd'} />
295
- </>;
261
+ function App() @{
262
+ let &[count] = track(0);
263
+ <DynamicButton class={count % 2 ? 'even' : 'odd'} id={count % 2 ? 'even' : 'odd'} />
296
264
  }
297
265
 
298
266
  const { body } = await render(App);
@@ -312,9 +280,9 @@ describe('server dynamic DOM elements', () => {
312
280
  });
313
281
 
314
282
  it('adds scoping class to dynamic elements', async () => {
315
- function App() {
316
- return <>
317
- let tag = track('div');
283
+ function App() @{
284
+ let tag = track('div');
285
+ <>
318
286
  <@tag class="scoped">
319
287
  <p>{'Scoped dynamic element'}</p>
320
288
  </@tag>
@@ -323,7 +291,7 @@ describe('server dynamic DOM elements', () => {
323
291
  color: blue;
324
292
  }
325
293
  </style>
326
- </>;
294
+ </>
327
295
  }
328
296
 
329
297
  const { body } = await render(App);
@@ -341,9 +309,9 @@ describe('server dynamic DOM elements', () => {
341
309
  async () => {
342
310
  // NOTE: We always add the class scoping hash if there is css
343
311
  // but the tag selector will be marked as unused if it's not explicitly seen in the template.
344
- function App() {
345
- return <>
346
- let tag = track('div');
312
+ function App() @{
313
+ let tag = track('div');
314
+ <>
347
315
  <@tag class="scoped">
348
316
  <p>{'Scoped dynamic element'}</p>
349
317
  </@tag>
@@ -352,7 +320,7 @@ describe('server dynamic DOM elements', () => {
352
320
  color: blue;
353
321
  }
354
322
  </style>
355
- </>;
323
+ </>
356
324
  }
357
325
 
358
326
  const { body } = await render(App);
@@ -367,8 +335,8 @@ describe('server dynamic DOM elements', () => {
367
335
  );
368
336
 
369
337
  it('doesn\'t add scoping class to components inside dynamic element', async () => {
370
- function Child() {
371
- return <>
338
+ function Child() @{
339
+ <>
372
340
  <div class="child">
373
341
  <p>{'I am a child component'}</p>
374
342
  </div>
@@ -377,12 +345,12 @@ describe('server dynamic DOM elements', () => {
377
345
  color: blue;
378
346
  }
379
347
  </style>
380
- </>;
348
+ </>
381
349
  }
382
350
 
383
- function App() {
384
- return <>
385
- let tag = track('div');
351
+ function App() @{
352
+ let tag = track('div');
353
+ <>
386
354
  <@tag class="scoped">
387
355
  <p>{'Scoped dynamic element'}</p>
388
356
  <Child />
@@ -392,7 +360,7 @@ describe('server dynamic DOM elements', () => {
392
360
  color: blue;
393
361
  }
394
362
  </style>
395
- </>;
363
+ </>
396
364
  }
397
365
 
398
366
  const { body } = await render(App);
@@ -415,8 +383,8 @@ describe('server dynamic DOM elements', () => {
415
383
  });
416
384
 
417
385
  it('doesn\'t add scoping class to dynamically rendered component', async () => {
418
- function Child() {
419
- return <>
386
+ function Child() @{
387
+ <>
420
388
  <div class="child">
421
389
  <p>{'I am a child component'}</p>
422
390
  </div>
@@ -425,19 +393,19 @@ describe('server dynamic DOM elements', () => {
425
393
  color: green;
426
394
  }
427
395
  </style>
428
- </>;
396
+ </>
429
397
  }
430
398
 
431
- function App() {
432
- return <>
433
- let tag = track(() => Child);
399
+ function App() @{
400
+ let tag = track(() => Child);
401
+ <>
434
402
  <@tag />
435
403
  <style>
436
404
  .child {
437
405
  color: red;
438
406
  }
439
407
  </style>
440
- </>;
408
+ </>
441
409
  }
442
410
 
443
411
  const { body } = await render(App);