diff --git a/.storybook/preview.js b/.storybook/preview.js index 1f8bd3e3724..46c76430491 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -1,3 +1,42 @@ +import React, { useEffect } from "react"; +import "../frontend/index.scss"; + +export const globalTypes = { + theme: { + description: "Toggle dark/light mode", + defaultValue: "light", + toolbar: { + items: [ + { value: "light", icon: "sun", title: "Light mode" }, + { value: "dark", icon: "moon", title: "Dark mode" }, + ], + dynamicTitle: true, + }, + }, +}; + +const applyTheme = (isDark) => { + document.body.classList.toggle("dark-mode", isDark); + document.body.style.backgroundColor = isDark ? "var(--core-fleet-white)" : ""; + document.body.style.color = isDark ? "var(--core-fleet-black)" : ""; + + document.querySelectorAll(".docs-story").forEach((el) => { + el.style.backgroundColor = isDark ? "var(--core-fleet-white)" : ""; + }); +}; + +const withTheme = (Story, context) => { + const isDark = context.globals.theme === "dark"; + + useEffect(() => { + applyTheme(isDark); + }, [isDark]); + + return ; +}; + +export const decorators = [withTheme]; + export const parameters = { controls: { matchers: { @@ -6,4 +45,5 @@ export const parameters = { }, }, }; + export const tags = ["autodocs"]; diff --git a/frontend/components/LiveQuery/TargetChipSelector/TargetChipSelector.stories.tsx b/frontend/components/LiveQuery/TargetChipSelector/TargetChipSelector.stories.tsx index f5ca496d71b..54926eed5eb 100644 --- a/frontend/components/LiveQuery/TargetChipSelector/TargetChipSelector.stories.tsx +++ b/frontend/components/LiveQuery/TargetChipSelector/TargetChipSelector.stories.tsx @@ -21,15 +21,6 @@ const meta: Meta = { action: "clicked", // Use Storybook's action to track clicks }, }, - parameters: { - backgrounds: { - default: "light", - values: [ - { name: "light", value: "#ffffff" }, - { name: "dark", value: "#333333" }, - ], - }, - }, }; export default meta; diff --git a/frontend/components/TabNav/TabNav.stories.tsx b/frontend/components/TabNav/TabNav.stories.tsx index 872f247b7f2..4d50ac3e3d7 100644 --- a/frontend/components/TabNav/TabNav.stories.tsx +++ b/frontend/components/TabNav/TabNav.stories.tsx @@ -7,21 +7,6 @@ import TabNav from "./TabNav"; const meta: Meta = { component: TabNav, title: "Components/TabNav", - parameters: { - backgrounds: { - default: "light", - values: [ - { - name: "light", - value: "#ffffff", - }, - { - name: "dark", - value: "#333333", - }, - ], - }, - }, }; export default meta; diff --git a/frontend/components/TeamsDropdown/TeamsDropdown.stories.tsx b/frontend/components/TeamsDropdown/TeamsDropdown.stories.tsx index 3e790c34c8d..dea90394169 100644 --- a/frontend/components/TeamsDropdown/TeamsDropdown.stories.tsx +++ b/frontend/components/TeamsDropdown/TeamsDropdown.stories.tsx @@ -1,3 +1,4 @@ +import React from "react"; import { Meta, StoryObj } from "@storybook/react"; import { noop } from "lodash"; @@ -6,6 +7,13 @@ import TeamsDropdown from "."; const meta: Meta = { title: "Components/TeamsDropdown", component: TeamsDropdown, + decorators: [ + (Story) => ( +
+ +
+ ), + ], args: { currentUserTeams: [ { id: 1, name: "Team 1" }, diff --git a/frontend/components/buttons/DropdownButton/DropdownButton.stories.tsx b/frontend/components/buttons/DropdownButton/DropdownButton.stories.tsx index c9ea64c01c7..2cc3f7bdc51 100644 --- a/frontend/components/buttons/DropdownButton/DropdownButton.stories.tsx +++ b/frontend/components/buttons/DropdownButton/DropdownButton.stories.tsx @@ -31,7 +31,6 @@ const meta: Meta = { variant: { options: [ "default", - "success", "alert", "pill", "link", @@ -49,17 +48,6 @@ const meta: Meta = { control: "select", }, }, - parameters: { - backgrounds: { - default: "header", - values: [ - { - name: "header", - value: "linear-gradient(270deg, #202226 0%, #353840 100%)", - }, - ], - }, - }, args: { variant: "unstyled", className: "story", diff --git a/frontend/components/buttons/DropdownButton/_styles.scss b/frontend/components/buttons/DropdownButton/_styles.scss index 3c9ade3d81d..8ff3f7cf616 100644 --- a/frontend/components/buttons/DropdownButton/_styles.scss +++ b/frontend/components/buttons/DropdownButton/_styles.scss @@ -69,3 +69,9 @@ margin-top: 1px; } } + +// Override the chevron icon stroke to inherit the button's text color +// so it adapts correctly in dark mode +.dropdown-button .icon svg path { + stroke: currentColor; +}