Prettier changes

This commit is contained in:
Neshura 2024-01-01 20:00:35 +01:00
parent d99d508bd6
commit eeaeca1006
Signed by: Neshura
GPG key ID: B6983AAA6B9A7A6C
11 changed files with 556 additions and 526 deletions

View file

@ -1,66 +1,100 @@
<svelte:options runes={true} />
<script lang="ts">
import {OpenInNewWindow} from "radix-icons-svelte";
import {quintInOut} from "svelte/easing";
import { slide } from "svelte/transition";
import { OpenInNewWindow } from 'radix-icons-svelte';
import { quintInOut } from 'svelte/easing';
import { slide } from 'svelte/transition';
let {service} = $props();
let { service } = $props();
let hover = $state({
title: false,
link: false,
ext: false
})
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>
<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="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>
<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>

View file

@ -1,155 +1,155 @@
{
"services": [
{
"name": "Nextcloud",
"icon": "/assets/icons/nextcloud-logo.svg",
"href": "https://nextcloud.neshweb.net/",
"desc": "Self-hosted Cloud Storage Service",
"warn": "Note: Registration requires approval",
"extLink": "https://nextcloud.com/",
"id": 7
},
{
"name": "Kavita",
"icon": "/assets/icons/kavita-logo.svg",
"href": "https://kavita.neshweb.net",
"desc": "Self-hosted Manga Library",
"warn": "Registration via Admin invite",
"id": 5
},
{
"name": "Images",
"icon": "/assets/icons/images-logo.svg",
"href": "https://imgs.neshweb.net/",
"desc": "Self-hosted Chevereto Image Service",
"warn": "",
"extLink": "https://chevereto.com/",
"id": 4
},
{
"name": "Calibre Web",
"icon": "/assets/icons/calibre-logo.avif",
"href": "https://calibre.neshweb.net/",
"desc": "Self-hosted Ebook Library Service",
"warn": "Note: Registration only via Admin",
"id": 6
},
{
"name": "PeerTube",
"icon": "/assets/icons/peertube-logo.svg",
"href": "https://tube.neshweb.net/",
"desc": "Self-hosted PeerTube Instance",
"warn": "Note: Registration only via Admin",
"id": 8
},
{
"name": "Mastodon",
"icon": "/assets/icons/mastodon-logo.svg",
"href": "https://mastodon.neshweb.net/",
"desc": "Self-hosted Mastodon Instance",
"warn": "Note: Registration requires approval",
"id": 3
},
"services": [
{
"name": "Nextcloud",
"icon": "/assets/icons/nextcloud-logo.svg",
"href": "https://nextcloud.neshweb.net/",
"desc": "Self-hosted Cloud Storage Service",
"warn": "Note: Registration requires approval",
"extLink": "https://nextcloud.com/",
"id": 7
},
{
"name": "Kavita",
"icon": "/assets/icons/kavita-logo.svg",
"href": "https://kavita.neshweb.net",
"desc": "Self-hosted Manga Library",
"warn": "Registration via Admin invite",
"id": 5
},
{
"name": "Images",
"icon": "/assets/icons/images-logo.svg",
"href": "https://imgs.neshweb.net/",
"desc": "Self-hosted Chevereto Image Service",
"warn": "",
"extLink": "https://chevereto.com/",
"id": 4
},
{
"name": "Calibre Web",
"icon": "/assets/icons/calibre-logo.avif",
"href": "https://calibre.neshweb.net/",
"desc": "Self-hosted Ebook Library Service",
"warn": "Note: Registration only via Admin",
"id": 6
},
{
"name": "PeerTube",
"icon": "/assets/icons/peertube-logo.svg",
"href": "https://tube.neshweb.net/",
"desc": "Self-hosted PeerTube Instance",
"warn": "Note: Registration only via Admin",
"id": 8
},
{
"name": "Mastodon",
"icon": "/assets/icons/mastodon-logo.svg",
"href": "https://mastodon.neshweb.net/",
"desc": "Self-hosted Mastodon Instance",
"warn": "Note: Registration requires approval",
"id": 3
},
{
"name": "Vaultwarden",
"icon": "/assets/icons/vaultwarden-logo.svg",
"href": "https://vault.neshweb.net",
"desc": "Self-hosted Password Manager",
"warn": "Note: Invite only",
"id": 9
},
{
"name": "Jellyfin",
"icon": "/assets/icons/jellyfin-logo.svg",
"href": "https://jellyfin.neshweb.net/",
"desc": "Open-Source, Self-Hosted Media Platform",
"warn": "Note: Registration only via Admin",
"id": 37
},
{
"name": "Navidrome",
"icon": "/assets/icons/navidrome-logo.avif",
"href": "https://navidrome.neshweb.net/",
"desc": "Open-Source, Self-Hosted Music Streaming Platform",
"warn": "Note: Registration only via Admin",
"id": 10
},
{
"name": "Gitlab",
"icon": "/assets/icons/gitlab-logo.svg",
"href": "https://gitlab.neshweb.net/",
"desc": "Self-hosted Git Service",
"warn": "Note: Registration only via Admin",
"id": 2
},
{
"name": "Forgejo",
"icon": "/assets/icons/forgejo-logo.svg",
"href": "https://forgejo.neshweb.net/",
"desc": "Self-hosted Git Service",
"warn": "Note: Registration only via Admin",
"id": 36
},
{
"name": "Portainer",
"icon": "/assets/icons/portainer-logo.avif",
"href": "https://portainer.neshweb.net/",
"desc": "Docker Container Manager",
"warn": "Note: Admin Only",
"id": 34
},
{
"name": "Nginx",
"icon": "/assets/icons/npm-logo.avif",
"href": "https://nginx.neshweb.net/",
"desc": "Web-based Nginx Proxy Manager",
"warn": "Note: Admin Only",
"id": 31
},
{
"name": "Proxmox",
"icon": "/assets/icons/proxmox-logo.avif",
"href": "https://proxmox.neshweb.net/",
"desc": "Hypervisor Webinterface",
"warn": "Note: Admin Only",
"id": 33
},
{
"name": "Dockge",
"icon": "/assets/icons/dockge-logo.avif",
"href": "https://dockge.neshweb.net/",
"desc": "Docker Compose WebUI",
"warn": "Note: Admin Only",
"id": 35
}
],
"games": {
"minecraft": {
"name": "Minecraft",
"icon": "/assets/icons/minecraft-logo.avif",
"href": "https://minecraft.neshweb.net/",
"desc": "View all currently available Minecraft Servers and their mods"
},
"ready_or_not": {
"name": "Ready or Not",
"icon": "/assets/icons/ron-logo.avif",
"href": "https://readyornot.neshweb.net/",
"desc": "Collection of Floor Plans for the Game 'Ready or Not'"
},
"zomboid": {
"name": "Zomboid",
"icon": "/assets/icons/zomboid-logo.avif",
"ip": "91.13.248.30",
"status": "Online"
},
"factorio": {
"name": "Factorio",
"status": "Online"
},
"space_engineers": {
"name": "Space Engineers",
"status": "Online"
}
}
{
"name": "Vaultwarden",
"icon": "/assets/icons/vaultwarden-logo.svg",
"href": "https://vault.neshweb.net",
"desc": "Self-hosted Password Manager",
"warn": "Note: Invite only",
"id": 9
},
{
"name": "Jellyfin",
"icon": "/assets/icons/jellyfin-logo.svg",
"href": "https://jellyfin.neshweb.net/",
"desc": "Open-Source, Self-Hosted Media Platform",
"warn": "Note: Registration only via Admin",
"id": 37
},
{
"name": "Navidrome",
"icon": "/assets/icons/navidrome-logo.avif",
"href": "https://navidrome.neshweb.net/",
"desc": "Open-Source, Self-Hosted Music Streaming Platform",
"warn": "Note: Registration only via Admin",
"id": 10
},
{
"name": "Gitlab",
"icon": "/assets/icons/gitlab-logo.svg",
"href": "https://gitlab.neshweb.net/",
"desc": "Self-hosted Git Service",
"warn": "Note: Registration only via Admin",
"id": 2
},
{
"name": "Forgejo",
"icon": "/assets/icons/forgejo-logo.svg",
"href": "https://forgejo.neshweb.net/",
"desc": "Self-hosted Git Service",
"warn": "Note: Registration only via Admin",
"id": 36
},
{
"name": "Portainer",
"icon": "/assets/icons/portainer-logo.avif",
"href": "https://portainer.neshweb.net/",
"desc": "Docker Container Manager",
"warn": "Note: Admin Only",
"id": 34
},
{
"name": "Nginx",
"icon": "/assets/icons/npm-logo.avif",
"href": "https://nginx.neshweb.net/",
"desc": "Web-based Nginx Proxy Manager",
"warn": "Note: Admin Only",
"id": 31
},
{
"name": "Proxmox",
"icon": "/assets/icons/proxmox-logo.avif",
"href": "https://proxmox.neshweb.net/",
"desc": "Hypervisor Webinterface",
"warn": "Note: Admin Only",
"id": 33
},
{
"name": "Dockge",
"icon": "/assets/icons/dockge-logo.avif",
"href": "https://dockge.neshweb.net/",
"desc": "Docker Compose WebUI",
"warn": "Note: Admin Only",
"id": 35
}
],
"games": {
"minecraft": {
"name": "Minecraft",
"icon": "/assets/icons/minecraft-logo.avif",
"href": "https://minecraft.neshweb.net/",
"desc": "View all currently available Minecraft Servers and their mods"
},
"ready_or_not": {
"name": "Ready or Not",
"icon": "/assets/icons/ron-logo.avif",
"href": "https://readyornot.neshweb.net/",
"desc": "Collection of Floor Plans for the Game 'Ready or Not'"
},
"zomboid": {
"name": "Zomboid",
"icon": "/assets/icons/zomboid-logo.avif",
"ip": "91.13.248.30",
"status": "Online"
},
"factorio": {
"name": "Factorio",
"status": "Online"
},
"space_engineers": {
"name": "Space Engineers",
"status": "Online"
}
}
}

