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,13 +2,13 @@ import { RippleDate, flushSync, track } from 'ripple';
2
2
 
3
3
  describe('RippleDate', () => {
4
4
  it('handles getTime() with reactive updates', () => {
5
- function DateTest() {
6
- return <>
7
- let date = RippleDate(2025, 0, 1);
8
- let &[time] = track(() => date.getTime());
5
+ function DateTest() @{
6
+ let date = new RippleDate(2025, 0, 1);
7
+ let &[time] = track(() => date.getTime());
8
+ <>
9
9
  <button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>
10
10
  <pre>{time}</pre>
11
- </>;
11
+ </>
12
12
  }
13
13
 
14
14
  render(DateTest);
@@ -25,13 +25,13 @@ describe('RippleDate', () => {
25
25
  });
26
26
 
27
27
  it('handles getFullYear() with reactive updates', () => {
28
- function DateTest() {
29
- return <>
30
- let date = RippleDate(2025, 5, 15);
31
- let &[year] = track(() => date.getFullYear());
28
+ function DateTest() @{
29
+ let date = new RippleDate(2025, 5, 15);
30
+ let &[year] = track(() => date.getFullYear());
31
+ <>
32
32
  <button onClick={() => date.setFullYear(2030)}>{'Change Year'}</button>
33
33
  <pre>{year}</pre>
34
- </>;
34
+ </>
35
35
  }
36
36
 
37
37
  render(DateTest);
@@ -47,13 +47,13 @@ describe('RippleDate', () => {
47
47
  });
48
48
 
49
49
  it('handles getMonth() with reactive updates', () => {
50
- function DateTest() {
51
- return <>
52
- let date = RippleDate(2025, 0, 15);
53
- let &[month] = track(() => date.getMonth());
50
+ function DateTest() @{
51
+ let date = new RippleDate(2025, 0, 15);
52
+ let &[month] = track(() => date.getMonth());
53
+ <>
54
54
  <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>
55
55
  <pre>{month}</pre>
56
- </>;
56
+ </>
57
57
  }
58
58
 
59
59
  render(DateTest);
@@ -69,13 +69,13 @@ describe('RippleDate', () => {
69
69
  });
70
70
 
71
71
  it('handles getDate() with reactive updates', () => {
72
- function DateTest() {
73
- return <>
74
- let date = RippleDate(2025, 0, 1);
75
- let &[day] = track(() => date.getDate());
72
+ function DateTest() @{
73
+ let date = new RippleDate(2025, 0, 1);
74
+ let &[day] = track(() => date.getDate());
75
+ <>
76
76
  <button onClick={() => date.setDate(15)}>{'Change Day'}</button>
77
77
  <pre>{day}</pre>
78
- </>;
78
+ </>
79
79
  }
80
80
 
81
81
  render(DateTest);
@@ -91,13 +91,13 @@ describe('RippleDate', () => {
91
91
  });
92
92
 
93
93
  it('handles getDay() with reactive updates', () => {
94
- function DateTest() {
95
- return <>
96
- let date = RippleDate(2025, 0, 1);
97
- let &[dayOfWeek] = track(() => date.getDay());
94
+ function DateTest() @{
95
+ let date = new RippleDate(2025, 0, 1);
96
+ let &[dayOfWeek] = track(() => date.getDay());
97
+ <>
98
98
  <button onClick={() => date.setDate(2)}>{'Next Day'}</button>
99
99
  <pre>{dayOfWeek}</pre>
100
- </>;
100
+ </>
101
101
  }
102
102
 
103
103
  render(DateTest);
@@ -113,13 +113,13 @@ describe('RippleDate', () => {
113
113
  });
114
114
 
115
115
  it('handles getHours() with reactive updates', () => {
116
- function DateTest() {
117
- return <>
118
- let date = RippleDate(2025, 0, 1, 10, 30, 0);
119
- let &[hours] = track(() => date.getHours());
116
+ function DateTest() @{
117
+ let date = new RippleDate(2025, 0, 1, 10, 30, 0);
118
+ let &[hours] = track(() => date.getHours());
119
+ <>
120
120
  <button onClick={() => date.setHours(15)}>{'Change to 3 PM'}</button>
121
121
  <pre>{hours}</pre>
122
- </>;
122
+ </>
123
123
  }
124
124
 
125
125
  render(DateTest);
@@ -135,13 +135,13 @@ describe('RippleDate', () => {
135
135
  });
136
136
 
137
137
  it('handles getMinutes() with reactive updates', () => {
138
- function DateTest() {
139
- return <>
140
- let date = RippleDate(2025, 0, 1, 10, 15, 0);
141
- let &[minutes] = track(() => date.getMinutes());
138
+ function DateTest() @{
139
+ let date = new RippleDate(2025, 0, 1, 10, 15, 0);
140
+ let &[minutes] = track(() => date.getMinutes());
141
+ <>
142
142
  <button onClick={() => date.setMinutes(45)}>{'Change Minutes'}</button>
143
143
  <pre>{minutes}</pre>
144
- </>;
144
+ </>
145
145
  }
146
146
 
147
147
  render(DateTest);
@@ -157,13 +157,13 @@ describe('RippleDate', () => {
157
157
  });
158
158
 
159
159
  it('handles getSeconds() with reactive updates', () => {
160
- function DateTest() {
161
- return <>
162
- let date = RippleDate(2025, 0, 1, 10, 15, 30);
163
- let &[seconds] = track(() => date.getSeconds());
160
+ function DateTest() @{
161
+ let date = new RippleDate(2025, 0, 1, 10, 15, 30);
162
+ let &[seconds] = track(() => date.getSeconds());
163
+ <>
164
164
  <button onClick={() => date.setSeconds(45)}>{'Change Seconds'}</button>
165
165
  <pre>{seconds}</pre>
166
- </>;
166
+ </>
167
167
  }
168
168
 
169
169
  render(DateTest);
@@ -179,13 +179,13 @@ describe('RippleDate', () => {
179
179
  });
180
180
 
181
181
  it('handles toISOString() with reactive updates', () => {
182
- function DateTest() {
183
- return <>
184
- let date = RippleDate(2025, 0, 1, 12, 0, 0);
185
- let &[isoString] = track(() => date.toISOString());
182
+ function DateTest() @{
183
+ let date = new RippleDate(2025, 0, 1, 12, 0, 0);
184
+ let &[isoString] = track(() => date.toISOString());
185
+ <>
186
186
  <button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>
187
187
  <pre>{isoString}</pre>
188
- </>;
188
+ </>
189
189
  }
190
190
 
191
191
  render(DateTest);
@@ -206,13 +206,13 @@ describe('RippleDate', () => {
206
206
  });
207
207
 
208
208
  it('handles toDateString() with reactive updates', () => {
209
- function DateTest() {
210
- return <>
211
- let date = RippleDate(2025, 0, 1);
212
- let &[dateString] = track(() => date.toDateString());
209
+ function DateTest() @{
210
+ let date = new RippleDate(2025, 0, 1);
211
+ let &[dateString] = track(() => date.toDateString());
212
+ <>
213
213
  <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>
214
214
  <pre>{dateString}</pre>
215
- </>;
215
+ </>
216
216
  }
217
217
 
218
218
  render(DateTest);
@@ -231,13 +231,13 @@ describe('RippleDate', () => {
231
231
  });
232
232
 
233
233
  it('handles valueOf() with reactive updates', () => {
234
- function DateTest() {
235
- return <>
236
- let date = RippleDate(2025, 0, 1);
237
- let &[valueOf] = track(() => date.valueOf());
234
+ function DateTest() @{
235
+ let date = new RippleDate(2025, 0, 1);
236
+ let &[valueOf] = track(() => date.valueOf());
237
+ <>
238
238
  <button onClick={() => date.setDate(2)}>{'Next Day'}</button>
239
239
  <pre>{valueOf}</pre>
240
- </>;
240
+ </>
241
241
  }
242
242
 
243
243
  render(DateTest);
@@ -254,16 +254,16 @@ describe('RippleDate', () => {
254
254
  });
255
255
 
256
256
  it('handles multiple get methods reacting to same setTime change', () => {
257
- function DateTest() {
258
- return <>
259
- let date = RippleDate(2025, 0, 1, 10, 30, 15);
260
- let &[year] = track(() => date.getFullYear());
261
- let &[month] = track(() => date.getMonth());
262
- let &[day] = track(() => date.getDate());
263
- let &[hours] = track(() => date.getHours());
264
- <button onClick={() => date.setTime(new Date(2026, 5, 15, 14, 45, 30).getTime())}>
265
- {'Change All'}
266
- </button>
257
+ function DateTest() @{
258
+ let date = new RippleDate(2025, 0, 1, 10, 30, 15);
259
+ let &[year] = track(() => date.getFullYear());
260
+ let &[month] = track(() => date.getMonth());
261
+ let &[day] = track(() => date.getDate());
262
+ let &[hours] = track(() => date.getHours());
263
+ <>
264
+ <button
265
+ onClick={() => date.setTime(new Date(2026, 5, 15, 14, 45, 30).getTime())}
266
+ >{'Change All'}</button>
267
267
  <div>
268
268
  {'Year: '}
269
269
  {year}
@@ -280,7 +280,7 @@ describe('RippleDate', () => {
280
280
  {'Hours: '}
281
281
  {hours}
282
282
  </div>
283
- </>;
283
+ </>
284
284
  }
285
285
 
286
286
  render(DateTest);
@@ -303,16 +303,16 @@ describe('RippleDate', () => {
303
303
  });
304
304
 
305
305
  it('handles constructor with different parameter combinations', () => {
306
- function DateTest() {
307
- return <>
308
- let dateNow = RippleDate();
309
- let dateFromString = RippleDate('2025-01-01');
310
- let dateFromNumbers = RippleDate(2025, 0, 1);
311
- let dateFromTimestamp = RippleDate(1735689600000);
312
- let &[nowYear] = track(() => dateNow.getFullYear());
313
- let &[stringYear] = track(() => dateFromString.getFullYear());
314
- let &[numbersYear] = track(() => dateFromNumbers.getFullYear());
315
- let &[timestampYear] = track(() => dateFromTimestamp.getFullYear());
306
+ function DateTest() @{
307
+ let dateNow = new RippleDate();
308
+ let dateFromString = new RippleDate('2025-01-01');
309
+ let dateFromNumbers = new RippleDate(2025, 0, 1);
310
+ let dateFromTimestamp = new RippleDate(1735689600000);
311
+ let &[nowYear] = track(() => dateNow.getFullYear());
312
+ let &[stringYear] = track(() => dateFromString.getFullYear());
313
+ let &[numbersYear] = track(() => dateFromNumbers.getFullYear());
314
+ let &[timestampYear] = track(() => dateFromTimestamp.getFullYear());
315
+ <>
316
316
  <div>
317
317
  {'Now: '}
318
318
  {nowYear}
@@ -329,7 +329,7 @@ describe('RippleDate', () => {
329
329
  {'Timestamp: '}
330
330
  {timestampYear}
331
331
  </div>
332
- </>;
332
+ </>
333
333
  }
334
334
 
335
335
  render(DateTest);
@@ -352,11 +352,11 @@ describe('RippleDate', () => {
352
352
  });
353
353
 
354
354
  it('handles get methods with arguments non-memoized', () => {
355
- function DateTest() {
356
- return <>
357
- let date = RippleDate();
358
- let &[localeDateString] = track(() => date.toLocaleDateString('en-US'));
359
- let &[localeTimeString] = track(() => date.toLocaleTimeString('en-US'));
355
+ function DateTest() @{
356
+ let date = new RippleDate();
357
+ let &[localeDateString] = track(() => date.toLocaleDateString('en-US'));
358
+ let &[localeTimeString] = track(() => date.toLocaleTimeString('en-US'));
359
+ <>
360
360
  <button onClick={() => date.setFullYear(date.getFullYear() + 1)}>{'Next Year'}</button>
361
361
  <div>
362
362
  {'Date: '}
@@ -366,7 +366,7 @@ describe('RippleDate', () => {
366
366
  {'Time: '}
367
367
  {localeTimeString}
368
368
  </div>
369
- </>;
369
+ </>
370
370
  }
371
371
 
372
372
  render(DateTest);