intuitive 0.1.0

a react-like library for building text-based user interfaces
Documentation
use tui::widgets::Paragraph;

use crate::{
  components::Component,
  element::{Any as AnyElement, Element},
  event::{KeyEvent, KeyHandler},
  terminal::{Frame, Rect},
};

#[derive(Default)]
pub struct Text {
  pub text: String,

  pub on_key: KeyHandler,
}

impl Component for Text {
  fn render(&self) -> AnyElement {
    AnyElement::new(Frozen {
      text: self.text.clone(),
      on_key: self.on_key.clone(),
    })
  }
}

struct Frozen {
  text: String,
  on_key: KeyHandler,
}

impl Element for Frozen {
  fn on_key(&self, event: KeyEvent) {
    self.on_key.handle(event);
  }

  fn draw(&self, rect: Rect, frame: &mut Frame) {
    let widget = Paragraph::new(self.text.clone());

    frame.render_widget(widget, rect);
  }
}