{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "peer-discussion-forum",
  "title": "Peer Discussion Forum",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-react/blocks/peer-discussion-forum/PeerDiscussionForum.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport {\n  ArrowLeft,\n  ArrowUpRight,\n  Award,\n  Bell,\n  BellOff,\n  Bold,\n  Bookmark,\n  Check,\n  CheckCircle2,\n  ChevronDown,\n  ChevronUp,\n  Code,\n  Copy,\n  ExternalLink,\n  Eye,\n  Flag,\n  HelpCircle,\n  Italic,\n  Link2,\n  List,\n  MessageSquare,\n  Plus,\n  Quote,\n  BookOpen,\n  Share2,\n  Tag,\n  ThumbsUp,\n  User,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Separator } from '@/components/ui/separator'\nimport { Textarea } from '@/components/ui/textarea'\n\nexport interface PeerDiscussionForumProps {\n  className?: string\n}\n\ninterface CommunityAnswer {\n  id: string\n  authorName: string\n  authorRole: string\n  avatarText: string\n  postedTime: string\n  score: number\n  content: string\n  userVote?: 'up' | 'down' | null\n}\n\nexport function PeerDiscussionForum({ className }: PeerDiscussionForumProps) {\n  // Question State\n  const [questionScore, setQuestionScore] = React.useState(42)\n  const [questionVote, setQuestionVote] = React.useState<'up' | 'down' | null>(null)\n  const [isQuestionBookmarked, setIsQuestionBookmarked] = React.useState(false)\n  const [isSubscribed, setIsSubscribed] = React.useState(true)\n  const [copiedQuestionSnippet, setCopiedQuestionSnippet] = React.useState(false)\n  const [copiedLink, setCopiedLink] = React.useState(false)\n\n  function voteQuestion(type: 'up' | 'down') {\n    if (questionVote === type) {\n      setQuestionVote(null)\n      setQuestionScore((prev) => prev + (type === 'up' ? -1 : 1))\n    } else {\n      let delta = type === 'up' ? 1 : -1\n      if (questionVote === 'up') delta -= 1\n      if (questionVote === 'down') delta += 1\n      setQuestionVote(type)\n      setQuestionScore((prev) => prev + delta)\n    }\n  }\n\n  // Answer 1 State (Accepted Instructor Answer)\n  const [answer1Score, setAnswer1Score] = React.useState(89)\n  const [answer1Vote, setAnswer1Vote] = React.useState<'up' | 'down' | null>(null)\n  const [isAnswer1Bookmarked, setIsAnswer1Bookmarked] = React.useState(false)\n  const [copiedAnswer1Snippet, setCopiedAnswer1Snippet] = React.useState(false)\n\n  function voteAnswer1(type: 'up' | 'down') {\n    if (answer1Vote === type) {\n      setAnswer1Vote(null)\n      setAnswer1Score((prev) => prev + (type === 'up' ? -1 : 1))\n    } else {\n      let delta = type === 'up' ? 1 : -1\n      if (answer1Vote === 'up') delta -= 1\n      if (answer1Vote === 'down') delta += 1\n      setAnswer1Vote(type)\n      setAnswer1Score((prev) => prev + delta)\n    }\n  }\n\n  // Answer 2 State (Peer Response)\n  const [answer2Score, setAnswer2Score] = React.useState(14)\n  const [answer2Vote, setAnswer2Vote] = React.useState<'up' | 'down' | null>(null)\n  const [isAnswer2Bookmarked, setIsAnswer2Bookmarked] = React.useState(false)\n\n  function voteAnswer2(type: 'up' | 'down') {\n    if (answer2Vote === type) {\n      setAnswer2Vote(null)\n      setAnswer2Score((prev) => prev + (type === 'up' ? -1 : 1))\n    } else {\n      let delta = type === 'up' ? 1 : -1\n      if (answer2Vote === 'up') delta -= 1\n      if (answer2Vote === 'down') delta += 1\n      setAnswer2Vote(type)\n      setAnswer2Score((prev) => prev + delta)\n    }\n  }\n\n  // Composer & Dynamic Answers State\n  const [replyDraft, setReplyDraft] = React.useState('')\n  const [customAnswers, setCustomAnswers] = React.useState<CommunityAnswer[]>([])\n\n  function applyFormat(type: 'bold' | 'italic' | 'code' | 'link' | 'list' | 'quote') {\n    if (type === 'bold') {\n      setReplyDraft((prev) => (prev ? `${prev} **bold text**` : '**bold text**'))\n    } else if (type === 'italic') {\n      setReplyDraft((prev) => (prev ? `${prev} *italic text*` : '*italic text*'))\n    } else if (type === 'code') {\n      setReplyDraft((prev) =>\n        prev ? `${prev}\\n\\`\\`\\`ts\\n// your code snippet here\\n\\`\\`\\`\\n` : '```ts\\n// your code snippet here\\n```\\n',\n      )\n    } else if (type === 'link') {\n      setReplyDraft((prev) =>\n        prev ? `${prev} [link title](https://example.com)` : '[link title](https://example.com)',\n      )\n    } else if (type === 'list') {\n      setReplyDraft((prev) => (prev ? `${prev}\\n- Key insight 1\\n- Key insight 2` : '- Key insight 1\\n- Key insight 2'))\n    } else if (type === 'quote') {\n      setReplyDraft((prev) => (prev ? `${prev}\\n> Quote from documentation` : '> Quote from documentation'))\n    }\n  }\n\n  function handlePostAnswer() {\n    const text = replyDraft.trim()\n    if (!text) return\n    const newAnswer: CommunityAnswer = {\n      id: `ans-${Date.now()}`,\n      authorName: 'Alex Rivera',\n      authorRole: 'Peer Student',\n      avatarText: 'AR',\n      postedTime: 'Just now',\n      score: 1,\n      content: text,\n      userVote: 'up',\n    }\n    setCustomAnswers((prev) => [...prev, newAnswer])\n    setReplyDraft('')\n  }\n\n  function voteCustomAnswer(id: string, type: 'up' | 'down') {\n    setCustomAnswers((prev) =>\n      prev.map((ans) => {\n        if (ans.id !== id) return ans\n        if (ans.userVote === type) {\n          return {\n            ...ans,\n            userVote: null,\n            score: ans.score + (type === 'up' ? -1 : 1),\n          }\n        }\n        let delta = type === 'up' ? 1 : -1\n        if (ans.userVote === 'up') delta -= 1\n        if (ans.userVote === 'down') delta += 1\n        return {\n          ...ans,\n          userVote: type,\n          score: ans.score + delta,\n        }\n      }),\n    )\n  }\n\n  function copyQuestionCode() {\n    setCopiedQuestionSnippet(true)\n    setTimeout(() => {\n      setCopiedQuestionSnippet(false)\n    }, 2000)\n  }\n\n  function copyAnswer1Code() {\n    setCopiedAnswer1Snippet(true)\n    setTimeout(() => {\n      setCopiedAnswer1Snippet(false)\n    }, 2000)\n  }\n\n  function shareThread() {\n    setCopiedLink(true)\n    setTimeout(() => {\n      setCopiedLink(false)\n    }, 2000)\n  }\n\n  const totalAnswersCount = 2 + customAnswers.length\n\n  return (\n    <div data-slot=\"peer-discussion-forum\" className={cn('bg-background text-foreground w-full space-y-6', className)}>\n      {/* Top Navigation & Breadcrumb Header */}\n      <header className=\"bg-card rounded-xl border p-5 shadow-xs sm:p-6\">\n        <div className=\"flex flex-col gap-4\">\n          {/* Breadcrumb & Top Action */}\n          <div className=\"flex flex-wrap items-center justify-between gap-3\">\n            <div className=\"text-muted-foreground flex flex-wrap items-center gap-1.5 text-xs\">\n              <span>CS-314 Advanced Frontend Architecture</span>\n              <span className=\"text-border\">/</span>\n              <span>Discussions</span>\n              <span className=\"text-border\">/</span>\n              <span className=\"text-foreground font-mono font-medium\">#DISC-2048</span>\n            </div>\n\n            <div className=\"flex items-center gap-2\">\n              <Button variant=\"outline\" size=\"sm\" className=\"gap-1.5 text-xs font-medium\" onClick={shareThread}>\n                <Share2 className=\"size-3.5\" />\n                <span>{copiedLink ? 'Link Copied!' : 'Share Thread'}</span>\n              </Button>\n              <Button size=\"sm\" className=\"gap-1.5 text-xs font-medium\">\n                <Plus className=\"size-3.5\" />\n                Ask Question\n              </Button>\n            </div>\n          </div>\n\n          {/* Thread Title & Status Row */}\n          <div className=\"space-y-2.5\">\n            <div className=\"flex flex-wrap items-center gap-2\">\n              <Badge\n                variant=\"outline\"\n                className=\"border-success/30 bg-success/10 text-success gap-1 text-xs font-semibold\"\n              >\n                <CheckCircle2 className=\"text-success size-3.5\" />\n                Solved · 1 Accepted Answer\n              </Badge>\n              <Badge variant=\"secondary\" className=\"text-xs font-medium\">\n                Vue 3.5 &amp; Vite\n              </Badge>\n            </div>\n\n            <h1 className=\"text-foreground text-xl font-bold tracking-tight sm:text-2xl lg:text-3xl\">\n              How to properly avoid circular dependencies in Vue 3.5 SFC variants with CVA?\n            </h1>\n\n            {/* Tags List */}\n            <div className=\"flex flex-wrap items-center gap-1.5 pt-1\">\n              <span className=\"bg-muted/70 text-muted-foreground hover:text-foreground inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium transition-colors\">\n                <Tag className=\"text-muted-foreground size-3\" />\n                #architecture\n              </span>\n              <span className=\"bg-muted/70 text-muted-foreground hover:text-foreground inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium transition-colors\">\n                <Tag className=\"text-muted-foreground size-3\" />\n                #reka-ui\n              </span>\n              <span className=\"bg-muted/70 text-muted-foreground hover:text-foreground inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium transition-colors\">\n                <Tag className=\"text-muted-foreground size-3\" />\n                #typescript\n              </span>\n              <span className=\"bg-muted/70 text-muted-foreground hover:text-foreground inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium transition-colors\">\n                <Tag className=\"text-muted-foreground size-3\" />\n                #cva\n              </span>\n            </div>\n          </div>\n\n          <Separator />\n\n          {/* Metadata Strip */}\n          <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-6 gap-y-2 text-xs\">\n            <div>\n              <span>Asked </span>\n              <strong className=\"text-foreground font-medium\">2 days ago</strong>\n            </div>\n            <div>\n              <span>Modified </span>\n              <strong className=\"text-foreground font-medium\">18 hours ago</strong>\n            </div>\n            <div>\n              <span>Viewed </span>\n              <strong className=\"text-foreground font-medium tabular-nums\">1,420 times</strong>\n            </div>\n            <div>\n              <span>Module </span>\n              <strong className=\"text-foreground font-medium\">Component Registry Architecture</strong>\n            </div>\n          </div>\n        </div>\n      </header>\n\n      {/* 2-Column Main Workspace */}\n      <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-12\">\n        {/* Left Column: Discussion Thread & Answers (8 cols) */}\n        <main className=\"space-y-6 lg:col-span-8\">\n          {/* Question Post Card */}\n          <article className=\"bg-card rounded-xl border p-5 shadow-xs sm:p-6\">\n            <div className=\"flex items-start gap-4 sm:gap-6\">\n              {/* Upvote / Downvote Counter Widget */}\n              <div className=\"flex flex-col items-center\">\n                <Button\n                  variant=\"outline\"\n                  size=\"icon\"\n                  className={cn(\n                    'size-9 rounded-lg border',\n                    questionVote === 'up'\n                      ? 'border-primary bg-primary/10 text-primary hover:bg-primary/20'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  aria-label=\"Upvote question\"\n                  onClick={() => voteQuestion('up')}\n                >\n                  <ChevronUp className=\"size-5\" />\n                </Button>\n                <span className=\"text-foreground my-1.5 font-mono text-base font-bold tabular-nums\">\n                  {questionScore}\n                </span>\n                <Button\n                  variant=\"outline\"\n                  size=\"icon\"\n                  className={cn(\n                    'size-9 rounded-lg border',\n                    questionVote === 'down'\n                      ? 'border-destructive bg-destructive/10 text-destructive hover:bg-destructive/20'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  aria-label=\"Downvote question\"\n                  onClick={() => voteQuestion('down')}\n                >\n                  <ChevronDown className=\"size-5\" />\n                </Button>\n\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className={cn(\n                    'mt-3 size-8 rounded-md',\n                    isQuestionBookmarked ? 'text-primary' : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  aria-label=\"Bookmark question\"\n                  onClick={() => setIsQuestionBookmarked(!isQuestionBookmarked)}\n                >\n                  <Bookmark className={cn('size-4', isQuestionBookmarked && 'fill-current')} />\n                </Button>\n              </div>\n\n              {/* Question Body & Author Meta */}\n              <div className=\"min-w-0 flex-1 space-y-4\">\n                {/* Author Header */}\n                <div className=\"flex flex-wrap items-center justify-between gap-2 border-b pb-3.5\">\n                  <div className=\"flex items-center gap-3\">\n                    <Avatar className=\"size-10 border\">\n                      <AvatarFallback className=\"bg-primary/10 text-primary text-xs font-semibold\">DC</AvatarFallback>\n                    </Avatar>\n                    <div>\n                      <div className=\"flex items-center gap-2\">\n                        <span className=\"text-foreground text-sm font-semibold\">David Chen</span>\n                        <Badge variant=\"secondary\" className=\"text-xs font-normal\">\n                          Student\n                        </Badge>\n                      </div>\n                      <p className=\"text-muted-foreground text-xs\">Posted 2 days ago · Oct 22, 2026 at 14:32</p>\n                    </div>\n                  </div>\n\n                  <Button\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    className={cn('h-7 gap-1.5 text-xs', isSubscribed ? 'text-primary' : 'text-muted-foreground')}\n                    onClick={() => setIsSubscribed(!isSubscribed)}\n                  >\n                    {isSubscribed ? <Bell className=\"size-3.5\" /> : <BellOff className=\"size-3.5\" />}\n                    <span>{isSubscribed ? 'Subscribed' : 'Subscribe'}</span>\n                  </Button>\n                </div>\n\n                {/* Problem Narrative Prose */}\n                <div className=\"text-foreground/90 space-y-3.5 text-sm leading-relaxed\">\n                  <p>\n                    While implementing unbundled UI primitives for our course project using Vue 3.5, TypeScript, and{' '}\n                    <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                      class-variance-authority\n                    </code>\n                    , we ran into a perplexing runtime error during dev SSR and fast refresh:\n                  </p>\n\n                  <div className=\"border-destructive/30 bg-destructive/10 text-destructive text-destructive rounded-md border px-3.5 py-2.5 font-mono text-xs\">\n                    TypeError: $setup.buttonVariants is not a function at Button.vue:24\n                  </div>\n\n                  <p>\n                    Our initial project structure placed both the component export and the CVA variant definition in the\n                    same barrel file:\n                  </p>\n\n                  {/* Problem Code Snippet Block */}\n                  <div className=\"overflow-hidden rounded-lg border bg-zinc-950 text-zinc-100\">\n                    <div className=\"flex items-center justify-between border-b border-zinc-800 bg-zinc-900/90 px-3.5 py-2 text-xs text-zinc-400\">\n                      <div className=\"flex items-center gap-2\">\n                        <Code className=\"text-warning size-3.5\" />\n                        <span className=\"font-mono text-xs\">components/ui/button/index.ts (Problematic Barrel)</span>\n                      </div>\n                      <Button\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        className=\"h-6 gap-1 px-2 text-xs text-zinc-300 hover:bg-zinc-800 hover:text-zinc-100\"\n                        onClick={copyQuestionCode}\n                      >\n                        {copiedQuestionSnippet ? (\n                          <Check className=\"text-success size-3\" />\n                        ) : (\n                          <Copy className=\"size-3\" />\n                        )}\n                        {copiedQuestionSnippet ? 'Copied' : 'Copy code'}\n                      </Button>\n                    </div>\n                    <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-zinc-300\">\n                      <code>\n                        <span className=\"text-zinc-500\">\n                          // ❌ Circular dependency: index.ts re-exports Button.vue, while Button.vue imports\n                          buttonVariants from index.ts\n                        </span>\n                        {'\\n'}\n                        <span className=\"text-chart-1\">import</span> {'{'} cva {'}'}{' '}\n                        <span className=\"text-chart-1\">from</span>{' '}\n                        <span className=\"text-success\">&apos;class-variance-authority&apos;</span>\n                        {'\\n\\n'}\n                        <span className=\"text-chart-1\">export</span> {'{'} <span className=\"text-chart-1\">default</span>{' '}\n                        <span className=\"text-chart-1\">as</span> Button {'}'} <span className=\"text-chart-1\">from</span>{' '}\n                        <span className=\"text-success\">&apos;./Button.vue&apos;</span>\n                        {'\\n\\n'}\n                        <span className=\"text-chart-1\">export</span> <span className=\"text-info\">const</span>{' '}\n                        buttonVariants = <span className=\"text-chart-2\">cva</span>({'\\n'}{' '}\n                        <span className=\"text-success\">\n                          &apos;inline-flex items-center justify-center font-medium transition-colors&apos;\n                        </span>\n                        ,{'\\n'} {'{'}\n                        {'\\n'} variants: {'{'}\n                        {'\\n'} variant: {'{'}\n                        {'\\n'} default:{' '}\n                        <span className=\"text-success\">&apos;bg-primary text-primary-foreground shadow-xs&apos;</span>,\n                        {'\\n'} outline:{' '}\n                        <span className=\"text-success\">\n                          &apos;border border-input bg-background hover:bg-accent&apos;\n                        </span>\n                        ,{'\\n'} {'}'},{'\\n'} {'}'},{'\\n'} {'}'}\n                        {'\\n'})\n                      </code>\n                    </pre>\n                  </div>\n\n                  <p>\n                    Because{' '}\n                    <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">Button.vue</code>{' '}\n                    imports{' '}\n                    <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                      buttonVariants\n                    </code>{' '}\n                    from{' '}\n                    <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">./index.ts</code>\n                    , Vite evaluates the module in a cycle where the variant function binding is uninitialized during\n                    the Vue SFC component setup.\n                  </p>\n                  <p>\n                    What is the canonical architecture pattern to cleanly break this circular import while maintaining\n                    convenient barrel exports for consumers?\n                  </p>\n                </div>\n\n                {/* Question Action Bar */}\n                <div className=\"flex flex-wrap items-center justify-between gap-3 pt-2\">\n                  <div className=\"flex items-center gap-1\">\n                    <Button\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      className=\"text-muted-foreground h-8 gap-1.5 text-xs\"\n                      onClick={shareThread}\n                    >\n                      <Share2 className=\"size-3.5\" />\n                      <span>Share</span>\n                    </Button>\n                    <Button variant=\"ghost\" size=\"sm\" className=\"text-muted-foreground h-8 gap-1.5 text-xs\">\n                      <Flag className=\"size-3.5\" />\n                      <span>Report</span>\n                    </Button>\n                  </div>\n\n                  <div className=\"text-muted-foreground flex items-center gap-1.5 text-xs\">\n                    <Eye className=\"size-3.5\" />\n                    <span className=\"tabular-nums\">1.4k views</span>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </article>\n\n          {/* Answers Section Header */}\n          <div className=\"flex items-center justify-between pt-2\">\n            <h2 className=\"text-foreground text-lg font-bold tracking-tight sm:text-xl\">{totalAnswersCount} Answers</h2>\n            <span className=\"text-muted-foreground text-xs\">\n              Sorted by: <strong className=\"text-foreground font-medium\">Highest score</strong>\n            </span>\n          </div>\n\n          {/* Answer 1: Accepted Instructor Answer */}\n          <article className=\"bg-card border-success/40 ring-success/20 relative overflow-hidden rounded-xl border shadow-xs ring-1\">\n            {/* Accepted Solution Top Ribbon */}\n            <div className=\"border-success/20 bg-success/10 flex flex-wrap items-center justify-between gap-2 border-b px-5 py-2.5\">\n              <div className=\"text-success flex items-center gap-2 text-xs font-semibold\">\n                <CheckCircle2 className=\"text-success size-4\" />\n                <span>Accepted by Author · Verified Solution</span>\n              </div>\n              <Badge className=\"bg-success hover:bg-success text-xs font-medium text-white\">Instructor Solution</Badge>\n            </div>\n\n            <div className=\"p-5 sm:p-6\">\n              <div className=\"flex items-start gap-4 sm:gap-6\">\n                {/* Upvote Widget with Checkmark Badge */}\n                <div className=\"flex flex-col items-center\">\n                  <Button\n                    variant=\"outline\"\n                    size=\"icon\"\n                    className={cn(\n                      'size-9 rounded-lg border',\n                      answer1Vote === 'up'\n                        ? 'border-success bg-success/10 text-success hover:bg-success/20 text-success'\n                        : 'text-muted-foreground hover:text-foreground',\n                    )}\n                    aria-label=\"Upvote answer\"\n                    onClick={() => voteAnswer1('up')}\n                  >\n                    <ChevronUp className=\"size-5\" />\n                  </Button>\n                  <span className=\"text-foreground my-1.5 font-mono text-base font-bold tabular-nums\">\n                    {answer1Score}\n                  </span>\n                  <Button\n                    variant=\"outline\"\n                    size=\"icon\"\n                    className={cn(\n                      'size-9 rounded-lg border',\n                      answer1Vote === 'down'\n                        ? 'border-destructive bg-destructive/10 text-destructive hover:bg-destructive/20'\n                        : 'text-muted-foreground hover:text-foreground',\n                    )}\n                    aria-label=\"Downvote answer\"\n                    onClick={() => voteAnswer1('down')}\n                  >\n                    <ChevronDown className=\"size-5\" />\n                  </Button>\n\n                  {/* Accepted Checkmark Pill */}\n                  <div\n                    className=\"bg-success/15 text-success mt-3 flex size-8 items-center justify-center rounded-full\"\n                    title=\"Accepted solution\"\n                  >\n                    <Check className=\"size-4 stroke-[2.5]\" />\n                  </div>\n                </div>\n\n                {/* Answer Body */}\n                <div className=\"min-w-0 flex-1 space-y-4\">\n                  {/* Author Header */}\n                  <div className=\"flex flex-wrap items-center justify-between gap-2 border-b pb-3.5\">\n                    <div className=\"flex items-center gap-3\">\n                      <Avatar className=\"border-success/30 size-10 border\">\n                        <AvatarFallback className=\"bg-success/20 text-success text-xs font-semibold\">MV</AvatarFallback>\n                      </Avatar>\n                      <div>\n                        <div className=\"flex items-center gap-2\">\n                          <span className=\"text-foreground text-sm font-semibold\">Marcus Vance</span>\n                          <Badge\n                            variant=\"outline\"\n                            className=\"border-success/30 bg-success/10 text-success text-xs font-medium\"\n                          >\n                            Course Instructor\n                          </Badge>\n                          <Badge variant=\"secondary\" className=\"text-xs\">\n                            Staff\n                          </Badge>\n                        </div>\n                        <p className=\"text-muted-foreground text-xs\">Answered 1 day ago · Edited 18h ago</p>\n                      </div>\n                    </div>\n\n                    <Button\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      className=\"text-muted-foreground h-7 gap-1 text-xs\"\n                      onClick={() => setIsAnswer1Bookmarked(!isAnswer1Bookmarked)}\n                    >\n                      <Bookmark className={cn('size-3.5', isAnswer1Bookmarked && 'fill-primary text-primary')} />\n                      <span>{isAnswer1Bookmarked ? 'Saved' : 'Save'}</span>\n                    </Button>\n                  </div>\n\n                  {/* Solution Content Prose */}\n                  <div className=\"text-foreground/90 space-y-3.5 text-sm leading-relaxed\">\n                    <p>\n                      Great question, David. This is one of the most frequent traps when building unbundled component\n                      registries with Vue 3.5 and Vite.\n                    </p>\n                    <p>\n                      The Vue SFC compiler compiles{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                        &lt;script setup&gt;\n                      </code>{' '}\n                      into a self-contained ES module execution wrapper. When{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                        Button.vue\n                      </code>{' '}\n                      imports from{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                        ./index.ts\n                      </code>\n                      , and{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">index.ts</code>{' '}\n                      simultaneously imports{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                        Button.vue\n                      </code>\n                      , JavaScript enters a Temporal Dead Zone (TDZ) for the uninitialized{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                        buttonVariants\n                      </code>{' '}\n                      export.\n                    </p>\n\n                    <h3 className=\"text-foreground text-sm font-semibold tracking-tight\">\n                      The Solution: Three-File Sidecar Architecture\n                    </h3>\n\n                    <p>\n                      To completely eliminate cyclic dependencies and ensure 100% reliable SSR and Vite HMR, extract all\n                      CVA definitions into a dedicated{' '}\n                      <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                        &lt;name&gt;.variants.ts\n                      </code>{' '}\n                      file:\n                    </p>\n\n                    {/* Solution Code Snippet 1 */}\n                    <div className=\"overflow-hidden rounded-lg border bg-zinc-950 text-zinc-100\">\n                      <div className=\"flex items-center justify-between border-b border-zinc-800 bg-zinc-900/90 px-3.5 py-2 text-xs text-zinc-400\">\n                        <div className=\"flex items-center gap-2\">\n                          <Code className=\"text-success size-3.5\" />\n                          <span className=\"font-mono text-xs\">components/ui/button/button.variants.ts</span>\n                        </div>\n                        <Button\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          className=\"h-6 gap-1 px-2 text-xs text-zinc-300 hover:bg-zinc-800 hover:text-zinc-100\"\n                          onClick={copyAnswer1Code}\n                        >\n                          {copiedAnswer1Snippet ? (\n                            <Check className=\"text-success size-3\" />\n                          ) : (\n                            <Copy className=\"size-3\" />\n                          )}\n                          {copiedAnswer1Snippet ? 'Copied' : 'Copy code'}\n                        </Button>\n                      </div>\n                      <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-zinc-300\">\n                        <code>\n                          <span className=\"text-chart-1\">import</span> {'{'} cva,{' '}\n                          <span className=\"text-chart-1\">type</span> VariantProps {'}'}{' '}\n                          <span className=\"text-chart-1\">from</span>{' '}\n                          <span className=\"text-success\">&apos;class-variance-authority&apos;</span>\n                          {'\\n\\n'}\n                          <span className=\"text-chart-1\">export</span> <span className=\"text-info\">const</span>{' '}\n                          buttonVariants = <span className=\"text-chart-2\">cva</span>({'\\n'}{' '}\n                          <span className=\"text-success\">\n                            &apos;inline-flex items-center justify-center rounded-md font-medium transition-colors\n                            focus-visible:ring-2 focus-visible:outline-none&apos;\n                          </span>\n                          ,{'\\n'} {'{'}\n                          {'\\n'} variants: {'{'}\n                          {'\\n'} variant: {'{'}\n                          {'\\n'} default:{' '}\n                          <span className=\"text-success\">\n                            &apos;bg-primary text-primary-foreground shadow-xs hover:bg-primary/90&apos;\n                          </span>\n                          ,{'\\n'} secondary:{' '}\n                          <span className=\"text-success\">\n                            &apos;bg-secondary text-secondary-foreground hover:bg-secondary/80&apos;\n                          </span>\n                          ,{'\\n'} outline:{' '}\n                          <span className=\"text-success\">\n                            &apos;border border-input bg-background hover:bg-accent hover:text-accent-foreground&apos;\n                          </span>\n                          ,{'\\n'} destructive:{' '}\n                          <span className=\"text-success\">\n                            &apos;bg-destructive text-destructive-foreground hover:bg-destructive/90&apos;\n                          </span>\n                          ,{'\\n'} {'}'},{'\\n'} size: {'{'}\n                          {'\\n'} default: <span className=\"text-success\">&apos;h-9 px-4 py-2 text-sm&apos;</span>,{'\\n'}{' '}\n                          sm: <span className=\"text-success\">&apos;h-8 px-3 text-xs rounded-md&apos;</span>,{'\\n'} lg:{' '}\n                          <span className=\"text-success\">&apos;h-10 px-8 text-base rounded-md&apos;</span>,{'\\n'} {'}'},\n                          {'\\n'} {'}'},{'\\n'} defaultVariants: {'{'}\n                          {'\\n'} variant: <span className=\"text-success\">&apos;default&apos;</span>,{'\\n'} size:{' '}\n                          <span className=\"text-success\">&apos;default&apos;</span>,{'\\n'} {'}'},{'\\n'} {'}'}\n                          {'\\n'}){'\\n\\n'}\n                          <span className=\"text-chart-1\">export</span> <span className=\"text-chart-1\">type</span>{' '}\n                          ButtonVariants = <span className=\"text-chart-2\">VariantProps</span>&lt;\n                          <span className=\"text-chart-1\">typeof</span> buttonVariants&gt;\n                        </code>\n                      </pre>\n                    </div>\n\n                    {/* Companion Barrel & SFC Snippet */}\n                    <div className=\"overflow-hidden rounded-lg border bg-zinc-950 text-zinc-100\">\n                      <div className=\"flex items-center justify-between border-b border-zinc-800 bg-zinc-900/90 px-3.5 py-2 text-xs text-zinc-400\">\n                        <div className=\"flex items-center gap-2\">\n                          <Code className=\"text-info size-3.5\" />\n                          <span className=\"font-mono text-xs\">components/ui/button/index.ts &amp; Button.vue</span>\n                        </div>\n                      </div>\n                      <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-zinc-300\">\n                        <code>\n                          <span className=\"text-zinc-500\">// index.ts — Clean consumer re-exports</span>\n                          {'\\n'}\n                          <span className=\"text-chart-1\">export</span> {'{'}{' '}\n                          <span className=\"text-chart-1\">default</span> <span className=\"text-chart-1\">as</span> Button{' '}\n                          {'}'} <span className=\"text-chart-1\">from</span>{' '}\n                          <span className=\"text-success\">&apos;./Button.vue&apos;</span>\n                          {'\\n'}\n                          <span className=\"text-chart-1\">export</span> {'{'} buttonVariants,{' '}\n                          <span className=\"text-chart-1\">type</span> ButtonVariants {'}'}{' '}\n                          <span className=\"text-chart-1\">from</span>{' '}\n                          <span className=\"text-success\">&apos;./button.variants&apos;</span>\n                          {'\\n\\n'}\n                          <span className=\"text-zinc-500\">// In Button.vue &lt;script setup lang=\"ts\"&gt;</span>\n                          {'\\n'}\n                          <span className=\"text-chart-1\">import</span> {'{'} buttonVariants,{' '}\n                          <span className=\"text-chart-1\">type</span> ButtonVariants {'}'}{' '}\n                          <span className=\"text-chart-1\">from</span>{' '}\n                          <span className=\"text-success\">&apos;./button.variants&apos;</span>{' '}\n                          <span className=\"text-zinc-500\">// ✅ Direct sibling import</span>\n                        </code>\n                      </pre>\n                    </div>\n\n                    <ul className=\"list-inside list-disc space-y-1.5 pl-1 text-xs sm:text-sm\">\n                      <li>\n                        <strong>Acyclic Dependency Graph:</strong>{' '}\n                        <code className=\"bg-muted text-foreground rounded px-1 font-mono text-xs\">Button.vue</code>{' '}\n                        imports strictly from{' '}\n                        <code className=\"bg-muted text-foreground rounded px-1 font-mono text-xs\">\n                          ./button.variants\n                        </code>\n                        .\n                      </li>\n                      <li>\n                        <strong>Tree-Shakable:</strong> Consumers can import just the variant generator without mounting\n                        the Vue SFC component instance.\n                      </li>\n                      <li>\n                        <strong>Cross-Framework Ready:</strong> The variant file is pure TypeScript, making it 100%\n                        shareable across Vue and React registry packages.\n                      </li>\n                    </ul>\n                  </div>\n\n                  {/* Action Bar */}\n                  <div className=\"flex items-center justify-between border-t pt-3\">\n                    <div className=\"flex items-center gap-2\">\n                      <Button\n                        variant=\"outline\"\n                        size=\"sm\"\n                        className=\"h-7 gap-1.5 text-xs\"\n                        onClick={() => voteAnswer1('up')}\n                      >\n                        <ThumbsUp className=\"size-3\" />\n                        <span>Helpful ({answer1Score})</span>\n                      </Button>\n                      <Button\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        className=\"text-muted-foreground h-7 gap-1.5 text-xs\"\n                        onClick={shareThread}\n                      >\n                        <Share2 className=\"size-3\" />\n                        <span>Share</span>\n                      </Button>\n                    </div>\n                    <span className=\"text-muted-foreground text-xs\">89 students found this helpful</span>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </article>\n\n          {/* Answer 2: Peer Response */}\n          <article className=\"bg-card rounded-xl border p-5 shadow-xs sm:p-6\">\n            <div className=\"flex items-start gap-4 sm:gap-6\">\n              {/* Upvote Widget */}\n              <div className=\"flex flex-col items-center\">\n                <Button\n                  variant=\"outline\"\n                  size=\"icon\"\n                  className={cn(\n                    'size-9 rounded-lg border',\n                    answer2Vote === 'up'\n                      ? 'border-primary bg-primary/10 text-primary hover:bg-primary/20'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  aria-label=\"Upvote answer\"\n                  onClick={() => voteAnswer2('up')}\n                >\n                  <ChevronUp className=\"size-5\" />\n                </Button>\n                <span className=\"text-foreground my-1.5 font-mono text-base font-bold tabular-nums\">\n                  {answer2Score}\n                </span>\n                <Button\n                  variant=\"outline\"\n                  size=\"icon\"\n                  className={cn(\n                    'size-9 rounded-lg border',\n                    answer2Vote === 'down'\n                      ? 'border-destructive bg-destructive/10 text-destructive hover:bg-destructive/20'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  aria-label=\"Downvote answer\"\n                  onClick={() => voteAnswer2('down')}\n                >\n                  <ChevronDown className=\"size-5\" />\n                </Button>\n              </div>\n\n              {/* Answer Body */}\n              <div className=\"min-w-0 flex-1 space-y-4\">\n                {/* Author Header */}\n                <div className=\"flex flex-wrap items-center justify-between gap-2 border-b pb-3.5\">\n                  <div className=\"flex items-center gap-3\">\n                    <Avatar className=\"size-10 border\">\n                      <AvatarFallback className=\"bg-info/20 text-info text-xs font-semibold\">SL</AvatarFallback>\n                    </Avatar>\n                    <div>\n                      <div className=\"flex items-center gap-2\">\n                        <span className=\"text-foreground text-sm font-semibold\">Sophia Lin</span>\n                        <Badge variant=\"secondary\" className=\"text-xs font-normal\">\n                          Teaching Assistant\n                        </Badge>\n                      </div>\n                      <p className=\"text-muted-foreground text-xs\">Answered 2 days ago · Oct 22, 2026 at 18:40</p>\n                    </div>\n                  </div>\n\n                  <Button\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    className=\"text-muted-foreground h-7 gap-1 text-xs\"\n                    onClick={() => setIsAnswer2Bookmarked(!isAnswer2Bookmarked)}\n                  >\n                    <Bookmark className={cn('size-3.5', isAnswer2Bookmarked && 'fill-primary text-primary')} />\n                    <span>{isAnswer2Bookmarked ? 'Saved' : 'Save'}</span>\n                  </Button>\n                </div>\n\n                {/* Content Prose */}\n                <div className=\"text-foreground/90 space-y-3 text-sm leading-relaxed\">\n                  <p>\n                    Adding to Marcus&apos;s answer: another huge benefit of isolating{' '}\n                    <code className=\"bg-muted text-foreground rounded px-1.5 py-0.5 font-mono text-xs\">\n                      &lt;name&gt;.variants.ts\n                    </code>{' '}\n                    is for monorepos or dual-framework setups.\n                  </p>\n                  <p>\n                    When you have both Vue and React registry components (like in UIPKGE), the variant definitions can\n                    be shared verbatim in a shared token package without bringing in any Vue SFC or JSX compiler\n                    dependencies. This keeps design tokens consistent across both stacks.\n                  </p>\n                </div>\n\n                {/* Action Bar */}\n                <div className=\"flex items-center justify-between border-t pt-3\">\n                  <div className=\"flex items-center gap-2\">\n                    <Button\n                      variant=\"outline\"\n                      size=\"sm\"\n                      className=\"h-7 gap-1.5 text-xs\"\n                      onClick={() => voteAnswer2('up')}\n                    >\n                      <ThumbsUp className=\"size-3\" />\n                      <span>Helpful ({answer2Score})</span>\n                    </Button>\n                    <Button\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      className=\"text-muted-foreground h-7 gap-1.5 text-xs\"\n                      onClick={shareThread}\n                    >\n                      <Share2 className=\"size-3\" />\n                      <span>Share</span>\n                    </Button>\n                  </div>\n                  <span className=\"text-muted-foreground text-xs\">14 students found this helpful</span>\n                </div>\n              </div>\n            </div>\n          </article>\n\n          {/* Dynamic User Submitted Answers */}\n          {customAnswers.map((ans) => (\n            <article key={ans.id} className=\"bg-card rounded-xl border p-5 shadow-xs sm:p-6\">\n              <div className=\"flex items-start gap-4 sm:gap-6\">\n                {/* Upvote Widget */}\n                <div className=\"flex flex-col items-center\">\n                  <Button\n                    variant=\"outline\"\n                    size=\"icon\"\n                    className={cn(\n                      'size-9 rounded-lg border',\n                      ans.userVote === 'up'\n                        ? 'border-primary bg-primary/10 text-primary'\n                        : 'text-muted-foreground hover:text-foreground',\n                    )}\n                    aria-label=\"Upvote answer\"\n                    onClick={() => voteCustomAnswer(ans.id, 'up')}\n                  >\n                    <ChevronUp className=\"size-5\" />\n                  </Button>\n                  <span className=\"text-foreground my-1.5 font-mono text-base font-bold tabular-nums\">{ans.score}</span>\n                  <Button\n                    variant=\"outline\"\n                    size=\"icon\"\n                    className={cn(\n                      'size-9 rounded-lg border',\n                      ans.userVote === 'down'\n                        ? 'border-destructive bg-destructive/10 text-destructive'\n                        : 'text-muted-foreground hover:text-foreground',\n                    )}\n                    aria-label=\"Downvote answer\"\n                    onClick={() => voteCustomAnswer(ans.id, 'down')}\n                  >\n                    <ChevronDown className=\"size-5\" />\n                  </Button>\n                </div>\n\n                {/* Answer Body */}\n                <div className=\"min-w-0 flex-1 space-y-4\">\n                  {/* Author Header */}\n                  <div className=\"flex items-center justify-between border-b pb-3.5\">\n                    <div className=\"flex items-center gap-3\">\n                      <Avatar className=\"size-10 border\">\n                        <AvatarFallback className=\"bg-primary/10 text-primary text-xs font-semibold\">\n                          {ans.avatarText}\n                        </AvatarFallback>\n                      </Avatar>\n                      <div>\n                        <div className=\"flex items-center gap-2\">\n                          <span className=\"text-foreground text-sm font-semibold\">{ans.authorName}</span>\n                          <Badge variant=\"secondary\" className=\"text-xs\">\n                            {ans.authorRole}\n                          </Badge>\n                        </div>\n                        <p className=\"text-muted-foreground text-xs\">{ans.postedTime}</p>\n                      </div>\n                    </div>\n                  </div>\n\n                  {/* Content Prose */}\n                  <div className=\"text-foreground/90 text-sm leading-relaxed whitespace-pre-wrap\">{ans.content}</div>\n                </div>\n              </div>\n            </article>\n          ))}\n\n          {/* Reply / Answer Composer */}\n          <section className=\"bg-card overflow-hidden rounded-xl border shadow-xs\">\n            <div className=\"bg-muted/40 border-b px-5 py-3\">\n              <h3 className=\"text-foreground text-base font-bold tracking-tight\">Post Your Answer</h3>\n              <p className=\"text-muted-foreground text-xs\">\n                Provide thorough explanations, actionable code examples, and reference architectural best practices.\n              </p>\n            </div>\n\n            <div className=\"space-y-3.5 p-5\">\n              {/* Formatting Toolbar */}\n              <div className=\"text-muted-foreground flex flex-wrap items-center gap-1 border-b pb-2.5\">\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"size-7\"\n                  aria-label=\"Format bold\"\n                  onClick={() => applyFormat('bold')}\n                >\n                  <Bold className=\"size-3.5\" />\n                </Button>\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"size-7\"\n                  aria-label=\"Format italic\"\n                  onClick={() => applyFormat('italic')}\n                >\n                  <Italic className=\"size-3.5\" />\n                </Button>\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"size-7\"\n                  aria-label=\"Insert code block\"\n                  onClick={() => applyFormat('code')}\n                >\n                  <Code className=\"size-3.5\" />\n                </Button>\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"size-7\"\n                  aria-label=\"Insert link\"\n                  onClick={() => applyFormat('link')}\n                >\n                  <Link2 className=\"size-3.5\" />\n                </Button>\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"size-7\"\n                  aria-label=\"Insert list\"\n                  onClick={() => applyFormat('list')}\n                >\n                  <List className=\"size-3.5\" />\n                </Button>\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"size-7\"\n                  aria-label=\"Insert blockquote\"\n                  onClick={() => applyFormat('quote')}\n                >\n                  <Quote className=\"size-3.5\" />\n                </Button>\n                <span className=\"text-muted-foreground ml-auto text-xs\">Markdown syntax supported</span>\n              </div>\n\n              {/* Rich Textarea */}\n              <Textarea\n                value={replyDraft}\n                onValueChange={(v) => setReplyDraft(v)}\n                placeholder=\"Write your detailed answer with code blocks (e.g. ```ts ... ```)...\"\n                rows={6}\n                className=\"resize-y font-sans text-sm\"\n              />\n\n              {/* Post Button & Guidelines */}\n              <div className=\"flex flex-wrap items-center justify-between gap-3 pt-1\">\n                <span className=\"text-muted-foreground text-xs\">\n                  Draft saved automatically · Be constructive &amp; cite official docs\n                </span>\n                <Button\n                  className=\"gap-1.5 text-xs font-semibold\"\n                  disabled={!replyDraft.trim()}\n                  onClick={handlePostAnswer}\n                >\n                  <MessageSquare className=\"size-3.5\" />\n                  Post Your Answer\n                </Button>\n              </div>\n            </div>\n          </section>\n        </main>\n\n        {/* Right Column: Sidebar Metadata & Related Discussions (4 cols) */}\n        <aside className=\"space-y-6 lg:col-span-4\">\n          {/* Thread Info Card */}\n          <Card>\n            <CardHeader className=\"pb-3\">\n              <div className=\"flex items-center justify-between\">\n                <CardTitle className=\"text-sm font-semibold\">Discussion Info</CardTitle>\n                <Badge variant=\"outline\" className=\"border-success/30 bg-success/10 text-success text-xs\">\n                  Resolved\n                </Badge>\n              </div>\n            </CardHeader>\n            <CardContent className=\"space-y-3 pt-0\">\n              <Separator />\n              <dl className=\"space-y-2.5 text-xs\">\n                <div className=\"flex items-center justify-between gap-2\">\n                  <dt className=\"text-muted-foreground\">Course</dt>\n                  <dd className=\"text-foreground font-medium\">CS-314 Frontend Arch</dd>\n                </div>\n                <div className=\"flex items-center justify-between gap-2\">\n                  <dt className=\"text-muted-foreground\">Category</dt>\n                  <dd className=\"text-foreground font-medium\">Vue 3.5 &amp; Vite</dd>\n                </div>\n                <div className=\"flex items-center justify-between gap-2\">\n                  <dt className=\"text-muted-foreground\">Total Upvotes</dt>\n                  <dd className=\"text-foreground font-medium tabular-nums\">+145 upvotes</dd>\n                </div>\n                <div className=\"flex items-center justify-between gap-2\">\n                  <dt className=\"text-muted-foreground\">Total Views</dt>\n                  <dd className=\"text-foreground font-medium tabular-nums\">1,420</dd>\n                </div>\n                <div className=\"flex items-center justify-between gap-2\">\n                  <dt className=\"text-muted-foreground\">Participants</dt>\n                  <dd className=\"text-foreground font-medium\">4 contributors</dd>\n                </div>\n                <div className=\"flex items-center justify-between gap-2\">\n                  <dt className=\"text-muted-foreground\">Accepted By</dt>\n                  <dd className=\"text-foreground font-medium\">David Chen (Author)</dd>\n                </div>\n              </dl>\n            </CardContent>\n          </Card>\n\n          {/* Related Questions Card */}\n          <Card>\n            <CardHeader className=\"pb-3\">\n              <CardTitle className=\"text-sm font-semibold\">Related Discussions</CardTitle>\n              <CardDescription className=\"text-xs\">Similar questions from this course cohort</CardDescription>\n            </CardHeader>\n            <CardContent className=\"space-y-3 pt-0\">\n              <Separator />\n              <ul className=\"space-y-3 text-xs\">\n                <li className=\"space-y-1\">\n                  <a\n                    href=\"#\"\n                    className=\"text-foreground hover:text-primary flex items-start justify-between gap-2 font-medium transition-colors\"\n                  >\n                    <span>How to type polymorphic asChild props with Reka UI in Vue 3.5?</span>\n                    <ArrowUpRight className=\"text-muted-foreground size-3.5 shrink-0\" />\n                  </a>\n                  <div className=\"text-muted-foreground flex items-center gap-2\">\n                    <span className=\"bg-success/10 text-success rounded px-1.5 py-0.5 text-xs font-medium\">Solved</span>\n                    <span className=\"tabular-nums\">38 upvotes</span>\n                    <span>· 4 answers</span>\n                  </div>\n                </li>\n\n                <Separator />\n\n                <li className=\"space-y-1\">\n                  <a\n                    href=\"#\"\n                    className=\"text-foreground hover:text-primary flex items-start justify-between gap-2 font-medium transition-colors\"\n                  >\n                    <span>Configuring OKLCH Tailwind v4 themes with Nuxt 4</span>\n                    <ArrowUpRight className=\"text-muted-foreground size-3.5 shrink-0\" />\n                  </a>\n                  <div className=\"text-muted-foreground flex items-center gap-2\">\n                    <span className=\"bg-success/10 text-success rounded px-1.5 py-0.5 text-xs font-medium\">Solved</span>\n                    <span className=\"tabular-nums\">24 upvotes</span>\n                    <span>· 2 answers</span>\n                  </div>\n                </li>\n\n                <Separator />\n\n                <li className=\"space-y-1\">\n                  <a\n                    href=\"#\"\n                    className=\"text-foreground hover:text-primary flex items-start justify-between gap-2 font-medium transition-colors\"\n                  >\n                    <span>Best practices for CVA compoundVariants in TypeScript</span>\n                    <ArrowUpRight className=\"text-muted-foreground size-3.5 shrink-0\" />\n                  </a>\n                  <div className=\"text-muted-foreground flex items-center gap-2\">\n                    <span className=\"bg-muted text-foreground rounded px-1.5 py-0.5 text-xs font-medium\">Open</span>\n                    <span className=\"tabular-nums\">19 upvotes</span>\n                    <span>· 1 answer</span>\n                  </div>\n                </li>\n\n                <Separator />\n\n                <li className=\"space-y-1\">\n                  <a\n                    href=\"#\"\n                    className=\"text-foreground hover:text-primary flex items-start justify-between gap-2 font-medium transition-colors\"\n                  >\n                    <span>Hydration mismatches with client-side theme switchers in Astro SSG</span>\n                    <ArrowUpRight className=\"text-muted-foreground size-3.5 shrink-0\" />\n                  </a>\n                  <div className=\"text-muted-foreground flex items-center gap-2\">\n                    <span className=\"bg-success/10 text-success rounded px-1.5 py-0.5 text-xs font-medium\">Solved</span>\n                    <span className=\"tabular-nums\">52 upvotes</span>\n                    <span>· 6 answers</span>\n                  </div>\n                </li>\n              </ul>\n            </CardContent>\n          </Card>\n\n          {/* EdStem Forum Guidelines Card */}\n          <Card>\n            <CardHeader className=\"pb-3\">\n              <div className=\"flex items-center gap-2\">\n                <BookOpen className=\"text-primary size-4\" />\n                <CardTitle className=\"text-sm font-semibold\">Forum Etiquette</CardTitle>\n              </div>\n            </CardHeader>\n            <CardContent className=\"space-y-2.5 pt-0 text-xs\">\n              <Separator />\n              <div className=\"text-muted-foreground space-y-2\">\n                <div className=\"flex items-start gap-2\">\n                  <Check className=\"text-primary mt-0.5 size-3.5 shrink-0\" />\n                  <span>Isolate reproducible snippets using [name].variants.ts patterns.</span>\n                </div>\n                <div className=\"flex items-start gap-2\">\n                  <Check className=\"text-primary mt-0.5 size-3.5 shrink-0\" />\n                  <span>Search existing questions before posting duplicate topics.</span>\n                </div>\n                <div className=\"flex items-start gap-2\">\n                  <Check className=\"text-primary mt-0.5 size-3.5 shrink-0\" />\n                  <span>Mark the accepted solution once your issue is verified.</span>\n                </div>\n              </div>\n            </CardContent>\n          </Card>\n        </aside>\n      </div>\n    </div>\n  )\n}\n\nexport default PeerDiscussionForum\n",
      "type": "registry:block",
      "target": "~/components/blocks/PeerDiscussionForum.tsx"
    }
  ],
  "dependencies": [
    "lucide-react"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/react/avatar.json",
    "https://uipkge.dev/r/react/badge.json",
    "https://uipkge.dev/r/react/button.json",
    "https://uipkge.dev/r/react/card.json",
    "https://uipkge.dev/r/react/separator.json",
    "https://uipkge.dev/r/react/textarea.json"
  ],
  "description": "StackOverflow and EdStem style student community Q&A thread with upvoting, accepted instructor answers, markdown code formatting, rich answer composer, and related discussions sidebar.",
  "categories": [
    "education",
    "app",
    "community"
  ]
}