binocular-cli 0.2.3

Not exactly a telescope, but it's useful sometimes. TUI to search/navigate through files and workspaces.
Documentation
use crate::preview::types::ImagePreview;
use crate::ui::preview::PreviewView;
use ratatui::{
    layout::{Constraint, Direction, Layout, Rect},
    style::{Color, Style},
    widgets::{Block, Paragraph},
    Frame,
};
use ratatui_image::StatefulImage;

pub fn render_image_preview(
    f: &mut Frame,
    area: Rect,
    preview_block: Block<'_>,
    image_preview: &mut ImagePreview,
    view: &PreviewView<'_>,
) {
    let inner = preview_block.inner(area);
    f.render_widget(preview_block, area);

    let min_image_height: u16 = 8;
    let visible_meta_lines = image_preview
        .metadata_line_count
        .saturating_sub(view.scroll as usize) as u16;
    let max_meta_height = inner.height.saturating_sub(min_image_height);
    let meta_height = visible_meta_lines.max(1).min(max_meta_height.max(1));

    let chunks = Layout::default()
        .direction(Direction::Vertical)
        .constraints([Constraint::Length(meta_height), Constraint::Min(0)])
        .split(inner);

    let meta = Paragraph::new(image_preview.metadata.clone())
        .style(Style::default().bg(Color::Reset))
        .scroll((view.scroll, view.scroll_char));
    f.render_widget(meta, chunks[0]);

    let image = StatefulImage::new().resize(ratatui_image::Resize::Fit(None));
    f.render_stateful_widget(image, chunks[1], &mut image_preview.protocol);
}