ratatui-markdown 0.3.1

Markdown rendering, syntax highlighting, collapsible trees, and rich scroll widgets for ratatui
Documentation
use ratatui::{layout::Rect, text::Line, Frame};

#[cfg(feature = "markdown")]
use crate::markdown::MarkdownRenderer;
use crate::theme::RichTextTheme;

#[cfg(feature = "markdown")]
pub(super) fn render_read_mode(
    text: &str,
    f: &mut Frame,
    area: Rect,
    scroll_offset: usize,
    theme: &impl RichTextTheme,
) {
    let renderer = MarkdownRenderer::new(area.width as usize);
    let blocks = renderer.parse(text);
    let all_lines = renderer.render(&blocks, theme);
    let visible_height = area.height as usize;
    let skipped: Vec<Line<'static>> = all_lines
        .into_iter()
        .skip(scroll_offset)
        .take(visible_height)
        .collect();
    let paragraph = ratatui::widgets::Paragraph::new(skipped);
    f.render_widget(paragraph, area);
}

#[cfg(feature = "markdown")]
pub(super) fn rendered_height(text: &str, width: usize, theme: &impl RichTextTheme) -> u16 {
    let renderer = MarkdownRenderer::new(width);
    let blocks = renderer.parse(text);
    let lines = renderer.render(&blocks, theme);
    lines.len().min(u16::MAX as usize) as u16
}