Changelog
All notable releases of Termina.
# Termina 0.13.0
- Color.Lerp — Linear RGB interpolation between two colors
- Gradient — Immutable multi-stop gradient with color stop interpolation
- GraphNode — Reactive, self-invalidating layout node for live scrolling graphs in four styles:
# Termina 0.12.1
- WithFooter and WithFooterColor API on ModalNode ([#292](https://github.com/Aaronontheweb/termina/pull/292))
- New WithFooter(string) and WithFooterColor(Color) builder methods on ModalNode for adding a footer line to modal dialogs
- Footer renders on the bottom border line with automatic text truncation to fit modal width
- Optional color customization via WithFooterColor — falls back to reset terminal colors when not specified
# Termina 0.12.0
- FilePickerNode for interactive file/folder selection ([#284](https://github.com/Aaronontheweb/termina/pull/284))
- New layout node providing an interactive terminal-based file picker with breadcrumb navigation, fuzzy filtering, and configurable selection modes (Files, Directories, or All)
- Supports both single-select and multi-select modes with Space/Enter keyboard shortcuts
- Hidden file toggle and glob-based file filters via FileSystemName.MatchesSimpleExpression
# Termina 0.11.1
- CSI A/B no longer misrouted as wheel events in terminals that ignore DECCKM ([#280](https://github.com/Aaronontheweb/termina/pull/280))
- CsiFunctionalDecoder unconditionally treated bare CSI A/B as alternate-scroll wheel events when Kitty was inactive, assuming the terminal honored DECCKM (?1h) and sent real arrows as SS3. Terminals that ignore DECCKM (VHS, some PTY wrappers) keep sending arrows as CSI form, so arrow navigation broke silently.
- Added a DeckmConfirmed flag to TerminalModeContext. The parser sets it when it first sees an SS3 arrow key — proof the terminal honored DECCKM. CsiFunctionalDecoder only routes CSI A/B as wheel after this confirmation; until then they are keyboard arrows.
- Narrowed the DECCKM confirmation to SS3 arrow keys only (A/B/C/D). SS3 F1-F4 (P/Q/R/S) use the SS3 encoding as a VT220 legacy independent of DECCKM and no longer false-positive the detection.
# Termina 0.11.0
- Added an internal semantic input pipeline that decodes terminal protocol input before adapting back to Termina's existing public input events.
- Extracted protocol-specific decoders for SGR mouse input, SS3 keyboard input, CSI functional keys, legacy CSI keyboard sequences, Kitty keyboard formats, bracketed paste, and unknown-sequence fallback handling.
- Preserved the existing public input surface: KeyPressed, MouseScrollEvent, PasteEvent, and ResizeEvent.
- Expanded Linux terminal conformance coverage for baseline PTY, tmux, kitty, and kitty plus tmux scenarios.
# Termina 0.10.2
- Unrecognized CSI tilde sequences now flush correctly (#232)
- Fix for [5~ (PgUp), [6~ (PgDn) and other bracketed CSI sequences being silently swallowed by the escape sequence parser. These were causing the parser to stay stuck in InBracketSequence mode, blocking all subsequent input. Sequences now flush as raw KeyPressed events for application handling.
- Legacy CSI tilde key decoding — Maps legacy CSI tilde key sequences to semantic ConsoleKey events while preserving unknown tilde raw flush behavior.
- TextInputNode placeholder background color fixed (#233)
# Termina 0.10.1
- RebuildBuffer correctly inserts a newline before block segments after Clear() ([#224](https://github.com/Aaronontheweb/termina/pull/224))
- Pre-fix, after Clear() reset HasContentOnCurrentLine, the first re-added block segment skipped its leading newline during rebuild, causing block content to collide with prior content on the same line.
- Moves the block-newline check inline, evaluated *after* prior elements are re-appended so the buffer state reflects the in-progress reconstruction.
- Animation callbacks now hold _contentLock ([#225](https://github.com/Aaronontheweb/termina/pull/225))
# Termina 0.10.0
- ReactivePage.InvalidateLayout() for runtime layout rebuilds ([#220](https://github.com/Aaronontheweb/termina/pull/220))
- New protected void InvalidateLayout() method on ReactivePage<TViewModel> that discards the cached layout tree and rebuilds via BuildLayout()
- Solves the problem of layout values "baked in" at first navigation time (e.g. SizeConstraint.Auto records) being permanently frozen — consumers can now trigger a full rebuild when external state changes (terminal resize, etc.)
- Preserves user subscriptions, key bindings, and focus when the target node survives the rebuild
# Termina 0.9.0
- SelectionListNode pre-selection via WithHighlightedIndex() ([#213](https://github.com/Aaronontheweb/termina/pull/213))
- New fluent method WithHighlightedIndex(int index) allows callers to pre-select a highlighted item in SelectionListNode by index at construction time
- Useful for dialogs that should open with a sensible default already highlighted
- SelectionListNode full-height mode via WithFillHeight() ([#210](https://github.com/Aaronontheweb/termina/pull/210))
# Termina 0.8.0
- CopyableTextNode with terminal clipboard support ([#179](https://github.com/Aaronontheweb/termina/pull/179))
- New CopyableTextNode component for selectable, copyable text with keyboard-driven selection
- Configurable copy key bindings via CopyKeyBinding
- Terminal clipboard integration using OSC 52 escape sequences with automatic tmux transport fallback