frontend/app.vue

85 lines
2.2 KiB
Vue
Raw Normal View History

<template>
2024-05-12 09:30:02 +02:00
<NuxtPwaAssets />
2024-05-12 11:23:38 +02:00
<PwaTransparentImage image="/logo.webp" />
<PwaAppleImage image="/logo.webp" />
<PwaMaskableImage image="/logo.webp" />
<Loading />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
<NotificationsRenderer />
</template>
<script setup lang="ts">
2024-05-12 08:13:35 +02:00
import { convert } from "html-to-text";
import "iconify-icon";
// Use SSR-safe IDs for Headless UI
provideHeadlessUseId(() => useId());
const code = useRequestURL().searchParams.get("code");
const appData = useAppData();
const tokenData = useTokenData();
const client = useClient(tokenData);
const instance = useInstance();
2024-05-12 08:13:35 +02:00
const description = useExtendedDescription(client);
2024-05-12 08:13:35 +02:00
useSeoMeta({
titleTemplate: (titleChunk) => {
return titleChunk ? `${titleChunk} · Lysand` : "Lysand";
},
title: computed(() => instance.value?.title ?? ""),
ogImage: computed(() => instance.value?.banner.url),
2024-05-12 08:13:35 +02:00
twitterTitle: computed(() => instance.value?.title ?? ""),
twitterDescription: computed(() =>
convert(description.value?.content ?? ""),
),
twitterImage: computed(() => instance.value?.banner.url),
2024-05-12 08:13:35 +02:00
description: computed(() => convert(description.value?.content ?? "")),
ogDescription: computed(() => convert(description.value?.content ?? "")),
ogSiteName: "Lysand",
colorScheme: "dark",
2024-05-12 09:30:02 +02:00
themeColor: "#f9a8d4",
2024-05-12 08:13:35 +02:00
});
useHead({
htmlAttrs: {
lang: "en",
},
});
if (code) {
if (appData.value) {
client.value
?.fetchAccessToken(
appData.value.client_id,
appData.value.client_secret,
code,
new URL("/", useRequestURL().origin).toString(),
)
.then((res) => {
tokenData.value = res.data;
// Remove code from URL
window.history.replaceState(
{},
document.title,
window.location.pathname,
);
});
}
}
useCacheRefresh(client);
</script>
<style>
@import url("overlayscrollbars/overlayscrollbars.css");
body {
font-family: Inter, sans-serif;
}
.os-scrollbar .os-scrollbar-handle {
background: #9999;
}
</style>