import type { Component } from '../tui.js';
/**
 * Default text styling for markdown content.
 * Applied to all text unless overridden by markdown formatting.
 */
export interface DefaultTextStyle {
  /** Foreground color function */
  color?: (text: string) => string;
  /** Background color function */
  bgColor?: (text: string) => string;
  /** Bold text */
  bold?: boolean;
  /** Italic text */
  italic?: boolean;
  /** Strikethrough text */
  strikethrough?: boolean;
  /** Underline text */
  underline?: boolean;
}
/**
 * Theme functions for markdown elements.
 * Each function takes text and returns styled text with ANSI codes.
 */
export interface MarkdownTheme {
  heading: (text: string) => string;
  link: (text: string) => string;
  linkUrl: (text: string) => string;
  code: (text: string) => string;
  codeBlock: (text: string) => string;
  codeBlockBorder: (text: string) => string;
  quote: (text: string) => string;
  quoteBorder: (text: string) => string;
  hr: (text: string) => string;
  listBullet: (text: string) => string;
  bold: (text: string) => string;
  italic: (text: string) => string;
  strikethrough: (text: string) => string;
  underline: (text: string) => string;
  highlightCode?: (code: string, lang?: string) => string[];
  /** Prefix applied to each rendered code block line (default: "  ") */
  codeBlockIndent?: string;
}
export declare class Markdown implements Component {
  private text;
  private paddingX;
  private paddingY;
  private defaultTextStyle?;
  private theme;
  private defaultStylePrefix?;
  private cachedText?;
  private cachedWidth?;
  private cachedLines?;
  constructor(
    text: string,
    paddingX: number,
    paddingY: number,
    theme: MarkdownTheme,
    defaultTextStyle?: DefaultTextStyle
  );
  setText(text: string): void;
  invalidate(): void;
  render(width: number): string[];
  /**
   * Apply default text style to a string.
   * This is the base styling applied to all text content.
   * NOTE: Background color is NOT applied here - it's applied at the padding stage
   * to ensure it extends to the full line width.
   */
  private applyDefaultStyle;
  private getDefaultStylePrefix;
  private getStylePrefix;
  private getDefaultInlineStyleContext;
  private renderToken;
  private renderInlineTokens;
  /**
   * Render a list with proper nesting support
   */
  private renderList;
  /**
   * Render list item tokens, handling nested lists
   * Returns lines WITHOUT the parent indent (renderList will add it)
   */
  private renderListItem;
  /**
   * Get the visible width of the longest word in a string.
   */
  private getLongestWordWidth;
  /**
   * Wrap a table cell to fit into a column.
   *
   * Delegates to wrapTextWithAnsi() so ANSI codes + long tokens are handled
   * consistently with the rest of the renderer.
   */
  private wrapCellText;
  /**
   * Render a table with width-aware cell wrapping.
   * Cells that don't fit are wrapped to multiple lines.
   */
  private renderTable;
}
//# sourceMappingURL=markdown.d.ts.map
