silkenweb-dom 0.1.3

Silkenweb DOM API
Documentation
# **This Crate is Deprecated**

This is an old implementation crate for Silkenweb that is no longer used.

[![tests](https://github.com/silkenweb/silkenweb/actions/workflows/tests.yml/badge.svg)](https://github.com/silkenweb/silkenweb/actions/workflows/tests.yml)
[![crates.io](https://img.shields.io/crates/v/silkenweb.svg)](https://crates.io/crates/silkenweb)
[![Documentation](https://docs.rs/silkenweb/badge.svg)](https://docs.rs/silkenweb)
[![MIT/Apache-2 licensed](https://img.shields.io/crates/l/silkenweb)](./LICENSE-APACHE)

A library for building reactive single page web apps.

## Features

- Fine grained reactivity using signals to minimize DOM API calls
- No VDOM. Calls to the DOM API and your rendering code are minimized using signals.
- Uses plain Rust syntax rather than a macro DSL
- Downcasts Js objects for you where the type is known at compile time. For example:
  - `input().dom_element()` returns a `web_sys::HtmlInputElement`
  - `button().on_click(...)` passes your event handler a `web_sys::HtmlInputElement` and a `web_sys::MouseEvent`.

## Example: A Simple Counter

```rust
use silkenweb::{
    elements::{button, div, p},
    mount,
    signal::Signal,
};

fn main() {
    let count = Signal::new(0);
    let set_count = count.write();
    let inc = move |_, _| set_count.replace(|&i| i + 1);
    let count_text = count.read().map(|i| format!("{}", i));

    let app = div()
        .child(button().on_click(inc).text("+"))
        .child(p().text(count_text));

    mount("app", app);
}
```

## Quick Start

```bash
rustup target add wasm32-unknown-unknown
cargo install trunk wasm-pack
cargo install wasm-bindgen-cli --version 0.2.73
cd examples/counter
trunk serve --open
```

## Learning

- [Learning Silkenweb With Entirely Too Many Counters]https://silkenweb.netlify.app/
- Check out the [examples]https://github.com/silkenweb/silkenweb/tree/main/examples folder