panoramix 0.0.3

A prototype implementation of reactive UI in rust
Documentation
# Roadmap

## Short term

- [X] Implement the main logic.
  - [X] Virtual DOM constrution and reconciliation.
  - [X] Flex logic.
  - [X] Event logic.
- [X] Write initial documentation.
  - [X] Readme.
  - [X] Top-level doc page.
  - [X] Writing a component.
  - [X] All symbols (types, traits, functions, etc).
- [ ] Write tests.
  - [X] Basic constructors.
  - [X] compute_diff algorithm.
  - [ ] Event handling
    - [ ] Test event chaining
  - [ ] Widget mutation.
  - [ ] Add integration test using all components, and snapshot-test the return values of every method.
- [X] Add TextBox element.
- [ ] Add testing backend to druid for unit tests.
- [ ] Add integration tests based on visual snapshots.
- [ ] Write some benchmarks.
- [ ] Add dynamically-typed BoxDynElement (probably using `std::Any`).
- [ ] Add immutable ConstElement.
- [ ] Refactor ElementList to allow duplicate keys
- [ ] Make the API more idiot-proof (eg look at error messages when a component is written incorrectly).
- [ ] Add even more tracing/logging.
- [ ] Write `#[derive(Event)]` macro.
- [ ] Write macro attribute for type-checking components.
- [ ] Refactor event system internals (keep API as-is).
- [ ] Add AnyEvent type.
- [ ] Rework doc
  - [ ] Improve discoverability
  - [ ] Add doc example of element_tuple instantiated with 3 args
  - [ ] Add test that checks that the README and the todo example are identical
  - [ ] Notes on the limitations of static typing, hence why we use Option and Either
  - [ ] Add "speedrun" doc
  - [ ] Explain event system
  - [ ] Explain the notion that some elements represent 0, 1 or n flex items
  - [ ] Add note that flex widget is both a flew item and a container
  - [ ] Use `#[doc = include_str!]` once feature gets stable
  - [ ] Document event chaining
  - [ ] Add screenshots to doc
- [ ] Remove some cloning
- [ ] Remove component_caller
- [ ] Add WithKey type and `WidgetExt.with_key` method
- [ ] Implement two-way bindings
- [ ] Add Spacer element (from druid)
- [ ] Check out SizedBox (?)
- [ ] Refactor with_flex_params; use `From<f64>`??

Also, not a specific item but something that needs to be done continuously:

- Add new basic elements and useful components.

## Medium term

Some cool features I'd like:

- [ ] Add "free-form" mode, that can be integrated into an external main loop (eg for game engines).
- [ ] Implement screenshot generator for examples.
- [ ] Implement accessibility features.

## Long term - Feature parity with React

TODO

## Long term - Debugging framework

TODO