Rand Stats

Terminal::Widgets

zef:japhb
Revision history for Terminal-Widgets

0.1.5  2024-04-01T00:35:56-07:00
  [Bug Fixes]
  - Ignore Input events that change state when the Input is disabled, but
    continue to allow navigation events regardless

  [Cleanup]
  - Fix and clarify a few comments
  - Remove unused imports in several files

  [Debugging]
  - Show widget dirty state in Widget.gist

  [Examples]
  - Add a heat-ping example based on the new SmokeChart widget
  - Add proper log scrolling to the basic form example

  [Functionality]
  - Support for scrollable, ragged, lazy, span-styled buffers via new
    Scrollable, ScrollBar, and SpanBuffer roles
  - New HScrollBar and VScrollBar widgets with full symbol set support and
    both keyboard and mouse event handling
  - Experimental support for slice-addressed visualizations
  - New SmokeChart visualization widget
  - Support overriding default behavior of Input::Text.finish-entry
  - Add content-width and content-height helper methods to Widget

  [Performance]
  - Actually optimize copies and prints based on real dirty areas, rather than
    always assuming every widget is always fully dirty
  - Lazily cache span width in Span itself

  [Refactoring]
  - Refactor Viewer::Log in terms of SpanBuffer, vastly simplifying it


0.1.4  2024-03-02T14:00:05-08:00
  [API Simplification]
  - Provide helper methods for cleaner form group handling
  - Allow App.add-terminal to set locale and ui-prefs as well

  [Bug Fixes]
  - Silence an uninitialized warning in Menu icon handling (when a particular
    menu item doesn't have an icon associated with it)
  - Much more correct min width defaults for SingleLineInput layouts

  [Debugging]
  - Improve Input.gist-flags for glanceability

  [Examples]
  - Demo group introspection in form example

  [Functionality]
  - All Inputs will set their hint (if any) when focused
  - Initial sketch of ColorSet and ColorTheme functionality; API expected to
    change in the future, especially for theme variants and variant selection
  - Define a number of terminal capability variants on a default dark/cool theme
  - Add Tango-approximating variants of default theme, for a less harsh look
    than the highly saturated xterm-style variants
  - Convert Input widgets to use ColorSets instead of hardcoding
  - Add additional color selectors to configure additional UI elements
    (hint, link, prompt, cursor)
  - Allow Input activation flash to be turned off (activate/deactivate still
    _happen_ in that case, but don't cause a widget to flash when they do)

  [Testing]
  - Update GitHub Workflow definition to clear deprecation warning

  [Refactoring]
  - Refactor min width default handling for SingleLineInput layouts
  - Move hint handling from Input::Menu to Input base class

  [Layout Styles]
  - Pass requested layout style info into default-styles as well, so
    default-styles can build out the implications of requested styles


0.1.3  2024-02-22T23:38:50-08:00
  [Debugging]
  - Add tunable Widget compositing debugging
  - Make ACTIVE state more obvious in Input.gist-flags

  [Functionality]
  - Add support for menu item icons


0.1.2  2024-02-21T20:44:08-08:00
  [Bug fixes]
  - Update META6 to require latest versions of dependencies, and add a missing
    dependency (Text::MiscUtils)


0.1.1  2024-02-21T18:35:46-08:00
  [API Changes]
  - First *experimental* version of translatable UI elements; see Functionality
  - This release should still be compatible with existing 0.1.0 code, but
    future releases in the 0.1.x cycle may not be
  - Will almost certainly require some additional changes to work seamlessly
    with span tree coloring and proper interpolations

  [Bug Fixes]
  - Fit styles example into 80 columns (it was not intended to demonstrate
    overflow behavior and doesn't handle it well)

  [Functionality]
  - Translatable string markup operators added for lightweight code changes
  - Translations handled by Locale object, which is tied to the Terminal
  - Terminal passed as context to Layout objects, allowing the Locale
    to influence layout measurements
  - Terminal capabilities and locale can now be updated on the fly (causing
    a screen refresh)
  - Currently works with Labeled Input, Menu, and PlainText widgets
  - PlainText widgets can optionally add soft-wrapping behavior in addition
    to respecting hard-wrapped lines in the input text as before
  - Window title also translated (and sanitized for security reasons)

  [Refactoring]
  - Refactor debug-grid and improve its empty grid handling


0.1.0  2024-02-12T17:19:15-08:00
  [API Changes]
  - Begin process of rationalizing refresh handling for an easier mental model
    and fewer redundant or missing refreshes
  - Create a new global LayoutBuilt event, and issue it in TopLevel.relayout
    to notify widgets that the overall layout has finished building (and thus
    all widgets should now exist and be nominally initialized)

  [Functionality]
  - Add initial support for styling of span trees
  - Add styled span tree support to Viewer::Log

  [Examples]
  - Demo span-styled log entries and layout gists in form example

  [Refactoring]
  - Massive refactor of Viewer::Log to use LogEntry objects


0.0.13  2024-02-12T16:54:00-08:00
  [Bug Fixes]
  - Fix precedence thinko in menu width detection that caused some menus to
    overdraw their right boundary
  - Invalidate grid-string cache for full-screen composites, fixing a visual
    bug seen when switching back to a previously-viewed screen
  - Compute fixed layouts for widgets created statically from an existing grid
  - Add stub for build-layout method to clarify that TopLevel requires it

  [Debugging]
  - Show when a Widget is focused in Widget gists
  - Add a debug-grid method to Widget for dumping a widget's grid contents
    as an ANSI-colored snapshot, rather than as an array of arrays of Cells


0.0.12  2023-11-26T21:03:49-08:00
  [Bug Fixes]
  - Select correct item when using mouse-click selection on a scrolled Menu
  - Allow Text input to receive focus via mouse click
  - Make sure TopLevel's .layout object knows its own .widget object (the
    original TopLevel itself)
  - Build *base* Widget objects as internal widget tree nodes if requested
    by the layout tree
  - Draw framing on *base* Widget objects also, not just subclasses
  - Make sure Style.clone calls Style's TWEAK, just as for new/bless
  - Sort unset layout children by MarginBox size, not default sizing box
  - Simplify and fix propagate-xy box model corrections
  - Fix correction handling in child layout share computations

  [Examples]
  - Update styles example to include box model (framing) styling as well

  [Refactoring]
  - Factor color-merge() helper out to ::Utils::Color
  - Refactor, improve, and expand gist logic for both Widget and Layout objects
  - Clarify layout computation via change of variable


0.0.11  2023-11-12T17:11:18-08:00
  [Bug Fixes]
  - Prefer to autofocus on widgets that process input (falling back to widgets
    that are able to handle events of any type, as before)

  [Examples]
  - Add an example showing how to move back and forth between form pages


0.0.10  2023-11-12T14:53:56-08:00
  [Bug Fixes]
  - Fix layout bug causing max limits to be ignored when allocating extra space
    to undersized child layout nodes

  [Examples]
  - Add a scrolling, colored, responsive-layout menu example

  [Functionality]
  - Support autoscrolling Menu input widgets
  - Support per-menu-item colors


0.0.9  2023-11-08T15:34:35-08:00
  [Bug Fixes]
  - Handle menu items with no hotkeys

  [Examples]
  - Add a simple text, border, and layout style demo

  [Functionality]
  - Allow override of Menu hint target
  - Add a custom gist method for Menu


0.0.8  2023-09-03T20:24:54-07:00
  [Bug Fixes]
  - Minor tweaks, fixes, and error message improvements

  [Functionality]
  - Add missing right/bottom-correction BoxModel multis
  - Track timing for app bootup and terminal initialization
  - Add ::Progress::Tracker role to unify interface to progress tracking widgets
  - Support loading screens with optional progress tracking display
  - Allow layout objects to specify a share weight for distributing space
  - Add spacer-only layout leaf node for self-documenting convenience

  [I18n]
  - Stub in ::I18N::Locale class and ensure each Terminal gets one

  [Performance]
  - Various minor micro-optimizations

  [Quality]
  - Improve quality and performance of gray-color() utility multis
  - Better represent uneven xterm-256 color cube mapping in rgb-color() utility
    multis, adding rgb-color-flat() multis to use the old flat-mapping formulae

  [Refactoring]
  - Move all color utilities in ::Utils into a separate ::Utils::Color module
  - Move relayout phases from Terminal to TopLevel
  - Move TW_* environment var handling to ::App.add-terminal
  - Significantly refactor and simplify App booting (many commits), resulting
    in adding separate ::Simple::App class as well


0.0.7  2023-06-24T22:17:50-07:00
  [Bug Fixes]
  - Make sure ::Input::Text uses scroll markers matched to terminal caps

  [Documentation]
  - Add doc with ruminations on styles

  [Functionality]
  - Add right-correction and bottom-correction methods to BoxModel
  - Rewrite Widget compositing to clip to parent's content area

  [Packaging]
  - Bump dependencies

  [Refactoring]
  - Move ::TerminalCapabilities out to its own separate distribution,
    Terminal::Capabilities


0.0.6  2023-06-08T22:12:17-07:00
  [Bug Fixes]
  - Correct width and height when building objects
  - Fix thinkos in distributing unassigned height/width in layouts
  - Comment out seemingly-redundant callsame
  - Fix WHY for ::Input::Text

  [Examples]
  - Update form example with framing styles

  [Functionality]
  - Expand BoxModel and make it more usable
  - Add `draw-framing` and related methods to base Widget class
  - Draw and account for framing for all existing widgets

  [Refactoring]
  - Move BoxDrawing consumption to base Widget class


0.0.5  2023-06-04T12:24:07-07:00
  [Functionality]
  - Support terminal capabilities and envvars for them in ::App
  - Adjust input widget rendering based on available symbol set
  - Add initial sketch of ::I18N::Translation

  [Packaging]
  - Fix copyright years


0.0.4  2023-05-21T14:56:20-07:00
  [Functionality]
  - Add PlainText widget for simple text blocks
  - Add Input::Menu widget for trivial menus
  - Add 'highlight' as a themable color for Input widgets
  - Allow layout widgets to dynamically generate their default styles
  - Provide symbol-set helper routine for terminal capabilities

  [Refactoring/Cleanup]
  - Reduce boilerplate in building layout and widget trees
  - Remove commented-out code

  [Testing/CI]
  - Upgrade to checkout@v3 to avoid CI warning


0.0.3  2023-05-12T21:03:44-07:00
  [Bug fixes]
  - Prevent bubble-up event duplication

  [Functionality]
  - First bits of Widget dirty area handling
  - Add initial terminal capabilities tracking
  - Add initial Unicode symbol set variants
  - Add RGB -> Luma/grayscale conversion utils
  - Add convenience method for finding widget's toplevel's terminal


0.0.2  2022-08-09T18:14:58-07:00
  [Bug fixes]
  - Return Empty from Simple::TopLevel.initial-layout stub
  - Remove existing content in Input::Text.reset-entry-state
  - Don't send events to children that can't understand them
  - Recalc coordinate offsets even for unparented Widgets

  [Functionality]
  - Add a Terminal.has-initialized Promise
  - First bits of Z-order support for Widgets (API changes expected)


0.0.1  2022-07-23T16:44:48-07:00
  - Initial proof-of-concept version