@leanmcp/ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/decorator/UIApp.ts","../src/mcp/AppProvider.tsx","../src/mcp/useTool.ts","../src/mcp/useToolResult.ts","../src/mcp/useToolInput.ts","../src/mcp/useToolInputPartial.ts","../src/mcp/useHostContext.ts","../src/core/Button.tsx","../src/mcp/ActionButton.tsx","../src/core/Input.tsx","../src/mcp/ToolForm.tsx","../src/core/Card.tsx","../src/data/DataGrid.tsx","../src/data/Chart.tsx","../src/layout/AppShell.tsx","../src/media/CodeBlock.tsx"],"names":["UI_APP_COMPONENT_KEY","UI_APP_URI_KEY","UI_APP_OPTIONS_KEY","UIApp","options","target","propertyKey","descriptor","methodName","String","className","name","toLowerCase","replace","uri","Reflect","defineMetadata","component","value","existingMeta","getMetadata","getUIAppMetadata","undefined","getUIAppUri","McpAppContext","AppProvider","appInfo","capabilities","autoResize","children","app","setApp","useState","isConnected","setIsConnected","error","setError","hostContext","setHostContext","toolInput","setToolInput","toolInputPartial","setToolInputPartial","toolResult","setToolResult","useEffect","mounted","appInstance","connect","transport","PostMessageTransport","window","parent","App","ontoolinput","params","arguments","ontoolinputpartial","ontoolresult","onhostcontextchanged","prev","err","Error","close","version","callTool","useCallback","args","result","callServerTool","sendMessage","text","console","warn","role","content","type","sendLog","level","data","log","openLink","url","open","sendOpenLink","theme","React","Provider","div","data-theme","ssrDefaultContext","useMcpApp","context","useContext","useTool","toolName","loading","setLoading","setResult","call","response","structuredContent","reset","useToolResult","textContent","textItem","find","c","JSON","parse","rawResult","hasResult","useToolInput","input","hasInput","useToolInputPartial","partialArgs","isStreaming","useHostContext","displayMode","viewport","locale","timeZone","platform","rawContext","Button","variant","size","disabled","asChild","leftIcon","rightIcon","props","ref","Comp","Slot","clsx","span","aria-hidden","svg","viewBox","fill","circle","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeDasharray","strokeDashoffset","displayName","ActionButton","toolArgs","onToolSuccess","onToolError","showResult","renderResult","buttonProps","setHasResult","handleClick","res","onClick","pre","stringify","message","Input","forwardRef","label","helperText","leftElement","rightElement","fullWidth","id","inputId","Math","random","toString","substr","hasError","Boolean","htmlFor","aria-invalid","aria-describedby","p","ToolForm","fields","submitText","onSuccess","onError","formData","setFormData","initial","forEach","field","defaultValue","handleSubmit","e","preventDefault","Number","handleChange","form","onSubmit","map","key","textarea","placeholder","required","onChange","Card","padding","interactive","CardHeader","title","description","action","h3","CardContent","CardFooter","DataGrid","columns","searchable","searchPlaceholder","onRowClick","emptyMessage","sorting","setSorting","globalFilter","setGlobalFilter","tableColumns","useMemo","col","accessorKey","header","cell","getValue","row","original","enableSorting","sortable","width","table","useReactTable","state","onSortingChange","onGlobalFilterChange","getCoreRowModel","getSortedRowModel","getFilteredRowModel","thead","getHeaderGroups","headerGroup","tr","headers","th","column","getCanSort","getToggleSortingHandler","style","getSize","flexRender","columnDef","getContext","getIsSorted","tbody","td","colSpan","length","getRowModel","rows","getVisibleCells","ChartJS","register","CategoryScale","LinearScale","PointElement","LineElement","BarElement","ArcElement","Title","Tooltip","Legend","Chart","height","defaultOptions","responsive","maintainAspectRatio","plugins","legend","display","position","labels","usePointStyle","tooltip","mode","intersect","backgroundColor","titleColor","bodyColor","borderColor","borderWidth","cornerRadius","scales","x","grid","color","ticks","y","mergedOptions","ReactChart","AppShell","sidebar","footer","sidebarPosition","sidebarWidth","containerRef","useRef","current","resizeObserver","ResizeObserver","entries","entry","contentRect","postMessage","ceil","observe","disconnect","sidebarStyle","flexShrink","aside","main","CodeBlock","code","language","showLineNumbers","copyable","copied","setCopied","handleCopy","navigator","clipboard","writeText","setTimeout","button","aria-label","polyline","points","rect","rx","ry","path","d","Highlight","themes","nightOwl","trim","hlClassName","tokens","getLineProps","getTokenProps","line","i","token"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * @UIApp Decorator\r\n * \r\n * Links an MCP tool to a React UI component.\r\n * When applied to a tool method, it:\r\n * 1. Adds _meta.ui/resourceUri to the tool definition\r\n * 2. Auto-registers a resource that renders the component to HTML\r\n * \r\n * This decorator is designed to work with @leanmcp/core decorators.\r\n */\r\nimport 'reflect-metadata';\r\nimport type React from 'react';\r\n\r\n// Metadata keys\r\nexport const UI_APP_COMPONENT_KEY = 'ui:app:component';\r\nexport const UI_APP_URI_KEY = 'ui:app:uri';\r\nexport const UI_APP_OPTIONS_KEY = 'ui:app:options';\r\n\r\n/**\r\n * Options for @UIApp decorator\r\n */\r\nexport interface UIAppOptions {\r\n /** React component to render for this tool's UI */\r\n component: React.ComponentType<any>;\r\n /** Custom resource URI (auto-generated if not provided) */\r\n uri?: string;\r\n /** HTML document title */\r\n title?: string;\r\n /** Additional CSS styles */\r\n styles?: string;\r\n}\r\n\r\n/**\r\n * Decorator that links a tool to a UI component.\r\n * \r\n * When the tool is called, the host will fetch the UI resource\r\n * which returns the component rendered as HTML.\r\n * \r\n * @example\r\n * ```typescript\r\n * import { Tool } from '@leanmcp/core';\r\n * import { UIApp } from '@leanmcp/ui';\r\n * import { WeatherCard } from './WeatherCard';\r\n * \r\n * class WeatherService {\r\n * @Tool({ description: 'Get weather for a city' })\r\n * @UIApp({ component: WeatherCard })\r\n * async getWeather(args: { city: string }) {\r\n * return { city: args.city, temp: 22 };\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function UIApp(options: UIAppOptions): MethodDecorator {\r\n return (target: Object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\r\n const methodName = String(propertyKey);\r\n // Use same pattern as @Resource in @leanmcp/core: className without 'service' suffix\r\n const className = target.constructor.name.toLowerCase().replace('service', '');\r\n\r\n // Generate URI using ui:// scheme (required by ext-apps hosts)\r\n const uri = options.uri ?? `ui://${className}/${methodName}`;\r\n\r\n // Store metadata on the method\r\n Reflect.defineMetadata(UI_APP_COMPONENT_KEY, options.component, descriptor.value!);\r\n Reflect.defineMetadata(UI_APP_URI_KEY, uri, descriptor.value!);\r\n Reflect.defineMetadata(UI_APP_OPTIONS_KEY, options, descriptor.value!);\r\n\r\n // Also store the resource URI for the @Tool decorator to pick up\r\n // The @Tool decorator in @leanmcp/core should check for this\r\n const existingMeta = Reflect.getMetadata('tool:meta', descriptor.value) || {};\r\n Reflect.defineMetadata('tool:meta', {\r\n ...existingMeta,\r\n 'ui/resourceUri': uri,\r\n }, descriptor.value!);\r\n\r\n return descriptor;\r\n };\r\n}\r\n\r\n/**\r\n * Helper to get UIApp metadata from a method\r\n */\r\nexport function getUIAppMetadata(target: Function): UIAppOptions | undefined {\r\n const component = Reflect.getMetadata(UI_APP_COMPONENT_KEY, target);\r\n if (!component) return undefined;\r\n\r\n return {\r\n component,\r\n uri: Reflect.getMetadata(UI_APP_URI_KEY, target),\r\n ...Reflect.getMetadata(UI_APP_OPTIONS_KEY, target),\r\n };\r\n}\r\n\r\n/**\r\n * Helper to get the resource URI from a method\r\n */\r\nexport function getUIAppUri(target: Function): string | undefined {\r\n return Reflect.getMetadata(UI_APP_URI_KEY, target);\r\n}\r\n","/**\r\n * AppProvider - MCP Apps context provider\r\n * \r\n * Uses @modelcontextprotocol/ext-apps for communication with the host.\r\n * This is the root provider for all MCP App components.\r\n */\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n useCallback,\r\n type ReactNode,\r\n} from 'react';\r\nimport { App, PostMessageTransport } from '@modelcontextprotocol/ext-apps';\r\nimport type {\r\n McpUiHostContext,\r\n McpUiToolResultNotification,\r\n McpUiToolInputNotification,\r\n McpUiToolInputPartialNotification,\r\n McpUiAppCapabilities,\r\n} from '@modelcontextprotocol/ext-apps';\r\nimport type { CallToolResult, Implementation } from '@modelcontextprotocol/sdk/types.js';\r\n\r\n/**\r\n * App information (same as ext-apps Implementation)\r\n */\r\nexport interface AppInfo {\r\n name: string;\r\n version: string;\r\n}\r\n\r\n/**\r\n * Options for App behavior\r\n */\r\nexport interface AppOptions {\r\n /**\r\n * Automatically report size changes to the host using ResizeObserver.\r\n * @default true\r\n */\r\n autoResize?: boolean;\r\n}\r\n\r\n/**\r\n * MCP App context value - available via useMcpApp()\r\n */\r\nexport interface McpAppContextValue {\r\n /** The ext-apps App instance */\r\n app: App | null;\r\n /** Whether connected to host */\r\n isConnected: boolean;\r\n /** Connection error, if any */\r\n error: Error | null;\r\n /** Host context (theme, viewport, etc.) */\r\n hostContext: McpUiHostContext;\r\n /** Tool input arguments received from host */\r\n toolInput: Record<string, unknown> | null;\r\n /** Partial tool input (streaming) */\r\n toolInputPartial: Record<string, unknown> | null;\r\n /** Tool result received from host */\r\n toolResult: CallToolResult | null;\r\n /** Call a server tool */\r\n callTool: (name: string, args?: Record<string, unknown>) => Promise<CallToolResult>;\r\n /** Send a message to the host chat */\r\n sendMessage: (text: string) => Promise<void>;\r\n /** Send a log message */\r\n sendLog: (level: 'debug' | 'info' | 'warning' | 'error', data: unknown) => Promise<void>;\r\n /** Open a link in the host */\r\n openLink: (url: string) => Promise<void>;\r\n}\r\n\r\nconst McpAppContext = createContext<McpAppContextValue | null>(null);\r\n\r\nexport interface AppProviderProps {\r\n /** App name and version */\r\n appInfo: AppInfo;\r\n /** App capabilities (tools, experimental features) */\r\n capabilities?: McpUiAppCapabilities;\r\n /** App options (autoResize, etc.) */\r\n options?: AppOptions;\r\n /** React children */\r\n children: ReactNode;\r\n}\r\n\r\n/**\r\n * AppProvider - Root context for MCP Apps\r\n * \r\n * Provides connection management and hooks for MCP App components.\r\n * Uses PostMessage transport for iframe communication.\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyApp() {\r\n * return (\r\n * <AppProvider \r\n * appInfo={{ name: \"MyApp\", version: \"1.0.0\" }}\r\n * capabilities={{ tools: { listChanged: true } }}\r\n * options={{ autoResize: true }}\r\n * >\r\n * <MyContent />\r\n * </AppProvider>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function AppProvider({ appInfo, capabilities = {}, options = { autoResize: true }, children }: AppProviderProps) {\r\n const [app, setApp] = useState<App | null>(null);\r\n const [isConnected, setIsConnected] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [hostContext, setHostContext] = useState<McpUiHostContext>({});\r\n const [toolInput, setToolInput] = useState<Record<string, unknown> | null>(null);\r\n const [toolInputPartial, setToolInputPartial] = useState<Record<string, unknown> | null>(null);\r\n const [toolResult, setToolResult] = useState<CallToolResult | null>(null);\r\n\r\n // Connect to host on mount\r\n useEffect(() => {\r\n let mounted = true;\r\n let appInstance: App | null = null;\r\n\r\n async function connect() {\r\n try {\r\n const transport = new PostMessageTransport(window.parent);\r\n\r\n // Create App with all parameters\r\n appInstance = new App(\r\n appInfo as Implementation,\r\n capabilities,\r\n options\r\n );\r\n\r\n // Register handlers BEFORE connecting\r\n appInstance.ontoolinput = (params: McpUiToolInputNotification['params']) => {\r\n if (mounted) {\r\n setToolInput(params.arguments as Record<string, unknown>);\r\n }\r\n };\r\n\r\n // Handle partial/streaming tool input\r\n appInstance.ontoolinputpartial = (params: McpUiToolInputPartialNotification['params']) => {\r\n if (mounted) {\r\n setToolInputPartial(params.arguments as Record<string, unknown>);\r\n }\r\n };\r\n\r\n appInstance.ontoolresult = (params: McpUiToolResultNotification['params']) => {\r\n if (mounted) {\r\n setToolResult(params as CallToolResult);\r\n }\r\n };\r\n\r\n appInstance.onhostcontextchanged = (params: Partial<McpUiHostContext>) => {\r\n if (mounted) {\r\n setHostContext(prev => ({ ...prev, ...params }));\r\n }\r\n };\r\n\r\n await appInstance.connect(transport);\r\n\r\n if (mounted) {\r\n setApp(appInstance);\r\n setIsConnected(true);\r\n setError(null);\r\n\r\n // Get host context from initialization (if available via capabilities)\r\n // Note: ext-apps stores hostInfo and hostCapabilities but not hostContext\r\n // hostContext comes via onhostcontextchanged notifications\r\n }\r\n } catch (err) {\r\n if (mounted) {\r\n setError(err instanceof Error ? err : new Error(String(err)));\r\n setIsConnected(false);\r\n }\r\n }\r\n }\r\n\r\n connect();\r\n\r\n return () => {\r\n mounted = false;\r\n if (appInstance) {\r\n appInstance.close();\r\n }\r\n };\r\n }, [appInfo.name, appInfo.version]);\r\n\r\n // Context methods\r\n const callTool = useCallback(\r\n async (name: string, args: Record<string, unknown> = {}): Promise<CallToolResult> => {\r\n if (!app) {\r\n throw new Error('Not connected to host');\r\n }\r\n const result = await app.callServerTool({ name, arguments: args });\r\n // Also update toolResult so useToolResult() sees the new data\r\n setToolResult(result);\r\n return result;\r\n },\r\n [app]\r\n );\r\n\r\n const sendMessage = useCallback(\r\n async (text: string) => {\r\n if (!app) {\r\n console.warn('[AppProvider] Not connected - cannot send message');\r\n return;\r\n }\r\n await app.sendMessage({\r\n role: 'user',\r\n content: [{ type: 'text', text }],\r\n });\r\n },\r\n [app]\r\n );\r\n\r\n const sendLog = useCallback(\r\n async (level: 'debug' | 'info' | 'warning' | 'error', data: unknown) => {\r\n if (!app) {\r\n console.log(`[MCP App] ${level}:`, data);\r\n return;\r\n }\r\n await app.sendLog({ level, data });\r\n },\r\n [app]\r\n );\r\n\r\n const openLink = useCallback(\r\n async (url: string) => {\r\n if (!app) {\r\n // Fallback: open in new tab\r\n window.open(url, '_blank', 'noopener,noreferrer');\r\n return;\r\n }\r\n await app.sendOpenLink({ url });\r\n },\r\n [app]\r\n );\r\n\r\n const value: McpAppContextValue = {\r\n app,\r\n isConnected,\r\n error,\r\n hostContext,\r\n toolInput,\r\n toolInputPartial,\r\n toolResult,\r\n callTool,\r\n sendMessage,\r\n sendLog,\r\n openLink,\r\n };\r\n\r\n // Theme is applied via CSS custom properties, not imperative DOM manipulation\r\n // Users can use hostContext.theme to style their components\r\n const theme = hostContext.theme ?? 'light';\r\n\r\n return (\r\n <McpAppContext.Provider value={value}>\r\n <div className=\"lui-root\" data-theme={theme}>\r\n {children}\r\n </div>\r\n </McpAppContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Default context for SSR (no AppProvider available)\r\n */\r\nconst ssrDefaultContext: McpAppContextValue = {\r\n app: null,\r\n isConnected: false,\r\n error: null,\r\n hostContext: {},\r\n toolInput: null,\r\n toolInputPartial: null,\r\n toolResult: null,\r\n callTool: async () => { throw new Error('callTool not available during SSR'); },\r\n sendMessage: async () => { console.warn('sendMessage not available during SSR'); },\r\n sendLog: async () => { console.warn('sendLog not available during SSR'); },\r\n openLink: async () => { console.warn('openLink not available during SSR'); },\r\n};\r\n\r\n/**\r\n * Hook to access the MCP App context\r\n * Returns SSR-safe defaults when no provider is available (during server rendering)\r\n */\r\nexport function useMcpApp(): McpAppContextValue {\r\n const context = useContext(McpAppContext);\r\n // Return SSR defaults if no context (during server-side rendering)\r\n if (!context) {\r\n return ssrDefaultContext;\r\n }\r\n return context;\r\n}\r\n","import { useState, useCallback } from 'react';\r\nimport { useMcpApp } from './AppProvider';\r\n\r\nexport interface UseToolResult<T = unknown> {\r\n /** Call the tool with arguments */\r\n call: (args?: Record<string, unknown>) => Promise<T>;\r\n /** Whether the tool is currently being called */\r\n loading: boolean;\r\n /** The result of the last tool call */\r\n result: T | null;\r\n /** Error from the last tool call */\r\n error: Error | null;\r\n /** Reset the result and error state */\r\n reset: () => void;\r\n}\r\n\r\n/**\r\n * Hook for calling an MCP tool with loading and error state\r\n * \r\n * @example\r\n * ```tsx\r\n * function WeatherWidget() {\r\n * const { call, loading, result, error } = useTool<WeatherData>('get-weather');\r\n * \r\n * return (\r\n * <div>\r\n * <button onClick={() => call({ city: 'London' })} disabled={loading}>\r\n * {loading ? 'Loading...' : 'Get Weather'}\r\n * </button>\r\n * {result && <div>Temperature: {result.temperature}°C</div>}\r\n * {error && <div>Error: {error.message}</div>}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useTool<T = unknown>(toolName: string): UseToolResult<T> {\r\n const { callTool } = useMcpApp();\r\n const [loading, setLoading] = useState(false);\r\n const [result, setResult] = useState<T | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const call = useCallback(\r\n async (args: Record<string, unknown> = {}) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const response = await callTool(toolName, args);\r\n const data = (response as { structuredContent?: T })?.structuredContent ?? response as T;\r\n setResult(data);\r\n return data;\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n setError(error);\r\n throw error;\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n [callTool, toolName]\r\n );\r\n\r\n const reset = useCallback(() => {\r\n setResult(null);\r\n setError(null);\r\n }, []);\r\n\r\n return { call, loading, result, error, reset };\r\n}\r\n","/**\r\n * useToolResult - Access the tool result from the host\r\n * \r\n * Returns the result of the tool call that spawned this MCP App.\r\n * The host sends this via ui/notifications/tool-result after tool execution.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\r\n\r\nexport interface UseToolResultReturn<T = unknown> {\r\n /** The tool result, typed as T */\r\n result: T | null;\r\n /** Raw CallToolResult from MCP */\r\n rawResult: CallToolResult | null;\r\n /** Whether a result has been received */\r\n hasResult: boolean;\r\n /** Extract text content from result */\r\n textContent: string | null;\r\n}\r\n\r\n/**\r\n * Hook to access tool result from host\r\n * \r\n * @example\r\n * ```tsx\r\n * function WeatherCard() {\r\n * const { result } = useToolResult<{ city: string; temp: number }>();\r\n * \r\n * if (!result) return <div>Loading...</div>;\r\n * \r\n * return <div>{result.city}: {result.temp}°C</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useToolResult<T = unknown>(): UseToolResultReturn<T> {\r\n const { toolResult } = useMcpApp();\r\n\r\n // Extract structured content if available\r\n let result: T | null = null;\r\n let textContent: string | null = null;\r\n\r\n if (toolResult) {\r\n // Try structuredContent first (MCP 2024-11-05+)\r\n if ('structuredContent' in toolResult && toolResult.structuredContent) {\r\n result = toolResult.structuredContent as T;\r\n }\r\n\r\n // Fall back to parsing text content as JSON\r\n if (!result && toolResult.content) {\r\n const textItem = toolResult.content.find(\r\n (c): c is { type: 'text'; text: string } => c.type === 'text'\r\n );\r\n if (textItem) {\r\n textContent = textItem.text;\r\n try {\r\n result = JSON.parse(textItem.text) as T;\r\n } catch {\r\n // Not JSON, leave as null\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n result,\r\n rawResult: toolResult,\r\n hasResult: toolResult !== null,\r\n textContent,\r\n };\r\n}\r\n","/**\r\n * useToolInput - Access tool input arguments from the host\r\n * \r\n * Returns the arguments passed to the tool that spawned this MCP App.\r\n * The host sends this via ui/notifications/tool-input after initialization.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\n\r\nexport interface UseToolInputReturn<T = Record<string, unknown>> {\r\n /** The tool input arguments, typed as T */\r\n input: T | null;\r\n /** Whether input has been received */\r\n hasInput: boolean;\r\n}\r\n\r\n/**\r\n * Hook to access tool input arguments from host\r\n * \r\n * @example\r\n * ```tsx\r\n * function WeatherCard() {\r\n * const { input } = useToolInput<{ city: string }>();\r\n * \r\n * if (!input) return <div>Loading...</div>;\r\n * \r\n * return <div>Weather for: {input.city}</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useToolInput<T = Record<string, unknown>>(): UseToolInputReturn<T> {\r\n const { toolInput } = useMcpApp();\r\n\r\n return {\r\n input: toolInput as T | null,\r\n hasInput: toolInput !== null,\r\n };\r\n}\r\n","/**\r\n * useToolInputPartial - Access streaming partial tool input\r\n * \r\n * This hook provides access to partial/streaming tool input arguments\r\n * as they are being typed or generated. Useful for progressive rendering\r\n * during tool call initialization.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\n\r\nexport interface UseToolInputPartialReturn {\r\n /** Partial arguments currently available */\r\n partialArgs: Record<string, unknown> | null;\r\n /** Whether partial args are being received */\r\n isStreaming: boolean;\r\n}\r\n\r\n/**\r\n * Hook to access streaming partial tool input\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n * const { partialArgs, isStreaming } = useToolInputPartial();\r\n * \r\n * if (isStreaming) {\r\n * return <div>Receiving: {JSON.stringify(partialArgs)}</div>;\r\n * }\r\n * return <div>Ready for input</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useToolInputPartial(): UseToolInputPartialReturn {\r\n const { toolInputPartial } = useMcpApp();\r\n\r\n return {\r\n partialArgs: toolInputPartial,\r\n isStreaming: toolInputPartial !== null,\r\n };\r\n}\r\n","/**\r\n * useHostContext - Access host context (theme, viewport, locale, etc.)\r\n * \r\n * Returns the host context provided during initialization and updates.\r\n * The host sends this via ui/notifications/host-context-changed.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { McpUiHostContext } from '@modelcontextprotocol/ext-apps';\r\n\r\nexport interface UseHostContextReturn {\r\n /** Current theme: 'light' or 'dark' */\r\n theme: 'light' | 'dark';\r\n /** Display mode: 'inline', 'fullscreen', 'pip' */\r\n displayMode: 'inline' | 'fullscreen' | 'pip';\r\n /** Viewport dimensions */\r\n viewport: { width: number; height: number } | null;\r\n /** User locale (e.g., 'en-US') */\r\n locale: string | null;\r\n /** User timezone (e.g., 'America/New_York') */\r\n timeZone: string | null;\r\n /** Platform type */\r\n platform: 'web' | 'desktop' | 'mobile' | null;\r\n /** Full raw context */\r\n rawContext: McpUiHostContext;\r\n}\r\n\r\n/**\r\n * Hook to access host context\r\n * \r\n * @example\r\n * ```tsx\r\n * function ThemedCard() {\r\n * const { theme, locale } = useHostContext();\r\n * \r\n * return (\r\n * <div className={theme === 'dark' ? 'dark-mode' : 'light-mode'}>\r\n * Locale: {locale}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useHostContext(): UseHostContextReturn {\r\n const { hostContext } = useMcpApp();\r\n\r\n return {\r\n theme: (hostContext.theme as 'light' | 'dark') ?? 'light',\r\n displayMode: (hostContext.displayMode as 'inline' | 'fullscreen' | 'pip') ?? 'inline',\r\n viewport: hostContext.viewport ?? null,\r\n locale: hostContext.locale ?? null,\r\n timeZone: hostContext.timeZone ?? null,\r\n platform: (hostContext.platform as 'web' | 'desktop' | 'mobile') ?? null,\r\n rawContext: hostContext,\r\n };\r\n}\r\n","import React, { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { clsx } from 'clsx';\r\nimport './Button.css';\r\n\r\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n /** Button variant */\r\n variant?: 'primary' | 'secondary' | 'ghost' | 'destructive' | 'outline';\r\n /** Button size */\r\n size?: 'sm' | 'md' | 'lg' | 'icon';\r\n /** Loading state */\r\n loading?: boolean;\r\n /** Render as child component (Radix Slot) */\r\n asChild?: boolean;\r\n /** Left icon */\r\n leftIcon?: ReactNode;\r\n /** Right icon */\r\n rightIcon?: ReactNode;\r\n}\r\n\r\n/**\r\n * Button component with multiple variants and loading state\r\n * \r\n * @example\r\n * ```tsx\r\n * <Button variant=\"primary\" onClick={handleClick}>\r\n * Click Me\r\n * </Button>\r\n * \r\n * <Button variant=\"ghost\" loading>\r\n * Loading...\r\n * </Button>\r\n * ```\r\n */\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n {\r\n className,\r\n variant = 'primary',\r\n size = 'md',\r\n loading = false,\r\n disabled,\r\n asChild = false,\r\n leftIcon,\r\n rightIcon,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const Comp = asChild ? Slot : 'button';\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={clsx(\r\n 'lui-button',\r\n `lui-button--${variant}`,\r\n `lui-button--${size}`,\r\n loading && 'lui-button--loading',\r\n className\r\n )}\r\n disabled={disabled || loading}\r\n {...props}\r\n >\r\n {loading && (\r\n <span className=\"lui-button__spinner\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" className=\"lui-spinner-icon\">\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"3\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray=\"32\"\r\n strokeDashoffset=\"12\"\r\n />\r\n </svg>\r\n </span>\r\n )}\r\n {leftIcon && !loading && <span className=\"lui-button__icon\">{leftIcon}</span>}\r\n <span className=\"lui-button__content\">{children}</span>\r\n {rightIcon && <span className=\"lui-button__icon\">{rightIcon}</span>}\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n","import React, { useState, type ReactNode } from 'react';\r\nimport { Button, type ButtonProps } from '../core/Button';\r\nimport { useTool } from './useTool';\r\n\r\nexport interface ActionButtonProps extends Omit<ButtonProps, 'onClick' | 'loading' | 'onError'> {\r\n /** Tool name to call */\r\n toolName: string;\r\n /** Arguments to pass to the tool */\r\n toolArgs?: Record<string, unknown>;\r\n /** Callback when tool call succeeds */\r\n onToolSuccess?: (result: unknown) => void;\r\n /** Callback when tool call fails */\r\n onToolError?: (error: Error) => void;\r\n /** Show result inline after success */\r\n showResult?: boolean;\r\n /** Custom result renderer */\r\n renderResult?: (result: unknown) => ReactNode;\r\n}\r\n\r\n/**\r\n * ActionButton - Button that calls an MCP tool with loading state\r\n * \r\n * @example\r\n * ```tsx\r\n * <ActionButton\r\n * toolName=\"get-weather\"\r\n * toolArgs={{ city: 'London' }}\r\n * onToolSuccess={(data) => console.log(data)}\r\n * >\r\n * Get Weather\r\n * </ActionButton>\r\n * ```\r\n */\r\nexport function ActionButton({\r\n toolName,\r\n toolArgs = {},\r\n onToolSuccess,\r\n onToolError,\r\n showResult = false,\r\n renderResult,\r\n children,\r\n ...buttonProps\r\n}: ActionButtonProps) {\r\n const { call, loading, result, error } = useTool(toolName);\r\n const [hasResult, setHasResult] = useState(false);\r\n\r\n const handleClick = async () => {\r\n try {\r\n const res = await call(toolArgs);\r\n setHasResult(true);\r\n onToolSuccess?.(res);\r\n } catch (err) {\r\n onToolError?.(err instanceof Error ? err : new Error(String(err)));\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"lui-action-button-wrapper\">\r\n <Button {...buttonProps} loading={loading} onClick={handleClick}>\r\n {children}\r\n </Button>\r\n {showResult && hasResult && result !== null && (\r\n <div className=\"lui-action-button-result\">\r\n {renderResult ? renderResult(result) : (\r\n <pre>{JSON.stringify(result, null, 2)}</pre>\r\n )}\r\n </div>\r\n )}\r\n {error && (\r\n <div className=\"lui-action-button-error\">\r\n {error.message}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport './Input.css';\r\n\r\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\r\n /** Input label */\r\n label?: string;\r\n /** Helper text */\r\n helperText?: string;\r\n /** Error message */\r\n error?: string;\r\n /** Input size */\r\n size?: 'sm' | 'md' | 'lg';\r\n /** Left icon or element */\r\n leftElement?: ReactNode;\r\n /** Right icon or element */\r\n rightElement?: ReactNode;\r\n /** Full width */\r\n fullWidth?: boolean;\r\n}\r\n\r\n/**\r\n * Input component with label, validation, and icon support\r\n * \r\n * @example\r\n * ```tsx\r\n * <Input\r\n * label=\"Email\"\r\n * type=\"email\"\r\n * placeholder=\"Enter your email\"\r\n * error={errors.email}\r\n * />\r\n * ```\r\n */\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n className,\r\n label,\r\n helperText,\r\n error,\r\n size = 'md',\r\n leftElement,\r\n rightElement,\r\n fullWidth = false,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\r\n const hasError = Boolean(error);\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n 'lui-input-wrapper',\r\n fullWidth && 'lui-input-wrapper--full-width',\r\n className\r\n )}\r\n >\r\n {label && (\r\n <label htmlFor={inputId} className=\"lui-input-label\">\r\n {label}\r\n </label>\r\n )}\r\n <div\r\n className={clsx(\r\n 'lui-input-container',\r\n `lui-input-container--${size}`,\r\n hasError && 'lui-input-container--error',\r\n leftElement && 'lui-input-container--has-left',\r\n rightElement && 'lui-input-container--has-right'\r\n )}\r\n >\r\n {leftElement && <span className=\"lui-input-element lui-input-element--left\">{leftElement}</span>}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n className=\"lui-input\"\r\n aria-invalid={hasError}\r\n aria-describedby={error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined}\r\n {...props}\r\n />\r\n {rightElement && <span className=\"lui-input-element lui-input-element--right\">{rightElement}</span>}\r\n </div>\r\n {(error || helperText) && (\r\n <p\r\n id={error ? `${inputId}-error` : `${inputId}-helper`}\r\n className={clsx('lui-input-message', error && 'lui-input-message--error')}\r\n >\r\n {error || helperText}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = 'Input';\r\n","import React, { useState, type FormEvent } from 'react';\r\nimport { Button } from '../core/Button';\r\nimport { Input } from '../core/Input';\r\nimport { useTool } from './useTool';\r\nimport { clsx } from 'clsx';\r\nimport './ToolForm.css';\r\n\r\nexport interface ToolFormField {\r\n /** Field name (matches tool input schema) */\r\n name: string;\r\n /** Display label */\r\n label: string;\r\n /** Input type */\r\n type?: 'text' | 'number' | 'email' | 'password' | 'textarea';\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Default value */\r\n defaultValue?: string | number;\r\n /** Required field */\r\n required?: boolean;\r\n /** Helper text */\r\n helperText?: string;\r\n}\r\n\r\nexport interface ToolFormProps {\r\n /** Tool name to call on submit */\r\n toolName: string;\r\n /** Form fields */\r\n fields: ToolFormField[];\r\n /** Submit button text */\r\n submitText?: string;\r\n /** Callback when tool call succeeds */\r\n onSuccess?: (result: unknown) => void;\r\n /** Callback when tool call fails */\r\n onError?: (error: Error) => void;\r\n /** Show result after success */\r\n showResult?: boolean;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * ToolForm - Auto-generates a form that submits to an MCP tool\r\n * \r\n * @example\r\n * ```tsx\r\n * <ToolForm\r\n * toolName=\"create-user\"\r\n * fields={[\r\n * { name: 'name', label: 'Name', required: true },\r\n * { name: 'email', label: 'Email', type: 'email', required: true },\r\n * ]}\r\n * submitText=\"Create User\"\r\n * onSuccess={(user) => console.log('Created:', user)}\r\n * />\r\n * ```\r\n */\r\nexport function ToolForm({\r\n toolName,\r\n fields,\r\n submitText = 'Submit',\r\n onSuccess,\r\n onError,\r\n showResult = false,\r\n className,\r\n}: ToolFormProps) {\r\n const { call, loading, result, error } = useTool(toolName);\r\n const [formData, setFormData] = useState<Record<string, string | number>>(() => {\r\n const initial: Record<string, string | number> = {};\r\n fields.forEach((field) => {\r\n if (field.defaultValue !== undefined) {\r\n initial[field.name] = field.defaultValue;\r\n }\r\n });\r\n return initial;\r\n });\r\n\r\n const handleSubmit = async (e: FormEvent) => {\r\n e.preventDefault();\r\n\r\n // Convert number types\r\n const args: Record<string, unknown> = {};\r\n fields.forEach((field) => {\r\n const value = formData[field.name];\r\n if (field.type === 'number' && value !== undefined) {\r\n args[field.name] = Number(value);\r\n } else {\r\n args[field.name] = value;\r\n }\r\n });\r\n\r\n try {\r\n const res = await call(args);\r\n onSuccess?.(res);\r\n } catch (err) {\r\n onError?.(err instanceof Error ? err : new Error(String(err)));\r\n }\r\n };\r\n\r\n const handleChange = (name: string, value: string) => {\r\n setFormData((prev) => ({ ...prev, [name]: value }));\r\n };\r\n\r\n return (\r\n <form className={clsx('lui-tool-form', className)} onSubmit={handleSubmit}>\r\n <div className=\"lui-tool-form-fields\">\r\n {fields.map((field) => (\r\n <div key={field.name} className=\"lui-tool-form-field\">\r\n {field.type === 'textarea' ? (\r\n <div className=\"lui-input-wrapper lui-input-wrapper--full-width\">\r\n <label className=\"lui-input-label\">{field.label}</label>\r\n <textarea\r\n className=\"lui-tool-form-textarea\"\r\n name={field.name}\r\n placeholder={field.placeholder}\r\n required={field.required}\r\n value={formData[field.name] ?? ''}\r\n onChange={(e) => handleChange(field.name, e.target.value)}\r\n />\r\n {field.helperText && (\r\n <p className=\"lui-input-message\">{field.helperText}</p>\r\n )}\r\n </div>\r\n ) : (\r\n <Input\r\n fullWidth\r\n label={field.label}\r\n type={field.type ?? 'text'}\r\n name={field.name}\r\n placeholder={field.placeholder}\r\n required={field.required}\r\n helperText={field.helperText}\r\n value={formData[field.name] ?? ''}\r\n onChange={(e) => handleChange(field.name, e.target.value)}\r\n />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <div className=\"lui-tool-form-actions\">\r\n <Button type=\"submit\" loading={loading}>\r\n {submitText}\r\n </Button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"lui-tool-form-error\">\r\n {error.message}\r\n </div>\r\n )}\r\n\r\n {showResult && result !== null && (\r\n <div className=\"lui-tool-form-result\">\r\n <pre>{JSON.stringify(result, null, 2)}</pre>\r\n </div>\r\n )}\r\n </form>\r\n );\r\n}\r\n","import React, { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport './Card.css';\r\n\r\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Card variant */\r\n variant?: 'default' | 'outline' | 'elevated';\r\n /** Padding size */\r\n padding?: 'none' | 'sm' | 'md' | 'lg';\r\n /** Make card interactive (hover effects) */\r\n interactive?: boolean;\r\n}\r\n\r\n/**\r\n * Card container component\r\n */\r\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\r\n (\r\n {\r\n className,\r\n variant = 'default',\r\n padding = 'md',\r\n interactive = false,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={clsx(\r\n 'lui-card',\r\n `lui-card--${variant}`,\r\n `lui-card--padding-${padding}`,\r\n interactive && 'lui-card--interactive',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCard.displayName = 'Card';\r\n\r\nexport interface CardHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Header title */\r\n title?: ReactNode;\r\n /** Header description */\r\n description?: ReactNode;\r\n /** Right-side action */\r\n action?: ReactNode;\r\n}\r\n\r\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\r\n ({ className, title, description, action, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={clsx('lui-card-header', className)} {...props}>\r\n {(title || description) && (\r\n <div className=\"lui-card-header__text\">\r\n {title && <h3 className=\"lui-card-header__title\">{title}</h3>}\r\n {description && <p className=\"lui-card-header__description\">{description}</p>}\r\n </div>\r\n )}\r\n {action && <div className=\"lui-card-header__action\">{action}</div>}\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCardHeader.displayName = 'CardHeader';\r\n\r\nexport interface CardContentProps extends HTMLAttributes<HTMLDivElement> { }\r\n\r\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={clsx('lui-card-content', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCardContent.displayName = 'CardContent';\r\n\r\nexport interface CardFooterProps extends HTMLAttributes<HTMLDivElement> { }\r\n\r\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={clsx('lui-card-footer', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCardFooter.displayName = 'CardFooter';\r\n","import React, { useMemo, useState, type ReactNode } from 'react';\r\nimport {\r\n useReactTable,\r\n getCoreRowModel,\r\n getSortedRowModel,\r\n getFilteredRowModel,\r\n flexRender,\r\n type ColumnDef,\r\n type SortingState,\r\n} from '@tanstack/react-table';\r\nimport { clsx } from 'clsx';\r\nimport './DataGrid.css';\r\n\r\nexport interface DataGridColumn<T> {\r\n /** Column key (accessor) */\r\n key: keyof T | string;\r\n /** Column header */\r\n header: string;\r\n /** Custom cell renderer */\r\n cell?: (value: unknown, row: T) => ReactNode;\r\n /** Enable sorting */\r\n sortable?: boolean;\r\n /** Column width */\r\n width?: number | string;\r\n}\r\n\r\nexport interface DataGridProps<T extends Record<string, unknown>> {\r\n /** Data array */\r\n data: T[];\r\n /** Column definitions */\r\n columns: DataGridColumn<T>[];\r\n /** Enable global search */\r\n searchable?: boolean;\r\n /** Search placeholder */\r\n searchPlaceholder?: string;\r\n /** Row click handler */\r\n onRowClick?: (row: T) => void;\r\n /** Loading state */\r\n loading?: boolean;\r\n /** Empty state message */\r\n emptyMessage?: string;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * DataGrid - Sortable, filterable data table for tool results\r\n * \r\n * @example\r\n * ```tsx\r\n * const { result } = useTool<{ items: Item[] }>('get-items');\r\n * \r\n * <DataGrid\r\n * data={result?.items ?? []}\r\n * columns={[\r\n * { key: 'name', header: 'Name', sortable: true },\r\n * { key: 'price', header: 'Price', cell: (v) => `$${v}` },\r\n * ]}\r\n * searchable\r\n * />\r\n * ```\r\n */\r\nexport function DataGrid<T extends Record<string, unknown>>({\r\n data,\r\n columns,\r\n searchable = false,\r\n searchPlaceholder = 'Search...',\r\n onRowClick,\r\n loading = false,\r\n emptyMessage = 'No data',\r\n className,\r\n}: DataGridProps<T>) {\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [globalFilter, setGlobalFilter] = useState('');\r\n\r\n const tableColumns = useMemo<ColumnDef<T>[]>(\r\n () =>\r\n columns.map((col) => ({\r\n id: String(col.key),\r\n accessorKey: col.key,\r\n header: col.header,\r\n cell: col.cell\r\n ? ({ getValue, row }) => col.cell!(getValue(), row.original)\r\n : ({ getValue }) => String(getValue() ?? ''),\r\n enableSorting: col.sortable ?? true,\r\n size: typeof col.width === 'number' ? col.width : undefined,\r\n })),\r\n [columns]\r\n );\r\n\r\n const table = useReactTable({\r\n data,\r\n columns: tableColumns,\r\n state: { sorting, globalFilter },\r\n onSortingChange: setSorting,\r\n onGlobalFilterChange: setGlobalFilter,\r\n getCoreRowModel: getCoreRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n });\r\n\r\n return (\r\n <div className={clsx('lui-datagrid', className)}>\r\n {searchable && (\r\n <div className=\"lui-datagrid-search\">\r\n <input\r\n type=\"text\"\r\n value={globalFilter}\r\n onChange={(e) => setGlobalFilter(e.target.value)}\r\n placeholder={searchPlaceholder}\r\n className=\"lui-datagrid-search-input\"\r\n />\r\n </div>\r\n )}\r\n <div className=\"lui-datagrid-container\">\r\n <table className=\"lui-datagrid-table\">\r\n <thead>\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <tr key={headerGroup.id}>\r\n {headerGroup.headers.map((header) => (\r\n <th\r\n key={header.id}\r\n className={clsx(\r\n 'lui-datagrid-th',\r\n header.column.getCanSort() && 'lui-datagrid-th--sortable'\r\n )}\r\n onClick={header.column.getToggleSortingHandler()}\r\n style={{ width: header.column.getSize() }}\r\n >\r\n <div className=\"lui-datagrid-th-content\">\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {header.column.getIsSorted() && (\r\n <span className=\"lui-datagrid-sort-icon\">\r\n {header.column.getIsSorted() === 'asc' ? '↑' : '↓'}\r\n </span>\r\n )}\r\n </div>\r\n </th>\r\n ))}\r\n </tr>\r\n ))}\r\n </thead>\r\n <tbody>\r\n {loading ? (\r\n <tr>\r\n <td colSpan={columns.length} className=\"lui-datagrid-loading\">\r\n Loading...\r\n </td>\r\n </tr>\r\n ) : table.getRowModel().rows.length === 0 ? (\r\n <tr>\r\n <td colSpan={columns.length} className=\"lui-datagrid-empty\">\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n table.getRowModel().rows.map((row) => (\r\n <tr\r\n key={row.id}\r\n className={clsx(\r\n 'lui-datagrid-row',\r\n onRowClick && 'lui-datagrid-row--clickable'\r\n )}\r\n onClick={() => onRowClick?.(row.original)}\r\n >\r\n {row.getVisibleCells().map((cell) => (\r\n <td key={cell.id} className=\"lui-datagrid-td\">\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n BarElement,\r\n ArcElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n type ChartData,\r\n type ChartOptions,\r\n type ChartType as ChartJSType,\r\n} from 'chart.js';\r\nimport { Chart as ReactChart } from 'react-chartjs-2';\r\nimport { clsx } from 'clsx';\r\nimport './Chart.css';\r\n\r\n// Register Chart.js components\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n BarElement,\r\n ArcElement,\r\n Title,\r\n Tooltip,\r\n Legend\r\n);\r\n\r\nexport type ChartType = 'line' | 'bar' | 'pie' | 'doughnut';\r\n\r\nexport interface ChartProps {\r\n /** Chart type */\r\n type: ChartType;\r\n /** Chart data */\r\n data: ChartData<ChartJSType>;\r\n /** Chart options */\r\n options?: ChartOptions<ChartJSType>;\r\n /** Chart height */\r\n height?: number | string;\r\n /** Chart width */\r\n width?: number | string;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Chart component for data visualization\r\n * \r\n * @example\r\n * ```tsx\r\n * const { result } = useTool<{ prices: number[], labels: string[] }>('get-stock-data');\r\n * \r\n * <Chart\r\n * type=\"line\"\r\n * data={{\r\n * labels: result?.labels ?? [],\r\n * datasets: [{\r\n * label: 'Price',\r\n * data: result?.prices ?? [],\r\n * borderColor: '#6366f1',\r\n * tension: 0.4,\r\n * }],\r\n * }}\r\n * height={300}\r\n * />\r\n * ```\r\n */\r\nexport function Chart({\r\n type,\r\n data,\r\n options,\r\n height = 300,\r\n width = '100%',\r\n className,\r\n}: ChartProps) {\r\n const defaultOptions: ChartOptions<ChartJSType> = {\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n plugins: {\r\n legend: {\r\n display: true,\r\n position: 'top' as const,\r\n labels: {\r\n usePointStyle: true,\r\n padding: 16,\r\n },\r\n },\r\n tooltip: {\r\n mode: 'index',\r\n intersect: false,\r\n backgroundColor: 'rgba(15, 23, 42, 0.9)',\r\n titleColor: '#f1f5f9',\r\n bodyColor: '#cbd5e1',\r\n borderColor: '#334155',\r\n borderWidth: 1,\r\n cornerRadius: 8,\r\n padding: 12,\r\n },\r\n },\r\n scales: type !== 'pie' && type !== 'doughnut' ? {\r\n x: {\r\n grid: {\r\n color: 'rgba(226, 232, 240, 0.5)',\r\n },\r\n ticks: {\r\n color: '#64748b',\r\n },\r\n },\r\n y: {\r\n grid: {\r\n color: 'rgba(226, 232, 240, 0.5)',\r\n },\r\n ticks: {\r\n color: '#64748b',\r\n },\r\n },\r\n } : undefined,\r\n };\r\n\r\n const mergedOptions = {\r\n ...defaultOptions,\r\n ...options,\r\n plugins: {\r\n ...defaultOptions.plugins,\r\n ...options?.plugins,\r\n },\r\n };\r\n\r\n return (\r\n <div\r\n className={clsx('lui-chart', className)}\r\n style={{ height, width }}\r\n >\r\n <ReactChart\r\n type={type}\r\n data={data}\r\n options={mergedOptions as ChartOptions<ChartJSType>}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef, type ReactNode, type HTMLAttributes } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport './AppShell.css';\r\n\r\nexport interface AppShellProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Header content */\r\n header?: ReactNode;\r\n /** Sidebar content */\r\n sidebar?: ReactNode;\r\n /** Footer content */\r\n footer?: ReactNode;\r\n /** Sidebar position */\r\n sidebarPosition?: 'left' | 'right';\r\n /** Sidebar width */\r\n sidebarWidth?: number | string;\r\n /** Enable auto-resize to content */\r\n autoResize?: boolean;\r\n /** Padding */\r\n padding?: 'none' | 'sm' | 'md' | 'lg';\r\n}\r\n\r\n/**\r\n * AppShell - Root layout container for MCP Apps\r\n * \r\n * Provides header, sidebar, main content, and footer areas with auto-resize support.\r\n * \r\n * @example\r\n * ```tsx\r\n * <AppShell\r\n * header={<h1>My App</h1>}\r\n * sidebar={<Navigation />}\r\n * autoResize\r\n * >\r\n * <MainContent />\r\n * </AppShell>\r\n * ```\r\n */\r\nexport function AppShell({\r\n header,\r\n sidebar,\r\n footer,\r\n sidebarPosition = 'left',\r\n sidebarWidth = 240,\r\n autoResize = true,\r\n padding = 'md',\r\n className,\r\n children,\r\n ...props\r\n}: AppShellProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n // Auto-resize effect\r\n useEffect(() => {\r\n if (!autoResize || !containerRef.current) return;\r\n\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n for (const entry of entries) {\r\n const { height } = entry.contentRect;\r\n // Send resize message to parent (host)\r\n window.parent.postMessage(\r\n {\r\n type: 'resize',\r\n height: Math.ceil(height),\r\n },\r\n '*'\r\n );\r\n }\r\n });\r\n\r\n resizeObserver.observe(containerRef.current);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n };\r\n }, [autoResize]);\r\n\r\n const sidebarStyle = {\r\n width: typeof sidebarWidth === 'number' ? `${sidebarWidth}px` : sidebarWidth,\r\n flexShrink: 0,\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={clsx(\r\n 'lui-app-shell',\r\n `lui-app-shell--padding-${padding}`,\r\n className\r\n )}\r\n {...props}\r\n >\r\n {header && <header className=\"lui-app-shell-header\">{header}</header>}\r\n\r\n <div className=\"lui-app-shell-body\">\r\n {sidebar && sidebarPosition === 'left' && (\r\n <aside className=\"lui-app-shell-sidebar\" style={sidebarStyle}>\r\n {sidebar}\r\n </aside>\r\n )}\r\n\r\n <main className=\"lui-app-shell-main\">{children}</main>\r\n\r\n {sidebar && sidebarPosition === 'right' && (\r\n <aside className=\"lui-app-shell-sidebar\" style={sidebarStyle}>\r\n {sidebar}\r\n </aside>\r\n )}\r\n </div>\r\n\r\n {footer && <footer className=\"lui-app-shell-footer\">{footer}</footer>}\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Highlight, themes } from 'prism-react-renderer';\r\nimport { clsx } from 'clsx';\r\nimport './CodeBlock.css';\r\n\r\nexport interface CodeBlockProps {\r\n /** Code content */\r\n code: string;\r\n /** Programming language */\r\n language?: string;\r\n /** Show line numbers */\r\n showLineNumbers?: boolean;\r\n /** Enable copy button */\r\n copyable?: boolean;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * CodeBlock - Syntax highlighted code display\r\n * \r\n * @example\r\n * ```tsx\r\n * <CodeBlock\r\n * code={`const greeting = \"Hello, World!\";`}\r\n * language=\"javascript\"\r\n * copyable\r\n * />\r\n * ```\r\n */\r\nexport function CodeBlock({\r\n code,\r\n language = 'text',\r\n showLineNumbers = false,\r\n copyable = true,\r\n className,\r\n}: CodeBlockProps) {\r\n const [copied, setCopied] = React.useState(false);\r\n\r\n const handleCopy = async () => {\r\n await navigator.clipboard.writeText(code);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n };\r\n\r\n return (\r\n <div className={clsx('lui-code-block', className)}>\r\n {copyable && (\r\n <button\r\n type=\"button\"\r\n className=\"lui-code-block-copy\"\r\n onClick={handleCopy}\r\n aria-label={copied ? 'Copied!' : 'Copy code'}\r\n >\r\n {copied ? (\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"20,6 9,17 4,12\" />\r\n </svg>\r\n ) : (\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\r\n </svg>\r\n )}\r\n </button>\r\n )}\r\n <Highlight theme={themes.nightOwl} code={code.trim()} language={language}>\r\n {({ className: hlClassName, style, tokens, getLineProps, getTokenProps }) => (\r\n <pre className={clsx('lui-code-block-pre', hlClassName)} style={style}>\r\n {tokens.map((line, i) => (\r\n <div key={i} {...getLineProps({ line })}>\r\n {showLineNumbers && (\r\n <span className=\"lui-code-block-line-number\">{i + 1}</span>\r\n )}\r\n {line.map((token, key) => (\r\n <span key={key} {...getTokenProps({ token })} />\r\n ))}\r\n </div>\r\n ))}\r\n </pre>\r\n )}\r\n </Highlight>\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/mcp/AppProvider.tsx","../src/mcp/ToolProvider.tsx","../src/components/ui/sonner.tsx","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/dialog.tsx","../src/mcp/useTool.ts","../src/mcp/ToolButton.tsx","../src/components/ui/select.tsx","../src/mcp/ToolSelect.tsx","../src/components/ui/input.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/mcp/ToolInput.tsx","../src/components/ui/label.tsx","../src/components/ui/textarea.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/slider.tsx","../src/components/ui/switch.tsx","../src/components/ui/alert.tsx","../src/mcp/ToolForm.tsx","../src/mcp/useResource.ts","../src/components/ui/skeleton.tsx","../src/mcp/ResourceView.tsx","../src/mcp/useToolStream.ts","../src/components/ui/progress.tsx","../src/mcp/StreamingContent.tsx","../src/components/ui/table.tsx","../src/mcp/ToolDataGrid.tsx","../src/core/Button.tsx","../src/mcp/ActionButton.tsx","../src/mcp/RequireConnection.tsx","../src/mcp/ToolErrorBoundary.tsx","../src/mcp/useMessage.ts","../src/mcp/useHostContext.ts","../src/mcp/useToolResult.ts","../src/mcp/useToolInput.ts","../src/mcp/useToolInputPartial.ts","../src/mcp/useToolSubscription.ts","../src/types/mcp-types.ts","../src/components/ui/card.tsx","../src/components/ui/form.tsx","../src/components/ui/badge.tsx","../src/components/ui/tabs.tsx","../src/components/ui/separator.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/tooltip.tsx","../src/data/DataGrid.tsx","../src/data/Chart.tsx","../src/layout/AppShell.tsx","../src/layout/Tabs.tsx","../src/layout/Modal.tsx","../src/media/CodeBlock.tsx","../src/core/Card.tsx","../src/core/Input.tsx"],"names":["McpAppContext","AppProvider","appInfo","capabilities","options","autoResize","onTeardown","children","app","setApp","useState","isConnected","setIsConnected","error","setError","hostContext","setHostContext","toolInput","setToolInput","toolInputPartial","setToolInputPartial","toolResult","setToolResult","toolCancelled","setToolCancelled","cancelled","stylesApplied","useRef","applyHostStyles","useCallback","context","theme","applyDocumentTheme","styles","variables","applyHostStyleVariables","useEffect","mounted","appInstance","connect","transport","PostMessageTransport","window","parent","App","ontoolinput","params","arguments","ontoolinputpartial","ontoolresult","ontoolcancelled","reason","onhostcontextchanged","prev","onteardown","initialContext","getHostContext","current","err","Error","String","close","name","version","callTool","args","result","callServerTool","sendMessage","text","console","warn","role","content","type","sendLog","level","data","log","openLink","url","open","requestDisplayMode","mode","value","React","Provider","div","className","data-theme","ssrDefaultContext","useMcpApp","useContext","DEFAULT_CONTEXT","resultDisplay","display","showLoading","ToolContext","createContext","ToolProvider","defaults","parentContext","useMemo","onError","React2","useToolContext","Toaster","props","useTheme","Sonner","icons","success","CircleCheckIcon","info","InfoIcon","warning","TriangleAlertIcon","OctagonXIcon","loading","Loader2Icon","style","cn","inputs","twMerge","clsx","buttonVariants","cva","variants","variant","default","destructive","outline","secondary","ghost","link","size","sm","lg","icon","defaultVariants","Button","asChild","Comp","Slot","React4","data-slot","data-variant","data-size","Dialog","React5","Root","DialogTrigger","Trigger","DialogPortal","Portal","DialogClose","Close","DialogOverlay","Overlay","DialogContent","showCloseButton","Content","XIcon","span","DialogHeader","DialogFooter","DialogTitle","Title","DialogDescription","Description","extractResultData","structuredContent","length","textContent","filter","c","map","join","JSON","parse","useTool","toolName","state","setState","setResult","abortControllerRef","lastArgsRef","undefined","retryCountRef","defaultArgs","transform","retry","onStart","onSuccess","onComplete","retryConfig","count","delay","executeCall","mergedArgs","AbortController","response","signal","aborted","Promise","resolve","setTimeout","call","mutate","reset","abort","retryCall","ToolButton","tool","renderResult","resultDuration","successMessage","errorMessage","onToolStart","onToolSuccess","onToolError","onToolComplete","loadingText","loadingIcon","disableWhileLoading","confirm","disabled","toolConfig","showConfirm","setShowConfirm","showResult","setShowResult","buttonState","hasResult","res","message","toast","handleClick","handleConfirm","confirmConfig","title","description","confirmText","cancelText","renderChildren","React6","Loader2","X","Check","onClick","onOpenChange","confirmVariant","Select","React7","SelectGroup","Group","SelectValue","Value","SelectTrigger","Icon","ChevronDownIcon","SelectContent","position","align","SelectScrollUpButton","Viewport","SelectScrollDownButton","SelectLabel","Label","SelectItem","Item","ItemIndicator","CheckIcon","ItemText","SelectSeparator","Separator","ScrollUpButton","ChevronUpIcon","ScrollDownButton","ToolSelect","onSelectTool","argName","additionalArgs","optionsTool","optionsArgs","transformOptions","staticOptions","placeholder","loadingPlaceholder","emptyMessage","controlledValue","defaultValue","onValueChange","onOptionsLoaded","onSelectionSuccess","onSelectionError","showSuccessToast","fetchedOptions","setFetchedOptions","internalValue","setInternalValue","optionsToolConfig","selectToolConfig","optionsHook","selectHook","then","catch","allOptions","handleValueChange","newValue","isLoading","hasError","React8","option","key","label","Input","React9","input","Command","React10","CommandPrimitive","CommandDialog","CommandInput","SearchIcon","CommandList","List","CommandEmpty","Empty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","Popover","React11","PopoverTrigger","PopoverContent","sideOffset","PopoverAnchor","Anchor","ToolInput","searchTool","debounce","minChars","autocomplete","transformSuggestions","onSuggestionSelect","onChange","onSearchResults","onSearchError","showSearchIcon","showClearButton","showLoadingIndicator","suggestions","setSuggestions","isOpen","setIsOpen","debounceRef","inputRef","handleChange","e","target","clearTimeout","handleClear","focus","handleSelect","suggestion","inputElement","React12","Search","ref","button","onOpenAutoFocus","preventDefault","onSelect","React13","Textarea","React14","textarea","Checkbox","React15","Indicator","Slider","min","max","_values","Array","isArray","React16","Track","Range","from","_","index","Thumb","Switch","React17","alertVariants","Alert","React18","AlertTitle","AlertDescription","ToolForm","fields","manualFields","autoSchema","submitText","resetOnSuccess","layout","resetForm","setFields","schemaLoading","setSchemaLoading","formData","setFormData","initializeFormData","initial","forEach","field","fetchSchema","handleSubmit","Number","renderField","React19","id","required","v","checked","onCheckedChange","htmlFor","step","form","onSubmit","p","pre","stringify","useResource","uri","refreshInterval","subscribe","skip","setData","setLoading","lastUpdated","setLastUpdated","intervalRef","mountedRef","fetchResource","readResource","resourceData","contents","blob","Date","refresh","setInterval","clearInterval","Skeleton","DefaultLoading","React21","DefaultError","onRetry","AlertCircle","RefreshCw","ResourceView","loadingContent","errorContent","meta","isRefreshing","useToolStream","onPartial","partial","setPartial","complete","setComplete","isStreaming","setIsStreaming","isComplete","setIsComplete","isError","Progress","React22","StreamingContent","fallback","showProgress","progress","externalProgress","streamingStyle","React23","streamingClasses","Table","React24","table","TableHeader","thead","TableBody","tbody","TableFooter","tfoot","TableRow","tr","TableHead","th","TableCell","td","TableCaption","caption","getNestedValue","obj","path","split","reduce","ToolDataGrid","dataTool","columns","transformData","rowActions","pagination","pageSizes","defaultPageSize","defaultSort","showRefresh","onDataLoaded","onRowClick","getRowKey","emptyContent","rows","total","paginationState","setPaginationState","page","pageSize","sortState","setSortState","column","direction","gridData","fetchData","offset","limit","sortBy","sortDirection","sort","initialFetchDone","prevStateRef","prevState","stateChanged","interval","handleSort","handlePageChange","handlePageSizeChange","parseInt","totalPages","Math","ceil","canPreviousPage","canNextPage","getSortIcon","ArrowUpDown","ArrowUp","ArrowDown","renderLoading","i","renderEmpty","width","hideMobile","sortable","header","row","render","action","hidden","actionIndex","RowActionButton","onRefresh","ChevronLeft","ChevronRight","getArgs","stopPropagation","leftIcon","rightIcon","aria-hidden","svg","viewBox","fill","circle","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeDasharray","strokeDashoffset","displayName","ActionButton","toolArgs","buttonProps","setHasResult","React28","DefaultDisconnected","WifiOff","RequireConnection","disconnected","disconnectedContent","DefaultFallback","React29","ToolErrorBoundary","Component","getDerivedStateFromError","componentDidCatch","errorInfo","componentDidUpdate","prevProps","resetKeys","some","useMessage","appSendMessage","sending","setSending","send","sendContent","requestTool","Object","keys","useHostContext","displayMode","availableDisplayModes","viewport","locale","timeZone","platform","userAgent","deviceCapabilities","safeAreaInsets","rawContext","useToolResult","textItem","find","rawResult","useToolInput","hasInput","useToolInputPartial","partialArgs","useToolSubscription","enabled","toolHook","isPolling","setIsPolling","stop","start","normalizeToolBinding","DEFAULT_RESULT_CONFIG","autoDismiss","INITIAL_TOOL_STATE","CardTitle","React30","CardDescription","Form","FormProvider","FormFieldContext","FormField","React31","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","formItemId","formDescriptionId","formMessageId","FormItem","useId","FormLabel","data-error","FormControl","aria-describedby","aria-invalid","FormDescription","FormMessage","body","badgeVariants","Badge","React32","TabsList","React33","TabsTrigger","TabsContent","orientation","decorative","React34","ScrollArea","React35","ScrollBar","Corner","ScrollAreaScrollbar","ScrollAreaThumb","DropdownMenu","React36","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","inset","data-inset","DropdownMenuCheckboxItem","CheckboxItem","DropdownMenuRadioGroup","RadioGroup","DropdownMenuRadioItem","RadioItem","CircleIcon","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","Sub","DropdownMenuSubTrigger","SubTrigger","ChevronRightIcon","DropdownMenuSubContent","SubContent","TooltipProvider","delayDuration","React37","Tooltip","TooltipTrigger","TooltipContent","Arrow","DataGrid","searchable","searchPlaceholder","sorting","setSorting","globalFilter","setGlobalFilter","tableColumns","col","accessorKey","cell","getValue","original","enableSorting","useReactTable","onSortingChange","onGlobalFilterChange","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getHeaderGroups","headerGroup","headers","getCanSort","getToggleSortingHandler","getSize","flexRender","columnDef","getContext","getIsSorted","colSpan","getRowModel","getVisibleCells","ChartJS","register","CategoryScale","LinearScale","PointElement","LineElement","BarElement","ArcElement","Legend","Chart","height","defaultOptions","responsive","maintainAspectRatio","plugins","legend","labels","usePointStyle","padding","tooltip","intersect","backgroundColor","titleColor","bodyColor","borderColor","borderWidth","cornerRadius","scales","x","grid","color","ticks","y","mergedOptions","ReactChart","AppShell","sidebar","footer","sidebarPosition","sidebarWidth","containerRef","lastWidth","lastHeight","scheduled","sendSizeChanged","requestAnimationFrame","rect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","sidebarStyle","flexShrink","aside","main","Tabs","tabs","defaultTab","tab","TabContent","Modal","defaultOpen","trigger","aria-label","CloseIcon","d","CodeBlock","code","language","showLineNumbers","copyable","copied","setCopied","handleCopy","navigator","clipboard","writeText","polyline","points","rx","ry","Highlight","themes","nightOwl","trim","hlClassName","tokens","getLineProps","getTokenProps","line","token","Card","forwardRef","interactive","CardHeader","h3","CardContent","CardFooter","helperText","leftElement","rightElement","fullWidth","inputId","random","toString","substr","Boolean"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * AppProvider - MCP Apps context provider\r\n * \r\n * Uses @modelcontextprotocol/ext-apps for communication with the host.\r\n * This is the root provider for all MCP App components.\r\n */\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n useCallback,\r\n useRef,\r\n type ReactNode,\r\n} from 'react';\r\nimport {\r\n App,\r\n PostMessageTransport,\r\n applyHostStyleVariables,\r\n applyDocumentTheme,\r\n} from '@modelcontextprotocol/ext-apps';\r\nimport type {\r\n McpUiHostContext,\r\n McpUiToolResultNotification,\r\n McpUiToolInputNotification,\r\n McpUiToolInputPartialNotification,\r\n McpUiToolCancelledNotification,\r\n McpUiAppCapabilities,\r\n McpUiDisplayMode,\r\n} from '@modelcontextprotocol/ext-apps';\r\nimport type { CallToolResult, Implementation } from '@modelcontextprotocol/sdk/types.js';\r\n\r\n/**\r\n * App information (same as ext-apps Implementation)\r\n */\r\nexport interface AppInfo {\r\n name: string;\r\n version: string;\r\n}\r\n\r\n/**\r\n * Options for App behavior\r\n */\r\nexport interface AppOptions {\r\n /**\r\n * Automatically report size changes to the host using ResizeObserver.\r\n * @default true\r\n */\r\n autoResize?: boolean;\r\n}\r\n\r\n/**\r\n * MCP App context value - available via useMcpApp()\r\n */\r\nexport interface McpAppContextValue {\r\n /** The ext-apps App instance */\r\n app: App | null;\r\n /** Whether connected to host */\r\n isConnected: boolean;\r\n /** Connection error, if any */\r\n error: Error | null;\r\n /** Host context (theme, viewport, etc.) */\r\n hostContext: McpUiHostContext;\r\n /** Tool input arguments received from host */\r\n toolInput: Record<string, unknown> | null;\r\n /** Partial tool input (streaming) */\r\n toolInputPartial: Record<string, unknown> | null;\r\n /** Tool result received from host */\r\n toolResult: CallToolResult | null;\r\n /** Whether the tool was cancelled by host */\r\n toolCancelled: { cancelled: boolean; reason?: string };\r\n /** Call a server tool */\r\n callTool: (name: string, args?: Record<string, unknown>) => Promise<CallToolResult>;\r\n /** Send a message to the host chat */\r\n sendMessage: (text: string) => Promise<void>;\r\n /** Send a log message */\r\n sendLog: (level: 'debug' | 'info' | 'warning' | 'error', data: unknown) => Promise<void>;\r\n /** Open a link in the host */\r\n openLink: (url: string) => Promise<void>;\r\n /** Request a display mode change */\r\n requestDisplayMode: (mode: McpUiDisplayMode) => Promise<McpUiDisplayMode>;\r\n}\r\n\r\nexport const McpAppContext = createContext<McpAppContextValue | null>(null);\r\n\r\nexport interface AppProviderProps {\r\n /** App name and version */\r\n appInfo: AppInfo;\r\n /** App capabilities (tools, experimental features) */\r\n capabilities?: McpUiAppCapabilities;\r\n /** App options (autoResize, etc.) */\r\n options?: AppOptions;\r\n /** Callback when host requests teardown */\r\n onTeardown?: () => void | Promise<void>;\r\n /** React children */\r\n children: ReactNode;\r\n}\r\n\r\n/**\r\n * AppProvider - Root context for MCP Apps\r\n * \r\n * Provides connection management and hooks for MCP App components.\r\n * Uses PostMessage transport for iframe communication.\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyApp() {\r\n * return (\r\n * <AppProvider \r\n * appInfo={{ name: \"MyApp\", version: \"1.0.0\" }}\r\n * capabilities={{ tools: { listChanged: true } }}\r\n * options={{ autoResize: true }}\r\n * onTeardown={() => console.log('Cleaning up...')}\r\n * >\r\n * <MyContent />\r\n * </AppProvider>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function AppProvider({ appInfo, capabilities = {}, options = { autoResize: true }, onTeardown, children }: AppProviderProps) {\r\n const [app, setApp] = useState<App | null>(null);\r\n const [isConnected, setIsConnected] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [hostContext, setHostContext] = useState<McpUiHostContext>({});\r\n const [toolInput, setToolInput] = useState<Record<string, unknown> | null>(null);\r\n const [toolInputPartial, setToolInputPartial] = useState<Record<string, unknown> | null>(null);\r\n const [toolResult, setToolResult] = useState<CallToolResult | null>(null);\r\n const [toolCancelled, setToolCancelled] = useState<{ cancelled: boolean; reason?: string }>({ cancelled: false });\r\n\r\n // Track initial styles applied to avoid duplicates\r\n const stylesApplied = useRef(false);\r\n\r\n // Helper to apply host styles\r\n const applyHostStyles = useCallback((context: McpUiHostContext) => {\r\n // Apply theme\r\n if (context.theme) {\r\n applyDocumentTheme(context.theme);\r\n }\r\n // Apply style variables\r\n if (context.styles?.variables) {\r\n applyHostStyleVariables(context.styles.variables);\r\n }\r\n // TODO: Apply fonts when applyHostFonts is available in ext-apps\r\n // if (context.styles?.css?.fonts) {\r\n // applyHostFonts(context.styles.css.fonts);\r\n // }\r\n }, []);\r\n\r\n // Connect to host on mount\r\n useEffect(() => {\r\n let mounted = true;\r\n let appInstance: App | null = null;\r\n\r\n async function connect() {\r\n try {\r\n const transport = new PostMessageTransport(window.parent);\r\n\r\n // Create App with all parameters\r\n appInstance = new App(\r\n appInfo as Implementation,\r\n capabilities,\r\n options\r\n );\r\n\r\n // Register handlers BEFORE connecting\r\n appInstance.ontoolinput = (params: McpUiToolInputNotification['params']) => {\r\n if (mounted) {\r\n setToolInput(params.arguments as Record<string, unknown>);\r\n // Reset cancelled state on new input\r\n setToolCancelled({ cancelled: false });\r\n }\r\n };\r\n\r\n // Handle partial/streaming tool input\r\n appInstance.ontoolinputpartial = (params: McpUiToolInputPartialNotification['params']) => {\r\n if (mounted) {\r\n setToolInputPartial(params.arguments as Record<string, unknown>);\r\n }\r\n };\r\n\r\n appInstance.ontoolresult = (params: McpUiToolResultNotification['params']) => {\r\n if (mounted) {\r\n setToolResult(params as CallToolResult);\r\n }\r\n };\r\n\r\n // FIX #3: Handle tool cancellation\r\n appInstance.ontoolcancelled = (params: McpUiToolCancelledNotification['params']) => {\r\n if (mounted) {\r\n setToolCancelled({ cancelled: true, reason: params.reason });\r\n }\r\n };\r\n\r\n appInstance.onhostcontextchanged = (params: Partial<McpUiHostContext>) => {\r\n if (mounted) {\r\n setHostContext(prev => ({ ...prev, ...params }));\r\n // FIX #6 & #7: Apply host styles on context change\r\n applyHostStyles(params as McpUiHostContext);\r\n }\r\n };\r\n\r\n // FIX #9: Handle teardown requests\r\n if (onTeardown) {\r\n appInstance.onteardown = async () => {\r\n await onTeardown();\r\n return {};\r\n };\r\n }\r\n\r\n await appInstance.connect(transport);\r\n\r\n if (mounted) {\r\n setApp(appInstance);\r\n setIsConnected(true);\r\n setError(null);\r\n\r\n // FIX #2: Get initial host context from the App after connect\r\n const initialContext = appInstance.getHostContext();\r\n if (initialContext) {\r\n setHostContext(initialContext);\r\n\r\n // Apply initial styles once\r\n if (!stylesApplied.current) {\r\n applyHostStyles(initialContext);\r\n stylesApplied.current = true;\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n if (mounted) {\r\n setError(err instanceof Error ? err : new Error(String(err)));\r\n setIsConnected(false);\r\n }\r\n }\r\n }\r\n\r\n connect();\r\n\r\n return () => {\r\n mounted = false;\r\n if (appInstance) {\r\n appInstance.close();\r\n }\r\n };\r\n }, [appInfo.name, appInfo.version, applyHostStyles, onTeardown]);\r\n\r\n // Context methods\r\n const callTool = useCallback(\r\n async (name: string, args: Record<string, unknown> = {}): Promise<CallToolResult> => {\r\n if (!app) {\r\n throw new Error('Not connected to host');\r\n }\r\n // Reset cancelled state when calling a new tool\r\n setToolCancelled({ cancelled: false });\r\n const result = await app.callServerTool({ name, arguments: args });\r\n // Also update toolResult so useToolResult() sees the new data\r\n setToolResult(result);\r\n return result;\r\n },\r\n [app]\r\n );\r\n\r\n const sendMessage = useCallback(\r\n async (text: string) => {\r\n if (!app) {\r\n console.warn('[AppProvider] Not connected - cannot send message');\r\n return;\r\n }\r\n await app.sendMessage({\r\n role: 'user',\r\n content: [{ type: 'text', text }],\r\n });\r\n },\r\n [app]\r\n );\r\n\r\n const sendLog = useCallback(\r\n async (level: 'debug' | 'info' | 'warning' | 'error', data: unknown) => {\r\n if (!app) {\r\n console.log(`[MCP App] ${level}:`, data);\r\n return;\r\n }\r\n await app.sendLog({ level, data });\r\n },\r\n [app]\r\n );\r\n\r\n // FIX #4: Use non-deprecated openLink method\r\n const openLink = useCallback(\r\n async (url: string) => {\r\n if (!app) {\r\n // Fallback: open in new tab\r\n window.open(url, '_blank', 'noopener,noreferrer');\r\n return;\r\n }\r\n await app.openLink({ url });\r\n },\r\n [app]\r\n );\r\n\r\n // FIX #5: Add requestDisplayMode\r\n const requestDisplayMode = useCallback(\r\n async (mode: McpUiDisplayMode): Promise<McpUiDisplayMode> => {\r\n if (!app) {\r\n console.warn('[AppProvider] Not connected - cannot request display mode');\r\n return 'inline';\r\n }\r\n const result = await app.requestDisplayMode({ mode });\r\n return result.mode;\r\n },\r\n [app]\r\n );\r\n\r\n const value: McpAppContextValue = {\r\n app,\r\n isConnected,\r\n error,\r\n hostContext,\r\n toolInput,\r\n toolInputPartial,\r\n toolResult,\r\n toolCancelled,\r\n callTool,\r\n sendMessage,\r\n sendLog,\r\n openLink,\r\n requestDisplayMode,\r\n };\r\n\r\n // Theme is applied via CSS custom properties\r\n const theme = hostContext.theme ?? 'light';\r\n\r\n return (\r\n <McpAppContext.Provider value={value}>\r\n <div className=\"lui-root\" data-theme={theme}>\r\n {children}\r\n </div>\r\n </McpAppContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Default context for SSR (no AppProvider available)\r\n */\r\nconst ssrDefaultContext: McpAppContextValue = {\r\n app: null,\r\n isConnected: false,\r\n error: null,\r\n hostContext: {},\r\n toolInput: null,\r\n toolInputPartial: null,\r\n toolResult: null,\r\n toolCancelled: { cancelled: false },\r\n callTool: async () => { throw new Error('callTool not available during SSR'); },\r\n sendMessage: async () => { console.warn('sendMessage not available during SSR'); },\r\n sendLog: async () => { console.warn('sendLog not available during SSR'); },\r\n openLink: async () => { console.warn('openLink not available during SSR'); },\r\n requestDisplayMode: async () => { console.warn('requestDisplayMode not available during SSR'); return 'inline'; },\r\n};\r\n\r\n/**\r\n * Hook to access the MCP App context\r\n * Returns SSR-safe defaults when no provider is available (during server rendering)\r\n */\r\nexport function useMcpApp(): McpAppContextValue {\r\n const context = useContext(McpAppContext);\r\n // Return SSR defaults if no context (during server-side rendering)\r\n if (!context) {\r\n return ssrDefaultContext;\r\n }\r\n return context;\r\n}\r\n","/**\r\n * ToolProvider - Scoped configuration provider for MCP tool components\r\n * \r\n * Allows setting default behaviors for all tool components within its scope,\r\n * such as default result display, error handling, and loading states.\r\n * \r\n * @example Set default toast display\r\n * ```tsx\r\n * <ToolProvider defaults={{ resultDisplay: { display: 'toast' } }}>\r\n * <ToolButton tool=\"action1\">Action 1</ToolButton>\r\n * <ToolButton tool=\"action2\">Action 2</ToolButton>\r\n * {/* Both buttons will show toast on success *\\/}\r\n * </ToolProvider>\r\n * ```\r\n * \r\n * @example Global error handler\r\n * ```tsx\r\n * <ToolProvider \r\n * defaults={{ \r\n * onError: (err) => logError(err),\r\n * showLoading: true \r\n * }}\r\n * >\r\n * <MyApp />\r\n * </ToolProvider>\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\r\nimport type { ToolResultConfig, ToolProviderConfig } from '@/types/mcp-types';\r\n\r\n/**\r\n * ToolContext value\r\n */\r\nexport interface ToolContextValue {\r\n /** Default result display configuration */\r\n resultDisplay: ToolResultConfig;\r\n /** Default error handler */\r\n onError?: (error: Error) => void;\r\n /** Show loading states globally */\r\n showLoading: boolean;\r\n}\r\n\r\n/**\r\n * Default context value\r\n */\r\nconst DEFAULT_CONTEXT: ToolContextValue = {\r\n resultDisplay: { display: 'none' },\r\n showLoading: true,\r\n};\r\n\r\n/**\r\n * Tool context\r\n */\r\nconst ToolContext = createContext<ToolContextValue>(DEFAULT_CONTEXT);\r\n\r\n/**\r\n * ToolProvider props\r\n */\r\nexport interface ToolProviderProps {\r\n /** Default configuration for all tool components */\r\n defaults?: ToolProviderConfig;\r\n /** Children */\r\n children: ReactNode;\r\n}\r\n\r\n/**\r\n * ToolProvider component\r\n */\r\nexport function ToolProvider({\r\n defaults = {},\r\n children,\r\n}: ToolProviderProps) {\r\n const parentContext = useContext(ToolContext);\r\n\r\n // Merge with parent context\r\n const value = useMemo<ToolContextValue>(() => ({\r\n resultDisplay: defaults.resultDisplay ?? parentContext.resultDisplay,\r\n onError: defaults.onError ?? parentContext.onError,\r\n showLoading: defaults.showLoading ?? parentContext.showLoading,\r\n }), [defaults, parentContext]);\r\n\r\n return (\r\n <ToolContext.Provider value={value}>\r\n {children}\r\n </ToolContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook to access tool context\r\n */\r\nexport function useToolContext(): ToolContextValue {\r\n return useContext(ToolContext);\r\n}\r\n","import React from \"react\"\nimport {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Utility function for merging Tailwind CSS classes\r\n * Uses clsx for conditional classes and tailwind-merge to handle conflicts\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","/**\r\n * useTool - Enhanced hook for calling MCP tools\r\n * \r\n * Features:\r\n * - Type-safe tool calls with generics\r\n * - Loading, success, and error states\r\n * - Retry support with configurable delay\r\n * - Abort support for cancelling in-flight calls\r\n * - Result transformation\r\n * - Callback hooks for all states\r\n * \r\n * @example Basic usage\r\n * ```tsx\r\n * const { call, loading, result, error } = useTool<WeatherArgs, WeatherData>('get-weather');\r\n * \r\n * const handleClick = async () => {\r\n * const data = await call({ city: 'London' });\r\n * console.log('Weather:', data);\r\n * };\r\n * ```\r\n * \r\n * @example With options\r\n * ```tsx\r\n * const { call, loading, result, retry } = useTool('create-item', {\r\n * defaultArgs: { type: 'note' },\r\n * transform: (result) => result.structuredContent?.item,\r\n * retry: { count: 3, delay: 1000 },\r\n * onSuccess: (item) => toast.success(`Created: ${item.name}`),\r\n * onError: (error) => toast.error(error.message),\r\n * });\r\n * ```\r\n */\r\nimport { useState, useCallback, useRef } from 'react';\r\nimport { useMcpApp } from './AppProvider';\r\nimport type {\r\n UseToolOptions,\r\n UseToolReturn,\r\n ToolState\r\n} from '@/types/mcp-types';\r\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\r\n\r\n/**\r\n * Extract data from CallToolResult\r\n */\r\nfunction extractResultData<T>(result: CallToolResult): T | null {\r\n // Handle structuredContent (preferred)\r\n if ('structuredContent' in result && result.structuredContent) {\r\n return result.structuredContent as T;\r\n }\r\n\r\n // Handle text content\r\n if (result.content && result.content.length > 0) {\r\n const textContent = result.content\r\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\r\n .map(c => c.text)\r\n .join('');\r\n\r\n if (textContent) {\r\n try {\r\n return JSON.parse(textContent) as T;\r\n } catch {\r\n return textContent as T;\r\n }\r\n }\r\n }\r\n\r\n return result as T;\r\n}\r\n\r\n/**\r\n * useTool hook for calling MCP tools with full state management\r\n */\r\nexport function useTool<\r\n TArgs extends Record<string, unknown> = Record<string, unknown>,\r\n TResult = unknown\r\n>(\r\n toolName: string,\r\n options: UseToolOptions<TArgs, TResult> = {}\r\n): UseToolReturn<TArgs, TResult> {\r\n const { callTool } = useMcpApp();\r\n\r\n // State\r\n const [state, setState] = useState<ToolState>('idle');\r\n const [result, setResult] = useState<TResult | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n // Refs for cleanup and retry\r\n const abortControllerRef = useRef<AbortController | null>(null);\r\n const lastArgsRef = useRef<TArgs | undefined>(undefined);\r\n const retryCountRef = useRef(0);\r\n\r\n const {\r\n defaultArgs,\r\n transform,\r\n retry,\r\n onStart,\r\n onSuccess,\r\n onError,\r\n onComplete,\r\n } = options;\r\n\r\n // Parse retry config\r\n const retryConfig = typeof retry === 'number'\r\n ? { count: retry, delay: 1000 }\r\n : retry ?? { count: 0, delay: 1000 };\r\n\r\n /**\r\n * Execute the tool call\r\n */\r\n const executeCall = useCallback(\r\n async (args?: TArgs): Promise<TResult> => {\r\n // Merge args with defaults\r\n const mergedArgs = { ...defaultArgs, ...args } as Record<string, unknown>;\r\n lastArgsRef.current = mergedArgs as TArgs;\r\n\r\n // Create abort controller\r\n abortControllerRef.current = new AbortController();\r\n\r\n // Update state\r\n setState('loading');\r\n setError(null);\r\n onStart?.();\r\n\r\n try {\r\n const response = await callTool(toolName, mergedArgs);\r\n\r\n // Check if aborted\r\n if (abortControllerRef.current?.signal.aborted) {\r\n throw new Error('Tool call aborted');\r\n }\r\n\r\n // Transform result\r\n let data: TResult;\r\n if (transform) {\r\n data = transform(response as CallToolResult);\r\n } else {\r\n data = extractResultData<TResult>(response as CallToolResult) as TResult;\r\n }\r\n\r\n // Success state\r\n setState('success');\r\n setResult(data);\r\n retryCountRef.current = 0;\r\n onSuccess?.(data);\r\n onComplete?.();\r\n\r\n return data;\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n\r\n // Retry logic\r\n if (retryCountRef.current < retryConfig.count) {\r\n retryCountRef.current++;\r\n await new Promise(resolve => setTimeout(resolve, retryConfig.delay));\r\n return executeCall(args);\r\n }\r\n\r\n // Error state\r\n setState('error');\r\n setError(error);\r\n retryCountRef.current = 0;\r\n onError?.(error);\r\n onComplete?.();\r\n\r\n throw error;\r\n }\r\n },\r\n [callTool, toolName, defaultArgs, transform, retryConfig, onStart, onSuccess, onError, onComplete]\r\n );\r\n\r\n /**\r\n * Main call function\r\n */\r\n const call = useCallback(\r\n async (args?: TArgs): Promise<TResult> => {\r\n retryCountRef.current = 0;\r\n return executeCall(args);\r\n },\r\n [executeCall]\r\n );\r\n\r\n /**\r\n * Mutate function - same as call but more semantically correct for mutations\r\n */\r\n const mutate = useCallback(\r\n async (args: TArgs): Promise<TResult> => {\r\n return call(args);\r\n },\r\n [call]\r\n );\r\n\r\n /**\r\n * Reset to initial state\r\n */\r\n const reset = useCallback(() => {\r\n setState('idle');\r\n setResult(null);\r\n setError(null);\r\n retryCountRef.current = 0;\r\n abortControllerRef.current?.abort();\r\n }, []);\r\n\r\n /**\r\n * Retry last call\r\n */\r\n const retryCall = useCallback(async (): Promise<TResult | null> => {\r\n if (lastArgsRef.current === undefined && !defaultArgs) {\r\n return null;\r\n }\r\n retryCountRef.current = 0;\r\n return executeCall(lastArgsRef.current);\r\n }, [executeCall, defaultArgs]);\r\n\r\n /**\r\n * Abort current call\r\n */\r\n const abort = useCallback(() => {\r\n abortControllerRef.current?.abort();\r\n setState('idle');\r\n }, []);\r\n\r\n return {\r\n call,\r\n mutate,\r\n state,\r\n loading: state === 'loading',\r\n result,\r\n error,\r\n reset,\r\n retry: retryCall,\r\n abort,\r\n };\r\n}\r\n\r\n// Re-export types for convenience\r\nexport type { UseToolOptions, UseToolReturn, ToolState };\r\n","/**\r\n * ToolButton - A button specifically designed for MCP tool invocation\r\n * \r\n * Features:\r\n * - Automatic loading state during tool execution\r\n * - Result display (inline, toast, modal)\r\n * - Confirmation dialog support\r\n * - Render props for custom rendering\r\n * - Full accessibility\r\n * \r\n * @example Simple tool call\r\n * ```tsx\r\n * <ToolButton tool=\"refresh-data\">\r\n * Refresh\r\n * </ToolButton>\r\n * ```\r\n * \r\n * @example With result toast\r\n * ```tsx\r\n * <ToolButton \r\n * tool=\"create-order\" \r\n * args={{ product: 'shoes' }}\r\n * resultDisplay=\"toast\"\r\n * onToolSuccess={(order) => navigate(`/orders/${order.id}`)}\r\n * >\r\n * Place Order\r\n * </ToolButton>\r\n * ```\r\n * \r\n * @example With confirmation\r\n * ```tsx\r\n * <ToolButton \r\n * tool=\"delete-item\" \r\n * args={{ id: item.id }}\r\n * confirm={{ \r\n * title: 'Delete Item?',\r\n * description: 'This action cannot be undone.' \r\n * }}\r\n * variant=\"destructive\"\r\n * >\r\n * Delete\r\n * </ToolButton>\r\n * ```\r\n * \r\n * @example Render props\r\n * ```tsx\r\n * <ToolButton tool=\"process-data\">\r\n * {({ loading, result, error }) => (\r\n * loading ? <Spinner /> : result ? '✓ Done' : 'Process'\r\n * )}\r\n * </ToolButton>\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { useState, useCallback } from 'react';\r\nimport { Loader2, Check, X } from 'lucide-react';\r\nimport { Button, buttonVariants } from '@/components/ui/button';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogHeader,\r\n DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { useTool } from './useTool';\r\nimport { cn } from '@/lib/utils';\r\nimport { toast } from 'sonner';\r\nimport type { VariantProps } from 'class-variance-authority';\r\nimport type { ToolBinding, ConfirmConfig, ToolState } from '@/types/mcp-types';\r\n\r\n/**\r\n * State exposed to render props\r\n */\r\nexport interface ToolButtonState {\r\n /** Whether tool is currently executing */\r\n loading: boolean;\r\n /** Current tool state */\r\n state: ToolState;\r\n /** Result from last successful call */\r\n result: unknown | null;\r\n /** Error from last failed call */\r\n error: Error | null;\r\n /** Whether we have any result */\r\n hasResult: boolean;\r\n}\r\n\r\n/**\r\n * ToolButton props\r\n */\r\nexport interface ToolButtonProps\r\n extends Omit<React.ComponentProps<'button'>, 'children'>,\r\n VariantProps<typeof buttonVariants> {\r\n /** Tool to call on click - string or full config */\r\n tool: string | ToolBinding;\r\n /** Tool arguments */\r\n args?: Record<string, unknown>;\r\n\r\n // Result handling\r\n /** How to display result: 'inline' | 'toast' | 'modal' | 'none' */\r\n resultDisplay?: 'inline' | 'toast' | 'modal' | 'none';\r\n /** Custom result renderer */\r\n renderResult?: (result: unknown) => React.ReactNode;\r\n /** Duration to show result (for inline/toast) in ms */\r\n resultDuration?: number;\r\n /** Success message for toast */\r\n successMessage?: string | ((result: unknown) => string);\r\n /** Error message for toast */\r\n errorMessage?: string | ((error: Error) => string);\r\n\r\n // Callbacks\r\n /** Called when tool starts executing */\r\n onToolStart?: () => void;\r\n /** Called on successful result */\r\n onToolSuccess?: (result: unknown) => void;\r\n /** Called on error */\r\n onToolError?: (error: Error) => void;\r\n /** Called after completion (success or error) */\r\n onToolComplete?: () => void;\r\n\r\n // Loading customization\r\n /** Text to show while loading */\r\n loadingText?: string;\r\n /** Custom loading icon */\r\n loadingIcon?: React.ReactNode;\r\n /** Disable button while loading (default: true) */\r\n disableWhileLoading?: boolean;\r\n\r\n // Confirmation\r\n /** Require confirmation before calling */\r\n confirm?: boolean | ConfirmConfig;\r\n\r\n // Content\r\n /** Button content - can be ReactNode or render function */\r\n children?: React.ReactNode | ((state: ToolButtonState) => React.ReactNode);\r\n\r\n /** Use Radix Slot for composition */\r\n asChild?: boolean;\r\n}\r\n\r\n/**\r\n * ToolButton component\r\n */\r\nexport function ToolButton({\r\n tool,\r\n args = {},\r\n resultDisplay = 'none',\r\n renderResult,\r\n resultDuration = 3000,\r\n successMessage,\r\n errorMessage,\r\n onToolStart,\r\n onToolSuccess,\r\n onToolError,\r\n onToolComplete,\r\n loadingText,\r\n loadingIcon,\r\n disableWhileLoading = true,\r\n confirm,\r\n children,\r\n className,\r\n variant = 'default',\r\n size = 'default',\r\n disabled,\r\n asChild = false,\r\n ...props\r\n}: ToolButtonProps) {\r\n // Normalize tool config\r\n const toolConfig = typeof tool === 'string' ? { name: tool } : tool;\r\n const mergedArgs = { ...toolConfig.args, ...args };\r\n\r\n // Tool hook\r\n const { call, state, loading, result, error, reset } = useTool(toolConfig.name, {\r\n defaultArgs: mergedArgs,\r\n transform: toolConfig.transform,\r\n onStart: onToolStart,\r\n onSuccess: onToolSuccess,\r\n onError: onToolError,\r\n onComplete: onToolComplete,\r\n });\r\n\r\n // Local state\r\n const [showConfirm, setShowConfirm] = useState(false);\r\n const [showResult, setShowResult] = useState(false);\r\n\r\n // Compute button state for render props\r\n const buttonState: ToolButtonState = {\r\n loading,\r\n state,\r\n result,\r\n error,\r\n hasResult: result !== null || error !== null,\r\n };\r\n\r\n /**\r\n * Execute the tool call\r\n */\r\n const executeCall = useCallback(async () => {\r\n try {\r\n const res = await call();\r\n\r\n // Handle result display\r\n if (resultDisplay === 'toast') {\r\n const message = typeof successMessage === 'function'\r\n ? successMessage(res)\r\n : successMessage ?? 'Success';\r\n toast.success(message);\r\n } else if (resultDisplay === 'inline') {\r\n setShowResult(true);\r\n setTimeout(() => setShowResult(false), resultDuration);\r\n }\r\n } catch (err) {\r\n if (resultDisplay === 'toast') {\r\n const message = typeof errorMessage === 'function'\r\n ? errorMessage(err instanceof Error ? err : new Error(String(err)))\r\n : errorMessage ?? (err instanceof Error ? err.message : 'An error occurred');\r\n toast.error(message);\r\n } else if (resultDisplay === 'inline') {\r\n setShowResult(true);\r\n setTimeout(() => setShowResult(false), resultDuration);\r\n }\r\n }\r\n }, [call, resultDisplay, successMessage, errorMessage, resultDuration]);\r\n\r\n /**\r\n * Handle click - show confirm or execute\r\n */\r\n const handleClick = useCallback(() => {\r\n if (confirm) {\r\n setShowConfirm(true);\r\n } else {\r\n executeCall();\r\n }\r\n }, [confirm, executeCall]);\r\n\r\n /**\r\n * Handle confirm\r\n */\r\n const handleConfirm = useCallback(() => {\r\n setShowConfirm(false);\r\n executeCall();\r\n }, [executeCall]);\r\n\r\n // Confirm dialog config\r\n const confirmConfig: ConfirmConfig = typeof confirm === 'object'\r\n ? confirm\r\n : {\r\n title: 'Confirm Action',\r\n description: 'Are you sure you want to proceed?',\r\n confirmText: 'Confirm',\r\n cancelText: 'Cancel',\r\n };\r\n\r\n // Render children\r\n const renderChildren = () => {\r\n if (typeof children === 'function') {\r\n return children(buttonState);\r\n }\r\n\r\n if (loading) {\r\n return (\r\n <>\r\n {loadingIcon ?? <Loader2 className=\"animate-spin\" />}\r\n {loadingText && <span>{loadingText}</span>}\r\n {!loadingText && children}\r\n </>\r\n );\r\n }\r\n\r\n if (showResult && resultDisplay === 'inline') {\r\n if (error) {\r\n return (\r\n <>\r\n <X className=\"text-destructive\" />\r\n <span>{error.message}</span>\r\n </>\r\n );\r\n }\r\n if (renderResult) {\r\n return renderResult(result);\r\n }\r\n return (\r\n <>\r\n <Check className=\"text-success\" />\r\n <span>Done</span>\r\n </>\r\n );\r\n }\r\n\r\n return children;\r\n };\r\n\r\n return (\r\n <>\r\n <Button\r\n type=\"button\"\r\n variant={variant}\r\n size={size}\r\n className={cn(className)}\r\n disabled={disabled || (disableWhileLoading && loading)}\r\n onClick={handleClick}\r\n asChild={asChild}\r\n {...props}\r\n >\r\n {renderChildren()}\r\n </Button>\r\n\r\n {/* Confirmation Dialog */}\r\n {confirm && (\r\n <Dialog open={showConfirm} onOpenChange={setShowConfirm}>\r\n <DialogContent>\r\n <DialogHeader>\r\n <DialogTitle>{confirmConfig.title}</DialogTitle>\r\n {confirmConfig.description && (\r\n <DialogDescription>\r\n {confirmConfig.description}\r\n </DialogDescription>\r\n )}\r\n </DialogHeader>\r\n <DialogFooter>\r\n <Button\r\n variant=\"outline\"\r\n onClick={() => setShowConfirm(false)}\r\n >\r\n {confirmConfig.cancelText ?? 'Cancel'}\r\n </Button>\r\n <Button\r\n variant={confirmConfig.confirmVariant ?? (variant === 'destructive' ? 'destructive' : 'default')}\r\n onClick={handleConfirm}\r\n >\r\n {confirmConfig.confirmText ?? 'Confirm'}\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n </Dialog>\r\n )}\r\n </>\r\n );\r\n}\r\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","/**\r\n * ToolSelect - Select component with MCP tool integration\r\n * \r\n * Features:\r\n * - Fetch options from an MCP tool\r\n * - Trigger a tool call on selection\r\n * - Transform tool results to options\r\n * - Loading and empty states\r\n * \r\n * @example Fetch options from tool\r\n * ```tsx\r\n * <ToolSelect\r\n * optionsTool=\"list-categories\"\r\n * transformOptions={(result) => result.categories.map(c => ({\r\n * value: c.id,\r\n * label: c.name\r\n * }))}\r\n * placeholder=\"Select category\"\r\n * />\r\n * ```\r\n * \r\n * @example Call tool on selection\r\n * ```tsx\r\n * <ToolSelect\r\n * options={[\r\n * { value: 'asc', label: 'Ascending' },\r\n * { value: 'desc', label: 'Descending' }\r\n * ]}\r\n * onSelectTool=\"set-sort-order\"\r\n * argName=\"order\"\r\n * />\r\n * ```\r\n * \r\n * @example Both: fetch options AND call on select\r\n * ```tsx\r\n * <ToolSelect\r\n * optionsTool=\"list-projects\"\r\n * onSelectTool=\"switch-project\"\r\n * argName=\"projectId\"\r\n * />\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { useEffect, useState, useCallback } from 'react';\r\nimport { Loader2 } from 'lucide-react';\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/ui/select';\r\nimport { useTool } from './useTool';\r\nimport { cn } from '@/lib/utils';\r\nimport { toast } from 'sonner';\r\nimport type { ToolBinding } from '@/types/mcp-types';\r\n\r\n/**\r\n * Option type for ToolSelect\r\n */\r\nexport interface ToolSelectOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n icon?: React.ReactNode;\r\n description?: string;\r\n}\r\n\r\n/**\r\n * ToolSelect props\r\n */\r\nexport interface ToolSelectProps {\r\n /** Tool to call when option selected */\r\n onSelectTool?: string | ToolBinding;\r\n /** Field name to pass selection value as */\r\n argName?: string;\r\n /** Additional args to pass with selection */\r\n additionalArgs?: Record<string, unknown>;\r\n\r\n /** Tool to fetch options from */\r\n optionsTool?: string | ToolBinding;\r\n /** Args for options tool */\r\n optionsArgs?: Record<string, unknown>;\r\n /** Transform tool result to options */\r\n transformOptions?: (result: unknown) => ToolSelectOption[];\r\n\r\n /** Static options (combined with tool options) */\r\n options?: ToolSelectOption[];\r\n\r\n // State handling\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Placeholder while loading options */\r\n loadingPlaceholder?: string;\r\n /** Empty state message */\r\n emptyMessage?: string;\r\n\r\n // Controlled/Uncontrolled\r\n /** Controlled value */\r\n value?: string;\r\n /** Default value */\r\n defaultValue?: string;\r\n /** Called when value changes */\r\n onValueChange?: (value: string) => void;\r\n\r\n // Callbacks\r\n /** Called when options are loaded */\r\n onOptionsLoaded?: (options: ToolSelectOption[]) => void;\r\n /** Called when selection tool succeeds */\r\n onSelectionSuccess?: (result: unknown) => void;\r\n /** Called when selection tool fails */\r\n onSelectionError?: (error: Error) => void;\r\n\r\n // Display\r\n /** Show toast on selection success */\r\n showSuccessToast?: boolean;\r\n /** Success message */\r\n successMessage?: string | ((result: unknown) => string);\r\n\r\n // Styling\r\n className?: string;\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n * ToolSelect component\r\n */\r\nexport function ToolSelect({\r\n onSelectTool,\r\n argName = 'value',\r\n additionalArgs = {},\r\n optionsTool,\r\n optionsArgs = {},\r\n transformOptions,\r\n options: staticOptions = [],\r\n placeholder = 'Select an option',\r\n loadingPlaceholder = 'Loading...',\r\n emptyMessage = 'No options available',\r\n value: controlledValue,\r\n defaultValue,\r\n onValueChange,\r\n onOptionsLoaded,\r\n onSelectionSuccess,\r\n onSelectionError,\r\n showSuccessToast = false,\r\n successMessage,\r\n className,\r\n disabled = false,\r\n}: ToolSelectProps) {\r\n // State for fetched options\r\n const [fetchedOptions, setFetchedOptions] = useState<ToolSelectOption[]>([]);\r\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\r\n\r\n // Normalize tool configs\r\n const optionsToolConfig = optionsTool\r\n ? (typeof optionsTool === 'string' ? { name: optionsTool } : optionsTool)\r\n : null;\r\n\r\n const selectToolConfig = onSelectTool\r\n ? (typeof onSelectTool === 'string' ? { name: onSelectTool } : onSelectTool)\r\n : null;\r\n\r\n // Options fetch hook\r\n const optionsHook = useTool(optionsToolConfig?.name ?? '', {\r\n defaultArgs: { ...optionsToolConfig?.args, ...optionsArgs },\r\n });\r\n\r\n // Selection tool hook\r\n const selectHook = useTool(selectToolConfig?.name ?? '', {\r\n onSuccess: (result) => {\r\n onSelectionSuccess?.(result);\r\n if (showSuccessToast) {\r\n const message = typeof successMessage === 'function'\r\n ? successMessage(result)\r\n : successMessage ?? 'Selection saved';\r\n toast.success(message);\r\n }\r\n },\r\n onError: onSelectionError,\r\n });\r\n\r\n // Fetch options on mount\r\n useEffect(() => {\r\n if (optionsToolConfig) {\r\n optionsHook.call().then((result) => {\r\n const options = transformOptions\r\n ? transformOptions(result)\r\n : (result as ToolSelectOption[]);\r\n setFetchedOptions(options);\r\n onOptionsLoaded?.(options);\r\n }).catch(() => {\r\n // Error is handled by the hook\r\n });\r\n }\r\n }, [optionsToolConfig?.name]);\r\n\r\n // Combine static and fetched options\r\n const allOptions = [...staticOptions, ...fetchedOptions];\r\n\r\n // Controlled vs uncontrolled\r\n const value = controlledValue ?? internalValue;\r\n\r\n /**\r\n * Handle value change\r\n */\r\n const handleValueChange = useCallback((newValue: string) => {\r\n // Update internal state\r\n setInternalValue(newValue);\r\n\r\n // Call external handler\r\n onValueChange?.(newValue);\r\n\r\n // Call selection tool if configured\r\n if (selectToolConfig) {\r\n selectHook.call({\r\n [argName]: newValue,\r\n ...additionalArgs,\r\n } as Record<string, unknown>);\r\n }\r\n }, [onValueChange, selectToolConfig, argName, additionalArgs, selectHook]);\r\n\r\n // Loading state\r\n const isLoading = optionsHook.loading || selectHook.loading;\r\n const hasError = optionsHook.error || selectHook.error;\r\n\r\n return (\r\n <Select\r\n value={value}\r\n onValueChange={handleValueChange}\r\n disabled={disabled || isLoading}\r\n >\r\n <SelectTrigger className={cn('w-full', className)}>\r\n {isLoading ? (\r\n <div className=\"flex items-center gap-2\">\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n <span className=\"text-muted-foreground\">\r\n {optionsHook.loading ? loadingPlaceholder : 'Saving...'}\r\n </span>\r\n </div>\r\n ) : (\r\n <SelectValue placeholder={placeholder} />\r\n )}\r\n </SelectTrigger>\r\n <SelectContent>\r\n {allOptions.length === 0 ? (\r\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\r\n {hasError ? 'Error loading options' : emptyMessage}\r\n </div>\r\n ) : (\r\n allOptions.map((option) => (\r\n <SelectItem\r\n key={option.value}\r\n value={option.value}\r\n disabled={option.disabled}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {option.icon}\r\n <div>\r\n <div>{option.label}</div>\r\n {option.description && (\r\n <div className=\"text-xs text-muted-foreground\">\r\n {option.description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </SelectItem>\r\n ))\r\n )}\r\n </SelectContent>\r\n </Select>\r\n );\r\n}\r\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","/**\r\n * ToolInput - Input component with MCP tool integration\r\n * \r\n * Features:\r\n * - Debounced search with tool calls\r\n * - Autocomplete with suggestions from tool results\r\n * - Minimum character threshold\r\n * - Loading states\r\n * \r\n * @example Debounced search\r\n * ```tsx\r\n * <ToolInput\r\n * searchTool=\"search-products\"\r\n * argName=\"query\"\r\n * debounce={300}\r\n * minChars={2}\r\n * />\r\n * ```\r\n * \r\n * @example With autocomplete\r\n * ```tsx\r\n * <ToolInput\r\n * searchTool=\"search-users\"\r\n * autocomplete\r\n * transformSuggestions={(r) => r.users.map(u => ({\r\n * value: u.id,\r\n * label: u.name,\r\n * description: u.email\r\n * }))}\r\n * onSuggestionSelect={(s) => selectUser(s.value)}\r\n * />\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { Loader2, Search, X } from 'lucide-react';\r\nimport { Input } from '@/components/ui/input';\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandList,\r\n} from '@/components/ui/command';\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from '@/components/ui/popover';\r\nimport { useTool } from './useTool';\r\nimport { cn } from '@/lib/utils';\r\nimport type { ToolBinding } from '@/types/mcp-types';\r\n\r\n/**\r\n * Suggestion type for autocomplete\r\n */\r\nexport interface ToolInputSuggestion {\r\n value: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n description?: string;\r\n}\r\n\r\n/**\r\n * ToolInput props \r\n */\r\nexport interface ToolInputProps extends Omit<React.ComponentProps<'input'>, 'onChange'> {\r\n /** Tool to call on input change (debounced) */\r\n searchTool?: string | ToolBinding;\r\n /** Debounce delay in ms */\r\n debounce?: number;\r\n /** Minimum characters before calling tool */\r\n minChars?: number;\r\n /** Field name for the input value */\r\n argName?: string;\r\n /** Additional args to pass with search */\r\n additionalArgs?: Record<string, unknown>;\r\n\r\n // Autocomplete\r\n /** Enable autocomplete dropdown */\r\n autocomplete?: boolean;\r\n /** Transform search results to suggestions */\r\n transformSuggestions?: (result: unknown) => ToolInputSuggestion[];\r\n /** Called when suggestion is selected */\r\n onSuggestionSelect?: (suggestion: ToolInputSuggestion) => void;\r\n /** Empty state message */\r\n emptyMessage?: string;\r\n\r\n // Controlled\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n\r\n // Callbacks\r\n /** Called with search results */\r\n onSearchResults?: (results: unknown) => void;\r\n /** Called on search error */\r\n onSearchError?: (error: Error) => void;\r\n\r\n // Display\r\n /** Show search icon */\r\n showSearchIcon?: boolean;\r\n /** Show clear button */\r\n showClearButton?: boolean;\r\n /** Show loading indicator */\r\n showLoadingIndicator?: boolean;\r\n}\r\n\r\n/**\r\n * ToolInput component\r\n */\r\nexport function ToolInput({\r\n searchTool,\r\n debounce = 300,\r\n minChars = 1,\r\n argName = 'query',\r\n additionalArgs = {},\r\n autocomplete = false,\r\n transformSuggestions,\r\n onSuggestionSelect,\r\n emptyMessage = 'No results found',\r\n value: controlledValue,\r\n onChange,\r\n onSearchResults,\r\n onSearchError,\r\n showSearchIcon = true,\r\n showClearButton = true,\r\n showLoadingIndicator = true,\r\n className,\r\n placeholder = 'Search...',\r\n disabled,\r\n ...props\r\n}: ToolInputProps) {\r\n // State\r\n const [internalValue, setInternalValue] = useState('');\r\n const [suggestions, setSuggestions] = useState<ToolInputSuggestion[]>([]);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n // Normalize tool config\r\n const toolConfig = searchTool\r\n ? (typeof searchTool === 'string' ? { name: searchTool } : searchTool)\r\n : null;\r\n\r\n // Search tool hook\r\n const { call, loading, error, reset } = useTool(toolConfig?.name ?? '', {\r\n defaultArgs: { ...toolConfig?.args, ...additionalArgs },\r\n onSuccess: (result) => {\r\n onSearchResults?.(result);\r\n if (autocomplete && transformSuggestions) {\r\n const suggestions = transformSuggestions(result);\r\n setSuggestions(suggestions);\r\n if (suggestions.length > 0) {\r\n setIsOpen(true);\r\n }\r\n }\r\n },\r\n onError: onSearchError,\r\n });\r\n\r\n // Controlled vs uncontrolled\r\n const value = controlledValue ?? internalValue;\r\n\r\n /**\r\n * Handle input change with debounce\r\n */\r\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n\r\n // Update internal state\r\n setInternalValue(newValue);\r\n onChange?.(newValue);\r\n\r\n // Clear previous debounce\r\n if (debounceRef.current) {\r\n clearTimeout(debounceRef.current);\r\n }\r\n\r\n // Reset if below minChars\r\n if (newValue.length < minChars) {\r\n setSuggestions([]);\r\n setIsOpen(false);\r\n return;\r\n }\r\n\r\n // Debounced search\r\n if (toolConfig) {\r\n debounceRef.current = setTimeout(() => {\r\n call({ [argName]: newValue } as Record<string, unknown>);\r\n }, debounce);\r\n }\r\n }, [onChange, minChars, toolConfig, argName, debounce, call]);\r\n\r\n /**\r\n * Handle clear\r\n */\r\n const handleClear = useCallback(() => {\r\n setInternalValue('');\r\n onChange?.('');\r\n setSuggestions([]);\r\n setIsOpen(false);\r\n reset();\r\n inputRef.current?.focus();\r\n }, [onChange, reset]);\r\n\r\n /**\r\n * Handle suggestion select\r\n */\r\n const handleSelect = useCallback((suggestion: ToolInputSuggestion) => {\r\n setInternalValue(suggestion.label);\r\n onChange?.(suggestion.label);\r\n setIsOpen(false);\r\n onSuggestionSelect?.(suggestion);\r\n }, [onChange, onSuggestionSelect]);\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (debounceRef.current) {\r\n clearTimeout(debounceRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n // Base input element\r\n const inputElement = (\r\n <div className={cn('relative', className)}>\r\n {showSearchIcon && (\r\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\r\n )}\r\n <Input\r\n ref={inputRef}\r\n value={value}\r\n onChange={handleChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n className={cn(\r\n showSearchIcon && 'pl-9',\r\n (showClearButton || showLoadingIndicator) && 'pr-9'\r\n )}\r\n {...props}\r\n />\r\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1\">\r\n {showLoadingIndicator && loading && (\r\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\r\n )}\r\n {showClearButton && value && !loading && (\r\n <button\r\n type=\"button\"\r\n onClick={handleClear}\r\n className=\"h-4 w-4 text-muted-foreground hover:text-foreground transition-colors\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n\r\n // If no autocomplete, just return input\r\n if (!autocomplete) {\r\n return inputElement;\r\n }\r\n\r\n // With autocomplete popover\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger asChild>\r\n {inputElement}\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className=\"p-0 w-[var(--radix-popover-trigger-width)]\"\r\n align=\"start\"\r\n onOpenAutoFocus={(e) => e.preventDefault()}\r\n >\r\n <Command>\r\n <CommandList>\r\n <CommandEmpty>{emptyMessage}</CommandEmpty>\r\n <CommandGroup>\r\n {suggestions.map((suggestion) => (\r\n <CommandItem\r\n key={suggestion.value}\r\n value={suggestion.value}\r\n onSelect={() => handleSelect(suggestion)}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {suggestion.icon}\r\n <div>\r\n <div>{suggestion.label}</div>\r\n {suggestion.description && (\r\n <div className=\"text-xs text-muted-foreground\">\r\n {suggestion.description}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","/**\r\n * ToolForm - Form component with MCP tool integration\r\n * \r\n * Features:\r\n * - Manual field configuration\r\n * - Auto-generate form from tool JSON schema\r\n * - Built-in validation\r\n * - Loading and result states\r\n * - Success/error callbacks\r\n * \r\n * @example Manual field definition\r\n * ```tsx\r\n * <ToolForm\r\n * toolName=\"create-user\"\r\n * fields={[\r\n * { name: 'name', label: 'Name', required: true },\r\n * { name: 'email', label: 'Email', type: 'email', required: true },\r\n * ]}\r\n * submitText=\"Create User\"\r\n * onSuccess={(user) => console.log('Created:', user)}\r\n * />\r\n * ```\r\n * \r\n * @example Auto-generate from schema\r\n * ```tsx\r\n * <ToolForm\r\n * toolName=\"create-item\"\r\n * autoSchema\r\n * submitText=\"Create\"\r\n * />\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { useState, useEffect, type FormEvent } from 'react';\r\nimport { Loader2 } from 'lucide-react';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport { Textarea } from '@/components/ui/textarea';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\r\nimport { Slider } from '@/components/ui/slider';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport { Alert, AlertDescription } from '@/components/ui/alert';\r\nimport { useTool } from './useTool';\r\nimport { useMcpApp } from './AppProvider';\r\nimport { cn } from '@/lib/utils';\r\nimport { toast } from 'sonner';\r\n\r\n/**\r\n * Form field definition\r\n */\r\nexport interface ToolFormField {\r\n /** Field name (matches tool input schema) */\r\n name: string;\r\n /** Display label */\r\n label: string;\r\n /** Input type */\r\n type?: 'text' | 'number' | 'email' | 'password' | 'textarea' | 'select' | 'checkbox' | 'switch' | 'slider';\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Default value */\r\n defaultValue?: string | number | boolean;\r\n /** Required field */\r\n required?: boolean;\r\n /** Helper text */\r\n description?: string;\r\n /** Options for select type */\r\n options?: Array<{ value: string; label: string }>;\r\n /** Min value for number/slider */\r\n min?: number;\r\n /** Max value for number/slider */\r\n max?: number;\r\n /** Step for number/slider */\r\n step?: number;\r\n /** Disable field */\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n * JSON Schema property definition (simplified)\r\n */\r\ninterface JsonSchemaProperty {\r\n type?: string;\r\n title?: string;\r\n description?: string;\r\n default?: unknown;\r\n enum?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n minLength?: number;\r\n maxLength?: number;\r\n format?: string;\r\n}\r\n\r\n/**\r\n * Tool input schema (simplified)\r\n */\r\ninterface ToolInputSchema {\r\n type?: string;\r\n properties?: Record<string, JsonSchemaProperty>;\r\n required?: string[];\r\n}\r\n\r\n/**\r\n * ToolForm props\r\n */\r\nexport interface ToolFormProps {\r\n /** Tool name to call on submit */\r\n toolName: string;\r\n /** Form fields (optional if autoSchema) */\r\n fields?: ToolFormField[];\r\n /** Auto-generate form from tool schema */\r\n autoSchema?: boolean;\r\n /** Submit button text */\r\n submitText?: string;\r\n /** Loading text */\r\n loadingText?: string;\r\n /** Callback when tool call succeeds */\r\n onSuccess?: (result: unknown) => void;\r\n /** Callback when tool call fails */\r\n onError?: (error: Error) => void;\r\n /** Show result after success */\r\n showResult?: boolean;\r\n /** Show toast on success */\r\n showSuccessToast?: boolean;\r\n /** Success message */\r\n successMessage?: string | ((result: unknown) => string);\r\n /** Reset form on success */\r\n resetOnSuccess?: boolean;\r\n /** Additional class name */\r\n className?: string;\r\n /** Layout - vertical or horizontal */\r\n layout?: 'vertical' | 'horizontal';\r\n}\r\n\r\n/**\r\n * Convert JSON schema property to ToolFormField\r\n */\r\nfunction schemaPropertyToField(\r\n name: string,\r\n prop: JsonSchemaProperty,\r\n required: boolean\r\n): ToolFormField {\r\n let type: ToolFormField['type'] = 'text';\r\n\r\n // Determine type from schema\r\n if (prop.type === 'boolean') {\r\n type = 'switch';\r\n } else if (prop.type === 'integer' || prop.type === 'number') {\r\n type = 'number';\r\n } else if (prop.enum && prop.enum.length > 0) {\r\n type = 'select';\r\n } else if (prop.format === 'email') {\r\n type = 'email';\r\n } else if (prop.format === 'password') {\r\n type = 'password';\r\n } else if (prop.maxLength && prop.maxLength > 100) {\r\n type = 'textarea';\r\n }\r\n\r\n return {\r\n name,\r\n label: prop.title ?? name.charAt(0).toUpperCase() + name.slice(1).replace(/([A-Z])/g, ' $1'),\r\n type,\r\n placeholder: prop.description,\r\n defaultValue: prop.default as string | number | boolean | undefined,\r\n required,\r\n description: prop.description,\r\n options: prop.enum?.map(v => ({ value: v, label: v })),\r\n min: prop.minimum,\r\n max: prop.maximum,\r\n };\r\n}\r\n\r\n/**\r\n * ToolForm component\r\n */\r\nexport function ToolForm({\r\n toolName,\r\n fields: manualFields,\r\n autoSchema = false,\r\n submitText = 'Submit',\r\n loadingText,\r\n onSuccess,\r\n onError,\r\n showResult = false,\r\n showSuccessToast = false,\r\n successMessage,\r\n resetOnSuccess = false,\r\n className,\r\n layout = 'vertical',\r\n}: ToolFormProps) {\r\n const { app, isConnected } = useMcpApp();\r\n const { call, loading, result, error, reset } = useTool(toolName, {\r\n onSuccess: (result) => {\r\n onSuccess?.(result);\r\n if (showSuccessToast) {\r\n const message = typeof successMessage === 'function'\r\n ? successMessage(result)\r\n : successMessage ?? 'Form submitted successfully';\r\n toast.success(message);\r\n }\r\n if (resetOnSuccess) {\r\n resetForm();\r\n }\r\n },\r\n onError,\r\n });\r\n\r\n const [fields, setFields] = useState<ToolFormField[]>(manualFields ?? []);\r\n const [schemaLoading, setSchemaLoading] = useState(autoSchema);\r\n const [formData, setFormData] = useState<Record<string, unknown>>({});\r\n\r\n /**\r\n * Initialize form data from fields\r\n */\r\n const initializeFormData = (fields: ToolFormField[]) => {\r\n const initial: Record<string, unknown> = {};\r\n fields.forEach((field) => {\r\n if (field.defaultValue !== undefined) {\r\n initial[field.name] = field.defaultValue;\r\n } else if (field.type === 'checkbox' || field.type === 'switch') {\r\n initial[field.name] = false;\r\n } else if (field.type === 'number' || field.type === 'slider') {\r\n initial[field.name] = field.min ?? 0;\r\n } else {\r\n initial[field.name] = '';\r\n }\r\n });\r\n setFormData(initial);\r\n };\r\n\r\n /**\r\n * Reset form to initial state\r\n */\r\n const resetForm = () => {\r\n initializeFormData(fields);\r\n reset();\r\n };\r\n\r\n // Load schema if autoSchema is enabled\r\n useEffect(() => {\r\n if (autoSchema && app && isConnected) {\r\n setSchemaLoading(true);\r\n\r\n // Attempt to get tool schema via listTools\r\n // Note: This is a simplified implementation\r\n // Real implementation would use app.listTools() or similar\r\n const fetchSchema = async () => {\r\n try {\r\n // This would need to be implemented in AppProvider\r\n // For now, use manual fields as fallback\r\n console.warn('[ToolForm] Auto-schema not fully implemented, use manual fields');\r\n if (manualFields) {\r\n setFields(manualFields);\r\n initializeFormData(manualFields);\r\n }\r\n } catch (err) {\r\n console.error('[ToolForm] Failed to fetch schema:', err);\r\n } finally {\r\n setSchemaLoading(false);\r\n }\r\n };\r\n\r\n fetchSchema();\r\n } else if (manualFields) {\r\n setFields(manualFields);\r\n initializeFormData(manualFields);\r\n }\r\n }, [autoSchema, app, isConnected, manualFields, toolName]);\r\n\r\n /**\r\n * Handle form submission\r\n */\r\n const handleSubmit = async (e: FormEvent) => {\r\n e.preventDefault();\r\n\r\n // Build args with proper types\r\n const args: Record<string, unknown> = {};\r\n fields.forEach((field) => {\r\n let value = formData[field.name];\r\n\r\n if (field.type === 'number' || field.type === 'slider') {\r\n value = Number(value);\r\n }\r\n\r\n args[field.name] = value;\r\n });\r\n\r\n await call(args);\r\n };\r\n\r\n /**\r\n * Handle field change\r\n */\r\n const handleChange = (name: string, value: unknown) => {\r\n setFormData((prev) => ({ ...prev, [name]: value }));\r\n };\r\n\r\n /**\r\n * Render a single field\r\n */\r\n const renderField = (field: ToolFormField) => {\r\n const value = formData[field.name];\r\n\r\n switch (field.type) {\r\n case 'textarea':\r\n return (\r\n <Textarea\r\n id={field.name}\r\n placeholder={field.placeholder}\r\n value={value as string ?? ''}\r\n onChange={(e) => handleChange(field.name, e.target.value)}\r\n disabled={field.disabled || loading}\r\n required={field.required}\r\n />\r\n );\r\n\r\n case 'select':\r\n return (\r\n <Select\r\n value={value as string ?? ''}\r\n onValueChange={(v) => handleChange(field.name, v)}\r\n disabled={field.disabled || loading}\r\n >\r\n <SelectTrigger>\r\n <SelectValue placeholder={field.placeholder ?? 'Select...'} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {field.options?.map((option) => (\r\n <SelectItem key={option.value} value={option.value}>\r\n {option.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n );\r\n\r\n case 'checkbox':\r\n return (\r\n <div className=\"flex items-center space-x-2\">\r\n <Checkbox\r\n id={field.name}\r\n checked={value as boolean ?? false}\r\n onCheckedChange={(checked) => handleChange(field.name, checked)}\r\n disabled={field.disabled || loading}\r\n />\r\n <label\r\n htmlFor={field.name}\r\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\r\n >\r\n {field.label}\r\n </label>\r\n </div>\r\n );\r\n\r\n case 'switch':\r\n return (\r\n <div className=\"flex items-center space-x-2\">\r\n <Switch\r\n id={field.name}\r\n checked={value as boolean ?? false}\r\n onCheckedChange={(checked) => handleChange(field.name, checked)}\r\n disabled={field.disabled || loading}\r\n />\r\n <Label htmlFor={field.name}>{field.label}</Label>\r\n </div>\r\n );\r\n\r\n case 'slider':\r\n return (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between text-sm\">\r\n <span>{field.min ?? 0}</span>\r\n <span>{value as number ?? field.min ?? 0}</span>\r\n <span>{field.max ?? 100}</span>\r\n </div>\r\n <Slider\r\n value={[value as number ?? field.min ?? 0]}\r\n onValueChange={([v]) => handleChange(field.name, v)}\r\n min={field.min ?? 0}\r\n max={field.max ?? 100}\r\n step={field.step ?? 1}\r\n disabled={field.disabled || loading}\r\n />\r\n </div>\r\n );\r\n\r\n case 'number':\r\n return (\r\n <Input\r\n id={field.name}\r\n type=\"number\"\r\n placeholder={field.placeholder}\r\n value={value as number ?? ''}\r\n onChange={(e) => handleChange(field.name, e.target.value)}\r\n min={field.min}\r\n max={field.max}\r\n step={field.step}\r\n disabled={field.disabled || loading}\r\n required={field.required}\r\n />\r\n );\r\n\r\n default:\r\n return (\r\n <Input\r\n id={field.name}\r\n type={field.type ?? 'text'}\r\n placeholder={field.placeholder}\r\n value={value as string ?? ''}\r\n onChange={(e) => handleChange(field.name, e.target.value)}\r\n disabled={field.disabled || loading}\r\n required={field.required}\r\n />\r\n );\r\n }\r\n };\r\n\r\n // Loading schema\r\n if (schemaLoading) {\r\n return (\r\n <div className=\"flex items-center justify-center p-8\">\r\n <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <form\r\n className={cn('space-y-4', className)}\r\n onSubmit={handleSubmit}\r\n >\r\n <div className={cn(\r\n 'space-y-4',\r\n layout === 'horizontal' && 'grid grid-cols-2 gap-4'\r\n )}>\r\n {fields.map((field) => (\r\n <div key={field.name} className=\"space-y-2\">\r\n {field.type !== 'checkbox' && field.type !== 'switch' && (\r\n <Label htmlFor={field.name}>\r\n {field.label}\r\n {field.required && <span className=\"text-destructive ml-1\">*</span>}\r\n </Label>\r\n )}\r\n {renderField(field)}\r\n {field.description && (\r\n <p className=\"text-sm text-muted-foreground\">\r\n {field.description}\r\n </p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <Button type=\"submit\" disabled={loading}>\r\n {loading ? (\r\n <>\r\n <Loader2 className=\"h-4 w-4 animate-spin mr-2\" />\r\n {loadingText ?? 'Submitting...'}\r\n </>\r\n ) : (\r\n submitText\r\n )}\r\n </Button>\r\n </div>\r\n\r\n {error && (\r\n <Alert variant=\"destructive\">\r\n <AlertDescription>{error.message}</AlertDescription>\r\n </Alert>\r\n )}\r\n\r\n {showResult && result !== null && (\r\n <div className=\"rounded-md bg-muted p-4\">\r\n <pre className=\"text-sm overflow-auto\">\r\n {JSON.stringify(result, null, 2)}\r\n </pre>\r\n </div>\r\n )}\r\n </form>\r\n );\r\n}\r\n","/**\r\n * useResource - Hook for reading MCP server resources\r\n * \r\n * Provides access to MCP resources with auto-refresh and subscription support.\r\n * Resources are identified by URIs and can contain any type of data.\r\n * \r\n * @example Basic usage\r\n * ```tsx\r\n * function UserProfile() {\r\n * const { data, loading, error, refresh } = useResource<User>('user://profile');\r\n * \r\n * if (loading) return <Skeleton />;\r\n * if (error) return <Error message={error.message} />;\r\n * \r\n * return (\r\n * <Card>\r\n * <h2>{data?.name}</h2>\r\n * <Button onClick={refresh}>Refresh</Button>\r\n * </Card>\r\n * );\r\n * }\r\n * ```\r\n * \r\n * @example With auto-refresh\r\n * ```tsx\r\n * // Refresh every 5 seconds\r\n * const { data } = useResource('metrics://dashboard', {\r\n * refreshInterval: 5000,\r\n * transform: (raw) => raw.metrics,\r\n * });\r\n * ```\r\n */\r\nimport { useState, useEffect, useCallback, useRef } from 'react';\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { UseResourceOptions, UseResourceReturn } from '@/types/mcp-types';\r\n\r\n/**\r\n * Hook for reading and managing MCP server resources\r\n */\r\nexport function useResource<T = unknown>(\r\n uri: string,\r\n options: UseResourceOptions<T> = {}\r\n): UseResourceReturn<T> {\r\n const { app, isConnected } = useMcpApp();\r\n\r\n const {\r\n refreshInterval,\r\n subscribe = false,\r\n transform,\r\n skip = false,\r\n } = options;\r\n\r\n const [data, setData] = useState<T | null>(null);\r\n const [loading, setLoading] = useState(!skip);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [lastUpdated, setLastUpdated] = useState<Date | null>(null);\r\n\r\n const intervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const mountedRef = useRef(true);\r\n\r\n /**\r\n * Fetch the resource\r\n */\r\n const fetchResource = useCallback(async (): Promise<T> => {\r\n if (!app || !isConnected) {\r\n throw new Error('Not connected to MCP host');\r\n }\r\n\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n // Note: readResource is not available on the base App class\r\n // This would need to be added or we use a custom implementation\r\n // For now, we'll simulate with a placeholder that can be extended\r\n\r\n // In a real implementation, this would be:\r\n // const result = await app.readResource({ uri });\r\n\r\n // Placeholder implementation - extend AppProvider to support resources\r\n const result = await (app as unknown as { readResource?: (params: { uri: string }) => Promise<{ contents: unknown[] }> })\r\n .readResource?.({ uri });\r\n\r\n if (!result) {\r\n throw new Error('readResource not supported by host');\r\n }\r\n\r\n // Extract data from resource contents\r\n let resourceData: T;\r\n if (result.contents && result.contents.length > 0) {\r\n const content = result.contents[0] as { text?: string; blob?: string };\r\n if (content.text) {\r\n try {\r\n resourceData = JSON.parse(content.text) as T;\r\n } catch {\r\n resourceData = content.text as T;\r\n }\r\n } else if (content.blob) {\r\n resourceData = content.blob as T;\r\n } else {\r\n resourceData = content as T;\r\n }\r\n } else {\r\n resourceData = result as T;\r\n }\r\n\r\n // Apply transform\r\n if (transform) {\r\n resourceData = transform(resourceData);\r\n }\r\n\r\n if (mountedRef.current) {\r\n setData(resourceData);\r\n setLastUpdated(new Date());\r\n setLoading(false);\r\n }\r\n\r\n return resourceData;\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n if (mountedRef.current) {\r\n setError(error);\r\n setLoading(false);\r\n }\r\n throw error;\r\n }\r\n }, [app, isConnected, uri, transform]);\r\n\r\n /**\r\n * Manual refresh function\r\n */\r\n const refresh = useCallback(async (): Promise<T> => {\r\n return fetchResource();\r\n }, [fetchResource]);\r\n\r\n // Initial fetch\r\n useEffect(() => {\r\n mountedRef.current = true;\r\n\r\n if (!skip && isConnected) {\r\n fetchResource().catch(() => {\r\n // Error is already set in state\r\n });\r\n }\r\n\r\n return () => {\r\n mountedRef.current = false;\r\n };\r\n }, [uri, isConnected, skip, fetchResource]);\r\n\r\n // Auto-refresh interval\r\n useEffect(() => {\r\n if (refreshInterval && refreshInterval > 0 && isConnected && !skip) {\r\n intervalRef.current = setInterval(() => {\r\n fetchResource().catch(() => {\r\n // Error is already set in state\r\n });\r\n }, refreshInterval);\r\n }\r\n\r\n return () => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n intervalRef.current = null;\r\n }\r\n };\r\n }, [refreshInterval, isConnected, skip, fetchResource]);\r\n\r\n // TODO: Implement subscription support when ext-apps supports it\r\n useEffect(() => {\r\n if (subscribe) {\r\n console.warn('[useResource] Subscription support not yet implemented');\r\n }\r\n }, [subscribe]);\r\n\r\n return {\r\n data,\r\n loading,\r\n error,\r\n refresh,\r\n lastUpdated,\r\n };\r\n}\r\n\r\n// Re-export types\r\nexport type { UseResourceOptions, UseResourceReturn };\r\n","import React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","/**\r\n * ResourceView - Component for displaying MCP server resources\r\n * \r\n * Provides a declarative way to fetch and display MCP resources\r\n * with loading states, error handling, and auto-refresh.\r\n * \r\n * @example Simple resource display\r\n * ```tsx\r\n * <ResourceView uri=\"user://profile\">\r\n * {(profile) => (\r\n * <Card>\r\n * <CardHeader title={profile.name} />\r\n * <CardContent>{profile.bio}</CardContent>\r\n * </Card>\r\n * )}\r\n * </ResourceView>\r\n * ```\r\n * \r\n * @example With auto-refresh\r\n * ```tsx\r\n * <ResourceView uri=\"metrics://dashboard\" refreshInterval={5000}>\r\n * {(metrics, { refresh }) => (\r\n * <div>\r\n * <MetricsChart data={metrics} />\r\n * <Button onClick={refresh}>Refresh Now</Button>\r\n * </div>\r\n * )}\r\n * </ResourceView>\r\n * ```\r\n * \r\n * @example Custom loading and error\r\n * ```tsx\r\n * <ResourceView \r\n * uri=\"data://items\"\r\n * loading={<LoadingSkeleton />}\r\n * error={(err) => <ErrorBanner message={err.message} />}\r\n * >\r\n * {(items) => <ItemList items={items} />}\r\n * </ResourceView>\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Loader2, RefreshCw, AlertCircle } from 'lucide-react';\r\nimport { useResource } from './useResource';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';\r\nimport { Skeleton } from '@/components/ui/skeleton';\r\nimport { cn } from '@/lib/utils';\r\n\r\n/**\r\n * Resource metadata passed to children\r\n */\r\nexport interface ResourceMeta {\r\n /** Resource URI */\r\n uri: string;\r\n /** Refresh the resource */\r\n refresh: () => Promise<unknown>;\r\n /** Last updated timestamp */\r\n lastUpdated: Date | null;\r\n /** Whether currently refreshing */\r\n isRefreshing: boolean;\r\n}\r\n\r\n/**\r\n * ResourceView props\r\n */\r\nexport interface ResourceViewProps<T = unknown> {\r\n /** Resource URI */\r\n uri: string;\r\n /** Refresh interval in ms */\r\n refreshInterval?: number;\r\n /** Subscribe to updates (when supported) */\r\n subscribe?: boolean;\r\n /** Transform resource data */\r\n transform?: (data: unknown) => T;\r\n\r\n /** Loading placeholder */\r\n loading?: React.ReactNode;\r\n /** Error display */\r\n error?: React.ReactNode | ((error: Error, retry: () => void) => React.ReactNode);\r\n\r\n /** Render function for resource data */\r\n children: (data: T, meta: ResourceMeta) => React.ReactNode;\r\n\r\n /** Additional className */\r\n className?: string;\r\n\r\n /** Skip initial fetch */\r\n skip?: boolean;\r\n}\r\n\r\n/**\r\n * Default loading component\r\n */\r\nfunction DefaultLoading() {\r\n return (\r\n <div className=\"flex flex-col gap-3 p-4\">\r\n <Skeleton className=\"h-4 w-3/4\" />\r\n <Skeleton className=\"h-4 w-1/2\" />\r\n <Skeleton className=\"h-20 w-full\" />\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Default error component\r\n */\r\nfunction DefaultError({\r\n error,\r\n onRetry\r\n}: {\r\n error: Error;\r\n onRetry: () => void;\r\n}) {\r\n return (\r\n <Alert variant=\"destructive\">\r\n <AlertCircle className=\"h-4 w-4\" />\r\n <AlertTitle>Error loading resource</AlertTitle>\r\n <AlertDescription className=\"flex flex-col gap-2\">\r\n <span>{error.message}</span>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={onRetry}\r\n className=\"w-fit\"\r\n >\r\n <RefreshCw className=\"h-4 w-4 mr-2\" />\r\n Retry\r\n </Button>\r\n </AlertDescription>\r\n </Alert>\r\n );\r\n}\r\n\r\n/**\r\n * ResourceView component\r\n */\r\nexport function ResourceView<T = unknown>({\r\n uri,\r\n refreshInterval,\r\n subscribe,\r\n transform,\r\n loading: loadingContent,\r\n error: errorContent,\r\n children,\r\n className,\r\n skip = false,\r\n}: ResourceViewProps<T>) {\r\n const {\r\n data,\r\n loading,\r\n error,\r\n refresh,\r\n lastUpdated\r\n } = useResource<T>(uri, {\r\n refreshInterval,\r\n subscribe,\r\n transform,\r\n skip,\r\n });\r\n\r\n // Build metadata for children\r\n const meta: ResourceMeta = {\r\n uri,\r\n refresh,\r\n lastUpdated,\r\n isRefreshing: loading && data !== null,\r\n };\r\n\r\n // Loading state (initial load only)\r\n if (loading && data === null) {\r\n if (loadingContent) {\r\n return <div className={className}>{loadingContent}</div>;\r\n }\r\n return (\r\n <div className={cn('flex items-center justify-center p-8', className)}>\r\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\r\n </div>\r\n );\r\n }\r\n\r\n // Error state\r\n if (error && data === null) {\r\n if (errorContent) {\r\n if (typeof errorContent === 'function') {\r\n return (\r\n <div className={className}>\r\n {errorContent(error, refresh)}\r\n </div>\r\n );\r\n }\r\n return <div className={className}>{errorContent}</div>;\r\n }\r\n return (\r\n <div className={className}>\r\n <DefaultError error={error} onRetry={refresh} />\r\n </div>\r\n );\r\n }\r\n\r\n // Render content\r\n if (data !== null) {\r\n return (\r\n <div className={className}>\r\n {children(data, meta)}\r\n </div>\r\n );\r\n }\r\n\r\n // Fallback loading\r\n return (\r\n <div className={className}>\r\n {loadingContent ?? <DefaultLoading />}\r\n </div>\r\n );\r\n}\r\n","/**\r\n * useToolStream - Hook for handling streaming/partial tool input\r\n * \r\n * MCP Apps receive tool input progressively as the host streams it.\r\n * This hook provides access to both partial (streaming) and complete data.\r\n * \r\n * @example\r\n * ```tsx\r\n * function StreamingWeather() {\r\n * const { partial, complete, isStreaming, isComplete } = useToolStream<WeatherData>();\r\n * \r\n * if (isStreaming && partial) {\r\n * return <WeatherSkeleton data={partial} />;\r\n * }\r\n * \r\n * if (isComplete && complete) {\r\n * return <WeatherDisplay data={complete} />;\r\n * }\r\n * \r\n * return <LoadingSpinner />;\r\n * }\r\n * ```\r\n */\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { UseToolStreamOptions, UseToolStreamReturn } from '@/types/mcp-types';\r\n\r\n/**\r\n * Hook for receiving streaming/partial tool input from the host\r\n */\r\nexport function useToolStream<T = unknown>(\r\n options: UseToolStreamOptions<T> = {}\r\n): UseToolStreamReturn<T> {\r\n const { toolInputPartial, toolInput, toolResult } = useMcpApp();\r\n const { onPartial, onComplete } = options;\r\n\r\n const [partial, setPartial] = useState<Partial<T> | null>(null);\r\n const [complete, setComplete] = useState<T | null>(null);\r\n const [isStreaming, setIsStreaming] = useState(false);\r\n const [isComplete, setIsComplete] = useState(false);\r\n\r\n // Handle partial input updates\r\n useEffect(() => {\r\n if (toolInputPartial) {\r\n setPartial(toolInputPartial as Partial<T>);\r\n setIsStreaming(true);\r\n setIsComplete(false);\r\n onPartial?.(toolInputPartial as Partial<T>);\r\n }\r\n }, [toolInputPartial, onPartial]);\r\n\r\n // Handle complete input\r\n useEffect(() => {\r\n if (toolInput) {\r\n setComplete(toolInput as T);\r\n setIsStreaming(false);\r\n setIsComplete(true);\r\n onComplete?.(toolInput as T);\r\n }\r\n }, [toolInput, onComplete]);\r\n\r\n // Also treat toolResult as completion\r\n useEffect(() => {\r\n if (toolResult && !toolResult.isError) {\r\n setIsStreaming(false);\r\n setIsComplete(true);\r\n }\r\n }, [toolResult]);\r\n\r\n return {\r\n partial,\r\n complete,\r\n isStreaming,\r\n isComplete,\r\n };\r\n}\r\n\r\n// Re-export types\r\nexport type { UseToolStreamOptions, UseToolStreamReturn };\r\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","/**\r\n * StreamingContent - Component for displaying streaming/partial tool input\r\n * \r\n * MCP hosts can stream tool input progressively. This component provides\r\n * a declarative way to render both partial and complete data with\r\n * appropriate visual feedback.\r\n * \r\n * @example Basic streaming display\r\n * ```tsx\r\n * <StreamingContent<WeatherData>>\r\n * {(data, isComplete) => (\r\n * <div className={isComplete ? '' : 'opacity-70'}>\r\n * <h2>{data.location ?? 'Loading...'}</h2>\r\n * {data.temperature && <p>{data.temperature}°C</p>}\r\n * </div>\r\n * )}\r\n * </StreamingContent>\r\n * ```\r\n * \r\n * @example With custom loading\r\n * ```tsx\r\n * <StreamingContent \r\n * fallback={<WeatherSkeleton />}\r\n * showProgress\r\n * >\r\n * {(weather, isComplete) => <WeatherCard data={weather} />}\r\n * </StreamingContent>\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Loader2 } from 'lucide-react';\r\nimport { useToolStream } from './useToolStream';\r\nimport { Progress } from '@/components/ui/progress';\r\nimport { cn } from '@/lib/utils';\r\n\r\n/**\r\n * StreamingContent props\r\n */\r\nexport interface StreamingContentProps<T = unknown> {\r\n /** Fallback while no data available */\r\n fallback?: React.ReactNode;\r\n /** Show streaming progress indicator */\r\n showProgress?: boolean;\r\n /** Progress value (0-100) if known */\r\n progress?: number;\r\n /** Called with partial data updates */\r\n onPartial?: (data: Partial<T>) => void;\r\n /** Called when data is complete */\r\n onComplete?: (data: T) => void;\r\n /** Render function for data */\r\n children: (data: T | Partial<T>, isComplete: boolean) => React.ReactNode;\r\n /** Additional className */\r\n className?: string;\r\n /** Style to apply while streaming (e.g., opacity) */\r\n streamingStyle?: 'opacity' | 'blur' | 'none';\r\n}\r\n\r\n/**\r\n * StreamingContent component\r\n */\r\nexport function StreamingContent<T = unknown>({\r\n fallback,\r\n showProgress = false,\r\n progress: externalProgress,\r\n onPartial,\r\n onComplete,\r\n children,\r\n className,\r\n streamingStyle = 'opacity',\r\n}: StreamingContentProps<T>) {\r\n const { partial, complete, isStreaming, isComplete } = useToolStream<T>({\r\n onPartial,\r\n onComplete,\r\n });\r\n\r\n // Determine which data to show\r\n const data = complete ?? partial;\r\n\r\n // No data yet\r\n if (!data) {\r\n if (fallback) {\r\n return <div className={className}>{fallback}</div>;\r\n }\r\n return (\r\n <div className={cn('flex items-center justify-center p-8', className)}>\r\n <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n );\r\n }\r\n\r\n // Compute streaming styles\r\n const streamingClasses = cn(\r\n streamingStyle === 'opacity' && isStreaming && 'opacity-70',\r\n streamingStyle === 'blur' && isStreaming && 'blur-[1px]',\r\n );\r\n\r\n return (\r\n <div className={cn('relative', className)}>\r\n {/* Progress indicator */}\r\n {showProgress && isStreaming && (\r\n <div className=\"absolute top-0 left-0 right-0 z-10\">\r\n {externalProgress !== undefined ? (\r\n <Progress value={externalProgress} className=\"h-1\" />\r\n ) : (\r\n <div className=\"h-1 bg-primary/20 overflow-hidden\">\r\n <div className=\"h-full w-1/3 bg-primary animate-[shimmer_1s_infinite]\" />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Streaming indicator badge */}\r\n {isStreaming && (\r\n <div className=\"absolute top-2 right-2 z-10\">\r\n <div className=\"flex items-center gap-1 px-2 py-1 rounded-full bg-muted text-muted-foreground text-xs\">\r\n <Loader2 className=\"h-3 w-3 animate-spin\" />\r\n <span>Streaming...</span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Content */}\r\n <div className={cn('transition-all duration-200', streamingClasses)}>\r\n {children(data, isComplete)}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","/**\r\n * ToolDataGrid - Data grid with MCP tool integration for server-side operations\r\n * \r\n * Features:\r\n * - Fetch data from an MCP tool\r\n * - Server-side pagination, sorting, filtering\r\n * - Row actions that trigger tool calls\r\n * - Auto-refresh with polling\r\n * - Column configuration\r\n * \r\n * @example Basic usage\r\n * ```tsx\r\n * <ToolDataGrid\r\n * dataTool=\"list-users\"\r\n * columns={[\r\n * { key: 'name', header: 'Name', sortable: true },\r\n * { key: 'email', header: 'Email' },\r\n * { key: 'status', header: 'Status' }\r\n * ]}\r\n * transformData={(result) => ({\r\n * rows: result.users,\r\n * total: result.total\r\n * })}\r\n * />\r\n * ```\r\n * \r\n * @example With row actions\r\n * ```tsx\r\n * <ToolDataGrid\r\n * dataTool=\"list-orders\"\r\n * columns={columns}\r\n * rowActions={[\r\n * { \r\n * label: 'Edit', \r\n * tool: 'edit-order',\r\n * getArgs: (row) => ({ id: row.id })\r\n * },\r\n * { \r\n * label: 'Delete', \r\n * tool: 'delete-order',\r\n * variant: 'destructive',\r\n * confirm: true\r\n * }\r\n * ]}\r\n * />\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport { Loader2, RefreshCw, ChevronLeft, ChevronRight, ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react';\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from '@/components/ui/table';\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/ui/select';\r\nimport { Skeleton } from '@/components/ui/skeleton';\r\nimport { useTool } from './useTool';\r\nimport { cn } from '@/lib/utils';\r\nimport { toast } from 'sonner';\r\nimport type { ToolBinding, ConfirmConfig } from '@/types/mcp-types';\r\n\r\n/**\r\n * Column definition for ToolDataGrid\r\n */\r\nexport interface ToolDataGridColumn<T = Record<string, unknown>> {\r\n /** Unique key for this column (dot notation supported) */\r\n key: string;\r\n /** Column header */\r\n header: string;\r\n /** Enable sorting for this column */\r\n sortable?: boolean;\r\n /** Custom cell renderer */\r\n render?: (value: unknown, row: T, index: number) => React.ReactNode;\r\n /** Column width (CSS value) */\r\n width?: string;\r\n /** Align content */\r\n align?: 'left' | 'center' | 'right';\r\n /** Hide column on small screens */\r\n hideMobile?: boolean;\r\n}\r\n\r\n/**\r\n * Row action definition\r\n */\r\nexport interface ToolDataGridRowAction<T = Record<string, unknown>> {\r\n /** Action button label */\r\n label: string;\r\n /** Icon to show */\r\n icon?: React.ReactNode;\r\n /** Tool to call */\r\n tool: string | ToolBinding;\r\n /** Get args from row data */\r\n getArgs?: (row: T) => Record<string, unknown>;\r\n /** Button variant */\r\n variant?: 'default' | 'outline' | 'ghost' | 'destructive';\r\n /** Require confirmation */\r\n confirm?: boolean | ConfirmConfig;\r\n /** Hide for certain rows */\r\n hidden?: (row: T) => boolean;\r\n /** Called on success */\r\n onSuccess?: (result: unknown, row: T) => void;\r\n}\r\n\r\n/**\r\n * Pagination state\r\n */\r\nexport interface PaginationState {\r\n page: number;\r\n pageSize: number;\r\n}\r\n\r\n/**\r\n * Sort state\r\n */\r\nexport interface SortState {\r\n column: string | null;\r\n direction: 'asc' | 'desc';\r\n}\r\n\r\n/**\r\n * Data result from transform function\r\n */\r\nexport interface ToolDataGridData<T = Record<string, unknown>> {\r\n rows: T[];\r\n total: number;\r\n}\r\n\r\n/**\r\n * ToolDataGrid props\r\n */\r\nexport interface ToolDataGridProps<T = Record<string, unknown>> {\r\n /** Tool to fetch data from */\r\n dataTool: string | ToolBinding;\r\n /** Column definitions */\r\n columns: ToolDataGridColumn<T>[];\r\n /** Transform tool result to grid data */\r\n transformData?: (result: unknown) => ToolDataGridData<T>;\r\n\r\n // Row actions\r\n /** Actions to show for each row */\r\n rowActions?: ToolDataGridRowAction<T>[];\r\n\r\n // Pagination\r\n /** Enable pagination */\r\n pagination?: boolean;\r\n /** Page sizes to offer */\r\n pageSizes?: number[];\r\n /** Default page size */\r\n defaultPageSize?: number;\r\n\r\n // Sorting\r\n /** Default sort */\r\n defaultSort?: SortState;\r\n\r\n // Refresh\r\n /** Auto-refresh interval in ms */\r\n refreshInterval?: number;\r\n /** Show refresh button */\r\n showRefresh?: boolean;\r\n\r\n // State callbacks\r\n /** Called when data is loaded */\r\n onDataLoaded?: (data: ToolDataGridData<T>) => void;\r\n /** Called on error */\r\n onError?: (error: Error) => void;\r\n\r\n // Row interaction\r\n /** Called when row is clicked */\r\n onRowClick?: (row: T, index: number) => void;\r\n /** Key extractor for rows */\r\n getRowKey?: (row: T, index: number) => string;\r\n\r\n // Empty/Loading states\r\n /** Empty state content */\r\n emptyContent?: React.ReactNode;\r\n /** Loading content */\r\n loadingContent?: React.ReactNode;\r\n\r\n // Styling\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Get nested value from object using dot notation\r\n */\r\nfunction getNestedValue<T>(obj: T, path: string): unknown {\r\n return path.split('.').reduce<unknown>((current, key) => {\r\n if (current && typeof current === 'object' && key in current) {\r\n return (current as Record<string, unknown>)[key];\r\n }\r\n return undefined;\r\n }, obj);\r\n}\r\n\r\n/**\r\n * ToolDataGrid component\r\n */\r\nexport function ToolDataGrid<T = Record<string, unknown>>({\r\n dataTool,\r\n columns,\r\n transformData,\r\n rowActions = [],\r\n pagination = true,\r\n pageSizes = [10, 25, 50, 100],\r\n defaultPageSize = 10,\r\n defaultSort,\r\n refreshInterval,\r\n showRefresh = true,\r\n onDataLoaded,\r\n onError,\r\n onRowClick,\r\n getRowKey,\r\n emptyContent,\r\n loadingContent,\r\n className,\r\n}: ToolDataGridProps<T>) {\r\n // Normalize tool config\r\n const toolConfig = typeof dataTool === 'string' ? { name: dataTool } : dataTool;\r\n\r\n // State\r\n const [data, setData] = useState<ToolDataGridData<T>>({ rows: [], total: 0 });\r\n const [paginationState, setPaginationState] = useState<PaginationState>({\r\n page: 1,\r\n pageSize: defaultPageSize,\r\n });\r\n const [sortState, setSortState] = useState<SortState>(\r\n defaultSort ?? { column: null, direction: 'asc' }\r\n );\r\n\r\n // Data fetch hook\r\n const { call, loading, error } = useTool(toolConfig.name, {\r\n defaultArgs: toolConfig.args,\r\n onSuccess: (result) => {\r\n const gridData = transformData\r\n ? transformData(result)\r\n : (result as ToolDataGridData<T>);\r\n setData(gridData);\r\n onDataLoaded?.(gridData);\r\n },\r\n onError,\r\n });\r\n\r\n /**\r\n * Fetch data with current state\r\n */\r\n const fetchData = useCallback(() => {\r\n const args: Record<string, unknown> = {};\r\n\r\n if (pagination) {\r\n args.page = paginationState.page;\r\n args.pageSize = paginationState.pageSize;\r\n args.offset = (paginationState.page - 1) * paginationState.pageSize;\r\n args.limit = paginationState.pageSize;\r\n }\r\n\r\n if (sortState.column) {\r\n args.sortBy = sortState.column;\r\n args.sortDirection = sortState.direction;\r\n args.sort = `${sortState.column}:${sortState.direction}`;\r\n }\r\n\r\n call(args);\r\n }, [call, pagination, paginationState, sortState]);\r\n\r\n // Track if initial fetch has been done to prevent infinite loops\r\n const initialFetchDone = React.useRef(false);\r\n const prevStateRef = React.useRef({ pagination: paginationState, sort: sortState });\r\n\r\n // Fetch on mount (once) and on pagination/sort state changes\r\n useEffect(() => {\r\n // On mount, fetch data once\r\n if (!initialFetchDone.current) {\r\n initialFetchDone.current = true;\r\n fetchData();\r\n return;\r\n }\r\n\r\n // On state changes (pagination, sort), refetch\r\n const prevState = prevStateRef.current;\r\n const stateChanged =\r\n prevState.pagination.page !== paginationState.page ||\r\n prevState.pagination.pageSize !== paginationState.pageSize ||\r\n prevState.sort.column !== sortState.column ||\r\n prevState.sort.direction !== sortState.direction;\r\n\r\n if (stateChanged) {\r\n prevStateRef.current = { pagination: paginationState, sort: sortState };\r\n fetchData();\r\n }\r\n }, [fetchData, paginationState, sortState]);\r\n\r\n // Auto-refresh\r\n useEffect(() => {\r\n if (refreshInterval && refreshInterval > 0) {\r\n const interval = setInterval(fetchData, refreshInterval);\r\n return () => clearInterval(interval);\r\n }\r\n }, [refreshInterval, fetchData]);\r\n\r\n /**\r\n * Handle sort column click\r\n */\r\n const handleSort = useCallback((column: string) => {\r\n setSortState(prev => ({\r\n column,\r\n direction: prev.column === column && prev.direction === 'asc' ? 'desc' : 'asc',\r\n }));\r\n }, []);\r\n\r\n /**\r\n * Handle page change\r\n */\r\n const handlePageChange = useCallback((page: number) => {\r\n setPaginationState(prev => ({ ...prev, page }));\r\n }, []);\r\n\r\n /**\r\n * Handle page size change\r\n */\r\n const handlePageSizeChange = useCallback((pageSize: string) => {\r\n setPaginationState({ page: 1, pageSize: parseInt(pageSize, 10) });\r\n }, []);\r\n\r\n // Compute pagination\r\n const totalPages = Math.ceil(data.total / paginationState.pageSize);\r\n const canPreviousPage = paginationState.page > 1;\r\n const canNextPage = paginationState.page < totalPages;\r\n\r\n /**\r\n * Get sort icon for column\r\n */\r\n const getSortIcon = (column: string) => {\r\n if (sortState.column !== column) {\r\n return <ArrowUpDown className=\"h-4 w-4\" />;\r\n }\r\n return sortState.direction === 'asc'\r\n ? <ArrowUp className=\"h-4 w-4\" />\r\n : <ArrowDown className=\"h-4 w-4\" />;\r\n };\r\n\r\n /**\r\n * Render loading skeleton\r\n */\r\n const renderLoading = () => {\r\n if (loadingContent) return loadingContent;\r\n\r\n return (\r\n <div className=\"space-y-2\">\r\n {Array.from({ length: 5 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-12 w-full\" />\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Render empty state\r\n */\r\n const renderEmpty = () => {\r\n if (emptyContent) return emptyContent;\r\n\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-12 text-muted-foreground\">\r\n <p className=\"text-lg\">No data found</p>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={fetchData}\r\n className=\"mt-2\"\r\n >\r\n <RefreshCw className=\"h-4 w-4 mr-2\" />\r\n Refresh\r\n </Button>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div className={cn('space-y-4', className)}>\r\n {/* Toolbar */}\r\n {showRefresh && (\r\n <div className=\"flex items-center justify-end gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={fetchData}\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n ) : (\r\n <RefreshCw className=\"h-4 w-4\" />\r\n )}\r\n <span className=\"ml-2\">Refresh</span>\r\n </Button>\r\n </div>\r\n )}\r\n\r\n {/* Table */}\r\n <div className=\"rounded-md border\">\r\n {loading && data.rows.length === 0 ? (\r\n <div className=\"p-4\">\r\n {renderLoading()}\r\n </div>\r\n ) : data.rows.length === 0 ? (\r\n renderEmpty()\r\n ) : (\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n {columns.map((column) => (\r\n <TableHead\r\n key={column.key}\r\n style={{ width: column.width }}\r\n className={cn(\r\n column.align === 'center' && 'text-center',\r\n column.align === 'right' && 'text-right',\r\n column.hideMobile && 'hidden md:table-cell'\r\n )}\r\n >\r\n {column.sortable ? (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => handleSort(column.key)}\r\n className=\"-ml-3\"\r\n >\r\n {column.header}\r\n {getSortIcon(column.key)}\r\n </Button>\r\n ) : (\r\n column.header\r\n )}\r\n </TableHead>\r\n ))}\r\n {rowActions.length > 0 && (\r\n <TableHead className=\"w-[100px]\">Actions</TableHead>\r\n )}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {data.rows.map((row, index) => {\r\n const key = getRowKey?.(row, index) ?? String(index);\r\n return (\r\n <TableRow\r\n key={key}\r\n onClick={() => onRowClick?.(row, index)}\r\n className={onRowClick ? 'cursor-pointer' : undefined}\r\n >\r\n {columns.map((column) => {\r\n const value = getNestedValue(row, column.key);\r\n return (\r\n <TableCell\r\n key={column.key}\r\n className={cn(\r\n column.align === 'center' && 'text-center',\r\n column.align === 'right' && 'text-right',\r\n column.hideMobile && 'hidden md:table-cell'\r\n )}\r\n >\r\n {column.render\r\n ? column.render(value, row, index)\r\n : String(value ?? '')}\r\n </TableCell>\r\n );\r\n })}\r\n {rowActions.length > 0 && (\r\n <TableCell>\r\n <div className=\"flex items-center gap-1\">\r\n {rowActions\r\n .filter(action => !action.hidden?.(row))\r\n .map((action, actionIndex) => (\r\n <RowActionButton\r\n key={actionIndex}\r\n action={action}\r\n row={row}\r\n onRefresh={fetchData}\r\n />\r\n ))}\r\n </div>\r\n </TableCell>\r\n )}\r\n </TableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n )}\r\n </div>\r\n\r\n {/* Pagination */}\r\n {pagination && data.total > 0 && (\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"text-sm text-muted-foreground\">\r\n Showing {((paginationState.page - 1) * paginationState.pageSize) + 1} to{' '}\r\n {Math.min(paginationState.page * paginationState.pageSize, data.total)} of{' '}\r\n {data.total} results\r\n </div>\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm text-muted-foreground\">Rows per page</span>\r\n <Select\r\n value={String(paginationState.pageSize)}\r\n onValueChange={handlePageSizeChange}\r\n >\r\n <SelectTrigger className=\"w-[70px]\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {pageSizes.map((size) => (\r\n <SelectItem key={size} value={String(size)}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => handlePageChange(paginationState.page - 1)}\r\n disabled={!canPreviousPage || loading}\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <span className=\"text-sm\">\r\n Page {paginationState.page} of {totalPages}\r\n </span>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => handlePageChange(paginationState.page + 1)}\r\n disabled={!canNextPage || loading}\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Internal row action button component\r\n */\r\nfunction RowActionButton<T>({\r\n action,\r\n row,\r\n onRefresh,\r\n}: {\r\n action: ToolDataGridRowAction<T>;\r\n row: T;\r\n onRefresh: () => void;\r\n}) {\r\n const toolConfig = typeof action.tool === 'string' ? { name: action.tool } : action.tool;\r\n const args = action.getArgs?.(row) ?? { id: (row as Record<string, unknown>).id };\r\n\r\n const { call, loading } = useTool(toolConfig.name, {\r\n onSuccess: (result) => {\r\n action.onSuccess?.(result, row);\r\n toast.success('Action completed');\r\n onRefresh();\r\n },\r\n onError: (error) => {\r\n toast.error(error.message);\r\n },\r\n });\r\n\r\n const handleClick = useCallback((e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n // TODO: Add confirmation dialog support\r\n call(args);\r\n }, [call, args]);\r\n\r\n return (\r\n <Button\r\n variant={action.variant ?? 'ghost'}\r\n size=\"sm\"\r\n onClick={handleClick}\r\n disabled={loading}\r\n >\r\n {loading ? (\r\n <Loader2 className=\"h-3 w-3 animate-spin\" />\r\n ) : (\r\n <>\r\n {action.icon}\r\n <span className={action.icon ? 'ml-1' : ''}>{action.label}</span>\r\n </>\r\n )}\r\n </Button>\r\n );\r\n}\r\n","import React, { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { clsx } from 'clsx';\r\nimport './Button.css';\r\n\r\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n /** Button variant */\r\n variant?: 'primary' | 'secondary' | 'ghost' | 'destructive' | 'outline';\r\n /** Button size */\r\n size?: 'sm' | 'md' | 'lg' | 'icon';\r\n /** Loading state */\r\n loading?: boolean;\r\n /** Render as child component (Radix Slot) */\r\n asChild?: boolean;\r\n /** Left icon */\r\n leftIcon?: ReactNode;\r\n /** Right icon */\r\n rightIcon?: ReactNode;\r\n}\r\n\r\n/**\r\n * Button component with multiple variants and loading state\r\n * \r\n * @example\r\n * ```tsx\r\n * <Button variant=\"primary\" onClick={handleClick}>\r\n * Click Me\r\n * </Button>\r\n * \r\n * <Button variant=\"ghost\" loading>\r\n * Loading...\r\n * </Button>\r\n * ```\r\n */\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n {\r\n className,\r\n variant = 'primary',\r\n size = 'md',\r\n loading = false,\r\n disabled,\r\n asChild = false,\r\n leftIcon,\r\n rightIcon,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const Comp = asChild ? Slot : 'button';\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={clsx(\r\n 'lui-button',\r\n `lui-button--${variant}`,\r\n `lui-button--${size}`,\r\n loading && 'lui-button--loading',\r\n className\r\n )}\r\n disabled={disabled || loading}\r\n {...props}\r\n >\r\n {loading && (\r\n <span className=\"lui-button__spinner\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" className=\"lui-spinner-icon\">\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"3\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray=\"32\"\r\n strokeDashoffset=\"12\"\r\n />\r\n </svg>\r\n </span>\r\n )}\r\n {leftIcon && !loading && <span className=\"lui-button__icon\">{leftIcon}</span>}\r\n <span className=\"lui-button__content\">{children}</span>\r\n {rightIcon && <span className=\"lui-button__icon\">{rightIcon}</span>}\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n","import React, { useState, type ReactNode } from 'react';\r\nimport { Button, type ButtonProps } from '../core/Button';\r\nimport { useTool } from './useTool';\r\n\r\nexport interface ActionButtonProps extends Omit<ButtonProps, 'onClick' | 'loading' | 'onError'> {\r\n /** Tool name to call */\r\n toolName: string;\r\n /** Arguments to pass to the tool */\r\n toolArgs?: Record<string, unknown>;\r\n /** Callback when tool call succeeds */\r\n onToolSuccess?: (result: unknown) => void;\r\n /** Callback when tool call fails */\r\n onToolError?: (error: Error) => void;\r\n /** Show result inline after success */\r\n showResult?: boolean;\r\n /** Custom result renderer */\r\n renderResult?: (result: unknown) => ReactNode;\r\n}\r\n\r\n/**\r\n * ActionButton - Button that calls an MCP tool with loading state\r\n * \r\n * @example\r\n * ```tsx\r\n * <ActionButton\r\n * toolName=\"get-weather\"\r\n * toolArgs={{ city: 'London' }}\r\n * onToolSuccess={(data) => console.log(data)}\r\n * >\r\n * Get Weather\r\n * </ActionButton>\r\n * ```\r\n */\r\nexport function ActionButton({\r\n toolName,\r\n toolArgs = {},\r\n onToolSuccess,\r\n onToolError,\r\n showResult = false,\r\n renderResult,\r\n children,\r\n ...buttonProps\r\n}: ActionButtonProps) {\r\n const { call, loading, result, error } = useTool(toolName);\r\n const [hasResult, setHasResult] = useState(false);\r\n\r\n const handleClick = async () => {\r\n try {\r\n const res = await call(toolArgs);\r\n setHasResult(true);\r\n onToolSuccess?.(res);\r\n } catch (err) {\r\n onToolError?.(err instanceof Error ? err : new Error(String(err)));\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"lui-action-button-wrapper\">\r\n <Button {...buttonProps} loading={loading} onClick={handleClick}>\r\n {children}\r\n </Button>\r\n {showResult && hasResult && result !== null && (\r\n <div className=\"lui-action-button-result\">\r\n {renderResult ? renderResult(result) : (\r\n <pre>{JSON.stringify(result, null, 2)}</pre>\r\n )}\r\n </div>\r\n )}\r\n {error && (\r\n <div className=\"lui-action-button-error\">\r\n {error.message}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","/**\r\n * RequireConnection - Guard component for MCP connection state\r\n * \r\n * Wraps content that requires an active MCP connection and shows\r\n * appropriate loading/error states.\r\n * \r\n * @example Basic usage\r\n * ```tsx\r\n * <RequireConnection loading={<Skeleton />}>\r\n * <ToolButton tool=\"refresh\">Refresh</ToolButton>\r\n * </RequireConnection>\r\n * ```\r\n * \r\n * @example Custom error handling\r\n * ```tsx\r\n * <RequireConnection \r\n * error={(err) => <Alert variant=\"destructive\">{err.message}</Alert>}\r\n * >\r\n * <MyToolComponent />\r\n * </RequireConnection>\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Loader2, AlertCircle, WifiOff } from 'lucide-react';\r\nimport { useMcpApp } from './AppProvider';\r\nimport { Alert, AlertDescription } from '@/components/ui/alert';\r\nimport { Skeleton } from '@/components/ui/skeleton';\r\nimport { cn } from '@/lib/utils';\r\n\r\n/**\r\n * RequireConnection props\r\n */\r\nexport interface RequireConnectionProps {\r\n /** Loading fallback */\r\n loading?: React.ReactNode;\r\n /** Error fallback */\r\n error?: React.ReactNode | ((error: Error) => React.ReactNode);\r\n /** Disconnected fallback (different from error) */\r\n disconnected?: React.ReactNode;\r\n /** Content to render when connected */\r\n children: React.ReactNode;\r\n /** Additional className for wrapper */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Default loading component\r\n */\r\nfunction DefaultLoading() {\r\n return (\r\n <div className=\"flex items-center justify-center p-8\">\r\n <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Default disconnected component\r\n */\r\nfunction DefaultDisconnected() {\r\n return (\r\n <Alert>\r\n <WifiOff className=\"h-4 w-4\" />\r\n <AlertDescription>\r\n Waiting for connection to MCP host...\r\n </AlertDescription>\r\n </Alert>\r\n );\r\n}\r\n\r\n/**\r\n * Default error component\r\n */\r\nfunction DefaultError({ error }: { error: Error }) {\r\n return (\r\n <Alert variant=\"destructive\">\r\n <AlertCircle className=\"h-4 w-4\" />\r\n <AlertDescription>\r\n Connection error: {error.message}\r\n </AlertDescription>\r\n </Alert>\r\n );\r\n}\r\n\r\n/**\r\n * RequireConnection component\r\n */\r\nexport function RequireConnection({\r\n loading: loadingContent,\r\n error: errorContent,\r\n disconnected: disconnectedContent,\r\n children,\r\n className,\r\n}: RequireConnectionProps) {\r\n const { isConnected, error, app } = useMcpApp();\r\n\r\n // Still initializing (no app yet, no error)\r\n if (!app && !error && !isConnected) {\r\n if (loadingContent) {\r\n return <div className={className}>{loadingContent}</div>;\r\n }\r\n return (\r\n <div className={className}>\r\n <DefaultLoading />\r\n </div>\r\n );\r\n }\r\n\r\n // Error state\r\n if (error) {\r\n if (errorContent) {\r\n if (typeof errorContent === 'function') {\r\n return <div className={className}>{errorContent(error)}</div>;\r\n }\r\n return <div className={className}>{errorContent}</div>;\r\n }\r\n return (\r\n <div className={className}>\r\n <DefaultError error={error} />\r\n </div>\r\n );\r\n }\r\n\r\n // Not connected (but has app - transitional state)\r\n if (!isConnected) {\r\n if (disconnectedContent) {\r\n return <div className={className}>{disconnectedContent}</div>;\r\n }\r\n if (loadingContent) {\r\n return <div className={className}>{loadingContent}</div>;\r\n }\r\n return (\r\n <div className={className}>\r\n <DefaultDisconnected />\r\n </div>\r\n );\r\n }\r\n\r\n // Connected - render children\r\n return <>{children}</>;\r\n}\r\n","/**\r\n * ToolErrorBoundary - Error boundary for tool execution failures\r\n * \r\n * Catches errors from tool calls within its children and provides\r\n * a fallback UI with retry capability.\r\n * \r\n * @example Basic usage\r\n * ```tsx\r\n * <ToolErrorBoundary>\r\n * <ToolButton tool=\"risky-operation\">Do Something</ToolButton>\r\n * </ToolErrorBoundary>\r\n * ```\r\n * \r\n * @example Custom fallback\r\n * ```tsx\r\n * <ToolErrorBoundary\r\n * fallback={(error, retry) => (\r\n * <div>\r\n * <p>Failed: {error.message}</p>\r\n * <Button onClick={retry}>Try Again</Button>\r\n * </div>\r\n * )}\r\n * >\r\n * <MyToolComponent />\r\n * </ToolErrorBoundary>\r\n * ```\r\n */\r\n'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Component, type ReactNode, type ErrorInfo } from 'react';\r\nimport { AlertCircle, RefreshCw } from 'lucide-react';\r\nimport { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';\r\nimport { Button } from '@/components/ui/button';\r\n\r\n/**\r\n * ToolErrorBoundary props\r\n */\r\nexport interface ToolErrorBoundaryProps {\r\n /** Fallback UI on error */\r\n fallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);\r\n /** Called on error */\r\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\r\n /** Reset error on these props changing */\r\n resetKeys?: unknown[];\r\n /** Children to render */\r\n children: ReactNode;\r\n}\r\n\r\n/**\r\n * ToolErrorBoundary state\r\n */\r\ninterface State {\r\n hasError: boolean;\r\n error: Error | null;\r\n}\r\n\r\n/**\r\n * Default fallback component\r\n */\r\nfunction DefaultFallback({\r\n error,\r\n onRetry,\r\n}: {\r\n error: Error;\r\n onRetry: () => void;\r\n}) {\r\n return (\r\n <Alert variant=\"destructive\">\r\n <AlertCircle className=\"h-4 w-4\" />\r\n <AlertTitle>Something went wrong</AlertTitle>\r\n <AlertDescription className=\"flex flex-col gap-3\">\r\n <p className=\"text-sm\">{error.message}</p>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={onRetry}\r\n className=\"w-fit\"\r\n >\r\n <RefreshCw className=\"h-4 w-4 mr-2\" />\r\n Try Again\r\n </Button>\r\n </AlertDescription>\r\n </Alert>\r\n );\r\n}\r\n\r\n/**\r\n * ToolErrorBoundary component\r\n */\r\nexport class ToolErrorBoundary extends Component<ToolErrorBoundaryProps, State> {\r\n constructor(props: ToolErrorBoundaryProps) {\r\n super(props);\r\n this.state = { hasError: false, error: null };\r\n }\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { hasError: true, error };\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n this.props.onError?.(error, errorInfo);\r\n }\r\n\r\n componentDidUpdate(prevProps: ToolErrorBoundaryProps) {\r\n // Reset on resetKeys change\r\n if (\r\n this.state.hasError &&\r\n this.props.resetKeys &&\r\n prevProps.resetKeys &&\r\n this.props.resetKeys.some(\r\n (key, index) => key !== prevProps.resetKeys?.[index]\r\n )\r\n ) {\r\n this.reset();\r\n }\r\n }\r\n\r\n reset = () => {\r\n this.setState({ hasError: false, error: null });\r\n };\r\n\r\n render() {\r\n const { hasError, error } = this.state;\r\n const { fallback, children } = this.props;\r\n\r\n if (hasError && error) {\r\n if (fallback) {\r\n if (typeof fallback === 'function') {\r\n return fallback(error, this.reset);\r\n }\r\n return fallback;\r\n }\r\n return <DefaultFallback error={error} onRetry={this.reset} />;\r\n }\r\n\r\n return children;\r\n }\r\n}\r\n","/**\r\n * useMessage - Hook for sending messages to the host chat\r\n * \r\n * Enables MCP Apps to communicate back to the host's chat interface.\r\n * This is useful for user-initiated actions that should appear in the conversation.\r\n * \r\n * @example Basic usage\r\n * ```tsx\r\n * function FeedbackButton() {\r\n * const { send, sending } = useMessage();\r\n * \r\n * return (\r\n * <Button \r\n * onClick={() => send('User clicked the feedback button')}\r\n * disabled={sending}\r\n * >\r\n * Send Feedback\r\n * </Button>\r\n * );\r\n * }\r\n * ```\r\n * \r\n * @example Request a tool call\r\n * ```tsx\r\n * function RefreshAction() {\r\n * const { requestTool, sending } = useMessage();\r\n * \r\n * return (\r\n * <Button \r\n * onClick={() => requestTool('refresh-all-data')}\r\n * disabled={sending}\r\n * >\r\n * Refresh All\r\n * </Button>\r\n * );\r\n * }\r\n * ```\r\n */\r\nimport { useState, useCallback } from 'react';\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { ContentBlock } from '@modelcontextprotocol/sdk/types.js';\r\n\r\n/**\r\n * Result returned by useMessage hook\r\n */\r\nexport interface UseMessageReturn {\r\n /** Send a text message to the host chat */\r\n send: (text: string) => Promise<void>;\r\n /** Send structured content blocks */\r\n sendContent: (content: ContentBlock[]) => Promise<void>;\r\n /** Request the agent to call a specific tool */\r\n requestTool: (toolName: string, args?: Record<string, unknown>) => Promise<void>;\r\n /** Whether currently sending a message */\r\n sending: boolean;\r\n /** Last error if any */\r\n error: Error | null;\r\n}\r\n\r\n/**\r\n * Hook for sending messages to the MCP host chat\r\n */\r\nexport function useMessage(): UseMessageReturn {\r\n const { sendMessage: appSendMessage, isConnected } = useMcpApp();\r\n\r\n const [sending, setSending] = useState(false);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n /**\r\n * Send a simple text message\r\n */\r\n const send = useCallback(async (text: string): Promise<void> => {\r\n if (!isConnected) {\r\n console.warn('[useMessage] Not connected to host');\r\n return;\r\n }\r\n\r\n setSending(true);\r\n setError(null);\r\n\r\n try {\r\n await appSendMessage(text);\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n setError(error);\r\n throw error;\r\n } finally {\r\n setSending(false);\r\n }\r\n }, [appSendMessage, isConnected]);\r\n\r\n /**\r\n * Send structured content blocks\r\n */\r\n const sendContent = useCallback(async (content: ContentBlock[]): Promise<void> => {\r\n if (!isConnected) {\r\n console.warn('[useMessage] Not connected to host');\r\n return;\r\n }\r\n\r\n setSending(true);\r\n setError(null);\r\n\r\n try {\r\n // For now, convert content blocks to text\r\n // The AppProvider.sendMessage only accepts text currently\r\n const textContent = content\r\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\r\n .map(c => c.text)\r\n .join('\\n');\r\n\r\n await appSendMessage(textContent);\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n setError(error);\r\n throw error;\r\n } finally {\r\n setSending(false);\r\n }\r\n }, [appSendMessage, isConnected]);\r\n\r\n /**\r\n * Request the agent to call a specific tool\r\n * Sends a message like \"Please call the X tool with args Y\"\r\n */\r\n const requestTool = useCallback(async (\r\n toolName: string,\r\n args?: Record<string, unknown>\r\n ): Promise<void> => {\r\n let message = `Please call the \"${toolName}\" tool`;\r\n\r\n if (args && Object.keys(args).length > 0) {\r\n message += ` with arguments: ${JSON.stringify(args)}`;\r\n }\r\n\r\n await send(message);\r\n }, [send]);\r\n\r\n return {\r\n send,\r\n sendContent,\r\n requestTool,\r\n sending,\r\n error,\r\n };\r\n}\r\n","/**\r\n * useHostContext - Access host context (theme, viewport, locale, etc.)\r\n * \r\n * Returns the host context provided during initialization and updates.\r\n * The host sends this via ui/notifications/host-context-changed.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { McpUiHostContext, McpUiHostStyles } from '@modelcontextprotocol/ext-apps';\r\n\r\nexport interface UseHostContextReturn {\r\n /** Current theme: 'light' or 'dark' */\r\n theme: 'light' | 'dark';\r\n /** Display mode: 'inline', 'fullscreen', 'pip' */\r\n displayMode: 'inline' | 'fullscreen' | 'pip';\r\n /** Available display modes supported by the host */\r\n availableDisplayModes: string[];\r\n /** Viewport dimensions */\r\n viewport: { width: number; height: number; maxWidth?: number; maxHeight?: number } | null;\r\n /** User locale (e.g., 'en-US') */\r\n locale: string | null;\r\n /** User timezone (e.g., 'America/New_York') */\r\n timeZone: string | null;\r\n /** Platform type */\r\n platform: 'web' | 'desktop' | 'mobile' | null;\r\n /** Host application identifier */\r\n userAgent: string | null;\r\n /** Device input capabilities */\r\n deviceCapabilities: { touch?: boolean; hover?: boolean } | null;\r\n /** Mobile safe area insets */\r\n safeAreaInsets: { top: number; right: number; bottom: number; left: number } | null;\r\n /** Host-provided style configuration */\r\n styles: McpUiHostStyles | null;\r\n /** Full raw context */\r\n rawContext: McpUiHostContext;\r\n}\r\n\r\n/**\r\n * Hook to access host context\r\n * \r\n * FIX #8: Now exposes all fields from McpUiHostContext including:\r\n * - styles (CSS variables and fonts)\r\n * - availableDisplayModes\r\n * - userAgent\r\n * - deviceCapabilities\r\n * - safeAreaInsets\r\n * \r\n * @example\r\n * ```tsx\r\n * function ThemedCard() {\r\n * const { theme, locale, deviceCapabilities, styles } = useHostContext();\r\n * \r\n * return (\r\n * <div className={theme === 'dark' ? 'dark-mode' : 'light-mode'}>\r\n * <p>Locale: {locale}</p>\r\n * <p>Touch: {deviceCapabilities?.touch ? 'Yes' : 'No'}</p>\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useHostContext(): UseHostContextReturn {\r\n const { hostContext } = useMcpApp();\r\n\r\n return {\r\n theme: (hostContext.theme as 'light' | 'dark') ?? 'light',\r\n displayMode: (hostContext.displayMode as 'inline' | 'fullscreen' | 'pip') ?? 'inline',\r\n availableDisplayModes: hostContext.availableDisplayModes ?? [],\r\n viewport: hostContext.viewport ?? null,\r\n locale: hostContext.locale ?? null,\r\n timeZone: hostContext.timeZone ?? null,\r\n platform: (hostContext.platform as 'web' | 'desktop' | 'mobile') ?? null,\r\n userAgent: hostContext.userAgent ?? null,\r\n deviceCapabilities: hostContext.deviceCapabilities ?? null,\r\n safeAreaInsets: hostContext.safeAreaInsets ?? null,\r\n styles: hostContext.styles ?? null,\r\n rawContext: hostContext,\r\n };\r\n}\r\n","/**\r\n * useToolResult - Access the tool result from the host\r\n * \r\n * Returns the result of the tool call that spawned this MCP App.\r\n * The host sends this via ui/notifications/tool-result after tool execution.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\r\n\r\nexport interface UseToolResultReturn<T = unknown> {\r\n /** The tool result, typed as T */\r\n result: T | null;\r\n /** Raw CallToolResult from MCP */\r\n rawResult: CallToolResult | null;\r\n /** Whether a result has been received */\r\n hasResult: boolean;\r\n /** Extract text content from result */\r\n textContent: string | null;\r\n}\r\n\r\n/**\r\n * Hook to access tool result from host\r\n * \r\n * @example\r\n * ```tsx\r\n * function WeatherCard() {\r\n * const { result } = useToolResult<{ city: string; temp: number }>();\r\n * \r\n * if (!result) return <div>Loading...</div>;\r\n * \r\n * return <div>{result.city}: {result.temp}°C</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useToolResult<T = unknown>(): UseToolResultReturn<T> {\r\n const { toolResult } = useMcpApp();\r\n\r\n // Extract structured content if available\r\n let result: T | null = null;\r\n let textContent: string | null = null;\r\n\r\n if (toolResult) {\r\n // Try structuredContent first (MCP 2024-11-05+)\r\n if ('structuredContent' in toolResult && toolResult.structuredContent) {\r\n result = toolResult.structuredContent as T;\r\n }\r\n\r\n // Fall back to parsing text content as JSON\r\n if (!result && toolResult.content) {\r\n const textItem = toolResult.content.find(\r\n (c): c is { type: 'text'; text: string } => c.type === 'text'\r\n );\r\n if (textItem) {\r\n textContent = textItem.text;\r\n try {\r\n result = JSON.parse(textItem.text) as T;\r\n } catch {\r\n // Not JSON, leave as null\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n result,\r\n rawResult: toolResult,\r\n hasResult: toolResult !== null,\r\n textContent,\r\n };\r\n}\r\n","/**\r\n * useToolInput - Access tool input arguments from the host\r\n * \r\n * Returns the arguments passed to the tool that spawned this MCP App.\r\n * The host sends this via ui/notifications/tool-input after initialization.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\n\r\nexport interface UseToolInputReturn<T = Record<string, unknown>> {\r\n /** The tool input arguments, typed as T */\r\n input: T | null;\r\n /** Whether input has been received */\r\n hasInput: boolean;\r\n}\r\n\r\n/**\r\n * Hook to access tool input arguments from host\r\n * \r\n * @example\r\n * ```tsx\r\n * function WeatherCard() {\r\n * const { input } = useToolInput<{ city: string }>();\r\n * \r\n * if (!input) return <div>Loading...</div>;\r\n * \r\n * return <div>Weather for: {input.city}</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useToolInput<T = Record<string, unknown>>(): UseToolInputReturn<T> {\r\n const { toolInput } = useMcpApp();\r\n\r\n return {\r\n input: toolInput as T | null,\r\n hasInput: toolInput !== null,\r\n };\r\n}\r\n","/**\r\n * useToolInputPartial - Access streaming partial tool input\r\n * \r\n * This hook provides access to partial/streaming tool input arguments\r\n * as they are being typed or generated. Useful for progressive rendering\r\n * during tool call initialization.\r\n */\r\nimport { useMcpApp } from './AppProvider';\r\n\r\nexport interface UseToolInputPartialReturn {\r\n /** Partial arguments currently available */\r\n partialArgs: Record<string, unknown> | null;\r\n /** Whether partial args are being received */\r\n isStreaming: boolean;\r\n}\r\n\r\n/**\r\n * Hook to access streaming partial tool input\r\n * \r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n * const { partialArgs, isStreaming } = useToolInputPartial();\r\n * \r\n * if (isStreaming) {\r\n * return <div>Receiving: {JSON.stringify(partialArgs)}</div>;\r\n * }\r\n * return <div>Ready for input</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useToolInputPartial(): UseToolInputPartialReturn {\r\n const { toolInputPartial } = useMcpApp();\r\n\r\n return {\r\n partialArgs: toolInputPartial,\r\n isStreaming: toolInputPartial !== null,\r\n };\r\n}\r\n","import { useEffect, useRef, useCallback, useState } from 'react';\r\nimport { useTool, type UseToolReturn } from './useTool';\r\n\r\nexport interface UseToolSubscriptionOptions {\r\n /** Polling interval in milliseconds */\r\n interval?: number;\r\n /** Whether to start polling immediately */\r\n enabled?: boolean;\r\n /** Arguments to pass to the tool */\r\n args?: Record<string, unknown>;\r\n}\r\n\r\nexport interface UseToolSubscriptionResult<T = unknown> {\r\n /** Tool call result data */\r\n result: T | null;\r\n /** Loading state */\r\n loading: boolean;\r\n /** Error if any */\r\n error: Error | null;\r\n /** Start polling */\r\n start: () => void;\r\n /** Stop polling */\r\n stop: () => void;\r\n /** Whether polling is active */\r\n isPolling: boolean;\r\n /** Manually refresh (call tool immediately) */\r\n refresh: () => Promise<T>;\r\n}\r\n\r\n/**\r\n * Hook for subscribing to tool updates with automatic polling\r\n * \r\n * @example\r\n * ```tsx\r\n * function StockTicker() {\r\n * const { result, isPolling, start, stop } = useToolSubscription<StockData>(\r\n * 'get-stock-price',\r\n * { interval: 5000, args: { symbol: 'AAPL' } }\r\n * );\r\n * \r\n * return (\r\n * <div>\r\n * <div>Price: ${result?.price}</div>\r\n * <button onClick={isPolling ? stop : start}>\r\n * {isPolling ? 'Stop' : 'Start'} Updates\r\n * </button>\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useToolSubscription<T = unknown>(\r\n toolName: string,\r\n options: UseToolSubscriptionOptions = {}\r\n): UseToolSubscriptionResult<T> {\r\n const { interval = 10000, enabled = true, args = {} } = options;\r\n const toolHook = useTool<Record<string, unknown>, T>(toolName);\r\n const intervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const [isPolling, setIsPolling] = useState(false);\r\n\r\n const stop = useCallback(() => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n intervalRef.current = null;\r\n }\r\n setIsPolling(false);\r\n }, []);\r\n\r\n const start = useCallback(() => {\r\n stop();\r\n setIsPolling(true);\r\n\r\n // Initial call\r\n toolHook.call(args).catch(() => { });\r\n\r\n // Start polling\r\n intervalRef.current = setInterval(() => {\r\n toolHook.call(args).catch(() => { });\r\n }, interval);\r\n }, [toolHook.call, args, interval, stop]);\r\n\r\n const refresh = useCallback(async (): Promise<T> => {\r\n return toolHook.call(args);\r\n }, [toolHook.call, args]);\r\n\r\n // Auto-start if enabled\r\n useEffect(() => {\r\n if (enabled) {\r\n start();\r\n }\r\n return () => stop();\r\n }, [enabled, start, stop]);\r\n\r\n return {\r\n result: toolHook.result,\r\n loading: toolHook.loading,\r\n error: toolHook.error,\r\n start,\r\n stop,\r\n isPolling,\r\n refresh,\r\n };\r\n}\r\n","/**\r\n * MCP-Native UI SDK - Core Types\r\n * \r\n * Type definitions for MCP-native component patterns. These types enable\r\n * declarative tool binding, result handling, and resource integration.\r\n */\r\n\r\nimport type { ReactNode } from 'react';\r\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\r\n\r\n// ============================================================================\r\n// Tool Binding Types\r\n// ============================================================================\r\n\r\n/**\r\n * Configuration for binding a UI component to an MCP tool\r\n * \r\n * @example\r\n * ```tsx\r\n * // Simple string binding\r\n * <ToolButton tool=\"refresh-data\" />\r\n * \r\n * // Full configuration\r\n * <ToolButton tool={{ \r\n * name: \"create-item\", \r\n * args: { type: \"note\" },\r\n * transform: (r) => r.item \r\n * }} />\r\n * ```\r\n */\r\nexport interface ToolBinding<TArgs = Record<string, unknown>, TResult = unknown> {\r\n /** Tool name to call */\r\n name: string;\r\n /** Static arguments (merged with dynamic args) */\r\n args?: Partial<TArgs>;\r\n /** Transform result before passing to handlers */\r\n transform?: (result: CallToolResult) => TResult;\r\n}\r\n\r\n/**\r\n * Normalized tool binding - always an object, never a string\r\n */\r\nexport type NormalizedToolBinding<TArgs = Record<string, unknown>, TResult = unknown> =\r\n ToolBinding<TArgs, TResult>;\r\n\r\n/**\r\n * Helper to normalize string or ToolBinding to ToolBinding\r\n */\r\nexport function normalizeToolBinding<TArgs = Record<string, unknown>, TResult = unknown>(\r\n tool: string | ToolBinding<TArgs, TResult>\r\n): NormalizedToolBinding<TArgs, TResult> {\r\n if (typeof tool === 'string') {\r\n return { name: tool };\r\n }\r\n return tool;\r\n}\r\n\r\n// ============================================================================\r\n// MCP Action Props - Shared props for tool-enabled components\r\n// ============================================================================\r\n\r\n/**\r\n * Shared props for components that can trigger MCP tool calls\r\n */\r\nexport interface McpActionProps<TResult = unknown> {\r\n /** Tool to call on action */\r\n tool?: string | ToolBinding<Record<string, unknown>, TResult>;\r\n /** Called when tool execution starts */\r\n onToolStart?: () => void;\r\n /** Called on successful tool result */\r\n onToolSuccess?: (result: TResult) => void;\r\n /** Called on tool error */\r\n onToolError?: (error: Error) => void;\r\n /** Called after tool completes (success or error) */\r\n onToolComplete?: () => void;\r\n /** Disable component during tool execution (default: true) */\r\n disableWhileLoading?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Result Display Types\r\n// ============================================================================\r\n\r\n/**\r\n * Configuration for how to display tool results\r\n */\r\nexport interface ToolResultConfig {\r\n /** How to display the result */\r\n display: 'inline' | 'toast' | 'modal' | 'none';\r\n /** Custom result renderer */\r\n renderResult?: (result: unknown) => ReactNode;\r\n /** Auto-dismiss after ms (for toast) */\r\n autoDismiss?: number;\r\n /** Success message template */\r\n successMessage?: string | ((result: unknown) => string);\r\n /** Error message template */\r\n errorMessage?: string | ((error: Error) => string);\r\n}\r\n\r\n/**\r\n * Default result display config\r\n */\r\nexport const DEFAULT_RESULT_CONFIG: ToolResultConfig = {\r\n display: 'none',\r\n autoDismiss: 5000,\r\n};\r\n\r\n// ============================================================================\r\n// Confirmation Dialog Types\r\n// ============================================================================\r\n\r\n/**\r\n * Configuration for confirmation dialog before tool execution\r\n */\r\nexport interface ConfirmConfig {\r\n /** Dialog title */\r\n title?: string;\r\n /** Dialog description */\r\n description?: string;\r\n /** Confirm button text */\r\n confirmText?: string;\r\n /** Cancel button text */\r\n cancelText?: string;\r\n /** Confirm button variant */\r\n confirmVariant?: 'default' | 'destructive';\r\n}\r\n\r\n// ============================================================================\r\n// Resource Binding Types\r\n// ============================================================================\r\n\r\n/**\r\n * Configuration for binding a component to an MCP resource\r\n */\r\nexport interface ResourceBinding {\r\n /** Resource URI */\r\n uri: string;\r\n /** Refresh interval in ms */\r\n refreshInterval?: number;\r\n /** Subscribe to resource changes */\r\n subscribe?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Tool State Types\r\n// ============================================================================\r\n\r\n/**\r\n * States a tool call can be in\r\n */\r\nexport type ToolState = 'idle' | 'loading' | 'success' | 'error';\r\n\r\n/**\r\n * Full tool call state with data\r\n */\r\nexport interface ToolCallState<T = unknown> {\r\n /** Current state */\r\n state: ToolState;\r\n /** Whether currently loading */\r\n loading: boolean;\r\n /** Last successful result */\r\n result: T | null;\r\n /** Last error */\r\n error: Error | null;\r\n /** Whether we have a result (success or error) */\r\n hasResult: boolean;\r\n}\r\n\r\n/**\r\n * Initial tool call state\r\n */\r\nexport const INITIAL_TOOL_STATE: ToolCallState = {\r\n state: 'idle',\r\n loading: false,\r\n result: null,\r\n error: null,\r\n hasResult: false,\r\n};\r\n\r\n// ============================================================================\r\n// Hook Option Types\r\n// ============================================================================\r\n\r\n/**\r\n * Options for useTool hook\r\n */\r\nexport interface UseToolOptions<TArgs = Record<string, unknown>, TResult = unknown> {\r\n /** Static arguments merged with each call */\r\n defaultArgs?: Partial<TArgs>;\r\n /** Transform result before returning */\r\n transform?: (result: CallToolResult) => TResult;\r\n /** Retry configuration */\r\n retry?: number | { count: number; delay: number };\r\n /** Callbacks */\r\n onStart?: () => void;\r\n onSuccess?: (result: TResult) => void;\r\n onError?: (error: Error) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * Return type for useTool hook\r\n */\r\nexport interface UseToolReturn<TArgs = Record<string, unknown>, TResult = unknown> {\r\n /** Call the tool with arguments */\r\n call: (args?: TArgs) => Promise<TResult>;\r\n /** Mutate and call (convenience for forms) */\r\n mutate: (args: TArgs) => Promise<TResult>;\r\n /** Current state */\r\n state: ToolState;\r\n /** Loading indicator */\r\n loading: boolean;\r\n /** Last successful result */\r\n result: TResult | null;\r\n /** Last error */\r\n error: Error | null;\r\n /** Reset to initial state */\r\n reset: () => void;\r\n /** Retry last call */\r\n retry: () => Promise<TResult | null>;\r\n /** Abort ongoing call */\r\n abort: () => void;\r\n}\r\n\r\n/**\r\n * Options for useResource hook\r\n */\r\nexport interface UseResourceOptions<T = unknown> {\r\n /** Auto-refresh interval in ms */\r\n refreshInterval?: number;\r\n /** Subscribe to resource changes */\r\n subscribe?: boolean;\r\n /** Transform resource data */\r\n transform?: (data: unknown) => T;\r\n /** Skip initial fetch */\r\n skip?: boolean;\r\n}\r\n\r\n/**\r\n * Return type for useResource hook\r\n */\r\nexport interface UseResourceReturn<T = unknown> {\r\n /** Resource data */\r\n data: T | null;\r\n /** Loading state */\r\n loading: boolean;\r\n /** Error if any */\r\n error: Error | null;\r\n /** Refresh resource */\r\n refresh: () => Promise<T>;\r\n /** Last updated timestamp */\r\n lastUpdated: Date | null;\r\n}\r\n\r\n/**\r\n * Options for useToolStream hook\r\n */\r\nexport interface UseToolStreamOptions<T = unknown> {\r\n /** Called with each partial update */\r\n onPartial?: (data: Partial<T>) => void;\r\n /** Called when streaming completes */\r\n onComplete?: (data: T) => void;\r\n}\r\n\r\n/**\r\n * Return type for useToolStream hook\r\n */\r\nexport interface UseToolStreamReturn<T = unknown> {\r\n /** Current partial data */\r\n partial: Partial<T> | null;\r\n /** Final complete data */\r\n complete: T | null;\r\n /** Whether receiving partial data */\r\n isStreaming: boolean;\r\n /** Whether fully complete */\r\n isComplete: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Context Types\r\n// ============================================================================\r\n\r\n/**\r\n * MCP App context value - extended for MCP-native components\r\n */\r\nexport interface McpAppContextExtended {\r\n /** Read a server resource */\r\n readResource?: (uri: string) => Promise<unknown>;\r\n /** List available tools */\r\n listTools?: () => Promise<Array<{ name: string; description?: string }>>;\r\n /** Get tool schema */\r\n getToolSchema?: (name: string) => Promise<unknown | null>;\r\n}\r\n\r\n/**\r\n * Tool provider configuration for scoped defaults\r\n */\r\nexport interface ToolProviderConfig {\r\n /** Default result display */\r\n resultDisplay?: ToolResultConfig;\r\n /** Default error handler */\r\n onError?: (error: Error) => void;\r\n /** Show loading states globally */\r\n showLoading?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Utility Types\r\n// ============================================================================\r\n\r\n/**\r\n * Extract the result type from a tool binding\r\n */\r\nexport type ToolResultType<T> = T extends ToolBinding<any, infer R> ? R : unknown;\r\n\r\n/**\r\n * Extract the args type from a tool binding\r\n */\r\nexport type ToolArgsType<T> = T extends ToolBinding<infer A, any> ? A : Record<string, unknown>;\r\n\r\n/**\r\n * Make selected properties required\r\n */\r\nexport type RequiredProps<T, K extends keyof T> = T & Required<Pick<T, K>>;\r\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import * as React from \"react\"\nimport type * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import React, { useMemo, useState, type ReactNode } from 'react';\r\nimport {\r\n useReactTable,\r\n getCoreRowModel,\r\n getSortedRowModel,\r\n getFilteredRowModel,\r\n flexRender,\r\n type ColumnDef,\r\n type SortingState,\r\n} from '@tanstack/react-table';\r\nimport { clsx } from 'clsx';\r\nimport './DataGrid.css';\r\n\r\nexport interface DataGridColumn<T> {\r\n /** Column key (accessor) */\r\n key: keyof T | string;\r\n /** Column header */\r\n header: string;\r\n /** Custom cell renderer */\r\n cell?: (value: unknown, row: T) => ReactNode;\r\n /** Enable sorting */\r\n sortable?: boolean;\r\n /** Column width */\r\n width?: number | string;\r\n}\r\n\r\nexport interface DataGridProps<T extends Record<string, unknown>> {\r\n /** Data array */\r\n data: T[];\r\n /** Column definitions */\r\n columns: DataGridColumn<T>[];\r\n /** Enable global search */\r\n searchable?: boolean;\r\n /** Search placeholder */\r\n searchPlaceholder?: string;\r\n /** Row click handler */\r\n onRowClick?: (row: T) => void;\r\n /** Loading state */\r\n loading?: boolean;\r\n /** Empty state message */\r\n emptyMessage?: string;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * DataGrid - Sortable, filterable data table for tool results\r\n * \r\n * @example\r\n * ```tsx\r\n * const { result } = useTool<{ items: Item[] }>('get-items');\r\n * \r\n * <DataGrid\r\n * data={result?.items ?? []}\r\n * columns={[\r\n * { key: 'name', header: 'Name', sortable: true },\r\n * { key: 'price', header: 'Price', cell: (v) => `$${v}` },\r\n * ]}\r\n * searchable\r\n * />\r\n * ```\r\n */\r\nexport function DataGrid<T extends Record<string, unknown>>({\r\n data,\r\n columns,\r\n searchable = false,\r\n searchPlaceholder = 'Search...',\r\n onRowClick,\r\n loading = false,\r\n emptyMessage = 'No data',\r\n className,\r\n}: DataGridProps<T>) {\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [globalFilter, setGlobalFilter] = useState('');\r\n\r\n const tableColumns = useMemo<ColumnDef<T>[]>(\r\n () =>\r\n columns.map((col) => ({\r\n id: String(col.key),\r\n accessorKey: col.key,\r\n header: col.header,\r\n cell: col.cell\r\n ? ({ getValue, row }) => col.cell!(getValue(), row.original)\r\n : ({ getValue }) => String(getValue() ?? ''),\r\n enableSorting: col.sortable ?? true,\r\n size: typeof col.width === 'number' ? col.width : undefined,\r\n })),\r\n [columns]\r\n );\r\n\r\n const table = useReactTable({\r\n data,\r\n columns: tableColumns,\r\n state: { sorting, globalFilter },\r\n onSortingChange: setSorting,\r\n onGlobalFilterChange: setGlobalFilter,\r\n getCoreRowModel: getCoreRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n });\r\n\r\n return (\r\n <div className={clsx('lui-datagrid', className)}>\r\n {searchable && (\r\n <div className=\"lui-datagrid-search\">\r\n <input\r\n type=\"text\"\r\n value={globalFilter}\r\n onChange={(e) => setGlobalFilter(e.target.value)}\r\n placeholder={searchPlaceholder}\r\n className=\"lui-datagrid-search-input\"\r\n />\r\n </div>\r\n )}\r\n <div className=\"lui-datagrid-container\">\r\n <table className=\"lui-datagrid-table\">\r\n <thead>\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <tr key={headerGroup.id}>\r\n {headerGroup.headers.map((header) => (\r\n <th\r\n key={header.id}\r\n className={clsx(\r\n 'lui-datagrid-th',\r\n header.column.getCanSort() && 'lui-datagrid-th--sortable'\r\n )}\r\n onClick={header.column.getToggleSortingHandler()}\r\n style={{ width: header.column.getSize() }}\r\n >\r\n <div className=\"lui-datagrid-th-content\">\r\n {flexRender(header.column.columnDef.header, header.getContext())}\r\n {header.column.getIsSorted() && (\r\n <span className=\"lui-datagrid-sort-icon\">\r\n {header.column.getIsSorted() === 'asc' ? '↑' : '↓'}\r\n </span>\r\n )}\r\n </div>\r\n </th>\r\n ))}\r\n </tr>\r\n ))}\r\n </thead>\r\n <tbody>\r\n {loading ? (\r\n <tr>\r\n <td colSpan={columns.length} className=\"lui-datagrid-loading\">\r\n Loading...\r\n </td>\r\n </tr>\r\n ) : table.getRowModel().rows.length === 0 ? (\r\n <tr>\r\n <td colSpan={columns.length} className=\"lui-datagrid-empty\">\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n ) : (\r\n table.getRowModel().rows.map((row) => (\r\n <tr\r\n key={row.id}\r\n className={clsx(\r\n 'lui-datagrid-row',\r\n onRowClick && 'lui-datagrid-row--clickable'\r\n )}\r\n onClick={() => onRowClick?.(row.original)}\r\n >\r\n {row.getVisibleCells().map((cell) => (\r\n <td key={cell.id} className=\"lui-datagrid-td\">\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </td>\r\n ))}\r\n </tr>\r\n ))\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n BarElement,\r\n ArcElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n type ChartData,\r\n type ChartOptions,\r\n type ChartType as ChartJSType,\r\n} from 'chart.js';\r\nimport { Chart as ReactChart } from 'react-chartjs-2';\r\nimport { clsx } from 'clsx';\r\nimport './Chart.css';\r\n\r\n// Register Chart.js components\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n BarElement,\r\n ArcElement,\r\n Title,\r\n Tooltip,\r\n Legend\r\n);\r\n\r\nexport type ChartType = 'line' | 'bar' | 'pie' | 'doughnut';\r\n\r\nexport interface ChartProps {\r\n /** Chart type */\r\n type: ChartType;\r\n /** Chart data */\r\n data: ChartData<ChartJSType>;\r\n /** Chart options */\r\n options?: ChartOptions<ChartJSType>;\r\n /** Chart height */\r\n height?: number | string;\r\n /** Chart width */\r\n width?: number | string;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Chart component for data visualization\r\n * \r\n * @example\r\n * ```tsx\r\n * const { result } = useTool<{ prices: number[], labels: string[] }>('get-stock-data');\r\n * \r\n * <Chart\r\n * type=\"line\"\r\n * data={{\r\n * labels: result?.labels ?? [],\r\n * datasets: [{\r\n * label: 'Price',\r\n * data: result?.prices ?? [],\r\n * borderColor: '#6366f1',\r\n * tension: 0.4,\r\n * }],\r\n * }}\r\n * height={300}\r\n * />\r\n * ```\r\n */\r\nexport function Chart({\r\n type,\r\n data,\r\n options,\r\n height = 300,\r\n width = '100%',\r\n className,\r\n}: ChartProps) {\r\n const defaultOptions: ChartOptions<ChartJSType> = {\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n plugins: {\r\n legend: {\r\n display: true,\r\n position: 'top' as const,\r\n labels: {\r\n usePointStyle: true,\r\n padding: 16,\r\n },\r\n },\r\n tooltip: {\r\n mode: 'index',\r\n intersect: false,\r\n backgroundColor: 'rgba(15, 23, 42, 0.9)',\r\n titleColor: '#f1f5f9',\r\n bodyColor: '#cbd5e1',\r\n borderColor: '#334155',\r\n borderWidth: 1,\r\n cornerRadius: 8,\r\n padding: 12,\r\n },\r\n },\r\n scales: type !== 'pie' && type !== 'doughnut' ? {\r\n x: {\r\n grid: {\r\n color: 'rgba(226, 232, 240, 0.5)',\r\n },\r\n ticks: {\r\n color: '#64748b',\r\n },\r\n },\r\n y: {\r\n grid: {\r\n color: 'rgba(226, 232, 240, 0.5)',\r\n },\r\n ticks: {\r\n color: '#64748b',\r\n },\r\n },\r\n } : undefined,\r\n };\r\n\r\n const mergedOptions = {\r\n ...defaultOptions,\r\n ...options,\r\n plugins: {\r\n ...defaultOptions.plugins,\r\n ...options?.plugins,\r\n },\r\n };\r\n\r\n return (\r\n <div\r\n className={clsx('lui-chart', className)}\r\n style={{ height, width }}\r\n >\r\n <ReactChart\r\n type={type}\r\n data={data}\r\n options={mergedOptions as ChartOptions<ChartJSType>}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useRef, type ReactNode, type HTMLAttributes } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { useMcpApp } from '../mcp/AppProvider';\r\nimport './AppShell.css';\r\n\r\nexport interface AppShellProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Header content */\r\n header?: ReactNode;\r\n /** Sidebar content */\r\n sidebar?: ReactNode;\r\n /** Footer content */\r\n footer?: ReactNode;\r\n /** Sidebar position */\r\n sidebarPosition?: 'left' | 'right';\r\n /** Sidebar width */\r\n sidebarWidth?: number | string;\r\n /** Enable auto-resize to content (uses ext-apps sendSizeChanged) */\r\n autoResize?: boolean;\r\n /** Padding */\r\n padding?: 'none' | 'sm' | 'md' | 'lg';\r\n}\r\n\r\n/**\r\n * AppShell - Root layout container for MCP Apps\r\n * \r\n * Provides header, sidebar, main content, and footer areas with auto-resize support.\r\n * Uses the ext-apps protocol for proper size change notifications.\r\n * \r\n * @example\r\n * ```tsx\r\n * <AppShell\r\n * header={<h1>My App</h1>}\r\n * sidebar={<Navigation />}\r\n * autoResize\r\n * >\r\n * <MainContent />\r\n * </AppShell>\r\n * ```\r\n */\r\nexport function AppShell({\r\n header,\r\n sidebar,\r\n footer,\r\n sidebarPosition = 'left',\r\n sidebarWidth = 240,\r\n autoResize = true,\r\n padding = 'md',\r\n className,\r\n children,\r\n ...props\r\n}: AppShellProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const { app } = useMcpApp();\r\n\r\n // Auto-resize effect - FIX #1: Use proper ext-apps sendSizeChanged\r\n useEffect(() => {\r\n // Skip if autoResize is disabled or no container\r\n if (!autoResize || !containerRef.current) return;\r\n\r\n // Skip if app not connected - the App's built-in autoResize handles this\r\n // This effect is for cases where we want additional resize triggers\r\n if (!app) return;\r\n\r\n let lastWidth = 0;\r\n let lastHeight = 0;\r\n let scheduled = false;\r\n\r\n const sendSizeChanged = () => {\r\n if (scheduled) return;\r\n scheduled = true;\r\n\r\n requestAnimationFrame(() => {\r\n scheduled = false;\r\n if (!containerRef.current) return;\r\n\r\n const rect = containerRef.current.getBoundingClientRect();\r\n const width = Math.ceil(rect.width);\r\n const height = Math.ceil(rect.height);\r\n\r\n // Only send if size actually changed\r\n if (width !== lastWidth || height !== lastHeight) {\r\n lastWidth = width;\r\n lastHeight = height;\r\n // Use the proper ext-apps protocol method\r\n app.sendSizeChanged({ width, height });\r\n }\r\n });\r\n };\r\n\r\n const resizeObserver = new ResizeObserver(sendSizeChanged);\r\n resizeObserver.observe(containerRef.current);\r\n\r\n // Initial send\r\n sendSizeChanged();\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n };\r\n }, [autoResize, app]);\r\n\r\n const sidebarStyle = {\r\n width: typeof sidebarWidth === 'number' ? `${sidebarWidth}px` : sidebarWidth,\r\n flexShrink: 0,\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={clsx(\r\n 'lui-app-shell',\r\n `lui-app-shell--padding-${padding}`,\r\n className\r\n )}\r\n {...props}\r\n >\r\n {header && <header className=\"lui-app-shell-header\">{header}</header>}\r\n\r\n <div className=\"lui-app-shell-body\">\r\n {sidebar && sidebarPosition === 'left' && (\r\n <aside className=\"lui-app-shell-sidebar\" style={sidebarStyle}>\r\n {sidebar}\r\n </aside>\r\n )}\r\n\r\n <main className=\"lui-app-shell-main\">{children}</main>\r\n\r\n {sidebar && sidebarPosition === 'right' && (\r\n <aside className=\"lui-app-shell-sidebar\" style={sidebarStyle}>\r\n {sidebar}\r\n </aside>\r\n )}\r\n </div>\r\n\r\n {footer && <footer className=\"lui-app-shell-footer\">{footer}</footer>}\r\n </div>\r\n );\r\n}\r\n","/**\r\n * Tabs component\r\n */\r\nimport React from 'react';\r\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\r\nimport { clsx } from 'clsx';\r\nimport './Tabs.css';\r\n\r\nexport interface TabItem {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface TabsProps {\r\n /** Tab items */\r\n tabs: TabItem[];\r\n /** Default active tab (uncontrolled) */\r\n defaultValue?: string;\r\n /** Active tab value (controlled) */\r\n value?: string;\r\n /** Change handler */\r\n onValueChange?: (value: string) => void;\r\n /** Children (tab content) */\r\n children?: React.ReactNode;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\nexport interface TabContentProps {\r\n /** Tab value this content belongs to */\r\n value: string;\r\n /** Children */\r\n children: React.ReactNode;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\nexport function Tabs({\r\n tabs,\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n children,\r\n className,\r\n}: TabsProps) {\r\n const defaultTab = defaultValue || tabs[0]?.value;\r\n\r\n return (\r\n <TabsPrimitive.Root\r\n className={clsx('lui-tabs', className)}\r\n defaultValue={defaultTab}\r\n value={value}\r\n onValueChange={onValueChange}\r\n >\r\n <TabsPrimitive.List className=\"lui-tabs-list\">\r\n {tabs.map((tab) => (\r\n <TabsPrimitive.Trigger\r\n key={tab.value}\r\n value={tab.value}\r\n disabled={tab.disabled}\r\n className=\"lui-tabs-trigger\"\r\n >\r\n {tab.label}\r\n </TabsPrimitive.Trigger>\r\n ))}\r\n </TabsPrimitive.List>\r\n {children}\r\n </TabsPrimitive.Root>\r\n );\r\n}\r\n\r\nexport function TabContent({ value, children, className }: TabContentProps) {\r\n return (\r\n <TabsPrimitive.Content value={value} className={clsx('lui-tabs-content', className)}>\r\n {children}\r\n </TabsPrimitive.Content>\r\n );\r\n}\r\n","/**\r\n * Modal component\r\n */\r\nimport React, { type ReactNode } from 'react';\r\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\r\nimport { clsx } from 'clsx';\r\nimport './Modal.css';\r\n\r\nexport interface ModalProps {\r\n /** Open state */\r\n open?: boolean;\r\n /** Default open (uncontrolled) */\r\n defaultOpen?: boolean;\r\n /** Change handler */\r\n onOpenChange?: (open: boolean) => void;\r\n /** Modal title */\r\n title?: string;\r\n /** Modal description */\r\n description?: string;\r\n /** Children content */\r\n children?: ReactNode;\r\n /** Additional class name */\r\n className?: string;\r\n /** Trigger element */\r\n trigger?: ReactNode;\r\n}\r\n\r\nexport function Modal({\r\n open,\r\n defaultOpen,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n className,\r\n trigger,\r\n}: ModalProps) {\r\n return (\r\n <DialogPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\r\n {trigger && <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>}\r\n <DialogPrimitive.Portal>\r\n <DialogPrimitive.Overlay className=\"lui-modal-overlay\" />\r\n <DialogPrimitive.Content className={clsx('lui-modal-content', className)}>\r\n {title && (\r\n <DialogPrimitive.Title className=\"lui-modal-title\">\r\n {title}\r\n </DialogPrimitive.Title>\r\n )}\r\n {description && (\r\n <DialogPrimitive.Description className=\"lui-modal-description\">\r\n {description}\r\n </DialogPrimitive.Description>\r\n )}\r\n {children}\r\n <DialogPrimitive.Close className=\"lui-modal-close\" aria-label=\"Close\">\r\n <CloseIcon />\r\n </DialogPrimitive.Close>\r\n </DialogPrimitive.Content>\r\n </DialogPrimitive.Portal>\r\n </DialogPrimitive.Root>\r\n );\r\n}\r\n\r\nfunction CloseIcon() {\r\n return (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M3.5 3.5L10.5 10.5M10.5 3.5L3.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n </svg>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Highlight, themes } from 'prism-react-renderer';\r\nimport { clsx } from 'clsx';\r\nimport './CodeBlock.css';\r\n\r\nexport interface CodeBlockProps {\r\n /** Code content */\r\n code: string;\r\n /** Programming language */\r\n language?: string;\r\n /** Show line numbers */\r\n showLineNumbers?: boolean;\r\n /** Enable copy button */\r\n copyable?: boolean;\r\n /** Additional class name */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * CodeBlock - Syntax highlighted code display\r\n * \r\n * @example\r\n * ```tsx\r\n * <CodeBlock\r\n * code={`const greeting = \"Hello, World!\";`}\r\n * language=\"javascript\"\r\n * copyable\r\n * />\r\n * ```\r\n */\r\nexport function CodeBlock({\r\n code,\r\n language = 'text',\r\n showLineNumbers = false,\r\n copyable = true,\r\n className,\r\n}: CodeBlockProps) {\r\n const [copied, setCopied] = React.useState(false);\r\n\r\n const handleCopy = async () => {\r\n await navigator.clipboard.writeText(code);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n };\r\n\r\n return (\r\n <div className={clsx('lui-code-block', className)}>\r\n {copyable && (\r\n <button\r\n type=\"button\"\r\n className=\"lui-code-block-copy\"\r\n onClick={handleCopy}\r\n aria-label={copied ? 'Copied!' : 'Copy code'}\r\n >\r\n {copied ? (\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"20,6 9,17 4,12\" />\r\n </svg>\r\n ) : (\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\r\n </svg>\r\n )}\r\n </button>\r\n )}\r\n <Highlight theme={themes.nightOwl} code={code.trim()} language={language}>\r\n {({ className: hlClassName, style, tokens, getLineProps, getTokenProps }) => (\r\n <pre className={clsx('lui-code-block-pre', hlClassName)} style={style}>\r\n {tokens.map((line, i) => (\r\n <div key={i} {...getLineProps({ line })}>\r\n {showLineNumbers && (\r\n <span className=\"lui-code-block-line-number\">{i + 1}</span>\r\n )}\r\n {line.map((token, key) => (\r\n <span key={key} {...getTokenProps({ token })} />\r\n ))}\r\n </div>\r\n ))}\r\n </pre>\r\n )}\r\n </Highlight>\r\n </div>\r\n );\r\n}\r\n","import React, { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport './Card.css';\r\n\r\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\r\n /** Card variant */\r\n variant?: 'default' | 'outline' | 'elevated';\r\n /** Padding size */\r\n padding?: 'none' | 'sm' | 'md' | 'lg';\r\n /** Make card interactive (hover effects) */\r\n interactive?: boolean;\r\n}\r\n\r\n/**\r\n * Card container component\r\n */\r\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\r\n (\r\n {\r\n className,\r\n variant = 'default',\r\n padding = 'md',\r\n interactive = false,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={clsx(\r\n 'lui-card',\r\n `lui-card--${variant}`,\r\n `lui-card--padding-${padding}`,\r\n interactive && 'lui-card--interactive',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCard.displayName = 'Card';\r\n\r\nexport interface CardHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Header title */\r\n title?: ReactNode;\r\n /** Header description */\r\n description?: ReactNode;\r\n /** Right-side action */\r\n action?: ReactNode;\r\n}\r\n\r\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\r\n ({ className, title, description, action, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={clsx('lui-card-header', className)} {...props}>\r\n {(title || description) && (\r\n <div className=\"lui-card-header__text\">\r\n {title && <h3 className=\"lui-card-header__title\">{title}</h3>}\r\n {description && <p className=\"lui-card-header__description\">{description}</p>}\r\n </div>\r\n )}\r\n {action && <div className=\"lui-card-header__action\">{action}</div>}\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCardHeader.displayName = 'CardHeader';\r\n\r\nexport interface CardContentProps extends HTMLAttributes<HTMLDivElement> { }\r\n\r\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={clsx('lui-card-content', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCardContent.displayName = 'CardContent';\r\n\r\nexport interface CardFooterProps extends HTMLAttributes<HTMLDivElement> { }\r\n\r\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={clsx('lui-card-footer', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nCardFooter.displayName = 'CardFooter';\r\n","import React, { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport './Input.css';\r\n\r\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\r\n /** Input label */\r\n label?: string;\r\n /** Helper text */\r\n helperText?: string;\r\n /** Error message */\r\n error?: string;\r\n /** Input size */\r\n size?: 'sm' | 'md' | 'lg';\r\n /** Left icon or element */\r\n leftElement?: ReactNode;\r\n /** Right icon or element */\r\n rightElement?: ReactNode;\r\n /** Full width */\r\n fullWidth?: boolean;\r\n}\r\n\r\n/**\r\n * Input component with label, validation, and icon support\r\n * \r\n * @example\r\n * ```tsx\r\n * <Input\r\n * label=\"Email\"\r\n * type=\"email\"\r\n * placeholder=\"Enter your email\"\r\n * error={errors.email}\r\n * />\r\n * ```\r\n */\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n className,\r\n label,\r\n helperText,\r\n error,\r\n size = 'md',\r\n leftElement,\r\n rightElement,\r\n fullWidth = false,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\r\n const hasError = Boolean(error);\r\n\r\n return (\r\n <div\r\n className={clsx(\r\n 'lui-input-wrapper',\r\n fullWidth && 'lui-input-wrapper--full-width',\r\n className\r\n )}\r\n >\r\n {label && (\r\n <label htmlFor={inputId} className=\"lui-input-label\">\r\n {label}\r\n </label>\r\n )}\r\n <div\r\n className={clsx(\r\n 'lui-input-container',\r\n `lui-input-container--${size}`,\r\n hasError && 'lui-input-container--error',\r\n leftElement && 'lui-input-container--has-left',\r\n rightElement && 'lui-input-container--has-right'\r\n )}\r\n >\r\n {leftElement && <span className=\"lui-input-element lui-input-element--left\">{leftElement}</span>}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n className=\"lui-input\"\r\n aria-invalid={hasError}\r\n aria-describedby={error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined}\r\n {...props}\r\n />\r\n {rightElement && <span className=\"lui-input-element lui-input-element--right\">{rightElement}</span>}\r\n </div>\r\n {(error || helperText) && (\r\n <p\r\n id={error ? `${inputId}-error` : `${inputId}-helper`}\r\n className={clsx('lui-input-message', error && 'lui-input-message--error')}\r\n >\r\n {error || helperText}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = 'Input';\r\n"]}