use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::style::{Color, Style};
use ratatui::widgets::{Block, BorderType, Borders, Widget};
pub struct Panel {
title: String,
border_color: Color,
}
impl Panel {
pub fn new(title: impl Into<String>) -> Self {
Self {
title: title.into(),
border_color: Color::Cyan,
}
}
pub fn border_color(mut self, color: Color) -> Self {
self.border_color = color;
self
}
pub fn inner(&self, area: Rect) -> Rect {
let block = Block::default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
.title(self.title.as_str());
block.inner(area)
}
}
impl Widget for Panel {
fn render(self, area: Rect, buf: &mut Buffer) {
let block = Block::default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
.border_style(Style::default().fg(self.border_color))
.title(self.title.as_str())
.title_style(Style::default().fg(Color::Yellow));
block.render(area, buf);
}
}