ripple 0.3.68 → 0.3.69

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 (182) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +2 -2
  4. package/src/runtime/element.js +1 -1
  5. package/src/runtime/index-client.js +11 -11
  6. package/src/runtime/index-server.js +7 -4
  7. package/src/runtime/internal/client/bindings.js +1 -1
  8. package/src/runtime/internal/client/blocks.js +13 -4
  9. package/src/runtime/internal/client/component.js +55 -0
  10. package/src/runtime/internal/client/composite.js +4 -2
  11. package/src/runtime/internal/client/expression.js +65 -7
  12. package/src/runtime/internal/client/hmr.js +54 -43
  13. package/src/runtime/internal/client/index.js +5 -1
  14. package/src/runtime/internal/client/portal.js +70 -69
  15. package/src/runtime/internal/client/render.js +3 -0
  16. package/src/runtime/internal/server/index.js +92 -8
  17. package/tests/client/__snapshots__/html.test.tsrx.snap +3 -3
  18. package/tests/client/array/array.copy-within.test.tsrx +33 -31
  19. package/tests/client/array/array.derived.test.tsrx +186 -169
  20. package/tests/client/array/array.iteration.test.tsrx +40 -37
  21. package/tests/client/array/array.mutations.test.tsrx +113 -101
  22. package/tests/client/array/array.static.test.tsrx +119 -101
  23. package/tests/client/array/array.to-methods.test.tsrx +24 -21
  24. package/tests/client/async-suspend.test.tsrx +247 -246
  25. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +0 -1
  26. package/tests/client/basic/basic.attributes.test.tsrx +428 -423
  27. package/tests/client/basic/basic.collections.test.tsrx +109 -102
  28. package/tests/client/basic/basic.components.test.tsrx +323 -205
  29. package/tests/client/basic/basic.errors.test.tsrx +91 -91
  30. package/tests/client/basic/basic.events.test.tsrx +114 -115
  31. package/tests/client/basic/basic.get-set.test.tsrx +97 -87
  32. package/tests/client/basic/basic.hmr.test.tsrx +19 -16
  33. package/tests/client/basic/basic.reactivity.test.tsrx +199 -191
  34. package/tests/client/basic/basic.rendering.test.tsrx +272 -182
  35. package/tests/client/basic/basic.styling.test.tsrx +23 -22
  36. package/tests/client/basic/basic.utilities.test.tsrx +10 -8
  37. package/tests/client/boundaries.test.tsrx +26 -26
  38. package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +5 -5
  39. package/tests/client/compiler/__snapshots__/compiler.assignments.test.tsrx.snap +5 -5
  40. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -81
  41. package/tests/client/compiler/compiler.attributes.test.tsrx +15 -15
  42. package/tests/client/compiler/compiler.basic.test.tsrx +322 -314
  43. package/tests/client/compiler/compiler.regex.test.tsrx +44 -47
  44. package/tests/client/compiler/compiler.tracked-access.test.tsrx +38 -38
  45. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  46. package/tests/client/compiler/compiler.typescript.test.tsrx +2 -2
  47. package/tests/client/composite/composite.dynamic-components.test.tsrx +47 -48
  48. package/tests/client/composite/composite.generics.test.tsrx +168 -192
  49. package/tests/client/composite/composite.props.test.tsrx +97 -81
  50. package/tests/client/composite/composite.reactivity.test.tsrx +177 -147
  51. package/tests/client/composite/composite.render.test.tsrx +122 -105
  52. package/tests/client/computed-properties.test.tsrx +28 -28
  53. package/tests/client/context.test.tsrx +21 -21
  54. package/tests/client/css/global-additional-cases.test.tsrx +58 -58
  55. package/tests/client/css/global-advanced-selectors.test.tsrx +16 -16
  56. package/tests/client/css/global-at-rules.test.tsrx +10 -10
  57. package/tests/client/css/global-basic.test.tsrx +14 -14
  58. package/tests/client/css/global-classes-ids.test.tsrx +14 -14
  59. package/tests/client/css/global-combinators.test.tsrx +10 -10
  60. package/tests/client/css/global-complex-nesting.test.tsrx +14 -14
  61. package/tests/client/css/global-edge-cases.test.tsrx +18 -18
  62. package/tests/client/css/global-keyframes.test.tsrx +12 -12
  63. package/tests/client/css/global-nested.test.tsrx +10 -10
  64. package/tests/client/css/global-pseudo.test.tsrx +12 -12
  65. package/tests/client/css/global-scoping.test.tsrx +20 -20
  66. package/tests/client/css/style-identifier.test.tsrx +143 -291
  67. package/tests/client/date.test.tsrx +146 -133
  68. package/tests/client/dynamic-elements.test.tsrx +398 -365
  69. package/tests/client/events.test.tsrx +292 -290
  70. package/tests/client/for.test.tsrx +156 -153
  71. package/tests/client/head.test.tsrx +105 -96
  72. package/tests/client/html.test.tsrx +122 -26
  73. package/tests/client/input-value.test.tsrx +1361 -1314
  74. package/tests/client/lazy-array.test.tsrx +16 -13
  75. package/tests/client/lazy-destructuring.test.tsrx +257 -213
  76. package/tests/client/map.test.tsrx +65 -60
  77. package/tests/client/media-query.test.tsrx +22 -20
  78. package/tests/client/object.test.tsrx +87 -81
  79. package/tests/client/portal.test.tsrx +57 -51
  80. package/tests/client/ref.test.tsrx +233 -202
  81. package/tests/client/return.test.tsrx +71 -2560
  82. package/tests/client/set.test.tsrx +54 -45
  83. package/tests/client/svg.test.tsrx +216 -186
  84. package/tests/client/switch.test.tsrx +194 -193
  85. package/tests/client/track-async-hydration.test.tsrx +18 -14
  86. package/tests/client/tracked-index-access.test.tsrx +28 -18
  87. package/tests/client/try.test.tsrx +675 -548
  88. package/tests/client/tsx.test.tsrx +373 -311
  89. package/tests/client/typescript-generics.test.tsrx +145 -145
  90. package/tests/client/url/url.derived.test.tsrx +33 -28
  91. package/tests/client/url/url.parsing.test.tsrx +61 -51
  92. package/tests/client/url/url.partial-removal.test.tsrx +56 -48
  93. package/tests/client/url/url.reactivity.test.tsrx +142 -125
  94. package/tests/client/url/url.serialization.test.tsrx +13 -11
  95. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +34 -29
  96. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +25 -21
  97. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +50 -45
  98. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +111 -99
  99. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +49 -43
  100. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +14 -12
  101. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +16 -14
  102. package/tests/hydration/basic.test.js +3 -3
  103. package/tests/hydration/compiled/client/basic.js +586 -651
  104. package/tests/hydration/compiled/client/composite.js +79 -104
  105. package/tests/hydration/compiled/client/events.js +140 -148
  106. package/tests/hydration/compiled/client/for.js +1005 -1018
  107. package/tests/hydration/compiled/client/head.js +124 -134
  108. package/tests/hydration/compiled/client/hmr.js +41 -48
  109. package/tests/hydration/compiled/client/html-in-template.js +38 -41
  110. package/tests/hydration/compiled/client/html.js +970 -1314
  111. package/tests/hydration/compiled/client/if-children.js +234 -249
  112. package/tests/hydration/compiled/client/if.js +182 -189
  113. package/tests/hydration/compiled/client/mixed-control-flow.js +347 -303
  114. package/tests/hydration/compiled/client/nested-control-flow.js +1084 -832
  115. package/tests/hydration/compiled/client/portal.js +65 -85
  116. package/tests/hydration/compiled/client/reactivity.js +84 -90
  117. package/tests/hydration/compiled/client/return.js +38 -1939
  118. package/tests/hydration/compiled/client/switch.js +218 -224
  119. package/tests/hydration/compiled/client/track-async-serialization.js +250 -259
  120. package/tests/hydration/compiled/client/try.js +123 -132
  121. package/tests/hydration/compiled/server/basic.js +773 -831
  122. package/tests/hydration/compiled/server/composite.js +166 -191
  123. package/tests/hydration/compiled/server/events.js +170 -184
  124. package/tests/hydration/compiled/server/for.js +851 -909
  125. package/tests/hydration/compiled/server/head.js +206 -216
  126. package/tests/hydration/compiled/server/hmr.js +64 -72
  127. package/tests/hydration/compiled/server/html-in-template.js +42 -76
  128. package/tests/hydration/compiled/server/html.js +1362 -1667
  129. package/tests/hydration/compiled/server/if-children.js +419 -445
  130. package/tests/hydration/compiled/server/if.js +194 -208
  131. package/tests/hydration/compiled/server/mixed-control-flow.js +249 -257
  132. package/tests/hydration/compiled/server/nested-control-flow.js +491 -515
  133. package/tests/hydration/compiled/server/portal.js +152 -160
  134. package/tests/hydration/compiled/server/reactivity.js +94 -106
  135. package/tests/hydration/compiled/server/return.js +28 -2172
  136. package/tests/hydration/compiled/server/switch.js +274 -286
  137. package/tests/hydration/compiled/server/track-async-serialization.js +340 -358
  138. package/tests/hydration/compiled/server/try.js +167 -185
  139. package/tests/hydration/components/basic.tsrx +320 -272
  140. package/tests/hydration/components/composite.tsrx +44 -32
  141. package/tests/hydration/components/events.tsrx +101 -91
  142. package/tests/hydration/components/for.tsrx +510 -452
  143. package/tests/hydration/components/head.tsrx +87 -80
  144. package/tests/hydration/components/hmr.tsrx +22 -17
  145. package/tests/hydration/components/html-in-template.tsrx +22 -17
  146. package/tests/hydration/components/html.tsrx +525 -443
  147. package/tests/hydration/components/if-children.tsrx +158 -148
  148. package/tests/hydration/components/if.tsrx +109 -95
  149. package/tests/hydration/components/mixed-control-flow.tsrx +100 -96
  150. package/tests/hydration/components/nested-control-flow.tsrx +215 -203
  151. package/tests/hydration/components/portal.tsrx +41 -34
  152. package/tests/hydration/components/reactivity.tsrx +37 -27
  153. package/tests/hydration/components/return.tsrx +12 -556
  154. package/tests/hydration/components/switch.tsrx +120 -114
  155. package/tests/hydration/components/track-async-serialization.tsrx +107 -91
  156. package/tests/hydration/components/try.tsrx +55 -40
  157. package/tests/hydration/html.test.js +4 -4
  158. package/tests/hydration/return.test.js +13 -532
  159. package/tests/server/await.test.tsrx +3 -3
  160. package/tests/server/basic.attributes.test.tsrx +264 -195
  161. package/tests/server/basic.components.test.tsrx +296 -169
  162. package/tests/server/basic.test.tsrx +300 -198
  163. package/tests/server/compiler.test.tsrx +62 -60
  164. package/tests/server/composite.props.test.tsrx +77 -63
  165. package/tests/server/composite.test.tsrx +168 -192
  166. package/tests/server/context.test.tsrx +18 -12
  167. package/tests/server/dynamic-elements.test.tsrx +197 -180
  168. package/tests/server/for.test.tsrx +85 -78
  169. package/tests/server/head.test.tsrx +50 -43
  170. package/tests/server/html-nesting-validation.test.tsrx +8 -8
  171. package/tests/server/if.test.tsrx +57 -51
  172. package/tests/server/lazy-destructuring.test.tsrx +366 -294
  173. package/tests/server/return.test.tsrx +76 -1355
  174. package/tests/server/streaming-ssr.test.tsrx +4 -75
  175. package/tests/server/style-identifier.test.tsrx +169 -148
  176. package/tests/server/switch.test.tsrx +91 -85
  177. package/tests/server/track-async-serialization.test.tsrx +105 -85
  178. package/tests/server/try.test.tsrx +374 -280
  179. package/tests/utils/compiler-compat-config.test.js +2 -2
  180. package/tests/utils/runtime-imports.test.js +10 -0
  181. package/types/index.d.ts +8 -0
  182. package/tests/client/__snapshots__/html.test.rsrx.snap +0 -40
