ripple 0.3.72 → 0.3.76

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 (172) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +4 -10
  4. package/src/runtime/dynamic-client.js +33 -0
  5. package/src/runtime/dynamic-server.js +80 -0
  6. package/src/runtime/index-client.js +5 -13
  7. package/src/runtime/index-server.js +2 -0
  8. package/src/runtime/internal/client/blocks.js +6 -27
  9. package/src/runtime/internal/client/composite.js +11 -6
  10. package/src/runtime/internal/client/for.js +80 -5
  11. package/src/runtime/internal/client/index.js +0 -2
  12. package/src/runtime/internal/client/render.js +5 -2
  13. package/src/runtime/internal/client/types.d.ts +0 -10
  14. package/src/runtime/internal/server/index.js +8 -1
  15. package/tests/client/__snapshots__/computed-properties.test.tsrx.snap +8 -0
  16. package/tests/client/__snapshots__/for.test.tsrx.snap +22 -0
  17. package/tests/client/__snapshots__/html.test.tsrx.snap +4 -0
  18. package/tests/client/array/array.copy-within.test.tsrx +19 -19
  19. package/tests/client/array/array.derived.test.tsrx +97 -109
  20. package/tests/client/array/array.iteration.test.tsrx +28 -28
  21. package/tests/client/array/array.mutations.test.tsrx +68 -68
  22. package/tests/client/array/array.static.test.tsrx +82 -92
  23. package/tests/client/array/array.to-methods.test.tsrx +15 -15
  24. package/tests/client/async-suspend.test.tsrx +180 -179
  25. package/tests/client/basic/__snapshots__/basic.attributes.test.tsrx.snap +2 -0
  26. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +4 -0
  27. package/tests/client/basic/basic.attributes.test.tsrx +273 -317
  28. package/tests/client/basic/basic.collections.test.tsrx +55 -61
  29. package/tests/client/basic/basic.components.test.tsrx +198 -220
  30. package/tests/client/basic/basic.errors.test.tsrx +70 -76
  31. package/tests/client/basic/basic.events.test.tsrx +80 -85
  32. package/tests/client/basic/basic.get-set.test.tsrx +54 -64
  33. package/tests/client/basic/basic.hmr.test.tsrx +15 -19
  34. package/tests/client/basic/basic.reactivity.test.tsrx +121 -135
  35. package/tests/client/basic/basic.rendering.test.tsrx +273 -178
  36. package/tests/client/basic/basic.styling.test.tsrx +16 -14
  37. package/tests/client/basic/basic.utilities.test.tsrx +8 -10
  38. package/tests/client/boundaries.test.tsrx +18 -18
  39. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -76
  40. package/tests/client/compiler/compiler.attributes.test.tsrx +18 -14
  41. package/tests/client/compiler/compiler.basic.test.tsrx +357 -288
  42. package/tests/client/compiler/compiler.regex.test.tsrx +40 -44
  43. package/tests/client/compiler/compiler.tracked-access.test.tsrx +57 -38
  44. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  45. package/tests/client/compiler/compiler.typescript.test.tsrx +4 -3
  46. package/tests/client/composite/composite.dynamic-components.test.tsrx +62 -47
  47. package/tests/client/composite/composite.generics.test.tsrx +165 -167
  48. package/tests/client/composite/composite.props.test.tsrx +66 -74
  49. package/tests/client/composite/composite.reactivity.test.tsrx +132 -166
  50. package/tests/client/composite/composite.render.test.tsrx +92 -101
  51. package/tests/client/computed-properties.test.tsrx +14 -18
  52. package/tests/client/context.test.tsrx +14 -18
  53. package/tests/client/css/global-additional-cases.test.tsrx +493 -439
  54. package/tests/client/css/global-advanced-selectors.test.tsrx +169 -153
  55. package/tests/client/css/global-at-rules.test.tsrx +71 -66
  56. package/tests/client/css/global-basic.test.tsrx +105 -98
  57. package/tests/client/css/global-classes-ids.test.tsrx +128 -114
  58. package/tests/client/css/global-combinators.test.tsrx +83 -78
  59. package/tests/client/css/global-complex-nesting.test.tsrx +134 -120
  60. package/tests/client/css/global-edge-cases.test.tsrx +138 -120
  61. package/tests/client/css/global-keyframes.test.tsrx +108 -96
  62. package/tests/client/css/global-nested.test.tsrx +88 -78
  63. package/tests/client/css/global-pseudo.test.tsrx +104 -98
  64. package/tests/client/css/global-scoping.test.tsrx +145 -125
  65. package/tests/client/css/style-identifier.test.tsrx +65 -72
  66. package/tests/client/date.test.tsrx +83 -83
  67. package/tests/client/dynamic-elements.test.tsrx +318 -299
  68. package/tests/client/events.test.tsrx +252 -266
  69. package/tests/client/for.test.tsrx +120 -127
  70. package/tests/client/head.test.tsrx +74 -48
  71. package/tests/client/html.test.tsrx +37 -49
  72. package/tests/client/input-value.test.tsrx +1125 -1354
  73. package/tests/client/lazy-array.test.tsrx +10 -16
  74. package/tests/client/lazy-destructuring.test.tsrx +169 -221
  75. package/tests/client/map.test.tsrx +39 -41
  76. package/tests/client/media-query.test.tsrx +15 -19
  77. package/tests/client/object.test.tsrx +46 -56
  78. package/tests/client/portal.test.tsrx +31 -37
  79. package/tests/client/ref.test.tsrx +173 -193
  80. package/tests/client/return.test.tsrx +62 -37
  81. package/tests/client/set.test.tsrx +33 -33
  82. package/tests/client/svg.test.tsrx +197 -216
  83. package/tests/client/switch.test.tsrx +201 -191
  84. package/tests/client/track-async-hydration.test.tsrx +14 -18
  85. package/tests/client/tracked-index-access.test.tsrx +18 -28
  86. package/tests/client/try.test.tsrx +494 -619
  87. package/tests/client/tsx.test.tsrx +286 -292
  88. package/tests/client/typescript-generics.test.tsrx +121 -129
  89. package/tests/client/url/url.derived.test.tsrx +21 -25
  90. package/tests/client/url/url.parsing.test.tsrx +35 -35
  91. package/tests/client/url/url.partial-removal.test.tsrx +32 -32
  92. package/tests/client/url/url.reactivity.test.tsrx +68 -72
  93. package/tests/client/url/url.serialization.test.tsrx +8 -8
  94. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +21 -27
  95. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +16 -16
  96. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +37 -37
  97. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +56 -60
  98. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +32 -34
  99. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +9 -9
  100. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +10 -10
  101. package/tests/hydration/compiled/client/basic.js +390 -319
  102. package/tests/hydration/compiled/client/composite.js +52 -44
  103. package/tests/hydration/compiled/client/for.js +734 -604
  104. package/tests/hydration/compiled/client/head.js +183 -103
  105. package/tests/hydration/compiled/client/html.js +93 -86
  106. package/tests/hydration/compiled/client/if-children.js +95 -71
  107. package/tests/hydration/compiled/client/if.js +113 -89
  108. package/tests/hydration/compiled/client/mixed-control-flow.js +225 -209
  109. package/tests/hydration/compiled/client/nested-control-flow.js +94 -98
  110. package/tests/hydration/compiled/client/reactivity.js +26 -24
  111. package/tests/hydration/compiled/client/return.js +8 -42
  112. package/tests/hydration/compiled/client/switch.js +208 -173
  113. package/tests/hydration/compiled/client/track-async-serialization.js +176 -128
  114. package/tests/hydration/compiled/client/try.js +29 -21
  115. package/tests/hydration/compiled/server/basic.js +210 -221
  116. package/tests/hydration/compiled/server/composite.js +13 -14
  117. package/tests/hydration/compiled/server/for.js +427 -444
  118. package/tests/hydration/compiled/server/head.js +199 -189
  119. package/tests/hydration/compiled/server/html.js +33 -41
  120. package/tests/hydration/compiled/server/if-children.js +114 -117
  121. package/tests/hydration/compiled/server/if.js +77 -83
  122. package/tests/hydration/compiled/server/mixed-control-flow.js +145 -150
  123. package/tests/hydration/compiled/server/nested-control-flow.js +10 -0
  124. package/tests/hydration/compiled/server/reactivity.js +24 -22
  125. package/tests/hydration/compiled/server/return.js +6 -18
  126. package/tests/hydration/compiled/server/switch.js +179 -176
  127. package/tests/hydration/compiled/server/track-async-serialization.js +88 -70
  128. package/tests/hydration/compiled/server/try.js +31 -35
  129. package/tests/hydration/components/basic.tsrx +216 -258
  130. package/tests/hydration/components/composite.tsrx +32 -42
  131. package/tests/hydration/components/events.tsrx +81 -101
  132. package/tests/hydration/components/for.tsrx +270 -336
  133. package/tests/hydration/components/head.tsrx +43 -39
  134. package/tests/hydration/components/hmr.tsrx +16 -22
  135. package/tests/hydration/components/html-in-template.tsrx +15 -21
  136. package/tests/hydration/components/html.tsrx +442 -526
  137. package/tests/hydration/components/if-children.tsrx +107 -125
  138. package/tests/hydration/components/if.tsrx +68 -90
  139. package/tests/hydration/components/mixed-control-flow.tsrx +65 -72
  140. package/tests/hydration/components/nested-control-flow.tsrx +202 -216
  141. package/tests/hydration/components/portal.tsrx +33 -41
  142. package/tests/hydration/components/reactivity.tsrx +26 -34
  143. package/tests/hydration/components/return.tsrx +4 -6
  144. package/tests/hydration/components/switch.tsrx +73 -78
  145. package/tests/hydration/components/track-async-serialization.tsrx +83 -93
  146. package/tests/hydration/components/try.tsrx +37 -51
  147. package/tests/hydration/switch.test.js +8 -8
  148. package/tests/server/await.test.tsrx +3 -3
  149. package/tests/server/basic.attributes.test.tsrx +117 -162
  150. package/tests/server/basic.components.test.tsrx +164 -194
  151. package/tests/server/basic.test.tsrx +299 -199
  152. package/tests/server/compiler.test.tsrx +142 -72
  153. package/tests/server/composite.props.test.tsrx +54 -58
  154. package/tests/server/composite.test.tsrx +165 -167
  155. package/tests/server/context.test.tsrx +13 -17
  156. package/tests/server/dynamic-elements.test.tsrx +147 -148
  157. package/tests/server/for.test.tsrx +115 -84
  158. package/tests/server/head.test.tsrx +54 -31
  159. package/tests/server/html-nesting-validation.test.tsrx +16 -8
  160. package/tests/server/if.test.tsrx +49 -59
  161. package/tests/server/lazy-destructuring.test.tsrx +288 -366
  162. package/tests/server/return.test.tsrx +58 -36
  163. package/tests/server/streaming-ssr.test.tsrx +4 -4
  164. package/tests/server/style-identifier.test.tsrx +61 -69
  165. package/tests/server/switch.test.tsrx +89 -97
  166. package/tests/server/track-async-serialization.test.tsrx +85 -103
  167. package/tests/server/try.test.tsrx +275 -360
  168. package/tests/utils/ref-types.test.js +72 -0
  169. package/tests/utils/vite-plugin-config.test.js +41 -74
  170. package/types/index.d.ts +29 -4
  171. package/src/runtime/internal/client/compat.js +0 -40
  172. package/tests/utils/compiler-compat-config.test.js +0 -38
