ripple 0.3.72 → 0.3.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -0
- package/package.json +3 -3
- package/src/jsx-runtime.d.ts +4 -10
- package/src/runtime/dynamic-client.js +33 -0
- package/src/runtime/dynamic-server.js +80 -0
- package/src/runtime/index-client.js +5 -13
- package/src/runtime/index-server.js +2 -0
- package/src/runtime/internal/client/blocks.js +6 -27
- package/src/runtime/internal/client/composite.js +11 -6
- package/src/runtime/internal/client/for.js +80 -5
- package/src/runtime/internal/client/index.js +0 -2
- package/src/runtime/internal/client/render.js +5 -2
- package/src/runtime/internal/client/types.d.ts +0 -10
- package/src/runtime/internal/server/index.js +8 -1
- package/tests/client/__snapshots__/computed-properties.test.tsrx.snap +8 -0
- package/tests/client/__snapshots__/for.test.tsrx.snap +22 -0
- package/tests/client/__snapshots__/html.test.tsrx.snap +4 -0
- package/tests/client/array/array.copy-within.test.tsrx +19 -19
- package/tests/client/array/array.derived.test.tsrx +97 -109
- package/tests/client/array/array.iteration.test.tsrx +28 -28
- package/tests/client/array/array.mutations.test.tsrx +68 -68
- package/tests/client/array/array.static.test.tsrx +82 -92
- package/tests/client/array/array.to-methods.test.tsrx +15 -15
- package/tests/client/async-suspend.test.tsrx +180 -179
- package/tests/client/basic/__snapshots__/basic.attributes.test.tsrx.snap +2 -0
- package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +4 -0
- package/tests/client/basic/basic.attributes.test.tsrx +273 -317
- package/tests/client/basic/basic.collections.test.tsrx +55 -61
- package/tests/client/basic/basic.components.test.tsrx +198 -220
- package/tests/client/basic/basic.errors.test.tsrx +70 -76
- package/tests/client/basic/basic.events.test.tsrx +80 -85
- package/tests/client/basic/basic.get-set.test.tsrx +54 -64
- package/tests/client/basic/basic.hmr.test.tsrx +15 -19
- package/tests/client/basic/basic.reactivity.test.tsrx +121 -135
- package/tests/client/basic/basic.rendering.test.tsrx +273 -178
- package/tests/client/basic/basic.styling.test.tsrx +16 -14
- package/tests/client/basic/basic.utilities.test.tsrx +8 -10
- package/tests/client/boundaries.test.tsrx +18 -18
- package/tests/client/compiler/compiler.assignments.test.tsrx +77 -76
- package/tests/client/compiler/compiler.attributes.test.tsrx +18 -14
- package/tests/client/compiler/compiler.basic.test.tsrx +357 -288
- package/tests/client/compiler/compiler.regex.test.tsrx +40 -44
- package/tests/client/compiler/compiler.tracked-access.test.tsrx +57 -38
- package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
- package/tests/client/compiler/compiler.typescript.test.tsrx +4 -3
- package/tests/client/composite/composite.dynamic-components.test.tsrx +62 -47
- package/tests/client/composite/composite.generics.test.tsrx +165 -167
- package/tests/client/composite/composite.props.test.tsrx +66 -74
- package/tests/client/composite/composite.reactivity.test.tsrx +132 -166
- package/tests/client/composite/composite.render.test.tsrx +92 -101
- package/tests/client/computed-properties.test.tsrx +14 -18
- package/tests/client/context.test.tsrx +14 -18
- package/tests/client/css/global-additional-cases.test.tsrx +493 -439
- package/tests/client/css/global-advanced-selectors.test.tsrx +169 -153
- package/tests/client/css/global-at-rules.test.tsrx +71 -66
- package/tests/client/css/global-basic.test.tsrx +105 -98
- package/tests/client/css/global-classes-ids.test.tsrx +128 -114
- package/tests/client/css/global-combinators.test.tsrx +83 -78
- package/tests/client/css/global-complex-nesting.test.tsrx +134 -120
- package/tests/client/css/global-edge-cases.test.tsrx +138 -120
- package/tests/client/css/global-keyframes.test.tsrx +108 -96
- package/tests/client/css/global-nested.test.tsrx +88 -78
- package/tests/client/css/global-pseudo.test.tsrx +104 -98
- package/tests/client/css/global-scoping.test.tsrx +145 -125
- package/tests/client/css/style-identifier.test.tsrx +65 -72
- package/tests/client/date.test.tsrx +83 -83
- package/tests/client/dynamic-elements.test.tsrx +318 -299
- package/tests/client/events.test.tsrx +252 -266
- package/tests/client/for.test.tsrx +120 -127
- package/tests/client/head.test.tsrx +74 -48
- package/tests/client/html.test.tsrx +37 -49
- package/tests/client/input-value.test.tsrx +1125 -1354
- package/tests/client/lazy-array.test.tsrx +10 -16
- package/tests/client/lazy-destructuring.test.tsrx +169 -221
- package/tests/client/map.test.tsrx +39 -41
- package/tests/client/media-query.test.tsrx +15 -19
- package/tests/client/object.test.tsrx +46 -56
- package/tests/client/portal.test.tsrx +31 -37
- package/tests/client/ref.test.tsrx +173 -193
- package/tests/client/return.test.tsrx +62 -37
- package/tests/client/set.test.tsrx +33 -33
- package/tests/client/svg.test.tsrx +197 -216
- package/tests/client/switch.test.tsrx +201 -191
- package/tests/client/track-async-hydration.test.tsrx +14 -18
- package/tests/client/tracked-index-access.test.tsrx +18 -28
- package/tests/client/try.test.tsrx +494 -619
- package/tests/client/tsx.test.tsrx +286 -292
- package/tests/client/typescript-generics.test.tsrx +121 -129
- package/tests/client/url/url.derived.test.tsrx +21 -25
- package/tests/client/url/url.parsing.test.tsrx +35 -35
- package/tests/client/url/url.partial-removal.test.tsrx +32 -32
- package/tests/client/url/url.reactivity.test.tsrx +68 -72
- package/tests/client/url/url.serialization.test.tsrx +8 -8
- package/tests/client/url-search-params/url-search-params.derived.test.tsrx +21 -27
- package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +16 -16
- package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +37 -37
- package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +56 -60
- package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +32 -34
- package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +9 -9
- package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +10 -10
- package/tests/hydration/compiled/client/basic.js +390 -319
- package/tests/hydration/compiled/client/composite.js +52 -44
- package/tests/hydration/compiled/client/for.js +734 -604
- package/tests/hydration/compiled/client/head.js +183 -103
- package/tests/hydration/compiled/client/html.js +93 -86
- package/tests/hydration/compiled/client/if-children.js +95 -71
- package/tests/hydration/compiled/client/if.js +113 -89
- package/tests/hydration/compiled/client/mixed-control-flow.js +225 -209
- package/tests/hydration/compiled/client/nested-control-flow.js +94 -98
- package/tests/hydration/compiled/client/reactivity.js +26 -24
- package/tests/hydration/compiled/client/return.js +8 -42
- package/tests/hydration/compiled/client/switch.js +208 -173
- package/tests/hydration/compiled/client/track-async-serialization.js +176 -128
- package/tests/hydration/compiled/client/try.js +29 -21
- package/tests/hydration/compiled/server/basic.js +210 -221
- package/tests/hydration/compiled/server/composite.js +13 -14
- package/tests/hydration/compiled/server/for.js +427 -444
- package/tests/hydration/compiled/server/head.js +199 -189
- package/tests/hydration/compiled/server/html.js +33 -41
- package/tests/hydration/compiled/server/if-children.js +114 -117
- package/tests/hydration/compiled/server/if.js +77 -83
- package/tests/hydration/compiled/server/mixed-control-flow.js +145 -150
- package/tests/hydration/compiled/server/nested-control-flow.js +10 -0
- package/tests/hydration/compiled/server/reactivity.js +24 -22
- package/tests/hydration/compiled/server/return.js +6 -18
- package/tests/hydration/compiled/server/switch.js +179 -176
- package/tests/hydration/compiled/server/track-async-serialization.js +88 -70
- package/tests/hydration/compiled/server/try.js +31 -35
- package/tests/hydration/components/basic.tsrx +216 -258
- package/tests/hydration/components/composite.tsrx +32 -42
- package/tests/hydration/components/events.tsrx +81 -101
- package/tests/hydration/components/for.tsrx +270 -336
- package/tests/hydration/components/head.tsrx +43 -39
- package/tests/hydration/components/hmr.tsrx +16 -22
- package/tests/hydration/components/html-in-template.tsrx +15 -21
- package/tests/hydration/components/html.tsrx +442 -526
- package/tests/hydration/components/if-children.tsrx +107 -125
- package/tests/hydration/components/if.tsrx +68 -90
- package/tests/hydration/components/mixed-control-flow.tsrx +65 -72
- package/tests/hydration/components/nested-control-flow.tsrx +202 -216
- package/tests/hydration/components/portal.tsrx +33 -41
- package/tests/hydration/components/reactivity.tsrx +26 -34
- package/tests/hydration/components/return.tsrx +4 -6
- package/tests/hydration/components/switch.tsrx +73 -78
- package/tests/hydration/components/track-async-serialization.tsrx +83 -93
- package/tests/hydration/components/try.tsrx +37 -51
- package/tests/hydration/switch.test.js +8 -8
- package/tests/server/await.test.tsrx +3 -3
- package/tests/server/basic.attributes.test.tsrx +117 -162
- package/tests/server/basic.components.test.tsrx +164 -194
- package/tests/server/basic.test.tsrx +299 -199
- package/tests/server/compiler.test.tsrx +142 -72
- package/tests/server/composite.props.test.tsrx +54 -58
- package/tests/server/composite.test.tsrx +165 -167
- package/tests/server/context.test.tsrx +13 -17
- package/tests/server/dynamic-elements.test.tsrx +147 -148
- package/tests/server/for.test.tsrx +115 -84
- package/tests/server/head.test.tsrx +54 -31
- package/tests/server/html-nesting-validation.test.tsrx +16 -8
- package/tests/server/if.test.tsrx +49 -59
- package/tests/server/lazy-destructuring.test.tsrx +288 -366
- package/tests/server/return.test.tsrx +58 -36
- package/tests/server/streaming-ssr.test.tsrx +4 -4
- package/tests/server/style-identifier.test.tsrx +61 -69
- package/tests/server/switch.test.tsrx +89 -97
- package/tests/server/track-async-serialization.test.tsrx +85 -103
- package/tests/server/try.test.tsrx +275 -360
- package/tests/utils/ref-types.test.js +72 -0
- package/tests/utils/vite-plugin-config.test.js +41 -74
- package/types/index.d.ts +29 -4
- package/src/runtime/internal/client/compat.js +0 -40
- package/tests/utils/compiler-compat-config.test.js +0 -38
|
@@ -2,8 +2,8 @@ import { RippleObject, track } from 'ripple';
|
|
|
2
2
|
|
|
3
3
|
describe('basic server > attribute rendering', () => {
|
|
4
4
|
it('render static attributes', async () => {
|
|
5
|
-
function Basic() {
|
|
6
|
-
|
|
5
|
+
function Basic() @{
|
|
6
|
+
<div class="foo" id="bar" style="color: red;">{'Hello World'}</div>
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const { body } = await render(Basic);
|
|
@@ -18,16 +18,16 @@ describe('basic server > attribute rendering', () => {
|
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
it('render dynamic class attribute', async () => {
|
|
21
|
-
function Basic() {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
function Basic() @{
|
|
22
|
+
let &[active] = track(false);
|
|
23
|
+
<>
|
|
24
24
|
<div class={active ? 'active' : 'inactive'}>{'Dynamic Class'}</div>
|
|
25
25
|
<style>
|
|
26
26
|
.active {
|
|
27
27
|
color: green;
|
|
28
28
|
}
|
|
29
29
|
</style>
|
|
30
|
-
|
|
30
|
+
</>
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
const { body } = await render(Basic);
|
|
@@ -42,8 +42,8 @@ describe('basic server > attribute rendering', () => {
|
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
it('render class attribute with array, nested array, nested object', async () => {
|
|
45
|
-
function Basic() {
|
|
46
|
-
|
|
45
|
+
function Basic() @{
|
|
46
|
+
<>
|
|
47
47
|
<div
|
|
48
48
|
class={[
|
|
49
49
|
'foo',
|
|
@@ -57,15 +57,13 @@ describe('basic server > attribute rendering', () => {
|
|
|
57
57
|
{ eee: true, fff: false },
|
|
58
58
|
],
|
|
59
59
|
]}
|
|
60
|
-
>
|
|
61
|
-
{'Class Array'}
|
|
62
|
-
</div>
|
|
60
|
+
>{'Class Array'}</div>
|
|
63
61
|
<style>
|
|
64
62
|
.foo {
|
|
65
63
|
color: red;
|
|
66
64
|
}
|
|
67
65
|
</style>
|
|
68
|
-
|
|
66
|
+
</>
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
const { body } = await render(Basic);
|
|
@@ -89,8 +87,8 @@ describe('basic server > attribute rendering', () => {
|
|
|
89
87
|
});
|
|
90
88
|
|
|
91
89
|
it('applies scoped classes inside tsx blocks and fragment shorthand', async () => {
|
|
92
|
-
function App() {
|
|
93
|
-
|
|
90
|
+
function App() @{
|
|
91
|
+
<>
|
|
94
92
|
<>
|
|
95
93
|
<div class="card">
|
|
96
94
|
<h2>{'tsx block'}</h2>
|
|
@@ -110,7 +108,7 @@ describe('basic server > attribute rendering', () => {
|
|
|
110
108
|
color: red;
|
|
111
109
|
}
|
|
112
110
|
</style>
|
|
113
|
-
|
|
111
|
+
</>
|
|
114
112
|
}
|
|
115
113
|
|
|
116
114
|
const { body } = await render(App);
|
|
@@ -136,16 +134,16 @@ describe('basic server > attribute rendering', () => {
|
|
|
136
134
|
});
|
|
137
135
|
|
|
138
136
|
it('render dynamic class object', async () => {
|
|
139
|
-
function Basic() {
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
function Basic() @{
|
|
138
|
+
let &[active] = track(false);
|
|
139
|
+
<>
|
|
142
140
|
<div class={{ active: active, inactive: !active }}>{'Dynamic Class'}</div>
|
|
143
141
|
<style>
|
|
144
142
|
.active {
|
|
145
143
|
color: green;
|
|
146
144
|
}
|
|
147
145
|
</style>
|
|
148
|
-
|
|
146
|
+
</>
|
|
149
147
|
}
|
|
150
148
|
|
|
151
149
|
const { body } = await render(Basic);
|
|
@@ -163,9 +161,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
163
161
|
it(
|
|
164
162
|
'applies scoped ripple class to multiple elements with dynamic class expressions',
|
|
165
163
|
async () => {
|
|
166
|
-
function Basic() {
|
|
167
|
-
|
|
168
|
-
|
|
164
|
+
function Basic() @{
|
|
165
|
+
let &[selected] = track(1);
|
|
166
|
+
<>
|
|
169
167
|
<div class={selected === 0 ? 'selected' : ''}>{`div 1`}</div>
|
|
170
168
|
<div class={selected === 0 ? 'selected' : ''}>{`div 2`}</div>
|
|
171
169
|
<style>
|
|
@@ -177,7 +175,7 @@ describe('basic server > attribute rendering', () => {
|
|
|
177
175
|
background: indigo;
|
|
178
176
|
}
|
|
179
177
|
</style>
|
|
180
|
-
|
|
178
|
+
</>
|
|
181
179
|
}
|
|
182
180
|
|
|
183
181
|
const { body } = await render(Basic);
|
|
@@ -194,11 +192,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
194
192
|
);
|
|
195
193
|
|
|
196
194
|
it('render dynamic id attribute', async () => {
|
|
197
|
-
function Basic() {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
<div id={`item-${count}`}>{'Dynamic ID'}</div>
|
|
201
|
-
</>;
|
|
195
|
+
function Basic() @{
|
|
196
|
+
let &[count] = track(0);
|
|
197
|
+
<div id={`item-${count}`}>{'Dynamic ID'}</div>
|
|
202
198
|
}
|
|
203
199
|
|
|
204
200
|
const { body } = await render(Basic);
|
|
@@ -210,11 +206,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
210
206
|
});
|
|
211
207
|
|
|
212
208
|
it('render dynamic style attribute', async () => {
|
|
213
|
-
function Basic() {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
<div style={`color: ${color}; font-weight: bold;`}>{'Dynamic Style'}</div>
|
|
217
|
-
</>;
|
|
209
|
+
function Basic() @{
|
|
210
|
+
let &[color] = track('red');
|
|
211
|
+
<div style={`color: ${color}; font-weight: bold;`}>{'Dynamic Style'}</div>
|
|
218
212
|
}
|
|
219
213
|
|
|
220
214
|
const { body } = await render(Basic);
|
|
@@ -227,11 +221,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
227
221
|
});
|
|
228
222
|
|
|
229
223
|
it('render style attribute as dynamic object', async () => {
|
|
230
|
-
function Basic() {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
<div style={{ color: color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>
|
|
234
|
-
</>;
|
|
224
|
+
function Basic() @{
|
|
225
|
+
let &[color] = track('red');
|
|
226
|
+
<div style={{ color: color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>
|
|
235
227
|
}
|
|
236
228
|
|
|
237
229
|
const { body } = await render(Basic);
|
|
@@ -244,11 +236,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
244
236
|
});
|
|
245
237
|
|
|
246
238
|
it('render tracked variable as style attribute', async () => {
|
|
247
|
-
function Basic() {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
<div {style}>{'Dynamic Style'}</div>
|
|
251
|
-
</>;
|
|
239
|
+
function Basic() @{
|
|
240
|
+
let &[style] = track({ color: 'red', fontWeight: 'bold' });
|
|
241
|
+
<div {style}>{'Dynamic Style'}</div>
|
|
252
242
|
}
|
|
253
243
|
|
|
254
244
|
const { body } = await render(Basic);
|
|
@@ -261,14 +251,12 @@ describe('basic server > attribute rendering', () => {
|
|
|
261
251
|
});
|
|
262
252
|
|
|
263
253
|
it('render tracked object as style attribute', async () => {
|
|
264
|
-
function Basic() {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
<div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>
|
|
271
|
-
</>;
|
|
254
|
+
function Basic() @{
|
|
255
|
+
let style = new RippleObject({
|
|
256
|
+
color: 'red',
|
|
257
|
+
fontWeight: 'bold',
|
|
258
|
+
});
|
|
259
|
+
<div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>
|
|
272
260
|
}
|
|
273
261
|
|
|
274
262
|
const { body } = await render(Basic);
|
|
@@ -281,14 +269,12 @@ describe('basic server > attribute rendering', () => {
|
|
|
281
269
|
});
|
|
282
270
|
|
|
283
271
|
it('render spread attributes with style and class', async () => {
|
|
284
|
-
function Basic() {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
<div {...attributes}>{'Attributes with style and class'}</div>
|
|
291
|
-
</>;
|
|
272
|
+
function Basic() @{
|
|
273
|
+
const attributes = {
|
|
274
|
+
style: { color: 'red', fontWeight: 'bold' },
|
|
275
|
+
class: ['foo', false && 'bar'],
|
|
276
|
+
};
|
|
277
|
+
<div {...attributes}>{'Attributes with style and class'}</div>
|
|
292
278
|
}
|
|
293
279
|
|
|
294
280
|
const { body } = await render(Basic);
|
|
@@ -304,11 +290,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
304
290
|
});
|
|
305
291
|
|
|
306
292
|
it('renders host innerHTML as content instead of an attribute', async () => {
|
|
307
|
-
function Basic() {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
<code innerHTML={html} />
|
|
311
|
-
</>;
|
|
293
|
+
function Basic() @{
|
|
294
|
+
const html = '<span>Direct HTML</span>';
|
|
295
|
+
<code innerHTML={html} />
|
|
312
296
|
}
|
|
313
297
|
|
|
314
298
|
const { body } = await render(Basic);
|
|
@@ -321,11 +305,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
321
305
|
});
|
|
322
306
|
|
|
323
307
|
it('renders spread innerHTML as content instead of an attribute', async () => {
|
|
324
|
-
function Basic() {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
<code {...attributes} />
|
|
328
|
-
</>;
|
|
308
|
+
function Basic() @{
|
|
309
|
+
const attributes = { innerHTML: '<span>Spread HTML</span>' };
|
|
310
|
+
<code {...attributes} />
|
|
329
311
|
}
|
|
330
312
|
|
|
331
313
|
const { body } = await render(Basic);
|
|
@@ -338,11 +320,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
338
320
|
});
|
|
339
321
|
|
|
340
322
|
it('uses the last innerHTML value when spreads and direct props are mixed', async () => {
|
|
341
|
-
function Basic() {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
<code {...attributes} innerHTML="<em>Direct HTML</em>" />
|
|
345
|
-
</>;
|
|
323
|
+
function Basic() @{
|
|
324
|
+
const attributes = { innerHTML: '<span>Spread HTML</span>' };
|
|
325
|
+
<code {...attributes} innerHTML="<em>Direct HTML</em>" />
|
|
346
326
|
}
|
|
347
327
|
|
|
348
328
|
const { body } = await render(Basic);
|
|
@@ -354,13 +334,11 @@ describe('basic server > attribute rendering', () => {
|
|
|
354
334
|
});
|
|
355
335
|
|
|
356
336
|
it('render spread props without duplication', async () => {
|
|
357
|
-
function Basic() {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
<
|
|
361
|
-
|
|
362
|
-
</div>
|
|
363
|
-
</>;
|
|
337
|
+
function Basic() @{
|
|
338
|
+
const checkBoxProp = { name: 'car' };
|
|
339
|
+
<div>
|
|
340
|
+
<input {...checkBoxProp} type="checkbox" id="vehicle1" value="Bike" />
|
|
341
|
+
</div>
|
|
364
342
|
}
|
|
365
343
|
|
|
366
344
|
const { body } = await render(Basic);
|
|
@@ -384,12 +362,10 @@ describe('basic server > attribute rendering', () => {
|
|
|
384
362
|
});
|
|
385
363
|
|
|
386
364
|
it('render dynamic boolean attributes as false', async () => {
|
|
387
|
-
function Basic() {
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
<input type="checkbox" {disabled} {checked} />
|
|
392
|
-
</>;
|
|
365
|
+
function Basic() @{
|
|
366
|
+
let &[disabled] = track(false);
|
|
367
|
+
let &[checked] = track(false);
|
|
368
|
+
<input type="checkbox" {disabled} {checked} />
|
|
393
369
|
}
|
|
394
370
|
|
|
395
371
|
const { body } = await render(Basic);
|
|
@@ -403,11 +379,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
403
379
|
});
|
|
404
380
|
|
|
405
381
|
it('render dynamic boolean attributes as false via spread', async () => {
|
|
406
|
-
function Basic() {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
<input type="checkbox" {...spread} />
|
|
410
|
-
</>;
|
|
382
|
+
function Basic() @{
|
|
383
|
+
const spread = { disabled: false, checked: false };
|
|
384
|
+
<input type="checkbox" {...spread} />
|
|
411
385
|
}
|
|
412
386
|
|
|
413
387
|
const { body } = await render(Basic);
|
|
@@ -421,12 +395,10 @@ describe('basic server > attribute rendering', () => {
|
|
|
421
395
|
});
|
|
422
396
|
|
|
423
397
|
it('render dynamic boolean attributes as true', async () => {
|
|
424
|
-
function Basic() {
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
<input type="checkbox" {disabled} {checked} />
|
|
429
|
-
</>;
|
|
398
|
+
function Basic() @{
|
|
399
|
+
let &[disabled] = track(true);
|
|
400
|
+
let &[checked] = track(true);
|
|
401
|
+
<input type="checkbox" {disabled} {checked} />
|
|
430
402
|
}
|
|
431
403
|
|
|
432
404
|
const { body } = await render(Basic);
|
|
@@ -440,11 +412,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
440
412
|
});
|
|
441
413
|
|
|
442
414
|
it('render dynamic boolean attributes as true via spread', async () => {
|
|
443
|
-
function Basic() {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
<input type="checkbox" {...spread} />
|
|
447
|
-
</>;
|
|
415
|
+
function Basic() @{
|
|
416
|
+
const spread = { disabled: true, checked: true };
|
|
417
|
+
<input type="checkbox" {...spread} />
|
|
448
418
|
}
|
|
449
419
|
|
|
450
420
|
const { body } = await render(Basic);
|
|
@@ -458,11 +428,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
458
428
|
});
|
|
459
429
|
|
|
460
430
|
it('renders formnovalidate as a boolean attribute', async () => {
|
|
461
|
-
function Basic() {
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
<button {formnovalidate}>{'Submit'}</button>
|
|
465
|
-
</>;
|
|
431
|
+
function Basic() @{
|
|
432
|
+
let &[formnovalidate] = track(true);
|
|
433
|
+
<button {formnovalidate}>{'Submit'}</button>
|
|
466
434
|
}
|
|
467
435
|
|
|
468
436
|
const { body } = await render(Basic);
|
|
@@ -476,11 +444,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
476
444
|
});
|
|
477
445
|
|
|
478
446
|
it('renders hidden as a boolean attribute when true', async () => {
|
|
479
|
-
function Basic() {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
<div {hidden}>{'Hidden content'}</div>
|
|
483
|
-
</>;
|
|
447
|
+
function Basic() @{
|
|
448
|
+
let &[hidden] = track(true);
|
|
449
|
+
<div {hidden}>{'Hidden content'}</div>
|
|
484
450
|
}
|
|
485
451
|
|
|
486
452
|
const { body } = await render(Basic);
|
|
@@ -494,11 +460,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
494
460
|
});
|
|
495
461
|
|
|
496
462
|
it('does not render hidden when false', async () => {
|
|
497
|
-
function Basic() {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
<div {hidden}>{'Visible content'}</div>
|
|
501
|
-
</>;
|
|
463
|
+
function Basic() @{
|
|
464
|
+
let &[hidden] = track(false);
|
|
465
|
+
<div {hidden}>{'Visible content'}</div>
|
|
502
466
|
}
|
|
503
467
|
|
|
504
468
|
const { body } = await render(Basic);
|
|
@@ -511,14 +475,14 @@ describe('basic server > attribute rendering', () => {
|
|
|
511
475
|
});
|
|
512
476
|
|
|
513
477
|
it('render multiple dynamic attributes', async () => {
|
|
514
|
-
function Basic() {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
478
|
+
function Basic() @{
|
|
479
|
+
let &[theme] = track('light');
|
|
480
|
+
let &[size] = track('medium');
|
|
481
|
+
<div
|
|
482
|
+
class={`theme-${theme} size-${size}`}
|
|
483
|
+
data-theme={theme}
|
|
484
|
+
data-size={size}
|
|
485
|
+
>{'Multiple Dynamic Attributes'}</div>
|
|
522
486
|
}
|
|
523
487
|
|
|
524
488
|
const { body } = await render(Basic);
|
|
@@ -532,17 +496,13 @@ describe('basic server > attribute rendering', () => {
|
|
|
532
496
|
});
|
|
533
497
|
|
|
534
498
|
it('render conditional attributes', async () => {
|
|
535
|
-
function Basic() {
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
>
|
|
543
|
-
{'Conditional Attributes'}
|
|
544
|
-
</div>
|
|
545
|
-
</>;
|
|
499
|
+
function Basic() @{
|
|
500
|
+
let &[showTitle] = track(false);
|
|
501
|
+
let &[showAria] = track(false);
|
|
502
|
+
<div
|
|
503
|
+
title={showTitle ? 'This is a title' : undefined}
|
|
504
|
+
aria-label={showAria ? 'Accessible label' : undefined}
|
|
505
|
+
>{'Conditional Attributes'}</div>
|
|
546
506
|
}
|
|
547
507
|
|
|
548
508
|
const { body } = await render(Basic);
|
|
@@ -555,14 +515,12 @@ describe('basic server > attribute rendering', () => {
|
|
|
555
515
|
});
|
|
556
516
|
|
|
557
517
|
it('render spread attributes', async () => {
|
|
558
|
-
function Basic() {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
<div {...attrs}>{'Spread Attributes'}</div>
|
|
565
|
-
</>;
|
|
518
|
+
function Basic() @{
|
|
519
|
+
let &[attrs] = track<TestAttributes>({
|
|
520
|
+
class: 'initial',
|
|
521
|
+
id: 'test-1',
|
|
522
|
+
});
|
|
523
|
+
<div {...attrs}>{'Spread Attributes'}</div>
|
|
566
524
|
}
|
|
567
525
|
|
|
568
526
|
const { body } = await render(Basic);
|
|
@@ -576,16 +534,15 @@ describe('basic server > attribute rendering', () => {
|
|
|
576
534
|
});
|
|
577
535
|
|
|
578
536
|
it('renders with reactive attributes with nested reactive attributes', async () => {
|
|
579
|
-
function Basic() {
|
|
580
|
-
|
|
581
|
-
|
|
537
|
+
function Basic() @{
|
|
538
|
+
let &[value] = track('parent-class');
|
|
539
|
+
let &[nested] = track('nested-class');
|
|
540
|
+
<>
|
|
582
541
|
<p class={value}>{'Colored parent value'}</p>
|
|
583
542
|
<div>
|
|
584
|
-
let &[nested] = track('nested-class');
|
|
585
|
-
|
|
586
543
|
<p class={nested}>{'Colored nested value'}</p>
|
|
587
544
|
</div>
|
|
588
|
-
|
|
545
|
+
</>
|
|
589
546
|
}
|
|
590
547
|
|
|
591
548
|
const { body } = await render(Basic);
|
|
@@ -598,12 +555,10 @@ describe('basic server > attribute rendering', () => {
|
|
|
598
555
|
});
|
|
599
556
|
|
|
600
557
|
it('handles boolean attributes with no prop value provides', async () => {
|
|
601
|
-
function Basic() {
|
|
602
|
-
|
|
603
|
-
<
|
|
604
|
-
|
|
605
|
-
</div>
|
|
606
|
-
</>;
|
|
558
|
+
function Basic() @{
|
|
559
|
+
<div class="container">
|
|
560
|
+
<input type="checkbox" checked />
|
|
561
|
+
</div>
|
|
607
562
|
}
|
|
608
563
|
|
|
609
564
|
const { body } = await render(Basic);
|
|
@@ -611,15 +566,15 @@ describe('basic server > attribute rendering', () => {
|
|
|
611
566
|
});
|
|
612
567
|
|
|
613
568
|
it('handles boolean props correctly', async () => {
|
|
614
|
-
function Basic() {
|
|
615
|
-
|
|
569
|
+
function Basic() @{
|
|
570
|
+
<>
|
|
616
571
|
<div data-disabled />
|
|
617
572
|
<Child isDisabled />
|
|
618
|
-
|
|
573
|
+
</>
|
|
619
574
|
}
|
|
620
575
|
|
|
621
|
-
function Child({ isDisabled }: { isDisabled: boolean }) {
|
|
622
|
-
|
|
576
|
+
function Child({ isDisabled }: { isDisabled: boolean }) @{
|
|
577
|
+
<input disabled={isDisabled} />
|
|
623
578
|
}
|
|
624
579
|
|
|
625
580
|
const { body } = await render(Basic);
|