2021-05-14 21:51:14 +02:00
|
|
|
<script context="module" lang="ts">
|
2022-02-10 15:47:44 +01:00
|
|
|
import type { Load } from '@sveltejs/kit';
|
2022-07-06 11:02:36 +02:00
|
|
|
export const load: Load = async ({ url }) => {
|
2022-07-08 13:38:19 +02:00
|
|
|
const baseSettings = await get('/base');
|
2022-07-06 11:02:36 +02:00
|
|
|
try {
|
|
|
|
if (Cookies.get('token')) {
|
|
|
|
const response = await get(`/user`);
|
|
|
|
return {
|
|
|
|
props: {
|
2022-07-08 13:38:19 +02:00
|
|
|
...response,
|
|
|
|
baseSettings
|
2022-07-06 11:02:36 +02:00
|
|
|
},
|
|
|
|
stuff: {
|
|
|
|
...response
|
|
|
|
}
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
if (url.pathname !== '/login' && url.pathname !== '/register') {
|
|
|
|
return {
|
|
|
|
status: 302,
|
2022-07-08 13:38:19 +02:00
|
|
|
redirect: '/login',
|
|
|
|
props: {
|
|
|
|
baseSettings
|
|
|
|
}
|
2022-07-06 11:02:36 +02:00
|
|
|
};
|
|
|
|
}
|
2022-07-08 13:38:19 +02:00
|
|
|
return {
|
|
|
|
props: {
|
|
|
|
baseSettings
|
|
|
|
}
|
|
|
|
};
|
2022-07-06 11:02:36 +02:00
|
|
|
}
|
|
|
|
} catch (error: any) {
|
|
|
|
if (error?.code?.startsWith('FAST_JWT') || error.status === 401) {
|
|
|
|
Cookies.remove('token');
|
|
|
|
if (url.pathname !== '/login') {
|
|
|
|
return {
|
|
|
|
status: 302,
|
2022-07-08 13:38:19 +02:00
|
|
|
redirect: '/login',
|
|
|
|
props: {
|
|
|
|
baseSettings
|
|
|
|
}
|
2022-07-06 11:02:36 +02:00
|
|
|
};
|
2022-02-10 15:47:44 +01:00
|
|
|
}
|
2022-07-06 11:02:36 +02:00
|
|
|
}
|
|
|
|
if (url.pathname !== '/login') {
|
|
|
|
return {
|
|
|
|
status: 302,
|
2022-07-08 13:38:19 +02:00
|
|
|
redirect: '/login',
|
|
|
|
props: {
|
|
|
|
baseSettings
|
|
|
|
}
|
2022-07-06 11:02:36 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
status: 500,
|
2022-07-08 13:38:19 +02:00
|
|
|
error: new Error(error),
|
|
|
|
props: {
|
|
|
|
baseSettings
|
|
|
|
}
|
2021-05-14 21:51:14 +02:00
|
|
|
};
|
|
|
|
}
|
2022-02-10 15:47:44 +01:00
|
|
|
};
|
2021-05-14 21:51:14 +02:00
|
|
|
</script>
|
|
|
|
|
2022-07-06 11:02:36 +02:00
|
|
|
<script lang="ts">
|
2022-07-08 13:38:19 +02:00
|
|
|
export let baseSettings: any;
|
2022-07-22 20:48:04 +00:00
|
|
|
$appSession.ipv4 = baseSettings.ipv4;
|
|
|
|
$appSession.ipv6 = baseSettings.ipv6;
|
2022-07-08 13:38:19 +02:00
|
|
|
$appSession.version = baseSettings.version;
|
|
|
|
$appSession.whiteLabeled = baseSettings.whiteLabeled;
|
|
|
|
$appSession.whiteLabeledDetails.icon = baseSettings.whiteLabeledIcon;
|
|
|
|
|
2022-07-06 11:02:36 +02:00
|
|
|
export let userId: string;
|
|
|
|
export let teamId: string;
|
|
|
|
export let permission: string;
|
|
|
|
export let isAdmin: boolean;
|
2022-02-10 15:47:44 +01:00
|
|
|
import '../tailwind.css';
|
2022-07-06 11:02:36 +02:00
|
|
|
import Cookies from 'js-cookie';
|
2022-05-17 11:16:58 +02:00
|
|
|
import { fade } from 'svelte/transition';
|
2022-07-06 11:02:36 +02:00
|
|
|
import { navigating, page } from '$app/stores';
|
2022-03-02 11:00:08 +01:00
|
|
|
|
2022-07-06 11:02:36 +02:00
|
|
|
import { get } from '$lib/api';
|
|
|
|
import UpdateAvailable from '$lib/components/UpdateAvailable.svelte';
|
|
|
|
import PageLoader from '$lib/components/PageLoader.svelte';
|
|
|
|
import { errorNotification } from '$lib/common';
|
2022-07-26 12:26:45 +00:00
|
|
|
import { appSession } from '$lib/store';
|
2022-08-09 15:28:26 +00:00
|
|
|
import Toasts from '$lib/components/Toasts.svelte';
|
2022-05-11 16:15:34 +02:00
|
|
|
|
2022-07-06 11:02:36 +02:00
|
|
|
if (userId) $appSession.userId = userId;
|
|
|
|
if (teamId) $appSession.teamId = teamId;
|
|
|
|
if (permission) $appSession.permission = permission;
|
|
|
|
if (isAdmin) $appSession.isAdmin = isAdmin;
|
2022-05-09 12:45:17 +02:00
|
|
|
|
2022-07-06 11:02:36 +02:00
|
|
|
async function logout() {
|
2022-02-11 09:00:45 +01:00
|
|
|
try {
|
2022-07-06 11:02:36 +02:00
|
|
|
Cookies.remove('token');
|
|
|
|
return window.location.replace('/login');
|
|
|
|
} catch (error) {
|
2022-02-15 10:42:26 +01:00
|
|
|
return errorNotification(error);
|
2022-02-10 15:47:44 +01:00
|
|
|
}
|
2021-05-14 21:51:14 +02:00
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
2022-02-10 15:47:44 +01:00
|
|
|
<svelte:head>
|
|
|
|
<title>Coolify</title>
|
2022-07-06 11:02:36 +02:00
|
|
|
{#if !$appSession.whiteLabeled}
|
2022-04-06 22:01:41 +02:00
|
|
|
<link rel="icon" href="/favicon.png" />
|
2022-07-06 11:02:36 +02:00
|
|
|
{:else if $appSession.whiteLabeledDetails.icon}
|
|
|
|
<link rel="icon" href={$appSession.whiteLabeledDetails.icon} />
|
2022-04-06 22:01:41 +02:00
|
|
|
{/if}
|
2022-02-10 15:47:44 +01:00
|
|
|
</svelte:head>
|
2022-08-09 15:28:26 +00:00
|
|
|
<Toasts />
|
2022-05-17 11:16:58 +02:00
|
|
|
{#if $navigating}
|
|
|
|
<div out:fade={{ delay: 100 }}>
|
|
|
|
<PageLoader />
|
|
|
|
</div>
|
|
|
|
{/if}
|
2022-07-06 11:02:36 +02:00
|
|
|
{#if $appSession.userId}
|
2022-02-10 15:47:44 +01:00
|
|
|
<nav class="nav-main">
|
|
|
|
<div class="flex h-screen w-full flex-col items-center transition-all duration-100">
|
2022-07-06 11:02:36 +02:00
|
|
|
{#if !$appSession.whiteLabeled}
|
2022-04-06 22:01:41 +02:00
|
|
|
<div class="my-4 h-10 w-10"><img src="/favicon.png" alt="coolLabs logo" /></div>
|
|
|
|
{/if}
|
2022-07-06 11:02:36 +02:00
|
|
|
<div class="flex flex-col space-y-2 py-2" class:mt-2={$appSession.whiteLabeled}>
|
2022-02-10 15:47:44 +01:00
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href="/"
|
2022-08-10 12:27:43 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200 hover:text-white"
|
2022-02-10 15:47:44 +01:00
|
|
|
class:text-white={$page.url.pathname === '/'}
|
|
|
|
class:bg-coolgray-500={$page.url.pathname === '/'}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Dashboard"
|
2022-02-10 15:47:44 +01:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
|
|
|
>
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<path
|
|
|
|
d="M19 8.71l-5.333 -4.148a2.666 2.666 0 0 0 -3.274 0l-5.334 4.148a2.665 2.665 0 0 0 -1.029 2.105v7.2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-7.2c0 -.823 -.38 -1.6 -1.03 -2.105"
|
|
|
|
/>
|
|
|
|
<path d="M16 15c-2.21 1.333 -5.792 1.333 -8 0" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
|
|
|
<div class="border-t border-stone-700" />
|
2021-05-14 21:51:14 +02:00
|
|
|
|
2022-02-10 15:47:44 +01:00
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href="/applications"
|
2022-08-10 12:02:47 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-applications={$page.url.pathname.startsWith('/applications') ||
|
2022-02-10 15:47:44 +01:00
|
|
|
$page.url.pathname.startsWith('/new/application')}
|
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/applications') ||
|
|
|
|
$page.url.pathname.startsWith('/new/application')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Applications"
|
2022-02-10 15:47:44 +01:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentcolor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
|
|
|
>
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<rect x="4" y="4" width="6" height="6" rx="1" />
|
|
|
|
<rect x="4" y="14" width="6" height="6" rx="1" />
|
|
|
|
<rect x="14" y="14" width="6" height="6" rx="1" />
|
|
|
|
<line x1="14" y1="7" x2="20" y2="7" />
|
|
|
|
<line x1="17" y1="4" x2="17" y2="10" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href="/sources"
|
2022-08-10 12:02:47 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-sources={$page.url.pathname.startsWith('/sources') ||
|
2022-02-10 15:47:44 +01:00
|
|
|
$page.url.pathname.startsWith('/new/source')}
|
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/sources') ||
|
|
|
|
$page.url.pathname.startsWith('/new/source')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Git Sources"
|
2022-02-10 15:47:44 +01:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
|
|
|
>
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<circle cx="6" cy="6" r="2" />
|
|
|
|
<circle cx="18" cy="18" r="2" />
|
|
|
|
<path d="M11 6h5a2 2 0 0 1 2 2v8" />
|
|
|
|
<polyline points="14 9 11 6 14 3" />
|
|
|
|
<path d="M13 18h-5a2 2 0 0 1 -2 -2v-8" />
|
|
|
|
<polyline points="10 15 13 18 10 21" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href="/destinations"
|
2022-08-10 12:02:47 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-destinations={$page.url.pathname.startsWith('/destinations') ||
|
2022-02-10 15:47:44 +01:00
|
|
|
$page.url.pathname.startsWith('/new/destination')}
|
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/destinations') ||
|
|
|
|
$page.url.pathname.startsWith('/new/destination')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Destinations"
|
2022-02-10 15:47:44 +01:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
|
|
|
>
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<path
|
|
|
|
d="M22 12.54c-1.804 -.345 -2.701 -1.08 -3.523 -2.94c-.487 .696 -1.102 1.568 -.92 2.4c.028 .238 -.32 1.002 -.557 1h-14c0 5.208 3.164 7 6.196 7c4.124 .022 7.828 -1.376 9.854 -5c1.146 -.101 2.296 -1.505 2.95 -2.46z"
|
|
|
|
/>
|
|
|
|
<path d="M5 10h3v3h-3z" />
|
|
|
|
<path d="M8 10h3v3h-3z" />
|
|
|
|
<path d="M11 10h3v3h-3z" />
|
|
|
|
<path d="M8 7h3v3h-3z" />
|
|
|
|
<path d="M11 7h3v3h-3z" />
|
|
|
|
<path d="M11 4h3v3h-3z" />
|
|
|
|
<path d="M4.571 18c1.5 0 2.047 -.074 2.958 -.78" />
|
|
|
|
<line x1="10" y1="16" x2="10" y2="16.01" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
|
|
|
<div class="border-t border-stone-700" />
|
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href="/databases"
|
2022-08-10 12:27:43 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-databases={$page.url.pathname.startsWith('/databases') ||
|
2022-02-10 15:47:44 +01:00
|
|
|
$page.url.pathname.startsWith('/new/database')}
|
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/databases') ||
|
|
|
|
$page.url.pathname.startsWith('/new/database')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Databases"
|
2022-02-10 15:47:44 +01:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
|
|
|
>
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<ellipse cx="12" cy="6" rx="8" ry="3" />
|
|
|
|
<path d="M4 6v6a8 3 0 0 0 16 0v-6" />
|
|
|
|
<path d="M4 12v6a8 3 0 0 0 16 0v-6" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href="/services"
|
2022-08-10 12:27:43 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-services={$page.url.pathname.startsWith('/services') ||
|
2022-02-10 15:47:44 +01:00
|
|
|
$page.url.pathname.startsWith('/new/service')}
|
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/services') ||
|
|
|
|
$page.url.pathname.startsWith('/new/service')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Services"
|
2022-02-10 15:47:44 +01:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
|
|
|
>
|
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<path d="M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-12" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
2021-05-14 21:51:14 +02:00
|
|
|
</div>
|
2022-02-10 15:47:44 +01:00
|
|
|
<div class="flex-1" />
|
|
|
|
|
2022-07-06 11:02:36 +02:00
|
|
|
<UpdateAvailable />
|
2022-05-10 10:14:48 +02:00
|
|
|
<div class="flex flex-col space-y-2 py-2">
|
2022-02-10 15:47:44 +01:00
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
2022-04-07 23:26:06 +02:00
|
|
|
href="/iam"
|
2022-08-10 12:27:43 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-iam={$page.url.pathname.startsWith('/iam')}
|
2022-04-07 23:26:06 +02:00
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/iam')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="IAM"
|
2022-04-07 23:26:06 +02:00
|
|
|
><svg
|
2022-02-10 15:47:44 +01:00
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
2021-05-14 21:51:14 +02:00
|
|
|
>
|
2022-02-10 15:47:44 +01:00
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<circle cx="9" cy="7" r="4" />
|
|
|
|
<path d="M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" />
|
|
|
|
<path d="M16 3.13a4 4 0 0 1 0 7.75" />
|
|
|
|
<path d="M21 21v-2a4 4 0 0 0 -3 -3.85" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
2022-07-26 12:26:45 +00:00
|
|
|
<a
|
|
|
|
sveltekit:prefetch
|
|
|
|
href={$appSession.teamId === '0' ? '/settings/global' : '/settings/ssh-keys'}
|
2022-08-10 12:27:43 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200"
|
2022-08-10 08:54:26 +00:00
|
|
|
class:text-settings={$page.url.pathname.startsWith('/settings')}
|
2022-07-26 12:26:45 +00:00
|
|
|
class:bg-coolgray-500={$page.url.pathname.startsWith('/settings')}
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Settings"
|
2022-07-26 12:26:45 +00:00
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="h-8 w-8"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
2021-05-14 21:51:14 +02:00
|
|
|
>
|
2022-07-26 12:26:45 +00:00
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<path
|
|
|
|
d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z"
|
|
|
|
/>
|
|
|
|
<circle cx="12" cy="12" r="3" />
|
|
|
|
</svg>
|
|
|
|
</a>
|
2022-04-07 23:26:06 +02:00
|
|
|
|
2022-02-10 15:47:44 +01:00
|
|
|
<div
|
2022-08-10 12:27:43 +00:00
|
|
|
class="icons tooltip tooltip-primary tooltip-right bg-coolgray-200 hover:text-error"
|
2022-08-10 08:54:26 +00:00
|
|
|
data-tip="Logout"
|
2022-02-10 15:47:44 +01:00
|
|
|
on:click={logout}
|
|
|
|
>
|
|
|
|
<svg
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
class="ml-1 h-7 w-7"
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
stroke-width="1.5"
|
|
|
|
stroke="currentColor"
|
|
|
|
fill="none"
|
|
|
|
stroke-linecap="round"
|
|
|
|
stroke-linejoin="round"
|
2021-05-14 21:51:14 +02:00
|
|
|
>
|
2022-02-10 15:47:44 +01:00
|
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
|
|
<path
|
|
|
|
d="M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"
|
|
|
|
/>
|
|
|
|
<path d="M7 12h14l-3 -3m0 6l3 -3" />
|
|
|
|
</svg>
|
|
|
|
</div>
|
2022-02-22 12:56:58 +01:00
|
|
|
<div
|
|
|
|
class="w-full text-center font-bold text-stone-400 hover:bg-coolgray-200 hover:text-white"
|
2021-05-14 21:51:14 +02:00
|
|
|
>
|
2022-02-22 12:56:58 +01:00
|
|
|
<a
|
|
|
|
class="text-[10px] no-underline"
|
2022-07-06 11:02:36 +02:00
|
|
|
href={`https://github.com/coollabsio/coolify/releases/tag/v${$appSession.version}`}
|
|
|
|
target="_blank">v{$appSession.version}</a
|
2022-02-22 12:56:58 +01:00
|
|
|
>
|
|
|
|
</div>
|
2021-05-14 21:51:14 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2022-02-10 15:47:44 +01:00
|
|
|
</nav>
|
2022-07-06 11:02:36 +02:00
|
|
|
{#if $appSession.whiteLabeled}
|
2022-04-28 14:12:19 +02:00
|
|
|
<span class="fixed bottom-0 left-[50px] z-50 m-2 px-4 text-xs text-stone-700"
|
2022-04-06 22:01:41 +02:00
|
|
|
>Powered by <a href="https://coolify.io" target="_blank">Coolify</a></span
|
|
|
|
>
|
|
|
|
{/if}
|
2021-05-14 21:51:14 +02:00
|
|
|
{/if}
|
2022-02-10 15:47:44 +01:00
|
|
|
<main>
|
|
|
|
<slot />
|
|
|
|
</main>
|