35 lines
998 B
Vue
35 lines
998 B
Vue
<script setup lang="ts">
|
|
import { AnimatePresence } from "motion-v";
|
|
import BackToTop from "~/components/layout/BackToTop.vue";
|
|
import Cursor from "~/components/layout/Cursor.vue";
|
|
import Footer from "~/components/layout/Footer.vue";
|
|
import Header from "~/components/layout/Header.vue";
|
|
import Preloader from "~/components/layout/Preloader.vue";
|
|
|
|
/*
|
|
* Site chrome shared by every page. It lives in the layout (not in each page) so navigation
|
|
* swaps only the page content: animations here — e.g. the preloader's exit — never run on a
|
|
* page that is being torn down, which crashed Vue's transition code.
|
|
*/
|
|
const ui = useUiStore();
|
|
const site = useSiteStore();
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<AnimatePresence>
|
|
<Preloader v-if="!ui.ready" @complete="ui.setReady" />
|
|
</AnimatePresence>
|
|
|
|
<Cursor />
|
|
<div class="noise" aria-hidden="true" />
|
|
|
|
<Header />
|
|
|
|
<slot />
|
|
|
|
<Footer v-if="site.sections?.footer?.enabled !== false" />
|
|
<BackToTop />
|
|
</div>
|
|
</template>
|