[WIP] A simple wake-on-lan service
1<script lang="ts">
2 import { config } from "./lib/api";
3 import Target from "./lib/Target.svelte";
4 import ThemeProvider from "./lib/ThemeProvider.svelte";
5
6 const targets = [
7 ...Object.entries(config.targets)
8 .filter(([k, v]) => config.pinned.includes(k))
9 .sort(
10 ([k1], [k2]) => config.pinned.indexOf(k1) - config.pinned.indexOf(k2),
11 ),
12 ...Object.entries(config.targets).filter(
13 ([k]) => !config.pinned.includes(k),
14 ),
15 ];
16
17 console.log(config);
18</script>
19
20<ThemeProvider />
21<main>
22 <div></div>
23 <h1>
24 {config.info.title}
25 <img src="/favicon.ico" alt="" style:height="1ch" />
26 </h1>
27 <ul class="targets">
28 {#each targets as [name, { mac, ip, url }]}
29 <li>
30 <Target {name} {mac} {ip} {url} />
31 </li>
32 {/each}
33 </ul>
34 <ul class="links">
35 {#each config.info.links as [text, href]}
36 <li><a {href}>{text}</a></li>
37 {/each}
38 </ul>
39</main>
40
41<style>
42 main {
43 max-width: 50ch;
44 margin: 1rem auto;
45 padding: 1rem;
46 background: var(--theme-background-main);
47 color: var(--theme-text);
48 border-radius: 10px;
49 }
50
51 .targets {
52 display: grid;
53 grid-template-columns: 1fr;
54 grid-auto-rows: auto;
55 gap: 1rem;
56 grid-auto-flow: row;
57 padding-block: 1rem;
58 list-style: none;
59 }
60
61 .links {
62 display: flex;
63 gap: 0.2rem 2rem;
64 justify-content: center;
65 align-items: center;
66 list-style: none;
67 flex-wrap: wrap;
68 }
69</style>