@@ -1,63 +1,53 @@
1
1
  import type { Children } from 'ripple';
2
2
 
3
- export function Layout(&{ children }: { children?: Children }) {
4
- return <><div class="layout">{children}</div></>;
3
+ export function Layout(&{ children }: { children?: Children }) @{
4
+ <div class="layout">{children}</div>
5
5
  }
6
6
 
7
- export function TextWrappedLayout(&{ children }: { children?: Children }) {
8
- return <>
9
- <div class="layout">
10
- {'before'}
11
- {children}
12
- {'after'}
13
- </div>
14
- </>;
7
+ export function TextWrappedLayout(&{ children }: { children?: Children }) @{
8
+ <div class="layout">
9
+ {'before'}
10
+ {children}
11
+ {'after'}
12
+ </div>
15
13
  }
16
14
 
17
- export function SingleChild() {
18
- return <><div class="single">{'single'}</div></>;
15
+ export function SingleChild() @{
16
+ <div class="single">{'single'}</div>
19
17
  }
20
18
 
21
- export function MultiRootChild() {
22
- return <>
19
+ export function MultiRootChild() @{
20
+ <>
23
21
  <h1>{'title'}</h1>
24
22
  <p>{'description'}</p>
25
- </>;
23
+ </>
26
24
  }
27
25
 
28
- export function EmptyLayout() {
29
- return <><Layout /></>;
26
+ export function EmptyLayout() @{
27
+ <Layout />
30
28
  }
31
29
 
32
- export function LayoutWithSingleChild() {
33
- return <>
34
- <Layout>
35
- <SingleChild />
36
- </Layout>
37
- </>;
30
+ export function LayoutWithSingleChild() @{
31
+ <Layout>
32
+ <SingleChild />
33
+ </Layout>
38
34
  }
39
35
 
40
- export function LayoutWithMultipleChildren() {
41
- return <>
42
- <Layout>
43
- <SingleChild />
44
- <div class="extra">{'extra'}</div>
45
- </Layout>
46
- </>;
36
+ export function LayoutWithMultipleChildren() @{
37
+ <Layout>
38
+ <SingleChild />
39
+ <div class="extra">{'extra'}</div>
40
+ </Layout>
47
41
  }
48
42
 
49
- export function LayoutWithMultiRootChild() {
50
- return <>
51
- <Layout>
52
- <MultiRootChild />
53
- </Layout>
54
- </>;
43
+ export function LayoutWithMultiRootChild() @{
44
+ <Layout>
45
+ <MultiRootChild />
46
+ </Layout>
55
47
  }
56
48
 
57
- export function LayoutWithTextAroundChildren() {
58
- return <>
59
- <TextWrappedLayout>
60
- <SingleChild />
61
- </TextWrappedLayout>
62
- </>;
49
+ export function LayoutWithTextAroundChildren() @{
50
+ <TextWrappedLayout>
51
+ <SingleChild />
52
+ </TextWrappedLayout>
63
53
  }
@@ -2,117 +2,97 @@ import { track } from 'ripple';
2
2
 
3
3
  // Event handling components for hydration testing
4
4
 
5
- export function ClickCounter() {
6
- return <>
7
- let &[count] = track(0);
8
- <div>
9
- <button
10
- class="increment"
11
- onClick={() => {
12
- count++;
13
- }}
14
- >
15
- {'Increment'}
16
- </button>
17
- <span class="count">{count}</span>
18
- </div>
19
- </>;
5
+ export function ClickCounter() @{
6
+ let &[count] = track(0);
7
+ <div>
8
+ <button
9
+ class="increment"
10
+ onClick={() => {
11
+ count++;
12
+ }}
13
+ >{'Increment'}</button>
14
+ <span class="count">{count}</span>
15
+ </div>
20
16
  }
21
17
 
22
- export function IncrementDecrement() {
23
- return <>
24
- let &[count] = track(0);
25
- <div>
26
- <button
27
- class="decrement"
28
- onClick={() => {
29
- count--;
30
- }}
31
- >
32
- {'-'}
33
- </button>
34
- <span class="count">{count}</span>
35
- <button
36
- class="increment"
37
- onClick={() => {
38
- count++;
39
- }}
40
- >
41
- {'+'}
42
- </button>
43
- </div>
44
- </>;
18
+ export function IncrementDecrement() @{
19
+ let &[count] = track(0);
20
+ <div>
21
+ <button
22
+ class="decrement"
23
+ onClick={() => {
24
+ count--;
25
+ }}
26
+ >{'-'}</button>
27
+ <span class="count">{count}</span>
28
+ <button
29
+ class="increment"
30
+ onClick={() => {
31
+ count++;
32
+ }}
33
+ >{'+'}</button>
34
+ </div>
45
35
  }
46
36
 
47
- export function MultipleEvents() {
48
- return <>
49
- let &[clicks] = track(0);
50
- let &[hovers] = track(0);
51
- <div>
52
- <button
53
- class="target"
54
- onClick={() => {
55
- clicks++;
56
- }}
57
- onMouseEnter={() => {
58
- hovers++;
59
- }}
60
- >
61
- {'Target'}
62
- </button>
63
- <span class="clicks">{clicks}</span>
64
- <span class="hovers">{hovers}</span>
65
- </div>
66
- </>;
37
+ export function MultipleEvents() @{
38
+ let &[clicks] = track(0);
39
+ let &[hovers] = track(0);
40
+ <div>
41
+ <button
42
+ class="target"
43
+ onClick={() => {
44
+ clicks++;
45
+ }}
46
+ onMouseEnter={() => {
47
+ hovers++;
48
+ }}
49
+ >{'Target'}</button>
50
+ <span class="clicks">{clicks}</span>
51
+ <span class="hovers">{hovers}</span>
52
+ </div>
67
53
  }
68
54
 
69
- export function MultiStateUpdate() {
70
- return <>
71
- let &[count] = track(0);
72
- let &[lastAction] = track('none');
73
- const handleClick = () => {
74
- count++;
75
- lastAction = 'increment';
76
- };
77
- <div>
78
- <button class="btn" onClick={handleClick}>{'Click'}</button>
79
- <span class="count">{count}</span>
80
- <span class="action">{lastAction}</span>
81
- </div>
82
- </>;
55
+ export function MultiStateUpdate() @{
56
+ let &[count] = track(0);
57
+ let &[lastAction] = track('none');
58
+ const handleClick = () => {
59
+ count++;
60
+ lastAction = 'increment';
61
+ };
62
+ <div>
63
+ <button class="btn" onClick={handleClick}>{'Click'}</button>
64
+ <span class="count">{count}</span>
65
+ <span class="action">{lastAction}</span>
66
+ </div>
83
67
  }
84
68
 
85
- export function ToggleButton() {
86
- return <>
87
- let &[isOn] = track(false);
88
- <div>
89
- <button
90
- class="toggle"
91
- onClick={() => {
92
- isOn = !isOn;
93
- }}
94
- >
95
- {isOn ? 'ON' : 'OFF'}
96
- </button>
97
- </div>
98
- </>;
69
+ export function ToggleButton() @{
70
+ let &[isOn] = track(false);
71
+ <div>
72
+ <button
73
+ class="toggle"
74
+ onClick={() => {
75
+ isOn = !isOn;
76
+ }}
77
+ >
78
+ {isOn ? 'ON' : 'OFF'}
79
+ </button>
80
+ </div>
99
81
  }
100
82
 
101
- export function ChildButton(props: { onClick: () => void; label: string }) {
102
- return <><button class="child-btn" onClick={props.onClick}>{props.label}</button></>;
83
+ export function ChildButton(props: { onClick: () => void; label: string }) @{
84
+ <button class="child-btn" onClick={props.onClick}>{props.label}</button>
103
85
  }
104
86
 
105
- export function ParentWithChildButton() {
106
- return <>
107
- let &[count] = track(0);
108
- <div>
109
- <ChildButton
110
- onClick={() => {
111
- count++;
112
- }}
113
- label="Click me"
114
- />
115
- <span class="count">{count}</span>
116
- </div>
117
- </>;
87
+ export function ParentWithChildButton() @{
88
+ let &[count] = track(0);
89
+ <div>
90
+ <ChildButton
91
+ onClick={() => {
92
+ count++;
93
+ }}
94
+ label="Click me"
95
+ />
96
+ <span class="count">{count}</span>
97
+ </div>
118
98
  }