pesde/website/src/routes/+layout.svelte
Luka f0d04fc87c
feat: website
* feat(website): init

* feat(website): home page

* feat(website): make page more responsive

* feat(website): layout

* feat(website): package page

* feat(website): update PackageResponse type

* feat(website): display package readme

* feat(website): use new /latest/any endpoint

* feat(website): make website lg instead of xl

* fix(website): use NodeJS.Timeout

* feat(website): versions page

* feat(website): add latest version indicator

* feat(website): add target select menu

* feat(website): indicate current version

* feat(website): add package metadata

* feat(website): add hamburger

* fix(website): header responsiveness

* feat(website): better package layout

* feat(website): display authors on package page

* fix(website): only display relative dates on client

* feat(docs): init docs site

* chore(website): read .env from project root

* feat(website): add gemoji support

* fix(website): overflow on code blocks

* chore(docs): read .env from project root

* feat(docs): config changes

* fix: authors not displaying

* fix(website): use fallback language

* refactor(website): use predefined target names

* refactor(website): change Github to GitHub

* chore: remove starter readmes

* chore(docs): remove .vscode

* chore(docs): remove unused assets folder

* fix(website): fix missing datetime attribute

* feat(website): switch to universal loaders

* feat(docs): search

* fix(website): type errors

* fix(website): use provided fetch instead of global

* feat(website): remove isr

* chore(website): add .env.example

* feat(website): add icons and metadata

* chore(website): add debug logs

* chore(website): remove shiki temporarily

* fix(website): rehype shiki lazy load

* fix(website): use custom highlighter

* fix(website): move highlighter creation into load

* docs: write docs

* feat(website): add og image

* feat(website): fix accessibility issues

* fix(website): no target selector on mobile

* fix(website): close dialog on navigation

* fix(website): logo is not a link in hamburger menu

* feat(website): dependencies tab

* fix(website): use correct dependency target

* fix(website): navigation links

* feat(website): support wally dependencies

* feat(website): metadata + case insensitivity

* fix(website): manually implement groupBy

`Object.groupBy` isn't supported on Vercel right now.

* fix(website): code block with an unknown language

* docs(policies): explain & cover more cases

* docs: update cli reference

* docs: add self hosting registries guide

* docs: update README

* docs: add more configs to registry guide

* fix: favicon and logomark

* feat(website): package documentation

* fix(website): missing $derive for toc

* docs: change SENTRY_URL to SENTRY_DSN

* chore(website): remove unused file

* chore: remove favicon.zip

* fix(website): strip wally# prefix

* chore: add changelog entry

---------

Co-authored-by: daimond113 <72147841+daimond113@users.noreply.github.com>
2024-10-29 20:06:00 +01:00

78 lines
2.1 KiB
Svelte

<script lang="ts">
import { page } from "$app/stores"
import "@fontsource-variable/nunito-sans"
import "../app.css"
const { children } = $props()
const siteName = $derived($page.data.meta?.siteName ?? "pesde")
const title = $derived($page.data.meta?.title)
const description = $derived(
$page.data.meta?.description ??
"A package manager for the Luau programming language, supporting multiple runtimes including Roblox and Lune.",
)
let themeColor = $state("#F19D1E")
$effect(() => {
const query = window.matchMedia("(prefers-color-scheme: dark)")
const updateColor = (dark: boolean) => {
themeColor = dark ? "#14100C" : "#FAEAD7"
}
const listener = (e: MediaQueryListEvent) => {
updateColor(e.matches)
}
query.addEventListener("change", listener)
updateColor(query.matches)
return () => query.removeEventListener("change", listener)
})
function hashChange() {
let hash
try {
hash = decodeURIComponent(location.hash.slice(1)).toLowerCase()
} catch {
return
}
const id = "user-content-" + hash
const target = document.getElementById(id)
if (target) {
target.scrollIntoView()
}
}
$effect(() => {
hashChange()
})
</script>
<svelte:head>
<title>{title ? `${title} - ${siteName}` : siteName}</title>
<meta name="description" content={description} />
<meta name="theme-color" content={themeColor} />
<meta property="og:site_name" content={siteName} />
<meta property="og:type" content="website" />
<meta property="og:title" content={title ?? "Manage your packages for Luau"} />
<meta property="og:description" content={description} />
<meta property="og:image" content="/favicon-48x48.png" />
<meta name="twitter:card" content="summary" />
<link rel="icon" type="image/png" href="/favicon-48x48.png" sizes="48x48" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<meta name="apple-mobile-web-app-title" content="pesde" />
<link rel="manifest" href="/site.webmanifest" />
</svelte:head>
<svelte:window onhashchange={hashChange} />
{@render children()}