Skip to content

Commit dbf0f6a

Browse files
committed
play transitions in slots - fixes sveltejs#2303
1 parent d1536b2 commit dbf0f6a

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

src/compile/render-dom/wrappers/Slot.ts

+12
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ export default class SlotWrapper extends Wrapper {
4242
});
4343

4444
block.add_dependencies(this.dependencies);
45+
46+
// we have to do this, just in case
47+
block.add_intro();
48+
block.add_outro();
4549
}
4650

4751
render(
@@ -137,6 +141,14 @@ export default class SlotWrapper extends Wrapper {
137141
}
138142
`);
139143

144+
block.builders.intro.add_line(
145+
`if (${slot} && ${slot}.i) ${slot}.i(#local);`
146+
);
147+
148+
block.builders.outro.add_line(
149+
`if (${slot} && ${slot}.o) ${slot}.o(#local);`
150+
);
151+
140152
let update_conditions = [...this.dependencies].map(name => `changed.${name}`).join(' || ');
141153
if (this.dependencies.size > 1) update_conditions = `(${update_conditions})`;
142154

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export let visible;
3+
</script>
4+
5+
<div>
6+
{#if visible}
7+
<slot/>
8+
{/if}
9+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
export default {
2+
props: {
3+
visible: false
4+
},
5+
6+
html: `
7+
<div></div>
8+
`,
9+
10+
test({ assert, component, target, window, raf }) {
11+
component.visible = true;
12+
const p = target.querySelector('p');
13+
assert.equal(p.foo, 0);
14+
15+
raf.tick(50);
16+
assert.equal(p.foo, 0.5);
17+
18+
component.visible = false;
19+
20+
raf.tick(75);
21+
assert.equal(p.foo, 0.25);
22+
23+
raf.tick(100);
24+
assert.equal(p.foo, 0);
25+
}
26+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<script>
2+
import Nested from './Nested.svelte';
3+
4+
export let visible;
5+
6+
function foo(node, params) {
7+
return {
8+
duration: 100,
9+
tick: t => {
10+
node.foo = t;
11+
}
12+
};
13+
}
14+
</script>
15+
16+
<Nested {visible}>
17+
<p transition:foo>slotted</p>
18+
</Nested>

0 commit comments

Comments
 (0)