# 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`?? 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