Skip to main content
Glama
collapsible-json.tsx1.66 kB
import { ChevronDown, ChevronRight } from 'lucide-react'; import { useState } from 'react'; import { CopyButton } from '@/components/custom/clipboard/copy-button'; export function CollapsibleJson({ json, label, description, defaultOpen = false, className = '', }: CollapsibleJsonProps) { const [isOpen, setIsOpen] = useState(defaultOpen); const toggleVisibility = () => setIsOpen(!isOpen); const jsonString = typeof json === 'string' ? json : JSON.stringify(json, null, 2); return ( <div className={`flex flex-col gap-2 ${className}`}> <button onClick={toggleVisibility} className="flex items-center gap-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors" > {isOpen ? ( <ChevronDown className="h-4 w-4" /> ) : ( <ChevronRight className="h-4 w-4" /> )} {label} </button> {isOpen && ( <div className="flex flex-col gap-2 min-w-0"> <div className="relative min-w-0"> <pre className="bg-muted/50 whitespace-pre-wrap break-all rounded-md px-4 py-4 text-xs overflow-x-auto max-w-full"> <code>{jsonString}</code> </pre> <div className="absolute top-2 right-2"> <CopyButton textToCopy={jsonString} /> </div> </div> {description && ( <p className="text-xs text-muted-foreground">{description}</p> )} </div> )} </div> ); } type CollapsibleJsonProps = { json: unknown; label: string; description?: string; defaultOpen?: boolean; className?: string; };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server