// Adapted from jalcoui (MIT) — github.com/jal-co/ui // // Lightweight HTTP inspector — headers / body / timing in tabs. Renders an // already-executed request/response object; never fetches. For an // interactive request playground, use OpenapiViewer instead. // // Requires mounted at the host root (Tabs use Radix primitives). 'use client'; import * as React from 'react'; import { Clock, FileText, Globe, Activity } from 'lucide-react'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@djangocfg/ui-core'; import { cn } from '@djangocfg/ui-core/lib'; import { methodColor, statusColor } from '../../../../lib/http'; import { METHOD_TONE_TEXT, STATUS_TONE_PILL, type RequestViewerProps, type RequestViewerTab, } from './types'; import { HeadersTab } from './components/HeadersTab'; import { BodyTab } from './components/BodyTab'; import { TimingTab } from './components/TimingTab'; import { formatDuration } from './components/utils'; export function RequestViewer({ request, defaultTab = 'headers', className, ...props }: RequestViewerProps) { const headerCount = (request.requestHeaders?.length ?? 0) + (request.responseHeaders?.length ?? 0); const timingCount = request.timing?.length ?? 0; const methodToneCls = METHOD_TONE_TEXT[methodColor(request.method)]; const statusToneCls = STATUS_TONE_PILL[statusColor(request.status)]; return (
{/* Request summary */}
{request.method} {request.url} {request.status} {request.statusText ? ` ${request.statusText}` : null} {request.duration !== undefined && ( {formatDuration(request.duration)} )}
{/* Tabs */}
Headers {headerCount > 0 && ( {headerCount} )} Body Timing {timingCount > 0 && ( {timingCount} )}
); }