48 lines
992 B
Plaintext
48 lines
992 B
Plaintext
---
|
|
import '../styles/styles.scss';
|
|
import Head from "../components/base/Head.astro";
|
|
import Header from "../components/base/Header.astro";
|
|
import Footer from "../components/base/Footer.astro";
|
|
import { Maybe } from 'purify-ts';
|
|
|
|
|
|
interface Props {
|
|
title?: string;
|
|
}
|
|
|
|
const {
|
|
title,
|
|
} = Astro.props;
|
|
---
|
|
<html lang="en">
|
|
<Head title={Maybe.fromNullable(title)}/>
|
|
<body>
|
|
<script is:inline>
|
|
(() => {
|
|
const theme = (
|
|
localStorage?.getItem("theme") ||
|
|
window.matchMedia("(prefers-color-scheme: dark)").matches && "dark" ||
|
|
"light"
|
|
);
|
|
|
|
const cl = document.body.classList;
|
|
switch (theme) {
|
|
case "light": return cl.remove("dark");
|
|
case "dark": return cl.add("dark");
|
|
}
|
|
localStorage?.setItem("theme", theme);
|
|
})();
|
|
</script>
|
|
|
|
<slot name="header">
|
|
<Header/>
|
|
</slot>
|
|
|
|
<slot />
|
|
|
|
<slot name="footer">
|
|
<Footer/>
|
|
</slot>
|
|
</body>
|
|
</html>
|