igv-rs 0.7.0

Interactive terminal genome viewer for FASTA / VCF / BAM / GFF / BED / bigWig / BEDPE. Includes a bundled-igv.js browser companion.
Documentation
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::text::{Line, Span};
use ratatui::widgets::{Block, Borders, Paragraph, Widget};

use crate::app::state::AppState;
use crate::ui::theme::Theme;

pub struct HeaderWidget<'a> {
    pub state: &'a AppState,
    pub theme: &'a Theme,
}

impl Widget for HeaderWidget<'_> {
    fn render(self, area: Rect, buf: &mut Buffer) {
        let region_text = self.state.region.to_string();
        let line = Line::from(vec![
            Span::styled(" igv-rs ", self.theme.get("HEADER")),
            Span::raw("  "),
            Span::styled(region_text, self.theme.get("OVERVIEW")),
            Span::raw("  "),
            Span::styled(
                format!("({} bp)", self.state.region.width()),
                self.theme.get("WARNING"),
            ),
            Span::raw("  "),
            Span::styled(
                if self.state.loading { "loading…" } else { "" },
                self.theme.get("WARNING"),
            ),
        ]);
        Paragraph::new(line)
            .block(Block::default().borders(Borders::BOTTOM).style(self.theme.get("BORDER")))
            .render(area, buf);
    }
}