Skip to content

Latest commit

 

History

History
93 lines (82 loc) · 3.27 KB

ROADMAP.md

File metadata and controls

93 lines (82 loc) · 3.27 KB

Roadmap

Short term

  • 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") then Label("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.

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.
  • Add integration tests based on visual snapshots.
  • Add even more tracing/logging.

Long term - Feature parity with React

TODO

Long term - Debugging framework

TODO