ratatui_toolkit/widgets/markdown_widget/extensions/toc/traits/
widget.rs

1//! Widget trait implementation for Toc.
2
3use ratatui::{buffer::Buffer, layout::Rect, widgets::Widget};
4
5use crate::widgets::markdown_widget::extensions::toc::Toc;
6
7impl<'a> Widget for Toc<'a> {
8    fn render(self, area: Rect, buf: &mut Buffer) {
9        if area.width == 0 || area.height == 0 {
10            return;
11        }
12
13        if self.expanded {
14            // Expanded mode (hovered): show border + text entries
15            for y in area.y..area.y + area.height {
16                for x in area.x..area.x + area.width {
17                    if let Some(cell) = buf.cell_mut((x, y)) {
18                        cell.set_char(' ').set_style(self.config.background_style);
19                    }
20                }
21            }
22
23            let content_area = if self.config.show_border {
24                self.render_border(area, buf)
25            } else {
26                area
27            };
28            self.render_expanded(content_area, buf);
29        } else {
30            // Compact mode (not hovered): show horizontal lines
31            self.render_compact(area, buf);
32        }
33    }
34}