diff --git a/ui/src/themes/useCurrentTheme.js b/ui/src/themes/useCurrentTheme.js
index 9793d1e15..0d986033d 100644
--- a/ui/src/themes/useCurrentTheme.js
+++ b/ui/src/themes/useCurrentTheme.js
@@ -42,6 +42,12 @@ const useCurrentTheme = () => {
document.head.removeChild(style)
}
}
+
+ // Set body background color to match theme (fixes white background on pull-to-refresh)
+ const isDark = theme.palette?.type === 'dark'
+ const bgColor =
+ theme.palette?.background?.default || (isDark ? '#303030' : '#fafafa')
+ document.body.style.backgroundColor = bgColor
}, [theme])
return theme
diff --git a/ui/src/themes/useCurrentTheme.test.jsx b/ui/src/themes/useCurrentTheme.test.jsx
index 03775d34f..65c3be8c6 100644
--- a/ui/src/themes/useCurrentTheme.test.jsx
+++ b/ui/src/themes/useCurrentTheme.test.jsx
@@ -15,6 +15,10 @@ function createMatchMedia(theme) {
})
}
+beforeEach(() => {
+ document.body.style.backgroundColor = ''
+})
+
describe('useCurrentTheme', () => {
describe('with user preference theme as light', () => {
beforeAll(() => {
@@ -117,4 +121,44 @@ describe('useCurrentTheme', () => {
expect(result.current.themeName).toMatch('Spotify-ish')
})
})
+ describe('body background color', () => {
+ beforeAll(() => {
+ window.matchMedia = createMatchMedia('dark')
+ })
+ it('sets body background for dark theme', () => {
+ renderHook(() => useCurrentTheme(), {
+ wrapper: ({ children }) => (
+
+ {children}
+
+ ),
+ })
+ // Dark theme uses MUI default dark background
+ expect(document.body.style.backgroundColor).toBe('rgb(48, 48, 48)')
+ })
+ it('sets body background for light theme', () => {
+ renderHook(() => useCurrentTheme(), {
+ wrapper: ({ children }) => (
+
+ {children}
+
+ ),
+ })
+ // Light theme uses MUI default light background
+ expect(document.body.style.backgroundColor).toBe('rgb(250, 250, 250)')
+ })
+ it('sets body background for theme with custom background', () => {
+ renderHook(() => useCurrentTheme(), {
+ wrapper: ({ children }) => (
+
+ {children}
+
+ ),
+ })
+ // Spotify theme has explicit background.default: #121212
+ expect(document.body.style.backgroundColor).toBe('rgb(18, 18, 18)')
+ })
+ })
})