1
1
<script >
2
- import { onDestroy } from ' svelte'
2
+ import { onMount , onDestroy } from ' svelte'
3
3
import { tweened } from ' svelte/motion'
4
4
import { linear } from ' svelte/easing'
5
5
import { toast } from ' ./stores.js'
@@ -25,7 +25,7 @@ $: if (next !== item.next) {
25
25
}
26
26
27
27
const pause = () => {
28
- if (item . pausable && ! paused && $progress !== next) {
28
+ if (! paused && $progress !== next) {
29
29
progress .set ($progress, { duration: 0 })
30
30
paused = true
31
31
}
@@ -51,14 +51,32 @@ $: if (typeof item.progress !== 'undefined') {
51
51
item .next = item .progress
52
52
}
53
53
54
+ const handler = () => (document .hidden ? pause () : resume ())
55
+ const listener = (add ) => {
56
+ const { hidden , addEventListener , removeEventListener } = document
57
+ if (typeof hidden === ' undefined' ) return
58
+ const name = ' visibilitychange'
59
+ add ? addEventListener (name, handler) : removeEventListener (name, handler)
60
+ return true
61
+ }
62
+ onMount (() => listener (true ) && handler ())
63
+
54
64
onDestroy (() => {
55
65
if (typeof item .onpop === ' function' ) {
56
66
item .onpop (item .id )
57
67
}
68
+ listener (false )
58
69
})
59
70
</script >
60
71
61
- <div class ="_toastItem" class:pe ={item .pausable } on:mouseenter ={pause } on:mouseleave ={resume }>
72
+ <div
73
+ class =" _toastItem"
74
+ class:pe ={item .pausable }
75
+ on:mouseenter ={() => {
76
+ if (item .pausable ) pause ()
77
+ }}
78
+ on:mouseleave ={resume }
79
+ >
62
80
<div role ="status" class ="_toastMsg" class:pe ={item .component }>
63
81
{#if item .component }
64
82
<svelte:component this ={item .component .src } {...componentProps } />
0 commit comments