It says Bike 2.0 in the heading, but don’t get too excited!
This demo is rough and limited.
I’m throwing this out now for a few reasons:
- I do think it’s ready for a few eyes
- I’ll be away from the computer for this upcoming school vacation week
- It’s been too long with me working on own, I want to get into a cycle of post an alpha/beta, get feedback every few weeks.
You’ll need to read through all these notes to make any sense of it. Reading through the notes will give a people of what 2.0 will become, it will also give you a chance for very early feedback.
Regarding feedback, not looking for specific bugs, just general thoughts and responses to these notes and direction that I’m taking Bike 2.0. In this release I’m also looking for more details feedback on the theme and stylesheet system.
Get it running notes:
- Launch App
- Open existing document
- Choose Window > Themes > Demo
- Use Outline Indent/Unindent/Move etc commands through keyboard shortcuts
- Use Window > Themes > Open Themes to open the themes folder
- Open the Demo.biketheme in VS Code.
- Edit the index.js stylesheet file and when you save the outline theme should update
Generally this demo should be able to open/save existing Bike files, and that’s about it.
The default demo theme is just a demo with as many switches flipped to the on position as possible. It’s not the proposed look and feel for Bike 2.0.
Some basic things work, but a lot of other basic things do not work. For just a start, there are no visible handles, focus buttons don’t work, most higher level UI’s (like text checking, etc) are not implemented. Scroll animations are a bit broken.
Big picture notes:
The reason for Bike 2.0 is that I ran into problems when I started adding themes and filtering to the Bike 1.0 codebase.
At a very high level the problem was that Bike 1.0 stores your outline as a flat list of lines, and then derives the outline structure from those lines. This made implementing themes and filtering difficult, because they are both very tree structure oriented.
I tried the smart approach of incrementally moving Bike’s design from flat list model to tree model, but each time I tried I would give up after a few days in a sea of code errors.
Instead Bike 2.0 is a new start, rebuilding everything from scratch. This is wonderful fun, but it’s a very slow process. Along the way I’ve had some design thoughts…
Simplifications:
I want to make Bike 2.0 simpler. And in particular I want it to work more like a traditional outliner and less like a text editor.
For example in Bike 1.0 there are two modes, text mode and outline mode. In text mode if you move a line the lines children don’t travel with it, while in outline mode they do.
In Bike 2.0 commands always work on the outline structure. So when you Outline > Move up you’ll always get the same behavior. Child rows move with parent.
This is simpler because now there’s one way of working with the outline. It’s also simpler because the old way had two ways to work with the outline, and then it had exceptions to those rules. For example in text mode rows would travel with a parent if the parent was collapsed.
This simplification is a big break from 1.0. And not quite set in stone, but pretty close.
Another change towards traditional outliner and away from text editor is the selection model. In Bike 1.0 you could select from any character to any character in the outline… like a text editor.
In Bike 2.0 selection you select characters in a row, but once you extend the selection to another row the you start selecting at the row level. (Use left or right arrow) key (or escape) to go back to character level editing.
Note that the current transitions between row level selection and text selection will be improved. I think it can be a pretty seamless interaction when fully implemented.
Animations:
I’ve spent a lot of time trying to get animations right in 2.0. In 1.0 the animations are good, but there is a lot of smoke and mirrors. It looks like an outline structure, but what you see on screen is really just a flat list of rows. There is no hierarchy.
In Bike 2.0 the outline is represented as a true hierarchy of layers that mirror the outline structure. So a parent row really does contain it’s child rows. This means it’s now possible to draw branch container boundaries, and generally provide many more styling opportunities for themes.
The focus in/out animations are also much improved. In Bike 1.0 they were more of a transition from one set of rows to another. It looked like you were zooming into a branch, but that was smoke and mirrors.
In Bike 2.0 the view is always displaying the entire outline. Focusing doesn’t recreate a new set of rows, instead it’s more like moving a camera to focus into a specific part of the outline.
When you focus in notice that you can still see (dimmed) the higher level (not focused) rows of your outline. This behavior is controlled by the stylesheet. You could completely hide those rows or make them more visible through the stylesheet.
This new approach for focus makes for cleaner animations. I think it can also make focus in/out a little less confusing, since (depending on theme) you can always have a hint of where you are.
One more thing to try with focus in/out is that now if you focus into a folded branch it will expand automatically. And then automatically collapse when you focus back out. Finally, and it feels quite nice with the animations I think.
A big part of the trick with all of the above features was to keep Bike efficient while supporting these features. It can still open much bigger files than most other outliners.
Last, some parts of animation system are still very rough. For example I haven’t implemented final caret movement and typing animations yet.
Themes:
Themes are a big part of this demo, but the basics are covered above. Also each .biketheme has a index.js
file which defines the theme’s stylesheet. And then a types.ts
file which defines the API and theme documentation. Make sure to check out the types.ts
file!
The themes support is also just preliminary. For example right now you can’t theme any of the UI controls. But if you are the type of person who wants to make themes please poke around and let me know what kinds of things you would like to do that you can’t in the current setup.
Starting Bike 2.0 feedback cycle today. Let me know what you think.