llm 1.3.8

A Rust library unifying multiple LLM backends.
Documentation
mod char_input;
mod focus_keys;
pub(super) mod helpers;
mod main_keys;
mod overlay_keys;
mod simple_keys;
mod slash_overlay;
mod vi_keys;

use std::time::Instant;

use crate::runtime::InputEvent;
use crate::runtime::OverlayState;

use super::AppController;

pub async fn handle_input(controller: &mut AppController, event: InputEvent) -> bool {
    match event {
        InputEvent::Key(key) => main_keys::dispatch_key(controller, key).await,
        InputEvent::Mouse(mouse) => helpers::handle_mouse(controller, mouse),
        InputEvent::Paste(text) => handle_paste_event(controller, text),
        InputEvent::Resize(w, h) => {
            controller.state.terminal_size = (w, h);
            true
        }
    }
}

pub fn handle_tick(controller: &mut AppController) -> bool {
    let mut dirty = controller
        .state
        .animation
        .tick(&controller.state.terminal_caps);
    if controller.state.status_metrics.should_redraw() {
        dirty = true;
    }
    dirty
}

fn handle_paste_event(controller: &mut AppController, text: String) -> bool {
    if let OverlayState::Onboarding(state) = &mut controller.state.overlay {
        state.api_key.push_str(&text);
        controller.state.paste_detector.record_paste(Instant::now());
        return true;
    }
    helpers::handle_paste(controller, text)
}