r3bl_rs_utils 0.9.13

Async Redux library, TUI framework, and useful types
Documentation
┏━━━━━━━━━━━━━━━┓
┃ r3bl_rs_utils ┃
┛               ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
editor engine extras (auto-completion providers):
  ☐ add support for auto completion providers
  ☐ modal dialogs for autocompletion provider, which just use a nested multiline editor component
  ☐ implement auto completion provider for file paths
  ☐ implement auto completion provider for github issues (store creds in env vars)

editor engine extras (search & replace):
  ☐ search & replace
  ☐ text selection & highlighting:
    ☐ add support for text selection highlighting
    ☐ selection, copy, paste

editor engine extras (smart MD editing support like github web app):
  ☐ handle automatically propagating ordered `1. ` & unordered list `- ` like MD editor on github
  ☐ handle automatically propagating `- [ ]` and `- [x]` like MD editor on github

tui components (all implemented w/ editor component):
  ☐ checkbox (single, multi select) implemented w/ editor component (different config options)
  ☐ form implemented w/ editor component (different config options)
  
framework (configurable keyboard shortcuts):
  ☐ a json file w/ keybindings needs to be loaded / stored from `~/.config/r3bl/keybindings.json`
    - https://crates.io/crates/config
  ☐ there should be defaults provided if the file doesn't exist
  ☐ the keybindings should be configurable via the UI (using an editor component)
  ☐ each keybinding is made up of a keyboard shortcut sequence and an "action name"
  ☐ the action name is a string that maps to a function
  ☐ each component or app that deals w/ input events should convert the event into an action
  ☐ all action names go into a global "action registry" along w/ the shortcuts that trigger them

framework (jarvis mode):
  ☐ w/ shortcuts & autocomplete, impl modal to allow user to type a command and have it executed
  ☐ list of available commands come from the global "action registry" w/ its triggering shortcut

framework (save/load buffer to/from file/db):
  ☐ learn surrealdb
    - https://ori-cohen.medium.com/list/surrealdb-deep-dive-ddefbefaf1ef
  ☐ learn terminusdb
    - https://terminusdb.com/blog/terminusdb-internals/
  ☐ keyboard shortcut to save/load buffer
  ☐ persist buffer to file
  ☐ load buffer to file
  ☐ persist buffer to surrealdb
  ☐ load buffer to surrealdb

framework:
  ☐ animation
    - https://github.com/SergioBenitez/Rocket/discussions/1735#discussioncomment-941576
    - https://notado.substack.com/p/do-you-really-need-a-message-queue?sd=pf
    - https://github.com/smallnest/concurrency-programming-via-rust
  ☐ [Filter unsupported graphemes in keypress](https://github.com/r3bl-org/r3bl_rs_utils/issues/26)
  
testing:
  ☐ Write integration test w/ input simulation using [enigo](https://github.com/enigo-rs/enigo)
    - eg: https://github.com/enigo-rs/enigo/blob/master/examples/keyboard.rs
  ☐ [Write tests: rendering, component, etc](https://github.com/r3bl-org/r3bl_rs_utils/issues?q=is%3Aissue+is%3Aopen+label%3Atesting)

cmdr:
  ☐ [Create PRD](https://github.com/r3bl-org/r3bl_rs_utils/issues/39)
    
writing:
  ☐ [RSX & DSL articles](https://github.com/r3bl-org/r3bl_rs_utils/issues/19)
  ☐ [Update DD for editor component](https://github.com/r3bl-org/r3bl_rs_utils/issues/23)
  ☐ [Write DD for render pipeline & paint](https://github.com/r3bl-org/r3bl_rs_utils/issues/37)
  ☐ [Write DD for tui module](https://github.com/r3bl-org/r3bl_rs_utils/issues/41)
  ☐ [Write coding pattern article on OOP -> Rust](https://gist.github.com/nazmulidris/f975795b98bc4573d6a0fb1e9bcca090#no-oop-in-rust)

performance:
  ☐ [Add termion support](https://github.com/r3bl-org/r3bl_rs_utils/issues/24)

multi user editor:
  ☐ editor engine enhancements (multi-user editing):
    - add support for multiple carets & network service providers to move them

vscode ext:
  ☐ write vscode ext to help w/ parsing RSX
    - eg: https://github.com/TechTheAwesome/code-yew-server