import React, { useState, useEffect } from 'react'; import ReactDOM from 'react-dom/client'; import { Button, SessionDrawer, SessionSidebar, TimelineFeed, getSampleAgentSessions, getSampleAgentSteps } from '@ra-aid/common'; // The CSS import happens through the common package's index.ts // Theme management helper function const setupTheme = () => { // Check if theme preference is stored in localStorage const storedTheme = localStorage.getItem('theme'); // Default to dark mode unless explicitly set to light const isDark = storedTheme ? storedTheme === 'dark' : true; // Apply theme class to document element (html) for better CSS specificity if (isDark) { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } // Store the current theme preference localStorage.setItem('theme', isDark ? 'dark' : 'light'); return isDark; }; const App = () => { // State for drawer open/close const [isDrawerOpen, setIsDrawerOpen] = useState(false); // State for selected session const [selectedSessionId, setSelectedSessionId] = useState(null); // State for theme (dark is default) const [isDarkTheme, setIsDarkTheme] = useState(true); // Get sample data const sessions = getSampleAgentSessions(); const allSteps = getSampleAgentSteps(); // Set up theme on component mount useEffect(() => { const isDark = setupTheme(); setIsDarkTheme(isDark); }, []); // Set initial selected session if none selected useEffect(() => { if (!selectedSessionId && sessions.length > 0) { setSelectedSessionId(sessions[0].id); } }, [sessions, selectedSessionId]); // Filter steps for selected session const selectedSessionSteps = selectedSessionId ? allSteps.filter(step => sessions.find(s => s.id === selectedSessionId)?.steps.some(s => s.id === step.id)) : []; // Handle session selection const handleSessionSelect = (sessionId: string) => { setSelectedSessionId(sessionId); setIsDrawerOpen(false); // Close drawer on selection (mobile) }; // Toggle theme function const toggleTheme = () => { const newIsDark = !isDarkTheme; setIsDarkTheme(newIsDark); // Update document element class if (newIsDark) { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } // Save to localStorage localStorage.setItem('theme', newIsDark ? 'dark' : 'light'); }; return (
{/* Header */}

RA-Aid

{/* Theme toggle button */} {/* Mobile drawer toggle - show only on small screens */}
{/* Main content */}
{/* Desktop sidebar - hidden on mobile */} {/* Mobile drawer */} {/* Main content area */}
{selectedSessionId ? ( <>

Session: {sessions.find(s => s.id === selectedSessionId)?.name || 'Unknown'}

) : (

Select a session to view details

)}

Built with shadcn/ui components from the RA-Aid common package

); }; // Initialize theme before rendering the app setupTheme(); const root = ReactDOM.createRoot(document.getElementById('root')!); root.render( );