'use client'; /** * LinkCard Component * * An interactive navigation card for guiding users to related documentation pages. * Uses color accents and hover effects to create an engaging, explorable experience. * * ## Design Principles * * 1. **Visual Affordance**: Design signals interactivity * - Gradient backgrounds hint at clickability * - Hover states provide immediate feedback * - Cursor changes to pointer on hover * - Border transitions guide attention * * 2. **Semantic Color System**: Accent colors convey meaning * - Primary (Purple): Main content, API references * - Secondary (Cyan): Supporting content, guides * - Success (Green): Getting started, tutorials * - Warning (Amber): Important notices, deprecations * * 3. **Information Hierarchy**: Title dominates, description supports * - Large, bold title draws attention * - Smaller, muted description provides context * - Title color changes on hover for feedback * - Clean vertical rhythm (title → description) * * ## Accent Color Semantics * * @param {'primary'} primary - Main navigational elements, API documentation * - Visual: Purple gradient and border * - Psychology: Primary brand, core content, important * - Use cases: "API Reference", "Core Concepts", main docs * - Gradient: from-purple-500/10 * - Hover: border-purple-500/40, text-purple-400 * * @param {'secondary'} secondary - Supporting content, guides, tutorials * - Visual: Cyan gradient and border * - Psychology: Complementary, helpful, educational * - Use cases: "Guides", "Tutorials", "Best Practices" * - Gradient: from-cyan-500/10 * - Hover: border-cyan-500/40, text-cyan-400 * * @param {'success'} success - Getting started, quick wins, positive actions * - Visual: Green gradient and border * - Psychology: Achievement, beginning, growth * - Use cases: "Getting Started", "Quick Start", "First Steps" * - Gradient: from-green-500/10 * - Hover: border-green-500/40, text-green-400 * * @param {'warning'} warning - Important notices, cautions, deprecations * - Visual: Amber gradient and border * - Psychology: Attention, caution, important * - Use cases: "Migration Guide", "Breaking Changes", "Deprecations" * - Gradient: from-amber-500/10 * - Hover: border-amber-500/40, text-amber-400 * * ## Interactive States * * Default State: * - Subtle gradient background (from-{color}-500/10) * - Muted border (border-slate-700/50) * - White title, gray description * - Inviting but not demanding attention * * Hover State: * - Border brightens to accent color (/40 opacity) * - Title transitions to accent color * - Smooth transition (transition-colors) * - Clear feedback that element is clickable * * ## Layout Structure * * Padding System: * - p-5 (20px): Generous padding for comfortable clicking * - Creates substantial hit area for accessibility * - Provides breathing room for content * * Border & Radius: * - rounded-xl (12px): Modern, friendly appearance * - border: Defined structure * - Matches other card components in system * * ## Typography System * * Title (h3): * - text-lg (18px): Large enough to be primary visual element * - font-semibold (600): Strong but not overbearing * - text-white: Maximum contrast and readability * - mb-2 (8px): Separates from description * - Transitions to accent color on hover * * Description (p): * - text-sm (14px): Clearly secondary to title * - text-gray-400: Muted, supporting role * - Provides context without competing with title * * ## Accessibility Features * * - Semantic HTML ( tag for links) * - Proper heading hierarchy (h3 for card titles) * - Keyboard accessible (focusable link) * - Sufficient color contrast in all states * - Large click target (full card clickable) * - Clear focus states (browser default + hover) * - Descriptive link text (title + description) * * ## Usage Examples * * ```tsx * // Primary content link * * * // Getting started * * * // Supporting guide * * * // Important notice * * ``` * * ## Content Guidelines * * Title: * - 2-5 words ideal * - Action-oriented or noun-based * - Clear and specific * - Sentence case * - Examples: "API Reference", "Quick Start", "Authentication Guide" * * Description: * - One sentence (10-20 words) * - Explain what user will find/learn * - Start with verb (Explore, Learn, Discover) * - End with period * - Be specific about content * * Accent Color: * - Choose based on content type and importance * - Maintain consistency across similar pages * - Use primary for most API/core documentation * - Reserve warning for truly important notices * * ## Visual Language * * The LinkCard system creates: * - Intuitive navigation patterns * - Clear content categorization through color * - Engaging, explorable documentation * - Professional yet friendly appearance * - Consistent user experience across all docs * * @component * @example * */ /** * Accent color determining the card's visual theme */ export type LinkCardAccent = 'primary' | 'secondary' | 'success' | 'warning'; /** * Props for the LinkCard component */ export interface LinkCardProps { /** Navigation URL */ href: string; /** Card title (renders as h3) */ title: string; /** Supporting description */ description: string; /** Visual accent color */ accent: LinkCardAccent; /** Optional icon or emoji to display */ icon?: string; /** Optional CSS class name for additional styling */ className?: string; } /** * Accent styles mapping color to gradient and hover colors */ const accentStyles: Record = { primary: { gradient: 'from-purple-500/10', hoverBorder: 'hover:border-purple-500/40', hoverText: 'group-hover:text-purple-400', }, secondary: { gradient: 'from-cyan-500/10', hoverBorder: 'hover:border-cyan-500/40', hoverText: 'group-hover:text-cyan-400', }, success: { gradient: 'from-green-500/10', hoverBorder: 'hover:border-green-500/40', hoverText: 'group-hover:text-green-400', }, warning: { gradient: 'from-amber-500/10', hoverBorder: 'hover:border-amber-500/40', hoverText: 'group-hover:text-amber-400', }, }; export const LinkCard = ({ href, title, description, accent, icon, className = '', }: LinkCardProps) => { const styles = accentStyles[accent]; return ( {icon && (
{icon}
)}

{title}

{description}

); };