nav color fixes, cache busting
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
"dev": "vinxi dev",
|
||||
"dev-flush": "vinxi dev --env-file=.env",
|
||||
"build": "vinxi build",
|
||||
"vercel-build": "rm -rf .vinxi .output node_modules/.vite && vinxi build",
|
||||
"start": "NODE_OPTIONS='--import ./public/instrument.server.mjs' vinxi start",
|
||||
"test": "bun test",
|
||||
"test:security": "bun test src/server/security/",
|
||||
|
||||
@@ -4,7 +4,10 @@ import SunIcon from "./icons/SunIcon";
|
||||
import { Typewriter } from "./Typewriter";
|
||||
import { useDarkMode } from "~/context/darkMode";
|
||||
|
||||
export function DarkModeToggle() {
|
||||
export function DarkModeToggle(
|
||||
props: { shouldScale: boolean },
|
||||
{ shouldScale = true }
|
||||
) {
|
||||
const { isDark, toggleDarkMode } = useDarkMode();
|
||||
const [mounted, setMounted] = createSignal(false);
|
||||
|
||||
@@ -15,7 +18,7 @@ export function DarkModeToggle() {
|
||||
return (
|
||||
<button
|
||||
onClick={toggleDarkMode}
|
||||
class="hover:bg-surface0 flex w-full items-center gap-3 rounded-lg p-3 transition-all duration-200 ease-in-out hover:scale-105"
|
||||
class={`hover:bg-surface0 flex w-full items-center gap-3 rounded-lg p-3 transition-all duration-200 ease-in-out ${props.shouldScale ? "hover:scale-105" : ""}`}
|
||||
aria-label="Toggle dark mode"
|
||||
>
|
||||
<Show
|
||||
|
||||
@@ -13,55 +13,7 @@ import { A, useLocation } from "@solidjs/router";
|
||||
import { useSite } from "~/context/SiteContext";
|
||||
import { useDarkMode } from "~/context/darkMode";
|
||||
import { NAV_CONFIG, BACK_TO_FRENO } from "~/lib/nav-config";
|
||||
|
||||
/** Simple SVG sun icon for dark mode toggle. */
|
||||
function SunIcon() {
|
||||
return (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="h-5 w-5"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<circle cx="12" cy="12" r="4" />
|
||||
<path d="M12 2v2" />
|
||||
<path d="M12 20v2" />
|
||||
<path d="M2 12h2" />
|
||||
<path d="M20 12h2" />
|
||||
<path d="m4.93 4.93 1.41 1.41" />
|
||||
<path d="m17.66 17.66 1.41 1.41" />
|
||||
<path d="m2 12h2" />
|
||||
<path d="m20 12h2" />
|
||||
<path d="m4.93 19.07 1.41-1.41" />
|
||||
<path d="m17.66 6.34 1.41-1.41" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
/** Simple SVG moon icon for dark mode toggle. */
|
||||
function MoonIcon() {
|
||||
return (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="h-5 w-5"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" />
|
||||
<path d="M9 11a5 5 0 0 0 5.5 5.5" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
import { DarkModeToggle } from "~/components/DarkModeToggle";
|
||||
|
||||
export default function SubdomainHeader() {
|
||||
const site = useSite();
|
||||
@@ -80,7 +32,10 @@ export default function SubdomainHeader() {
|
||||
};
|
||||
|
||||
return (
|
||||
<header class="bg-base/80 border-surface0 sticky top-0 z-50 w-full border-b backdrop-blur-md">
|
||||
<header
|
||||
class="sticky top-0 z-50 w-full border-b backdrop-blur-md"
|
||||
classList={{ "bg-base/80 border-surface0": site().headerOpaque }}
|
||||
>
|
||||
<div class="mx-auto flex h-14 max-w-7xl items-center justify-between px-4">
|
||||
<A
|
||||
href="/"
|
||||
@@ -123,31 +78,7 @@ export default function SubdomainHeader() {
|
||||
</Show>
|
||||
)}
|
||||
</For>
|
||||
|
||||
<a
|
||||
href={BACK_TO_FRENO.href}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="text-text/60 hover:text-text text-xs transition-colors"
|
||||
>
|
||||
{BACK_TO_FRENO.label}
|
||||
</a>
|
||||
|
||||
{/* Dark mode toggle */}
|
||||
<button
|
||||
onClick={toggleDarkMode}
|
||||
class="hover:bg-surface0/40 rounded-full p-2 transition-colors"
|
||||
aria-label={
|
||||
isDark() ? "Switch to light mode" : "Switch to dark mode"
|
||||
}
|
||||
>
|
||||
<Show when={isDark()}>
|
||||
<SunIcon />
|
||||
</Show>
|
||||
<Show when={!isDark()}>
|
||||
<MoonIcon />
|
||||
</Show>
|
||||
</button>
|
||||
<DarkModeToggle />
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@@ -35,6 +35,8 @@ export interface Site {
|
||||
brandColor: string;
|
||||
/** Dark mode variant of the brand color (used when dark mode is active). */
|
||||
brandColorDark?: string;
|
||||
/** Whether the subdomain header should use a solid background (default: false for transparent). */
|
||||
headerOpaque?: boolean;
|
||||
/** Default OpenGraph image path (resolved against the site root). */
|
||||
ogDefaultImage: string;
|
||||
/** Favicon path for this site. */
|
||||
@@ -87,6 +89,7 @@ export const SITE_CONFIG: Record<SiteId, Site> = {
|
||||
titleSuffix: " | Nessa",
|
||||
brandColor: "#527640",
|
||||
brandColorDark: "#6CA86C",
|
||||
headerOpaque: true,
|
||||
ogDefaultImage: "/nessa/og-default.png",
|
||||
faviconPath: "/nessa/favicon.ico"
|
||||
},
|
||||
|
||||
7
src/routes/api/lineage/json_service/quest_events.ts
Normal file
7
src/routes/api/lineage/json_service/quest_events.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { APIEvent } from "@solidjs/start/server";
|
||||
import { rest } from "../_lib";
|
||||
|
||||
export const GET = (event: APIEvent) =>
|
||||
rest(async (caller) => {
|
||||
return caller.lineage.jsonService.quest_events();
|
||||
}, event);
|
||||
Reference in New Issue
Block a user