ripple 0.4.3 → 0.4.5

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 (42) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/package.json +3 -3
  3. package/src/constants.js +6 -0
  4. package/src/runtime/internal/client/attributes.js +259 -126
  5. package/src/runtime/internal/client/blocks.js +16 -6
  6. package/src/runtime/internal/client/composite.js +292 -100
  7. package/src/runtime/internal/client/constants.js +8 -0
  8. package/src/runtime/internal/client/events.js +15 -1
  9. package/src/runtime/internal/client/expression.js +4 -4
  10. package/src/runtime/internal/client/for.js +13 -38
  11. package/src/runtime/internal/client/if.js +56 -1
  12. package/src/runtime/internal/client/index.js +8 -6
  13. package/src/runtime/internal/client/operations.js +9 -4
  14. package/src/runtime/internal/client/render.js +37 -0
  15. package/src/runtime/internal/client/runtime.js +94 -20
  16. package/src/runtime/internal/client/template-ns.js +45 -4
  17. package/src/runtime/internal/client/template.js +103 -0
  18. package/tests/client/composite/composite.dynamic-components.test.tsrx +40 -0
  19. package/tests/client/css/scoped-styles.test.tsrx +3 -1
  20. package/tests/client/svg.test.tsrx +273 -1
  21. package/tests/hydration/compiled/client/basic.js +79 -51
  22. package/tests/hydration/compiled/client/composite.js +13 -4
  23. package/tests/hydration/compiled/client/events.js +22 -7
  24. package/tests/hydration/compiled/client/for.js +110 -71
  25. package/tests/hydration/compiled/client/fragment-cursor.js +342 -156
  26. package/tests/hydration/compiled/client/head.js +13 -13
  27. package/tests/hydration/compiled/client/hmr.js +16 -4
  28. package/tests/hydration/compiled/client/html-in-template.js +1 -1
  29. package/tests/hydration/compiled/client/html.js +144 -87
  30. package/tests/hydration/compiled/client/if-children.js +118 -33
  31. package/tests/hydration/compiled/client/if-fragment-controlflow.js +41 -21
  32. package/tests/hydration/compiled/client/if.js +70 -18
  33. package/tests/hydration/compiled/client/mixed-control-flow.js +50 -20
  34. package/tests/hydration/compiled/client/nested-control-flow.js +191 -100
  35. package/tests/hydration/compiled/client/portal.js +29 -9
  36. package/tests/hydration/compiled/client/reactivity.js +9 -5
  37. package/tests/hydration/compiled/client/streaming.js +21 -18
  38. package/tests/hydration/compiled/client/switch.js +17 -17
  39. package/tests/hydration/compiled/client/track-async-serialization.js +29 -21
  40. package/tests/hydration/compiled/client/try.js +13 -10
  41. package/tests/hydration/compiled/client/typed-text.js +3 -2
  42. package/tests/utils/inline-drift.test.js +83 -0
@@ -1,7 +1,7 @@
1
1
  // @ts-nocheck
2
2
  import * as _$_ from 'ripple/internal/client';
3
3
 
4
- var root = _$_.template(`<div class=layout><!>`);
4
+ var root = _$_.template_el('div', ['class', 'layout'], [null]);
5
5
 
