yazi_widgets/input/
widget.rs

1use std::ops::Range;
2
3use ratatui::{layout::Rect, text::Line, widgets::Widget};
4use yazi_config::THEME;
5
6use super::Input;
7
8impl Widget for &Input {
9	fn render(self, area: ratatui::layout::Rect, buf: &mut ratatui::buffer::Buffer)
10	where
11		Self: Sized,
12	{
13		yazi_binding::elements::Clear::default().render(area, buf);
14
15		Line::styled(self.display(), THEME.input.value).render(area, buf);
16
17		if let Some(Range { start, end }) = self.selected() {
18			let s = start.min(area.width);
19			buf.set_style(
20				Rect {
21					x:      area.x + s,
22					y:      area.y,
23					width:  (end - start).min(area.width - s),
24					height: area.height.min(1),
25				},
26				THEME.input.selected,
27			);
28		}
29	}
30}