Skip to content

Commit dfc1048

Browse files
authored
Merge pull request #69 from modelcontextprotocol/ashwin/darkmode
dark mode fixes
2 parents 7dbaee4 + 78182ea commit dfc1048

File tree

6 files changed

+41
-13
lines changed

6 files changed

+41
-13
lines changed

client/src/App.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ import {
2323
Tool,
2424
} from "@modelcontextprotocol/sdk/types.js";
2525
import { useCallback, useEffect, useRef, useState } from "react";
26-
// Add dark mode class based on system preference
27-
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
28-
document.documentElement.classList.add("dark");
29-
}
3026

3127
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
3228
import {
@@ -52,6 +48,7 @@ import RootsTab from "./components/RootsTab";
5248
import SamplingTab, { PendingRequest } from "./components/SamplingTab";
5349
import Sidebar from "./components/Sidebar";
5450
import ToolsTab from "./components/ToolsTab";
51+
import useDarkModeSync from "./lib/useDarkModeSync";
5552

5653
const DEFAULT_REQUEST_TIMEOUT_MSEC = 10000;
5754

@@ -138,6 +135,8 @@ const App = () => {
138135
const dragStartY = useRef<number>(0);
139136
const dragStartHeight = useRef<number>(0);
140137

138+
useDarkModeSync();
139+
141140
const handleDragStart = useCallback(
142141
(e: React.MouseEvent) => {
143142
setIsDragging(true);

client/src/components/ListPane.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ const ListPane = <T extends object>({
2020
isButtonDisabled,
2121
}: ListPaneProps<T>) => (
2222
<div className="bg-card rounded-lg shadow">
23-
<div className="p-4 border-b border-gray-200">
24-
<h3 className="font-semibold">{title}</h3>
23+
<div className="p-4 border-b border-gray-200 dark:border-gray-700">
24+
<h3 className="font-semibold dark:text-white">{title}</h3>
2525
</div>
2626
<div className="p-4">
2727
<Button
@@ -36,7 +36,7 @@ const ListPane = <T extends object>({
3636
{items.map((item, index) => (
3737
<div
3838
key={index}
39-
className="flex items-center p-2 rounded hover:bg-gray-50 cursor-pointer"
39+
className="flex items-center p-2 rounded hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer"
4040
onClick={() => setSelectedItem(item)}
4141
>
4242
{renderItem(item)}

client/src/components/ResourcesTab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ const ResourcesTab = ({
142142
<AlertDescription>{error}</AlertDescription>
143143
</Alert>
144144
) : selectedResource ? (
145-
<pre className="bg-gray-50 p-4 rounded text-sm overflow-auto max-h-96 whitespace-pre-wrap break-words">
145+
<pre className="bg-gray-50 dark:bg-gray-800 p-4 rounded text-sm overflow-auto max-h-96 whitespace-pre-wrap break-words text-gray-900 dark:text-gray-100">
146146
{resourceContent}
147147
</pre>
148148
) : selectedTemplate ? (

client/src/components/ui/button.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const buttonVariants = cva(
1010
variants: {
1111
variant: {
1212
default:
13-
"bg-primary text-primary-foreground shadow hover:bg-primary/90",
13+
"bg-primary text-primary-foreground shadow hover:bg-primary/90 dark:bg-gray-800 dark:text-white dark:hover:bg-gray-700",
1414
destructive:
1515
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
1616
outline:

client/src/lib/useDarkModeSync.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { useEffect } from "react";
2+
3+
// Listen for changes to the user's preferred color scheme
4+
const useDarkModeSync = () => {
5+
useEffect(() => {
6+
const darkModeMediaQuery = window.matchMedia(
7+
"(prefers-color-scheme: dark)",
8+
);
9+
const handleDarkModeChange = (e: MediaQueryListEvent) => {
10+
if (e.matches) {
11+
document.documentElement.classList.add("dark");
12+
} else {
13+
document.documentElement.classList.remove("dark");
14+
}
15+
};
16+
17+
if (darkModeMediaQuery.matches) {
18+
document.documentElement.classList.add("dark");
19+
}
20+
21+
darkModeMediaQuery.addEventListener("change", handleDarkModeChange);
22+
23+
return () => {
24+
darkModeMediaQuery.removeEventListener("change", handleDarkModeChange);
25+
};
26+
}, []);
27+
};
28+
29+
export default useDarkModeSync;

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)