makara 0.2.6

A Bevy UI simplifier that make it easy to build GUI app with bevy engine.
Documentation
<h3 align="center">
    Build high performance GUI app with power of Game Engine (Bevy).
</h3>

Makara is a UI Library built on top of Bevy engine.

[Bevy](https://bevy.org/) is a game engine written in Rust, based on 
[ECS](https://bevy.org/learn/quick-start/getting-started/ecs/) architecture. 
It's capable of rendering 2D and 3D graphics.

[Bevy](https://bevy.org/) also provides full UI system to build GPU accelerated GUI application but because it's based on 
[ECS](https://bevy.org/learn/quick-start/getting-started/ecs/), building UI with Bevy is verbosity.

Let's see an example below of creating a simple button with pure Bevy's UI.

```rust
fn setup(mut commands: Commands) {
    commands.spawn((
        Node {
            width: px(100),
            height: px(20),
            align_items: AlignItems::Center,
            justify_content: JustifyContent::Center,
            padding: UiRect::all(px(10)),
            ..default()
        },
        BorderRadius::all(px(8)),
        BackgroundColor(Color::srgb(1.0, 1.0, 1.0)),
        
        children![
            (
                Text::new("Click me"),
                TextColor(Color::BLACK)
            )
        ],
    
        observe(on_button_click)
    ))
}

fn on_button_click(_click: On<Pointer<Click>>) {
    // do something
}
```

As you can see, it's really easy to get lost with Bevy's UI. A real GUI application 
will have more than just a button and complex hierarchy.

**Makara** simplifies this problem but providing **built-in widgets** and high level api with builder pattern
that most rust devs familiar with, to make it easy to write and maintain the code.

Let's see how **Makara** reduce the verbosity.

```rust
fn setup(mut commands: Commands) {
    commands.spawn(
        button_!(
            "Click me", background_color: "white", padding: px(10);
            on: on_button_click
        )
    );
}

fn on_button_click(_clicked: On<Clicked>) {
    // do something
}
```
Now it's much cleaner compare to previous example.

Another motivation behind this project is the performance inherent to a modern game engine. 
Bevy utilizes a decoupled architecture consisting of a Spatial Simulation and 
an Interface Overlay. This allows for hardware-accelerated rendering of complex 
2D/3D meshes and custom shaders within the World Space, 
while maintaining a highly responsive, independent UI.

<p align="center">
  <img src="./images/layers.png" alt="Bevy Layers" width="400">
</p>

That means you can render any kind of heavy graphic within your application without sacrifying performance.

### Core Features

- Built-in widgets including **button, modal, text input** and more.
- Leverages Bevy’s **massive parallelism** for smooth and efficient rendering.
- Routing systems.
- Custom styling with ID & Classes similar to HTML/CSS.
- High level API and flexible.


## Installation

```
cargo add makara
```