From af182913e083520e1f064a709c84b8393c454793 Mon Sep 17 00:00:00 2001 From: Rajarshee Chatterjee Date: Mon, 8 Dec 2025 23:55:44 +0530 Subject: [PATCH] feat: Add Dark Theme Support --- src/App.tsx | 3 +++ src/components/novel-card.tsx | 4 ++-- src/components/parse-novel.tsx | 6 ++--- src/components/plugin-header.tsx | 23 +++++++++++++++++- src/components/popular-novels.tsx | 4 ++-- src/hooks/useTheme.ts | 18 ++++++++++++++ src/pages/home.tsx | 2 +- src/store/dialogStore.ts | 39 ------------------------------- src/store/index.ts | 29 ++++++++++++----------- src/store/overlayStore.ts | 30 ------------------------ 10 files changed, 66 insertions(+), 92 deletions(-) create mode 100644 src/hooks/useTheme.ts delete mode 100644 src/store/dialogStore.ts delete mode 100644 src/store/overlayStore.ts diff --git a/src/App.tsx b/src/App.tsx index 68a0634..f2e7996 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,8 +2,11 @@ import React from 'react'; import { Toaster } from '@/components/ui/sonner'; import Home from './pages/home'; import { TooltipProvider } from './components/ui/tooltip'; +import { useTheme } from './hooks/useTheme'; function App() { + useTheme(); + return (
diff --git a/src/components/novel-card.tsx b/src/components/novel-card.tsx index 7e5ee74..e826035 100644 --- a/src/components/novel-card.tsx +++ b/src/components/novel-card.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Copy, Zap } from 'lucide-react'; +import { Copy, ArrowRight } from 'lucide-react'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; @@ -60,7 +60,7 @@ export function NovelCard({ novel, onParse }: NovelCardProps) { className="flex-1 h-8 px-2" onClick={() => onParse(novel.path)} > - + diff --git a/src/components/parse-novel.tsx b/src/components/parse-novel.tsx index 5b2bdc5..77c7dfb 100644 --- a/src/components/parse-novel.tsx +++ b/src/components/parse-novel.tsx @@ -4,7 +4,7 @@ import { ChevronLeft, ChevronRight, Copy, - Zap, + ArrowRight, Download, } from 'lucide-react'; import { toast } from 'sonner'; @@ -506,11 +506,11 @@ export default function ParseNovelSection({ handleParseChapter(chapter.path) } > - + -

Parse chapter

+

Open in Parse Chapter tab

diff --git a/src/components/plugin-header.tsx b/src/components/plugin-header.tsx index bd25054..55fbb92 100644 --- a/src/components/plugin-header.tsx +++ b/src/components/plugin-header.tsx @@ -1,14 +1,25 @@ import React from 'react'; +import { Moon, Sun } from 'lucide-react'; import { Plugin } from '@/types/plugin'; +import { Button } from '@/components/ui/button'; +import { useTheme } from '@/hooks/useTheme'; type PluginHeaderProps = { selectedPlugin?: Plugin.PluginBase; }; export default function PluginHeader({ selectedPlugin }: PluginHeaderProps) { + const { theme, setTheme } = useTheme(); + + const toggleTheme = () => { + setTheme(theme === 'dark' ? 'light' : 'dark'); + }; + + const isDark = theme === 'dark'; + return ( -
+
@@ -23,6 +34,16 @@ export default function PluginHeader({ selectedPlugin }: PluginHeaderProps) {

+
); diff --git a/src/components/popular-novels.tsx b/src/components/popular-novels.tsx index c8d5f75..d27729e 100644 --- a/src/components/popular-novels.tsx +++ b/src/components/popular-novels.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react'; -import { Filter, Zap } from 'lucide-react'; +import { Filter, BookOpen } from 'lucide-react'; import { FiltersSheet } from '@/components/filters/filters-sheet'; import { NovelCard } from '@/components/novel-card'; @@ -182,7 +182,7 @@ export default function PopularNovelsSection({ ) : novels.length === 0 ? (
- +

{plugin ? 'No novels to display' : 'No plugin selected'} diff --git a/src/hooks/useTheme.ts b/src/hooks/useTheme.ts new file mode 100644 index 0000000..6afec6d --- /dev/null +++ b/src/hooks/useTheme.ts @@ -0,0 +1,18 @@ +import { useEffect } from 'react'; +import { useAppStore } from '@/store'; + +export function useTheme() { + const theme = useAppStore(state => state.theme); + const setTheme = useAppStore(state => state.setTheme); + + useEffect(() => { + const root = document.documentElement; + if (theme === 'dark') { + root.classList.add('dark'); + } else { + root.classList.remove('dark'); + } + }, [theme]); + + return { theme, setTheme }; +} diff --git a/src/pages/home.tsx b/src/pages/home.tsx index d4fcb94..97a9d67 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -32,7 +32,7 @@ function Home() {
-