-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathMessage.svelte
89 lines (79 loc) · 1.77 KB
/
Message.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<script>
import { createEventDispatcher } from 'svelte'
import { fade } from 'svelte/transition'
import Icon from './Icon.svelte'
export let type = ''
export let active = true
export let title = ''
export let showClose = true
export let autoClose = false
export let duration = 5000
export let size = ''
export let iconSize = ''
export let ariaCloseLabel = 'delete'
let icon
const dispatch = createEventDispatcher()
if (autoClose) {
setTimeout(() => {
close = true
}, duration)
}
$: newIconSize = iconSize || size || 'is-large'
$: {
switch (type) {
case 'is-info':
icon = 'info-circle'
break
case 'is-success':
icon = 'check-circle'
break
case 'is-warning':
icon = 'exclamation-triangle'
break
case 'is-danger':
icon = 'exclamation-circle'
break
default:
icon = null
}
}
function close() {
active = false
dispatch('close', active)
}
</script>
<style>
.message-header {
justify-content: space-between;
}
.message .media {
padding-top: 0;
border: 0;
}
</style>
{#if active}
<article class="message {type} {size}" transition:fade|local>
{#if title || showClose}
<div class="message-header">
{#if title}
<p>{title}</p>
{/if}
{#if showClose}
<button class="delete" aria-label={ariaCloseLabel} on:click={close} />
{/if}
</div>
{/if}
<section class="message-body">
<div class="media">
{#if icon}
<div class="media-left">
<Icon {icon} size={newIconSize} />
</div>
{/if}
<div class="media-content">
<slot />
</div>
</div>
</section>
</article>
{/if}