diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx index 312e712..e5b15fc 100644 --- a/src/components/Navigation.tsx +++ b/src/components/Navigation.tsx @@ -1,4 +1,5 @@ import type { TabId } from "./Tab" +import { useTheme } from "@/context/ThemeContext" type NavigationProps = { activeTab: TabId @@ -6,9 +7,10 @@ type NavigationProps = { } export function Navigation(props: NavigationProps) { + const { theme } = useTheme(); return ( - + {props.activeTab === "feed" ? "[" : " "}Feed{props.activeTab === "feed" ? "]" : " "} {props.activeTab === "shows" ? "[" : " "}My Shows{props.activeTab === "shows" ? "]" : " "} diff --git a/src/components/ShortcutHelp.tsx b/src/components/ShortcutHelp.tsx index ceb2b26..d561662 100644 --- a/src/components/ShortcutHelp.tsx +++ b/src/components/ShortcutHelp.tsx @@ -1,24 +1,26 @@ import { shortcuts } from "@/config/shortcuts"; +import { useTheme } from "@/context/ThemeContext"; export function ShortcutHelp() { + const { theme } = useTheme(); return ( - {shortcuts[0]?.keys ?? ""} - {shortcuts[0]?.action ?? ""} + {shortcuts[0]?.keys ?? ""} + {shortcuts[0]?.action ?? ""} - {shortcuts[1]?.keys ?? ""} - {shortcuts[1]?.action ?? ""} + {shortcuts[1]?.keys ?? ""} + {shortcuts[1]?.action ?? ""} - {shortcuts[2]?.keys ?? ""} - {shortcuts[2]?.action ?? ""} + {shortcuts[2]?.keys ?? ""} + {shortcuts[2]?.action ?? ""} - {shortcuts[3]?.keys ?? ""} - {shortcuts[3]?.action ?? ""} + {shortcuts[3]?.keys ?? ""} + {shortcuts[3]?.action ?? ""} diff --git a/src/pages/Feed/FeedDetail.tsx b/src/pages/Feed/FeedDetail.tsx index dd3205e..83edd53 100644 --- a/src/pages/Feed/FeedDetail.tsx +++ b/src/pages/Feed/FeedDetail.tsx @@ -129,10 +129,10 @@ export function FeedDetail(props: FeedDetailProps) { {/* Episodes header */} - + Episodes - ({episodes().length} total) + ({episodes().length} total) {/* Episode list */} diff --git a/src/pages/Player/PlayerPage.tsx b/src/pages/Player/PlayerPage.tsx index f322c85..e4c54c7 100644 --- a/src/pages/Player/PlayerPage.tsx +++ b/src/pages/Player/PlayerPage.tsx @@ -29,7 +29,7 @@ export function PlayerPage(props: PageProps) { return ( - + Now Playing @@ -40,7 +40,7 @@ export function PlayerPage(props: PageProps) { {audio.error() && {audio.error()}} - + {audio.currentEpisode()?.title} diff --git a/src/pages/Player/RealtimeWaveform.tsx b/src/pages/Player/RealtimeWaveform.tsx index af5c6f8..ae234c9 100644 --- a/src/pages/Player/RealtimeWaveform.tsx +++ b/src/pages/Player/RealtimeWaveform.tsx @@ -15,6 +15,7 @@ import { } from "@/utils/cavacore"; import { AudioStreamReader } from "@/utils/audio-stream-reader"; import { useAudio } from "@/hooks/useAudio"; +import { useTheme } from "@/context/ThemeContext"; // ── Types ──────────────────────────────────────────────────────────── @@ -44,6 +45,7 @@ const SAMPLES_PER_FRAME = 512; // ── Component ──────────────────────────────────────────────────────── export function RealtimeWaveform(props: RealtimeWaveformProps) { + const { theme } = useTheme(); const audio = useAudio(); // Frequency bar values (0.0–1.0 per bar) @@ -247,8 +249,8 @@ export function RealtimeWaveform(props: RealtimeWaveformProps) { }; return ( - + {renderLine()} ); -} +} \ No newline at end of file diff --git a/src/pages/Search/SearchPage.tsx b/src/pages/Search/SearchPage.tsx index c727bd9..da70575 100644 --- a/src/pages/Search/SearchPage.tsx +++ b/src/pages/Search/SearchPage.tsx @@ -62,7 +62,7 @@ export function SearchPage(props: PageProps) { {/* Search Header */} - + Search Podcasts @@ -101,7 +101,7 @@ export function SearchPage(props: PageProps) { {/* Main Content - Results or History */} {/* Results Panel */} - + {/* History Sidebar */} - + (value: T): [() => T, (next: T) => void] => { } import { SyncStatus } from "./SyncStatus" +import { useTheme } from "@/context/ThemeContext" export function ExportDialog() { + const { theme } = useTheme(); const filename = createSignal("podcast-sync.json") const format = createSignal<"json" | "xml">("json") return ( - File: + File: - Format: + Format: format[1](index === 0 ? "json" : "xml")} /> - - Export {format[0]()} to {filename[0]()} + + Export {format[0]()} to {filename[0]()} diff --git a/src/pages/Settings/FilePicker.tsx b/src/pages/Settings/FilePicker.tsx index 08c2c0e..5caa90d 100644 --- a/src/pages/Settings/FilePicker.tsx +++ b/src/pages/Settings/FilePicker.tsx @@ -1,4 +1,5 @@ import { detectFormat } from "@/utils/file-detector"; +import { useTheme } from "@/context/ThemeContext"; type FilePickerProps = { value: string; @@ -6,6 +7,7 @@ type FilePickerProps = { }; export function FilePicker(props: FilePickerProps) { + const { theme } = useTheme(); const format = detectFormat(props.value); return ( @@ -16,7 +18,7 @@ export function FilePicker(props: FilePickerProps) { placeholder="/path/to/sync-file.json" style={{ width: 40 }} /> - Format: {format} + Format: {format} ); } diff --git a/src/pages/Settings/ImportDialog.tsx b/src/pages/Settings/ImportDialog.tsx index ef6f8d4..fb2c653 100644 --- a/src/pages/Settings/ImportDialog.tsx +++ b/src/pages/Settings/ImportDialog.tsx @@ -6,15 +6,17 @@ const createSignal = (value: T): [() => T, (next: T) => void] => { } import { FilePicker } from "./FilePicker" +import { useTheme } from "@/context/ThemeContext" export function ImportDialog() { + const { theme } = useTheme(); const filePath = createSignal("") return ( - - Import selected file + + Import selected file ) diff --git a/src/pages/Settings/LoginScreen.tsx b/src/pages/Settings/LoginScreen.tsx index 01cbe1e..1641eac 100644 --- a/src/pages/Settings/LoginScreen.tsx +++ b/src/pages/Settings/LoginScreen.tsx @@ -83,8 +83,8 @@ export function LoginScreen(props: LoginScreenProps) { }; return ( - - + + Sign In @@ -92,7 +92,7 @@ export function LoginScreen(props: LoginScreenProps) { {/* Email field */} - + Email: - + Password: @@ -158,6 +160,7 @@ export function LoginScreen(props: LoginScreenProps) { diff --git a/src/pages/Settings/PreferencesPanel.tsx b/src/pages/Settings/PreferencesPanel.tsx index fd659b5..d6f86ab 100644 --- a/src/pages/Settings/PreferencesPanel.tsx +++ b/src/pages/Settings/PreferencesPanel.tsx @@ -94,7 +94,7 @@ export function PreferencesPanel() { Theme: - + {THEME_LABELS.find((t) => t.value === settings().theme)?.label} @@ -106,7 +106,7 @@ export function PreferencesPanel() { Font Size: - + {settings().fontSize}px [Left/Right] @@ -116,7 +116,7 @@ export function PreferencesPanel() { Playback: - + {settings().playbackSpeed}x [Left/Right] @@ -128,7 +128,7 @@ export function PreferencesPanel() { > Show Explicit: - + @@ -142,7 +142,7 @@ export function PreferencesPanel() { Auto Download: - + diff --git a/src/pages/Settings/SettingsPage.tsx b/src/pages/Settings/SettingsPage.tsx index d9ee873..038777c 100644 --- a/src/pages/Settings/SettingsPage.tsx +++ b/src/pages/Settings/SettingsPage.tsx @@ -37,6 +37,7 @@ export function SettingsPage(props: PageProps) { {(section, index) => ( - + {activeSection() === SettingsPaneType.SYNC && } {activeSection() === SettingsPaneType.SOURCES && ( diff --git a/src/pages/Settings/SourceManager.tsx b/src/pages/Settings/SourceManager.tsx index 749d68e..ea9850b 100644 --- a/src/pages/Settings/SourceManager.tsx +++ b/src/pages/Settings/SourceManager.tsx @@ -166,12 +166,12 @@ export function SourceManager(props: SourceManagerProps) { const sourceLanguage = () => selectedSource()?.language || "en_us"; return ( - + - + Podcast Sources - + [Esc] Close @@ -179,7 +179,7 @@ export function SourceManager(props: SourceManagerProps) { Manage where to search for podcasts {/* Source list */} - + Sources: @@ -243,6 +243,7 @@ export function SourceManager(props: SourceManagerProps) { {/* Add new source form */} - + - + [+] Add Source diff --git a/src/pages/Settings/SyncError.tsx b/src/pages/Settings/SyncError.tsx index 4d9a79f..89cf27f 100644 --- a/src/pages/Settings/SyncError.tsx +++ b/src/pages/Settings/SyncError.tsx @@ -1,14 +1,17 @@ +import { useTheme } from "@/context/ThemeContext" + type SyncErrorProps = { message: string onRetry: () => void } export function SyncError(props: SyncErrorProps) { + const { theme } = useTheme(); return ( - {props.message} - - Retry + {props.message} + + Retry ) diff --git a/src/pages/Settings/SyncPanel.tsx b/src/pages/Settings/SyncPanel.tsx index 27a4529..be17aec 100644 --- a/src/pages/Settings/SyncPanel.tsx +++ b/src/pages/Settings/SyncPanel.tsx @@ -8,18 +8,20 @@ const createSignal = (value: T): [() => T, (next: T) => void] => { import { ImportDialog } from "./ImportDialog" import { ExportDialog } from "./ExportDialog" import { SyncStatus } from "./SyncStatus" +import { useTheme } from "@/context/ThemeContext" export function SyncPanel() { + const { theme } = useTheme(); const mode = createSignal<"import" | "export" | null>(null) return ( - mode[1]("import")}> - Import + mode[1]("import")}> + Import - mode[1]("export")}> - Export + mode[1]("export")}> + Export diff --git a/src/pages/Settings/SyncProgress.tsx b/src/pages/Settings/SyncProgress.tsx index b76cd46..8556068 100644 --- a/src/pages/Settings/SyncProgress.tsx +++ b/src/pages/Settings/SyncProgress.tsx @@ -1,8 +1,11 @@ +import { useTheme } from "@/context/ThemeContext" + type SyncProgressProps = { value: number } export function SyncProgress(props: SyncProgressProps) { + const { theme } = useTheme(); const width = 30 let filled = (props.value / 100) * width filled = filled >= 0 ? filled : 0 @@ -18,8 +21,8 @@ export function SyncProgress(props: SyncProgressProps) { return ( - {bar} - {props.value}% + {bar} + {props.value}% ) } diff --git a/src/pages/Settings/SyncStatus.tsx b/src/pages/Settings/SyncStatus.tsx index 8e81be3..b39aba3 100644 --- a/src/pages/Settings/SyncStatus.tsx +++ b/src/pages/Settings/SyncStatus.tsx @@ -7,10 +7,12 @@ const createSignal = (value: T): [() => T, (next: T) => void] => { import { SyncProgress } from "./SyncProgress" import { SyncError } from "./SyncError" +import { useTheme } from "@/context/ThemeContext" type SyncState = "idle" | "syncing" | "complete" | "error" export function SyncStatus() { + const { theme } = useTheme(); const state = createSignal("idle") const message = createSignal("Idle") const progress = createSignal(0) @@ -35,15 +37,15 @@ export function SyncStatus() { } return ( - + - Status: - {message[0]()} + Status: + {message[0]()} {state[0]() === "error" ? toggle()} /> : null} - - Cycle Status + + Cycle Status ) diff --git a/src/pages/Settings/VisualizerSettings.tsx b/src/pages/Settings/VisualizerSettings.tsx index 1f73ecf..267b4c5 100644 --- a/src/pages/Settings/VisualizerSettings.tsx +++ b/src/pages/Settings/VisualizerSettings.tsx @@ -99,7 +99,7 @@ export function VisualizerSettings() { Bars: - + {viz().bars} [Left/Right +/-8] @@ -113,7 +113,7 @@ export function VisualizerSettings() { > Auto Sensitivity: - + @@ -127,7 +127,7 @@ export function VisualizerSettings() { Noise Reduction: - + {viz().noiseReduction.toFixed(2)} [Left/Right +/-0.05] @@ -139,7 +139,7 @@ export function VisualizerSettings() { > Low Cutoff: - + {viz().lowCutOff} Hz [Left/Right +/-10] @@ -151,7 +151,7 @@ export function VisualizerSettings() { > High Cutoff: - + {viz().highCutOff} Hz [Left/Right +/-500]