ripple 0.3.68 → 0.3.70

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 +57 -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 +126 -259
  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 -131
  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
@@ -2,12 +2,13 @@ import { RippleDate, flushSync, track } from 'ripple';
2
2
 
3
3
  describe('RippleDate', () => {
4
4
  it('handles getTime() with reactive updates', () => {
5
- component DateTest() {
6
- let date = RippleDate(2025, 0, 1);
7
- let &[time] = track(() => date.getTime());
8
-
9
- <button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>
10
- <pre>{time}</pre>
5
+ function DateTest() {
6
+ return <>
7
+ let date = RippleDate(2025, 0, 1);
8
+ let &[time] = track(() => date.getTime());
9
+ <button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>
10
+ <pre>{time}</pre>
11
+ </>;
11
12
  }
12
13
 
13
14
  render(DateTest);
@@ -24,12 +25,13 @@ describe('RippleDate', () => {
24
25
  });
25
26
 
26
27
  it('handles getFullYear() with reactive updates', () => {
27
- component DateTest() {
28
- let date = RippleDate(2025, 5, 15);
29
- let &[year] = track(() => date.getFullYear());
30
-
31
- <button onClick={() => date.setFullYear(2030)}>{'Change Year'}</button>
32
- <pre>{year}</pre>
28
+ function DateTest() {
29
+ return <>
30
+ let date = RippleDate(2025, 5, 15);
31
+ let &[year] = track(() => date.getFullYear());
32
+ <button onClick={() => date.setFullYear(2030)}>{'Change Year'}</button>
33
+ <pre>{year}</pre>
34
+ </>;
33
35
  }
34
36
 
35
37
  render(DateTest);
@@ -45,12 +47,13 @@ describe('RippleDate', () => {
45
47
  });
46
48
 
47
49
  it('handles getMonth() with reactive updates', () => {
48
- component DateTest() {
49
- let date = RippleDate(2025, 0, 15);
50
- let &[month] = track(() => date.getMonth());
51
-
52
- <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>
53
- <pre>{month}</pre>
50
+ function DateTest() {
51
+ return <>
52
+ let date = RippleDate(2025, 0, 15);
53
+ let &[month] = track(() => date.getMonth());
54
+ <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>
55
+ <pre>{month}</pre>
56
+ </>;
54
57
  }
55
58
 
56
59
  render(DateTest);
@@ -66,12 +69,13 @@ describe('RippleDate', () => {
66
69
  });
67
70
 
68
71
  it('handles getDate() with reactive updates', () => {
69
- component DateTest() {
70
- let date = RippleDate(2025, 0, 1);
71
- let &[day] = track(() => date.getDate());
72
-
73
- <button onClick={() => date.setDate(15)}>{'Change Day'}</button>
74
- <pre>{day}</pre>
72
+ function DateTest() {
73
+ return <>
74
+ let date = RippleDate(2025, 0, 1);
75
+ let &[day] = track(() => date.getDate());
76
+ <button onClick={() => date.setDate(15)}>{'Change Day'}</button>
77
+ <pre>{day}</pre>
78
+ </>;
75
79
  }
76
80
 
77
81
  render(DateTest);
@@ -87,12 +91,13 @@ describe('RippleDate', () => {
87
91
  });
88
92
 
89
93
  it('handles getDay() with reactive updates', () => {
90
- component DateTest() {
91
- let date = RippleDate(2025, 0, 1);
92
- let &[dayOfWeek] = track(() => date.getDay());
93
-
94
- <button onClick={() => date.setDate(2)}>{'Next Day'}</button>
95
- <pre>{dayOfWeek}</pre>
94
+ function DateTest() {
95
+ return <>
96
+ let date = RippleDate(2025, 0, 1);
97
+ let &[dayOfWeek] = track(() => date.getDay());
98
+ <button onClick={() => date.setDate(2)}>{'Next Day'}</button>
99
+ <pre>{dayOfWeek}</pre>
100
+ </>;
96
101
  }
97
102
 
98
103
  render(DateTest);
@@ -108,12 +113,13 @@ describe('RippleDate', () => {
108
113
  });
109
114
 
110
115
  it('handles getHours() with reactive updates', () => {
111
- component DateTest() {
112
- let date = RippleDate(2025, 0, 1, 10, 30, 0);
113
- let &[hours] = track(() => date.getHours());
114
-
115
- <button onClick={() => date.setHours(15)}>{'Change to 3 PM'}</button>
116
- <pre>{hours}</pre>
116
+ function DateTest() {
117
+ return <>
118
+ let date = RippleDate(2025, 0, 1, 10, 30, 0);
119
+ let &[hours] = track(() => date.getHours());
120
+ <button onClick={() => date.setHours(15)}>{'Change to 3 PM'}</button>
121
+ <pre>{hours}</pre>
122
+ </>;
117
123
  }
118
124
 
119
125
  render(DateTest);
@@ -129,12 +135,13 @@ describe('RippleDate', () => {
129
135
  });
130
136
 
131
137
  it('handles getMinutes() with reactive updates', () => {
132
- component DateTest() {
133
- let date = RippleDate(2025, 0, 1, 10, 15, 0);
134
- let &[minutes] = track(() => date.getMinutes());
135
-
136
- <button onClick={() => date.setMinutes(45)}>{'Change Minutes'}</button>
137
- <pre>{minutes}</pre>
138
+ function DateTest() {
139
+ return <>
140
+ let date = RippleDate(2025, 0, 1, 10, 15, 0);
141
+ let &[minutes] = track(() => date.getMinutes());
142
+ <button onClick={() => date.setMinutes(45)}>{'Change Minutes'}</button>
143
+ <pre>{minutes}</pre>
144
+ </>;
138
145
  }
139
146
 
140
147
  render(DateTest);
@@ -150,12 +157,13 @@ describe('RippleDate', () => {
150
157
  });
151
158
 
152
159
  it('handles getSeconds() with reactive updates', () => {
153
- component DateTest() {
154
- let date = RippleDate(2025, 0, 1, 10, 15, 30);
155
- let &[seconds] = track(() => date.getSeconds());
156
-
157
- <button onClick={() => date.setSeconds(45)}>{'Change Seconds'}</button>
158
- <pre>{seconds}</pre>
160
+ function DateTest() {
161
+ return <>
162
+ let date = RippleDate(2025, 0, 1, 10, 15, 30);
163
+ let &[seconds] = track(() => date.getSeconds());
164
+ <button onClick={() => date.setSeconds(45)}>{'Change Seconds'}</button>
165
+ <pre>{seconds}</pre>
166
+ </>;
159
167
  }
160
168
 
161
169
  render(DateTest);
@@ -171,12 +179,13 @@ describe('RippleDate', () => {
171
179
  });
172
180
 
173
181
  it('handles toISOString() with reactive updates', () => {
174
- component DateTest() {
175
- let date = RippleDate(2025, 0, 1, 12, 0, 0);
176
- let &[isoString] = track(() => date.toISOString());
177
-
178
- <button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>
179
- <pre>{isoString}</pre>
182
+ function DateTest() {
183
+ return <>
184
+ let date = RippleDate(2025, 0, 1, 12, 0, 0);
185
+ let &[isoString] = track(() => date.toISOString());
186
+ <button onClick={() => date.setFullYear(2026)}>{'Change Year'}</button>
187
+ <pre>{isoString}</pre>
188
+ </>;
180
189
  }
181
190
 
182
191
  render(DateTest);
@@ -197,12 +206,13 @@ describe('RippleDate', () => {
197
206
  });
198
207
 
199
208
  it('handles toDateString() with reactive updates', () => {
200
- component DateTest() {
201
- let date = RippleDate(2025, 0, 1);
202
- let &[dateString] = track(() => date.toDateString());
203
-
204
- <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>
205
- <pre>{dateString}</pre>
209
+ function DateTest() {
210
+ return <>
211
+ let date = RippleDate(2025, 0, 1);
212
+ let &[dateString] = track(() => date.toDateString());
213
+ <button onClick={() => date.setMonth(11)}>{'Change to December'}</button>
214
+ <pre>{dateString}</pre>
215
+ </>;
206
216
  }
207
217
 
208
218
  render(DateTest);
@@ -221,12 +231,13 @@ describe('RippleDate', () => {
221
231
  });
222
232
 
223
233
  it('handles valueOf() with reactive updates', () => {
224
- component DateTest() {
225
- let date = RippleDate(2025, 0, 1);
226
- let &[valueOf] = track(() => date.valueOf());
227
-
228
- <button onClick={() => date.setDate(2)}>{'Next Day'}</button>
229
- <pre>{valueOf}</pre>
234
+ function DateTest() {
235
+ return <>
236
+ let date = RippleDate(2025, 0, 1);
237
+ let &[valueOf] = track(() => date.valueOf());
238
+ <button onClick={() => date.setDate(2)}>{'Next Day'}</button>
239
+ <pre>{valueOf}</pre>
240
+ </>;
230
241
  }
231
242
 
232
243
  render(DateTest);
@@ -243,32 +254,33 @@ describe('RippleDate', () => {
243
254
  });
244
255
 
245
256
  it('handles multiple get methods reacting to same setTime change', () => {
246
- component DateTest() {
247
- let date = RippleDate(2025, 0, 1, 10, 30, 15);
248
- let &[year] = track(() => date.getFullYear());
249
- let &[month] = track(() => date.getMonth());
250
- let &[day] = track(() => date.getDate());
251
- let &[hours] = track(() => date.getHours());
252
-
253
- <button onClick={() => date.setTime(new Date(2026, 5, 15, 14, 45, 30).getTime())}>
254
- {'Change All'}
255
- </button>
256
- <div>
257
- {'Year: '}
258
- {year}
259
- </div>
260
- <div>
261
- {'Month: '}
262
- {month}
263
- </div>
264
- <div>
265
- {'Day: '}
266
- {day}
267
- </div>
268
- <div>
269
- {'Hours: '}
270
- {hours}
271
- </div>
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>
267
+ <div>
268
+ {'Year: '}
269
+ {year}
270
+ </div>
271
+ <div>
272
+ {'Month: '}
273
+ {month}
274
+ </div>
275
+ <div>
276
+ {'Day: '}
277
+ {day}
278
+ </div>
279
+ <div>
280
+ {'Hours: '}
281
+ {hours}
282
+ </div>
283
+ </>;
272
284
  }
273
285
 
274
286
  render(DateTest);
@@ -291,33 +303,33 @@ describe('RippleDate', () => {
291
303
  });
292
304
 
293
305
  it('handles constructor with different parameter combinations', () => {
294
- component DateTest() {
295
- let dateNow = RippleDate();
296
- let dateFromString = RippleDate('2025-01-01');
297
- let dateFromNumbers = RippleDate(2025, 0, 1);
298
- let dateFromTimestamp = RippleDate(1735689600000);
299
-
300
- let &[nowYear] = track(() => dateNow.getFullYear());
301
- let &[stringYear] = track(() => dateFromString.getFullYear());
302
- let &[numbersYear] = track(() => dateFromNumbers.getFullYear());
303
- let &[timestampYear] = track(() => dateFromTimestamp.getFullYear());
304
-
305
- <div>
306
- {'Now: '}
307
- {nowYear}
308
- </div>
309
- <div>
310
- {'String: '}
311
- {stringYear}
312
- </div>
313
- <div>
314
- {'Numbers: '}
315
- {numbersYear}
316
- </div>
317
- <div>
318
- {'Timestamp: '}
319
- {timestampYear}
320
- </div>
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());
316
+ <div>
317
+ {'Now: '}
318
+ {nowYear}
319
+ </div>
320
+ <div>
321
+ {'String: '}
322
+ {stringYear}
323
+ </div>
324
+ <div>
325
+ {'Numbers: '}
326
+ {numbersYear}
327
+ </div>
328
+ <div>
329
+ {'Timestamp: '}
330
+ {timestampYear}
331
+ </div>
332
+ </>;
321
333
  }
322
334
 
323
335
  render(DateTest);
@@ -340,20 +352,21 @@ describe('RippleDate', () => {
340
352
  });
341
353
 
342
354
  it('handles get methods with arguments non-memoized', () => {
343
- component DateTest() {
344
- let date = RippleDate();
345
- let &[localeDateString] = track(() => date.toLocaleDateString('en-US'));
346
- let &[localeTimeString] = track(() => date.toLocaleTimeString('en-US'));
347
-
348
- <button onClick={() => date.setFullYear(date.getFullYear() + 1)}>{'Next Year'}</button>
349
- <div>
350
- {'Date: '}
351
- {localeDateString}
352
- </div>
353
- <div>
354
- {'Time: '}
355
- {localeTimeString}
356
- </div>
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'));
360
+ <button onClick={() => date.setFullYear(date.getFullYear() + 1)}>{'Next Year'}</button>
361
+ <div>
362
+ {'Date: '}
363
+ {localeDateString}
364
+ </div>
365
+ <div>
366
+ {'Time: '}
367
+ {localeTimeString}
368
+ </div>
369
+ </>;
357
370
  }
358
371
 
359
372
  render(DateTest);