View file

@ -1,15 +1,15 @@
<script lang="ts">
import { Button as ButtonPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
import { buttonVariants, type Props, type Events } from ".";
import { Button as ButtonPrimitive } from 'bits-ui';
import { cn } from '$lib/utils';
import { buttonVariants, type Props, type Events } from '.';
type $$Props = Props;
type $$Events = Events;
let className: $$Props["class"] = undefined;
export let variant: $$Props["variant"] = "default";
export let size: $$Props["size"] = "default";
export let builders: $$Props["builders"] = [];
let className: $$Props['class'] = undefined;
export let variant: $$Props['variant'] = 'default';
export let size: $$Props['size'] = 'default';
export let builders: $$Props['builders'] = [];
export { className as class };
</script>

View file

@ -1,37 +1,34 @@
import type { Button as ButtonPrimitive } from "bits-ui";
import { tv, type VariantProps } from "tailwind-variants";
import Root from "./button.svelte";
import type { Button as ButtonPrimitive } from 'bits-ui';
import { tv, type VariantProps } from 'tailwind-variants';
import Root from './button.svelte';
const buttonVariants = tv({
base: "inline-flex items-center justify-center rounded-md text-sm font-medium whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
base: 'inline-flex items-center justify-center rounded-md text-sm font-medium whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
variants: {
variant: {
default:
"bg-primary text-primary-foreground shadow hover:bg-primary/90",
destructive:
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',
destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',
outline:
"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground",
secondary:
"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline"
'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',
secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',
ghost: 'hover:bg-accent hover:text-accent-foreground',
link: 'text-primary underline-offset-4 hover:underline'
},
size: {
default: "h-9 px-4 py-2",
sm: "h-8 rounded-md px-3 text-xs",
lg: "h-10 rounded-md px-8",
icon: "h-9 w-9"
default: 'h-9 px-4 py-2',
sm: 'h-8 rounded-md px-3 text-xs',
lg: 'h-10 rounded-md px-8',
icon: 'h-9 w-9'
}
},
defaultVariants: {
variant: "default",
size: "default"
variant: 'default',
size: 'default'
}
});
type Variant = VariantProps<typeof buttonVariants>["variant"];
type Size = VariantProps<typeof buttonVariants>["size"];
type Variant = VariantProps<typeof buttonVariants>['variant'];
type Size = VariantProps<typeof buttonVariants>['size'];
type Props = ButtonPrimitive.Props & {
variant?: Variant;