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
@@ -2,8 +2,8 @@ import { RippleObject, track } from 'ripple';
2
2
 
3
3
  describe('basic server > attribute rendering', () => {
4
4
  it('render static attributes', async () => {
5
- function Basic() {
6
- return <><div class="foo" id="bar" style="color: red;">{'Hello World'}</div></>;
5
+ function Basic() @{
6
+ <div class="foo" id="bar" style="color: red;">{'Hello World'}</div>
7
7
  }
8
8
 
9
9
  const { body } = await render(Basic);
@@ -18,16 +18,16 @@ describe('basic server > attribute rendering', () => {
18
18
  });
19
19
 
20
20
  it('render dynamic class attribute', async () => {
21
- function Basic() {
22
- return <>
23
- let &[active] = track(false);
21
+ function Basic() @{
22
+ let &[active] = track(false);
23
+ <>
24
24
  <div class={active ? 'active' : 'inactive'}>{'Dynamic Class'}</div>
25
25
  <style>
26
26
  .active {
27
27
  color: green;
28
28
  }
29
29
  </style>
30
- </>;
30
+ </>
31
31
  }
32
32
 
33
33
  const { body } = await render(Basic);
@@ -42,8 +42,8 @@ describe('basic server > attribute rendering', () => {
42
42
  });
43
43
 
44
44
  it('render class attribute with array, nested array, nested object', async () => {
45
- function Basic() {
46
- return <>
45
+ function Basic() @{
46
+ <>
47
47
  <div
48
48
  class={[
49
49
  'foo',
@@ -57,15 +57,13 @@ describe('basic server > attribute rendering', () => {
57
57
  { eee: true, fff: false },
58
58
  ],
59
59
  ]}
60
- >
61
- {'Class Array'}
62
- </div>
60
+ >{'Class Array'}</div>
63
61
  <style>
64
62
  .foo {
65
63
  color: red;
66
64
  }
67
65
  </style>
68
- </>;
66
+ </>
69
67
  }
70
68
 
71
69
  const { body } = await render(Basic);
@@ -89,15 +87,13 @@ describe('basic server > attribute rendering', () => {
89
87
  });
90
88
 
91
89
  it('applies scoped classes inside tsx blocks and fragment shorthand', async () => {
92
- function App() {
93
- return <>
94
- <tsx>
90
+ function App() @{
91
+ <>
92
+ <>
95
93
  <div class="card">
96
- <h2>
97
- {'tsx block'}
98
- </h2>
94
+ <h2>{'tsx block'}</h2>
99
95
  </div>
100
- </tsx>
96
+ </>
101
97
  <>
102
98
  <div class="card">
103
99
  <h2>{'fragment shorthand'}</h2>
@@ -112,7 +108,7 @@ describe('basic server > attribute rendering', () => {
112
108
  color: red;
113
109
  }
114
110
  </style>
115
- </>;
111
+ </>
116
112
  }
117
113
 
118
114
  const { body } = await render(App);
@@ -138,16 +134,16 @@ describe('basic server > attribute rendering', () => {
138
134
  });
139
135
 
140
136
  it('render dynamic class object', async () => {
141
- function Basic() {
142
- return <>
143
- let &[active] = track(false);
137
+ function Basic() @{
138
+ let &[active] = track(false);
139
+ <>
144
140
  <div class={{ active: active, inactive: !active }}>{'Dynamic Class'}</div>
145
141
  <style>
146
142
  .active {
147
143
  color: green;
148
144
  }
149
145
  </style>
150
- </>;
146
+ </>
151
147
  }
152
148
 
153
149
  const { body } = await render(Basic);
@@ -165,9 +161,9 @@ describe('basic server > attribute rendering', () => {
165
161
  it(
166
162
  'applies scoped ripple class to multiple elements with dynamic class expressions',
167
163
  async () => {
168
- function Basic() {
169
- return <>
170
- let &[selected] = track(1);
164
+ function Basic() @{
165
+ let &[selected] = track(1);
166
+ <>
171
167
  <div class={selected === 0 ? 'selected' : ''}>{`div 1`}</div>
172
168
  <div class={selected === 0 ? 'selected' : ''}>{`div 2`}</div>
173
169
  <style>
@@ -179,7 +175,7 @@ describe('basic server > attribute rendering', () => {
179
175
  background: indigo;
180
176
  }
181
177
  </style>
182
- </>;
178
+ </>
183
179
  }
184
180
 
185
181
  const { body } = await render(Basic);
@@ -196,11 +192,9 @@ describe('basic server > attribute rendering', () => {
196
192
  );
197
193
 
198
194
  it('render dynamic id attribute', async () => {
199
- function Basic() {
200
- return <>
201
- let &[count] = track(0);
202
- <div id={`item-${count}`}>{'Dynamic ID'}</div>
203
- </>;
195
+ function Basic() @{
196
+ let &[count] = track(0);
197
+ <div id={`item-${count}`}>{'Dynamic ID'}</div>
204
198
  }
205
199
 
206
200
  const { body } = await render(Basic);
@@ -212,11 +206,9 @@ describe('basic server > attribute rendering', () => {
212
206
  });
213
207
 
214
208
  it('render dynamic style attribute', async () => {
215
- function Basic() {
216
- return <>
217
- let &[color] = track('red');
218
- <div style={`color: ${color}; font-weight: bold;`}>{'Dynamic Style'}</div>
219
- </>;
209
+ function Basic() @{
210
+ let &[color] = track('red');
211
+ <div style={`color: ${color}; font-weight: bold;`}>{'Dynamic Style'}</div>
220
212
  }
221
213
 
222
214
  const { body } = await render(Basic);
@@ -229,11 +221,9 @@ describe('basic server > attribute rendering', () => {
229
221
  });
230
222
 
231
223
  it('render style attribute as dynamic object', async () => {
232
- function Basic() {
233
- return <>
234
- let &[color] = track('red');
235
- <div style={{ color: color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>
236
- </>;
224
+ function Basic() @{
225
+ let &[color] = track('red');
226
+ <div style={{ color: color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>
237
227
  }
238
228
 
239
229
  const { body } = await render(Basic);
@@ -246,11 +236,9 @@ describe('basic server > attribute rendering', () => {
246
236
  });
247
237
 
248
238
  it('render tracked variable as style attribute', async () => {
249
- function Basic() {
250
- return <>
251
- let &[style] = track({ color: 'red', fontWeight: 'bold' });
252
- <div {style}>{'Dynamic Style'}</div>
253
- </>;
239
+ function Basic() @{
240
+ let &[style] = track({ color: 'red', fontWeight: 'bold' });
241
+ <div {style}>{'Dynamic Style'}</div>
254
242
  }
255
243
 
256
244
  const { body } = await render(Basic);
@@ -263,14 +251,12 @@ describe('basic server > attribute rendering', () => {
263
251
  });
264
252
 
265
253
  it('render tracked object as style attribute', async () => {
266
- function Basic() {
267
- return <>
268
- let style = new RippleObject({
269
- color: 'red',
270
- fontWeight: 'bold',
271
- });
272
- <div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>
273
- </>;
254
+ function Basic() @{
255
+ let style = new RippleObject({
256
+ color: 'red',
257
+ fontWeight: 'bold',
258
+ });
259
+ <div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>
274
260
  }
275
261
 
276
262
  const { body } = await render(Basic);
@@ -283,14 +269,12 @@ describe('basic server > attribute rendering', () => {
283
269
  });
284
270
 
285
271
  it('render spread attributes with style and class', async () => {
286
- function Basic() {
287
- return <>
288
- const attributes = {
289
- style: { color: 'red', fontWeight: 'bold' },
290
- class: ['foo', false && 'bar'],
291
- };
292
- <div {...attributes}>{'Attributes with style and class'}</div>
293
- </>;
272
+ function Basic() @{
273
+ const attributes = {
274
+ style: { color: 'red', fontWeight: 'bold' },
275
+ class: ['foo', false && 'bar'],
276
+ };
277
+ <div {...attributes}>{'Attributes with style and class'}</div>
294
278
  }
295
279
 
296
280
  const { body } = await render(Basic);
@@ -306,11 +290,9 @@ describe('basic server > attribute rendering', () => {
306
290
  });
307
291
 
308
292
  it('renders host innerHTML as content instead of an attribute', async () => {
309
- function Basic() {
310
- return <>
311
- const html = '<span>Direct HTML</span>';
312
- <code innerHTML={html} />
313
- </>;
293
+ function Basic() @{
294
+ const html = '<span>Direct HTML</span>';
295
+ <code innerHTML={html} />
314
296
  }
315
297
 
316
298
  const { body } = await render(Basic);
@@ -323,11 +305,9 @@ describe('basic server > attribute rendering', () => {
323
305
  });
324
306
 
325
307
  it('renders spread innerHTML as content instead of an attribute', async () => {
326
- function Basic() {
327
- return <>
328
- const attributes = { innerHTML: '<span>Spread HTML</span>' };
329
- <code {...attributes} />
330
- </>;
308
+ function Basic() @{
309
+ const attributes = { innerHTML: '<span>Spread HTML</span>' };
310
+ <code {...attributes} />
331
311
  }
332
312
 
333
313
  const { body } = await render(Basic);
@@ -340,11 +320,9 @@ describe('basic server > attribute rendering', () => {
340
320
  });
341
321
 
342
322
  it('uses the last innerHTML value when spreads and direct props are mixed', async () => {
343
- function Basic() {
344
- return <>
345
- const attributes = { innerHTML: '<span>Spread HTML</span>' };
346
- <code {...attributes} innerHTML="<em>Direct HTML</em>" />
347
- </>;
323
+ function Basic() @{
324
+ const attributes = { innerHTML: '<span>Spread HTML</span>' };
325
+ <code {...attributes} innerHTML="<em>Direct HTML</em>" />
348
326
  }
349
327
 
350
328
  const { body } = await render(Basic);
@@ -356,13 +334,11 @@ describe('basic server > attribute rendering', () => {
356
334
  });
357
335
 
358
336
  it('render spread props without duplication', async () => {
359
- function Basic() {
360
- return <>
361
- const checkBoxProp = { name: 'car' };
362
- <div>
363
- <input {...checkBoxProp} type="checkbox" id="vehicle1" value="Bike" />
364
- </div>
365
- </>;
337
+ function Basic() @{
338
+ const checkBoxProp = { name: 'car' };
339
+ <div>
340
+ <input {...checkBoxProp} type="checkbox" id="vehicle1" value="Bike" />
341
+ </div>
366
342
  }
367
343
 
368
344
  const { body } = await render(Basic);
@@ -386,12 +362,10 @@ describe('basic server > attribute rendering', () => {
386
362
  });
387
363
 
388
364
  it('render dynamic boolean attributes as false', async () => {
389
- function Basic() {
390
- return <>
391
- let &[disabled] = track(false);
392
- let &[checked] = track(false);
393
- <input type="checkbox" {disabled} {checked} />
394
- </>;
365
+ function Basic() @{
366
+ let &[disabled] = track(false);
367
+ let &[checked] = track(false);
368
+ <input type="checkbox" {disabled} {checked} />
395
369
  }
396
370
 
397
371
  const { body } = await render(Basic);
@@ -405,11 +379,9 @@ describe('basic server > attribute rendering', () => {
405
379
  });
406
380
 
407
381
  it('render dynamic boolean attributes as false via spread', async () => {
408
- function Basic() {
409
- return <>
410
- const spread = { disabled: false, checked: false };
411
- <input type="checkbox" {...spread} />
412
- </>;
382
+ function Basic() @{
383
+ const spread = { disabled: false, checked: false };
384
+ <input type="checkbox" {...spread} />
413
385
  }
414
386
 
415
387
  const { body } = await render(Basic);
@@ -423,12 +395,10 @@ describe('basic server > attribute rendering', () => {
423
395
  });
424
396
 
425
397
  it('render dynamic boolean attributes as true', async () => {
426
- function Basic() {
427
- return <>
428
- let &[disabled] = track(true);
429
- let &[checked] = track(true);
430
- <input type="checkbox" {disabled} {checked} />
431
- </>;
398
+ function Basic() @{
399
+ let &[disabled] = track(true);
400
+ let &[checked] = track(true);
401
+ <input type="checkbox" {disabled} {checked} />
432
402
  }
433
403
 
434
404
  const { body } = await render(Basic);
@@ -442,11 +412,9 @@ describe('basic server > attribute rendering', () => {
442
412
  });
443
413
 
444
414
  it('render dynamic boolean attributes as true via spread', async () => {
445
- function Basic() {
446
- return <>
447
- const spread = { disabled: true, checked: true };
448
- <input type="checkbox" {...spread} />
449
- </>;
415
+ function Basic() @{
416
+ const spread = { disabled: true, checked: true };
417
+ <input type="checkbox" {...spread} />
450
418
  }
451
419
 
452
420
  const { body } = await render(Basic);
@@ -460,11 +428,9 @@ describe('basic server > attribute rendering', () => {
460
428
  });
461
429
 
462
430
  it('renders formnovalidate as a boolean attribute', async () => {
463
- function Basic() {
464
- return <>
465
- let &[formnovalidate] = track(true);
466
- <button {formnovalidate}>{'Submit'}</button>
467
- </>;
431
+ function Basic() @{
432
+ let &[formnovalidate] = track(true);
433
+ <button {formnovalidate}>{'Submit'}</button>
468
434
  }
469
435
 
470
436
  const { body } = await render(Basic);
@@ -478,11 +444,9 @@ describe('basic server > attribute rendering', () => {
478
444
  });
479
445
 
480
446
  it('renders hidden as a boolean attribute when true', async () => {
481
- function Basic() {
482
- return <>
483
- let &[hidden] = track(true);
484
- <div {hidden}>{'Hidden content'}</div>
485
- </>;
447
+ function Basic() @{
448
+ let &[hidden] = track(true);
449
+ <div {hidden}>{'Hidden content'}</div>
486
450
  }
487
451
 
488
452
  const { body } = await render(Basic);
@@ -496,11 +460,9 @@ describe('basic server > attribute rendering', () => {
496
460
  });
497
461
 
498
462
  it('does not render hidden when false', async () => {
499
- function Basic() {
500
- return <>
501
- let &[hidden] = track(false);
502
- <div {hidden}>{'Visible content'}</div>
503
- </>;
463
+ function Basic() @{
464
+ let &[hidden] = track(false);
465
+ <div {hidden}>{'Visible content'}</div>
504
466
  }
505
467
 
506
468
  const { body } = await render(Basic);
@@ -513,14 +475,14 @@ describe('basic server > attribute rendering', () => {
513
475
  });
514
476
 
515
477
  it('render multiple dynamic attributes', async () => {
516
- function Basic() {
517
- return <>
518
- let &[theme] = track('light');
519
- let &[size] = track('medium');
520
- <div class={`theme-${theme} size-${size}`} data-theme={theme} data-size={size}>
521
- {'Multiple Dynamic Attributes'}
522
- </div>
523
- </>;
478
+ function Basic() @{
479
+ let &[theme] = track('light');
480
+ let &[size] = track('medium');
481
+ <div
482
+ class={`theme-${theme} size-${size}`}
483
+ data-theme={theme}
484
+ data-size={size}
485
+ >{'Multiple Dynamic Attributes'}</div>
524
486
  }
525
487
 
526
488
  const { body } = await render(Basic);
@@ -534,17 +496,13 @@ describe('basic server > attribute rendering', () => {
534
496
  });
535
497
 
536
498
  it('render conditional attributes', async () => {
537
- function Basic() {
538
- return <>
539
- let &[showTitle] = track(false);
540
- let &[showAria] = track(false);
541
- <div
542
- title={showTitle ? 'This is a title' : undefined}
543
- aria-label={showAria ? 'Accessible label' : undefined}
544
- >
545
- {'Conditional Attributes'}
546
- </div>
547
- </>;
499
+ function Basic() @{
500
+ let &[showTitle] = track(false);
501
+ let &[showAria] = track(false);
502
+ <div
503
+ title={showTitle ? 'This is a title' : undefined}
504
+ aria-label={showAria ? 'Accessible label' : undefined}
505
+ >{'Conditional Attributes'}</div>
548
506
  }
549
507
 
550
508
  const { body } = await render(Basic);
@@ -557,14 +515,12 @@ describe('basic server > attribute rendering', () => {
557
515
  });
558
516
 
559
517
  it('render spread attributes', async () => {
560
- function Basic() {
561
- return <>
562
- let &[attrs] = track<TestAttributes>({
563
- class: 'initial',
564
- id: 'test-1',
565
- });
566
- <div {...attrs}>{'Spread Attributes'}</div>
567
- </>;
518
+ function Basic() @{
519
+ let &[attrs] = track<TestAttributes>({
520
+ class: 'initial',
521
+ id: 'test-1',
522
+ });
523
+ <div {...attrs}>{'Spread Attributes'}</div>
568
524
  }
569
525
 
570
526
  const { body } = await render(Basic);
@@ -578,16 +534,15 @@ describe('basic server > attribute rendering', () => {
578
534
  });
579
535
 
580
536
  it('renders with reactive attributes with nested reactive attributes', async () => {
581
- function Basic() {
582
- return <>
583
- let &[value] = track('parent-class');
537
+ function Basic() @{
538
+ let &[value] = track('parent-class');
539
+ let &[nested] = track('nested-class');
540
+ <>
584
541
  <p class={value}>{'Colored parent value'}</p>
585
542
  <div>
586
- let &[nested] = track('nested-class');
587
-
588
543
  <p class={nested}>{'Colored nested value'}</p>
589
544
  </div>
590
- </>;
545
+ </>
591
546
  }
592
547
 
593
548
  const { body } = await render(Basic);
@@ -600,12 +555,10 @@ describe('basic server > attribute rendering', () => {
600
555
  });
601
556
 
602
557
  it('handles boolean attributes with no prop value provides', async () => {
603
- function Basic() {
604
- return <>
605
- <div class="container">
606
- <input type="checkbox" checked />
607
- </div>
608
- </>;
558
+ function Basic() @{
559
+ <div class="container">
560
+ <input type="checkbox" checked />
561
+ </div>
609
562
  }
610
563
 
611
564
  const { body } = await render(Basic);
@@ -613,15 +566,15 @@ describe('basic server > attribute rendering', () => {
613
566
  });
614
567
 
615
568
  it('handles boolean props correctly', async () => {
616
- function Basic() {
617
- return <>
569
+ function Basic() @{
570
+ <>
618
571
  <div data-disabled />
619
572
  <Child isDisabled />
620
- </>;
573
+ </>
621
574
  }
622
575
 
623
- function Child({ isDisabled }: { isDisabled: boolean }) {
624
- return <><input disabled={isDisabled} /></>;
576
+ function Child({ isDisabled }: { isDisabled: boolean }) @{
577
+ <input disabled={isDisabled} />
625
578
  }
626
579
 
627
580
  const { body } = await render(Basic);