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
|
@@ -2,349 +2,397 @@
|
|
|
2
2
|
import { track } from 'ripple';
|
|
3
3
|
import type { Children } from 'ripple';
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
|
|
5
|
+
export function StaticText() {
|
|
6
|
+
return <><div>{'Hello World'}</div></>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
export function MultipleElements() {
|
|
10
|
+
return <>
|
|
11
|
+
<h1>{'Title'}</h1>
|
|
12
|
+
<p>{'Paragraph text'}</p>
|
|
13
|
+
<span>{'Span text'}</span>
|
|
14
|
+
</>;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
<div class="
|
|
18
|
-
<
|
|
17
|
+
export function NestedElements() {
|
|
18
|
+
return <>
|
|
19
|
+
<div class="outer">
|
|
20
|
+
<div class="inner">
|
|
21
|
+
<span>{'Nested content'}</span>
|
|
22
|
+
</div>
|
|
19
23
|
</div>
|
|
20
|
-
|
|
24
|
+
</>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function WithAttributes() {
|
|
28
|
+
return <>
|
|
29
|
+
<input type="text" placeholder="Enter text" disabled />
|
|
30
|
+
<a href="/link" target="_blank">{'Link'}</a>
|
|
31
|
+
</>;
|
|
21
32
|
}
|
|
22
33
|
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
<a href="/link" target="_blank">{'Link'}</a>
|
|
34
|
+
export function ChildComponent() {
|
|
35
|
+
return <><span class="child">{'Child content'}</span></>;
|
|
26
36
|
}
|
|
27
37
|
|
|
28
|
-
export
|
|
29
|
-
|
|
38
|
+
export function ParentWithChild() {
|
|
39
|
+
return <>
|
|
40
|
+
<div class="parent">
|
|
41
|
+
<ChildComponent />
|
|
42
|
+
</div>
|
|
43
|
+
</>;
|
|
30
44
|
}
|
|
31
45
|
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
<ChildComponent />
|
|
35
|
-
</div>
|
|
46
|
+
export function FirstSibling() {
|
|
47
|
+
return <><div class="first">{'First'}</div></>;
|
|
36
48
|
}
|
|
37
49
|
|
|
38
|
-
export
|
|
39
|
-
|
|
50
|
+
export function SecondSibling() {
|
|
51
|
+
return <><div class="second">{'Second'}</div></>;
|
|
40
52
|
}
|
|
41
53
|
|
|
42
|
-
export
|
|
43
|
-
|
|
54
|
+
export function SiblingComponents() {
|
|
55
|
+
return <>
|
|
56
|
+
<FirstSibling />
|
|
57
|
+
<SecondSibling />
|
|
58
|
+
</>;
|
|
44
59
|
}
|
|
45
60
|
|
|
46
|
-
export
|
|
47
|
-
|
|
48
|
-
|
|
61
|
+
export function Greeting(props: { name: string }) {
|
|
62
|
+
return <>
|
|
63
|
+
<div>
|
|
64
|
+
{'Hello '}
|
|
65
|
+
{props.name}
|
|
66
|
+
</div>
|
|
67
|
+
</>;
|
|
49
68
|
}
|
|
50
69
|
|
|
51
|
-
export
|
|
52
|
-
|
|
53
|
-
{'Hello '}
|
|
54
|
-
{props.name}
|
|
55
|
-
</div>
|
|
70
|
+
export function WithGreeting() {
|
|
71
|
+
return <><Greeting name="World" /></>;
|
|
56
72
|
}
|
|
57
73
|
|
|
58
|
-
export
|
|
59
|
-
|
|
74
|
+
export function ExpressionContent() {
|
|
75
|
+
return <>
|
|
76
|
+
const value = 42;
|
|
77
|
+
const label = 'computed';
|
|
78
|
+
<div>{value}</div>
|
|
79
|
+
<span>{label.toUpperCase()}</span>
|
|
80
|
+
</>;
|
|
60
81
|
}
|
|
61
82
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const label = 'computed';
|
|
65
|
-
<div>{value}</div>
|
|
66
|
-
<span>{label.toUpperCase()}</span>
|
|
83
|
+
function NestedHelperItem({ item }: { item: number }) {
|
|
84
|
+
return <><div class="helper-item">{item}</div></>;
|
|
67
85
|
}
|
|
68
86
|
|
|
69
|
-
function
|
|
70
|
-
return
|
|
87
|
+
function NestedTsxTsrxFragment({ label }: { label: string }) {
|
|
88
|
+
return <>
|
|
71
89
|
<span class="label">{label}</span>
|
|
72
|
-
const
|
|
73
|
-
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
90
|
+
for (const item of [1, 2, 3, 4]) {
|
|
91
|
+
<NestedHelperItem {item} />
|
|
92
|
+
}
|
|
93
|
+
</>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function NestedTsxTsrxExpressionValues() {
|
|
97
|
+
return <>
|
|
98
|
+
for (const item of [1, 2, 3]) {
|
|
99
|
+
<div class="app-item">{item}</div>
|
|
100
|
+
}
|
|
101
|
+
<NestedTsxTsrxFragment label="from helper" />
|
|
102
|
+
</>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function MixedTsrxCollectionText() {
|
|
106
|
+
return <>
|
|
107
|
+
const content = <tsx>
|
|
108
|
+
{[
|
|
109
|
+
'alpha ',
|
|
110
|
+
<strong class="middle">
|
|
111
|
+
{'beta'}
|
|
112
|
+
</strong>,
|
|
113
|
+
' gamma ',
|
|
114
|
+
[
|
|
115
|
+
'delta ',
|
|
116
|
+
<em class="tail">
|
|
117
|
+
{'epsilon'}
|
|
118
|
+
</em>,
|
|
119
|
+
' zeta',
|
|
120
|
+
],
|
|
121
|
+
]}
|
|
122
|
+
</tsx>;
|
|
123
|
+
<div class="mixed-collection">{content}</div>
|
|
124
|
+
</>;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function MixedTsrxCollectionSplitServerText() {
|
|
128
|
+
return <>
|
|
129
|
+
const content = <tsx>
|
|
130
|
+
{[
|
|
131
|
+
'alpha ',
|
|
132
|
+
<strong class="middle">
|
|
133
|
+
{'beta'}
|
|
134
|
+
</strong>,
|
|
135
|
+
' gamma ',
|
|
136
|
+
[
|
|
137
|
+
'delta ',
|
|
138
|
+
<em class="tail">
|
|
139
|
+
{'epsilon'}
|
|
140
|
+
</em>,
|
|
141
|
+
' zeta',
|
|
142
|
+
],
|
|
143
|
+
]}
|
|
144
|
+
</tsx>;
|
|
145
|
+
<div class="mixed-collection-split">{content}</div>
|
|
146
|
+
</>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function MixedTsrxCollectionSplitClientText() {
|
|
150
|
+
return <>
|
|
151
|
+
const content = <tsx>
|
|
152
|
+
{[
|
|
153
|
+
'alpha ',
|
|
154
|
+
<strong class="middle">
|
|
155
|
+
{'beta'}
|
|
156
|
+
</strong>,
|
|
157
|
+
' gamma ',
|
|
158
|
+
[
|
|
159
|
+
'changed ',
|
|
160
|
+
<em class="tail">
|
|
161
|
+
{'epsilon'}
|
|
162
|
+
</em>,
|
|
163
|
+
' zeta',
|
|
164
|
+
],
|
|
165
|
+
]}
|
|
80
166
|
</tsx>;
|
|
81
|
-
{
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
{
|
|
116
|
-
|
|
117
|
-
<strong class="middle">
|
|
118
|
-
{'beta'}
|
|
119
|
-
</strong>,
|
|
120
|
-
' gamma ',
|
|
121
|
-
[
|
|
122
|
-
'delta ',
|
|
123
|
-
<em class="tail">
|
|
124
|
-
{'epsilon'}
|
|
125
|
-
</em>,
|
|
126
|
-
' zeta',
|
|
127
|
-
],
|
|
128
|
-
]}
|
|
129
|
-
</tsx>;
|
|
130
|
-
|
|
131
|
-
<div class="mixed-collection-split">{content}</div>
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export component MixedTsrxCollectionSplitClientText() {
|
|
135
|
-
const content = <tsx>
|
|
136
|
-
{[
|
|
137
|
-
'alpha ',
|
|
138
|
-
<strong class="middle">
|
|
139
|
-
{'beta'}
|
|
140
|
-
</strong>,
|
|
141
|
-
' gamma ',
|
|
142
|
-
[
|
|
143
|
-
'changed ',
|
|
144
|
-
<em class="tail">
|
|
145
|
-
{'epsilon'}
|
|
146
|
-
</em>,
|
|
147
|
-
' zeta',
|
|
148
|
-
],
|
|
149
|
-
]}
|
|
150
|
-
</tsx>;
|
|
151
|
-
|
|
152
|
-
<div class="mixed-collection-split">{content}</div>
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export component MixedTsrxCollectionPrimitiveServerText() {
|
|
156
|
-
const content = <tsx>
|
|
157
|
-
{[
|
|
158
|
-
'count: ',
|
|
159
|
-
1,
|
|
160
|
-
' / ',
|
|
161
|
-
true,
|
|
162
|
-
<span class="primitive-tail">
|
|
163
|
-
{' ok'}
|
|
164
|
-
</span>,
|
|
165
|
-
]}
|
|
166
|
-
</tsx>;
|
|
167
|
-
|
|
168
|
-
<div class="mixed-collection-primitive">{content}</div>
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
export component MixedTsrxCollectionPrimitiveClientText() {
|
|
172
|
-
const content = <tsx>
|
|
173
|
-
{[
|
|
174
|
-
'count: ',
|
|
175
|
-
2,
|
|
176
|
-
' / ',
|
|
177
|
-
false,
|
|
178
|
-
<span class="primitive-tail">
|
|
179
|
-
{' ok'}
|
|
180
|
-
</span>,
|
|
181
|
-
]}
|
|
182
|
-
</tsx>;
|
|
183
|
-
|
|
184
|
-
<div class="mixed-collection-primitive">{content}</div>
|
|
167
|
+
<div class="mixed-collection-split">{content}</div>
|
|
168
|
+
</>;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export function MixedTsrxCollectionPrimitiveServerText() {
|
|
172
|
+
return <>
|
|
173
|
+
const content = <tsx>
|
|
174
|
+
{[
|
|
175
|
+
'count: ',
|
|
176
|
+
1,
|
|
177
|
+
' / ',
|
|
178
|
+
true,
|
|
179
|
+
<span class="primitive-tail">
|
|
180
|
+
{' ok'}
|
|
181
|
+
</span>,
|
|
182
|
+
]}
|
|
183
|
+
</tsx>;
|
|
184
|
+
<div class="mixed-collection-primitive">{content}</div>
|
|
185
|
+
</>;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function MixedTsrxCollectionPrimitiveClientText() {
|
|
189
|
+
return <>
|
|
190
|
+
const content = <tsx>
|
|
191
|
+
{[
|
|
192
|
+
'count: ',
|
|
193
|
+
2,
|
|
194
|
+
' / ',
|
|
195
|
+
false,
|
|
196
|
+
<span class="primitive-tail">
|
|
197
|
+
{' ok'}
|
|
198
|
+
</span>,
|
|
199
|
+
]}
|
|
200
|
+
</tsx>;
|
|
201
|
+
<div class="mixed-collection-primitive">{content}</div>
|
|
202
|
+
</>;
|
|
185
203
|
}
|
|
186
204
|
|
|
187
205
|
function createPrimitiveItems() {
|
|
188
206
|
return ['start:', ['one', 2], true, null, false, ':end'];
|
|
189
207
|
}
|
|
190
208
|
|
|
191
|
-
export
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
209
|
+
export function DynamicArrayFromCall() {
|
|
210
|
+
return <>
|
|
211
|
+
const items = createPrimitiveItems();
|
|
212
|
+
<div class="dynamic-array-call">{items}</div>
|
|
213
|
+
</>;
|
|
195
214
|
}
|
|
196
215
|
|
|
197
|
-
export
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
216
|
+
export function DynamicArrayFromTrack() {
|
|
217
|
+
return <>
|
|
218
|
+
let &[items] = track(['start:', ['one', 2], true, null, false, ':end']);
|
|
219
|
+
<div class="dynamic-array-track">{items}</div>
|
|
220
|
+
</>;
|
|
201
221
|
}
|
|
202
222
|
|
|
203
|
-
export
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
223
|
+
export function DynamicArrayFromConditional() {
|
|
224
|
+
return <>
|
|
225
|
+
const condition = true;
|
|
226
|
+
const items = condition ? ['start:', ['one', 2], true, null, false, ':end'] : ['fallback'];
|
|
227
|
+
<div class="dynamic-array-conditional">{items}</div>
|
|
228
|
+
</>;
|
|
208
229
|
}
|
|
209
230
|
|
|
210
|
-
export
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
export component NestedTsrxInsideTopLevelTsxExpression() {
|
|
218
|
-
const content = <tsx>
|
|
219
|
-
<section class="outer">
|
|
220
|
-
{<tsrx>
|
|
221
|
-
<div class="inner">{'from tsrx'}</div>
|
|
222
|
-
</tsrx>}
|
|
223
|
-
</section>
|
|
224
|
-
</tsx>;
|
|
225
|
-
|
|
226
|
-
{content}
|
|
231
|
+
export function DynamicArrayFromLogical() {
|
|
232
|
+
return <>
|
|
233
|
+
const condition = true;
|
|
234
|
+
const items = condition && ['start:', ['one', 2], true, null, false, ':end'];
|
|
235
|
+
<div class="dynamic-array-logical">{items}</div>
|
|
236
|
+
</>;
|
|
227
237
|
}
|
|
228
238
|
|
|
229
|
-
export
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
<
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
export function NestedTsrxInsideTopLevelTsxExpression() {
|
|
240
|
+
return <>
|
|
241
|
+
const content = <tsx>
|
|
242
|
+
<section class="outer">
|
|
243
|
+
{<>
|
|
244
|
+
<div class="inner">
|
|
245
|
+
{'from tsrx'}
|
|
246
|
+
</div>
|
|
247
|
+
</>}
|
|
248
|
+
</section>
|
|
249
|
+
</tsx>;
|
|
250
|
+
{content}
|
|
251
|
+
</>;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export function NestedTsrxElementsInsideTopLevelTsxValue() {
|
|
255
|
+
return <>
|
|
256
|
+
const content = <tsx>
|
|
257
|
+
<div class="wrapper">
|
|
258
|
+
{<>
|
|
259
|
+
<section class="native">
|
|
260
|
+
<span class="nested-tsrx">
|
|
261
|
+
{'inside nested tsrx'}
|
|
262
|
+
</span>
|
|
263
|
+
</section>
|
|
264
|
+
</>}
|
|
265
|
+
</div>
|
|
266
|
+
</tsx>;
|
|
267
|
+
{content}
|
|
268
|
+
</>;
|
|
241
269
|
}
|
|
242
270
|
|
|
243
|
-
export
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
271
|
+
export function TsxDeclaredBeforeTopLevelTsx() {
|
|
272
|
+
return <>
|
|
273
|
+
const nested = <tsx>
|
|
274
|
+
<span class="nested-tsx">
|
|
275
|
+
{'inside nested tsx'}
|
|
276
|
+
</span>
|
|
277
|
+
</tsx>;
|
|
278
|
+
const content = <tsx>
|
|
251
279
|
<div class="native">{nested}</div>
|
|
252
|
-
</
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
{content}
|
|
280
|
+
</tsx>;
|
|
281
|
+
{content}
|
|
282
|
+
</>;
|
|
256
283
|
}
|
|
257
284
|
|
|
258
|
-
|
|
259
|
-
|
|
285
|
+
function TextProp(&{ children }: { children: string }) {
|
|
286
|
+
return <><div class="text-prop">{children}</div></>;
|
|
260
287
|
}
|
|
261
288
|
|
|
262
|
-
export
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
289
|
+
export function TextPropWithToggle() {
|
|
290
|
+
return <>
|
|
291
|
+
let &[show] = track(false);
|
|
292
|
+
<TextProp children={show ? 'hello' : ''} />
|
|
293
|
+
<button class="show-text" onClick={() => (show = true)}>{'Show'}</button>
|
|
294
|
+
</>;
|
|
267
295
|
}
|
|
268
296
|
|
|
269
297
|
// Test for static content in child component followed by sibling content
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
298
|
+
function StaticHeader() {
|
|
299
|
+
return <>
|
|
300
|
+
<h1 class="sr-only">{'heading'}</h1>
|
|
301
|
+
<p class="subtitle">{'first paragraph'}</p>
|
|
302
|
+
<p class="subtitle">{'second paragraph'}</p>
|
|
303
|
+
</>;
|
|
274
304
|
}
|
|
275
305
|
|
|
276
|
-
export
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
306
|
+
export function StaticChildWithSiblings() {
|
|
307
|
+
return <>
|
|
308
|
+
const foo = 'bar';
|
|
309
|
+
<StaticHeader />
|
|
310
|
+
<span class="sibling1">{foo}</span>
|
|
311
|
+
<span class="sibling2">{foo}</span>
|
|
312
|
+
</>;
|
|
281
313
|
}
|
|
282
314
|
|
|
283
315
|
// Website-like components for testing complex hydration scenarios
|
|
284
316
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
<a href="
|
|
297
|
-
|
|
298
|
-
|
|
317
|
+
function Header() {
|
|
318
|
+
return <>
|
|
319
|
+
<h1 class="sr-only">{'Ripple'}</h1>
|
|
320
|
+
<img src="/images/logo.png" alt="Logo" class="logo" />
|
|
321
|
+
<p class="subtitle">{'the elegant TypeScript UI framework'}</p>
|
|
322
|
+
</>;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
function Actions({ playgroundVisible = false }: { playgroundVisible: boolean }) {
|
|
326
|
+
return <>
|
|
327
|
+
<div class="social-links">
|
|
328
|
+
<a href="https://github.com" class="github-link">{'GitHub'}</a>
|
|
329
|
+
<a href="https://discord.com" class="discord-link">{'Discord'}</a>
|
|
330
|
+
if (playgroundVisible) {
|
|
331
|
+
<a href="/playground" class="playground-link">{'Playground'}</a>
|
|
332
|
+
}
|
|
333
|
+
</div>
|
|
334
|
+
</>;
|
|
299
335
|
}
|
|
300
336
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
<
|
|
304
|
-
|
|
337
|
+
function Layout({ children }: { children: Children }) {
|
|
338
|
+
return <>
|
|
339
|
+
<main>
|
|
340
|
+
<div class="container">{children}</div>
|
|
341
|
+
</main>
|
|
342
|
+
</>;
|
|
305
343
|
}
|
|
306
344
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
<
|
|
310
|
-
|
|
345
|
+
function Content() {
|
|
346
|
+
return <>
|
|
347
|
+
<div class="content">
|
|
348
|
+
<p>{'Some content here'}</p>
|
|
349
|
+
</div>
|
|
350
|
+
</>;
|
|
311
351
|
}
|
|
312
352
|
|
|
313
|
-
export
|
|
314
|
-
|
|
315
|
-
<
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
353
|
+
export function WebsiteIndex() {
|
|
354
|
+
return <>
|
|
355
|
+
<Layout>
|
|
356
|
+
<Header />
|
|
357
|
+
<Actions playgroundVisible={true} />
|
|
358
|
+
<Content />
|
|
359
|
+
<Actions playgroundVisible={false} />
|
|
360
|
+
</Layout>
|
|
361
|
+
</>;
|
|
320
362
|
}
|
|
321
363
|
|
|
322
364
|
// Test case for component as last element with no following siblings.
|
|
323
365
|
// This exercises hydrate_advance() in append() - at the end of content,
|
|
324
366
|
// there's no next sibling and that should be handled gracefully.
|
|
325
|
-
|
|
326
|
-
|
|
367
|
+
function LastChild() {
|
|
368
|
+
return <><footer class="last-child">{'I am the last child'}</footer></>;
|
|
327
369
|
}
|
|
328
370
|
|
|
329
|
-
export
|
|
330
|
-
|
|
331
|
-
<
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
371
|
+
export function ComponentAsLastSibling() {
|
|
372
|
+
return <>
|
|
373
|
+
<div class="wrapper">
|
|
374
|
+
<h1>{'Header'}</h1>
|
|
375
|
+
<p>{'Some content'}</p>
|
|
376
|
+
<LastChild />
|
|
377
|
+
</div>
|
|
378
|
+
</>;
|
|
335
379
|
}
|
|
336
380
|
|
|
337
381
|
// Nested version - component is last child inside another component
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
<
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
382
|
+
function InnerContent() {
|
|
383
|
+
return <>
|
|
384
|
+
<div class="inner">
|
|
385
|
+
<span>{'Inner text'}</span>
|
|
386
|
+
<LastChild />
|
|
387
|
+
</div>
|
|
388
|
+
</>;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
export function NestedComponentAsLastSibling() {
|
|
392
|
+
return <>
|
|
393
|
+
<section class="outer">
|
|
394
|
+
<h2>{'Section title'}</h2>
|
|
395
|
+
<InnerContent />
|
|
396
|
+
</section>
|
|
397
|
+
</>;
|
|
350
398
|
}
|