yazi_widgets/input/
widget.rs1use 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}