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;
+}