Text input is a first-class feature of XenoAtom.Terminal.UI: you get a shared editing engine across multiple controls, with selection, clipboard, undo/redo, scrolling, integrated Find/Replace, and code-oriented syntax-highlighting hooks.

These controls share the same editing engine and most of the same user experience:
Other controls also use the same infrastructure for parts of their UX:
Across the editors above you typically get:
Ctrl+Z / Ctrl+R) integrated with programmatic edits.ScrollViewer via IScrollable.CodeEditor exposes Go To Line / Column / Position helpers plus bindable Line / Column status values.Most controls expose their shortcuts as commands, so a focused editor can be discoverable via a CommandBar.
Text editors support undo/redo:
Ctrl+Z: undoCtrl+R: redoSee Undo/Redo.
TextArea and CodeEditor include a built-in Find / Replace UI powered by the reusable SearchReplacePopup:
Ctrl+F: FindCtrl+H: ReplaceThe same popup component is also used by other controls (for example, LogControl hosts it in Find-only mode).
Find/Replace is hosted by the editor control and rendered as a window-layer popup in fullscreen apps. The host keeps the popup
anchored to the editor and forwards query/navigation updates through an ISearchReplaceTarget.
Text editors that can extend beyond their viewport implement IScrollable, so they integrate naturally with ScrollViewer:
new ScrollViewer(new TextArea(longText))
The text editing stack is split into a few focused parts:
TextEditorBase: shared control base for editors (focus, commands, cursor integration).TextEditorCore: editing behavior (navigation, selection, word operations, clipboard, undo/redo, search matches).CodeEditor: code-oriented chrome built on the same engine, adding margins, line numbers, current-line treatment, and line-relative syntax highlighting.ITextDocument: document abstraction for storage and edits.
TextDocument: a simple document implementation.DynamicTextDocument: bridges a bindable Text property to the editor engine.ScrollModel: viewport/extent model used by IScrollable controls and ScrollViewer.For large documents, the multi-line editor path caches per-line widths and wrap metadata, updates those caches incrementally after document changes, and renders only the visible rows instead of rescanning the entire document on each frame. Extremely long wrapped lines use sparse row checkpoints plus a small reusable cache of fixed-size wrapped-row blocks, so keyboard navigation, PageUp/PageDown, mouse wheel scrolling, and scrollbar drags can jump quickly without materializing every wrapped row offset or allocating per-row navigation state while moving through the document.
Mouse-wheel scrolling is handled by hosting scrolling containers such as ScrollViewer; text editors themselves do not
consume wheel input directly.
The caret is rendered using the terminal cursor (not a fake reverse-video “block” cell), which keeps rendering stable and works well with accessibility settings in many terminals.