{"version":3,"sources":["../src/core/limits.ts","../src/parser/StreamParser.ts","../src/core/sanitize.ts","../src/parser/InlineParser.ts","../src/components/InlineRenderer.tsx","../src/highlight/diff.ts","../src/highlight/highlighter.ts","../src/components/Blocks.tsx","../src/components/StreamMD.tsx","../src/hooks/useStreamMD.ts","../src/server/index.ts","../src/next/StreamMDServer.tsx","../src/next/ai-sdk.tsx"],"names":["a","rightFlank","jsx","Fragment","React","memo","HeadingBlock","ParagraphBlock","CodeBlockComponent","useState","useCallback","useMemo","jsxs","React2","ListBlock","TableBlock","BlockquoteBlock","HorizontalRuleBlock","HtmlBlock","useRef","useEffect","useSyncExternalStore","React3"],"mappings":"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","file":"next.cjs","sourcesContent":["/**\n * Hard limits to defend against pathological / adversarial input.\n * All values are overridable via parser options.\n */\n\nexport interface Limits {\n  /** Maximum total document length the parser will accept (default: 1 MB). */\n  maxDocLength: number;\n  /** Maximum nesting depth for inline tokens (bold/italic/etc). */\n  maxInlineDepth: number;\n  /** Maximum number of inline tokens a single block can produce. */\n  maxInlineTokens: number;\n  /** Maximum list nesting depth. */\n  maxListDepth: number;\n  /** Maximum table column count. */\n  maxTableColumns: number;\n}\n\nexport const DEFAULT_LIMITS: Limits = {\n  maxDocLength: 1_000_000,\n  maxInlineDepth: 4,\n  maxInlineTokens: 50_000,\n  maxListDepth: 10,\n  maxTableColumns: 100,\n};\n\nexport function clampText(text: string, limits: Pick<Limits, \"maxDocLength\">): string {\n  if (text.length <= limits.maxDocLength) return text;\n  return text.slice(0, limits.maxDocLength);\n}\n","/**\n * Streaming markdown block parser.\n *\n * Accepts the full accumulated text on each `push()`, diffs internally,\n * and produces a `Block[]` AST plus the index of the currently active\n * (still-streaming) block. Closed blocks are immutable so React can\n * memoize them safely.\n *\n * Supports: ATX + setext headings, paragraphs, fenced + indented code,\n * blockquotes, ordered/unordered/task lists with nesting, GFM tables\n * (committed only on separator-row), thematic breaks, horizontal rules,\n * hard limits, and prefix-change detection (auto-reset when the input\n * is no longer a prefix of what was last seen).\n */\n\nimport type {\n  Block,\n  BlockType,\n  BlockMeta,\n  ParseResult,\n  StreamMDOptions,\n  BlockPlugin,\n} from \"./types\";\nimport { DEFAULT_LIMITS, type Limits } from \"../core/limits\";\n\ninterface ParserOptions extends StreamMDOptions {\n  blockPlugins?: BlockPlugin[];\n}\n\nexport class StreamParser {\n  private blocks: Block[] = [];\n  private prevText = \"\";\n  private inCodeFence = false;\n  private codeFenceChar = \"\";\n  private codeFenceCount = 0;\n  private codeFenceIndent = 0;\n  private incompleteLine = \"\";\n  private blockId = 0;\n  private limits: Limits;\n  private opts: ParserOptions;\n\n  constructor(options: ParserOptions = {}) {\n    this.opts = options;\n    this.limits = { ...DEFAULT_LIMITS, ...(options.limits ?? {}) };\n  }\n\n  /**\n   * Push the full accumulated text. The parser internally diffs against\n   * the previous push to process only new content. If the new text is\n   * not a prefix of the previous text (e.g. consumer cleared / replaced\n   * the buffer), the parser resets and reparses from scratch.\n   */\n  push(fullText: string): ParseResult {\n    // Hard length cap to defend against pathological input.\n    if (fullText.length > this.limits.maxDocLength) {\n      fullText = fullText.slice(0, this.limits.maxDocLength);\n    }\n\n    if (fullText === this.prevText) {\n      return {\n        blocks: this.blocks,\n        activeIndex: this.blocks.length > 0 ? this.blocks.length - 1 : -1,\n      };\n    }\n\n    // Detect non-prefix change → reset.\n    const isPrefixGrow =\n      fullText.length >= this.prevText.length &&\n      fullText.startsWith(this.prevText);\n\n    if (!isPrefixGrow) {\n      this.reset();\n    }\n\n    const startedAt = this.prevText.length;\n    const newContent = fullText.slice(startedAt);\n    this.prevText = fullText;\n\n    // Re-process: keep any incompleteLine carry-over, append new content.\n    const buffer = this.incompleteLine + newContent;\n    const lines = buffer.split(\"\\n\");\n    // After splitting on \\n, the LAST element is either:\n    //   - the incomplete trailing text (no terminating \\n)\n    //   - the empty string \"\" left over from the final \\n\n    // Either way we must pop it; if it's the incomplete fragment, save it.\n    const lastIsIncomplete = !buffer.endsWith(\"\\n\");\n    const popped = lines.pop();\n    this.incompleteLine = lastIsIncomplete ? (popped ?? \"\") : \"\";\n\n    for (let li = 0; li < lines.length; li++) {\n      this.processLine(lines[li]!, lines, li);\n    }\n\n    return {\n      blocks: this.blocks,\n      activeIndex: this.blocks.length > 0 ? this.blocks.length - 1 : -1,\n    };\n  }\n\n  /** Get the current incomplete trailing line (for streaming display). */\n  getIncompleteLine(): string {\n    return this.incompleteLine;\n  }\n\n  /** Reset all state. */\n  reset(): void {\n    this.blocks = [];\n    this.prevText = \"\";\n    this.inCodeFence = false;\n    this.codeFenceChar = \"\";\n    this.codeFenceCount = 0;\n    this.codeFenceIndent = 0;\n    this.incompleteLine = \"\";\n    // blockId intentionally not reset so React keys remain stable across resets.\n  }\n\n  /** Get current blocks. */\n  getBlocks(): Block[] {\n    return this.blocks;\n  }\n\n  // ── Internals ──\n\n  private nextId(): string {\n    return \"smd-\" + ++this.blockId;\n  }\n\n  private getActive(): Block | null {\n    if (this.blocks.length === 0) return null;\n    const last = this.blocks[this.blocks.length - 1]!;\n    return last.closed ? null : last;\n  }\n\n  private closeActive(): void {\n    const a = this.getActive();\n    if (a) {\n      a.closed = true;\n      this.cacheParsed(a);\n      this.opts.onBlockComplete?.(a);\n    }\n  }\n\n  private startBlock(type: BlockType, content: string, meta: BlockMeta): Block {\n    const block: Block = {\n      id: this.nextId(),\n      type,\n      content,\n      closed: false,\n      meta,\n    };\n    this.blocks.push(block);\n    return block;\n  }\n\n  /**\n   * Cache parsed structure (e.g. table cells, list items) on close so\n   * components don't re-parse on every render.\n   */\n  private cacheParsed(block: Block): void {\n    if (block.type === \"table\") {\n      block.meta.parsed = parseTable(block.content);\n    } else if (block.type === \"list\") {\n      block.meta.parsed = parseListItems(block.content);\n    }\n  }\n\n  private processLine(line: string, allLines: string[], idx: number): void {\n    // ── Inside fenced code ──\n    if (this.inCodeFence) {\n      const stripped = line.replace(/^ {0,3}/, \"\");\n      if (this.isClosingFence(stripped)) {\n        this.inCodeFence = false;\n        this.closeActive();\n        return;\n      }\n      const a = this.getActive();\n      if (a && a.type === \"code\") {\n        // Strip up to fence-indent of leading spaces (CommonMark).\n        const indented = line.replace(\n          new RegExp(`^ {0,${this.codeFenceIndent}}`),\n          \"\",\n        );\n        a.content += (a.content ? \"\\n\" : \"\") + indented;\n      }\n      return;\n    }\n\n    // ── Plugin block matchers (run before builtins so they can override) ──\n    if (this.opts.blockPlugins?.length) {\n      for (const plugin of this.opts.blockPlugins) {\n        const m = plugin.openMatch(line);\n        if (m) {\n          this.closeActive();\n          const block = this.startBlock(m.type, m.content ?? \"\", {\n            ...(m.meta ?? {}),\n            pluginName: plugin.name,\n          });\n          if (m.closeImmediately) {\n            block.closed = true;\n            this.cacheParsed(block);\n            this.opts.onBlockComplete?.(block);\n          }\n          return;\n        }\n      }\n    }\n\n    // ── Blank line ──\n    if (line.trim() === \"\") {\n      this.closeActive();\n      return;\n    }\n\n    // ── Code fence opening ──\n    const fenceMatch = line.match(/^( {0,3})(`{3,}|~{3,})\\s*([^`]*)$/);\n    if (fenceMatch) {\n      // ` fences cannot contain ` in info string.\n      const fence = fenceMatch[2]!;\n      if (fence.startsWith(\"`\") && fenceMatch[3]!.includes(\"`\")) {\n        // fall through\n      } else {\n        this.closeActive();\n        this.inCodeFence = true;\n        this.codeFenceChar = fence[0]!;\n        this.codeFenceCount = fence.length;\n        this.codeFenceIndent = fenceMatch[1]!.length;\n        const info = fenceMatch[3]!.trim();\n        const spaceIdx = info.search(/\\s/);\n        const language = spaceIdx >= 0 ? info.slice(0, spaceIdx) : info;\n        const attributes = spaceIdx >= 0 ? info.slice(spaceIdx + 1) : \"\";\n        this.startBlock(\"code\", \"\", {\n          language,\n          ...(attributes ? { attributes } : {}),\n        });\n        return;\n      }\n    }\n\n    // ── ATX heading ──\n    const atxMatch = line.match(/^ {0,3}(#{1,6})(?:\\s+(.*?))?(?:\\s+#+)?\\s*$/);\n    if (atxMatch) {\n      this.closeActive();\n      const level = atxMatch[1]!.length;\n      const text = (atxMatch[2] ?? \"\").trim();\n      const block = this.startBlock(\"heading\", text, { level });\n      // Headings are always single-line — close immediately. (Premature\n      // closure of in-progress streaming heading lines is avoided because\n      // ATX-headings can only match on a fully complete line — incomplete\n      // lines stay in `incompleteLine` and don't reach processLine.)\n      block.closed = true;\n      this.opts.onBlockComplete?.(block);\n      return;\n    }\n\n    // ── Setext heading (look-back) ──\n    const setextMatch = line.match(/^ {0,3}(=+|-+)\\s*$/);\n    if (setextMatch) {\n      const active = this.getActive();\n      if (active && active.type === \"paragraph\" && !active.closed) {\n        active.type = \"heading\";\n        active.meta = { level: setextMatch[1]!.startsWith(\"=\") ? 1 : 2 };\n        active.closed = true;\n        this.opts.onBlockComplete?.(active);\n        return;\n      }\n      // Not setext → continue checking thematic break.\n    }\n\n    // ── Thematic break (HR) ──\n    if (/^ {0,3}([-*_])(?:\\s*\\1){2,}\\s*$/.test(line)) {\n      this.closeActive();\n      const block = this.startBlock(\"hr\", \"\", {});\n      block.closed = true;\n      this.opts.onBlockComplete?.(block);\n      return;\n    }\n\n    // ── Blockquote ──\n    const bqMatch = line.match(/^ {0,3}>\\s?(.*)$/);\n    if (bqMatch) {\n      const a = this.getActive();\n      if (a && a.type === \"blockquote\") {\n        a.content += \"\\n\" + bqMatch[1]!;\n      } else {\n        this.closeActive();\n        this.startBlock(\"blockquote\", bqMatch[1]!, {});\n      }\n      return;\n    }\n\n    // ── Lists (ordered + unordered, with nesting via indent) ──\n    const ulMatch = line.match(/^(\\s*)([-*+])\\s+(.*)$/);\n    const olMatch = line.match(/^(\\s*)(\\d{1,9})([.)])\\s+(.*)$/);\n    if (ulMatch || olMatch) {\n      const indent = (ulMatch ? ulMatch[1]! : olMatch![1]!).length;\n      const ordered = !!olMatch;\n      const a = this.getActive();\n      if (a && a.type === \"list\" && a.meta.ordered === ordered) {\n        a.content += \"\\n\" + line;\n        return;\n      }\n      this.closeActive();\n      const meta: BlockMeta = { ordered, indent };\n      if (ordered) meta.start = parseInt(olMatch![2]!, 10);\n      this.startBlock(\"list\", line, meta);\n      return;\n    }\n\n    // ── List continuation (indented line under a list) ──\n    {\n      const a = this.getActive();\n      if (a && a.type === \"list\" && /^\\s+\\S/.test(line)) {\n        a.content += \"\\n\" + line;\n        return;\n      }\n    }\n\n    // ── Indented code block (4 spaces, only when no active paragraph) ──\n    if (/^ {4}/.test(line)) {\n      const a = this.getActive();\n      if (!a || a.type === \"paragraph\" || a.type === \"code\") {\n        if (a && a.type === \"code\") {\n          a.content += \"\\n\" + line.slice(4);\n          return;\n        }\n        if (!a) {\n          this.startBlock(\"code\", line.slice(4), { language: \"\" });\n          return;\n        }\n      }\n      // Inside paragraph — fall through to paragraph append (lazy continuation).\n    }\n\n    // ── Table detection: only commits on separator row ──\n    if (line.includes(\"|\")) {\n      const a = this.getActive();\n      // Existing table → append.\n      if (a && a.type === \"table\") {\n        a.content += \"\\n\" + line;\n        return;\n      }\n      // Active paragraph + this line is a separator row matching column count?\n      if (\n        a &&\n        a.type === \"paragraph\" &&\n        a.content.includes(\"|\") &&\n        !a.content.includes(\"\\n\") &&\n        isTableSeparatorRow(line)\n      ) {\n        const headers = splitTableRow(a.content);\n        const seps = splitTableRow(line);\n        if (headers.length === seps.length && headers.length > 0) {\n          a.type = \"table\";\n          a.content += \"\\n\" + line;\n          return;\n        }\n      }\n      // Look-ahead: this line is a header and *next* line is a separator.\n      if (\n        !a ||\n        (a.type === \"paragraph\" && a.content.includes(\"\\n\") === false)\n      ) {\n        const next = allLines[idx + 1];\n        if (\n          next !== undefined &&\n          next.includes(\"|\") &&\n          isTableSeparatorRow(next)\n        ) {\n          const headers = splitTableRow(line);\n          const seps = splitTableRow(next);\n          if (headers.length === seps.length && headers.length > 0) {\n            this.closeActive();\n            this.startBlock(\"table\", line, {});\n            return;\n          }\n        }\n      }\n      // else fall through to paragraph\n    }\n\n    // ── HTML block (very limited; controlled by allowHtml) ──\n    if (this.opts.allowHtml && /^ {0,3}<[a-z!]/i.test(line)) {\n      const a = this.getActive();\n      if (a && a.type === \"html\") {\n        a.content += \"\\n\" + line;\n      } else {\n        this.closeActive();\n        this.startBlock(\"html\", line, {});\n      }\n      return;\n    }\n\n    // ── Paragraph (default) ──\n    const a = this.getActive();\n    if (a && a.type === \"paragraph\") {\n      a.content += \"\\n\" + line;\n    } else {\n      this.closeActive();\n      this.startBlock(\"paragraph\", line, {});\n    }\n  }\n\n  private isClosingFence(line: string): boolean {\n    if (line.length < this.codeFenceCount) return false;\n    let n = 0;\n    for (let i = 0; i < line.length; i++) {\n      if (line[i] === this.codeFenceChar) n++;\n      else if (line[i] === \" \" && n >= this.codeFenceCount) {\n        // trailing spaces ok\n        for (let j = i; j < line.length; j++) {\n          if (line[j] !== \" \") return false;\n        }\n        return true;\n      } else return false;\n    }\n    return n >= this.codeFenceCount;\n  }\n}\n\n// ── Helpers (also used by Blocks.tsx via meta.parsed cache) ──\n\nexport function isTableSeparatorRow(line: string): boolean {\n  const cells = splitTableRow(line);\n  if (cells.length === 0) return false;\n  return cells.every((c) => /^:?-+:?$/.test(c.trim()));\n}\n\nexport function splitTableRow(line: string): string[] {\n  const trimmed = line.trim().replace(/^\\||\\|$/g, \"\");\n  if (!trimmed) return [];\n  // Split on `|` but respect escaped `\\|`.\n  const out: string[] = [];\n  let buf = \"\";\n  for (let i = 0; i < trimmed.length; i++) {\n    const c = trimmed[i]!;\n    if (c === \"\\\\\" && trimmed[i + 1] === \"|\") {\n      buf += \"|\";\n      i++;\n    } else if (c === \"|\") {\n      out.push(buf.trim());\n      buf = \"\";\n    } else {\n      buf += c;\n    }\n  }\n  out.push(buf.trim());\n  return out;\n}\n\nexport interface ParsedTable {\n  headers: string[];\n  rows: string[][];\n  alignments: Array<\"left\" | \"center\" | \"right\" | \"none\">;\n}\n\nexport function parseTable(content: string): ParsedTable {\n  const lines = content.split(\"\\n\").filter((l) => l.trim() !== \"\");\n  if (lines.length === 0) return { headers: [], rows: [], alignments: [] };\n\n  const headers = splitTableRow(lines[0]!);\n  let alignments: ParsedTable[\"alignments\"] = headers.map(() => \"none\");\n  let dataStart = 1;\n\n  if (lines.length > 1 && isTableSeparatorRow(lines[1]!)) {\n    const aligns = splitTableRow(lines[1]!);\n    alignments = aligns.map((a) => {\n      const t = a.trim();\n      const left = t.startsWith(\":\");\n      const right = t.endsWith(\":\");\n      if (left && right) return \"center\";\n      if (right) return \"right\";\n      if (left) return \"left\";\n      return \"none\";\n    });\n    dataStart = 2;\n  }\n\n  const rows = lines.slice(dataStart).map(splitTableRow);\n  return { headers, rows, alignments };\n}\n\nexport interface ParsedListItem {\n  text: string;\n  isTask?: boolean;\n  taskChecked?: boolean;\n  indent: number;\n  children?: ParsedListItem[];\n}\n\nexport function parseListItems(content: string): ParsedListItem[] {\n  const lines = content.split(\"\\n\");\n  const flat: ParsedListItem[] = [];\n\n  for (const line of lines) {\n    const m = line.match(/^(\\s*)(?:[-*+]|\\d+[.)])\\s+(.*)$/);\n    if (!m) {\n      // Continuation line — append to last item's text.\n      const last = flat[flat.length - 1];\n      if (last) last.text += \"\\n\" + line.trim();\n      continue;\n    }\n    const indent = m[1]!.length;\n    let text = m[2]!;\n    let isTask: boolean | undefined;\n    let taskChecked: boolean | undefined;\n    const tm = text.match(/^\\[([ xX])\\]\\s+(.*)$/);\n    if (tm) {\n      isTask = true;\n      taskChecked = tm[1] !== \" \";\n      text = tm[2]!;\n    }\n    const item: ParsedListItem = { text, indent };\n    if (isTask !== undefined) {\n      item.isTask = isTask;\n      item.taskChecked = taskChecked;\n    }\n    flat.push(item);\n  }\n\n  // Build nested tree from indents.\n  return nestListItems(flat);\n}\n\nfunction nestListItems(flat: ParsedListItem[]): ParsedListItem[] {\n  const root: ParsedListItem[] = [];\n  const stack: { indent: number; list: ParsedListItem[] }[] = [\n    { indent: -1, list: root },\n  ];\n  for (const item of flat) {\n    while (stack.length > 1 && item.indent <= stack[stack.length - 1]!.indent) {\n      stack.pop();\n    }\n    const parent = stack[stack.length - 1]!.list;\n    parent.push(item);\n    stack.push({\n      indent: item.indent,\n      list: (item.children = item.children ?? []),\n    });\n  }\n  // Strip empty `children` arrays for cleanliness.\n  const strip = (items: ParsedListItem[]): ParsedListItem[] => {\n    for (const it of items) {\n      if (it.children && it.children.length === 0) delete it.children;\n      else if (it.children) strip(it.children);\n    }\n    return items;\n  };\n  return strip(root);\n}\n","/**\n * URL sanitization. LLM output is untrusted; default-deny dangerous schemes.\n *\n * Returns the original URL if safe, or `null` if it should be neutralized\n * (callers render the link/image as plain text).\n */\n\nconst DANGEROUS_SCHEME = /^(javascript|vbscript|data|file|blob):/i;\nconst SAFE_DATA_IMAGE = /^data:image\\/(png|jpeg|jpg|gif|webp|svg\\+xml|avif|bmp|x-icon);base64,[a-z0-9+/=\\s]+$/i;\nconst ALLOWED_PROTOCOL = /^(https?|mailto|tel):/i;\n// Control chars (0x00-0x1F + 0x7F) used to smuggle a dangerous scheme.\nconst CONTROL_CHARS = new RegExp(\"[\\x00-\\x1F\\x7F]\", \"g\");\n\nexport interface SanitizeUrlOptions {\n  /** Allow `data:image/...;base64,...` URIs (default: true). Other `data:` schemes are always denied. */\n  allowDataImages?: boolean;\n  /** Custom protocol allowlist. If provided, replaces the default. */\n  allowedProtocols?: string[];\n}\n\nexport function sanitizeUrl(\n  href: string | undefined | null,\n  options: SanitizeUrlOptions = {},\n): string | null {\n  if (!href) return null;\n  const trimmed = href.trim();\n  if (!trimmed) return null;\n\n  // Strip control characters that can hide a dangerous scheme (e.g. \"java\\tscript:\").\n  const cleaned = trimmed.replace(CONTROL_CHARS, \"\");\n\n  // Relative URLs and fragments are safe.\n  if (cleaned.startsWith(\"/\") || cleaned.startsWith(\"#\") || cleaned.startsWith(\"?\")) {\n    return cleaned;\n  }\n\n  // No scheme → treat as relative.\n  if (!/^[a-z][a-z0-9+.-]*:/i.test(cleaned)) {\n    return cleaned;\n  }\n\n  // Allow `data:image/...` only.\n  if (/^data:/i.test(cleaned)) {\n    const allow = options.allowDataImages ?? true;\n    if (allow && SAFE_DATA_IMAGE.test(cleaned)) return cleaned;\n    return null;\n  }\n\n  if (DANGEROUS_SCHEME.test(cleaned)) return null;\n\n  if (options.allowedProtocols) {\n    const protoMatch = cleaned.match(/^([a-z][a-z0-9+.-]*):/i);\n    if (!protoMatch) return null;\n    const proto = protoMatch[1]!.toLowerCase();\n    return options.allowedProtocols.includes(proto) ? cleaned : null;\n  }\n\n  return ALLOWED_PROTOCOL.test(cleaned) ? cleaned : null;\n}\n\n/**\n * For images we restrict more aggressively: only `http`, `https`, and (optionally)\n * `data:image/...`. No `mailto:` etc.\n */\nexport function sanitizeImageUrl(\n  href: string | undefined | null,\n  options: SanitizeUrlOptions = {},\n): string | null {\n  if (!href) return null;\n  const trimmed = href.trim();\n  if (!trimmed) return null;\n  const cleaned = trimmed.replace(CONTROL_CHARS, \"\");\n\n  if (cleaned.startsWith(\"/\") || cleaned.startsWith(\"#\") || cleaned.startsWith(\"?\")) {\n    return cleaned;\n  }\n  if (!/^[a-z][a-z0-9+.-]*:/i.test(cleaned)) return cleaned;\n\n  if (/^data:/i.test(cleaned)) {\n    const allow = options.allowDataImages ?? true;\n    if (allow && SAFE_DATA_IMAGE.test(cleaned)) return cleaned;\n    return null;\n  }\n\n  if (DANGEROUS_SCHEME.test(cleaned)) return null;\n  return /^https?:/i.test(cleaned) ? cleaned : null;\n}\n","/**\n * Inline markdown parser.\n *\n * Handles **bold**, *italic*, ***bolditalic***, `code`, [text](url),\n * ![alt](url), ~~strike~~, hard breaks, and a tentative-close mode for\n * unclosed runs at the trailing edge of the stream (so `**bo` renders as\n * partially-bold rather than as raw asterisks, eliminating flicker when\n * the closing `**` arrives).\n *\n * Recursion is hard-capped to defend against adversarial input; URLs are\n * sanitized via `core/sanitize`.\n */\n\nimport type { InlineToken, InlinePlugin } from \"./types\";\nimport { sanitizeUrl, sanitizeImageUrl } from \"../core/sanitize\";\nimport { DEFAULT_LIMITS } from \"../core/limits\";\n\nexport interface ParseInlineOptions {\n  /** Recursion depth (internal). */\n  depth?: number;\n  /** Max recursion depth. */\n  maxDepth?: number;\n  /** Treat trailing unclosed runs as tentative tokens (default true). */\n  tentative?: boolean;\n  /** Inline plugins (math, custom triggers). */\n  plugins?: InlinePlugin[];\n}\n\nexport function parseInline(\n  text: string,\n  options: ParseInlineOptions = {},\n): InlineToken[] {\n  const depth = options.depth ?? 0;\n  const maxDepth = options.maxDepth ?? DEFAULT_LIMITS.maxInlineDepth;\n  const tentative = options.tentative ?? true;\n  const plugins = options.plugins;\n\n  if (depth >= maxDepth) {\n    return [{ type: \"text\", content: text }];\n  }\n\n  const tokens: InlineToken[] = [];\n  const len = text.length;\n  let i = 0;\n  let buf = \"\";\n\n  const flush = () => {\n    if (buf) {\n      tokens.push({ type: \"text\", content: buf });\n      buf = \"\";\n    }\n  };\n\n  // CommonMark flank rules: a `*` run is left-flanking if not followed by\n  // whitespace and not (followed by punct AND preceded by alnum/punct).\n  const isWhitespace = (c: string | undefined) =>\n    c === undefined || /\\s/.test(c);\n  const isPunct = (c: string | undefined) =>\n    c !== undefined && /[!-/:-@[-`{-~]/.test(c);\n  const isLeftFlanking = (before: string | undefined, after: string | undefined) => {\n    if (isWhitespace(after)) return false;\n    if (!isPunct(after)) return true;\n    return isWhitespace(before) || isPunct(before);\n  };\n  const isRightFlanking = (before: string | undefined, after: string | undefined) => {\n    if (isWhitespace(before)) return false;\n    if (!isPunct(before)) return true;\n    return isWhitespace(after) || isPunct(after);\n  };\n\n  // Find a matching balanced \")\" for \"[text](\" — supports nested parens.\n  const findLinkClose = (start: number): number => {\n    let pdepth = 1;\n    for (let k = start; k < len; k++) {\n      const ch = text[k]!;\n      if (ch === \"\\\\\" && k + 1 < len) {\n        k++;\n        continue;\n      }\n      if (ch === \"(\") pdepth++;\n      else if (ch === \")\") {\n        pdepth--;\n        if (pdepth === 0) return k;\n      }\n    }\n    return -1;\n  };\n\n  // Parse `[text](url \"title\")` / `![alt](url \"title\")` link/image.\n  const tryLinkOrImage = (isImage: boolean): boolean => {\n    const start = i;\n    const open = isImage ? i + 2 : i + 1; // skip `![` or `[`\n    let bdepth = 1;\n    let close = -1;\n    for (let k = open; k < len; k++) {\n      const ch = text[k]!;\n      if (ch === \"\\\\\" && k + 1 < len) {\n        k++;\n        continue;\n      }\n      if (ch === \"[\") bdepth++;\n      else if (ch === \"]\") {\n        bdepth--;\n        if (bdepth === 0) {\n          close = k;\n          break;\n        }\n      }\n    }\n    if (close === -1) return false;\n    if (text[close + 1] !== \"(\") return false;\n    const urlStart = close + 2;\n    const urlEnd = findLinkClose(urlStart);\n    if (urlEnd === -1) return false;\n\n    const inner = text.slice(open, close);\n    const dest = text.slice(urlStart, urlEnd).trim();\n\n    // Optional title: `url \"title\"` or `url 'title'` or `url (title)`.\n    let url = dest;\n    let title: string | undefined;\n    const titleMatch = dest.match(/^(\\S+)\\s+(?:\"([^\"]*)\"|'([^']*)'|\\(([^)]*)\\))$/);\n    if (titleMatch) {\n      url = titleMatch[1]!;\n      title = titleMatch[2] ?? titleMatch[3] ?? titleMatch[4];\n    }\n\n    const safeUrl = isImage ? sanitizeImageUrl(url) : sanitizeUrl(url);\n    if (safeUrl === null) {\n      // Render raw text — sanitizer rejected.\n      return false;\n    }\n\n    flush();\n    if (isImage) {\n      const tok: InlineToken = {\n        type: \"image\",\n        content: inner,\n        alt: inner,\n        href: safeUrl,\n      };\n      if (title !== undefined) tok.title = title;\n      tokens.push(tok);\n    } else {\n      const tok: InlineToken = {\n        type: \"link\",\n        content: inner,\n        href: safeUrl,\n        children: parseInline(inner, { ...options, depth: depth + 1, tentative: false }),\n      };\n      if (title !== undefined) tok.title = title;\n      tokens.push(tok);\n    }\n    i = urlEnd + 1;\n    void start;\n    return true;\n  };\n\n  // Inline code: smallest matching backtick run per CommonMark.\n  const tryCode = (): boolean => {\n    let ticks = 0;\n    let j = i;\n    while (j < len && text[j] === \"`\") {\n      ticks++;\n      j++;\n    }\n    // Look for a run of *exactly* `ticks` backticks.\n    let k = j;\n    while (k < len) {\n      if (text[k] === \"`\") {\n        let n = 0;\n        const runStart = k;\n        while (k < len && text[k] === \"`\") {\n          n++;\n          k++;\n        }\n        if (n === ticks) {\n          flush();\n          let content = text.slice(j, runStart);\n          // CommonMark: single leading + trailing space stripped if not all-space.\n          if (\n            content.length >= 2 &&\n            content.startsWith(\" \") &&\n            content.endsWith(\" \") &&\n            content.trim().length > 0\n          ) {\n            content = content.slice(1, -1);\n          }\n          tokens.push({ type: \"code\", content });\n          i = k;\n          return true;\n        }\n      } else {\n        k++;\n      }\n    }\n    return false;\n  };\n\n  // Emphasis: handles `*` and `_` runs, including bold (**) and bold+italic (***).\n  const tryEmphasis = (marker: \"*\" | \"_\"): boolean => {\n    let runLen = 0;\n    let j = i;\n    while (j < len && text[j] === marker) {\n      runLen++;\n      j++;\n    }\n    if (runLen === 0) return false;\n\n    const before = i > 0 ? text[i - 1] : undefined;\n    const after = text[j];\n    const leftFlank = isLeftFlanking(before, after);\n    const rightFlank = isRightFlanking(before, after);\n\n    // CommonMark: `_` opener also requires (NOT right-flanking) OR preceded\n    // by punctuation. This is the intraword rule that prevents `foo_bar_baz`\n    // from being italic.\n    const canOpen =\n      leftFlank && (marker === \"*\" || !rightFlank || isPunct(before));\n\n    if (!canOpen) {\n      buf += text.slice(i, j);\n      i = j;\n      return true;\n    }\n\n    // Look for a closing run.\n    let k = j;\n    while (k < len) {\n      if (text[k] === \"\\\\\" && k + 1 < len) {\n        k += 2;\n        continue;\n      }\n      if (text[k] === \"`\") {\n        // Skip code spans so we don't match emphasis inside them.\n        let n = 0;\n        while (k < len && text[k] === \"`\") {\n          n++;\n          k++;\n        }\n        // Find closing\n        let m = k;\n        while (m < len) {\n          if (text[m] === \"`\") {\n            let n2 = 0;\n            while (m < len && text[m] === \"`\") {\n              n2++;\n              m++;\n            }\n            if (n2 === n) break;\n          } else m++;\n        }\n        k = m;\n        continue;\n      }\n      if (text[k] === marker) {\n        let closeRun = 0;\n        const closeStart = k;\n        while (k < len && text[k] === marker) {\n          closeRun++;\n          k++;\n        }\n        const cBefore = closeStart > 0 ? text[closeStart - 1] : undefined;\n        const cAfter = text[k];\n        const rightFlank = isRightFlanking(cBefore, cAfter);\n        if (!rightFlank) continue;\n\n        // Match: pick smallest of runLen and closeRun (CommonMark)\n        const consumed = Math.min(runLen, closeRun);\n        if (consumed === 0) continue;\n\n        const innerStart = i + consumed;\n        const innerEnd = closeStart + (closeRun - consumed);\n        const inner = text.slice(innerStart, innerEnd);\n\n        flush();\n\n        let type: \"bold\" | \"italic\" | \"bolditalic\";\n        if (consumed >= 3) type = \"bolditalic\";\n        else if (consumed === 2) type = \"bold\";\n        else type = \"italic\";\n\n        tokens.push({\n          type,\n          content: inner,\n          children: parseInline(inner, { ...options, depth: depth + 1, tentative: false }),\n        });\n\n        i = innerEnd + consumed;\n        return true;\n      }\n      k++;\n    }\n\n    // No close found — speculative tentative emit at the trailing edge.\n    if (tentative && depth === 0 && runLen <= 3) {\n      // Only do this if this run is at/near the end of the buffer.\n      // Specifically: there's no further content OR remaining content has\n      // no whitespace and no other markers — still tentative.\n      const remaining = text.slice(j);\n      // Tentative is risky for whole document — only apply if remaining is the\n      // *trailing fragment* (no newlines).\n      if (!remaining.includes(\"\\n\")) {\n        flush();\n        const innerText = remaining;\n        let type: \"bold\" | \"italic\" | \"bolditalic\";\n        if (runLen >= 3) type = \"bolditalic\";\n        else if (runLen === 2) type = \"bold\";\n        else type = \"italic\";\n        tokens.push({\n          type,\n          content: innerText,\n          children: parseInline(innerText, {\n            ...options,\n            depth: depth + 1,\n            tentative: false,\n          }),\n          tentative: true,\n        });\n        i = len;\n        return true;\n      }\n    }\n\n    // No close — render the marker run as literal text and continue.\n    buf += text.slice(i, j);\n    i = j;\n    return true;\n  };\n\n  // Strikethrough: ~~text~~\n  const tryStrike = (): boolean => {\n    if (text[i] !== \"~\" || text[i + 1] !== \"~\") return false;\n    const start = i + 2;\n    let k = start;\n    while (k < len - 1) {\n      if (text[k] === \"\\\\\" && k + 1 < len) {\n        k += 2;\n        continue;\n      }\n      if (text[k] === \"~\" && text[k + 1] === \"~\") {\n        const inner = text.slice(start, k);\n        flush();\n        tokens.push({\n          type: \"strikethrough\",\n          content: inner,\n          children: parseInline(inner, { ...options, depth: depth + 1, tentative: false }),\n        });\n        i = k + 2;\n        return true;\n      }\n      k++;\n    }\n\n    if (tentative && depth === 0) {\n      const remaining = text.slice(start);\n      if (!remaining.includes(\"\\n\")) {\n        flush();\n        tokens.push({\n          type: \"strikethrough\",\n          content: remaining,\n          children: parseInline(remaining, {\n            ...options,\n            depth: depth + 1,\n            tentative: false,\n          }),\n          tentative: true,\n        });\n        i = len;\n        return true;\n      }\n    }\n    return false;\n  };\n\n  // Autolink: <https://...> or <user@host>\n  const tryAutolink = (): boolean => {\n    if (text[i] !== \"<\") return false;\n    const close = text.indexOf(\">\", i + 1);\n    if (close === -1) return false;\n    const inner = text.slice(i + 1, close);\n    const isUrl = /^[a-z][a-z0-9+.-]*:[^\\s<>]+$/i.test(inner);\n    const isEmail =\n      /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i.test(\n        inner,\n      );\n    if (!isUrl && !isEmail) return false;\n    const url = isEmail ? `mailto:${inner}` : inner;\n    const safe = sanitizeUrl(url);\n    if (safe === null) return false;\n    flush();\n    tokens.push({ type: \"link\", content: inner, href: safe });\n    i = close + 1;\n    return true;\n  };\n\n  // Hard line break: two trailing spaces or backslash-newline.\n  const tryHardBreak = (): boolean => {\n    if (text[i] === \"\\\\\" && text[i + 1] === \"\\n\") {\n      flush();\n      tokens.push({ type: \"br\", content: \"\" });\n      i += 2;\n      return true;\n    }\n    if (\n      text[i] === \" \" &&\n      text[i + 1] === \" \" &&\n      (text[i + 2] === \"\\n\" || i + 2 === len)\n    ) {\n      flush();\n      tokens.push({ type: \"br\", content: \"\" });\n      i = text[i + 2] === \"\\n\" ? i + 3 : i + 2;\n      return true;\n    }\n    return false;\n  };\n\n  while (i < len) {\n    const ch = text[i]!;\n\n    // Plugin triggers — checked first so plugins can override builtins.\n    if (plugins?.length) {\n      let pluginMatched = false;\n      for (const p of plugins) {\n        if (p.triggers && !p.triggers.includes(ch)) continue;\n        const m = p.match(text, i);\n        if (m) {\n          flush();\n          tokens.push(m.token);\n          i += m.consumed;\n          pluginMatched = true;\n          break;\n        }\n      }\n      if (pluginMatched) continue;\n    }\n\n    // Backslash escape.\n    if (ch === \"\\\\\" && i + 1 < len) {\n      // \\n hard break already handled above\n      if (text[i + 1] === \"\\n\") {\n        if (tryHardBreak()) continue;\n      }\n      buf += text[i + 1];\n      i += 2;\n      continue;\n    }\n\n    if (ch === \"<\" && tryAutolink()) continue;\n    if ((ch === \" \" || ch === \"\\\\\") && tryHardBreak()) continue;\n\n    if (ch === \"!\" && text[i + 1] === \"[\") {\n      if (tryLinkOrImage(true)) continue;\n      // Fall through to text.\n    }\n    if (ch === \"[\") {\n      if (tryLinkOrImage(false)) continue;\n    }\n\n    if (ch === \"`\") {\n      if (tryCode()) continue;\n      // Tentative inline code.\n      if (tentative && depth === 0) {\n        const remaining = text.slice(i + 1);\n        if (!remaining.includes(\"\\n\") && remaining.length > 0) {\n          flush();\n          tokens.push({ type: \"code\", content: remaining, tentative: true });\n          i = len;\n          continue;\n        }\n      }\n      buf += ch;\n      i++;\n      continue;\n    }\n\n    if (ch === \"*\" || ch === \"_\") {\n      if (tryEmphasis(ch as \"*\" | \"_\")) continue;\n    }\n\n    if (ch === \"~\" && text[i + 1] === \"~\") {\n      if (tryStrike()) continue;\n      buf += ch;\n      i++;\n      continue;\n    }\n\n    buf += ch;\n    i++;\n  }\n\n  flush();\n  return tokens;\n}\n","import * as React from \"react\";\nimport { parseInline } from \"../parser/InlineParser\";\nimport type { InlineToken, ComponentOverrides, InlinePlugin } from \"../parser/types\";\n\ninterface InlineRendererProps {\n  text: string;\n  overrides?: Partial<ComponentOverrides>;\n  inlinePlugins?: InlinePlugin[];\n  /** Disable speculative-close (used inside non-streaming contexts). */\n  tentative?: boolean;\n}\n\nexport function InlineRenderer({\n  text,\n  overrides,\n  inlinePlugins,\n  tentative,\n}: InlineRendererProps): React.JSX.Element {\n  const tokens = parseInline(text, {\n    plugins: inlinePlugins,\n    ...(tentative !== undefined ? { tentative } : {}),\n  });\n  return (\n    <>\n      {tokens.map((token, i) =>\n        renderToken(token, i, overrides, inlinePlugins),\n      )}\n    </>\n  );\n}\n\nfunction tentativeProps(t: InlineToken): { className?: string; \"data-tentative\"?: \"true\" } {\n  if (!t.tentative) return {};\n  return { className: \"smd-tentative\", \"data-tentative\": \"true\" };\n}\n\nexport function renderToken(\n  token: InlineToken,\n  key: number,\n  overrides?: Partial<ComponentOverrides>,\n  plugins?: InlinePlugin[],\n): React.ReactNode {\n  // Plugin renderer.\n  if (plugins?.length) {\n    for (const p of plugins) {\n      if (p.render && (p.name === token.type || token.type === \"math\")) {\n        const node = p.render(token);\n        if (node !== null && node !== undefined) {\n          return <React.Fragment key={key}>{node}</React.Fragment>;\n        }\n      }\n    }\n  }\n\n  switch (token.type) {\n    case \"text\":\n      return <React.Fragment key={key}>{token.content}</React.Fragment>;\n    case \"br\":\n      return <br key={key} />;\n\n    case \"bold\": {\n      const Strong = overrides?.strong;\n      const inner = token.children\n        ? token.children.map((t, i) => renderToken(t, i, overrides, plugins))\n        : token.content;\n      const tProps = tentativeProps(token);\n      if (Strong) return <Strong key={key}>{inner}</Strong>;\n      return (\n        <strong key={key} {...tProps}>\n          {inner}\n        </strong>\n      );\n    }\n\n    case \"italic\": {\n      const Em = overrides?.em;\n      const inner = token.children\n        ? token.children.map((t, i) => renderToken(t, i, overrides, plugins))\n        : token.content;\n      const tProps = tentativeProps(token);\n      if (Em) return <Em key={key}>{inner}</Em>;\n      return (\n        <em key={key} {...tProps}>\n          {inner}\n        </em>\n      );\n    }\n\n    case \"bolditalic\": {\n      const inner = token.children\n        ? token.children.map((t, i) => renderToken(t, i, overrides, plugins))\n        : token.content;\n      const tProps = tentativeProps(token);\n      return (\n        <strong key={key} {...tProps}>\n          <em>{inner}</em>\n        </strong>\n      );\n    }\n\n    case \"code\": {\n      const Code = overrides?.code;\n      if (Code) return <Code key={key}>{token.content}</Code>;\n      return (\n        <code key={key} className={`smd-inline-code${token.tentative ? \" smd-tentative\" : \"\"}`} {...(token.tentative ? { \"data-tentative\": \"true\" as const } : {})}>\n          {token.content}\n        </code>\n      );\n    }\n\n    case \"link\": {\n      const A = overrides?.a;\n      // Already sanitized in parser; if href is missing the parser would have\n      // emitted text instead.\n      if (!token.href) {\n        return <React.Fragment key={key}>{token.content}</React.Fragment>;\n      }\n      const inner = token.children\n        ? token.children.map((t, i) => renderToken(t, i, overrides, plugins))\n        : token.content;\n      if (A) {\n        const aProps: { href: string; title?: string; children: React.ReactNode } = {\n          href: token.href,\n          children: inner,\n        };\n        if (token.title !== undefined) aProps.title = token.title;\n        return <A key={key} {...aProps} />;\n      }\n      const isExternal = /^(https?:|mailto:|tel:)/i.test(token.href);\n      return (\n        <a\n          key={key}\n          href={token.href}\n          {...(token.title !== undefined ? { title: token.title } : {})}\n          {...(isExternal\n            ? {\n                target: \"_blank\",\n                rel: \"noopener noreferrer\",\n                referrerPolicy: \"no-referrer\" as const,\n              }\n            : {})}\n          className=\"smd-link\"\n        >\n          {inner}\n        </a>\n      );\n    }\n\n    case \"strikethrough\": {\n      const Del = overrides?.del;\n      const inner = token.children\n        ? token.children.map((t, i) => renderToken(t, i, overrides, plugins))\n        : token.content;\n      const tProps = tentativeProps(token);\n      if (Del) return <Del key={key}>{inner}</Del>;\n      return (\n        <del key={key} {...tProps}>\n          {inner}\n        </del>\n      );\n    }\n\n    case \"image\": {\n      const Img = overrides?.img;\n      if (!token.href) {\n        return <React.Fragment key={key}>{token.content}</React.Fragment>;\n      }\n      if (Img) {\n        const props: { src: string; alt: string; title?: string } = {\n          src: token.href,\n          alt: token.alt ?? \"\",\n        };\n        if (token.title !== undefined) props.title = token.title;\n        return <Img key={key} {...props} />;\n      }\n      return (\n        <img\n          key={key}\n          src={token.href}\n          alt={token.alt ?? \"\"}\n          {...(token.title !== undefined ? { title: token.title } : {})}\n          className=\"smd-image\"\n          loading=\"lazy\"\n          decoding=\"async\"\n        />\n      );\n    }\n\n    default:\n      return <React.Fragment key={key}>{token.content}</React.Fragment>;\n  }\n}\n","import type { HighlightToken } from \"./highlighter\";\n\n/** Highlight a unified-diff. */\nexport function highlightDiff(code: string): HighlightToken[] {\n  const out: HighlightToken[] = [];\n  const lines = code.split(\"\\n\");\n  for (let i = 0; i < lines.length; i++) {\n    if (i > 0) out.push({ text: \"\\n\", className: \"\" });\n    const line = lines[i]!;\n    if (line.startsWith(\"+++\") || line.startsWith(\"---\")) {\n      out.push({ text: line, className: \"smd-hl-info\" });\n    } else if (line.startsWith(\"+\")) {\n      out.push({ text: line, className: \"smd-hl-inserted\" });\n    } else if (line.startsWith(\"-\")) {\n      out.push({ text: line, className: \"smd-hl-deleted\" });\n    } else if (line.startsWith(\"@@\")) {\n      out.push({ text: line, className: \"smd-hl-info\" });\n    } else {\n      out.push({ text: line, className: \"\" });\n    }\n  }\n  return out;\n}\n","/**\n * Lightweight regex-based syntax highlighter (~3kB).\n *\n * Trades absolute correctness for tiny bundle size. For production-grade\n * highlighting, opt into the Shiki adapter via `stream-md/shiki`.\n *\n * Design notes:\n * - `Set`-based keyword/builtin lookup (O(1) per word).\n * - Keywords are suppressed after `.` so `obj.return` stays plain.\n * - Per-line tokenization, but multi-line strings (Python `\"\"\"…\"\"\"`,\n *   JS template literals, JSDoc comments) are detected before line split.\n */\n\nexport interface HighlightToken {\n  text: string;\n  className: string;\n}\n\ninterface LangSpec {\n  keywords: Set<string>;\n  builtins?: Set<string>;\n  /** Regex matched at the start of `sub` (i.e. anchored at current pos). */\n  comments: RegExp[];\n  strings: RegExp[];\n  numbers: RegExp;\n  /** True for languages where `.` precedes a property access. */\n  memberAccess?: boolean;\n  /** Optional JSX/TSX tag detection. */\n  jsx?: boolean;\n}\n\nconst set = (...arr: string[]): Set<string> => new Set(arr);\n\nconst JS_KW = set(\n  \"const\", \"let\", \"var\", \"function\", \"return\", \"if\", \"else\", \"for\", \"while\",\n  \"do\", \"switch\", \"case\", \"break\", \"continue\", \"new\", \"this\", \"class\",\n  \"extends\", \"import\", \"export\", \"from\", \"default\", \"async\", \"await\", \"try\",\n  \"catch\", \"finally\", \"throw\", \"typeof\", \"instanceof\", \"in\", \"of\", \"yield\",\n  \"delete\", \"void\", \"null\", \"undefined\", \"true\", \"false\", \"static\", \"super\",\n  \"get\", \"set\",\n);\nconst JS_BI = set(\n  \"console\", \"Promise\", \"Array\", \"Object\", \"Map\", \"Set\", \"WeakMap\", \"WeakSet\",\n  \"JSON\", \"Math\", \"Date\", \"Error\", \"RegExp\", \"Symbol\", \"BigInt\", \"setTimeout\",\n  \"setInterval\", \"clearTimeout\", \"clearInterval\", \"fetch\", \"window\", \"document\",\n  \"globalThis\", \"process\", \"Buffer\",\n);\nconst TS_KW = set(\n  ...JS_KW, \"type\", \"interface\", \"enum\", \"namespace\", \"declare\", \"abstract\",\n  \"implements\", \"keyof\", \"readonly\", \"as\", \"is\", \"infer\", \"satisfies\", \"public\",\n  \"private\", \"protected\", \"override\", \"out\", \"never\", \"unknown\", \"any\",\n);\nconst TS_BI = set(\n  ...JS_BI, \"Partial\", \"Required\", \"Pick\", \"Omit\", \"Record\", \"Exclude\",\n  \"Extract\", \"ReturnType\", \"Awaited\", \"Readonly\", \"NonNullable\", \"Parameters\",\n  \"ConstructorParameters\", \"InstanceType\", \"ThisType\",\n);\n\nconst JS_LIKE: Pick<LangSpec, \"comments\" | \"strings\" | \"numbers\" | \"memberAccess\" | \"jsx\"> = {\n  comments: [/^\\/\\/[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n  strings: [\n    /^\"(?:[^\"\\\\\\n]|\\\\.)*\"/,\n    /^'(?:[^'\\\\\\n]|\\\\.)*'/,\n    /^`(?:[^`\\\\]|\\\\.)*`/,\n  ],\n  numbers: /^(\\d+\\.?\\d*(?:e[+-]?\\d+)?|0x[\\da-f]+|0b[01]+|0o[0-7]+)\\b/i,\n  memberAccess: true,\n};\n\nconst PY_KW = set(\n  \"def\", \"class\", \"return\", \"if\", \"elif\", \"else\", \"for\", \"while\", \"break\",\n  \"continue\", \"import\", \"from\", \"as\", \"try\", \"except\", \"finally\", \"raise\",\n  \"with\", \"yield\", \"lambda\", \"pass\", \"del\", \"global\", \"nonlocal\", \"assert\",\n  \"async\", \"await\", \"True\", \"False\", \"None\", \"and\", \"or\", \"not\", \"in\", \"is\",\n);\nconst PY_BI = set(\n  \"print\", \"len\", \"range\", \"type\", \"int\", \"str\", \"float\", \"list\", \"dict\",\n  \"set\", \"tuple\", \"bool\", \"input\", \"open\", \"map\", \"filter\", \"zip\",\n  \"enumerate\", \"super\", \"self\", \"cls\", \"isinstance\", \"hasattr\", \"getattr\",\n  \"setattr\", \"abs\", \"min\", \"max\", \"sum\", \"any\", \"all\", \"sorted\", \"reversed\",\n);\n\nconst RUST_KW = set(\n  \"fn\", \"let\", \"mut\", \"const\", \"static\", \"if\", \"else\", \"for\", \"while\", \"loop\",\n  \"match\", \"return\", \"use\", \"mod\", \"pub\", \"struct\", \"enum\", \"impl\", \"trait\",\n  \"type\", \"where\", \"async\", \"await\", \"move\", \"ref\", \"self\", \"Self\", \"super\",\n  \"crate\", \"unsafe\", \"extern\", \"dyn\", \"true\", \"false\", \"as\", \"in\", \"break\",\n  \"continue\",\n);\nconst RUST_BI = set(\n  \"println\", \"eprintln\", \"print\", \"format\", \"vec\", \"String\", \"Vec\", \"Option\",\n  \"Result\", \"Some\", \"None\", \"Ok\", \"Err\", \"Box\", \"Rc\", \"Arc\", \"RefCell\", \"Mutex\",\n  \"HashMap\", \"HashSet\", \"BTreeMap\", \"BTreeSet\", \"i8\", \"i16\", \"i32\", \"i64\",\n  \"i128\", \"u8\", \"u16\", \"u32\", \"u64\", \"u128\", \"f32\", \"f64\", \"bool\", \"char\",\n  \"usize\", \"isize\", \"str\",\n);\n\nconst GO_KW = set(\n  \"func\", \"return\", \"if\", \"else\", \"for\", \"range\", \"switch\", \"case\", \"default\",\n  \"break\", \"continue\", \"goto\", \"var\", \"const\", \"type\", \"struct\", \"interface\",\n  \"map\", \"chan\", \"select\", \"defer\", \"go\", \"package\", \"import\", \"true\", \"false\",\n  \"nil\",\n);\nconst GO_BI = set(\n  \"fmt\", \"make\", \"len\", \"cap\", \"append\", \"copy\", \"delete\", \"new\", \"panic\",\n  \"recover\", \"close\", \"error\", \"string\", \"int\", \"int32\", \"int64\", \"float32\",\n  \"float64\", \"bool\", \"byte\", \"rune\", \"uint\", \"uint8\", \"uint16\", \"uint32\",\n  \"uint64\", \"complex64\", \"complex128\",\n);\n\nconst JAVA_KW = set(\n  \"public\", \"private\", \"protected\", \"static\", \"final\", \"abstract\", \"class\",\n  \"interface\", \"extends\", \"implements\", \"new\", \"return\", \"if\", \"else\", \"for\",\n  \"while\", \"do\", \"switch\", \"case\", \"default\", \"break\", \"continue\", \"try\",\n  \"catch\", \"finally\", \"throw\", \"throws\", \"import\", \"package\", \"void\", \"int\",\n  \"long\", \"double\", \"float\", \"boolean\", \"char\", \"byte\", \"short\", \"null\",\n  \"true\", \"false\", \"this\", \"super\", \"instanceof\", \"synchronized\", \"volatile\",\n  \"transient\", \"enum\", \"record\", \"sealed\", \"non-sealed\", \"permits\", \"yield\",\n);\nconst JAVA_BI = set(\n  \"System\", \"String\", \"Integer\", \"Long\", \"Double\", \"Float\", \"Boolean\",\n  \"Character\", \"List\", \"ArrayList\", \"Map\", \"HashMap\", \"Set\", \"HashSet\",\n  \"Optional\", \"Stream\", \"Arrays\", \"Collections\", \"Math\", \"Object\",\n);\n\nconst C_KW = set(\n  \"auto\", \"break\", \"case\", \"char\", \"const\", \"continue\", \"default\", \"do\",\n  \"double\", \"else\", \"enum\", \"extern\", \"float\", \"for\", \"goto\", \"if\", \"inline\",\n  \"int\", \"long\", \"register\", \"restrict\", \"return\", \"short\", \"signed\", \"sizeof\",\n  \"static\", \"struct\", \"switch\", \"typedef\", \"union\", \"unsigned\", \"void\",\n  \"volatile\", \"while\", \"_Bool\", \"_Complex\", \"_Imaginary\",\n);\nconst CPP_KW = set(\n  ...C_KW, \"alignas\", \"alignof\", \"and\", \"and_eq\", \"asm\", \"atomic_cancel\",\n  \"atomic_commit\", \"atomic_noexcept\", \"auto\", \"bitand\", \"bitor\", \"bool\",\n  \"catch\", \"char16_t\", \"char32_t\", \"class\", \"compl\", \"concept\", \"constexpr\",\n  \"const_cast\", \"co_await\", \"co_return\", \"co_yield\", \"decltype\", \"delete\",\n  \"dynamic_cast\", \"explicit\", \"export\", \"false\", \"friend\", \"mutable\",\n  \"namespace\", \"new\", \"noexcept\", \"not\", \"not_eq\", \"nullptr\", \"operator\",\n  \"or\", \"or_eq\", \"private\", \"protected\", \"public\", \"reinterpret_cast\",\n  \"requires\", \"static_assert\", \"static_cast\", \"synchronized\", \"template\",\n  \"this\", \"thread_local\", \"throw\", \"true\", \"try\", \"typeid\", \"typename\",\n  \"using\", \"virtual\", \"wchar_t\", \"xor\", \"xor_eq\",\n);\nconst C_BI = set(\n  \"printf\", \"scanf\", \"fprintf\", \"fscanf\", \"sprintf\", \"sscanf\", \"fopen\",\n  \"fclose\", \"fread\", \"fwrite\", \"malloc\", \"calloc\", \"realloc\", \"free\", \"memcpy\",\n  \"memset\", \"strlen\", \"strcpy\", \"strncpy\", \"strcmp\", \"strncmp\", \"strcat\",\n  \"size_t\", \"ssize_t\", \"FILE\", \"NULL\", \"stdin\", \"stdout\", \"stderr\",\n);\n\nconst BASH_KW = set(\n  \"if\", \"then\", \"else\", \"elif\", \"fi\", \"for\", \"while\", \"do\", \"done\", \"case\",\n  \"esac\", \"function\", \"return\", \"in\", \"select\", \"until\", \"export\", \"source\",\n  \"local\", \"readonly\", \"declare\", \"unset\", \"set\",\n);\nconst BASH_BI = set(\n  \"echo\", \"cd\", \"ls\", \"grep\", \"sed\", \"awk\", \"cat\", \"chmod\", \"chown\", \"cp\",\n  \"mv\", \"rm\", \"mkdir\", \"touch\", \"find\", \"xargs\", \"curl\", \"wget\", \"git\", \"npm\",\n  \"npx\", \"node\", \"python\", \"pip\", \"docker\", \"kubectl\", \"ssh\", \"scp\", \"tar\",\n  \"zip\", \"unzip\", \"head\", \"tail\", \"less\", \"more\", \"wc\", \"sort\", \"uniq\", \"tr\",\n);\n\nconst SQL_KW = set(\n  \"SELECT\", \"FROM\", \"WHERE\", \"INSERT\", \"INTO\", \"UPDATE\", \"DELETE\", \"CREATE\",\n  \"DROP\", \"ALTER\", \"TABLE\", \"INDEX\", \"VIEW\", \"JOIN\", \"LEFT\", \"RIGHT\", \"INNER\",\n  \"OUTER\", \"FULL\", \"CROSS\", \"ON\", \"USING\", \"AND\", \"OR\", \"NOT\", \"IN\", \"LIKE\",\n  \"ILIKE\", \"BETWEEN\", \"EXISTS\", \"NULL\", \"IS\", \"AS\", \"ORDER\", \"BY\", \"GROUP\",\n  \"HAVING\", \"LIMIT\", \"OFFSET\", \"UNION\", \"INTERSECT\", \"EXCEPT\", \"ALL\",\n  \"DISTINCT\", \"SET\", \"VALUES\", \"DEFAULT\", \"PRIMARY\", \"KEY\", \"FOREIGN\",\n  \"REFERENCES\", \"CASCADE\", \"CONSTRAINT\", \"CHECK\", \"UNIQUE\", \"WITH\", \"CASE\",\n  \"WHEN\", \"THEN\", \"END\", \"ELSE\",\n);\n\nconst YAML_KW = set(\"true\", \"false\", \"null\", \"yes\", \"no\", \"on\", \"off\", \"True\", \"False\", \"Null\", \"None\", \"TRUE\", \"FALSE\", \"NULL\");\n\nconst CSS_KW = set(\n  \"important\", \"inherit\", \"initial\", \"unset\", \"revert\", \"auto\", \"none\",\n  \"block\", \"inline\", \"flex\", \"grid\", \"inline-block\", \"inline-flex\",\n  \"inline-grid\", \"relative\", \"absolute\", \"fixed\", \"sticky\", \"static\",\n);\n\nconst LANGS: Record<string, LangSpec> = {\n  javascript: { keywords: JS_KW, builtins: JS_BI, ...JS_LIKE, jsx: false },\n  typescript: { keywords: TS_KW, builtins: TS_BI, ...JS_LIKE, jsx: false },\n  jsx: { keywords: JS_KW, builtins: JS_BI, ...JS_LIKE, jsx: true },\n  tsx: { keywords: TS_KW, builtins: TS_BI, ...JS_LIKE, jsx: true },\n  python: {\n    keywords: PY_KW,\n    builtins: PY_BI,\n    comments: [/^#[^\\n]*/],\n    strings: [\n      /^\"\"\"[\\s\\S]*?\"\"\"/,\n      /^'''[\\s\\S]*?'''/,\n      /^[rRbBuUfF]?\"(?:[^\"\\\\\\n]|\\\\.)*\"/,\n      /^[rRbBuUfF]?'(?:[^'\\\\\\n]|\\\\.)*'/,\n    ],\n    numbers: /^(\\d+\\.?\\d*(?:e[+-]?\\d+)?(?:j|J)?|0x[\\da-f]+|0b[01]+|0o[0-7]+)\\b/i,\n    memberAccess: true,\n  },\n  rust: {\n    keywords: RUST_KW,\n    builtins: RUST_BI,\n    comments: [/^\\/\\/[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^r#\"[\\s\\S]*?\"#/, /^b\"(?:[^\"\\\\\\n]|\\\\.)*\"/],\n    numbers: /^(\\d+(?:_\\d+)*\\.?\\d*(?:e[+-]?\\d+)?(?:f32|f64|u8|u16|u32|u64|u128|usize|i8|i16|i32|i64|i128|isize)?)\\b/i,\n    memberAccess: true,\n  },\n  go: {\n    keywords: GO_KW,\n    builtins: GO_BI,\n    comments: [/^\\/\\/[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^`[\\s\\S]*?`/],\n    numbers: /^(\\d+\\.?\\d*(?:e[+-]?\\d+)?)\\b/i,\n    memberAccess: true,\n  },\n  java: {\n    keywords: JAVA_KW,\n    builtins: JAVA_BI,\n    comments: [/^\\/\\/[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^'(?:[^'\\\\\\n]|\\\\.)*'/],\n    numbers: /^(\\d+\\.?\\d*(?:e[+-]?\\d+)?[lLfFdD]?)\\b/i,\n    memberAccess: true,\n  },\n  c: {\n    keywords: C_KW,\n    builtins: C_BI,\n    comments: [/^\\/\\/[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^'(?:[^'\\\\\\n]|\\\\.)*'/],\n    numbers: /^(\\d+\\.?\\d*(?:e[+-]?\\d+)?[uUlLfF]*|0x[\\da-f]+[uUlL]*)\\b/i,\n    memberAccess: true,\n  },\n  cpp: {\n    keywords: CPP_KW,\n    builtins: C_BI,\n    comments: [/^\\/\\/[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^'(?:[^'\\\\\\n]|\\\\.)*'/, /^R\"\\([\\s\\S]*?\\)\"/],\n    numbers: /^(\\d+\\.?\\d*(?:e[+-]?\\d+)?[uUlLfF]*|0x[\\da-f]+[uUlL]*)\\b/i,\n    memberAccess: true,\n  },\n  bash: {\n    keywords: BASH_KW,\n    builtins: BASH_BI,\n    comments: [/^#[^\\n]*/],\n    strings: [/^\"(?:[^\"\\\\]|\\\\.)*\"/, /^'[^']*'/],\n    numbers: /^(\\d+\\.?\\d*)\\b/,\n  },\n  sql: {\n    keywords: new Set([...SQL_KW, ...Array.from(SQL_KW).map((k) => k.toLowerCase())]),\n    comments: [/^--[^\\n]*/, /^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^'(?:[^'\\\\\\n]|\\\\.)*'/, /^\"(?:[^\"\\\\\\n]|\\\\.)*\"/],\n    numbers: /^(\\d+\\.?\\d*)\\b/,\n  },\n  yaml: {\n    keywords: YAML_KW,\n    comments: [/^#[^\\n]*/],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^'(?:[^'\\\\\\n]|\\\\.)*'/],\n    numbers: /^(-?\\d+\\.?\\d*(?:e[+-]?\\d+)?)\\b/i,\n  },\n  json: {\n    keywords: set(\"true\", \"false\", \"null\"),\n    comments: [],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/],\n    numbers: /^(-?\\d+\\.?\\d*(?:e[+-]?\\d+)?)\\b/i,\n  },\n  html: {\n    keywords: new Set<string>(),\n    comments: [/^<!--[\\s\\S]*?-->/],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^'(?:[^'\\\\\\n]|\\\\.)*'/],\n    numbers: /^(\\d+\\.?\\d*)\\b/,\n  },\n  css: {\n    keywords: CSS_KW,\n    comments: [/^\\/\\*[\\s\\S]*?\\*\\//],\n    strings: [/^\"(?:[^\"\\\\\\n]|\\\\.)*\"/, /^'(?:[^'\\\\\\n]|\\\\.)*'/],\n    numbers: /^(-?\\d+\\.?\\d*(?:px|em|rem|%|vh|vw|vmin|vmax|fr|s|ms|deg|rad|turn|pt|cm|mm|in)?)\\b/,\n  },\n  markdown: {\n    keywords: new Set<string>(),\n    comments: [],\n    strings: [],\n    numbers: /^a^/,\n  },\n};\n\nconst ALIASES: Record<string, string> = {\n  js: \"javascript\",\n  mjs: \"javascript\",\n  cjs: \"javascript\",\n  ts: \"typescript\",\n  py: \"python\",\n  py3: \"python\",\n  rs: \"rust\",\n  golang: \"go\",\n  sh: \"bash\",\n  shell: \"bash\",\n  zsh: \"bash\",\n  bashrc: \"bash\",\n  yml: \"yaml\",\n  \"c++\": \"cpp\",\n  cxx: \"cpp\",\n  cc: \"cpp\",\n  hpp: \"cpp\",\n  h: \"c\",\n  postgres: \"sql\",\n  postgresql: \"sql\",\n  mysql: \"sql\",\n  sqlite: \"sql\",\n  htm: \"html\",\n  xml: \"html\",\n  svg: \"html\",\n  scss: \"css\",\n  sass: \"css\",\n  less: \"css\",\n  md: \"markdown\",\n};\n\n/** Highlight a code string for a given language. */\nexport function highlight(code: string, language: string): HighlightToken[] {\n  if (!code) return [];\n  const lang = (language || \"\").toLowerCase().trim();\n  const resolved = ALIASES[lang] ?? lang;\n\n  if (resolved === \"diff\") {\n    // Loaded lazily to keep this file tree-shakeable.\n    // Importing here would create a cycle; use the dedicated entry instead.\n    return highlightDiff(code);\n  }\n  if (resolved === \"markdown\") {\n    return highlightMarkdown(code);\n  }\n\n  const spec = LANGS[resolved];\n  if (!spec) return [{ text: code, className: \"\" }];\n\n  const tokens: HighlightToken[] = [];\n  let pos = 0;\n  let lastWasDot = false;\n\n  while (pos < code.length) {\n    const sub = code.slice(pos);\n\n    // Newline → preserve verbatim.\n    if (sub.startsWith(\"\\n\")) {\n      tokens.push({ text: \"\\n\", className: \"\" });\n      pos++;\n      lastWasDot = false;\n      continue;\n    }\n\n    // Whitespace.\n    const wsMatch = sub.match(/^[ \\t]+/);\n    if (wsMatch) {\n      tokens.push({ text: wsMatch[0], className: \"\" });\n      pos += wsMatch[0].length;\n      continue;\n    }\n\n    // Comments.\n    let matched = false;\n    for (const re of spec.comments) {\n      const m = sub.match(re);\n      if (m && m.index === 0) {\n        tokens.push({ text: m[0], className: \"smd-hl-comment\" });\n        pos += m[0].length;\n        matched = true;\n        break;\n      }\n    }\n    if (matched) {\n      lastWasDot = false;\n      continue;\n    }\n\n    // Strings.\n    for (const re of spec.strings) {\n      const m = sub.match(re);\n      if (m && m.index === 0) {\n        tokens.push({ text: m[0], className: \"smd-hl-string\" });\n        pos += m[0].length;\n        matched = true;\n        break;\n      }\n    }\n    if (matched) {\n      lastWasDot = false;\n      continue;\n    }\n\n    // JSX tags.\n    if (spec.jsx) {\n      const tagOpen = sub.match(/^<\\/?[A-Za-z][\\w.-]*/);\n      if (tagOpen) {\n        tokens.push({ text: tagOpen[0], className: \"smd-hl-tag\" });\n        pos += tagOpen[0].length;\n        lastWasDot = false;\n        continue;\n      }\n    }\n\n    // Numbers.\n    const numMatch = sub.match(spec.numbers);\n    if (numMatch && numMatch.index === 0) {\n      tokens.push({ text: numMatch[0], className: \"smd-hl-number\" });\n      pos += numMatch[0].length;\n      lastWasDot = false;\n      continue;\n    }\n\n    // Words: keywords + builtins (with member-access suppression).\n    const wordMatch = sub.match(/^[A-Za-z_$][\\w$]*/);\n    if (wordMatch) {\n      const word = wordMatch[0];\n      let cls = \"\";\n      if (!lastWasDot || !spec.memberAccess) {\n        if (spec.keywords.has(word)) cls = \"smd-hl-keyword\";\n        else if (spec.builtins?.has(word)) cls = \"smd-hl-builtin\";\n      }\n      tokens.push({ text: word, className: cls });\n      pos += word.length;\n      lastWasDot = false;\n      continue;\n    }\n\n    // Punctuation / operators.\n    const ch = sub[0]!;\n    if (ch === \".\") {\n      lastWasDot = true;\n    } else if (ch !== \" \" && ch !== \"\\t\") {\n      lastWasDot = false;\n    }\n    tokens.push({ text: ch, className: \"smd-hl-punctuation\" });\n    pos++;\n  }\n\n  return tokens;\n}\n\nimport { highlightDiff } from \"./diff\";\n\nfunction highlightMarkdown(code: string): HighlightToken[] {\n  const out: HighlightToken[] = [];\n  const lines = code.split(\"\\n\");\n  for (let i = 0; i < lines.length; i++) {\n    if (i > 0) out.push({ text: \"\\n\", className: \"\" });\n    const line = lines[i]!;\n    if (/^#{1,6}\\s/.test(line)) {\n      out.push({ text: line, className: \"smd-hl-keyword\" });\n    } else if (/^>\\s/.test(line)) {\n      out.push({ text: line, className: \"smd-hl-comment\" });\n    } else if (/^```/.test(line) || /^~~~/.test(line)) {\n      out.push({ text: line, className: \"smd-hl-builtin\" });\n    } else if (/^\\s*[-*+]\\s/.test(line) || /^\\s*\\d+[.)]\\s/.test(line)) {\n      out.push({ text: line, className: \"smd-hl-number\" });\n    } else {\n      out.push({ text: line, className: \"\" });\n    }\n  }\n  return out;\n}\n","import * as React from \"react\";\nimport { memo, useState, useCallback, useMemo } from \"react\";\nimport type {\n  Block,\n  ComponentOverrides,\n  HighlighterFn,\n  InlinePlugin,\n} from \"../parser/types\";\nimport { InlineRenderer } from \"./InlineRenderer\";\nimport { highlight as defaultHighlight } from \"../highlight/highlighter\";\nimport {\n  parseTable,\n  parseListItems,\n  type ParsedListItem,\n  type ParsedTable,\n} from \"../parser/StreamParser\";\n\n// ── Heading ──\n\ninterface BlockProps {\n  block: Block;\n  overrides?: Partial<ComponentOverrides>;\n  inlinePlugins?: InlinePlugin[];\n  isActive?: boolean;\n}\n\nexport const HeadingBlock = memo(function HeadingBlock({\n  block,\n  overrides,\n  inlinePlugins,\n}: BlockProps) {\n  const level = block.meta.level ?? 1;\n  const Tag = `h${level}` as keyof React.JSX.IntrinsicElements;\n  const className = `smd-heading smd-h${level}`;\n  return (\n    <Tag className={className}>\n      <InlineRenderer\n        text={block.content}\n        {...(overrides ? { overrides } : {})}\n        {...(inlinePlugins ? { inlinePlugins } : {})}\n      />\n    </Tag>\n  );\n});\n\n// ── Paragraph ──\n\nexport const ParagraphBlock = memo(function ParagraphBlock({\n  block,\n  overrides,\n  inlinePlugins,\n}: BlockProps) {\n  return (\n    <p className=\"smd-paragraph\">\n      <InlineRenderer\n        text={block.content}\n        {...(overrides ? { overrides } : {})}\n        {...(inlinePlugins ? { inlinePlugins } : {})}\n      />\n    </p>\n  );\n});\n\n// ── Code Block ──\n// Streaming-aware: while active, render plain code (no highlight per token).\n// On `closed`, run the highlighter once. This is the core of the \"highlight\n// once, frozen\" performance promise.\n\ninterface CodeProps extends BlockProps {\n  highlighter?: HighlighterFn | undefined;\n}\n\nexport const CodeBlockComponent = memo(function CodeBlockComponent({\n  block,\n  overrides,\n  isActive,\n  highlighter,\n}: CodeProps) {\n  const language = block.meta.language ?? \"\";\n  const code = block.content.endsWith(\"\\n\")\n    ? block.content.slice(0, -1)\n    : block.content;\n  const streaming = !!isActive && !block.closed;\n\n  const [copied, setCopied] = useState(false);\n  const handleCopy = useCallback(() => {\n    if (typeof navigator === \"undefined\" || !navigator.clipboard) return;\n    void navigator.clipboard.writeText(code).then(() => {\n      setCopied(true);\n      setTimeout(() => setCopied(false), 2000);\n    });\n  }, [code]);\n\n  // Memoize highlighting on the closed code only. Hook must be unconditional.\n  const tokens = useMemo(() => {\n    if (streaming) return null; // render plain while streaming\n    const fn = highlighter ?? defaultHighlight;\n    return fn(code, language);\n  }, [streaming, code, language, highlighter]);\n\n  const Pre = overrides?.pre;\n  if (Pre) {\n    return <Pre block={block} language={language} code={code} streaming={streaming} />;\n  }\n\n  return (\n    <div className={`smd-code-block${streaming ? \" smd-code-streaming\" : \"\"}`}>\n      <div className=\"smd-code-header\">\n        {language && <span className=\"smd-code-lang\">{language}</span>}\n        <button\n          type=\"button\"\n          className=\"smd-code-copy\"\n          onClick={handleCopy}\n          aria-label={copied ? \"Copied\" : \"Copy code\"}\n        >\n          {copied ? \"Copied\" : \"Copy\"}\n        </button>\n      </div>\n      <pre className=\"smd-pre\">\n        <code className={`smd-code language-${language}`}>\n          {tokens === null\n            ? code\n            : tokens.map((t, i) =>\n                t.className ? (\n                  <span key={i} className={t.className}>\n                    {t.text}\n                  </span>\n                ) : (\n                  <React.Fragment key={i}>{t.text}</React.Fragment>\n                ),\n              )}\n        </code>\n      </pre>\n    </div>\n  );\n});\n\n// ── List ──\n\nexport const ListBlock = memo(function ListBlock({\n  block,\n  overrides,\n  inlinePlugins,\n}: BlockProps) {\n  const ordered = block.meta.ordered ?? false;\n  const items = useMemo<ParsedListItem[]>(() => {\n    if (block.closed && Array.isArray(block.meta.parsed)) {\n      return block.meta.parsed as ParsedListItem[];\n    }\n    return parseListItems(block.content);\n  }, [block.closed, block.content, block.meta.parsed]);\n\n  const Tag = ordered ? \"ol\" : \"ul\";\n  return (\n    <Tag\n      className={`smd-list smd-list-${ordered ? \"ol\" : \"ul\"}`}\n      {...(ordered && block.meta.start && block.meta.start !== 1\n        ? { start: block.meta.start }\n        : {})}\n    >\n      {items.map((item, i) => (\n        <ListItem\n          key={i}\n          item={item}\n          {...(overrides ? { overrides } : {})}\n          {...(inlinePlugins ? { inlinePlugins } : {})}\n        />\n      ))}\n    </Tag>\n  );\n});\n\ninterface ListItemProps {\n  item: ParsedListItem;\n  overrides?: Partial<ComponentOverrides>;\n  inlinePlugins?: InlinePlugin[];\n}\n\nfunction ListItem({ item, overrides, inlinePlugins }: ListItemProps) {\n  return (\n    <li className=\"smd-list-item\">\n      {item.isTask !== undefined && (\n        <input\n          type=\"checkbox\"\n          checked={!!item.taskChecked}\n          readOnly\n          aria-label={item.taskChecked ? \"completed task\" : \"incomplete task\"}\n          className=\"smd-task-checkbox\"\n        />\n      )}\n      <InlineRenderer\n        text={item.text}\n        {...(overrides ? { overrides } : {})}\n        {...(inlinePlugins ? { inlinePlugins } : {})}\n      />\n      {item.children && item.children.length > 0 && (\n        <ul className=\"smd-list smd-list-ul\">\n          {item.children.map((child, i) => (\n            <ListItem\n              key={i}\n              item={child}\n              {...(overrides ? { overrides } : {})}\n              {...(inlinePlugins ? { inlinePlugins } : {})}\n            />\n          ))}\n        </ul>\n      )}\n    </li>\n  );\n}\n\n// ── Table ──\n\nexport const TableBlock = memo(function TableBlock({\n  block,\n  overrides,\n  inlinePlugins,\n}: BlockProps) {\n  const parsed = useMemo<ParsedTable>(() => {\n    if (block.closed && block.meta.parsed && typeof block.meta.parsed === \"object\") {\n      return block.meta.parsed as ParsedTable;\n    }\n    return parseTable(block.content);\n  }, [block.closed, block.content, block.meta.parsed]);\n  const { headers, rows, alignments } = parsed;\n\n  const Tbl = overrides?.table;\n  if (Tbl) return <Tbl block={block} headers={headers} rows={rows} alignments={alignments} />;\n\n  const alignClass = (a: \"left\" | \"center\" | \"right\" | \"none\" | undefined) =>\n    a && a !== \"none\" ? `smd-align-${a}` : \"\";\n\n  return (\n    <div className=\"smd-table-wrapper\">\n      <table className=\"smd-table\">\n        {headers.length > 0 && (\n          <thead>\n            <tr>\n              {headers.map((h, i) => (\n                <th key={i} className={alignClass(alignments[i])}>\n                  <InlineRenderer\n                    text={h}\n                    {...(overrides ? { overrides } : {})}\n                    {...(inlinePlugins ? { inlinePlugins } : {})}\n                  />\n                </th>\n              ))}\n            </tr>\n          </thead>\n        )}\n        <tbody>\n          {rows.map((row, ri) => (\n            <tr key={ri}>\n              {row.map((cell, ci) => (\n                <td key={ci} className={alignClass(alignments[ci])}>\n                  <InlineRenderer\n                    text={cell}\n                    {...(overrides ? { overrides } : {})}\n                    {...(inlinePlugins ? { inlinePlugins } : {})}\n                  />\n                </td>\n              ))}\n            </tr>\n          ))}\n        </tbody>\n      </table>\n    </div>\n  );\n});\n\n// ── Blockquote ──\n\nexport const BlockquoteBlock = memo(function BlockquoteBlock({\n  block,\n  overrides,\n  inlinePlugins,\n}: BlockProps) {\n  return (\n    <blockquote className=\"smd-blockquote\">\n      <InlineRenderer\n        text={block.content}\n        {...(overrides ? { overrides } : {})}\n        {...(inlinePlugins ? { inlinePlugins } : {})}\n      />\n    </blockquote>\n  );\n});\n\n// ── Horizontal Rule ──\n\nexport const HorizontalRuleBlock = memo(function HorizontalRuleBlock() {\n  return <hr className=\"smd-hr\" />;\n});\n\n// ── HTML (sanitized — only when allowHtml=true at parser level; else won't reach here) ──\n\nexport const HtmlBlock = memo(function HtmlBlock({ block }: BlockProps) {\n  // Without DOMPurify, we still escape and render as preformatted text rather\n  // than risk injecting raw HTML. Users who genuinely want raw HTML must wire\n  // a custom override.\n  return (\n    <div className=\"smd-html-block\">\n      <pre>{block.content}</pre>\n    </div>\n  );\n});\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useSyncExternalStore } from \"react\";\nimport { StreamParser } from \"../parser/StreamParser\";\nimport type {\n  Block,\n  StreamMDProps,\n  ComponentOverrides,\n  InlinePlugin,\n  HighlighterFn,\n} from \"../parser/types\";\nimport {\n  HeadingBlock,\n  ParagraphBlock,\n  CodeBlockComponent,\n  ListBlock,\n  TableBlock,\n  BlockquoteBlock,\n  HorizontalRuleBlock,\n  HtmlBlock,\n} from \"./Blocks\";\n\n/**\n * Internal store that wraps `StreamParser` and notifies subscribers via\n * `useSyncExternalStore`. Avoids the side-effect-in-`useMemo` pitfall and\n * makes the component StrictMode + RSC-safe.\n */\nclass ParserStore {\n  private parser: StreamParser;\n  private listeners = new Set<() => void>();\n  private snapshot: { blocks: Block[]; activeIndex: number; incompleteLine: string } = {\n    blocks: [],\n    activeIndex: -1,\n    incompleteLine: \"\",\n  };\n  private lastText = \"\";\n\n  constructor(opts: ConstructorParameters<typeof StreamParser>[0]) {\n    this.parser = new StreamParser(opts);\n  }\n\n  push = (text: string): void => {\n    if (text === this.lastText) return;\n    const result = this.parser.push(text);\n    this.lastText = text;\n    // Always create a new snapshot reference so React re-renders. Block\n    // identities for closed blocks remain stable, so React.memo still\n    // skips them.\n    this.snapshot = {\n      blocks: result.blocks.slice(),\n      activeIndex: result.activeIndex,\n      incompleteLine: this.parser.getIncompleteLine(),\n    };\n    for (const l of this.listeners) l();\n  };\n\n  subscribe = (listener: () => void): (() => void) => {\n    this.listeners.add(listener);\n    return () => {\n      this.listeners.delete(listener);\n    };\n  };\n\n  getSnapshot = () => this.snapshot;\n  getServerSnapshot = () => this.snapshot;\n  getParser = () => this.parser;\n}\n\nexport function StreamMD({\n  text,\n  className,\n  theme = \"dark\",\n  components,\n  onBlockComplete,\n  limits,\n  highlighter,\n  blockPlugins,\n  inlinePlugins,\n  showCursor = true,\n}: StreamMDProps): React.JSX.Element {\n  // One store per mount. We deliberately do NOT recreate it on prop changes;\n  // changes to text are pushed into the store imperatively below.\n  const storeRef = useRef<ParserStore | null>(null);\n  if (!storeRef.current) {\n    storeRef.current = new ParserStore({\n      ...(onBlockComplete ? { onBlockComplete } : {}),\n      ...(limits ? { limits } : {}),\n      ...(blockPlugins ? { blockPlugins } : {}),\n    });\n  }\n  const store = storeRef.current;\n\n  // Push the latest text into the parser. Doing this in `useEffect` keeps\n  // rendering pure. The store handles non-prefix changes by resetting.\n  useEffect(() => {\n    store.push(text);\n  }, [text, store]);\n\n  const snapshot = useSyncExternalStore(\n    store.subscribe,\n    store.getSnapshot,\n    store.getServerSnapshot,\n  );\n\n  // Stabilize overrides + plugins so memoized blocks don't re-render on every\n  // parent re-render that creates a fresh object literal.\n  const stableOverrides = useStable(components);\n  const stablePlugins = useStable(inlinePlugins);\n  const stableHighlighter = useStable(highlighter);\n\n  const themeClass = theme === \"none\" ? \"\" : `smd-theme-${theme}`;\n  const showCursorClass = showCursor ? \"\" : \" smd-no-cursor\";\n\n  const { blocks, activeIndex, incompleteLine } = snapshot;\n\n  return (\n    <div className={`stream-md ${themeClass}${showCursorClass} ${className ?? \"\"}`.trim()}>\n      {blocks.map((block, idx) => {\n        const isActive = idx === activeIndex && !block.closed;\n        const displayBlock =\n          isActive && incompleteLine\n            ? {\n                ...block,\n                content:\n                  block.content + (block.content ? \"\\n\" : \"\") + incompleteLine,\n              }\n            : block;\n        return (\n          <BlockRenderer\n            key={block.id}\n            block={displayBlock}\n            isActive={isActive}\n            overrides={stableOverrides}\n            inlinePlugins={stablePlugins}\n            highlighter={stableHighlighter}\n            blockPlugins={blockPlugins}\n          />\n        );\n      })}\n      {incompleteLine &&\n        (blocks.length === 0 || blocks[blocks.length - 1]!.closed) && (\n          <div className=\"smd-block smd-block-active\">\n            <ParagraphBlock\n              block={{\n                id: \"_pending\",\n                type: \"paragraph\",\n                content: incompleteLine,\n                closed: false,\n                meta: {},\n              }}\n              {...(stableOverrides ? { overrides: stableOverrides } : {})}\n              {...(stablePlugins ? { inlinePlugins: stablePlugins } : {})}\n            />\n          </div>\n        )}\n    </div>\n  );\n}\n\n/** Memoize identity-stable references — avoids busting React.memo. */\nfunction useStable<T>(value: T | undefined): T | undefined {\n  const ref = useRef<T | undefined>(value);\n  return useMemo(() => {\n    if (shallowEqual(ref.current, value)) return ref.current;\n    ref.current = value;\n    return value;\n  }, [value]);\n}\n\nfunction shallowEqual(a: unknown, b: unknown): boolean {\n  if (a === b) return true;\n  if (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null) {\n    return false;\n  }\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n    return true;\n  }\n  const ka = Object.keys(a as Record<string, unknown>);\n  const kb = Object.keys(b as Record<string, unknown>);\n  if (ka.length !== kb.length) return false;\n  for (const k of ka) {\n    if ((a as Record<string, unknown>)[k] !== (b as Record<string, unknown>)[k]) return false;\n  }\n  return true;\n}\n\ninterface BlockRendererProps {\n  block: Block;\n  isActive: boolean;\n  overrides?: Partial<ComponentOverrides>;\n  inlinePlugins?: InlinePlugin[];\n  highlighter?: HighlighterFn;\n  blockPlugins?: import(\"../parser/types\").BlockPlugin[];\n}\n\nfunction BlockRenderer({\n  block,\n  isActive,\n  overrides,\n  inlinePlugins,\n  highlighter,\n  blockPlugins,\n}: BlockRendererProps): React.JSX.Element {\n  const wrapperClass = isActive ? \"smd-block smd-block-active\" : \"smd-block\";\n  return (\n    <div className={wrapperClass}>\n      <BlockContent\n        block={block}\n        overrides={overrides}\n        inlinePlugins={inlinePlugins}\n        highlighter={highlighter}\n        blockPlugins={blockPlugins}\n        isActive={isActive}\n      />\n    </div>\n  );\n}\n\nfunction BlockContent({\n  block,\n  overrides,\n  inlinePlugins,\n  highlighter,\n  blockPlugins,\n  isActive,\n}: BlockRendererProps): React.JSX.Element {\n  // Plugin block?\n  if (block.meta.pluginName && blockPlugins) {\n    const plugin = blockPlugins.find((p) => p.name === block.meta.pluginName);\n    if (plugin) return <>{plugin.render(block)}</>;\n  }\n\n  switch (block.type) {\n    case \"heading\":\n      return <HeadingBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n    case \"paragraph\":\n      return <ParagraphBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n    case \"code\":\n      return (\n        <CodeBlockComponent\n          block={block}\n          isActive={isActive}\n          {...(overrides ? { overrides } : {})}\n          {...(highlighter ? { highlighter } : {})}\n        />\n      );\n    case \"list\":\n      return <ListBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n    case \"table\":\n      return <TableBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n    case \"blockquote\":\n      return <BlockquoteBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n    case \"hr\":\n      return <HorizontalRuleBlock />;\n    case \"html\":\n      return <HtmlBlock block={block} />;\n    case \"math\":\n      // Math blocks are handled by a math plugin; if none configured, fall back.\n      return <ParagraphBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n    default:\n      return <ParagraphBlock block={block} {...(overrides ? { overrides } : {})} {...(inlinePlugins ? { inlinePlugins } : {})} />;\n  }\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { StreamParser } from \"../parser/StreamParser\";\nimport type { Block, ParseResult, StreamMDOptions } from \"../parser/types\";\n\nexport interface UseStreamMDReturn {\n  blocks: Block[];\n  activeIndex: number;\n  incompleteLine: string;\n  /** Push the full accumulated text. The parser internally diffs. */\n  push: (fullText: string) => void;\n  /** Reset all parser state. */\n  reset: () => void;\n}\n\n/**\n * React hook for streaming markdown parsing.\n *\n * Use this when you want full control over rendering (or are not in React's\n * happy path with `<StreamMD>` — e.g. when wiring an SSE source directly).\n */\nexport function useStreamMD(options?: StreamMDOptions): UseStreamMDReturn {\n  const parserRef = useRef<StreamParser | null>(null);\n  if (!parserRef.current) {\n    parserRef.current = new StreamParser(options);\n  }\n\n  const [snapshot, setSnapshot] = useState<{\n    blocks: Block[];\n    activeIndex: number;\n    incompleteLine: string;\n  }>({ blocks: [], activeIndex: -1, incompleteLine: \"\" });\n\n  const push = useCallback((fullText: string): void => {\n    const parser = parserRef.current!;\n    const result: ParseResult = parser.push(fullText);\n    setSnapshot({\n      blocks: result.blocks.slice(),\n      activeIndex: result.activeIndex,\n      incompleteLine: parser.getIncompleteLine(),\n    });\n  }, []);\n\n  const reset = useCallback(() => {\n    parserRef.current?.reset();\n    setSnapshot({ blocks: [], activeIndex: -1, incompleteLine: \"\" });\n  }, []);\n\n  return useMemo(\n    () => ({\n      blocks: snapshot.blocks,\n      activeIndex: snapshot.activeIndex,\n      incompleteLine: snapshot.incompleteLine,\n      push,\n      reset,\n    }),\n    [snapshot, push, reset],\n  );\n}\n","/**\n * stream-md/server — RSC-safe server parser.\n *\n * Pure JS, no React, no DOM, no Node-only APIs. Runs in:\n *   - Node.js (server components, route handlers)\n *   - Edge runtime (Vercel Edge Functions, Cloudflare Workers)\n *   - Browsers / workers\n *\n * Returns plain `Block[]` data that is JSON-serializable, so it can cross\n * the RSC boundary without any \"this is not a plain object\" warnings.\n */\n\nimport { StreamParser } from \"../parser/StreamParser\";\nimport type { Block, StreamMDOptions } from \"../parser/types\";\n\n/**\n * One-shot parse: feed the entire markdown text and get the final blocks.\n *\n * Use this on the server when you have the full text already (e.g. a saved\n * assistant message) and want server-rendered HTML for first paint.\n */\nexport function parseToBlocks(\n  text: string,\n  options: StreamMDOptions = {},\n): Block[] {\n  const parser = new StreamParser(options);\n  parser.push(text);\n  // Force-close any trailing block so the result is fully finalized.\n  const blocks = parser.getBlocks();\n  for (const b of blocks) {\n    if (!b.closed) {\n      b.closed = true;\n      // Note: caches not populated here to keep the function cheap; consumers\n      // can call `parseTable(b.content)` etc. lazily.\n    }\n  }\n  // Strip any non-serializable fields just to be safe.\n  return blocks.map((b) => ({\n    id: b.id,\n    type: b.type,\n    content: b.content,\n    closed: b.closed,\n    meta: stripFunctions(b.meta) as Block[\"meta\"],\n  }));\n}\n\nfunction stripFunctions<T>(obj: T): T {\n  if (obj === null || typeof obj !== \"object\") return obj;\n  if (Array.isArray(obj)) return obj.map(stripFunctions) as unknown as T;\n  const out: Record<string, unknown> = {};\n  for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n    if (typeof v === \"function\") continue;\n    out[k] = stripFunctions(v);\n  }\n  return out as T;\n}\n\nexport { StreamParser } from \"../parser/StreamParser\";\nexport type { Block, BlockMeta, BlockType, StreamMDOptions } from \"../parser/types\";\n","// Server component — runs on the server only. Do NOT add a client directive here.\nimport * as React from \"react\";\nimport { parseToBlocks } from \"../server\";\nimport { highlight as defaultHighlight } from \"../highlight/highlighter\";\nimport { parseTable, parseListItems } from \"../parser/StreamParser\";\nimport { sanitizeUrl, sanitizeImageUrl } from \"../core/sanitize\";\nimport { parseInline } from \"../parser/InlineParser\";\nimport type { Block, InlineToken } from \"../parser/types\";\n\nexport interface StreamMDServerProps {\n  text: string;\n  className?: string;\n  theme?: \"dark\" | \"light\" | \"none\";\n}\n\n/**\n * Server-rendered streaming markdown.\n *\n * Use this in RSC for the first paint of a saved assistant message — emits\n * pure HTML (no client JS needed). For *live* streaming, use the client\n * `<StreamMD>` from `stream-md` or `stream-md/next`.\n */\nexport function StreamMDServer({\n  text,\n  className,\n  theme = \"dark\",\n}: StreamMDServerProps): React.JSX.Element {\n  const blocks = parseToBlocks(text);\n  const themeClass = theme === \"none\" ? \"\" : `smd-theme-${theme}`;\n  return (\n    <div className={`stream-md ${themeClass} ${className ?? \"\"}`.trim()}>\n      {blocks.map((b) => (\n        <ServerBlock key={b.id} block={b} />\n      ))}\n    </div>\n  );\n}\n\nfunction ServerBlock({ block }: { block: Block }): React.JSX.Element {\n  switch (block.type) {\n    case \"heading\": {\n      const level = block.meta.level ?? 1;\n      const Tag = `h${level}` as keyof React.JSX.IntrinsicElements;\n      return (\n        <Tag className={`smd-heading smd-h${level}`}>\n          <ServerInline text={block.content} />\n        </Tag>\n      );\n    }\n    case \"paragraph\":\n      return (\n        <p className=\"smd-paragraph\">\n          <ServerInline text={block.content} />\n        </p>\n      );\n    case \"code\": {\n      const lang = block.meta.language ?? \"\";\n      const code = block.content.endsWith(\"\\n\")\n        ? block.content.slice(0, -1)\n        : block.content;\n      const tokens = defaultHighlight(code, lang);\n      return (\n        <div className=\"smd-code-block\">\n          <div className=\"smd-code-header\">\n            {lang && <span className=\"smd-code-lang\">{lang}</span>}\n          </div>\n          <pre className=\"smd-pre\">\n            <code className={`smd-code language-${lang}`}>\n              {tokens.map((t, i) =>\n                t.className ? (\n                  <span key={i} className={t.className}>\n                    {t.text}\n                  </span>\n                ) : (\n                  <React.Fragment key={i}>{t.text}</React.Fragment>\n                ),\n              )}\n            </code>\n          </pre>\n        </div>\n      );\n    }\n    case \"list\": {\n      const items = parseListItems(block.content);\n      const ordered = block.meta.ordered ?? false;\n      const Tag = ordered ? \"ol\" : \"ul\";\n      const renderItem = (item: ReturnType<typeof parseListItems>[number], i: number): React.JSX.Element => (\n        <li key={i} className=\"smd-list-item\">\n          {item.isTask !== undefined && (\n            <input\n              type=\"checkbox\"\n              checked={!!item.taskChecked}\n              readOnly\n              aria-label={item.taskChecked ? \"completed task\" : \"incomplete task\"}\n              className=\"smd-task-checkbox\"\n            />\n          )}\n          <ServerInline text={item.text} />\n          {item.children && item.children.length > 0 && (\n            <ul className=\"smd-list smd-list-ul\">\n              {item.children.map(renderItem)}\n            </ul>\n          )}\n        </li>\n      );\n      return (\n        <Tag\n          className={`smd-list smd-list-${ordered ? \"ol\" : \"ul\"}`}\n          {...(ordered && block.meta.start && block.meta.start !== 1\n            ? { start: block.meta.start }\n            : {})}\n        >\n          {items.map(renderItem)}\n        </Tag>\n      );\n    }\n    case \"table\": {\n      const { headers, rows, alignments } = parseTable(block.content);\n      return (\n        <div className=\"smd-table-wrapper\">\n          <table className=\"smd-table\">\n            {headers.length > 0 && (\n              <thead>\n                <tr>\n                  {headers.map((h, i) => (\n                    <th\n                      key={i}\n                      className={\n                        alignments[i] && alignments[i] !== \"none\"\n                          ? `smd-align-${alignments[i]}`\n                          : \"\"\n                      }\n                    >\n                      <ServerInline text={h} />\n                    </th>\n                  ))}\n                </tr>\n              </thead>\n            )}\n            <tbody>\n              {rows.map((row, ri) => (\n                <tr key={ri}>\n                  {row.map((cell, ci) => (\n                    <td\n                      key={ci}\n                      className={\n                        alignments[ci] && alignments[ci] !== \"none\"\n                          ? `smd-align-${alignments[ci]}`\n                          : \"\"\n                      }\n                    >\n                      <ServerInline text={cell} />\n                    </td>\n                  ))}\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        </div>\n      );\n    }\n    case \"blockquote\":\n      return (\n        <blockquote className=\"smd-blockquote\">\n          <ServerInline text={block.content} />\n        </blockquote>\n      );\n    case \"hr\":\n      return <hr className=\"smd-hr\" />;\n    default:\n      return (\n        <p className=\"smd-paragraph\">\n          <ServerInline text={block.content} />\n        </p>\n      );\n  }\n}\n\nfunction ServerInline({ text }: { text: string }): React.JSX.Element {\n  // No tentative-close on the server: by definition the input is complete.\n  const tokens = parseInline(text, { tentative: false });\n  return <>{tokens.map((t, i) => renderInline(t, i))}</>;\n}\n\nfunction renderInline(token: InlineToken, key: number): React.ReactNode {\n  switch (token.type) {\n    case \"text\":\n      return <React.Fragment key={key}>{token.content}</React.Fragment>;\n    case \"br\":\n      return <br key={key} />;\n    case \"bold\":\n      return (\n        <strong key={key}>\n          {token.children\n            ? token.children.map((t, i) => renderInline(t, i))\n            : token.content}\n        </strong>\n      );\n    case \"italic\":\n      return (\n        <em key={key}>\n          {token.children\n            ? token.children.map((t, i) => renderInline(t, i))\n            : token.content}\n        </em>\n      );\n    case \"bolditalic\":\n      return (\n        <strong key={key}>\n          <em>\n            {token.children\n              ? token.children.map((t, i) => renderInline(t, i))\n              : token.content}\n          </em>\n        </strong>\n      );\n    case \"code\":\n      return (\n        <code key={key} className=\"smd-inline-code\">\n          {token.content}\n        </code>\n      );\n    case \"link\": {\n      const safe = sanitizeUrl(token.href);\n      if (!safe) return <React.Fragment key={key}>{token.content}</React.Fragment>;\n      const isExternal = /^(https?:|mailto:|tel:)/i.test(safe);\n      return (\n        <a\n          key={key}\n          href={safe}\n          {...(token.title !== undefined ? { title: token.title } : {})}\n          {...(isExternal\n            ? {\n                target: \"_blank\",\n                rel: \"noopener noreferrer\",\n                referrerPolicy: \"no-referrer\" as const,\n              }\n            : {})}\n          className=\"smd-link\"\n        >\n          {token.children\n            ? token.children.map((t, i) => renderInline(t, i))\n            : token.content}\n        </a>\n      );\n    }\n    case \"strikethrough\":\n      return (\n        <del key={key}>\n          {token.children\n            ? token.children.map((t, i) => renderInline(t, i))\n            : token.content}\n        </del>\n      );\n    case \"image\": {\n      const safe = sanitizeImageUrl(token.href);\n      if (!safe) return <React.Fragment key={key}>{token.content}</React.Fragment>;\n      return (\n        <img\n          key={key}\n          src={safe}\n          alt={token.alt ?? \"\"}\n          {...(token.title !== undefined ? { title: token.title } : {})}\n          className=\"smd-image\"\n          loading=\"lazy\"\n          decoding=\"async\"\n        />\n      );\n    }\n    default:\n      return <React.Fragment key={key}>{token.content}</React.Fragment>;\n  }\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { StreamMD } from \"../components/StreamMD\";\nimport type { StreamMDProps } from \"../parser/types\";\n\n/**\n * Vercel AI SDK message shape — narrow on what we actually use so we don't\n * pin to a specific AI SDK major version. Compatible with v3 and v4.\n */\nexport interface AISDKMessage {\n  id?: string;\n  role: \"system\" | \"user\" | \"assistant\" | \"tool\" | \"data\" | string;\n  content?: string;\n  /** AI SDK v4 introduced parts; we concatenate text parts. */\n  parts?: Array<{ type: string; text?: string } | unknown>;\n}\n\nexport interface AssistantMarkdownProps\n  extends Omit<StreamMDProps, \"text\"> {\n  message: AISDKMessage;\n  /** Render even when role !== \"assistant\" (default false). */\n  always?: boolean;\n}\n\n/**\n * Renders the assistant turn's markdown. Drops in directly under `messages.map`.\n *\n * @example\n * ```tsx\n * {messages.map((m) =>\n *   m.role === 'assistant'\n *     ? <AssistantMarkdown key={m.id} message={m} theme=\"dark\" />\n *     : <UserMessage key={m.id}>{m.content}</UserMessage>\n * )}\n * ```\n */\nexport function AssistantMarkdown({\n  message,\n  always = false,\n  ...rest\n}: AssistantMarkdownProps): React.JSX.Element | null {\n  if (!always && message.role !== \"assistant\") return null;\n  const text = extractText(message);\n  return <StreamMD text={text} {...rest} />;\n}\n\nfunction extractText(m: AISDKMessage): string {\n  if (typeof m.content === \"string\") return m.content;\n  if (Array.isArray(m.parts)) {\n    return m.parts\n      .map((p) => {\n        if (p && typeof p === \"object\" && \"type\" in p && (p as { type: string }).type === \"text\") {\n          return (p as { text?: string }).text ?? \"\";\n        }\n        return \"\";\n      })\n      .join(\"\");\n  }\n  return \"\";\n}\n"]}