- Implement the main logic.
- Virtual DOM constrution and reconciliation.
- Flex logic.
- Event logic.
- Write initial documentation.
- Readme.
- Top-level doc page.
- Writing a component.
- All symbols (types, traits, functions, etc).
- Write tests.
- Basic constructors.
- compute_diff algorithm.
- Event handling.
- Widget mutation.
- Add integration test using all components, and snapshot-test the return values of every method.
- Add integration test for use_metadata and get_local_state.
- Add TextBox element.
- Add testing backend to druid for unit tests.
- Add dynamically-typed BoxDynElement (probably using
std::Any
). - Rework MockState.
- Fix component macro error messages.
- Make the API more idiot-proof (eg look at error messages when a component is written incorrectly).
- Remove component_caller.
- Refactor ElementList
- Allow duplicate keys.
- Refactor compute_diff (look up diff algorithms?).
- Refactor event handling.
- Rework internals to allow event chaining, improve performance.
- Test event chaining.
- Write
#[derive(Event)]
macro. - Add Event trait.
- 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.
- Rewrite tutorials.
- Rewrite Element doc.
- Explain event system.
- Document ElementExt.
- Add "speedrun" doc.
- Use
#[doc = include_str!]
once feature gets stable. - Move tutorials to inline doc.
- Notes on the limitations of static typing, hence why we use Option and Either.
- Explain ParentEvent system.
- Explain the notion that some elements represent 0, 1 or n flex items.
- Add note that flex widget is both a flex item and a container.
- Document event chaining.
- Add screenshots to doc.
- Rewrite ARCHITECTURE.md
- Add styling elements.
- Background and borders.
- Text font, style.
- Margins.
- Add Spacer element (from druid).
- Refactor with_flex_params; use
From<f64>
??
- Add proc-macro ui tests.
- Remove some cloning.
- Add macro check that ComponentOutput is present if use_metadata is.
- Add WithKey type and
WidgetExt.with_key
method. - Implement two-way bindings.
- Figure out API.
- Check out SizedBox (?).
- Add get_local_state_with_default.
- Have MockComponent actually implement Component.
- Add tests for identical update (eg
Label("Hello")
thenLabel("Hello")
again). - Write some benchmarks.
Also, not a specific item but something that needs to be done continuously:
- Add new basic elements and useful components.
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.
- Add integration tests based on visual snapshots.
- Add even more tracing/logging.
TODO
TODO