1use crate::Component;
2use crate::components::{Event, ViewContext};
3use crate::line::Line;
4use crate::rendering::frame::Frame;
5use crate::rendering::render_context::Size;
6
7use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
8
9pub async fn type_query<P: Component>(picker: &mut P, text: &str) {
10 for c in text.chars() {
11 let _ = picker.on_event(&Event::Key(KeyEvent::new(KeyCode::Char(c), KeyModifiers::NONE))).await;
12 }
13}
14
15pub fn rendered_lines_from(frame: &Frame) -> Vec<String> {
16 frame.lines().iter().map(Line::plain_text).collect()
17}
18
19pub fn rendered_lines_with_context(render: impl FnOnce(&ViewContext) -> Frame, size: impl Into<Size>) -> Vec<String> {
20 let context = ViewContext::new(size);
21 render(&context).lines().iter().map(Line::plain_text).collect()
22}
23
24pub fn rendered_raw_lines_with_context(render: impl FnOnce(&ViewContext) -> Frame, size: impl Into<Size>) -> Vec<Line> {
25 let context = ViewContext::new(size);
26 render(&context).into_lines()
27}