<script lang="ts"> | |
import ThumbDownActive from "./ThumbDownActive.svelte"; | |
import ThumbDownDefault from "./ThumbDownDefault.svelte"; | |
import ThumbUpActive from "./ThumbUpActive.svelte"; | |
import ThumbUpDefault from "./ThumbUpDefault.svelte"; | |
export let handle_action: (selected: string | null) => void; | |
export let padded = false; | |
export let position: "right" | "left" = "left"; | |
let selected: "like" | "dislike" | null = null; | |
</script> | |
<button | |
on:click={() => { | |
selected = "dislike"; | |
handle_action(selected); | |
}} | |
aria-label={selected === "dislike" ? "clicked dislike" : "dislike"} | |
class:padded | |
class:selected={selected === "dislike"} | |
class="dislike-button {position}" | |
> | |
{#if selected === "dislike"} | |
<ThumbDownActive /> | |
{:else} | |
<ThumbDownDefault /> | |
{/if} | |
</button> | |
<button | |
class="like-button" | |
class:padded | |
on:click={() => { | |
selected = "like"; | |
handle_action(selected); | |
}} | |
aria-label={selected === "like" ? "clicked like" : "like"} | |
class:selected={selected === "like"} | |
> | |
{#if selected === "like"} | |
<ThumbUpActive /> | |
{:else} | |
<ThumbUpDefault /> | |
{/if} | |
</button> | |
<style> | |
button { | |
cursor: pointer; | |
color: var(--body-text-color-subdued); | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} | |
button:hover, | |
button:focus { | |
color: var(--body-text-color); | |
} | |
.selected, | |
.selected:focus, | |
.selected:hover { | |
color: var(--color-accent); | |
} | |
</style> | |