| 'use client'; |
|
|
| import { ThemeProvider } from 'next-themes'; |
| import { useState, createContext, useEffect } from 'react'; |
| import { AuthProvider } from '@/components/AuthProvider'; |
| import { ReactQueryProvider } from '@/providers/react-query-provider'; |
| import { dehydrate, QueryClient } from '@tanstack/react-query'; |
|
|
| export interface ParsedTag { |
| tagName: string; |
| attributes: Record<string, string>; |
| content: string; |
| isClosing: boolean; |
| id: string; |
| rawMatch?: string; |
| timestamp?: number; |
|
|
| |
| resultTag?: ParsedTag; |
| isToolCall?: boolean; |
| isPaired?: boolean; |
| status?: 'running' | 'completed' | 'error'; |
|
|
| |
| vncPreview?: string; |
| } |
|
|
| |
| export const ToolCallsContext = createContext<{ |
| toolCalls: ParsedTag[]; |
| setToolCalls: React.Dispatch<React.SetStateAction<ParsedTag[]>>; |
| }>({ |
| toolCalls: [], |
| setToolCalls: () => { }, |
| }); |
|
|
| export function Providers({ children }: { children: React.ReactNode }) { |
| |
| const [toolCalls, setToolCalls] = useState<ParsedTag[]>([]); |
| const queryClient = new QueryClient(); |
| const dehydratedState = dehydrate(queryClient); |
|
|
| return ( |
| <AuthProvider> |
| <ToolCallsContext.Provider value={{ toolCalls, setToolCalls }}> |
| <ThemeProvider attribute="class" defaultTheme="system" enableSystem> |
| <ReactQueryProvider dehydratedState={dehydratedState}> |
| {children} |
| </ReactQueryProvider> |
| </ThemeProvider> |
| </ToolCallsContext.Provider> |
| </AuthProvider> |
| ); |
| } |
|
|