6
6
  function Layout_render(__anchor, __block, { children }) {
7
7
  var div = root();
@@ -18,7 +18,7 @@ function Layout_render(__anchor, __block, { children }) {
18
18
 
19
19
  Layout[_$_.$r] = Layout_render;
20
20
 
21
- var root_1 = _$_.template(`<div class=layout>before<!>after`);
21
+ var root_1 = _$_.template_el('div', ['class', 'layout'], ['before', null, 'after']);
22
22
 
23
23
  function TextWrappedLayout_render(__anchor, __block, { children }) {
24
24
  var div_1 = root_1();
@@ -36,7 +36,7 @@ function TextWrappedLayout_render(__anchor, __block, { children }) {
36
36
 
37
37
  TextWrappedLayout[_$_.$r] = TextWrappedLayout_render;
38
38
 
39
- var root_2 = _$_.template(`<div class=single>single`);
39
+ var root_2 = _$_.template_el('div', ['class', 'single'], 'single');
40
40
 
41
41
  function SingleChild_render(__anchor, __block) {
42
42
  var div_2 = root_2();
@@ -141,6 +141,10 @@ DynamicTagElement[_$_.$r] = DynamicTagElement_render;
141
141
 
142
142
  var root_7 = _$_.template(`<!>`, 1, 1);
143
143
 
144
+ function render(__prev) {
145
+ __prev.a = _$_.dynamic(__prev.a, __prev._a, __prev._b, {});
146
+ }
147
+
144
148
  function DynamicTagComponent_render(__anchor, __block) {
145
149
  const Comp = SingleChild;
146
150
 
@@ -149,7 +153,12 @@ function DynamicTagComponent_render(__anchor, __block) {
149
153
  var fragment_4 = root_7();
150
154
  var node_3 = _$_.first_child_frag(fragment_4);
151
155
 
152
- _$_.composite(() => Comp, node_3, () => ({}));
156
+ _$_.render(render, {
157
+ a: _$_.dynamic_init(node_3, () => Comp, () => ({})),
158
+ _a: node_3,
159
+ _b: Comp
160
+ });
161
+
153
162
  _$_.append(__anchor, fragment_4);
154
163
  })
155
164
  });
@@ -1,7 +1,10 @@
1
1
  // @ts-nocheck
2
2
  import * as _$_ from 'ripple/internal/client';
3
3
 
4
- var root = _$_.template(`<div><button class=increment>Increment</button><span class=count>`);
4
+ var root = _$_.template_el('div', null, [
5
+ ['button', ['class', 'increment'], 'Increment'],
6
+ ['span', ['class', 'count']]
7
+ ]);
5
8
 
6
9
  function render(__prev) {
7
10
  var __a = __prev._a.value;
@@ -32,7 +35,11 @@ function ClickCounter_render(__anchor, __block) {
32
35
 
33
36
  ClickCounter[_$_.$r] = ClickCounter_render;
34
37
 
35
- var root_1 = _$_.template(`<div><button class=decrement>-</button><span class=count></span><button class=increment>+`);
38
+ var root_1 = _$_.template_el('div', null, [
39
+ ['button', ['class', 'decrement'], '-'],
40
+ ['span', ['class', 'count']],
41
+ ['button', ['class', 'increment'], '+']
42
+ ]);
36
43
 
37
44
  function render_1(__prev) {
38
45
  var __a = __prev._a.value;
@@ -68,7 +75,11 @@ function IncrementDecrement_render(__anchor, __block) {
68
75
 
69
76
  IncrementDecrement[_$_.$r] = IncrementDecrement_render;
70
77
 
71
- var root_2 = _$_.template(`<div><button class=target>Target</button><span class=clicks></span><span class=hovers>`);
78
+ var root_2 = _$_.template_el('div', null, [
79
+ ['button', ['class', 'target'], 'Target'],
80
+ ['span', ['class', 'clicks']],
81
+ ['span', ['class', 'hovers']]
82
+ ]);
72
83
 
73
84
  function render_2(__prev) {
74
85
  var __a = __prev._a.value;
@@ -112,7 +123,11 @@ function MultipleEvents_render(__anchor, __block) {
112
123
 
113
124
  MultipleEvents[_$_.$r] = MultipleEvents_render;
114
125
 
115
- var root_3 = _$_.template(`<div><button class=btn>Click</button><span class=count></span><span class=action> `);
126
+ var root_3 = _$_.template_el('div', null, [
127
+ ['button', ['class', 'btn'], 'Click'],
128
+ ['span', ['class', 'count']],
129
+ ['span', ['class', 'action'], ' ']
130
+ ]);
116
131
 
117
132
  function render_3(__prev) {
118
133
  var __a = __prev._a.value;
@@ -156,7 +171,7 @@ function MultiStateUpdate_render(__anchor, __block) {
156
171
 
157
172
  MultiStateUpdate[_$_.$r] = MultiStateUpdate_render;
158
173
 
159
- var root_4 = _$_.template(`<div><button class=toggle>`);
174
+ var root_4 = _$_.template_el('div', null, [['button', ['class', 'toggle']]]);
160
175
 
161
176
  function render_4(__prev) {
162
177
  var __a = __prev._a.value ? 'ON' : 'OFF';
@@ -185,7 +200,7 @@ function ToggleButton_render(__anchor, __block) {
185
200
 
186
201
  ToggleButton[_$_.$r] = ToggleButton_render;
187
202
 
188
- var root_5 = _$_.template(`<button class=child-btn>`);
203
+ var root_5 = _$_.template_el('button', ['class', 'child-btn']);
189
204
 
190
205
  function render_5(__prev) {
191
206
  var __a = __prev._a.label;
@@ -206,7 +221,7 @@ function ChildButton_render(__anchor, __block, props) {
206
221
 
207
222
  ChildButton[_$_.$r] = ChildButton_render;
208
223
 
209
- var root_6 = _$_.template(`<div><span class=count>`);
224
+ var root_6 = _$_.template_el('div', null, [['span', ['class', 'count']]]);
210
225
 
211
226
  function render_6(__prev) {
212
227
  var __a = __prev._a.value;
@@ -1,8 +1,8 @@
1
1
  // @ts-nocheck
2
2
  import * as _$_ from 'ripple/internal/client';
3
3
 
4
- var root_1 = _$_.template(`<li> `);
5
- var root = _$_.template(`<ul>`);
4
+ var root_1 = _$_.template_el('li', null, ' ');
5
+ var root = _$_.template_el('ul');
6
6
 
7
7
  function StaticForLoop_render(__anchor, __block) {
8
8
  const items = ['Apple', 'Banana', 'Cherry'];
@@ -35,7 +35,7 @@ function StaticForLoop_render(__anchor, __block) {
35
35
 
36
36
  StaticForLoop[_$_.$r] = StaticForLoop_render;
37
37
 
38
- var root_3 = _$_.template(`<li>`);
38
+ var root_3 = _$_.template_el('li');
39
39
 
40
40
  function render(__prev) {
41
41
  var __a = `${__prev._a.value}: ${__prev._b}`;
@@ -46,7 +46,7 @@ function render(__prev) {
46
46
  }
47
47
  }
48
48
 
49
- var root_2 = _$_.template(`<ul>`);
49
+ var root_2 = _$_.template_el('ul');
50
50
 
51
51
  function ForLoopWithIndex_render(__anchor, __block) {
52
52
  const items = ['A', 'B', 'C'];
@@ -75,8 +75,8 @@ function ForLoopWithIndex_render(__anchor, __block) {
75
75
 
76
76
  ForLoopWithIndex[_$_.$r] = ForLoopWithIndex_render;
77
77
 
78
- var root_5 = _$_.template(`<li> `);
79
- var root_4 = _$_.template(`<ul>`);
78
+ var root_5 = _$_.template_el('li', null, ' ');
79
+ var root_4 = _$_.template_el('ul');
80
80
 
81
81
  function KeyedForLoop_render(__anchor, __block) {
82
82
  const items = [
@@ -115,7 +115,7 @@ function KeyedForLoop_render(__anchor, __block) {
115
115
 
116
116
  KeyedForLoop[_$_.$r] = KeyedForLoop_render;
117
117
 
118
- var root_8 = _$_.template(`<li> `);
118
+ var root_8 = _$_.template_el('li', null, ' ');
119
119
  var root_7 = _$_.template(`<button class=add>Add</button><ul>`, 1, 2);
120
120
  var root_6 = _$_.template(`<!>`, 1, 1);
121
121
 
@@ -164,7 +164,7 @@ function ReactiveForLoopAdd_render(__anchor, __block) {
164
164
 
165
165
  ReactiveForLoopAdd[_$_.$r] = ReactiveForLoopAdd_render;
166
166
 
167
- var root_11 = _$_.template(`<li> `);
167
+ var root_11 = _$_.template_el('li', null, ' ');
168
168
  var root_10 = _$_.template(`<button class=remove>Remove</button><ul>`, 1, 2);
169
169
  var root_9 = _$_.template(`<!>`, 1, 1);
170
170
 
@@ -213,7 +213,10 @@ function ReactiveForLoopRemove_render(__anchor, __block) {
213
213
 
214
214
  ReactiveForLoopRemove[_$_.$r] = ReactiveForLoopRemove_render;
215
215
 
216
- var root_13 = _$_.template(`<div><span class=value> </span><button class=increment>+`);
216
+ var root_13 = _$_.template_el('div', null, [
217
+ ['span', ['class', 'value'], ' '],
218
+ ['button', ['class', 'increment'], '+']
219
+ ]);
217
220
 
218
221
  function render_1(__prev) {
219
222
  var __a = `item-${__prev._a.value}`;
@@ -223,7 +226,7 @@ function render_1(__prev) {
223
226
  }
224
227
  }
225
228
 
226
- var root_12 = _$_.template(`<div>`);
229
+ var root_12 = _$_.template_el('div');
227
230
 
228
231
  function ForLoopInteractive_render(__anchor, __block) {
229
232
  const counts = _$_.track([0, 0, 0], __block, 'f8yrj3');
@@ -272,7 +275,7 @@ function ForLoopInteractive_render(__anchor, __block) {
272
275
 
273
276
  ForLoopInteractive[_$_.$r] = ForLoopInteractive_render;
274
277
 
275
- var root_16 = _$_.template(`<span> `);
278
+ var root_16 = _$_.template_el('span', null, ' ');
276
279
 
277
280
  function render_2(__prev) {
278
281
  var __a = `cell-${__prev._a.value}-${__prev._b.value}`;
@@ -290,8 +293,8 @@ function render_3(__prev) {
290
293
  }
291
294
  }
292
295
 
293
- var root_15 = _$_.template(`<div>`);
294
- var root_14 = _$_.template(`<div class=grid>`);
296
+ var root_15 = _$_.template_el('div');
297
+ var root_14 = _$_.template_el('div', ['class', 'grid']);
295
298
 
296
299
  function NestedForLoop_render(__anchor, __block) {
297
300
  const grid = [[1, 2], [3, 4]];
@@ -345,8 +348,8 @@ function NestedForLoop_render(__anchor, __block) {
345
348
 
346
349
  NestedForLoop[_$_.$r] = NestedForLoop_render;
347
350
 
348
- var root_18 = _$_.template(`<span>`);
349
- var root_17 = _$_.template(`<div class=container>`);
351
+ var root_18 = _$_.template_el('span');
352
+ var root_17 = _$_.template_el('div', ['class', 'container']);
350
353
 
351
354
  function EmptyForLoop_render(__anchor, __block) {
352
355
  const items = [];
@@ -376,7 +379,10 @@ function EmptyForLoop_render(__anchor, __block) {
376
379
 
377
380
  EmptyForLoop[_$_.$r] = EmptyForLoop_render;
378
381
 
379
- var root_20 = _$_.template(`<div><span class=name> </span><span class=role> `);
382
+ var root_20 = _$_.template_el('div', null, [
383
+ ['span', ['class', 'name'], ' '],
384
+ ['span', ['class', 'role'], ' ']
385
+ ]);
380
386
 
381
387
  function render_4(__prev) {
382
388
  var __a = `user-${_$_.get(__prev._a).id}`;
@@ -386,7 +392,7 @@ function render_4(__prev) {
386
392
  }
387
393
  }
388
394
 
389
- var root_19 = _$_.template(`<div>`);
395
+ var root_19 = _$_.template_el('div');
390
396
 
391
397
  function ForLoopComplexObjects_render(__anchor, __block) {
392
398
  const users = [
@@ -441,7 +447,7 @@ function ForLoopComplexObjects_render(__anchor, __block) {
441
447
 
442
448
  ForLoopComplexObjects[_$_.$r] = ForLoopComplexObjects_render;
443
449
 
444
- var root_23 = _$_.template(`<li> `);
450
+ var root_23 = _$_.template_el('li', null, ' ');
445
451
 
446
452
  function render_5(__prev) {
447
453
  var __a = `item-${_$_.get(__prev._a).id}`;
@@ -513,7 +519,7 @@ function KeyedForLoopReorder_render(__anchor, __block) {
513
519
 
514
520
  KeyedForLoopReorder[_$_.$r] = KeyedForLoopReorder_render;
515
521
 
516
- var root_26 = _$_.template(`<li> `);
522
+ var root_26 = _$_.template_el('li', null, ' ');
517
523
 
518
524
  function render_6(__prev) {
519
525
  var __a = `item-${_$_.get(__prev._a).id}`;
@@ -576,7 +582,7 @@ function KeyedForLoopUpdate_render(__anchor, __block) {
576
582
 
577
583
  KeyedForLoopUpdate[_$_.$r] = KeyedForLoopUpdate_render;
578
584
 
579
- var root_29 = _$_.template(`<li> `);
585
+ var root_29 = _$_.template_el('li', null, ' ');
580
586
  var root_28 = _$_.template(`<button class=shuffle>Shuffle</button><ul>`, 1, 2);
581
587
  var root_27 = _$_.template(`<!>`, 1, 1);
582
588
 
@@ -627,8 +633,8 @@ function ForLoopMixedOperations_render(__anchor, __block) {
627
633
 
628
634
  ForLoopMixedOperations[_$_.$r] = ForLoopMixedOperations_render;
629
635
 
630
- var root_33 = _$_.template(`<li> `);
631
- var root_32 = _$_.template(`<ul class=list>`);
636
+ var root_33 = _$_.template_el('li', null, ' ');
637
+ var root_32 = _$_.template_el('ul', ['class', 'list']);
632
638
 
633
639
  function consequent(__anchor, { a: showList, b: items }) {
634
640
  var ul_8 = root_32();
@@ -663,6 +669,15 @@ function if_1({ a: showList, b: items }) {
663
669
  }
664
670
 
665
671
  var root_31 = _$_.template(`<button class=toggle>Toggle List</button><button class=add>Add Item</button><!>`, 1, 3);
672
+
673
+ function render_7(__prev) {
674
+ var __a = if_1({ a: __prev._a, b: __prev._b });
675
+
676
+ if (__prev.a !== __a) {
677
+ _$_.if_update(__prev._c, __prev.a = __a);
678
+ }
679
+ }
680
+
666
681
  var root_30 = _$_.template(`<!>`, 1, 1);
667
682
 
668
683
  function ForLoopInsideIf_render(__anchor, __block) {
@@ -686,8 +701,9 @@ function ForLoopInsideIf_render(__anchor, __block) {
686
701
  };
687
702
 
688
703
  var node_5 = _$_.hydrating ? _$_.hydrate_sibling() : button_7.nextSibling;
704
+ var ifs = _$_.if_static(node_5, if_1, 0, { a: showList, b: items });
689
705
 
690
- _$_.if(node_5, if_1, false, { a: showList, b: items });
706
+ _$_.render(render_7, { a: _$_.UNINITIALIZED, _a: showList, _b: items, _c: ifs });
691
707
  _$_.append(__anchor, fragment_11);
692
708
  }));
693
709
 
@@ -696,7 +712,7 @@ function ForLoopInsideIf_render(__anchor, __block) {
696
712
 
697
713
  ForLoopInsideIf[_$_.$r] = ForLoopInsideIf_render;
698
714
 
699
- var root_36 = _$_.template(`<li>`);
715
+ var root_36 = _$_.template_el('li');
700
716
  var root_35 = _$_.template(`<button class=populate>Populate</button><ul class=list>`, 1, 2);
701
717
  var root_34 = _$_.template(`<!>`, 1, 1);
702
718
 
@@ -742,7 +758,7 @@ function ForLoopEmptyToPopulated_render(__anchor, __block) {
742
758
 
743
759
  ForLoopEmptyToPopulated[_$_.$r] = ForLoopEmptyToPopulated_render;
744
760
 
745
- var root_39 = _$_.template(`<li> `);
761
+ var root_39 = _$_.template_el('li', null, ' ');
746
762
  var root_38 = _$_.template(`<button class=clear>Clear</button><ul class=list>`, 1, 2);
747
763
  var root_37 = _$_.template(`<!>`, 1, 1);
748
764
 
@@ -791,9 +807,9 @@ function ForLoopPopulatedToEmpty_render(__anchor, __block) {
791
807
 
792
808
  ForLoopPopulatedToEmpty[_$_.$r] = ForLoopPopulatedToEmpty_render;
793
809
 
794
- var root_42 = _$_.template(`<span> `);
810
+ var root_42 = _$_.template_el('span', null, ' ');
795
811
 
796
- function render_7(__prev) {
812
+ function render_8(__prev) {
797
813
  var __a = `cell-${__prev._a.value}-${__prev._b.value}`;
798
814
 
799
815
  if (__prev.a !== __a) {
@@ -801,7 +817,7 @@ function render_7(__prev) {
801
817
  }
802
818
  }
803
819
 
804
- function render_8(__prev) {
820
+ function render_9(__prev) {
805
821
  var __a = `row-${__prev._a.value}`;
806
822
 
807
823
  if (__prev.a !== __a) {
@@ -809,8 +825,13 @@ function render_8(__prev) {
809
825
  }
810
826
  }
811
827
 
812
- var root_41 = _$_.template(`<div>`);
813
- var root_40 = _$_.template(`<div class=nested-for-reactive><button class=add-row>Add Row</button><button class=update-cell>Update Cell</button><div class=grid>`);
828
+ var root_41 = _$_.template_el('div');
829
+
830
+ var root_40 = _$_.template_el('div', ['class', 'nested-for-reactive'], [
831
+ ['button', ['class', 'add-row'], 'Add Row'],
832
+ ['button', ['class', 'update-cell'], 'Update Cell'],
833
+ ['div', ['class', 'grid']]
834
+ ]);
814
835
 
815
836
  function NestedForLoopReactive_render(__anchor, __block) {
816
837
  const grid = _$_.track([[1, 2], [3, 4]], __block, '197p4tv');
@@ -860,7 +881,7 @@ function NestedForLoopReactive_render(__anchor, __block) {
860
881
  },
861
882
  12,
862
883
  void 0,
863
- render_7
884
+ render_8
864
885
  );
865
886
 
866
887
  _$_.hydrating && _$_.pop(div_9);
@@ -871,7 +892,7 @@ function NestedForLoopReactive_render(__anchor, __block) {
871
892
  },
872
893
  12,
873
894
  void 0,
874
- render_8
895
+ render_9
875
896
  );
876
897
 
877
898
  _$_.hydrating && _$_.pop(div_8);
@@ -883,10 +904,10 @@ function NestedForLoopReactive_render(__anchor, __block) {
883
904
 
884
905
  NestedForLoopReactive[_$_.$r] = NestedForLoopReactive_render;
885
906
 
886
- var root_46 = _$_.template(`<li class=member> `);
887
- var root_45 = _$_.template(`<div><h3 class=team-name> </h3><ul>`);
907
+ var root_46 = _$_.template_el('li', ['class', 'member'], ' ');
908
+ var root_45 = _$_.template_el('div', null, [['h3', ['class', 'team-name'], ' '], ['ul']]);
888
909
 
889
- function render_9(__prev) {
910
+ function render_10(__prev) {
890
911
  var __a = `team-${_$_.get(__prev._a).id}`;
891
912
 
892
913
  if (__prev.a !== __a) {
@@ -894,9 +915,9 @@ function render_9(__prev) {
894
915
  }
895
916
  }
896
917
 
897
- var root_44 = _$_.template(`<div><h2 class=dept-name> `);
918
+ var root_44 = _$_.template_el('div', null, [['h2', ['class', 'dept-name'], ' ']]);
898
919
 
899
- function render_10(__prev) {
920
+ function render_11(__prev) {
900
921
  var __a = `dept-${_$_.get(__prev._a).id}`;
901
922
 
902
923
  if (__prev.a !== __a) {
@@ -904,7 +925,7 @@ function render_10(__prev) {
904
925
  }
905
926
  }
906
927
 
907
- var root_43 = _$_.template(`<div class=org>`);
928
+ var root_43 = _$_.template_el('div', ['class', 'org']);
908
929
 
909
930
  function ForLoopDeeplyNested_render(__anchor, __block) {
910
931
  const departments = [
@@ -993,7 +1014,7 @@ function ForLoopDeeplyNested_render(__anchor, __block) {
993
1014
  (pattern_5) => pattern_5.id,
994
1015
  void 0,
995
1016
  void 0,
996
- render_9
1017
+ render_10
997
1018
  );
998
1019
 
999
1020
  _$_.hydrating && _$_.pop(div_11);
@@ -1006,7 +1027,7 @@ function ForLoopDeeplyNested_render(__anchor, __block) {
1006
1027
  (pattern_4) => pattern_4.id,
1007
1028
  void 0,
1008
1029
  void 0,
1009
- render_10
1030
+ render_11
1010
1031
  );
1011
1032
 
1012
1033
  _$_.hydrating && _$_.pop(div_10);
@@ -1017,9 +1038,9 @@ function ForLoopDeeplyNested_render(__anchor, __block) {
1017
1038
 
1018
1039
  ForLoopDeeplyNested[_$_.$r] = ForLoopDeeplyNested_render;
1019
1040
 
1020
- var root_49 = _$_.template(`<li>`);
1041
+ var root_49 = _$_.template_el('li');
1021
1042
 
1022
- function render_11(__prev) {
1043
+ function render_12(__prev) {
1023
1044
  var __a = `[${__prev._a.value}] ${__prev._b}`;
1024
1045
 
1025
1046
  if (__prev.a !== __a) {
@@ -1064,7 +1085,7 @@ function ForLoopIndexUpdate_render(__anchor, __block) {
1064
1085
  },
1065
1086
  12,
1066
1087
  void 0,
1067
- render_11
1088
+ render_12
1068
1089
  );
1069
1090
 
1070
1091
  _$_.hydrating && _$_.pop(ul_12);
@@ -1078,9 +1099,9 @@ function ForLoopIndexUpdate_render(__anchor, __block) {
1078
1099
 
1079
1100
  ForLoopIndexUpdate[_$_.$r] = ForLoopIndexUpdate_render;
1080
1101
 
1081
- var root_52 = _$_.template(`<li>`);
1102
+ var root_52 = _$_.template_el('li');
1082
1103
 
1083
- function render_12(__prev) {
1104
+ function render_13(__prev) {
1084
1105
  var __pattern_6 = _$_.get(__prev._a);
1085
1106
  var __a = `[${__prev._b.value}] ${__pattern_6.id}: ${__pattern_6.value}`;
1086
1107
 
@@ -1092,7 +1113,7 @@ function render_12(__prev) {
1092
1113
  var __b = __prev._b.value;
1093
1114
 
1094
1115
  if (__prev.b !== __b) {
1095
- _$_.set_attribute(__prev._c, 'data-index', __prev.b = __b);
1116
+ _$_.set_attribute_value(__prev._c, 'data-index', __prev.b = __b);
1096
1117
  }
1097
1118
 
1098
1119
  var __c = `item-${__pattern_6.id}`;
@@ -1151,7 +1172,7 @@ function KeyedForLoopWithIndex_render(__anchor, __block) {
1151
1172
  (pattern_6, i) => pattern_6.id,
1152
1173
  void 0,
1153
1174
  void 0,
1154
- render_12
1175
+ render_13
1155
1176
  );
1156
1177
 
1157
1178
  _$_.hydrating && _$_.pop(ul_13);
@@ -1165,7 +1186,7 @@ function KeyedForLoopWithIndex_render(__anchor, __block) {
1165
1186
 
1166
1187
  KeyedForLoopWithIndex[_$_.$r] = KeyedForLoopWithIndex_render;
1167
1188
 
1168
- var root_55 = _$_.template(`<div> `);
1189
+ var root_55 = _$_.template_el('div', null, ' ');
1169
1190
  var root_54 = _$_.template(`<div class=wrapper><header class=before>Before</header><footer class=after>After</footer></div><button class=add>Add`, 1, 2);
1170
1191
  var root_53 = _$_.template(`<!>`, 1, 1);
1171
1192
 
@@ -1219,7 +1240,7 @@ function ForLoopWithSiblings_render(__anchor, __block) {
1219
1240
 
1220
1241
  ForLoopWithSiblings[_$_.$r] = ForLoopWithSiblings_render;
1221
1242
 
1222
- var root_56 = _$_.template(`<div>`);
1243
+ var root_56 = _$_.template_el('div');
1223
1244
 
1224
1245
  function ForLoopItemState_render(__anchor, __block) {
1225
1246
  const initialItems = [
@@ -1249,10 +1270,19 @@ function ForLoopItemState_render(__anchor, __block) {
1249
1270
 
1250
1271
  ForLoopItemState[_$_.$r] = ForLoopItemState_render;
1251
1272
 
1252
- var root_57 = _$_.template(`<div><input type=checkbox class=checkbox><span>`);
1273
+ var root_57 = _$_.template_el(
1274
+ 'div',
1275
+ null,
1276
+ [
1277
+ ['input', ['type', 'checkbox', 'class', 'checkbox']],
1278
+ ['span']
1279
+ ],
1280
+ 1
1281
+ );
1253
1282
 
1254
- function render_13(__prev) {
1255
- var __a = __prev._a.value;
1283
+ function render_14(__prev) {
1284
+ var __done_value = __prev._a.value;
1285
+ var __a = __done_value;
1256
1286
 
1257
1287
  if (__prev.a !== __a) {
1258
1288
  _$_.set_checked(__prev._b, __prev.a = __a);
@@ -1265,7 +1295,7 @@ function render_13(__prev) {
1265
1295
  __prev.b = __b;
1266
1296
  }
1267
1297
 
1268
- var __c = __prev._a.value ? 'completed' : 'pending';
1298
+ var __c = __done_value ? 'completed' : 'pending';
1269
1299
 
1270
1300
  if (__prev.c !== __c) {
1271
1301
  _$_.set_class(__prev._d, __prev.c = __c);
@@ -1292,7 +1322,7 @@ function TodoItem_render(__anchor, __block, props) {
1292
1322
  var span_6 = _$_.hydrating ? _$_.hydrate_sibling() : input.nextSibling;
1293
1323
  }
1294
1324
 
1295
- _$_.render(render_13, {
1325
+ _$_.render(render_14, {
1296
1326
  a: void 0,
1297
1327
  b: '',
1298
1328
  c: _$_.UNINITIALIZED,
@@ -1309,8 +1339,8 @@ function TodoItem_render(__anchor, __block, props) {
1309
1339
 
1310
1340
  TodoItem[_$_.$r] = TodoItem_render;
1311
1341
 
1312
- var root_59 = _$_.template(`<li class=single> `);
1313
- var root_58 = _$_.template(`<ul>`);
1342
+ var root_59 = _$_.template_el('li', ['class', 'single'], ' ');
1343
+ var root_58 = _$_.template_el('ul');
1314
1344
 
1315
1345
  function ForLoopSingleItem_render(__anchor, __block) {
1316
1346
  const items = ['Only'];
@@ -1343,7 +1373,7 @@ function ForLoopSingleItem_render(__anchor, __block) {
1343
1373
 
1344
1374
  ForLoopSingleItem[_$_.$r] = ForLoopSingleItem_render;
1345
1375
 
1346
- var root_62 = _$_.template(`<li> `);
1376
+ var root_62 = _$_.template_el('li', null, ' ');
1347
1377
  var root_61 = _$_.template(`<button class=prepend>Prepend A</button><ul>`, 1, 2);
1348
1378
  var root_60 = _$_.template(`<!>`, 1, 1);
1349
1379
 
@@ -1394,7 +1424,7 @@ function ForLoopAddAtBeginning_render(__anchor, __block) {
1394
1424
 
1395
1425
  ForLoopAddAtBeginning[_$_.$r] = ForLoopAddAtBeginning_render;
1396
1426
 
1397
- var root_65 = _$_.template(`<li> `);
1427
+ var root_65 = _$_.template_el('li', null, ' ');
1398
1428
  var root_64 = _$_.template(`<button class=insert>Insert B</button><ul>`, 1, 2);
1399
1429
  var root_63 = _$_.template(`<!>`, 1, 1);
1400
1430
 
@@ -1448,7 +1478,7 @@ function ForLoopAddInMiddle_render(__anchor, __block) {
1448
1478
 
1449
1479
  ForLoopAddInMiddle[_$_.$r] = ForLoopAddInMiddle_render;
1450
1480
 
1451
- var root_68 = _$_.template(`<li> `);
1481
+ var root_68 = _$_.template_el('li', null, ' ');
1452
1482
  var root_67 = _$_.template(`<button class=remove-middle>Remove B</button><ul>`, 1, 2);
1453
1483
  var root_66 = _$_.template(`<!>`, 1, 1);
1454
1484
 
@@ -1499,9 +1529,9 @@ function ForLoopRemoveFromMiddle_render(__anchor, __block) {
1499
1529
 
1500
1530
  ForLoopRemoveFromMiddle[_$_.$r] = ForLoopRemoveFromMiddle_render;
1501
1531
 
1502
- var root_70 = _$_.template(`<li> `);
1532
+ var root_70 = _$_.template_el('li', null, ' ');
1503
1533
 
1504
- function render_14(__prev) {
1534
+ function render_15(__prev) {
1505
1535
  var __a = `item-${__prev._a.value}`;
1506
1536
 
1507
1537
  if (__prev.a !== __a) {
@@ -1509,7 +1539,7 @@ function render_14(__prev) {
1509
1539
  }
1510
1540
  }
1511
1541
 
1512
- var root_69 = _$_.template(`<ul class=large-list>`);
1542
+ var root_69 = _$_.template_el('ul', ['class', 'large-list']);
1513
1543
 
1514
1544
  function ForLoopLargeList_render(__anchor, __block) {
1515
1545
  const items = _$_.with_scope(__block, () => Array.from({ length: 50 }, (_, i) => `Item ${i + 1}`));
@@ -1534,7 +1564,7 @@ function ForLoopLargeList_render(__anchor, __block) {
1534
1564
  },
1535
1565
  12,
1536
1566
  void 0,
1537
- render_14
1567
+ render_15
1538
1568
  );
1539
1569
 
1540
1570
  _$_.hydrating && _$_.pop(ul_18);
@@ -1545,7 +1575,7 @@ function ForLoopLargeList_render(__anchor, __block) {
1545
1575
 
1546
1576
  ForLoopLargeList[_$_.$r] = ForLoopLargeList_render;
1547
1577
 
1548
- var root_73 = _$_.template(`<li> `);
1578
+ var root_73 = _$_.template_el('li', null, ' ');
1549
1579
  var root_72 = _$_.template(`<button class=swap>Swap First and Last</button><ul>`, 1, 2);
1550
1580
  var root_71 = _$_.template(`<!>`, 1, 1);
1551
1581
 
@@ -1599,7 +1629,7 @@ function ForLoopSwap_render(__anchor, __block) {
1599
1629
 
1600
1630
  ForLoopSwap[_$_.$r] = ForLoopSwap_render;
1601
1631
 
1602
- var root_76 = _$_.template(`<li> `);
1632
+ var root_76 = _$_.template_el('li', null, ' ');
1603
1633
  var root_75 = _$_.template(`<button class=reverse>Reverse</button><ul>`, 1, 2);
1604
1634
  var root_74 = _$_.template(`<!>`, 1, 1);
1605
1635
 
@@ -1650,8 +1680,13 @@ function ForLoopReverse_render(__anchor, __block) {
1650
1680
 
1651
1681
  ForLoopReverse[_$_.$r] = ForLoopReverse_render;
1652
1682
 
1653
- var root_78 = _$_.template(`<span class=item> `);
1654
- var root_77 = _$_.template(`<div class=wrapper><div class=host><p class=tail>p</p></div><button class=push>Push</button><button class=rotate>Rotate`);
1683
+ var root_78 = _$_.template_el('span', ['class', 'item'], ' ');
1684
+
1685
+ var root_77 = _$_.template_el('div', ['class', 'wrapper'], [
1686
+ ['div', ['class', 'host'], [['p', ['class', 'tail'], 'p']]],
1687
+ ['button', ['class', 'push'], 'Push'],
1688
+ ['button', ['class', 'rotate'], 'Rotate']
1689
+ ]);
1655
1690
 
1656
1691
  function KeyedForLoopAppendAndRotate_render(__anchor, __block) {
1657
1692
  const items = _$_.track([1, 2, 3], __block, '1at4qo4');
@@ -1701,9 +1736,9 @@ function KeyedForLoopAppendAndRotate_render(__anchor, __block) {
1701
1736
 
1702
1737
  KeyedForLoopAppendAndRotate[_$_.$r] = KeyedForLoopAppendAndRotate_render;
1703
1738
 
1704
- var root_79 = _$_.template(`<span class=item>`);
1739
+ var root_79 = _$_.template_el('span', ['class', 'item']);
1705
1740
 
1706
- function render_15(__prev) {
1741
+ function render_16(__prev) {
1707
1742
  var __a = __prev.$item;
1708
1743
 
1709
1744
  if (__prev.a !== __a) {
@@ -1726,13 +1761,17 @@ function RootKeyedList_render(__anchor, __block, props) {
1726
1761
  void 0,
1727
1762
  void 0,
1728
1763
  void 0,
1729
- render_15
1764
+ render_16
1730
1765
  );
1731
1766
  }
1732
1767
 
1733
1768
  RootKeyedList[_$_.$r] = RootKeyedList_render;
1734
1769
 
1735
- var root_80 = _$_.template(`<div class=wrapper><div class=host><p class=tail>p</p></div><button class=push>Push</button><button class=rotate>Rotate`);
1770
+ var root_80 = _$_.template_el('div', ['class', 'wrapper'], [
1771
+ ['div', ['class', 'host'], [['p', ['class', 'tail'], 'p']]],
1772
+ ['button', ['class', 'push'], 'Push'],
1773
+ ['button', ['class', 'rotate'], 'Rotate']
1774
+ ]);
1736
1775
 
1737
1776
  function RootKeyedForLoopAppendAndRotate_render(__anchor, __block) {
1738
1777
  const items = _$_.track([1, 2, 3], __block, 'mdp2e8');