<svelte:options runes={true} /> <script lang="ts"> import {OpenInNewWindow} from "radix-icons-svelte"; import {quintInOut} from "svelte/easing"; import { slide } from "svelte/transition"; let {service} = $props(); let hover = $state({ title: false, link: false, ext: false }) </script> <div class="flex flex-col border-t-4 rounded-xl bg-black/55 border-maintenance p-4 gap-y-2 w-[30rem] h-48"> <div class="flex flex-row justify-between pb-4"> <div class="flex flex-row gap-1 items-center" on:mouseover={() => hover.title = true} on:mouseleave={() => hover.title = false}> {#if service.icon} <img width="24px" class="h-6 w-6 cursor-pointer" src={service.icon} alt="{service.name} Logo"> {:else} {/if} <a href={service.href} class="text-accent font-bold {hover.title ? 'text-primary': 'text-secondary'}">{service.name}</a> {#if hover.title} <div transition:slide={{ delay: 100, duration: 200, easing: quintInOut, axis: 'x' }} class="grid items-center"> <OpenInNewWindow color={ hover.title ? "hsl(var(--primary))" : "hsl(var(--secondary)"} class="self-center"/> </div> {/if} </div> <h1 class="border-b-2 rounded-md text-sm text-center w-16 text-maintenance border-maintenance">Loading</h1> </div> <p class="text-sm text-center text-accent text-wrap">{service.desc}</p> <p class="text-sm text-center font-bold text-destructive">{service.warn}</p> <div class="grid {service.extLink ? 'grid-cols-2' : 'grid-cols-1'} justify-items-center mt-auto"> <a class="flex flex-row text-sm border-x-2 rounded-md px-2 text-accent hover:border-primary hover:text-primary" href={service.href} on:mouseover={() => hover.link = true} on:mouseleave={() => hover.link = false} > Open {#if hover.link} <div transition:slide={{ delay: 100, duration: 200, easing: quintInOut, axis: 'x' }} class="pl-1 pr-0 grid items-center"> <OpenInNewWindow color={ hover.link ? "hsl(var(--primary))" : "hsl(var(--secondary)"} class="self-center"/> </div> {/if} </a> {#if service.extLink} <a class="flex flex-row text-sm border-x-2 rounded-md px-2 text-accent hover:border-primary hover:text-primary" href={service.extLink} on:mouseover={() => hover.ext = true} on:mouseleave={() => hover.ext = false} > Official Site {#if hover.ext} <div transition:slide={{ delay: 100, duration: 200, easing: quintInOut, axis: 'x' }} class="pl-1 pr-0 grid items-center"> <OpenInNewWindow color={ hover.ext ? "hsl(var(--primary))" : "hsl(var(--secondary)"} class="self-center"/> </div> {/if} </a> {/if} </div> </div>