Skip to content

Commit 0cc2a5b

Browse files
committed
make test more selfcontained, test outro delay aswell and add functionality for that in animation-helpers
1 parent 63ef5bd commit 0cc2a5b

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

packages/svelte/tests/animation-helpers.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class Animation {
3535
#target;
3636
#keyframes;
3737
#duration;
38+
#delay;
3839

3940
#offset = raf.time;
4041

@@ -47,12 +48,13 @@ class Animation {
4748
/**
4849
* @param {HTMLElement} target
4950
* @param {Keyframe[]} keyframes
50-
* @param {{ duration: number }} options // TODO add delay
51+
* @param {{ duration: number, delay: number }} options
5152
*/
52-
constructor(target, keyframes, { duration }) {
53+
constructor(target, keyframes, { duration, delay }) {
5354
this.#target = target;
5455
this.#keyframes = keyframes;
5556
this.#duration = duration;
57+
this.#delay = delay ?? 0;
5658

5759
// Promise-like semantics, but call callbacks immediately on raf.tick
5860
this.finished = {
@@ -73,7 +75,9 @@ class Animation {
7375
}
7476

7577
_update() {
76-
this.currentTime = raf.time - this.#offset;
78+
this.currentTime = raf.time - this.#offset - this.#delay;
79+
if (this.currentTime < 0) return;
80+
7781
const target_frame = this.currentTime / this.#duration;
7882
this.#apply_keyframe(target_frame);
7983

packages/svelte/tests/runtime-runes/samples/transition-delayed/_config.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,19 @@ export default test({
3030
'<button>toggle</button><p style="opacity: 0.5;">delayed fade</p>'
3131
);
3232

33-
raf.tick(201);
33+
raf.tick(200);
3434
assert.htmlEqual(target.innerHTML, '<button>toggle</button><p style="">delayed fade</p>');
3535

36-
// TODO this doesn't work because for some reason opacity of the element is always 0
3736
// out
38-
// btn?.click();
39-
// flushSync();
40-
// raf.tick(275);
41-
// assert.htmlEqual(target.innerHTML, '<button>toggle</button><p style="">delayed fade</p>');
37+
btn?.click();
38+
flushSync();
39+
raf.tick(275);
40+
assert.htmlEqual(target.innerHTML, '<button>toggle</button><p style="">delayed fade</p>');
4241

43-
// raf.tick(350);
44-
// assert.htmlEqual(
45-
// target.innerHTML,
46-
// '<button>toggle</button><p style="opacity: 0.5;">delayed fade</p>'
47-
// );
42+
raf.tick(350);
43+
assert.htmlEqual(
44+
target.innerHTML,
45+
'<button>toggle</button><p style="opacity: 0.5;">delayed fade</p>'
46+
);
4847
}
4948
});
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
<script>
2-
import { fade } from 'svelte/transition';
2+
function fade(_) {
3+
return {
4+
delay: 100,
5+
duration: 100,
6+
css: (t) => `opacity: ${t}`
7+
};
8+
}
39
410
let visible = $state(false);
511
</script>
612

713
<button onclick={() => (visible = !visible)}>toggle</button>
814

915
{#if visible}
10-
<!-- explicit opacity necessary for some reason, else it's calculated as 0 -->
11-
<p transition:fade={{ delay: 100, duration: 100 }} style="opacity: 1">delayed fade</p>
16+
<p transition:fade>delayed fade</p>
1217
{/if}

0 commit comments

Comments
 (0)