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
@@ -3,7 +3,7 @@ import { compile } from '@tsrx/ripple';
3
3
  describe('CSS :global basic tests', () => {
4
4
  it('applies global selector to all elements', () => {
5
5
  const source = `
6
- export component Test() {
6
+ export function Test() { return <>
7
7
  <div>{'content'}</div>
8
8
 
9
9
  <style>
@@ -11,7 +11,7 @@ export component Test() {
11
11
  color: red;
12
12
  }
13
13
  </style>
14
- }`;
14
+ </>; }`;
15
15
  const { css } = compile(source, 'test.tsrx');
16
16
 
17
17
  expect(css).toContain('div {');
@@ -21,7 +21,7 @@ export component Test() {
21
21
 
22
22
  it('applies global selector with class', () => {
23
23
  const source = `
24
- export component Test() {
24
+ export function Test() { return <>
25
25
  <div class="foo">{'content'}</div>
26
26
 
27
27
  <style>
@@ -33,7 +33,7 @@ export component Test() {
33
33
  font-weight: bold;
34
34
  }
35
35
  </style>
36
- }`;
36
+ </>; }`;
37
37
  const { css } = compile(source, 'test.tsrx');
38
38
 
39
39
  expect(css).toContain('div.foo {');
@@ -43,7 +43,7 @@ export component Test() {
43
43
 
44
44
  it('mixes global and local selectors', () => {
45
45
  const source = `
46
- export component Test() {
46
+ export function Test() { return <>
47
47
  <div>
48
48
  <p class="foo">{'red/bold'}</p>
49
49
  </div>
@@ -57,7 +57,7 @@ export component Test() {
57
57
  font-weight: bold;
58
58
  }
59
59
  </style>
60
- }`;
60
+ </>; }`;
61
61
  const { css } = compile(source, 'test.tsrx');
62
62
 
63
63
  expect(css).toContain('div .foo');
@@ -67,7 +67,7 @@ export component Test() {
67
67
 
68
68
  it('handles global block syntax', () => {
69
69
  const source = `
70
- export component Test() {
70
+ export function Test() { return <>
71
71
  <div>{'content'}</div>
72
72
 
73
73
  <style>
@@ -81,7 +81,7 @@ export component Test() {
81
81
  }
82
82
  }
83
83
  </style>
84
- }`;
84
+ </>; }`;
85
85
  const { css } = compile(source, 'test.tsrx');
86
86
 
87
87
  expect(css).toContain('.x {');
@@ -91,7 +91,7 @@ export component Test() {
91
91
 
92
92
  it('handles global with pseudo-classes', () => {
93
93
  const source = `
94
- export component Test() {
94
+ export function Test() { return <>
95
95
  <button>{'click'}</button>
96
96
 
97
97
  <style>
@@ -103,7 +103,7 @@ export component Test() {
103
103
  outline: none;
104
104
  }
105
105
  </style>
106
- }`;
106
+ </>; }`;
107
107
  const { css } = compile(source, 'test.tsrx');
108
108
 
109
109
  expect(css).toContain('button:hover {');
@@ -113,7 +113,7 @@ export component Test() {
113
113
 
114
114
  it('handles multiple global selectors in selector list', () => {
115
115
  const source = `
116
- export component Test() {
116
+ export function Test() { return <>
117
117
  <div>{'content'}</div>
118
118
 
119
119
  <style>
@@ -123,7 +123,7 @@ export component Test() {
123
123
  padding: 0;
124
124
  }
125
125
  </style>
126
- }`;
126
+ </>; }`;
127
127
  const { css } = compile(source, 'test.tsrx');
128
128
 
129
129
  expect(css).toContain('html,');
@@ -132,7 +132,7 @@ export component Test() {
132
132
 
133
133
  it('scopes local selectors while keeping globals unscoped', () => {
134
134
  const source = `
135
- export component Test() {
135
+ export function Test() { return <>
136
136
  <div class="styled-container">
137
137
  <h1>{'Styled heading'}</h1>
138
138
  <p class="text">{'Styled paragraph'}</p>
@@ -154,7 +154,7 @@ export component Test() {
154
154
  font-size: 14px;
155
155
  }
156
156
  </style>
157
- }`;
157
+ </>; }`;
158
158
  const { css } = compile(source, 'test.tsrx');
159
159
 
160
160
  expect(css).toMatch(/\.styled-container\.tsrx-[a-z0-9]+/);
@@ -3,7 +3,7 @@ import { compile } from '@tsrx/ripple';
3
3
  describe('CSS :global with classes and IDs', () => {
4
4
  it('handles :global with single class', () => {
5
5
  const source = `
6
- export component Test() {
6
+ export function Test() { return <>
7
7
  <div class="foo">{'content'}</div>
8
8
 
9
9
  <style>
@@ -11,7 +11,7 @@ export component Test() {
11
11
  color: red;
12
12
  }
13
13
  </style>
14
- }`;
14
+ </>; }`;
15
15
  const { css } = compile(source, 'test.tsrx');
16
16
 
17
17
  expect(css).toContain('.foo {');
@@ -20,7 +20,7 @@ export component Test() {
20
20
 
21
21
  it('handles :global with chained classes', () => {
22
22
  const source = `
23
- export component Test() {
23
+ export function Test() { return <>
24
24
  <div class="foo bar">{'content'}</div>
25
25
 
26
26
  <style>
@@ -36,7 +36,7 @@ export component Test() {
36
36
  color: green;
37
37
  }
38
38
  </style>
39
- }`;
39
+ </>; }`;
40
40
  const { css } = compile(source, 'test.tsrx');
41
41
 
42
42
  expect(css).toContain('.foo.bar {');
@@ -46,7 +46,7 @@ export component Test() {
46
46
 
47
47
  it('handles local class inside :global selector', () => {
48
48
  const source = `
49
- export component Test() {
49
+ export function Test() { return <>
50
50
  <div class="outer">
51
51
  <span class="inner">{'content'}</span>
52
52
  </div>
@@ -60,7 +60,7 @@ export component Test() {
60
60
  color: blue;
61
61
  }
62
62
  </style>
63
- }`;
63
+ </>; }`;
64
64
  const { css } = compile(source, 'test.tsrx');
65
65
 
66
66
  expect(css).toMatch(/\.outer \.inner\.tsrx-[a-z0-9]+ {/);
@@ -69,7 +69,7 @@ export component Test() {
69
69
 
70
70
  it('handles :global with ID selectors', () => {
71
71
  const source = `
72
- export component Test() {
72
+ export function Test() { return <>
73
73
  <div id="app">
74
74
  <div id="content">{'text'}</div>
75
75
  </div>
@@ -87,7 +87,7 @@ export component Test() {
87
87
  margin: 0;
88
88
  }
89
89
  </style>
90
- }`;
90
+ </>; }`;
91
91
  const { css } = compile(source, 'test.tsrx');
92
92
 
93
93
  expect(css).toContain('#app {');
@@ -98,7 +98,7 @@ export component Test() {
98
98
 
99
99
  it('handles :global with class and ID combination', () => {
100
100
  const source = `
101
- export component Test() {
101
+ export function Test() { return <>
102
102
  <div id="app" class="container">{'content'}</div>
103
103
 
104
104
  <style>
@@ -114,7 +114,7 @@ export component Test() {
114
114
  color: green;
115
115
  }
116
116
  </style>
117
- }`;
117
+ </>; }`;
118
118
  const { css } = compile(source, 'test.tsrx');
119
119
 
120
120
  expect(css).toContain('#app.container {');
@@ -124,7 +124,7 @@ export component Test() {
124
124
 
125
125
  it('handles multiple classes with :global', () => {
126
126
  const source = `
127
- export component Test() {
127
+ export function Test() { return <>
128
128
  <div class="a b c">{'content'}</div>
129
129
 
130
130
  <style>
@@ -140,7 +140,7 @@ export component Test() {
140
140
  color: green;
141
141
  }
142
142
  </style>
143
- }`;
143
+ </>; }`;
144
144
  const { css } = compile(source, 'test.tsrx');
145
145
 
146
146
  expect((css.match(/\.a\.b\.c\.tsrx-[a-z0-9]+ {/g) || []).length).toBe(2);
@@ -149,7 +149,7 @@ export component Test() {
149
149
 
150
150
  it('handles :global with class descendant selectors', () => {
151
151
  const source = `
152
- export component Test() {
152
+ export function Test() { return <>
153
153
  <div class="outer">
154
154
  <div class="middle">
155
155
  <div class="inner">{'content'}</div>
@@ -169,7 +169,7 @@ export component Test() {
169
169
  color: green;
170
170
  }
171
171
  </style>
172
- }`;
172
+ </>; }`;
173
173
  const { css } = compile(source, 'test.tsrx');
174
174
 
175
175
  expect(css).toMatch(/\.outer \.middle\.tsrx-[a-z0-9]+ \.inner:where\(\.tsrx-[a-z0-9]+\)/);
@@ -3,7 +3,7 @@ import { compile } from '@tsrx/ripple';
3
3
  describe('CSS :global with combinators', () => {
4
4
  it('handles :global with child combinator', () => {
5
5
  const source = `
6
- export component Test() {
6
+ export function Test() { return <>
7
7
  <div>
8
8
  <span>{'content'}</span>
9
9
  </div>
@@ -13,7 +13,7 @@ export component Test() {
13
13
  color: red;
14
14
  }
15
15
  </style>
16
- }`;
16
+ </>; }`;
17
17
  const { css } = compile(source, 'test.tsrx');
18
18
 
19
19
  expect(css).toMatch(/div\.tsrx-[a-z0-9]+ > span {/);
@@ -22,7 +22,7 @@ export component Test() {
22
22
 
23
23
  it('handles :global with adjacent sibling combinator', () => {
24
24
  const source = `
25
- export component Test() {
25
+ export function Test() { return <>
26
26
  <div>
27
27
  <span>{'one'}</span>
28
28
  <span>{'two'}</span>
@@ -37,7 +37,7 @@ export component Test() {
37
37
  color: blue;
38
38
  }
39
39
  </style>
40
- }`;
40
+ </>; }`;
41
41
  const { css } = compile(source, 'test.tsrx');
42
42
 
43
43
  expect(css).toMatch(/span\.tsrx-[a-z0-9]+ \+ span {/);
@@ -46,7 +46,7 @@ export component Test() {
46
46
 
47
47
  it('handles :global with general sibling combinator', () => {
48
48
  const source = `
49
- export component Test() {
49
+ export function Test() { return <>
50
50
  <div>
51
51
  <span>{'one'}</span>
52
52
  <span>{'two'}</span>
@@ -61,7 +61,7 @@ export component Test() {
61
61
  color: blue;
62
62
  }
63
63
  </style>
64
- }`;
64
+ </>; }`;
65
65
  const { css } = compile(source, 'test.tsrx');
66
66
 
67
67
  expect(css).toContain('~');
@@ -72,7 +72,7 @@ export component Test() {
72
72
 
73
73
  it('handles complex combinator chains with :global', () => {
74
74
  const source = `
75
- export component Test() {
75
+ export function Test() { return <>
76
76
  <div>
77
77
  <span>
78
78
  <button>{'nested button'}</button>
@@ -89,7 +89,7 @@ export component Test() {
89
89
  color: blue;
90
90
  }
91
91
  </style>
92
- }`;
92
+ </>; }`;
93
93
  const { css } = compile(source, 'test.tsrx');
94
94
 
95
95
  expect(css).toMatch(/div\.tsrx-[a-z0-9]+ > span > button {/);
@@ -98,7 +98,7 @@ export component Test() {
98
98
 
99
99
  it('handles :global with descendant combinator', () => {
100
100
  const source = `
101
- export component Test() {
101
+ export function Test() { return <>
102
102
  <div>
103
103
  <span>
104
104
  <button>{'click'}</button>
@@ -114,7 +114,7 @@ export component Test() {
114
114
  color: blue;
115
115
  }
116
116
  </style>
117
- }`;
117
+ </>; }`;
118
118
 
119
119
  const { css } = compile(source, 'test.tsrx');
120
120
 
@@ -3,7 +3,7 @@ import { compile } from '@tsrx/ripple';
3
3
  describe('CSS :global with complex nesting', () => {
4
4
  it('handles :global block with nested selectors', () => {
5
5
  const source = `
6
- export component Test() {
6
+ export function Test() { return <>
7
7
  <div>
8
8
  <span>
9
9
  <button>{'click'}</button>
@@ -23,7 +23,7 @@ export component Test() {
23
23
  }
24
24
  }
25
25
  </style>
26
- }`;
26
+ </>; }`;
27
27
  const { css } = compile(source, 'test.tsrx');
28
28
 
29
29
  expect(css).not.toMatch(/div\.tsrx-[a-z0-9]+ {/);
@@ -33,7 +33,7 @@ export component Test() {
33
33
 
34
34
  it('handles local block with :global nested inside', () => {
35
35
  const source = `
36
- export component Test() {
36
+ export function Test() { return <>
37
37
  <div>
38
38
  <span>{'content'}</span>
39
39
  </div>
@@ -51,7 +51,7 @@ export component Test() {
51
51
  }
52
52
  }
53
53
  </style>
54
- }`;
54
+ </>; }`;
55
55
  const { css } = compile(source, 'test.tsrx');
56
56
 
57
57
  expect(css).toMatch(/div\.tsrx-[a-z0-9]+ {/);
@@ -61,7 +61,7 @@ export component Test() {
61
61
 
62
62
  it('handles :global block with local nested inside', () => {
63
63
  const source = `
64
- export component Test() {
64
+ export function Test() { return <>
65
65
  <div>
66
66
  <span>
67
67
  <button>{'click'}</button>
@@ -77,7 +77,7 @@ export component Test() {
77
77
  }
78
78
  }
79
79
  </style>
80
- }`;
80
+ </>; }`;
81
81
  const { css } = compile(source, 'test.tsrx');
82
82
 
83
83
  expect(css).toContain('div {');
@@ -88,7 +88,7 @@ export component Test() {
88
88
 
89
89
  it('handles alternating :global and local nesting', () => {
90
90
  const source = `
91
- export component Test() {
91
+ export function Test() { return <>
92
92
  <div>
93
93
  <span>
94
94
  <button>
@@ -108,7 +108,7 @@ export component Test() {
108
108
  }
109
109
  }
110
110
  </style>
111
- }`;
111
+ </>; }`;
112
112
  const { css } = compile(source, 'test.tsrx');
113
113
 
114
114
  expect(css).toMatch(/div\.tsrx-[a-z0-9]+ {/);
@@ -119,7 +119,7 @@ export component Test() {
119
119
 
120
120
  it('handles deeply nested :global blocks', () => {
121
121
  const source = `
122
- export component Test() {
122
+ export function Test() { return <>
123
123
  <div>
124
124
  <span>
125
125
  <button>{'click'}</button>
@@ -139,7 +139,7 @@ export component Test() {
139
139
  }
140
140
  }
141
141
  </style>
142
- }`;
142
+ </>; }`;
143
143
  const { css } = compile(source, 'test.tsrx');
144
144
 
145
145
  expect(css).toMatch(/div\.tsrx-[a-z0-9]+ {/);
@@ -151,7 +151,7 @@ export component Test() {
151
151
 
152
152
  it('handles :global with nesting combinator &', () => {
153
153
  const source = `
154
- export component Test() {
154
+ export function Test() { return <>
155
155
  <div class="container">
156
156
  <button class="active">{'click'}</button>
157
157
  </div>
@@ -171,7 +171,7 @@ export component Test() {
171
171
  }
172
172
  }
173
173
  </style>
174
- }`;
174
+ </>; }`;
175
175
  const { css } = compile(source, 'test.tsrx');
176
176
 
177
177
  expect(css).toMatch(/\.container\.tsrx-[a-z0-9]+ {/);
@@ -182,7 +182,7 @@ export component Test() {
182
182
 
183
183
  it('handles complex :global nesting with multiple levels', () => {
184
184
  const source = `
185
- export component Test() {
185
+ export function Test() { return <>
186
186
  <div>
187
187
  <nav>
188
188
  <ul>
@@ -206,7 +206,7 @@ export component Test() {
206
206
  }
207
207
  }
208
208
  </style>
209
- }`;
209
+ </>; }`;
210
210
  const { css } = compile(source, 'test.tsrx');
211
211
 
212
212
  expect(css).toMatch(/div\.tsrx-[a-z0-9]+ {/);
@@ -3,7 +3,7 @@ import { compile } from '@tsrx/ripple';
3
3
  describe('CSS :global edge cases', () => {
4
4
  it('handles multiple :global selectors in one rule', () => {
5
5
  const source = `
6
- export component Test() {
6
+ export function Test() { return <>
7
7
  <div>{'content'}</div>
8
8
 
9
9
  <style>
@@ -11,7 +11,7 @@ export component Test() {
11
11
  color: red;
12
12
  }
13
13
  </style>
14
- }`;
14
+ </>; }`;
15
15
  const { css } = compile(source, 'test.tsrx');
16
16
 
17
17
  expect(css).toContain('div, span ');
@@ -20,7 +20,7 @@ export component Test() {
20
20
 
21
21
  it('handles :global with attribute selectors', () => {
22
22
  const source = `
23
- export component Test() {
23
+ export function Test() { return <>
24
24
  <div data-test="value">{'content'}</div>
25
25
 
26
26
  <style>
@@ -32,7 +32,7 @@ export component Test() {
32
32
  color: blue;
33
33
  }
34
34
  </style>
35
- }`;
35
+ </>; }`;
36
36
  const { css } = compile(source, 'test.tsrx');
37
37
 
38
38
  expect(css).toContain('[data-test] {');
@@ -41,7 +41,7 @@ export component Test() {
41
41
 
42
42
  it('handles :global with universal selector', () => {
43
43
  const source = `
44
- export component Test() {
44
+ export function Test() { return <>
45
45
  <div>{'content'}</div>
46
46
 
47
47
  <style>
@@ -53,7 +53,7 @@ export component Test() {
53
53
  margin: 0;
54
54
  }
55
55
  </style>
56
- }`;
56
+ </>; }`;
57
57
  const { css } = compile(source, 'test.tsrx');
58
58
 
59
59
  expect(css).toContain('* {');
@@ -62,7 +62,7 @@ export component Test() {
62
62
 
63
63
  it('handles :global with ID selectors', () => {
64
64
  const source = `
65
- export component Test() {
65
+ export function Test() { return <>
66
66
  <div id="test">{'content'}</div>
67
67
 
68
68
  <style>
@@ -74,7 +74,7 @@ export component Test() {
74
74
  color: red;
75
75
  }
76
76
  </style>
77
- }`;
77
+ </>; }`;
78
78
  const { css } = compile(source, 'test.tsrx');
79
79
 
80
80
  expect(css).toContain('#app {');
@@ -85,7 +85,7 @@ export component Test() {
85
85
 
86
86
  it('handles :global with pseudo-elements', () => {
87
87
  const source = `
88
- export component Test() {
88
+ export function Test() { return <>
89
89
  <div>{'content'}</div>
90
90
 
91
91
  <style>
@@ -97,7 +97,7 @@ export component Test() {
97
97
  content: "after";
98
98
  }
99
99
  </style>
100
- }`;
100
+ </>; }`;
101
101
  const { css } = compile(source, 'test.tsrx');
102
102
 
103
103
  expect(css).toContain('div::before {');
@@ -107,7 +107,7 @@ export component Test() {
107
107
 
108
108
  it('handles empty :global blocks', () => {
109
109
  const source = `
110
- export component Test() {
110
+ export function Test() { return <>
111
111
  <div>{'content'}</div>
112
112
 
113
113
  <style>
@@ -117,7 +117,7 @@ export component Test() {
117
117
  color: red;
118
118
  }
119
119
  </style>
120
- }`;
120
+ </>; }`;
121
121
  const { css } = compile(source, 'test.tsrx');
122
122
 
123
123
  expect(css).toContain('color: red');
@@ -126,7 +126,7 @@ export component Test() {
126
126
 
127
127
  it('handles :global with complex selector chains', () => {
128
128
  const source = `
129
- export component Test() {
129
+ export function Test() { return <>
130
130
  <div class="container">
131
131
  <span class="wrapper foo">
132
132
  <button class="bar"><span>{'click'}</span></button>
@@ -142,7 +142,7 @@ export component Test() {
142
142
  color: blue;
143
143
  }
144
144
  </style>
145
- }`;
145
+ </>; }`;
146
146
  const { css } = compile(source, 'test.tsrx');
147
147
 
148
148
  expect(css).toMatch(/div\.container > span.wrapper\.tsrx-[a-z0-9]+ \+ button\[disabled\] {/);
@@ -151,7 +151,7 @@ export component Test() {
151
151
 
152
152
  it('rejects :global in the middle of a selector sequence', () => {
153
153
  const source = `
154
- export component Test() {
154
+ export function Test() { return <>
155
155
  <div>
156
156
  <span class="foo">
157
157
  <button class="bar">{'click'}</button>
@@ -163,7 +163,7 @@ export component Test() {
163
163
  color: red;
164
164
  }
165
165
  </style>
166
- }`;
166
+ </>; }`;
167
167
 
168
168
  expect(() => compile(source, 'test.tsrx')).toThrow(
169
169
  ':global(...) can be at the start or end of a selector sequence, but not in the middle',
@@ -172,7 +172,7 @@ export component Test() {
172
172
 
173
173
  it('handles :global at start and end of selector', () => {
174
174
  const source = `
175
- export component Test() {
175
+ export function Test() { return <>
176
176
  <div>
177
177
  <span>{'content'}</span>
178
178
  </div>
@@ -190,7 +190,7 @@ export component Test() {
190
190
  color: green;
191
191
  }
192
192
  </style>
193
- }`;
193
+ </>; }`;
194
194
  const { css } = compile(source, 'test.tsrx');
195
195
 
196
196
  expect(css).toMatch(/html div\.tsrx-[a-z0-9]+ span:where\(\.tsrx-[a-z0-9]+\) {/);
@@ -3,7 +3,7 @@ import { compile } from '@tsrx/ripple';
3
3
  describe('CSS :global with keyframes', () => {
4
4
  it('handles -global- prefix for keyframes', () => {
5
5
  const source = `
6
- export component Test() {
6
+ export function Test() { return <>
7
7
  <div>{'animated'}</div>
8
8
 
9
9
  <style>
@@ -16,7 +16,7 @@ export component Test() {
16
16
  animation: foo 1s;
17
17
  }
18
18
  </style>
19
- }`;
19
+ </>; }`;
20
20
  const { css } = compile(source, 'test.tsrx');
21
21
 
22
22
  expect(css).toContain('@keyframes foo');
@@ -26,7 +26,7 @@ export component Test() {
26
26
 
27
27
  it('handles scoped keyframes without -global- prefix', () => {
28
28
  const source = `
29
- export component Test() {
29
+ export function Test() { return <>
30
30
  <div>{'animated'}</div>
31
31
 
32
32
  <style>
@@ -35,7 +35,7 @@ export component Test() {
35
35
  100% { opacity: 1; }
36
36
  }
37
37
  </style>
38
- }`;
38
+ </>; }`;
39
39
  const { css } = compile(source, 'test.tsrx');
40
40
 
41
41
  expect(css).toMatch(/@keyframes tsrx-[a-z0-9]+-foo/);
@@ -43,7 +43,7 @@ export component Test() {
43
43
 
44
44
  it('handles mix of global and scoped keyframes', () => {
45
45
  const source = `
46
- export component Test() {
46
+ export function Test() { return <>
47
47
  <div class="global-anim">{'one'}</div>
48
48
  <div class="scoped-anim">{'two'}</div>
49
49
 
@@ -66,7 +66,7 @@ export component Test() {
66
66
  animation: slideIn 1s;
67
67
  }
68
68
  </style>
69
- }`;
69
+ </>; }`;
70
70
  const { css } = compile(source, 'test.tsrx');
71
71
 
72
72
  expect(css).toContain('@keyframes fadeIn');
@@ -78,7 +78,7 @@ export component Test() {
78
78
 
79
79
  it('handles multiple animations with global keyframes', () => {
80
80
  const source = `
81
- export component Test() {
81
+ export function Test() { return <>
82
82
  <div>{'animated'}</div>
83
83
 
84
84
  <style>
@@ -92,7 +92,7 @@ export component Test() {
92
92
  100% { transform: scale(1); }
93
93
  }
94
94
  </style>
95
- }`;
95
+ </>; }`;
96
96
  const { css } = compile(source, 'test.tsrx');
97
97
 
98
98
  expect(css).toContain('@keyframes foo');
@@ -101,7 +101,7 @@ export component Test() {
101
101
 
102
102
  it('handles animation property referencing keyframes (not marking as unused)', () => {
103
103
  const source = `
104
- export component Parent() {
104
+ export function Parent() { return <>
105
105
  <div class="parent">
106
106
  <Child />
107
107
  </div>
@@ -123,9 +123,9 @@ export component Parent() {
123
123
  animation: slideIn 1s;
124
124
  }
125
125
  </style>
126
- }
126
+ </>; }
127
127
 
128
- component Child() {
128
+ function Child() { return <>
129
129
  <div class="child">{'Child content'}</div>
130
130
 
131
131
  <style>
@@ -133,7 +133,7 @@ component Child() {
133
133
  animation: fadeIn 3s; /* Uses global fadeIn from Parent */
134
134
  }
135
135
  </style>
136
- }`;
136
+ </>; }`;
137
137
  const { css } = compile(source, 'test.tsrx');
138
138
 
139
139
  // Parent should have scoped slideIn and global fadeIn