mirror of https://github.com/sveltejs/svelte
[fix] slot data for cancelled transition (#6314)
parent
588b37f810
commit
d75ed6a003
@ -0,0 +1,19 @@
|
||||
<script>
|
||||
export let visible;
|
||||
export let slotProps;
|
||||
|
||||
function fade(node) {
|
||||
return {
|
||||
duration: 100,
|
||||
tick: t => {
|
||||
node.foo = t;
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if visible}
|
||||
<div transition:fade>
|
||||
<slot {slotProps}></slot>
|
||||
</div>
|
||||
{/if}
|
@ -0,0 +1,35 @@
|
||||
// updated props in the middle of transitions
|
||||
// and cancelled the transition halfway
|
||||
export default {
|
||||
html: `
|
||||
<div>outside Foo Foo Foo</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
`,
|
||||
props: {
|
||||
props: 'Foo'
|
||||
},
|
||||
|
||||
async test({ assert, component, target, window, raf }) {
|
||||
await component.hide();
|
||||
const [, div] = target.querySelectorAll('div');
|
||||
|
||||
raf.tick(50);
|
||||
assert.equal(div.foo, 0.5);
|
||||
|
||||
component.props = 'Bar';
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
`);
|
||||
|
||||
await component.show();
|
||||
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Bar Bar Bar</div>
|
||||
`);
|
||||
|
||||
raf.tick(100);
|
||||
assert.equal(div.foo, 1);
|
||||
}
|
||||
};
|
@ -0,0 +1,22 @@
|
||||
<script>
|
||||
import Nested from './Nested.svelte';
|
||||
|
||||
let visible = true;
|
||||
let state = 'Foo';
|
||||
let slotProps = 'Foo';
|
||||
export let props;
|
||||
|
||||
export function show() {
|
||||
visible = true;
|
||||
}
|
||||
export function hide() {
|
||||
visible = false;
|
||||
state = 'Bar';
|
||||
slotProps = 'Bar';
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>outside {state} {props} {slotProps}</div>
|
||||
<Nested {visible} {slotProps} let:slotProps>
|
||||
inside {state} {props} {slotProps}
|
||||
</Nested>
|
@ -0,0 +1,19 @@
|
||||
<script>
|
||||
export let visible;
|
||||
export let slotProps;
|
||||
|
||||
function fade(node) {
|
||||
return {
|
||||
duration: 100,
|
||||
tick: t => {
|
||||
node.foo = t;
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if visible}
|
||||
<div transition:fade>
|
||||
<slot {slotProps}></slot>
|
||||
</div>
|
||||
{/if}
|
@ -0,0 +1,40 @@
|
||||
// updated props in the middle of transitions
|
||||
// and cancelled the transition halfway
|
||||
// + spreaded props + overflow context
|
||||
|
||||
export default {
|
||||
html: `
|
||||
<div>outside Foo Foo Foo</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
0
|
||||
`,
|
||||
props: {
|
||||
props: 'Foo'
|
||||
},
|
||||
|
||||
async test({ assert, component, target, window, raf }) {
|
||||
await component.hide();
|
||||
const [, div] = target.querySelectorAll('div');
|
||||
|
||||
raf.tick(50);
|
||||
assert.equal(div.foo, 0.5);
|
||||
|
||||
component.props = 'Bar';
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
0
|
||||
`);
|
||||
|
||||
await component.show();
|
||||
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Bar Bar Bar</div>
|
||||
0
|
||||
`);
|
||||
|
||||
raf.tick(100);
|
||||
assert.equal(div.foo, 1);
|
||||
}
|
||||
};
|
@ -0,0 +1,27 @@
|
||||
<script>
|
||||
import Nested from './Nested.svelte';
|
||||
|
||||
export let a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0, a12=0,a13=0,a14=0,a15=0,a16=0,a17=0,a18=0,a19=0,a20=0,a21=0, a22=0,a23=0,a24=0,a25=0,a26=0,a27=0,a28=0,a29=0,a30=0,a31=0,a32=0,a33=0;
|
||||
|
||||
let visible = true;
|
||||
let state = 'Foo';
|
||||
let slotProps = 'Foo';
|
||||
export let props;
|
||||
|
||||
export function show() {
|
||||
visible = true;
|
||||
}
|
||||
export function hide() {
|
||||
visible = false;
|
||||
state = 'Bar';
|
||||
slotProps = 'Bar';
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>outside {state} {props} {slotProps}</div>
|
||||
|
||||
<Nested {visible} {slotProps} let:slotProps>
|
||||
inside {state} {props} {slotProps}
|
||||
</Nested>
|
||||
|
||||
{a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26+a27+a28+a29+a30+a31+a32+a33}
|
@ -0,0 +1,19 @@
|
||||
<script>
|
||||
export let visible;
|
||||
export let slotProps;
|
||||
|
||||
function fade(node) {
|
||||
return {
|
||||
duration: 100,
|
||||
tick: t => {
|
||||
node.foo = t;
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if visible}
|
||||
<div transition:fade>
|
||||
<slot {...slotProps}></slot>
|
||||
</div>
|
||||
{/if}
|
@ -0,0 +1,19 @@
|
||||
<script>
|
||||
export let visible;
|
||||
let slotProps = { slotProps: 'XXX' };
|
||||
|
||||
function fade(node) {
|
||||
return {
|
||||
duration: 100,
|
||||
tick: t => {
|
||||
node.foo = t;
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if visible}
|
||||
<div transition:fade>
|
||||
<slot {...slotProps}></slot>
|
||||
</div>
|
||||
{/if}
|
@ -0,0 +1,40 @@
|
||||
// updated props in the middle of transitions
|
||||
// and cancelled the transition halfway
|
||||
// with spreaded props
|
||||
|
||||
export default {
|
||||
html: `
|
||||
<div>outside Foo Foo Foo</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
<div>inside Foo Foo XXX</div>
|
||||
`,
|
||||
props: {
|
||||
props: 'Foo'
|
||||
},
|
||||
|
||||
async test({ assert, component, target, window, raf }) {
|
||||
await component.hide();
|
||||
const [, div] = target.querySelectorAll('div');
|
||||
|
||||
raf.tick(50);
|
||||
assert.equal(div.foo, 0.5);
|
||||
|
||||
component.props = 'Bar';
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
<div>inside Foo Foo XXX</div>
|
||||
`);
|
||||
|
||||
await component.show();
|
||||
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Bar Bar Bar</div>
|
||||
<div>inside Bar Bar XXX</div>
|
||||
`);
|
||||
|
||||
raf.tick(100);
|
||||
assert.equal(div.foo, 1);
|
||||
}
|
||||
};
|
@ -0,0 +1,26 @@
|
||||
<script>
|
||||
import Nested from './Nested.svelte';
|
||||
import Nested2 from './Nested2.svelte';
|
||||
|
||||
let visible = true;
|
||||
let state = 'Foo';
|
||||
let slotProps = { slotProps: 'Foo' };
|
||||
export let props;
|
||||
|
||||
export function show() {
|
||||
visible = true;
|
||||
}
|
||||
export function hide() {
|
||||
visible = false;
|
||||
state = 'Bar';
|
||||
slotProps = { slotProps: 'Bar' };
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>outside {state} {props} {slotProps.slotProps}</div>
|
||||
<Nested {visible} {slotProps} let:slotProps>
|
||||
inside {state} {props} {slotProps}
|
||||
</Nested>
|
||||
<Nested2 {visible} let:slotProps>
|
||||
inside {state} {props} {slotProps}
|
||||
</Nested2>
|
@ -0,0 +1,19 @@
|
||||
<script>
|
||||
export let visible;
|
||||
export let slotProps;
|
||||
|
||||
function fade(node) {
|
||||
return {
|
||||
duration: 100,
|
||||
tick: t => {
|
||||
node.foo = t;
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if visible}
|
||||
<div transition:fade>
|
||||
<slot {...slotProps}></slot>
|
||||
</div>
|
||||
{/if}
|
@ -0,0 +1,40 @@
|
||||
// updated props in the middle of transitions
|
||||
// and cancelled the transition halfway
|
||||
// + spreaded props + overflow context
|
||||
|
||||
export default {
|
||||
html: `
|
||||
<div>outside Foo Foo Foo</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
0
|
||||
`,
|
||||
props: {
|
||||
props: 'Foo'
|
||||
},
|
||||
|
||||
async test({ assert, component, target, window, raf }) {
|
||||
await component.hide();
|
||||
const [, div] = target.querySelectorAll('div');
|
||||
|
||||
raf.tick(50);
|
||||
assert.equal(div.foo, 0.5);
|
||||
|
||||
component.props = 'Bar';
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Foo Foo Foo</div>
|
||||
0
|
||||
`);
|
||||
|
||||
await component.show();
|
||||
|
||||
assert.htmlEqual(target.innerHTML, `
|
||||
<div>outside Bar Bar Bar</div>
|
||||
<div>inside Bar Bar Bar</div>
|
||||
0
|
||||
`);
|
||||
|
||||
raf.tick(100);
|
||||
assert.equal(div.foo, 1);
|
||||
}
|
||||
};
|
@ -0,0 +1,27 @@
|
||||
<script>
|
||||
import Nested from './Nested.svelte';
|
||||
|
||||
export let a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0, a12=0,a13=0,a14=0,a15=0,a16=0,a17=0,a18=0,a19=0,a20=0,a21=0, a22=0,a23=0,a24=0,a25=0,a26=0,a27=0,a28=0,a29=0,a30=0,a31=0,a32=0,a33=0;
|
||||
|
||||
let visible = true;
|
||||
let state = 'Foo';
|
||||
let slotProps = { slotProps: 'Foo' };
|
||||
export let props;
|
||||
|
||||
export function show() {
|
||||
visible = true;
|
||||
}
|
||||
export function hide() {
|
||||
visible = false;
|
||||
state = 'Bar';
|
||||
slotProps = { slotProps: 'Bar' };
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>outside {state} {props} {slotProps.slotProps}</div>
|
||||
|
||||
<Nested {visible} {slotProps} let:slotProps>
|
||||
inside {state} {props} {slotProps}
|
||||
</Nested>
|
||||
|
||||
{a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26+a27+a28+a29+a30+a31+a32+a33}
|
Loading…
Reference in new issue