| Age | Commit message (Collapse) | Author | 
 | 
FocusElement.isSelected behaves a little bit differently - basically
it's true if the current selected element is that element, OR any of the
ancestors of the current selected element is that element. It's also a
getter, so you can't directly override it (assigning to el.isSelected won't
work).
 | 
 | 
 | 
 | 
 | 
 | 
These are unfortunately based on the assumption that every input is
exactly one character tall, and definitely don't work with horizontal
scrollers, so I had to remove them.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
E.g. if up is pressed in a ListScrollForm, don't tell the parent element
that up was pressed.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
- Whether the cursor is displayed or not is now based on the
  cursorVisible property rather than whether cursorX and cursorY
  are set or not.
- The actual shell cursor is now invisible... this is objectively
  an act of Evil, though! This doesn't look like too hard to
  fix, thankfully.
- A new cleanCursor function has been added to ansi.js.
 | 
 | 
- Button class name changed to Button, from ButtonInput
- Button layouts are now updated with fixLayout, rather than
  automatically when the text property is changed
- Buttons now have a height of 1, so they can generally actually
  be used in layouts
- New example for list form elements
- List form elements let you navigate with up/down (or left/right,
  for horizontal lists)
- List forms now have nextInput and previousInput methods
 | 
 | 
..Obviously this breaks old things (particularly, see changes in
FocusElement).
 | 
 | 
 |