Skip to content

Commit 3332f68

Browse files
committed
fix: remove globals wrapper from Chromatic theme modes
Custom decorators that read from context.globals.theme need mode objects to directly set the global name, not wrap it under 'globals'. Also fixes formatting in ThemeContext files.
1 parent 95b8022 commit 3332f68

File tree

3 files changed

+17
-11
lines changed

3 files changed

+17
-11
lines changed

.storybook/preview.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ const preview: Preview = {
9999
},
100100
chromatic: {
101101
modes: {
102-
dark: { globals: { theme: "dark" } },
103-
light: { globals: { theme: "light" } },
102+
dark: { theme: "dark" },
103+
light: { theme: "light" },
104104
},
105105
},
106106
},

src/browser/contexts/ThemeContext.test.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ const TestComponent = () => {
2222
return (
2323
<div>
2424
<span data-testid="theme-value">{theme}</span>
25-
<button onClick={toggleTheme} data-testid="toggle-btn">Toggle</button>
25+
<button onClick={toggleTheme} data-testid="toggle-btn">
26+
Toggle
27+
</button>
2628
</div>
2729
);
2830
};
@@ -59,7 +61,7 @@ describe("ThemeContext", () => {
5961
afterEach(() => {
6062
cleanup();
6163
if (typeof window !== "undefined") {
62-
window.localStorage.clear();
64+
window.localStorage.clear();
6365
}
6466
});
6567

@@ -91,15 +93,15 @@ describe("ThemeContext", () => {
9193
});
9294

9395
test("forcedTheme overrides persisted state", () => {
94-
window.localStorage.setItem(UI_THEME_KEY, JSON.stringify("light"));
95-
96-
const { getByTestId } = render(
96+
window.localStorage.setItem(UI_THEME_KEY, JSON.stringify("light"));
97+
98+
const { getByTestId } = render(
9799
<ThemeProvider forcedTheme="dark">
98100
<TestComponent />
99101
</ThemeProvider>
100102
);
101103
expect(getByTestId("theme-value").textContent).toBe("dark");
102-
104+
103105
// Check that localStorage is still light (since forcedTheme doesn't write to storage by itself)
104106
expect(JSON.parse(window.localStorage.getItem(UI_THEME_KEY)!)).toBe("light");
105107
});

src/browser/contexts/ThemeContext.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,13 @@ export function ThemeProvider({
5858
children: ReactNode;
5959
forcedTheme?: ThemeMode;
6060
}) {
61-
const [persistedTheme, setTheme] = usePersistedState<ThemeMode>(UI_THEME_KEY, resolveSystemTheme(), {
62-
listener: true,
63-
});
61+
const [persistedTheme, setTheme] = usePersistedState<ThemeMode>(
62+
UI_THEME_KEY,
63+
resolveSystemTheme(),
64+
{
65+
listener: true,
66+
}
67+
);
6468

6569
const theme = forcedTheme ?? persistedTheme;
6670

0 commit comments

Comments
 (0)