tuyere 0.1.0

A powerful TUI framework based on The Elm Architecture 🔮
Documentation

<h1 align="center">🔮 Tuyere</h1>

<p align="center">
  <strong>A powerful TUI framework based on The Elm Architecture.</strong>
</p>

<p align="center">
  <a href="https://crates.io/crates/tuyere"><img src="https://img.shields.io/crates/v/tuyere.svg?style=flat-square&logo=rust" alt="Crates.io"></a>
  <a href="https://docs.rs/tuyere"><img src="https://img.shields.io/docsrs/tuyere?style=flat-square&logo=docs.rs" alt="Documentation"></a>
  <a href="#license"><img src="https://img.shields.io/badge/license-MIT%2FApache--2.0-blue?style=flat-square" alt="License"></a>
</p>

---

## What is Tuyere?

A **tuyere** is the nozzle that feeds air into a forge, bringing it to life. This crate does the same for your terminal apps—feeding events through the Elm Architecture to create beautiful, reactive TUIs.

```rust
use tuyere::{App, Model, Command, Event, Key};

struct Counter { count: i32 }

enum Msg { Increment, Decrement, Quit }

impl Model for Counter {
    type Message = Msg;

    fn update(&mut self, msg: Msg) -> Command<Msg> {
        match msg {
            Msg::Increment => self.count += 1,
            Msg::Decrement => self.count -= 1,
            Msg::Quit => return Command::quit(),
        }
        Command::none()
    }

    fn view(&self) -> String {
        format!("Count: {}\n\nPress +/- to change, q to quit", self.count)
    }

    fn handle_event(&self, event: Event) -> Option<Msg> {
        match event {
            Event::Key(Key::Char('+')) => Some(Msg::Increment),
            Event::Key(Key::Char('-')) => Some(Msg::Decrement),
            Event::Key(Key::Char('q')) => Some(Msg::Quit),
            _ => None,
        }
    }
}

fn main() {
    App::new(Counter { count: 0 }).run().unwrap();
}
```

---

## Features

- 🏗️ **Elm Architecture** - Model, Message, Update, View
-**Simple API** - Just implement `Model` and you're done
- 🖱️ **Input Handling** - Keyboard, mouse, focus events
- 🎨 **Styling** - Works with `glyphs` and `lacquer`

---

## Installation

```bash
cargo add tuyere
```

---

## Ecosystem

Part of the **Molten Labs** open source ecosystem:

| Crate | Description |
|-------|-------------|
| [molten_brand]https://crates.io/crates/molten_brand | Design tokens & colors |
| [glyphs]https://crates.io/crates/glyphs | ANSI escape sequences |
| [lacquer]https://crates.io/crates/lacquer | Terminal styling |
| **tuyere** | TUI framework (you are here) |
| [scoria]https://crates.io/crates/scoria | TUI components |
| [chant]https://crates.io/crates/chant | Shell glamour |
| [aglow]https://crates.io/crates/aglow | Markdown renderer |
| [censer]https://crates.io/crates/censer | Pretty logging |

---

## License

MIT OR Apache-2.0

<p align="center">
  <sub>Built with 🔮 by <a href="https://github.com/moltenlabs">Molten Labs</a></sub>
</p>