-
Notifications
You must be signed in to change notification settings - Fork 1
/
TrackToggle.svelte
60 lines (50 loc) · 1.23 KB
/
TrackToggle.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
<!--
Copyright © 2022 The Radicle Design System Contributors
This file is part of radicle-design-system, distributed under the GPLv3
with Radicle Linking Exception. For full terms see the included
LICENSE file.
-->
<script lang="ts">
import { createEventDispatcher } from "svelte";
import Button from "./Button.svelte";
import NetworkIcon from "./icons/Network.svelte";
export let disabled: boolean = false;
export let tracking: boolean = false;
export let style: string | undefined = undefined;
let hovering: boolean = false;
let variant: "primary" | "outline";
let title: string;
const dispatch = createEventDispatcher();
const click = () => {
if (disabled) {
return;
}
tracking = !tracking;
dispatch(tracking ? "track" : "untrack");
};
const mouseenter = () => {
hovering = true;
};
const mouseleave = () => {
hovering = false;
};
$: {
if (tracking) {
variant = "outline";
title = hovering ? "Untrack" : "Tracking";
} else {
variant = "primary";
title = "Track";
}
}
</script>
<Button
{disabled}
{style}
{variant}
icon={NetworkIcon}
on:click={click}
on:mouseenter={mouseenter}
on:mouseleave={mouseleave}>
{title}
</Button>