bevy_ratatui 0.5.3

A Bevy plugin for building terminal user interfaces with Ratatui
Documentation
use std::io::stdout;

use bevy::prelude::*;
use crossterm::{
    event::{DisableMouseCapture, EnableMouseCapture},
    ExecutableCommand,
};

use crate::error::exit_on_error;

pub struct MousePlugin;

impl Plugin for MousePlugin {
    fn build(&self, app: &mut App) {
        app.add_systems(Startup, setup.pipe(exit_on_error));
    }
}

#[derive(Resource, Default)]
pub struct MouseCaptureEnabled;

fn setup(mut commands: Commands) -> color_eyre::Result<()> {
    stdout().execute(EnableMouseCapture)?;
    commands.insert_resource(MouseCaptureEnabled);
    Ok(())
}

impl Drop for MouseCaptureEnabled {
    fn drop(&mut self) {
        let _ = stdout().execute(DisableMouseCapture);
    }
}