Skip to content

Latest commit

 

History

History
93 lines (86 loc) · 5.19 KB

TODO.md

File metadata and controls

93 lines (86 loc) · 5.19 KB

TODO

  • == release 1.0 ==
  • Fix bugs in the 1.0 release: https://github.com/blaix/gren-tui/issues?q=is%3Aissue+is%3Aopen+label%3Abug
  • Use new task-based Stream, etc. to add guarantees (start with Cmd.batch usage where order is important)
  • Decouple view from update (just render like a game loop) to reduce complicated sequencing logic and fix rendering bugs
  • Pull ansi into separate package
  • Move examples under next/ (not bothering with busted v1)
  • Publish gren-array2d
  • Add arrow-key-movement example (game)
  • Remove Ansi from README example (it's a separate package now)
  • Replace vendored node/core packages after 6/24 release
  • == Release 2.0 ==
  • Add Escape variant to Input
  • Add Tui.exit that returns a task that undoes formatting and shows the cursor
  • Add UI module with elm-ui inspired row/col elements
  • Fix unit tests
  • Fix?: Compile failures return 0 status, making things hard to test
  • unit tests with gren-test
  • TODO comments
  • Docs
  • Remove charGrid and paint example (realized when writing docs this isn't ready)
  • Update CHANGELOG
  • Overhaul the README for v3
  • == Release 3.0 ==
  • Animated Demos
  • Video series building https://github.com/blaix/tooter
    • Use this to drive gren 0.5 upgrade and gren-tui 4.0 release
    • add Backspace input
  • Create a starter repo using github templates
  • Add gren issue for js errors when run in pipeline. See convo: https://discord.com/channels/1250584603085766677/1301468632735551549/1301665363561549886
  • try VHS from charm
  • post snippets of view model and update in README
  • experiment: web renderer for UI
  • Easy way for people to try gren-tui / run the examples. devbox? devbox run [example name]? template repo or init script?
  • Listen to ratatui episode of developer voices and check out the links. eg https://github.com/junkdog/tachyonfx
  • Starter repo or project initializer (add gren run instead of publishing separate npm package?)
  • Publish post or video making a dungeon crawler. Look at the UI of Robin's elm-warrior :)
  • Look into performance on the old paint example. Think it's input handling. See [[#performance-notes]]
  • defineProgram withOptions or similar for things like exitOnEscape, etc.?
  • some kind of Tick option for updating components (select, etc)?
    • see Pages.Script.Spinner withStep and runSteps functions and similar from elm-pages
  • Take another pass at reviewing lipgloss and bubbles
  • More Attributes:
    • padding
    • margin
    • centered, centerX, centerY
    • alignRight, alignLeft, alignTop, alignBottom
  • More borders (see lipgloss and https://en.wikipedia.org/wiki/Box-drawing_characters#Box_Drawing)
    • dotted
    • dashed
    • ascii (+--+)
    • custom borders
    • grid/table with cell borders
  • borderLeft, Top, etc? (for dungeon walls?)
  • More colors. 256 support?
  • Built-in UI components (will require update calls, see Bubbles source code for reference):
    • Tabs (see lipgloss)
    • Prompt
    • Choice
    • LoadingSpinner
    • Animation
  • Consider width, minWidth, maxWidth (what about wrapping, overflow?)
  • Try gren-tui for prettynice cli again (with load spinner widgets...?)
  • Test an app that has a conditional subscription
  • How to make log messages visible (Debug.log won't work with gren-tui views)? add file logging?
  • How to have a nice way to read a whole line of input, even in raw mode?
    • readline support?
  • Is this anything? https://nodejs.org/en/learn/asynchronous-work/the-nodejs-event-emitter
  • Ongoing: See https://github.com/blaix/gren-tui/issues
  • Consider: conditoinally running gren-tui. For example, a script that could run as part of a build pipeline, but with an interactive frontend if running in an interactive terminal. Currently gren-tui just exits with an error if there is no tty (simulate this by triggering a gren-tui app via child_process in a node shell).

Performance notes

Profile with: node --inspect then open chrome://inspect

Compare benchmarks by creating two small programs (or one program with command line flags) to exercise different implementations and compare with: hyperfine 'node app snippetA' 'node app snippetB'

Things to try: