Files
archtika/web-app/src/routes/+layout.svelte

106 lines
2.2 KiB
Svelte
Raw Normal View History

<script lang="ts">
2024-08-02 15:33:18 +02:00
import "../app.css";
2024-08-20 19:17:05 +02:00
import "../../template-styles/common-styles.css";
import { page } from "$app/stores";
import type { LayoutServerData } from "./$types";
import type { Snippet } from "svelte";
2024-08-20 19:17:05 +02:00
const { data, children }: { data: LayoutServerData; children: Snippet } = $props();
2024-08-01 18:09:35 +02:00
const isProjectRoute = $derived($page.url.pathname.startsWith("/website") && !$page.error);
2024-08-02 15:33:18 +02:00
const routeName = $derived(
$page.url.pathname === "/"
? "Dashboard"
: `${$page.url.pathname.charAt(1).toUpperCase()}${$page.url.pathname.slice(2)}`
);
</script>
<svelte:head>
<title>archtika | {routeName.replaceAll("/", " - ")}</title>
</svelte:head>
<nav>
<img src="/favicon.svg" width="24" height="24" alt="" />
2024-08-23 18:43:52 +02:00
<ul class="link-wrapper unpadded">
{#if data.user}
<li>
<a href="/">Dashboard</a>
</li>
<li>
<a href="/account">Account</a>
</li>
{:else}
<li>
<a href="/register">Register</a>
</li>
<li>
<a href="/login">Login</a>
</li>
{/if}
</ul>
</nav>
{#if !isProjectRoute && !$page.error}
2024-08-01 18:09:35 +02:00
<header>
2024-08-02 15:33:18 +02:00
<h1>{routeName}</h1>
2024-08-01 18:09:35 +02:00
</header>
{/if}
2024-08-01 18:09:35 +02:00
<main class:editor={isProjectRoute}>
{@render children()}
</main>
<footer>
<p>
<small
>&copy; {new Date().getFullYear()} &mdash; <a href="https://archtika.com">archtika</a></small
>
</p>
</footer>
2024-08-01 18:09:35 +02:00
<style>
nav,
header,
main,
footer {
padding-block: var(--space-s);
inline-size: min(100% - var(--space-m), 1024px);
2024-08-01 18:09:35 +02:00
margin-inline: auto;
}
2024-08-02 15:33:18 +02:00
nav {
display: flex;
align-items: center;
column-gap: var(--space-m);
row-gap: var(--space-3xs);
flex-wrap: wrap;
justify-content: space-between;
2024-08-02 15:33:18 +02:00
}
nav > .link-wrapper {
display: flex;
align-items: center;
gap: var(--space-s);
2024-08-02 15:33:18 +02:00
}
2024-08-01 18:09:35 +02:00
footer {
text-align: center;
2024-08-02 15:33:18 +02:00
margin-block-start: auto;
2024-08-01 18:09:35 +02:00
}
.editor {
2024-08-03 13:49:41 +02:00
display: grid;
block-size: calc(100vh - (4 * var(--space-s) + 2 * 1.5rem));
inline-size: min(100% - var(--space-m), 1536px);
border-block-start: var(--border-primary);
2024-08-01 18:09:35 +02:00
padding-block: 0;
position: relative;
}
@media (min-width: 640px) {
.editor {
2024-08-18 20:12:27 +02:00
grid-template-columns: 1fr 1fr;
}
2024-08-01 18:09:35 +02:00
}
</style>