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.
- package/CHANGELOG.md +57 -0
- package/package.json +3 -3
- package/src/jsx-runtime.d.ts +2 -2
- package/src/runtime/element.js +1 -1
- package/src/runtime/index-client.js +11 -11
- package/src/runtime/index-server.js +7 -4
- package/src/runtime/internal/client/bindings.js +1 -1
- package/src/runtime/internal/client/blocks.js +13 -4
- package/src/runtime/internal/client/component.js +55 -0
- package/src/runtime/internal/client/composite.js +4 -2
- package/src/runtime/internal/client/expression.js +65 -7
- package/src/runtime/internal/client/hmr.js +54 -43
- package/src/runtime/internal/client/index.js +5 -1
- package/src/runtime/internal/client/portal.js +70 -69
- package/src/runtime/internal/client/render.js +3 -0
- package/src/runtime/internal/server/index.js +92 -8
- package/tests/client/__snapshots__/html.test.tsrx.snap +3 -3
- package/tests/client/array/array.copy-within.test.tsrx +33 -31
- package/tests/client/array/array.derived.test.tsrx +186 -169
- package/tests/client/array/array.iteration.test.tsrx +40 -37
- package/tests/client/array/array.mutations.test.tsrx +113 -101
- package/tests/client/array/array.static.test.tsrx +119 -101
- package/tests/client/array/array.to-methods.test.tsrx +24 -21
- package/tests/client/async-suspend.test.tsrx +247 -246
- package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +0 -1
- package/tests/client/basic/basic.attributes.test.tsrx +428 -423
- package/tests/client/basic/basic.collections.test.tsrx +109 -102
- package/tests/client/basic/basic.components.test.tsrx +323 -205
- package/tests/client/basic/basic.errors.test.tsrx +91 -91
- package/tests/client/basic/basic.events.test.tsrx +114 -115
- package/tests/client/basic/basic.get-set.test.tsrx +97 -87
- package/tests/client/basic/basic.hmr.test.tsrx +19 -16
- package/tests/client/basic/basic.reactivity.test.tsrx +199 -191
- package/tests/client/basic/basic.rendering.test.tsrx +272 -182
- package/tests/client/basic/basic.styling.test.tsrx +23 -22
- package/tests/client/basic/basic.utilities.test.tsrx +10 -8
- package/tests/client/boundaries.test.tsrx +26 -26
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +5 -5
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.tsrx.snap +5 -5
- package/tests/client/compiler/compiler.assignments.test.tsrx +77 -81
- package/tests/client/compiler/compiler.attributes.test.tsrx +15 -15
- package/tests/client/compiler/compiler.basic.test.tsrx +322 -314
- package/tests/client/compiler/compiler.regex.test.tsrx +44 -47
- package/tests/client/compiler/compiler.tracked-access.test.tsrx +38 -38
- package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
- package/tests/client/compiler/compiler.typescript.test.tsrx +2 -2
- package/tests/client/composite/composite.dynamic-components.test.tsrx +47 -48
- package/tests/client/composite/composite.generics.test.tsrx +168 -192
- package/tests/client/composite/composite.props.test.tsrx +97 -81
- package/tests/client/composite/composite.reactivity.test.tsrx +177 -147
- package/tests/client/composite/composite.render.test.tsrx +122 -105
- package/tests/client/computed-properties.test.tsrx +28 -28
- package/tests/client/context.test.tsrx +21 -21
- package/tests/client/css/global-additional-cases.test.tsrx +58 -58
- package/tests/client/css/global-advanced-selectors.test.tsrx +16 -16
- package/tests/client/css/global-at-rules.test.tsrx +10 -10
- package/tests/client/css/global-basic.test.tsrx +14 -14
- package/tests/client/css/global-classes-ids.test.tsrx +14 -14
- package/tests/client/css/global-combinators.test.tsrx +10 -10
- package/tests/client/css/global-complex-nesting.test.tsrx +14 -14
- package/tests/client/css/global-edge-cases.test.tsrx +18 -18
- package/tests/client/css/global-keyframes.test.tsrx +12 -12
- package/tests/client/css/global-nested.test.tsrx +10 -10
- package/tests/client/css/global-pseudo.test.tsrx +12 -12
- package/tests/client/css/global-scoping.test.tsrx +20 -20
- package/tests/client/css/style-identifier.test.tsrx +126 -259
- package/tests/client/date.test.tsrx +146 -133
- package/tests/client/dynamic-elements.test.tsrx +398 -365
- package/tests/client/events.test.tsrx +292 -290
- package/tests/client/for.test.tsrx +156 -153
- package/tests/client/head.test.tsrx +105 -96
- package/tests/client/html.test.tsrx +122 -26
- package/tests/client/input-value.test.tsrx +1361 -1314
- package/tests/client/lazy-array.test.tsrx +16 -13
- package/tests/client/lazy-destructuring.test.tsrx +257 -213
- package/tests/client/map.test.tsrx +65 -60
- package/tests/client/media-query.test.tsrx +22 -20
- package/tests/client/object.test.tsrx +87 -81
- package/tests/client/portal.test.tsrx +57 -51
- package/tests/client/ref.test.tsrx +233 -202
- package/tests/client/return.test.tsrx +71 -2560
- package/tests/client/set.test.tsrx +54 -45
- package/tests/client/svg.test.tsrx +216 -186
- package/tests/client/switch.test.tsrx +194 -193
- package/tests/client/track-async-hydration.test.tsrx +18 -14
- package/tests/client/tracked-index-access.test.tsrx +28 -18
- package/tests/client/try.test.tsrx +675 -548
- package/tests/client/tsx.test.tsrx +373 -311
- package/tests/client/typescript-generics.test.tsrx +145 -145
- package/tests/client/url/url.derived.test.tsrx +33 -28
- package/tests/client/url/url.parsing.test.tsrx +61 -51
- package/tests/client/url/url.partial-removal.test.tsrx +56 -48
- package/tests/client/url/url.reactivity.test.tsrx +142 -125
- package/tests/client/url/url.serialization.test.tsrx +13 -11
- package/tests/client/url-search-params/url-search-params.derived.test.tsrx +34 -29
- package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +25 -21
- package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +50 -45
- package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +111 -99
- package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +49 -43
- package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +14 -12
- package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +16 -14
- package/tests/hydration/basic.test.js +3 -3
- package/tests/hydration/compiled/client/basic.js +586 -651
- package/tests/hydration/compiled/client/composite.js +79 -104
- package/tests/hydration/compiled/client/events.js +140 -148
- package/tests/hydration/compiled/client/for.js +1005 -1018
- package/tests/hydration/compiled/client/head.js +124 -134
- package/tests/hydration/compiled/client/hmr.js +41 -48
- package/tests/hydration/compiled/client/html-in-template.js +38 -41
- package/tests/hydration/compiled/client/html.js +970 -1314
- package/tests/hydration/compiled/client/if-children.js +234 -249
- package/tests/hydration/compiled/client/if.js +182 -189
- package/tests/hydration/compiled/client/mixed-control-flow.js +347 -303
- package/tests/hydration/compiled/client/nested-control-flow.js +1084 -832
- package/tests/hydration/compiled/client/portal.js +65 -85
- package/tests/hydration/compiled/client/reactivity.js +84 -90
- package/tests/hydration/compiled/client/return.js +38 -1939
- package/tests/hydration/compiled/client/switch.js +218 -224
- package/tests/hydration/compiled/client/track-async-serialization.js +250 -259
- package/tests/hydration/compiled/client/try.js +123 -132
- package/tests/hydration/compiled/server/basic.js +773 -831
- package/tests/hydration/compiled/server/composite.js +166 -191
- package/tests/hydration/compiled/server/events.js +170 -184
- package/tests/hydration/compiled/server/for.js +851 -909
- package/tests/hydration/compiled/server/head.js +206 -216
- package/tests/hydration/compiled/server/hmr.js +64 -72
- package/tests/hydration/compiled/server/html-in-template.js +42 -76
- package/tests/hydration/compiled/server/html.js +1362 -1667
- package/tests/hydration/compiled/server/if-children.js +419 -445
- package/tests/hydration/compiled/server/if.js +194 -208
- package/tests/hydration/compiled/server/mixed-control-flow.js +249 -257
- package/tests/hydration/compiled/server/nested-control-flow.js +491 -515
- package/tests/hydration/compiled/server/portal.js +152 -160
- package/tests/hydration/compiled/server/reactivity.js +94 -106
- package/tests/hydration/compiled/server/return.js +28 -2172
- package/tests/hydration/compiled/server/switch.js +274 -286
- package/tests/hydration/compiled/server/track-async-serialization.js +340 -358
- package/tests/hydration/compiled/server/try.js +167 -185
- package/tests/hydration/components/basic.tsrx +320 -272
- package/tests/hydration/components/composite.tsrx +44 -32
- package/tests/hydration/components/events.tsrx +101 -91
- package/tests/hydration/components/for.tsrx +510 -452
- package/tests/hydration/components/head.tsrx +87 -80
- package/tests/hydration/components/hmr.tsrx +22 -17
- package/tests/hydration/components/html-in-template.tsrx +22 -17
- package/tests/hydration/components/html.tsrx +525 -443
- package/tests/hydration/components/if-children.tsrx +158 -148
- package/tests/hydration/components/if.tsrx +109 -95
- package/tests/hydration/components/mixed-control-flow.tsrx +100 -96
- package/tests/hydration/components/nested-control-flow.tsrx +215 -203
- package/tests/hydration/components/portal.tsrx +41 -34
- package/tests/hydration/components/reactivity.tsrx +37 -27
- package/tests/hydration/components/return.tsrx +12 -556
- package/tests/hydration/components/switch.tsrx +120 -114
- package/tests/hydration/components/track-async-serialization.tsrx +107 -91
- package/tests/hydration/components/try.tsrx +55 -40
- package/tests/hydration/html.test.js +4 -4
- package/tests/hydration/return.test.js +13 -532
- package/tests/server/await.test.tsrx +3 -3
- package/tests/server/basic.attributes.test.tsrx +264 -195
- package/tests/server/basic.components.test.tsrx +296 -169
- package/tests/server/basic.test.tsrx +300 -198
- package/tests/server/compiler.test.tsrx +62 -60
- package/tests/server/composite.props.test.tsrx +77 -63
- package/tests/server/composite.test.tsrx +168 -192
- package/tests/server/context.test.tsrx +18 -12
- package/tests/server/dynamic-elements.test.tsrx +197 -180
- package/tests/server/for.test.tsrx +85 -78
- package/tests/server/head.test.tsrx +50 -43
- package/tests/server/html-nesting-validation.test.tsrx +8 -8
- package/tests/server/if.test.tsrx +57 -51
- package/tests/server/lazy-destructuring.test.tsrx +366 -294
- package/tests/server/return.test.tsrx +76 -1355
- package/tests/server/streaming-ssr.test.tsrx +4 -75
- package/tests/server/style-identifier.test.tsrx +169 -131
- package/tests/server/switch.test.tsrx +91 -85
- package/tests/server/track-async-serialization.test.tsrx +105 -85
- package/tests/server/try.test.tsrx +374 -280
- package/tests/utils/compiler-compat-config.test.js +2 -2
- package/tests/utils/runtime-imports.test.js +10 -0
- package/types/index.d.ts +8 -0
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|