ripple 0.3.71 → 0.3.74
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 +75 -0
- package/package.json +3 -3
- package/src/jsx-runtime.d.ts +2 -8
- package/src/runtime/index-client.js +3 -13
- package/src/runtime/internal/client/blocks.js +3 -25
- package/src/runtime/internal/client/for.js +80 -5
- package/src/runtime/internal/client/index.js +0 -2
- package/src/runtime/internal/client/types.d.ts +0 -10
- 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 +59 -71
- package/tests/client/basic/basic.components.test.tsrx +196 -222
- package/tests/client/basic/basic.errors.test.tsrx +72 -78
- 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.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 +364 -296
- 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 +41 -44
- 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 +491 -437
- 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 +62 -69
- package/tests/client/date.test.tsrx +83 -83
- package/tests/client/dynamic-elements.test.tsrx +227 -283
- package/tests/client/events.test.tsrx +252 -266
- package/tests/client/for.test.tsrx +120 -127
- package/tests/client/head.test.tsrx +40 -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 +195 -215
- 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 +290 -371
- 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 +396 -325
- 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 -286
- 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 +120 -167
- package/tests/server/basic.components.test.tsrx +163 -197
- package/tests/server/basic.test.tsrx +298 -220
- 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 +103 -135
- package/tests/server/for.test.tsrx +115 -84
- package/tests/server/head.test.tsrx +31 -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 +58 -66
- 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 +1 -0
- 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,15 +87,13 @@ 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
|
-
|
|
94
|
-
|
|
90
|
+
function App() @{
|
|
91
|
+
<>
|
|
92
|
+
<>
|
|
95
93
|
<div class="card">
|
|
96
|
-
<h2>
|
|
97
|
-
{'tsx block'}
|
|
98
|
-
</h2>
|
|
94
|
+
<h2>{'tsx block'}</h2>
|
|
99
95
|
</div>
|
|
100
|
-
|
|
96
|
+
</>
|
|
101
97
|
<>
|
|
102
98
|
<div class="card">
|
|
103
99
|
<h2>{'fragment shorthand'}</h2>
|
|
@@ -112,7 +108,7 @@ describe('basic server > attribute rendering', () => {
|
|
|
112
108
|
color: red;
|
|
113
109
|
}
|
|
114
110
|
</style>
|
|
115
|
-
|
|
111
|
+
</>
|
|
116
112
|
}
|
|
117
113
|
|
|
118
114
|
const { body } = await render(App);
|
|
@@ -138,16 +134,16 @@ describe('basic server > attribute rendering', () => {
|
|
|
138
134
|
});
|
|
139
135
|
|
|
140
136
|
it('render dynamic class object', async () => {
|
|
141
|
-
function Basic() {
|
|
142
|
-
|
|
143
|
-
|
|
137
|
+
function Basic() @{
|
|
138
|
+
let &[active] = track(false);
|
|
139
|
+
<>
|
|
144
140
|
<div class={{ active: active, inactive: !active }}>{'Dynamic Class'}</div>
|
|
145
141
|
<style>
|
|
146
142
|
.active {
|
|
147
143
|
color: green;
|
|
148
144
|
}
|
|
149
145
|
</style>
|
|
150
|
-
|
|
146
|
+
</>
|
|
151
147
|
}
|
|
152
148
|
|
|
153
149
|
const { body } = await render(Basic);
|
|
@@ -165,9 +161,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
165
161
|
it(
|
|
166
162
|
'applies scoped ripple class to multiple elements with dynamic class expressions',
|
|
167
163
|
async () => {
|
|
168
|
-
function Basic() {
|
|
169
|
-
|
|
170
|
-
|
|
164
|
+
function Basic() @{
|
|
165
|
+
let &[selected] = track(1);
|
|
166
|
+
<>
|
|
171
167
|
<div class={selected === 0 ? 'selected' : ''}>{`div 1`}</div>
|
|
172
168
|
<div class={selected === 0 ? 'selected' : ''}>{`div 2`}</div>
|
|
173
169
|
<style>
|
|
@@ -179,7 +175,7 @@ describe('basic server > attribute rendering', () => {
|
|
|
179
175
|
background: indigo;
|
|
180
176
|
}
|
|
181
177
|
</style>
|
|
182
|
-
|
|
178
|
+
</>
|
|
183
179
|
}
|
|
184
180
|
|
|
185
181
|
const { body } = await render(Basic);
|
|
@@ -196,11 +192,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
196
192
|
);
|
|
197
193
|
|
|
198
194
|
it('render dynamic id attribute', async () => {
|
|
199
|
-
function Basic() {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
<div id={`item-${count}`}>{'Dynamic ID'}</div>
|
|
203
|
-
</>;
|
|
195
|
+
function Basic() @{
|
|
196
|
+
let &[count] = track(0);
|
|
197
|
+
<div id={`item-${count}`}>{'Dynamic ID'}</div>
|
|
204
198
|
}
|
|
205
199
|
|
|
206
200
|
const { body } = await render(Basic);
|
|
@@ -212,11 +206,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
212
206
|
});
|
|
213
207
|
|
|
214
208
|
it('render dynamic style attribute', async () => {
|
|
215
|
-
function Basic() {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
<div style={`color: ${color}; font-weight: bold;`}>{'Dynamic Style'}</div>
|
|
219
|
-
</>;
|
|
209
|
+
function Basic() @{
|
|
210
|
+
let &[color] = track('red');
|
|
211
|
+
<div style={`color: ${color}; font-weight: bold;`}>{'Dynamic Style'}</div>
|
|
220
212
|
}
|
|
221
213
|
|
|
222
214
|
const { body } = await render(Basic);
|
|
@@ -229,11 +221,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
229
221
|
});
|
|
230
222
|
|
|
231
223
|
it('render style attribute as dynamic object', async () => {
|
|
232
|
-
function Basic() {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
<div style={{ color: color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>
|
|
236
|
-
</>;
|
|
224
|
+
function Basic() @{
|
|
225
|
+
let &[color] = track('red');
|
|
226
|
+
<div style={{ color: color, fontWeight: 'bold' }}>{'Dynamic Style'}</div>
|
|
237
227
|
}
|
|
238
228
|
|
|
239
229
|
const { body } = await render(Basic);
|
|
@@ -246,11 +236,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
246
236
|
});
|
|
247
237
|
|
|
248
238
|
it('render tracked variable as style attribute', async () => {
|
|
249
|
-
function Basic() {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
<div {style}>{'Dynamic Style'}</div>
|
|
253
|
-
</>;
|
|
239
|
+
function Basic() @{
|
|
240
|
+
let &[style] = track({ color: 'red', fontWeight: 'bold' });
|
|
241
|
+
<div {style}>{'Dynamic Style'}</div>
|
|
254
242
|
}
|
|
255
243
|
|
|
256
244
|
const { body } = await render(Basic);
|
|
@@ -263,14 +251,12 @@ describe('basic server > attribute rendering', () => {
|
|
|
263
251
|
});
|
|
264
252
|
|
|
265
253
|
it('render tracked object as style attribute', async () => {
|
|
266
|
-
function Basic() {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
<div style={{ color: style.color, fontWeight: style.fontWeight }}>{'Dynamic Style'}</div>
|
|
273
|
-
</>;
|
|
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>
|
|
274
260
|
}
|
|
275
261
|
|
|
276
262
|
const { body } = await render(Basic);
|
|
@@ -283,14 +269,12 @@ describe('basic server > attribute rendering', () => {
|
|
|
283
269
|
});
|
|
284
270
|
|
|
285
271
|
it('render spread attributes with style and class', async () => {
|
|
286
|
-
function Basic() {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
<div {...attributes}>{'Attributes with style and class'}</div>
|
|
293
|
-
</>;
|
|
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>
|
|
294
278
|
}
|
|
295
279
|
|
|
296
280
|
const { body } = await render(Basic);
|
|
@@ -306,11 +290,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
306
290
|
});
|
|
307
291
|
|
|
308
292
|
it('renders host innerHTML as content instead of an attribute', async () => {
|
|
309
|
-
function Basic() {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
<code innerHTML={html} />
|
|
313
|
-
</>;
|
|
293
|
+
function Basic() @{
|
|
294
|
+
const html = '<span>Direct HTML</span>';
|
|
295
|
+
<code innerHTML={html} />
|
|
314
296
|
}
|
|
315
297
|
|
|
316
298
|
const { body } = await render(Basic);
|
|
@@ -323,11 +305,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
323
305
|
});
|
|
324
306
|
|
|
325
307
|
it('renders spread innerHTML as content instead of an attribute', async () => {
|
|
326
|
-
function Basic() {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
<code {...attributes} />
|
|
330
|
-
</>;
|
|
308
|
+
function Basic() @{
|
|
309
|
+
const attributes = { innerHTML: '<span>Spread HTML</span>' };
|
|
310
|
+
<code {...attributes} />
|
|
331
311
|
}
|
|
332
312
|
|
|
333
313
|
const { body } = await render(Basic);
|
|
@@ -340,11 +320,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
340
320
|
});
|
|
341
321
|
|
|
342
322
|
it('uses the last innerHTML value when spreads and direct props are mixed', async () => {
|
|
343
|
-
function Basic() {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
<code {...attributes} innerHTML="<em>Direct HTML</em>" />
|
|
347
|
-
</>;
|
|
323
|
+
function Basic() @{
|
|
324
|
+
const attributes = { innerHTML: '<span>Spread HTML</span>' };
|
|
325
|
+
<code {...attributes} innerHTML="<em>Direct HTML</em>" />
|
|
348
326
|
}
|
|
349
327
|
|
|
350
328
|
const { body } = await render(Basic);
|
|
@@ -356,13 +334,11 @@ describe('basic server > attribute rendering', () => {
|
|
|
356
334
|
});
|
|
357
335
|
|
|
358
336
|
it('render spread props without duplication', async () => {
|
|
359
|
-
function Basic() {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
<
|
|
363
|
-
|
|
364
|
-
</div>
|
|
365
|
-
</>;
|
|
337
|
+
function Basic() @{
|
|
338
|
+
const checkBoxProp = { name: 'car' };
|
|
339
|
+
<div>
|
|
340
|
+
<input {...checkBoxProp} type="checkbox" id="vehicle1" value="Bike" />
|
|
341
|
+
</div>
|
|
366
342
|
}
|
|
367
343
|
|
|
368
344
|
const { body } = await render(Basic);
|
|
@@ -386,12 +362,10 @@ describe('basic server > attribute rendering', () => {
|
|
|
386
362
|
});
|
|
387
363
|
|
|
388
364
|
it('render dynamic boolean attributes as false', async () => {
|
|
389
|
-
function Basic() {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
<input type="checkbox" {disabled} {checked} />
|
|
394
|
-
</>;
|
|
365
|
+
function Basic() @{
|
|
366
|
+
let &[disabled] = track(false);
|
|
367
|
+
let &[checked] = track(false);
|
|
368
|
+
<input type="checkbox" {disabled} {checked} />
|
|
395
369
|
}
|
|
396
370
|
|
|
397
371
|
const { body } = await render(Basic);
|
|
@@ -405,11 +379,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
405
379
|
});
|
|
406
380
|
|
|
407
381
|
it('render dynamic boolean attributes as false via spread', async () => {
|
|
408
|
-
function Basic() {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
<input type="checkbox" {...spread} />
|
|
412
|
-
</>;
|
|
382
|
+
function Basic() @{
|
|
383
|
+
const spread = { disabled: false, checked: false };
|
|
384
|
+
<input type="checkbox" {...spread} />
|
|
413
385
|
}
|
|
414
386
|
|
|
415
387
|
const { body } = await render(Basic);
|
|
@@ -423,12 +395,10 @@ describe('basic server > attribute rendering', () => {
|
|
|
423
395
|
});
|
|
424
396
|
|
|
425
397
|
it('render dynamic boolean attributes as true', async () => {
|
|
426
|
-
function Basic() {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
<input type="checkbox" {disabled} {checked} />
|
|
431
|
-
</>;
|
|
398
|
+
function Basic() @{
|
|
399
|
+
let &[disabled] = track(true);
|
|
400
|
+
let &[checked] = track(true);
|
|
401
|
+
<input type="checkbox" {disabled} {checked} />
|
|
432
402
|
}
|
|
433
403
|
|
|
434
404
|
const { body } = await render(Basic);
|
|
@@ -442,11 +412,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
442
412
|
});
|
|
443
413
|
|
|
444
414
|
it('render dynamic boolean attributes as true via spread', async () => {
|
|
445
|
-
function Basic() {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
<input type="checkbox" {...spread} />
|
|
449
|
-
</>;
|
|
415
|
+
function Basic() @{
|
|
416
|
+
const spread = { disabled: true, checked: true };
|
|
417
|
+
<input type="checkbox" {...spread} />
|
|
450
418
|
}
|
|
451
419
|
|
|
452
420
|
const { body } = await render(Basic);
|
|
@@ -460,11 +428,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
460
428
|
});
|
|
461
429
|
|
|
462
430
|
it('renders formnovalidate as a boolean attribute', async () => {
|
|
463
|
-
function Basic() {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
<button {formnovalidate}>{'Submit'}</button>
|
|
467
|
-
</>;
|
|
431
|
+
function Basic() @{
|
|
432
|
+
let &[formnovalidate] = track(true);
|
|
433
|
+
<button {formnovalidate}>{'Submit'}</button>
|
|
468
434
|
}
|
|
469
435
|
|
|
470
436
|
const { body } = await render(Basic);
|
|
@@ -478,11 +444,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
478
444
|
});
|
|
479
445
|
|
|
480
446
|
it('renders hidden as a boolean attribute when true', async () => {
|
|
481
|
-
function Basic() {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
<div {hidden}>{'Hidden content'}</div>
|
|
485
|
-
</>;
|
|
447
|
+
function Basic() @{
|
|
448
|
+
let &[hidden] = track(true);
|
|
449
|
+
<div {hidden}>{'Hidden content'}</div>
|
|
486
450
|
}
|
|
487
451
|
|
|
488
452
|
const { body } = await render(Basic);
|
|
@@ -496,11 +460,9 @@ describe('basic server > attribute rendering', () => {
|
|
|
496
460
|
});
|
|
497
461
|
|
|
498
462
|
it('does not render hidden when false', async () => {
|
|
499
|
-
function Basic() {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
<div {hidden}>{'Visible content'}</div>
|
|
503
|
-
</>;
|
|
463
|
+
function Basic() @{
|
|
464
|
+
let &[hidden] = track(false);
|
|
465
|
+
<div {hidden}>{'Visible content'}</div>
|
|
504
466
|
}
|
|
505
467
|
|
|
506
468
|
const { body } = await render(Basic);
|
|
@@ -513,14 +475,14 @@ describe('basic server > attribute rendering', () => {
|
|
|
513
475
|
});
|
|
514
476
|
|
|
515
477
|
it('render multiple dynamic attributes', async () => {
|
|
516
|
-
function Basic() {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
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>
|
|
524
486
|
}
|
|
525
487
|
|
|
526
488
|
const { body } = await render(Basic);
|
|
@@ -534,17 +496,13 @@ describe('basic server > attribute rendering', () => {
|
|
|
534
496
|
});
|
|
535
497
|
|
|
536
498
|
it('render conditional attributes', async () => {
|
|
537
|
-
function Basic() {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
>
|
|
545
|
-
{'Conditional Attributes'}
|
|
546
|
-
</div>
|
|
547
|
-
</>;
|
|
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>
|
|
548
506
|
}
|
|
549
507
|
|
|
550
508
|
const { body } = await render(Basic);
|
|
@@ -557,14 +515,12 @@ describe('basic server > attribute rendering', () => {
|
|
|
557
515
|
});
|
|
558
516
|
|
|
559
517
|
it('render spread attributes', async () => {
|
|
560
|
-
function Basic() {
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
<div {...attrs}>{'Spread Attributes'}</div>
|
|
567
|
-
</>;
|
|
518
|
+
function Basic() @{
|
|
519
|
+
let &[attrs] = track<TestAttributes>({
|
|
520
|
+
class: 'initial',
|
|
521
|
+
id: 'test-1',
|
|
522
|
+
});
|
|
523
|
+
<div {...attrs}>{'Spread Attributes'}</div>
|
|
568
524
|
}
|
|
569
525
|
|
|
570
526
|
const { body } = await render(Basic);
|
|
@@ -578,16 +534,15 @@ describe('basic server > attribute rendering', () => {
|
|
|
578
534
|
});
|
|
579
535
|
|
|
580
536
|
it('renders with reactive attributes with nested reactive attributes', async () => {
|
|
581
|
-
function Basic() {
|
|
582
|
-
|
|
583
|
-
|
|
537
|
+
function Basic() @{
|
|
538
|
+
let &[value] = track('parent-class');
|
|
539
|
+
let &[nested] = track('nested-class');
|
|
540
|
+
<>
|
|
584
541
|
<p class={value}>{'Colored parent value'}</p>
|
|
585
542
|
<div>
|
|
586
|
-
let &[nested] = track('nested-class');
|
|
587
|
-
|
|
588
543
|
<p class={nested}>{'Colored nested value'}</p>
|
|
589
544
|
</div>
|
|
590
|
-
|
|
545
|
+
</>
|
|
591
546
|
}
|
|
592
547
|
|
|
593
548
|
const { body } = await render(Basic);
|
|
@@ -600,12 +555,10 @@ describe('basic server > attribute rendering', () => {
|
|
|
600
555
|
});
|
|
601
556
|
|
|
602
557
|
it('handles boolean attributes with no prop value provides', async () => {
|
|
603
|
-
function Basic() {
|
|
604
|
-
|
|
605
|
-
<
|
|
606
|
-
|
|
607
|
-
</div>
|
|
608
|
-
</>;
|
|
558
|
+
function Basic() @{
|
|
559
|
+
<div class="container">
|
|
560
|
+
<input type="checkbox" checked />
|
|
561
|
+
</div>
|
|
609
562
|
}
|
|
610
563
|
|
|
611
564
|
const { body } = await render(Basic);
|
|
@@ -613,15 +566,15 @@ describe('basic server > attribute rendering', () => {
|
|
|
613
566
|
});
|
|
614
567
|
|
|
615
568
|
it('handles boolean props correctly', async () => {
|
|
616
|
-
function Basic() {
|
|
617
|
-
|
|
569
|
+
function Basic() @{
|
|
570
|
+
<>
|
|
618
571
|
<div data-disabled />
|
|
619
572
|
<Child isDisabled />
|
|
620
|
-
|
|
573
|
+
</>
|
|
621
574
|
}
|
|
622
575
|
|
|
623
|
-
function Child({ isDisabled }: { isDisabled: boolean }) {
|
|
624
|
-
|
|
576
|
+
function Child({ isDisabled }: { isDisabled: boolean }) @{
|
|
577
|
+
<input disabled={isDisabled} />
|
|
625
578
|
}
|
|
626
579
|
|
|
627
580
|
const { body } = await render(Basic);
|