11import { QueryClientProvider } from '@tanstack/react-query'
22import { useCallback , useEffect , useMemo , useState } from 'react'
3- import { HotkeysProvider , LookupModal , Omnibar , SequenceModal , ShortcutsModal , useHotkeysContext } from 'use-kbd'
3+ import { FaGithub } from 'react-icons/fa'
4+ import { MdBrightnessAuto , MdDarkMode , MdLightMode } from 'react-icons/md'
5+ import { HotkeysProvider , LookupModal , Omnibar , SequenceModal , ShortcutsModal , SpeedDial } from 'use-kbd'
46import { useUrlState } from 'use-prms'
57import 'use-kbd/styles.css'
68import { AwairChart } from './components/AwairChart'
79import { DevicePoller , type DeviceDataResult } from './components/DevicePoller'
810import { TableNavigationRenderer , YAxisMetricsRenderer } from './components/groupRenderers'
9- import { MobileSpeedDial } from './components/MobileSpeedDial'
10- import { ThemeToggle } from './components/ThemeToggle'
1111import { KbdTooltip } from './components/Tooltip'
1212import { HOTKEY_GROUPS , HOTKEY_GROUP_ORDER } from './config/hotkeyConfig'
13- import { ThemeProvider } from './contexts/ThemeContext'
13+ import { ThemeProvider , useTheme } from './contexts/ThemeContext'
1414import { useDevices } from './hooks/useDevices'
1515import { queryClient } from './lib/queryClient'
1616import { boolParam , deviceIdsParam , timeRangeParam , refetchIntervalParam , smoothingParam } from './lib/urlParams'
@@ -24,9 +24,7 @@ const GROUP_RENDERERS = {
2424
2525function AppContent ( ) {
2626 const [ isOgMode ] = useUrlState ( 'og' , boolParam )
27-
28- // Only need openModal for ThemeToggle; ShortcutsModal uses context internally
29- const { openModal } = useHotkeysContext ( )
27+ const { theme, setTheme } = useTheme ( )
3028
3129 // Add og-mode class to body for CSS overrides
3230 useEffect ( ( ) => {
@@ -212,8 +210,15 @@ function AppContent() {
212210 {
213211 ! isOgMode &&
214212 < >
215- < ThemeToggle onOpenShortcuts = { openModal } />
216- { /* Modal and Omnibar - all props come from HotkeysContext */ }
213+ < SpeedDial actions = { [
214+ { key : 'github' , label : 'GitHub' , icon : < FaGithub /> , href : 'https://github.com/runsascoded/awair' } ,
215+ {
216+ key : 'theme' ,
217+ label : `Theme: ${ theme === 'light' ? 'Light' : theme === 'dark' ? 'Dark' : 'System' } ` ,
218+ icon : theme === 'light' ? < MdLightMode /> : theme === 'dark' ? < MdDarkMode /> : < MdBrightnessAuto /> ,
219+ onClick : ( ) => setTheme ( theme === 'light' ? 'dark' : theme === 'dark' ? 'system' : 'light' ) ,
220+ } ,
221+ ] } />
217222 < ShortcutsModal
218223 groups = { HOTKEY_GROUPS }
219224 groupOrder = { HOTKEY_GROUP_ORDER }
@@ -225,7 +230,6 @@ function AppContent() {
225230 < Omnibar placeholder = "Search actions..." maxResults = { 15 } />
226231 < LookupModal />
227232 < SequenceModal />
228- < MobileSpeedDial />
229233 </ >
230234 }
231235 </ div >
0 commit comments