<svelte:options runes={true} /> <script lang="ts"> import { OpenInNewWindow } from 'radix-icons-svelte'; import { quintInOut } from 'svelte/easing'; import { slide } from 'svelte/transition'; import type { Service } from '$lib/types/data-types'; let { service: Service } = $props(); let hover = $state({ title: false, link: false, ext: false }); </script> <div class="flex h-48 w-[30rem] flex-col gap-y-2 rounded-xl border-t-4 border-maintenance bg-black/55 p-4" > <div class="flex flex-row justify-between pb-4"> <div class="flex flex-row items-center gap-1" 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="font-bold text-accent {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="w-16 rounded-md border-b-2 border-maintenance text-center text-sm text-maintenance"> Loading </h1> </div> <p class="text-wrap text-center text-sm text-accent">{service.desc}</p> <p class="text-center text-sm font-bold text-destructive">{service.warn}</p> <div class="grid {service.extLink ? 'grid-cols-2' : 'grid-cols-1'} mt-auto justify-items-center"> <a class="flex flex-row rounded-md border-x-2 px-2 text-sm 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="grid items-center pl-1 pr-0" > <OpenInNewWindow color={hover.link ? 'hsl(var(--primary))' : 'hsl(var(--secondary)'} class="self-center" /> </div> {/if} </a> {#if service.extLink} <a class="flex flex-row rounded-md border-x-2 px-2 text-sm 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="grid items-center pl-1 pr-0" > <OpenInNewWindow color={hover.ext ? 'hsl(var(--primary))' : 'hsl(var(--secondary)'} class="self-center" /> </div> {/if} </a> {/if} </div> </div>