From 98a899bdeda31283a88cbf221d71b41e2cd042a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romana=20=C4=8Eur=C3=A1=C4=8Diov=C3=A1?= <98467853+romanaduraciova@users.noreply.github.com> Date: Thu, 6 Aug 2026 15:09:42 +0200 Subject: [PATCH 01/11] feat: move theme state to url --- bun.lock | 3 - lib/components/primitives/sonner.tsx | 4 - package.json | 1 - src/app/layout.tsx | 330 +++++++++++++-------------- src/components/ThemeInitializer.tsx | 39 ---- src/components/ThemeProvider.tsx | 27 --- src/components/ThemeSelector.tsx | 39 +--- src/hooks/use-theme-switcher.ts | 196 +++++++--------- vite.config.lib.ts | 1 - 9 files changed, 250 insertions(+), 390 deletions(-) delete mode 100644 src/components/ThemeInitializer.tsx delete mode 100644 src/components/ThemeProvider.tsx diff --git a/bun.lock b/bun.lock index 23e452b..3ad600c 100644 --- a/bun.lock +++ b/bun.lock @@ -77,7 +77,6 @@ "date-fns": "^4.0.0", "embla-carousel-react": "^8.0.0", "input-otp": "^1.0.0", - "next-themes": "^0.3.0 || ^0.4.0", "react": "^18.0.0 || ^19.0.0", "react-day-picker": "^9.13.0", "react-dom": "^18.0.0 || ^19.0.0", @@ -1493,8 +1492,6 @@ "next-mdx-remote": ["next-mdx-remote@6.0.0", "", { "dependencies": { "@babel/code-frame": "^7.23.5", "@mdx-js/mdx": "^3.0.1", "@mdx-js/react": "^3.0.1", "unist-util-remove": "^4.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.1", "vfile-matter": "^5.0.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-cJEpEZlgD6xGjB4jL8BnI8FaYdN9BzZM4NwadPe1YQr7pqoWjg9EBCMv3nXBkuHqMRfv2y33SzUsuyNh9LFAQQ=="], - "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="], "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], diff --git a/lib/components/primitives/sonner.tsx b/lib/components/primitives/sonner.tsx index 30d08f7..fce13a5 100644 --- a/lib/components/primitives/sonner.tsx +++ b/lib/components/primitives/sonner.tsx @@ -7,15 +7,11 @@ import { OctagonXIcon, TriangleAlertIcon, } from "lucide-react"; -import { useTheme } from "next-themes"; import { Toaster as Sonner, type ToasterProps } from "sonner"; const Toaster = ({ ...props }: ToasterProps) => { - const { theme = "system" } = useTheme(); - return ( , diff --git a/package.json b/package.json index dfbefed..cce3500 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,6 @@ "date-fns": "^4.0.0", "embla-carousel-react": "^8.0.0", "input-otp": "^1.0.0", - "next-themes": "^0.3.0 || ^0.4.0", "react": "^18.0.0 || ^19.0.0", "react-day-picker": "^9.13.0", "react-dom": "^18.0.0 || ^19.0.0", diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 62c6948..7b34e66 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import "./globals.css"; -import { Inter, Roboto, Montserrat } from "next/font/google"; +import { Inter } from "next/font/google"; import Image from "next/image"; import { Header, @@ -29,34 +29,13 @@ import EinfraLogoLight from "../../public/einfra-logo.svg"; import EinfraLogoDark from "../../public/e-INFRA_logo_RGB_bila.svg"; import type { StaticImageData } from "next/image"; import Link from "next/link"; -import { ThemeProvider } from "../components/ThemeProvider"; import { ThemeSelector } from "../components/ThemeSelector"; -import { ThemeInitializer } from "../components/ThemeInitializer"; import { SearchTrigger } from "../components/search/SearchTrigger"; -import { MobileNav } from "../components/MobileNav"; import { Button } from "../../lib/components/primitives/button"; import { Package } from "lucide-react"; -const NAV_ITEMS = [ - { href: "/", label: "Home" }, - { href: "/docs/foundations", label: "Foundations" }, - { href: "/docs/components", label: "Components" }, -]; - const inter = Inter({ subsets: ["latin"] }); -// Roboto powers the EOSC theme; Montserrat is used for ELTER headings. -// Exposed as CSS variables consumed by the branding themes in lib_public/*.css. -const roboto = Roboto({ - subsets: ["latin"], - weight: ["100", "300", "400", "500", "700", "900"], - variable: "--font-roboto", -}); -const montserrat = Montserrat({ - subsets: ["latin"], - variable: "--font-montserrat", -}); - export const metadata: Metadata = { title: "Design System e-INFRA CZ", description: "Design system showcase web for e-INFRA CZ", @@ -68,18 +47,43 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - +