cobalt / web /src /components /about /AboutSupport.svelte
playingapi's picture
Upload 376 files
43a06dc verified
<script lang="ts">
import { t } from "$lib/i18n/translations";
import { openURL } from "$lib/download";
import IconExternalLink from "@tabler/icons-svelte/IconExternalLink.svelte";
import IconBrandGithub from "@tabler/icons-svelte/IconBrandGithub.svelte";
import IconBrandTwitter from "@tabler/icons-svelte/IconBrandTwitter.svelte";
import IconBrandDiscord from "@tabler/icons-svelte/IconBrandDiscord.svelte";
import IconBrandTelegram from "@tabler/icons-svelte/IconBrandTelegram.svelte";
import IconBrandBluesky from "@tabler/icons-svelte/IconBrandBluesky.svelte";
const platformIcons = {
github: {
icon: IconBrandGithub,
color: "#8842cd",
},
discord: {
icon: IconBrandDiscord,
color: "#5865f2",
},
twitter: {
icon: IconBrandTwitter,
color: "#1da1f2",
},
telegram: {
icon: IconBrandTelegram,
color: "#1c9efb",
},
bluesky: {
icon: IconBrandBluesky,
color: "#0a78ff",
},
};
export let platform: keyof typeof platformIcons;
export let externalLink: string;
</script>
<button
class="support-card"
role="link"
on:click={() => {
openURL(externalLink);
}}
>
<div class="support-card-header">
<div
class="icon-holder support-icon-{platform}"
style="
background-color: {platformIcons[platform].color};
box-shadow: 0 0 90px 10px {platformIcons[platform].color};
"
>
<svelte:component this={platformIcons[platform].icon} />
</div>
<div class="support-card-title">
{platform}
<IconExternalLink />
</div>
</div>
<div class="subtext support-card-description">
{$t(`about.support.${platform}`)}
</div>
</button>
<style>
.support-card {
padding: var(--padding);
gap: 4px;
height: fit-content;
text-align: start;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
overflow: hidden;
}
.support-card-header {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.icon-holder {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--gray);
padding: 4px;
border-radius: 5px;
}
.icon-holder :global(svg) {
width: 20px;
height: 20px;
stroke-width: 1.5px;
stroke: var(--white);
}
.support-card-title {
display: flex;
flex-direction: row;
align-items: center;
gap: 6px;
}
.support-card-title :global(svg) {
stroke: var(--secondary);
opacity: 0.5;
width: 14px;
height: 14px;
}
.support-card-description {
padding: 0;
}
</style>