'use client'; /** * ResponseBlock Component * * A semantic display block for API response examples with status indicators. * Visually differentiates success and error responses through color psychology. * * ## Design Principles * * 1. **Status Communication**: Color instantly conveys response type * - Green = Success (2xx responses, positive outcomes) * - Red = Error (4xx/5xx responses, failures) * - Consistent with universal traffic light conventions * * 2. **Information Layering**: Progressive disclosure of details * - Status badge in top-right for immediate recognition * - Optional title provides context * - Content area for actual response data * - Layered styling adds depth without clutter * * 3. **Visual Feedback**: Subtle effects reinforce status * - Background tint matches status color * - Border emphasis adds structure * - Soft shadow/glow creates depth * - All at low opacity to avoid overwhelming * * ## Status Semantics * * @param {'success'} success - Successful API responses (2xx status codes) * - Visual: Green color palette (green-500) * - Psychology: Positive, correct, achieved * - Use cases: 200 OK, 201 Created, 204 No Content * - Styling: bg-green-500/5, border-green-500/30, shadow-green-500/10 * - Badge: "✓ 200 Success", "✓ 201 Created" * * @param {'error'} error - Error API responses (4xx/5xx status codes) * - Visual: Red color palette (red-500) * - Psychology: Warning, problem, attention needed * - Use cases: 400 Bad Request, 401 Unauthorized, 500 Server Error * - Styling: bg-red-500/5, border-red-500/30, shadow-red-500/10 * - Badge: "✗ 400 Error", "✗ 500 Error" * * ## Opacity Strategy * * Three-tier opacity system: * - Background: /5 (5% opacity) - Subtle tint, doesn't obscure content * - Border: /30 (30% opacity) - Clear definition, visible structure * - Shadow: /10 (10% opacity) - Soft depth, enhances without distraction * * This creates: * - Cohesive visual grouping * - Clear status communication * - Maintains content readability * - Professional, polished appearance * * ## Layout Structure * * ``` * ┌─────────────────────────────────────┐ * │ [STATUS BADGE] ←──┤ Absolute positioned * │ Optional Title │ * │ (if provided) │ * │ │ * │
                         │
 * │    Response content                  │
 * │    ...                               │
 * │  
│ * └─────────────────────────────────────┘ * ``` * * Positioning Strategy: * - Container: relative positioning context * - Badge: absolute top-3 right-3 (float in top-right) * - Content: mt-6 when badge present (clear space for badge) * - Title: mb-3 if provided (separate from content) * * ## Typography & Content * * Title (optional): * - text-sm: Small, not competing with main content * - font-semibold: Subtle emphasis * - text-gray-300: Readable but secondary * - Purpose: Labels response type, adds context * * Response Content: * - text-xs: Appropriate for code samples * - text-gray-300: High contrast on dark background * - font-mono (implicit in ): Code appearance * - overflow-x-auto: Handles long lines gracefully * * ## Usage Examples * * ```tsx * // Success response with title * * * // Error response without title * * * // Custom status label * * ``` * * ## Content Guidelines * * Response Content: * - Use actual JSON/text from your API * - Format with proper indentation (2 or 4 spaces) * - Include realistic data (not just placeholders) * - Show relevant fields (omit excessive detail) * - Keep under 20-30 lines for readability * * Status Labels: * - Include status code (200, 400, etc.) * - Add descriptive text (Success, Error, Created) * - Use checkmark (✓) for success * - Use X (✗) for errors * - Keep concise (2-3 words max) * * ## Accessibility * * - Semantic HTML structure (
)
 * - Color is supplementary (text + symbols)
 * - High contrast text colors
 * - StatusBadge includes aria-label
 * - Proper heading hierarchy if title used
 * - Scrollable overflow for long content
 *
 * ## Visual Language
 *
 * The ResponseBlock creates:
 * - Immediate status recognition through color
 * - Professional code presentation
 * - Clear example/documentation relationship
 * - Consistent pattern across all API docs
 * - Supports learn-by-example documentation style
 *
 * @component
 * @example
 * 
 */

import { StatusBadge, StatusType } from './StatusBadge';

/**
 * Props for the ResponseBlock component
 */
export interface ResponseBlockProps {
  /** Status type determining color scheme */
  status: Extract;
  /** HTTP status code (e.g., 200, 400, 500) */
  statusCode: number;
  /** The response content to display (typically JSON) */
  content: string;
  /** Optional title above the response */
  title?: string;
  /** Optional custom status label (default: auto-generated from statusCode) */
  statusLabel?: string;
  /** Optional CSS class name for additional styling */
  className?: string;
}

/**
 * Status styles mapping status type to background, border, and shadow colors
 */
const statusStyles = {
  success: 'bg-green-500/5 border-green-500/30 shadow-lg shadow-green-500/10',
  error: 'bg-red-500/5 border-red-500/30 shadow-lg shadow-red-500/10',
};

/**
 * Generate default status label from code and status
 */
const getDefaultStatusLabel = (code: number, status: 'success' | 'error'): string => {
  const symbol = status === 'success' ? '✓' : '✗';
  const text = status === 'success' ? 'Success' : 'Error';
  return `${symbol} ${code} ${text}`;
};

export const ResponseBlock = ({
  status,
  statusCode,
  content,
  title,
  statusLabel,
  className = '',
}: ResponseBlockProps) => {
  const label = statusLabel || getDefaultStatusLabel(statusCode, status);

  return (
    
{/* Status Badge - Floating Top Right */}
{label}
{/* Optional Title */} {title && (

{title}

)} {/* Response Content */}
        {content}
      
); };