Merge branch 'main' into ashwin/errorlog

This commit is contained in:
Justin Spahr-Summers
2024-11-21 10:30:29 +00:00
5 changed files with 40 additions and 23 deletions

View File

@@ -12,11 +12,11 @@ import {
ListPromptsResultSchema, ListPromptsResultSchema,
ListResourcesResultSchema, ListResourcesResultSchema,
ListResourceTemplatesResultSchema, ListResourceTemplatesResultSchema,
Request,
ListRootsRequestSchema, ListRootsRequestSchema,
ListToolsResultSchema, ListToolsResultSchema,
ProgressNotificationSchema, ProgressNotificationSchema,
ReadResourceResultSchema, ReadResourceResultSchema,
Request,
Resource, Resource,
ResourceTemplate, ResourceTemplate,
Result, Result,
@@ -27,16 +27,11 @@ import {
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { import {
StderrNotificationSchema,
StdErrNotification,
Notification, Notification,
StdErrNotification,
StderrNotificationSchema,
} from "./lib/notificationTypes"; } from "./lib/notificationTypes";
// Add dark mode class based on system preference
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
document.documentElement.classList.add("dark");
}
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { import {
Bell, Bell,
@@ -45,8 +40,6 @@ import {
Hammer, Hammer,
Hash, Hash,
MessageSquare, MessageSquare,
Send,
Terminal,
} from "lucide-react"; } from "lucide-react";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
@@ -61,6 +54,7 @@ import RootsTab from "./components/RootsTab";
import SamplingTab, { PendingRequest } from "./components/SamplingTab"; import SamplingTab, { PendingRequest } from "./components/SamplingTab";
import Sidebar from "./components/Sidebar"; import Sidebar from "./components/Sidebar";
import ToolsTab from "./components/ToolsTab"; import ToolsTab from "./components/ToolsTab";
import useDarkModeSync from "./lib/useDarkModeSync";
const DEFAULT_REQUEST_TIMEOUT_MSEC = 10000; const DEFAULT_REQUEST_TIMEOUT_MSEC = 10000;
@@ -150,6 +144,8 @@ const App = () => {
const dragStartY = useRef<number>(0); const dragStartY = useRef<number>(0);
const dragStartHeight = useRef<number>(0); const dragStartHeight = useRef<number>(0);
useDarkModeSync();
const handleDragStart = useCallback( const handleDragStart = useCallback(
(e: React.MouseEvent) => { (e: React.MouseEvent) => {
setIsDragging(true); setIsDragging(true);
@@ -496,18 +492,10 @@ const App = () => {
<MessageSquare className="w-4 h-4 mr-2" /> <MessageSquare className="w-4 h-4 mr-2" />
Prompts Prompts
</TabsTrigger> </TabsTrigger>
<TabsTrigger value="requests" disabled>
<Send className="w-4 h-4 mr-2" />
Requests
</TabsTrigger>
<TabsTrigger value="tools"> <TabsTrigger value="tools">
<Hammer className="w-4 h-4 mr-2" /> <Hammer className="w-4 h-4 mr-2" />
Tools Tools
</TabsTrigger> </TabsTrigger>
<TabsTrigger value="console" disabled>
<Terminal className="w-4 h-4 mr-2" />
Console
</TabsTrigger>
<TabsTrigger value="ping"> <TabsTrigger value="ping">
<Bell className="w-4 h-4 mr-2" /> <Bell className="w-4 h-4 mr-2" />
Ping Ping

View File

@@ -20,8 +20,8 @@ const ListPane = <T extends object>({
isButtonDisabled, isButtonDisabled,
}: ListPaneProps<T>) => ( }: ListPaneProps<T>) => (
<div className="bg-card rounded-lg shadow"> <div className="bg-card rounded-lg shadow">
<div className="p-4 border-b border-gray-200"> <div className="p-4 border-b border-gray-200 dark:border-gray-700">
<h3 className="font-semibold">{title}</h3> <h3 className="font-semibold dark:text-white">{title}</h3>
</div> </div>
<div className="p-4"> <div className="p-4">
<Button <Button
@@ -36,7 +36,7 @@ const ListPane = <T extends object>({
{items.map((item, index) => ( {items.map((item, index) => (
<div <div
key={index} key={index}
className="flex items-center p-2 rounded hover:bg-gray-50 cursor-pointer" className="flex items-center p-2 rounded hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer"
onClick={() => setSelectedItem(item)} onClick={() => setSelectedItem(item)}
> >
{renderItem(item)} {renderItem(item)}

View File

@@ -142,7 +142,7 @@ const ResourcesTab = ({
<AlertDescription>{error}</AlertDescription> <AlertDescription>{error}</AlertDescription>
</Alert> </Alert>
) : selectedResource ? ( ) : selectedResource ? (
<pre className="bg-gray-50 p-4 rounded text-sm overflow-auto max-h-96 whitespace-pre-wrap break-words"> <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">
{resourceContent} {resourceContent}
</pre> </pre>
) : selectedTemplate ? ( ) : selectedTemplate ? (

View File

@@ -10,7 +10,7 @@ const buttonVariants = cva(
variants: { variants: {
variant: { variant: {
default: default:
"bg-primary text-primary-foreground shadow hover:bg-primary/90", "bg-primary text-primary-foreground shadow hover:bg-primary/90 dark:bg-gray-800 dark:text-white dark:hover:bg-gray-700",
destructive: destructive:
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
outline: outline:

View File

@@ -0,0 +1,29 @@
import { useEffect } from "react";
// Listen for changes to the user's preferred color scheme
const useDarkModeSync = () => {
useEffect(() => {
const darkModeMediaQuery = window.matchMedia(
"(prefers-color-scheme: dark)",
);
const handleDarkModeChange = (e: MediaQueryListEvent) => {
if (e.matches) {
document.documentElement.classList.add("dark");
} else {
document.documentElement.classList.remove("dark");
}
};
if (darkModeMediaQuery.matches) {
document.documentElement.classList.add("dark");
}
darkModeMediaQuery.addEventListener("change", handleDarkModeChange);
return () => {
darkModeMediaQuery.removeEventListener("change", handleDarkModeChange);
};
}, []);
};
export default useDarkModeSync;