Skip to content

Commit 97805b8

Browse files
committed
feat: dark-light mode logo
1 parent 7a21549 commit 97805b8

6 files changed

Lines changed: 55 additions & 2 deletions

File tree

docs/public/dark-logo.png

16.2 KB
Loading

docs/public/light-logo.png

141 KB
Loading

docs/src/app/layout.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { getPageMap } from "nextra/page-map";
44
import "nextra-theme-docs/style-prefixed.css";
55
import "./globals.css";
66
import { TrackClick, TrackImpression, TrackProvider } from "@/tracker";
7+
import { Logo } from "@/logo";
78

89
export const metadata = {
910
title: {
@@ -15,9 +16,13 @@ const navbar = (
1516
<Navbar
1617
logo={
1718
<TrackClick params={{ target: "logo" }}>
18-
<b>event-tracker</b>
19+
<div className="flex items-center gap-2">
20+
<Logo />
21+
<b>event-tracker</b>
22+
</div>
1923
</TrackClick>
2024
}
25+
projectLink="https://github.com/offlegacy/event-tracker"
2126
/>
2227
);
2328
const footer = (

docs/src/app/page.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Image } from "nextra/components";
22
import Link from "next/link";
33
import { TrackClick, TrackPageView } from "@/tracker";
4+
import { Logo } from "@/logo";
45

56
export const metadata = {};
67

@@ -9,7 +10,7 @@ export default function Page() {
910
<>
1011
<div className="mx-auto flex min-h-screen max-w-6xl flex-col items-center px-6 py-16">
1112
<div className="mb-16 flex flex-col items-center text-center">
12-
<Image src="/logo.jpg" alt="event-tracker logo" width={200} height={200} className="mb-8" />
13+
<Logo size={200} />
1314
<h1 className="mb-6 text-5xl font-bold">event-tracker</h1>
1415
<p className="mb-6 max-w-2xl text-xl text-gray-600 dark:text-gray-300">
1516
A lightweight, type-safe event tracking library for React applications that simplifies analytics integration

docs/src/logo/index.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"use client";
2+
3+
import { useTheme } from "nextra-theme-docs";
4+
import Image from "next/image";
5+
import { useSystemDarkMode } from "./useSystemDarkMode";
6+
7+
interface LogoProps {
8+
size?: number;
9+
}
10+
11+
const DARK_LOGO_PATH = "/dark-logo.png";
12+
const LIGHT_LOGO_PATH = "/light-logo.png";
13+
14+
export const Logo = ({ size = 30 }: LogoProps) => {
15+
const isSystemDarkMode = useSystemDarkMode();
16+
const { theme } = useTheme();
17+
18+
const isDarkMode = theme === "system" ? isSystemDarkMode : theme === "dark";
19+
20+
return (
21+
<Image src={isDarkMode ? DARK_LOGO_PATH : LIGHT_LOGO_PATH} alt="event-tracker logo" width={size} height={size} />
22+
);
23+
};

docs/src/logo/useSystemDarkMode.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { useEffect, useState } from "react";
2+
3+
const DARK_MODE_QUERY = "(prefers-color-scheme: dark)";
4+
5+
export const useSystemDarkMode = () => {
6+
const [isSystemDarkMode, setIsSystemDarkMode] = useState(false);
7+
8+
useEffect(() => {
9+
const matchMedia = window.matchMedia(DARK_MODE_QUERY);
10+
setIsSystemDarkMode(matchMedia.matches);
11+
12+
const handleChange = (e: MediaQueryListEvent) => {
13+
setIsSystemDarkMode(e.matches);
14+
};
15+
16+
matchMedia.addEventListener("change", handleChange);
17+
18+
return () => {
19+
matchMedia.removeEventListener("change", handleChange);
20+
};
21+
}, []);
22+
23+
return isSystemDarkMode;
24+
};

0 commit comments

Comments
 (0)