@@ -6,86 +6,87 @@ import { handle_root_events } from './events.js';
6
6
  import { create_text } from './operations.js';
7
7
  import { active_block } from './runtime.js';
8
8
  import { hydrating, hydrate_node, set_hydrating, set_hydrate_node } from './hydration.js';
9
- import { is_tsrx_element } from '../../element.js';
9
+ import { is_tsrx_element, tsrx_element } from '../../element.js';
10
10
 
11
11
  /**
12
- * @param {any} _
13
12
  * @param {{ target: Element, children: import('../../element.js').TSRXElement }} props
14
- * @returns {void}
13
+ * @returns {import('../../element.js').TSRXElement}
15
14
  */
16
- export function Portal(_, props) {
17
- // Portals are client-only and don't participate in hydration
18
- // The compiler-generated code already handles getting the node via sibling()
19
- var was_hydrating = hydrating;
20
- var previous_hydrate_node = hydrate_node;
21
-
22
- /** @type {Element | symbol} */
23
- let target = UNINITIALIZED;
24
- /** @type {import('../../element.js').TSRXElement | symbol} */
25
- let children = UNINITIALIZED;
26
- /** @type {Block | null} */
27
- var b = null;
28
- /** @type {Text | null} */
29
- var anchor = null;
30
- /** @type {Node | null} */
31
- var dom_start = null;
32
- /** @type {Node | null} */
33
- var dom_end = null;
34
-
35
- // Temporarily disable hydration for portal content
36
- if (was_hydrating) {
37
- set_hydrating(false);
38
- }
39
-
40
- try {
41
- render(() => {
42
- const next_target = props.target;
43
- const next_children = props.children;
44
-
45
- if (target === next_target && children === next_children) return;
46
-
47
- target = next_target;
48
- children = next_children;
49
-
50
- if (b !== null) {
51
- destroy_block(b);
52
- }
53
-
54
- if (anchor !== null) {
55
- anchor.remove();
56
- }
15
+ export function Portal(props) {
16
+ return tsrx_element(function render_portal() {
17
+ // Portals are client-only and don't participate in hydration
18
+ // The compiler-generated code already handles getting the node via sibling()
19
+ var was_hydrating = hydrating;
20
+ var previous_hydrate_node = hydrate_node;
21
+
22
+ /** @type {Element | symbol} */
23
+ let target = UNINITIALIZED;
24
+ /** @type {import('../../element.js').TSRXElement | symbol} */
25
+ let children = UNINITIALIZED;
26
+ /** @type {Block | null} */
27
+ var b = null;
28
+ /** @type {Text | null} */
29
+ var anchor = null;
30
+ /** @type {Node | null} */
31
+ var dom_start = null;
32
+ /** @type {Node | null} */
33
+ var dom_end = null;
34
+
35
+ // Temporarily disable hydration for portal content
36
+ if (was_hydrating) {
37
+ set_hydrating(false);
38
+ }
57
39
 
58
- dom_start = dom_end = null;
40
+ try {
41
+ render(() => {
42
+ const next_target = props.target;
43
+ const next_children = props.children;
59
44
 
60
- anchor = create_text();
61
- /** @type {Element} */ (target).append(anchor);
45
+ if (target === next_target && children === next_children) return;
62
46
 
63
- const cleanup_events = handle_root_events(/** @type {Element} */ (target));
47
+ target = next_target;
48
+ children = next_children;
64
49
 
65
- var block = /** @type {Block} */ (active_block);
50
+ if (b !== null) {
51
+ destroy_block(b);
52
+ }
66
53
 
67
- b = branch(() => {
68
- if (is_tsrx_element(children)) {
69
- children.render(/** @type {Text} */ (anchor), block);
54
+ if (anchor !== null) {
55
+ anchor.remove();
70
56
  }
71
- });
72
57
 
73
- dom_start = b?.s?.start;
74
- dom_end = b?.s?.end;
58
+ dom_start = dom_end = null;
75
59
 
76
- return () => {
77
- cleanup_events();
78
- /** @type {Text} */ (anchor).remove();
79
- if (dom_start && dom_end) {
80
- remove_block_dom(dom_start, dom_end);
81
- }
82
- };
83
- });
84
- } finally {
85
- // Restore hydration state
86
- if (was_hydrating) {
87
- set_hydrating(true);
88
- set_hydrate_node(/** @type {any} */ (previous_hydrate_node));
60
+ anchor = create_text();
61
+ /** @type {Element} */ (target).append(anchor);
62
+
63
+ const cleanup_events = handle_root_events(/** @type {Element} */ (target));
64
+
65
+ var block = /** @type {Block} */ (active_block);
66
+
67
+ b = branch(() => {
68
+ if (is_tsrx_element(children)) {
69
+ children.render(/** @type {Text} */ (anchor), block);
70
+ }
71
+ });
72
+
73
+ dom_start = b?.s?.start;
74
+ dom_end = b?.s?.end;
75
+
76
+ return () => {
77
+ cleanup_events();
78
+ /** @type {Text} */ (anchor).remove();
79
+ if (dom_start && dom_end) {
80
+ remove_block_dom(dom_start, dom_end);
81
+ }
82
+ };
83
+ });
84
+ } finally {
85
+ // Restore hydration state
86
+ if (was_hydrating) {
87
+ set_hydrating(true);
88
+ set_hydrate_node(/** @type {any} */ (previous_hydrate_node));
89
+ }
89
90
  }
90
- }
91
+ });
91
92
  }
@@ -134,6 +134,9 @@ function set_attribute_helper(element, key, value, remove_listeners, prev) {
134
134
  if (key === 'class') {
135
135
  const is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';
136
136
  set_class(/** @type {HTMLElement} */ (element), value, undefined, is_html);
137
+ } else if (key === 'innerHTML') {
138
+ element.removeAttribute('innerhtml');
139
+ /** @type {HTMLElement} */ (element).innerHTML = value == null ? '' : String(value);
137
140
  } else if (key === 'style') {
138
141
  set_style(element, value, prev.style);
139
142
  } else if (key === '#class') {
@@ -64,7 +64,7 @@ export { simple_hash, strong_hash } from '@tsrx/core/runtime/hash';
64
64
  export { context } from './context.js';
65
65
  export { try_block, component_block, regular_block } from './blocks.js';
66
66
  export { array_slice };
67
- export { tsrx_element, normalize_children };
67
+ export { is_tsrx_element, tsrx_element, normalize_children };
68
68
  export { create_ref_prop };
69
69
 
70
70
  /** @extends Error */
@@ -96,7 +96,7 @@ function render_tsrx_collection(value) {
96
96
  var item = value[i];
97
97
 
98
98
  if (is_tsrx_element(item)) {
99
- item.render({});
99
+ render_tsrx_element(item);
100
100
  } else if (is_array(item)) {
101
101
  render_tsrx_collection(item);
102
102
  } else if (item != null) {
@@ -105,6 +105,22 @@ function render_tsrx_collection(value) {
105
105
  }
106
106
  }
107
107
 
108
+ /**
109
+ * @param {import('../../element.js').TSRXElement} value
110
+ * @returns {void}
111
+ */
112
+ export function render_tsrx_element(value) {
113
+ const result = value.render({});
114
+
115
+ if (is_tsrx_element(result)) {
116
+ render_tsrx_element(result);
117
+ } else if (is_array(result)) {
118
+ render_tsrx_collection(result);
119
+ } else if (result != null) {
120
+ output_push(escape(result));
121
+ }
122
+ }
123
+
108
124
  /**
109
125
  * @param {any} value
110
126
  * @returns {void}
@@ -113,7 +129,7 @@ export function render_expression(value) {
113
129
  output_push(BLOCK_OPEN);
114
130
 
115
131
  if (is_tsrx_element(value)) {
116
- value.render({});
132
+ render_tsrx_element(value);
117
133
  } else if (is_array(value)) {
118
134
  render_tsrx_collection(value);
119
135
  } else {
@@ -123,6 +139,50 @@ export function render_expression(value) {
123
139
  output_push(BLOCK_CLOSE);
124
140
  }
125
141
 
142
+ /**
143
+ * @param {Function} fn
144
+ * @param {Props} props
145
+ * @returns {void}
146
+ */
147
+ export function render_component(fn, props) {
148
+ if (typeof fn !== 'function' || is_tsrx_element(fn)) {
149
+ throw_invalid_component_type(fn);
150
+ }
151
+
152
+ run_component(fn, props);
153
+ }
154
+
155
+ /**
156
+ * @param {Function} fn
157
+ * @param {Props} props
158
+ * @returns {void}
159
+ */
160
+ function run_component(fn, props) {
161
+ push_component();
162
+ try {
163
+ const value = fn(props);
164
+ if (is_tsrx_element(value)) {
165
+ render_tsrx_element(value);
166
+ } else {
167
+ render_expression(value);
168
+ }
169
+ } finally {
170
+ pop_component();
171
+ }
172
+ }
173
+
174
+ /**
175
+ * @param {any} value
176
+ * @returns {never}
177
+ */
178
+ function throw_invalid_component_type(value) {
179
+ if (is_tsrx_element(value)) {
180
+ throw new TypeError('Invalid component type: received a TSRXElement value.');
181
+ }
182
+
183
+ throw new TypeError('Invalid component type: expected a component function.');
184
+ }
185
+
126
186
  /**
127
187
  * @returns {Stream}
128
188
  */
@@ -532,7 +592,7 @@ export class Output {
532
592
  // and append them into the head immediately
533
593
  return;
534
594
  }
535
- this.#css.add(hash);
595
+ this.#root.#css.add(hash);
536
596
  }
537
597
 
538
598
  /**
@@ -685,7 +745,7 @@ export async function render(component, passed_in_options = {}) {
685
745
  if (options.stream) {
686
746
  output._setStream(options.stream);
687
747
  }
688
- component({});
748
+ render_component(component, {});
689
749
  output._decrementPending();
690
750
  output._finishSyncRun();
691
751
 
@@ -711,14 +771,14 @@ export async function render(component, passed_in_options = {}) {
711
771
  output._finishSyncRun();
712
772
  }
713
773
  if (options.rootBoundary?.catch) {
714
- options.rootBoundary.catch({ error, reset: noop });
774
+ render_component(options.rootBoundary.catch, { error, reset: noop });
715
775
  } else {
716
776
  console.error(error);
717
777
  }
718
778
  },
719
779
  () => {
720
780
  if (options.rootBoundary?.pending) {
721
- options.rootBoundary.pending({});
781
+ render_component(options.rootBoundary.pending, {});
722
782
  }
723
783
  },
724
784
  );
@@ -1193,7 +1253,13 @@ export function spread_attrs(attrs, css_hash) {
1193
1253
  for (name in attrs) {
1194
1254
  var value = attrs[name];
1195
1255
 
1196
- if (name === 'children' || typeof value === 'function' || is_tsrx_element(value)) continue;
1256
+ if (
1257
+ name === 'children' ||
1258
+ name === 'innerHTML' ||
1259
+ typeof value === 'function' ||
1260
+ is_tsrx_element(value)
1261
+ )
1262
+ continue;
1197
1263
 
1198
1264
  if (is_ripple_object(value)) {
1199
1265
  value = get(value);
@@ -1209,6 +1275,24 @@ export function spread_attrs(attrs, css_hash) {
1209
1275
  return attr_str;
1210
1276
  }
1211
1277
 
1278
+ /**
1279
+ * @param {Record<string, any>} attrs
1280
+ * @returns {string | undefined}
1281
+ */
1282
+ export function spread_inner_html(attrs) {
1283
+ if (!Object.prototype.hasOwnProperty.call(attrs, 'innerHTML')) {
1284
+ return undefined;
1285
+ }
1286
+
1287
+ var value = attrs.innerHTML;
1288
+
1289
+ if (is_ripple_object(value)) {
1290
+ value = get(value);
1291
+ }
1292
+
1293
+ return String(value ?? '');
1294
+ }
1295
+
1212
1296
  var empty_get_set = { get: undefined, set: undefined };
1213
1297
 
1214
1298
  class TrackedValue {
@@ -1,6 +1,6 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`html directive > renders dynamic html 1`] = `
3
+ exports[`Fragment innerHTML > renders dynamic innerHTML fragments 1`] = `
4
4
  <div>
5
5
  <!---->
6
6
  <div>
@@ -14,7 +14,7 @@ exports[`html directive > renders dynamic html 1`] = `
14
14
  </div>
15
15
  `;
16
16
 
17
- exports[`html directive > renders dynamic html 2`] = `
17
+ exports[`Fragment innerHTML > renders dynamic innerHTML fragments 2`] = `
18
18
  <div>
19
19
  <!---->
20
20
  <div>
@@ -28,7 +28,7 @@ exports[`html directive > renders dynamic html 2`] = `
28
28
  </div>
29
29
  `;
30
30
 
31
- exports[`html directive > renders static html 1`] = `
31
+ exports[`Fragment innerHTML > renders static innerHTML fragments 1`] = `
32
32
  <div>
33
33
  <!---->
34
34
  <div>
@@ -2,18 +2,19 @@ import { RippleArray, flushSync, track } from 'ripple';
2
2
 
3
3
  describe('RippleArray copyWithin', () => {
4
4
  it('handles copyWithin operation with reactivity', () => {
5
- component ArrayTest() {
6
- let items = new RippleArray(1, 2, 3, 4, 5);
7
- let &[firstItem] = track(() => items[0]);
8
- let &[thirdItem] = track(() => items[2]);
9
- let &[fourthItem] = track(() => items[3]);
10
-
11
- <button onClick={() => items.copyWithin(0, 3)}>{'copy end to start'}</button>
12
- <button onClick={() => items.copyWithin(2, 0, 2)}>{'copy start to middle'}</button>
13
- <pre>{JSON.stringify(items)}</pre>
14
- <pre>{firstItem}</pre>
15
- <pre>{thirdItem}</pre>
16
- <pre>{fourthItem}</pre>
5
+ function ArrayTest() {
6
+ return <>
7
+ let items = new RippleArray(1, 2, 3, 4, 5);
8
+ let &[firstItem] = track(() => items[0]);
9
+ let &[thirdItem] = track(() => items[2]);
10
+ let &[fourthItem] = track(() => items[3]);
11
+ <button onClick={() => items.copyWithin(0, 3)}>{'copy end to start'}</button>
12
+ <button onClick={() => items.copyWithin(2, 0, 2)}>{'copy start to middle'}</button>
13
+ <pre>{JSON.stringify(items)}</pre>
14
+ <pre>{firstItem}</pre>
15
+ <pre>{thirdItem}</pre>
16
+ <pre>{fourthItem}</pre>
17
+ </>;
17
18
  }
18
19
 
19
20
  render(ArrayTest);
@@ -47,15 +48,16 @@ describe('RippleArray copyWithin', () => {
47
48
  });
48
49
 
49
50
  it('handles copyWithin with negative indexes and reactivity', () => {
50
- component ArrayTest() {
51
- let items = new RippleArray(1, 2, 3, 4, 5);
52
- let &[secondItem] = track(() => items[1]);
53
- let &[thirdItem] = track(() => items[2]);
54
-
55
- <button onClick={() => items.copyWithin(-4, -2)}>{'copy with negative indexes'}</button>
56
- <pre>{JSON.stringify(items)}</pre>
57
- <pre>{secondItem}</pre>
58
- <pre>{thirdItem}</pre>
51
+ function ArrayTest() {
52
+ return <>
53
+ let items = new RippleArray(1, 2, 3, 4, 5);
54
+ let &[secondItem] = track(() => items[1]);
55
+ let &[thirdItem] = track(() => items[2]);
56
+ <button onClick={() => items.copyWithin(-4, -2)}>{'copy with negative indexes'}</button>
57
+ <pre>{JSON.stringify(items)}</pre>
58
+ <pre>{secondItem}</pre>
59
+ <pre>{thirdItem}</pre>
60
+ </>;
59
61
  }
60
62
 
61
63
  render(ArrayTest);
@@ -78,16 +80,16 @@ describe('RippleArray copyWithin', () => {
78
80
  });
79
81
 
80
82
  it('handles copyWithin with overlapping ranges', () => {
81
- component ArrayTest() {
82
- let items = new RippleArray(1, 2, 3, 4, 5);
83
- let &[entries] = track(() => Array.from(items.entries()));
84
-
85
- <button onClick={() => items.copyWithin(2, 1, 4)}>{'copy with overlap'}</button>
86
- <pre>{JSON.stringify(items)}</pre>
87
-
88
- for (const [i, value] of entries) {
89
- <pre>{`items[${i}]: ${value}`}</pre>
90
- }
83
+ function ArrayTest() {
84
+ return <>
85
+ let items = new RippleArray(1, 2, 3, 4, 5);
86
+ let &[entries] = track(() => Array.from(items.entries()));
87
+ <button onClick={() => items.copyWithin(2, 1, 4)}>{'copy with overlap'}</button>
88
+ <pre>{JSON.stringify(items)}</pre>
89
+ for (const [i, value] of entries) {
90
+ <pre>{`items[${i}]: ${value}`}</pre>
91
+ }
92
+ </>;
91
93
  }
92
94
 
93
95
  render(ArrayTest);