This is the list of controls planned for the core XenoAtom.Terminal.UI library. These are prioritized based on general usefulness and implementation complexity. The goal is to deliver a solid base set of controls that cover most app needs while keeping the core library lightweight and maintainable.
Once a control is completed, test have been added and it has been added to the FullscreenDemo app, it can be checked off the list.
Following this list, you will find compact specs for high and medium priority controls to guide implementation.
| Done | Priority | Missing component | Category | What it unlocks | Why it’s worth it |
|---|---|---|---|---|---|
| ✅ | High | Rule / Divider | Layout/visual | Section separators | Ubiquitous readability win |
| ✅ | High | Markup element | Content | Easy rich text output via AnsiMarkup | Low effort, high payoff across UI |
| ✅ | High | Slider | Input | Adjust a value within a range | Common control; distinct semantics from scrollbar |
| ✅ | High | HSplitter / VSplitter (interactive) | Layout/input | Mouse + keyboard resizing of panes | Huge fullscreen UX win; enables IDE-style layouts |
| ✅ | High | Explicit Scrollbar widget | Scrolling | Visible scroll affordance | Immediate UX improvement |
| ✅ | High | Select / Dropdown | Input | Compact single-choice | Common in forms/settings |
| ✅ | High | SelectionList (multi-select list widget) | Input | In-layout multi-select | More app-like than prompts |
| ✅ | High | Header / Footer (app chrome) | App chrome | Key hints, status, breadcrumbs | Better whole-app structure |
| ✅ | High | TextArea (multiline editor) | Input | Multi-line editing | "Real app" workflows beyond TextBox |
| ✅ | High | TreeView | Navigation | Hierarchical navigation | Big UX upgrade over flat lists |
| ✅ | High | TooltipHost / Tooltip | Overlays | Contextual help everywhere | Modern UX + pairs well with complex UIs |
| ✅ | High | BreakdownChart (segmented bar) | Visualization | Proportional parts of a whole | Great dashboards + interactive UX |
| ✅ | High | Inline prompt API | Input/API | Interactive prompts (inline) | Great CLI UX without full apps |
| ✅ | High | ColorPicker | Input | Picking colors + palettes | Essential for theming/tools + great demo value |
| ✅ | Medium | LoadingIndicator / Spinner | Status | Busy state (unknown duration) | Complements ProgressBar |
| ✅ | Medium | Collapsible / Accordion | Layout | Progressive disclosure | Keeps screens navigable |
| ✅ | Medium | Advanced Grid Layout | Layout | 2D composition for forms/inspectors/dashboards with consistent alignment | "Killer" layout that removes deep nesting and covers most real screens |
| ✅ | Medium | MaskedInput (password/secret) | Input | Auth + secrets | Often needed early |
| ✅ | Medium | OptionList (fast menu list) | Navigation/input | Command menus/quick pickers | Base for palettes/menus |
| ✅ | Medium | Menu | Navigation/input | Full menu | Menu |
| ✅ | Medium | Command palette / quick open | Navigation/input | Searchable action launcher | Great UX for larger apps |
| ✅ | Medium | Switch (toggle) | Input | Modern toggle UI | Nice settings affordance |
| ✅ | Medium | Sparkline | Visualization | Tiny trends | High value / low scope |
| ✅ | Medium | Basic charts (bar/line) | Visualization | Dashboards/telemetry | Highly desirable |
| ✅ | Medium | LogControl (scrolling log viewer) | Status/diagnostics | Live logs with search + copy | Common need for apps, progress, and debugging |
| ✅ | Medium | Links (clickable/open URL) | Interaction/content | Hyperlinks in terminal | Terminal support varies |
| ✅ | Medium | ContentSwitcher (view routing) | Layout/state | Swap views without rebuild | Great for navigation/wizards |
| ✅ | Low | Toast / Notification | UX feedback | Non-blocking feedback | Modern UX; avoids modal spam |
| ⬜ | Low | Digits / KPI big-number | Visualization | Dashboard counters | Mostly polish |
| ⬜ | Low | Placeholder / empty-state widget | UX | No-results/loading states | Polish; easy to fake |
| ✅ | Low | Figlet / big text | Visual | Banners/headers | Fun, rarely essential |
| ✅ | Low | Canvas / pixel surface | Visualization | Images/advanced plots | Bigger scope; later |
| ⬜ | Low | DirectoryTree / File picker | Navigation | File browsing | Popular in tool-like TUIs |
| ⬜ | Low | Calendar widget | Visualization/productivity | Schedules/date picking | App-dependent |
| ⬜ | Low | Log view (RichLog / styled log) | Diagnostics | Streaming logs + scroll + styling | Huge value for devtools/ops TUIs |
| ⬜ | Low | Structured text viewer (syntax + JSON) | Content | Inspect JSON/configs | Great for tooling |
| ⬜ | Low | DockWorkspace (dockable panes + floating windows) | Layout/windowing | Rearrangeable panes | Bigger feature, strong differentiator |
These controls will require additional dependencies, so they will be delivered as separate add-on libraries that depend on XenoAtom.Terminal.UI. This keeps the core library lightweight for users who don't need these features.
| ⬜ | Component | Depends on | Notes |
|---|---|---|---|
| ⬜ | MarkdownViewer | Markdig (or Markdown stack) | Keep core dependency-free; integrate via core rich-text spans + add-on renderer. |
Beyond the following specs, if there are improvements or features that would make sense for a control based on your experience implementing it, feel free to add them.
Select<T> with Items (BindableList<T>), SelectedIndex, ItemTemplate (DataTemplate<T>)XenoAtom.Ansi.IAnsiBasicWriter to implement internally a custom output used by this control to analyze/collect styles parts from plain text.Header (Visual), Content (Visual), IsExpanded (bool), optional ExpandDirection (Down/Up)ExpandedChanged (and/or IsExpanded bindable)Fixed(n), Auto, Star(weight)Min, Max per row/column (applies after sizing mode)RowGap, ColumnGap, container PaddingRow, Column, RowSpan, ColumnSpan attached propertiesRowName[], ColumnName[], and Area mapping for readabilityHorizontalAlignment / VerticalAlignment + optional container defaultsStretch fills cell; respects child min/max sizingAuto tracks sensiblyIsPassword (bool), PasswordRevealMode (Never/WhileFocused/Always), ClipboardMode (Disabled/CopyText)TextBoxStyle.PasswordMaskGlyphTemplate (string), Value (string), IsValid (bool)>, <, !)MaskedInputStyle.DefaultPlaceholderChar and override via template suffix ;cTextBoxStyle (via MaskedInputStyle)OptionListItem with Content (Visual), optional Description (Visual), optional Shortcut (Visual), IsEnabledSelectedIndex bindable; keeps selection visible when scrollingSelectionChanged, ItemActivatedMenuItem tree (header Visual, optional icon Visual, optional shortcut Visual, IsEnabled, optional checked state)MenuBar (top-level) + popup submenu panels; separators supportedAction callback (optionally async later); disabled items ignoredIsOn (bool), optional Content (Visual), optional IsThreeState laterToggled (and/or IsOn bindable)AppendLine(string message)AppendMarkupLine(string markup)AppendMarkupLine(ref AnsiMarkupInterpolatedStringHandler handler)Clear()Search(string searchText)MaxCapacity (int, optional): limits number of retained entries; when exceeded, oldest entries are removed.WrapText (bool): controls whether long lines wrap; affects measurement and vertical extent.12/57 for current match / total matches, or 0 matches)Search(string) sets the current query, computes matches, and highlights them.SearchText (string?) bindable is recommended so apps can drive/search externally if needed.SearchOptions (flags) includes CaseSensitive / WholeWord / Regex.GoToNextMatch() / GoToPreviousMatch() scrolls to the match and sets the active match index.ScrollViewer hosting a virtualized stack of entry visuals (likely a specialized internal list).TextAreaStyle (padding, input fill, focused/hovered states, selection styling), except that placeholder concepts are not relevant.Min/Max (auto-scale by default)BarChart (horizontal/vertical) and LineChart (optionally builds on Sparkline logic)Uri/Href + Content (Visual)OnOpen callback; optional copy-to-clipboard helper actionSelectedIndex/SelectedKey bindableKeepAlive (cache created children) vs recreate on switchSelectionChanged