DUNGEONS-34: implement Webka local streaming app
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
53
frontend/app.vue
Normal file
53
frontend/app.vue
Normal file
@@ -0,0 +1,53 @@
|
||||
<script setup lang="ts">
|
||||
const { locale } = useI18n();
|
||||
const session = useSessionStore();
|
||||
const theme = useCookie("webka_theme", { default: () => "dark" });
|
||||
const accent = useCookie("webka_accent", { default: () => "#c3f66b" });
|
||||
useHead({
|
||||
htmlAttrs: { lang: locale, "data-theme": theme },
|
||||
bodyAttrs: {
|
||||
style: computed(
|
||||
() =>
|
||||
`--accent: ${/^#[a-f\d]{6}$/i.test(accent.value) ? accent.value : "#c3f66b"}`,
|
||||
),
|
||||
},
|
||||
});
|
||||
let heartbeat: ReturnType<typeof setInterval>;
|
||||
onMounted(() => {
|
||||
heartbeat = setInterval(async () => {
|
||||
if (
|
||||
session.user &&
|
||||
document.visibilityState === "visible" &&
|
||||
!(await session.refresh())
|
||||
)
|
||||
await navigateTo("/login");
|
||||
}, 60000);
|
||||
});
|
||||
onBeforeUnmount(() => clearInterval(heartbeat));
|
||||
</script>
|
||||
<template>
|
||||
<div class="app-shell">
|
||||
<svg class="glass-filter" aria-hidden="true" width="0" height="0">
|
||||
<defs>
|
||||
<filter id="glass-lens" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
baseFrequency="0.012 0.018"
|
||||
numOctaves="2"
|
||||
seed="8"
|
||||
result="noise"
|
||||
/>
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="noise"
|
||||
scale="3"
|
||||
xChannelSelector="R"
|
||||
yChannelSelector="G"
|
||||
/>
|
||||
</filter>
|
||||
</defs></svg
|
||||
><a class="skip-link" href="#main">{{ $t("common.skip") }}</a
|
||||
><GlassNavBar />
|
||||
<main id="main"><NuxtPage /></main>
|
||||
</div>
|
||||
</template>
|
||||
Reference in New Issue
Block a user