Skip to content

Enum & Type Reference

Quick reference for all public enums and types used in widget props and API calls.

Convention: When a prop table shows a type like ButtonVariant, look it up here.


Text Coordinates

TextPosition

Zero-based logical text coordinate:

FieldTypeNotes
lineusizeLogical line index
columnusizeUnicode-scalar column by default

TextRange

Half-open text range with start: TextPosition and end: TextPosition.

TextEncoding

Column encoding for LineIndex conversions:

VariantMeaning
Utf8Column is a byte offset from the line start
Utf16Column is a UTF-16 code-unit offset from the line start
UnicodeScalarColumn is a Unicode scalar count from the line start (default)

LineIndex

Snapshot helper for converting between canonical byte offsets and TextPosition / TextRange. Rebuild it when the underlying text changes.


UI Snapshots (agent / design review)

UiWidgetKind

Typed widget tag on each UiWidgetDesc entry (Frame, List, Input, …). Implements Display.

UiWidgetDesc

FieldTypeNotes
kindUiWidgetKindWidget type
keyOption<Key>Reconciliation key
rectRectLayout bounds
focused / hoveredboolInteraction state
title / label / valueOption<String>Semantic text
placeholderOption<String>Input placeholder (distinct from label)
value_maskedboolWhen true, value is intentionally omitted
checkbox_stateOption<CheckboxState>Tri-state checkbox value
selected_index / scroll_offsetOption<usize>List/tab selection and scroll
item_labels / total_itemsOption<…>List/table preview; total_items set when labels truncated
child_countOption<usize>Structural containers

UiSnapshot

Combined CapturedFrame + widgets + focus_key / hover_key. Methods: to_markdown(); with ui-snapshot-json feature: to_json(), to_json_pretty(); with ui-snapshot-png feature: to_png(&PngOptions), to_png_default(), try_to_png(&PngOptions), try_to_png_default().

Headless: TestBackend::capture_ui_snapshot() after render(). Live: Context::request_ui_snapshot_to(path) and request_ui_snapshot_to_slot(&UiSnapshotSlot) — delivered after the next paint.

PngOptions (ui-snapshot-png)

Options for CapturedFrame::to_png(&PngOptions) / try_to_png(&PngOptions) and UiSnapshot::to_png(&PngOptions) / try_to_png(&PngOptions).

PngOptions and PngTextRenderer are exported from the crate root, not the prelude:

rust
#[cfg(feature = "ui-snapshot-png")]
use tui_lipan::{PngOptions, PngTextRenderer};
FieldTypeDefaultNotes
cell_widthu168Cell width in pixels before scaling
cell_heightu1616Cell height in pixels before scaling
scaleu162Output cell scale multiplier
default_fgColorColor::WhiteFallback when a cell foreground resolves to reset/transparent
default_bgColorColor::BlackFallback when a cell background resolves to reset/transparent/backdrop
render_cursorbooltrueDraw the captured cursor outline when visible
text_rendererPngTextRendererAutoAuto uses fonts when found and falls back to bitmap; Font tries font rendering first with the same fallback; Bitmap forces coarse cell glyphs
font_familyOption<Arc<str>>NonePreferred system font family, e.g. a Nerd Font
font_pathOption<PathBuf>NoneExplicit font file path; takes precedence over family lookup

PngTextRenderer (ui-snapshot-png)

Controls PNG text rasterization: Auto (default) uses fontdue/fontdb to render antialiased real-font text when a system font is found, then falls back to the built-in font8x8 bitmap renderer; Font requests font rendering with the same family/path selection; Bitmap forces deterministic coarse cell rendering. Use font_family or font_path for system/Nerd Font captures, and force Bitmap when stable fallback-style screenshots matter more than glyph fidelity.


Input Keymaps

PanKeymap

Bitflag-style key set for PanView: NONE, ARROWS, VIM, and DEFAULT (ARROWS | VIM). Combine sets with | and test with .contains(...). VIM includes h/j/k/l cardinal panning.


Layout & Sizing

Length

VariantMeaningDefault for
Length::AutoSize to contentLeaf widgets (Text, Button, Input, etc.)
Length::Px(u16)Fixed cell count-
Length::Percent(u16)Percentage of available space (clamped to 0..=100)-
Length::Flex(u16)Proportional share of remaining spaceContainers (VStack, HStack, Frame)

ShrinkPriority

Controls stack shrink order for widgets that opt into custom layout constraints.

VariantEffect
ShrinkPriority::NormalDefault shrink order
ShrinkPriority::FirstYield space before normal siblings, for lower-priority reflowing groups

Align (cross-axis)

VariantEffect
Align::StartTop/left (default)
Align::CenterCentered
Align::EndBottom/right
Align::StretchFill available space

Justify (main-axis)

VariantEffect
Justify::StartPack toward start (default)
Justify::CenterCenter in available space
Justify::EndPack toward end
Justify::SpaceBetweenEven space between children (none at edges)
Justify::SpaceAroundEven space around each child
Justify::SpaceEvenlyEqual space between and around children

Orientation

VariantUsage
Orientation::HorizontalHorizontal divider, horizontal splitter
Orientation::VerticalVertical divider, vertical splitter

Padding

Create via conversion:

rust
Padding::from(1u16)               // uniform: all sides = 1
Padding::from((2u16, 1u16))       // (vertical, horizontal)
Padding::from((1u16, 2u16, 1u16, 2u16))  // (top, right, bottom, left)

Or use the .padding(...) builder which accepts impl Into<Padding>:

rust
.padding(1)           // uniform
.padding((2, 1))      // (vertical, horizontal)
.padding((1, 2, 1, 2))  // (top, right, bottom, left)

FloatRect

Fractional terminal-cell rectangle with x, y, w, and h fields as f32. Transition<FloatRect> interpolates geometry field-by-field; use .to_rect() to round and clamp the current value before passing it to widgets such as Canvas.


Visual Style

BorderStyle

VariantAppearance
BorderStyle::Plain─ │ ┌ ┐ └ ┘ (default)
BorderStyle::Rounded─ │ ╭ ╮ ╰ ╯
BorderStyle::Double═ ║ ╔ ╗ ╚ ╝
BorderStyle::Thick━ ┃ ┏ ┓ ┗ ┛
BorderStyle::LightDoubleDashedDashed light border
BorderStyle::HeavyDoubleDashedDashed heavy border
BorderStyle::LightTripleDashedTriple-dashed light
BorderStyle::HeavyTripleDashedTriple-dashed heavy
BorderStyle::LightQuadrupleDashedQuadruple-dashed light
BorderStyle::HeavyQuadrupleDashedQuadruple-dashed heavy
BorderStyle::Custom { glyphs }Custom glyph set via BorderGlyphs

BorderEdges

VariantEffect
BorderEdges::AllReserve and render all four border edges (default)
BorderEdges::HorizontalCapsReserve only top/bottom rows and render corner caps; left/right content columns are not consumed

Overflow

VariantEffect
Overflow::AutoWidget-specific default overflow behavior
Overflow::ClipClip overflowing content at the end
Overflow::ClipStartClip from the start, keeping the tail visible
Overflow::EllipsisTruncate overflowing content with
Overflow::WrapSoft-wrap content to the available width

CaretShape

VariantDescription
CaretShape::BlockBlock cursor (█) (default - do not set explicitly)
CaretShape::BarVertical bar cursor (│)
CaretShape::UnderlineUnderline cursor (_)

ScrollbarVariant

VariantDescription
ScrollbarVariant::StandaloneSeparate column consuming content width (default)
ScrollbarVariant::IntegratedIntegrate into right border (lazygit-style)

ScrollBehavior

Controls programmatic target scrolling for ScrollView::scroll_to, ScrollView::scroll_to_key, DocumentView::scroll_to_source_line, and TextArea::scroll_to_line.

VariantDescription
ScrollBehavior::InstantSnap directly to the resolved target row (default)
ScrollBehavior::Smooth(TransitionConfig)Animate to the target row using the provided transition timing
ScrollBehavior::SmoothDistance(ScrollDistanceConfig)Animate to the target row with duration derived from row distance

Use ScrollBehavior::smooth_default() for a fixed default transition, or ScrollBehavior::smooth_adaptive() for distance-based timing. Overshooting easing curves are clamped to the start/end row range so terminal scroll offsets do not jitter past their target.

ScrollWheelBehavior

Controls user mouse-wheel scrolling for ScrollView.

VariantDescription
ScrollWheelBehavior::ImmediateApply wheel steps as discrete line jumps (default)
ScrollWheelBehavior::Smooth(ScrollWheelConfig)Add wheel steps to an inertial velocity and decay it over animation ticks

Use ScrollView::smooth_wheel_scroll(true) for the default smooth physics, or ScrollWheelBehavior::smooth(config) when passing physics as data.

ScrollTarget

Semantic target for framework-owned ScrollView navigation.

VariantDescription
ScrollTarget::TopResolve to the current top edge
ScrollTarget::BottomResolve to the current bottom extent
ScrollTarget::Key(Key)Resolve to the first child subtree containing the key
ScrollTarget::KeyOffset { key, offset }Resolve to the first child subtree containing the key, then add offset rows

Use ScrollView::scroll_to_bottom() / scroll_to_top() for edge targets, or ScrollView::scroll_to(ScrollTarget::Bottom) when passing the target as data.

ScrollChildVisibility

Used by ScrollViewportEvent for immediate ScrollView children.

VariantDescription
ScrollChildVisibility::FullyVisibleThe child rect is fully inside the effective viewport
ScrollChildVisibility::PartiallyVisibleThe child is clipped by the effective viewport

ScrollChildExitDirection

Used by ScrollExitedChild when a previously visible immediate ScrollView child leaves the viewport.

VariantDescription
ScrollChildExitDirection::AboveThe child is now fully above the viewport
ScrollChildExitDirection::BelowThe child is now fully below the viewport
ScrollChildExitDirection::RemovedThe child identity is gone or no longer has measurable geometry

ScrollDistanceConfig

Distance-based timing for smooth target scrolling. Duration is computed as min_duration + duration_per_row * distance_rows, then capped by max_duration. Defaults: 120ms minimum, 700ms maximum, 8ms per row, Easing::EaseOutQuad.

FieldDescription
min_durationBaseline duration for non-zero jumps
max_durationCap for long jumps
duration_per_rowAdded duration per resolved target row
easingEasing curve for the generated transition

ScrollWheelConfig

Physics parameters for opt-in smooth wheel scrolling. Defaults: 40.0 acceleration, 12.0 deceleration, 320.0 max velocity, and 0.05 stop velocity, all in content rows/second terms.

FieldDescription
accelerationVelocity impulse added per wheel line
decelerationExponential velocity decay per second; higher values stop sooner
max_velocityAbsolute velocity clamp
stop_velocityVelocity threshold below which inertial scrolling settles

ColorTransform

Used with Style::transform_fg(...) and Style::transform_bg(...).

VariantDescription
ColorTransform::Dim(f32)Dim the resolved color toward black by 0.0..=1.0
ColorTransform::Lighten(f32)Lighten the resolved color toward white by 0.0..=1.0
ColorTransform::Opacity(f32)Compose the resolved paint alpha with the factor; 1.0 keeps the paint, 0.0 resolves to the backdrop for that channel
ColorTransform::OpacityToward { factor, target }Same factor semantics as Opacity, but blend toward target instead of the backdrop
ColorTransform::Tint(Color, f32)Blend the resolved color toward a target color by alpha

Paint

Alpha-aware style-channel color. Style::fg, Style::bg, and Style::underline_color store Option<Paint> and accept Color directly via From<Color>.

VariantMeaning
Paint::Solid(Color)Opaque terminal color or semantic sentinel
Paint::Alpha { color, alpha }Source pigment with 0..=255 alpha, composited before terminal output

Construct with Paint::solid(Color), Paint::rgb(r,g,b), Paint::rgba(r,g,b,a), or Paint::hex("#RRGGBBAA"). Color::Transparent and Color::Backdrop keep their sentinel meanings only when used as solid paint; Paint::Alpha { alpha: 0, .. } is an alpha paint that preserves the backdrop for that channel, not the transparent sentinel.

ThemeRole

Semantic roles resolved by Theme::role(...) and StyleSlot state overlays.

VariantResolves from / purpose
ThemeRole::BaseDefault widget text/surface style (theme.primary)
ThemeRole::AccentInteractive accent/emphasis, falling back to primary foreground
ThemeRole::SelectionSelected/current item style (theme.selection)
ThemeRole::TextSelectionText/range selection style (theme.text_selection)
ThemeRole::UnfocusedSelectionUnfocused selection style; currently follows Selection
ThemeRole::HoverGenuine pointer-hover state (theme.hover)
ThemeRole::DragSourceDrag-source active overlay; currently follows Hover for compatibility
ThemeRole::DropTargetFuture inactive drop-zone affordance; currently follows Hover
ThemeRole::DropTargetActiveCompatible-drag-over-target highlight; currently follows Hover
ThemeRole::FocusFocused widget chrome (theme.focus)
ThemeRole::ActiveActive/current state; currently follows Selection
ThemeRole::ItemHoverPer-row/per-item hover; currently follows Hover
ThemeRole::BorderFrame/divider border role (primary.patch(border))
ThemeRole::DisabledDisabled widget content (primary.patch(muted))
ThemeRole::MutedSecondary content (primary.patch(muted))
ThemeRole::ErrorError/status color
ThemeRole::InputFocusContentFocused text content for Input
ThemeRole::TextAreaFocusContentFocused content for TextArea
ThemeRole::DocumentViewFocusContentFocused content for DocumentView
ThemeRole::HexAreaFocusContentFocused content for HexArea
ThemeRole::HexAreaCursorHex-area cursor style
ThemeRole::TerminalFocusContentFocused terminal content
ThemeRole::ScrollbarThumbScrollbar thumb color
ThemeRole::ScrollbarThumbFocusFocused scrollbar thumb color
ThemeRole::ScrollbarTrackScrollbar track color
ThemeRole::SplitterHoverSplitter hover handle color
ThemeRole::SplitterActiveSplitter active handle color

VisualEffect

Used with EffectScope::effect(...), EffectScope::effects(...), and MouseRegion::hover_effect(...).

VariantDescription
VisualEffect::Monochrome { strength }Desaturate fg/bg colors toward grayscale
VisualEffect::PaletteQuantize { palette }Quantize fg/bg colors to an effect palette
VisualEffect::Scanlines { strength, spacing }Dim every spacing rows
VisualEffect::RainbowWave { blend, frequency, speed, axis }Animated color wave sampled in scope-local coordinates
VisualEffect::Gradient { gradient, blend, frequency, speed, axis }Mirrored ColorGradient wash sampled in scope-local coordinates
VisualEffect::RetroCrt { preset, flicker, scanline_strength }Retro CRT preset with palette, scanlines, and optional flicker
VisualEffect::Ripple { origin, radius, ring_width, tint, strength }Aspect-correct radial tint ring from an explicit or aligned EffectOrigin; radius is a RippleRadius
VisualEffect::Clipped { bounds, mask, inner }Restrict another effect to a scope-local rect and/or mask
VisualEffect::ColorTransform { fg, bg }Apply relative ColorTransforms to fg and/or bg
VisualEffect::ContrastPolicy(policy)Apply readable-foreground contrast adjustment
VisualEffect::Custom(Arc<dyn CellEffect>)User-defined per-cell effect

EffectOrigin

Used by positional effects such as VisualEffect::Ripple.

VariantDescription
EffectOrigin::Cell { x, y }Explicit scope-local cell coordinates; use EffectOrigin::cell(x, y)
EffectOrigin::Aligned(EffectAlignment)Resolve from the current effect-scope bounds at render time

EffectAlignment

Two-dimensional alignment for EffectOrigin::Aligned. Common constants: TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTER, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT.

RippleRadius

Used by VisualEffect::Ripple.

VariantDescription
RippleRadius::Fixed(f32)Static ring radius in character columns
RippleRadius::Loop { max_radius, period_ticks }Repeating ease-out shockwave with implicit linear strength fade
RippleRadius::Once { max_radius, duration_ticks, start_tick }One-shot ease-out shockwave; capture start_tick from ctx.effect_phase() when the burst starts

Color (selected variants)

Full listing: named ANSI colors, Indexed(u8), Rgb, hex / hex_u24 helpers. Highlights:

Variant / formDescription
Color::ResetTerminal default for that attribute (ANSI reset)
Color::BackdropBackground-only surface semantic: blank areas clear foreground content but preserve the background color already beneath them
Color::TransparentOmit fg/bg when rendering so cells keep the color underneath; in Style::patch, does not override the resolved base for that channel

TripleClickSelectionMode

Used by TextArea::triple_click_mode(...) and DocumentView::triple_click_mode(...).

VariantDescription
TripleClickSelectionMode::LineSelect the current logical/rendered line (default)
TripleClickSelectionMode::ParagraphSelect the current paragraph bounded by blank lines

HeatmapCellMode

VariantDescription
HeatmapCellMode::BackgroundFill each cell with a background color and optional numeric text (default)
HeatmapCellMode::Glyph(Arc<str>)Draw a centered glyph string over a colored background tile
HeatmapCellMode::GlyphForeground(Arc<str>)Draw only the glyph string in the mapped color, leaving the background untouched

HeatmapLegendWidth

VariantDescription
HeatmapLegendWidth::GridAlign the legend with the heatmap grid start (default)
HeatmapLegendWidth::FullLet the legend span the full inner width, including the row-label gutter

ActorKind (SequenceDiagram)

VariantDescription
ActorKind::ParticipantRender as a participant box (default)
ActorKind::ActorRender as a Mermaid-style stick-figure actor with a label

SequenceDiagramVariant (SequenceDiagram)

VariantDescription
SequenceDiagramVariant::BoxedRender participant headers/footers with boxes (default)
SequenceDiagramVariant::MinimalRender compact unboxed participant labels; actor labels use actor_glyph or the "○ " fallback

SequenceDiagramTheme (SequenceDiagram)

SequenceDiagramTheme is a public struct for diagram-local styles and glyphs. Use SequenceDiagramTheme::classic() for the default look, SequenceDiagramTheme::minimal() for the compact preset, and SequenceDiagramTheme::ascii() when output must avoid Unicode box-drawing characters. The theme contains public sub-structs for the customizable glyph and style groups: MessageGlyphs, FragmentGlyphs, LifelineTheme, ActivationTheme, and AutonumberTheme, plus participant/note border slots for diagram-local chrome.

MessageStyle and FragmentKind index the per-kind style slots used by SequenceDiagram::message_kind_style(...) and SequenceDiagram::fragment_kind_style(...).

Flowchart enums

TypeVariants
FlowDirectionTopDown (default), BottomUp, LeftRight, RightLeft
NodeShapeRect (default), Round, Stadium, Subroutine, Cylinder, Circle, Asymmetric, Diamond, Hexagon, Parallelogram, ParallelogramAlt, Trapezoid, TrapezoidAlt, DoubleCircle
EdgeStyleSolid (default), Dashed, Thick, Invisible
EdgeArrowNone, Open, Filled (default), Cross, Circle

FlowchartTheme is a diagram-local glyph/style bundle with classic(), minimal(), and ascii() presets.

Gantt diagram enums

TypeVariants
GanttTaskStatusPending (default), Active, Done, Critical
GanttTaskStartDate(GanttDate), After(Arc<str>)

GanttDuration::days(n) stores day-based task lengths. GanttTask::milestone() marks a zero-duration task rendered as a milestone glyph.

MessageStyle (SequenceDiagram)

VariantMermaid formDescription
MessageStyle::Sync-> / ->>Solid request/call arrow
MessageStyle::Async-) / async arrowSolid asynchronous/open-head arrow
MessageStyle::SyncReply-->Dashed reply arrow with filled head
MessageStyle::AsyncReply-->>Dashed reply arrow with open head
MessageStyle::Lost-xMessage ending in a lost/error marker
MessageStyle::Open-)Message ending in an open circle marker

Prefer constructor helpers such as SequenceMessage::sync(...), SequenceMessage::async_(...), and SequenceMessage::reply(...) unless you need to set a style directly.

FragmentKind (SequenceDiagram)

VariantDescription
FragmentKind::LoopRepeated block (loop)
FragmentKind::AltConditional block with else branches (alt)
FragmentKind::OptOptional block (opt)
FragmentKind::ParParallel block with and branches (par)
FragmentKind::CriticalCritical section (critical)
FragmentKind::BreakBreak/abort block (break)
FragmentKind::RectBackground rectangle region (rect)

NotePlacement (SequenceDiagram)

VariantDescription
NotePlacement::LeftOfNote box to the left of one actor
NotePlacement::RightOfNote box to the right of one actor
NotePlacement::OverNote box spanning one or more actors

Widget Variants

SpinnerStyle

VariantFrames
SpinnerStyle::Dots (default)⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏
SpinnerStyle::LineFour-frame line spinner
SpinnerStyle::Circle◐◓◑◒
SpinnerStyle::Arc◜◠◝◞◡◟
SpinnerStyle::Braille⣾⣽⣻⢿⡿⣟⣯⣷
SpinnerStyle::Moon🌑🌒🌓🌔🌕🌖🌗🌘
SpinnerStyle::Box▖▘▝▗
SpinnerStyle::Bar▂▃▄▅▆▇█▇▆▅▄▃▂
SpinnerStyle::Arrow←↖↑↗→↘↓↙
SpinnerStyle::Fade█▓▒░▒▓
SpinnerStyle::TrailMoving shaded trail
SpinnerStyle::Earth🌍🌎🌏
SpinnerStyle::Claude·✢✳✶✻*✻✶✳✢
SpinnerStyle::OpenCodeCustom OpenCode-style glowing track
SpinnerStyle::ThreeDotThree-dot chase
SpinnerStyle::ThreeDotFadeThree-dot chase with trail
SpinnerStyle::SquareFadeSquare fill/fade
SpinnerStyle::LightsaberCustom lightsaber ignition/retraction

SpinnerSpeed

VariantDescription
SpinnerSpeed::SlowApprox. 200 ms per frame
SpinnerSpeed::Normal (default)Approx. 100 ms per frame
SpinnerSpeed::FastApprox. 50 ms per frame
SpinnerSpeed::Custom { frame_ms }Custom milliseconds per frame, quantized to the runtime spinner tick

DraggableTabKind

VariantDescription
DraggableTabKind::TabRegular selectable, draggable tab (default)
DraggableTabKind::ActionPinned action item, such as a + new-tab button, that emits on_action instead of selecting or reordering

DraggableTabBarVariant

VariantDescription
DraggableTabBarVariant::BorderedSegmented tabs with dividers (default)
DraggableTabBarVariant::FrameLineOne-line frame-like tabs with accent markers

DraggableTabBarOverflow

VariantDescription
DraggableTabBarOverflow::ScrollKeep natural tab widths and scroll horizontally when tabs overflow (default)
DraggableTabBarOverflow::ShrinkThenScroll { min_tab_width }Shrink tab labels down to the configured minimum tab width before scrolling

DragReorderMode

VariantDescription
DragReorderMode::LiveEmit reorder events as the drag crosses tab boundaries (default)
DragReorderMode::OnDropEmit one reorder event when the mouse is released

ButtonVariant

VariantRendered asConstructor shortcut
ButtonVariant::Bracket[ Label ] (default)Button::new("Label")
ButtonVariant::FilledBackground-filled (no brackets)Button::filled("Label")
ButtonVariant::OutlinedBorder-only (no background)Button::outlined("Label")

CheckboxVariant

VariantCheckedUncheckedIndeterminate
CheckboxVariant::Bracket (default)[x][ ][-]
CheckboxVariant::Circle
CheckboxVariant::Box
CheckboxVariant::Custom { checked, unchecked, indeterminate }Custom strings

CheckboxState

VariantDescription
CheckboxState::UncheckedNot checked
CheckboxState::CheckedChecked
CheckboxState::IndeterminatePartial/unknown state

RadioLayout

VariantDescription
RadioLayout::VerticalStack options vertically (default)
RadioLayout::HorizontalStack options horizontally

Note: Radio uses CheckboxVariant::Circle by default (not Bracket).

ListItemRole

VariantDescription
ListItemRole::NormalRegular selectable row (default)
ListItemRole::HeaderNon-selectable section header
ListItemRole::SpacerNon-selectable blank row

ListSymbolPosition

VariantDescription
ListSymbolPosition::LeftRender the symbol in the left symbol column (default)
ListSymbolPosition::RightRender the symbol immediately after the label content

DescriptionPlacement (SearchPalette)

VariantDescription
DescriptionPlacement::Inlinelabel - description on primary line (default)
DescriptionPlacement::RightDescription in right-aligned slot on primary line
DescriptionPlacement::AboveDescription line above label
DescriptionPlacement::BelowDescription line below label

DescriptionOverflow (SearchPalette)

VariantDescription
DescriptionOverflow::TruncateKeep descriptions on one visual line and truncate with ellipsis (default)
DescriptionOverflow::WrapWrap descriptions across multiple lines for DescriptionPlacement::Above and DescriptionPlacement::Below

MultiSelectDescriptionPlacement

VariantDescription
MultiSelectDescriptionPlacement::Inlinelabel - description on primary line (default)
MultiSelectDescriptionPlacement::RightDescription in right-aligned slot on primary line
MultiSelectDescriptionPlacement::AboveDescription line above label
MultiSelectDescriptionPlacement::BelowDescription line below label

MultiSelectDescriptionOverflow

VariantDescription
MultiSelectDescriptionOverflow::TruncateKeep descriptions on one visual line and truncate with ellipsis (default)
MultiSelectDescriptionOverflow::WrapWrap descriptions across multiple lines for MultiSelectDescriptionPlacement::Above and MultiSelectDescriptionPlacement::Below

Focus & Input

FocusPolicy

VariantUsage
FocusPolicy::NoneNo focus-aware sizing (default)
FocusPolicy::Accordion(FocusAccordion { ... })Lazygit-style panel resizing

Grid track Length (.rows / .columns)

ValueEffect
Length::AutoTrack sizes from content (subject to spanning rules) (default)
Length::Px(n)Fixed track size
Length::Percent(n)Resolves against the grid's inner width or height
Length::Flex(n)Shares remaining space along that axis with other flex tracks

Implicit rows are added as Auto when auto-flow runs out of space.

FocusAccordion

FieldTypeDefaultDescription
focused_minu167Minimum height for focused child
collapsedu163Height for non-focused children
tiny_collapsedu161Height in tight-space mode
expanded_weightu162Flex weight multiplier for focused child
squash_thresholdu1628Viewport height to enter squashed mode
tiny_thresholdu1621Viewport height to enter tiny mode

TextAreaNewlineBinding

VariantEnter key behavior
TextAreaNewlineBinding::EnterEnter inserts newline (default)
TextAreaNewlineBinding::ShiftEnterShift+Enter inserts newline
TextAreaNewlineBinding::EnterOrShiftEnterBoth insert newline

TextAreaLineNumberMode

Controls how built-in TextArea line numbers are displayed when TextArea::line_numbers(true) is enabled.

VariantDescription
TextAreaLineNumberMode::AbsoluteShow one-based logical line numbers (default)
TextAreaLineNumberMode::RelativeShow Vim-style relative numbers: the cursor line stays absolute and other lines show their distance from it

TextAreaVimMode

Emitted by TextArea::on_vim_mode_change when TextArea::vim_motions(true) is enabled.

VariantDescription
TextAreaVimMode::InsertPlain text insertion mode
TextAreaVimMode::NormalVim-style normal/motion mode; enabled TextAreas start here (default)
TextAreaVimMode::VisualVim-style visual selection mode; motions extend the cursor/anchor selection
TextAreaVimMode::VisualLineVim-style linewise visual selection mode; motions extend a whole-logical-line selection

TextAreaVimKeymap / TextAreaVimKeyBinding

Widget-local Vim key remaps for TextArea::vim_motions(true). A TextAreaVimKeymap contains TextAreaVimKeyBinding entries that translate single-key KeyBindings into canonical Vim command characters before TextArea Vim dispatch. These remaps are separate from keymap.conf and only run while the TextArea is not in Insert mode.

TextAreaVimConfig / TextAreaVimCurrentLineHighlight

TextAreaVimConfig groups Vim-only rendering options used by TextArea::vim_config(...):

FieldDescription
search_bar_styleStyleSlot for the bottom Vim search/status bar
search_bar_prefix_styleStyleSlot overlay for the Vim search bar prefix icons; unset fields fall through to search_bar_style
search_bar_count_styleStyleSlot overlay for Vim search count labels like [2/5]; unset fields fall through to search_bar_style
search_match_styleStyleSlot patched over visible matches while Vim search feedback is shown
current_search_match_styleStyleSlot patched over the current Vim search match; during pending search this is the match Enter would jump to, and after Enter it follows n / N
current_line_highlightOptional current-line highlight mode
current_line_styleStyleSlot for current-line highlighting
current_line_number_styleStyleSlot overlay for the current line number/custom gutter row; unset fields fall through to current_line_style
VariantDescription
TextAreaVimCurrentLineHighlight::OffDisable current-line highlighting (default)
TextAreaVimCurrentLineHighlight::ContentHighlight only text content rows for the cursor's logical line
TextAreaVimCurrentLineHighlight::FullHighlight the full inner row, including line numbers or custom gutter

KeyBinding / KeyBindings

Public shortcut binding types from tui_lipan::input. Parsing: whitespace = chord steps, comma = alternatives. See keybindings.md.

TypeDescription
KeyBindingOne shortcut or chord (FromStr, Display, matches_sequence, is_chord, step_count, canonical_lowercase)
KeyBindingsComma-separated alternatives (FromStr, Display, canonical_lowercase, iter, primary, is_empty, len)
ChordMatcher<T>Stateful incremental matcher for chords (feed, reset, is_pending)
ChordResult<T>None / Pending / Matched from ChordMatcher::feed
KeyBindingParseErrorParse error type for invalid binding strings

Lowercase helpers are also available:

  • KeyBinding::canonical_lowercase()
  • KeyBindings::canonical_lowercase()
  • format_binding_lowercase(...)
  • format_bindings_lowercase(...)

SentinelId

Opaque Copy id for a custom inline sentinel. SentinelId::UNKNOWN is 0 when no id was set on a removed token. New ids are assigned by insert_sentinel (via internal SentinelId::next()).

SentinelEvent

VariantPayloadWhen
SentinelEvent::Deleted { id, sentinel }Stable id (or UNKNOWN), full TextAreaSentinel including payloadUser edit removed the sentinel char from the buffer

Emitted by: TextArea::on_sentinel_event (batched).

TextAreaSentinel

Builder-style struct (not an enum): new(label), style, focus_style, hover_style, payload<T>(data), id(SentinelId), get_payload, sentinel_id. Equality compares label, styles, and id (payload is ignored).

TextAreaSentinelClickKind

VariantPayloadWhen
TextAreaSentinelClickKind::Image { index, image }Inline image index and ImageContentUser clicked an inline image placeholder
TextAreaSentinelClickKind::Custom { index, id, sentinel }Custom sentinel index, stable id, and metadata including payloadUser clicked a custom sentinel label

TextAreaSnapshot

FieldDescription
value, cursor, anchorBuffer and caret state
sentinelsParallel custom sentinel metadata
images, image_modeSame fields as on TextArea

Methods: TextAreaSnapshot::capture(&TextArea), apply(self, TextArea) -> TextArea, diff(&self, &Self) -> Vec<SentinelEvent> (stable ids removed between snapshots).

TextAreaImageMode (requires feature image)

VariantDescription
TextAreaImageMode::InlineUnicode PUA sentinels embedded in text value
TextAreaImageMode::AttachmentImages in separate list; text value unchanged

Overlay & Toast

DismissPolicy

VariantDismissed by
DismissPolicy::NoneNothing (manual only)
DismissPolicy::ClickOutsideClick outside overlay (default)
DismissPolicy::ClickInsideClick inside overlay
DismissPolicy::ClickOutsideOrEscapeClick outside or Escape

ToastPlacement

VariantPosition
ToastPlacement::TopStartTop-left
ToastPlacement::TopCenterTop-center
ToastPlacement::TopEndTop-right
ToastPlacement::BottomStartBottom-left
ToastPlacement::BottomCenterBottom-center
ToastPlacement::BottomEndBottom-right (default)

App Configuration

ContrastPolicy

Used by App::contrast_policy(...), widget-level .contrast_policy(...) builders, and Style::contrast_policy(...) for per-style overrides.

VariantBehavior
ContrastPolicy::WcagAuto-adjust low-contrast text using WCAG 2.1 contrast (default)
ContrastPolicy::BlackOrWhiteKeep the current foreground if it already passes WCAG; otherwise snap to black or white
ContrastPolicy::ApcaAuto-adjust using APCA perceptual contrast
ContrastPolicy::OffPreserve explicit colors exactly

TaskPolicy

VariantBehavior
TaskPolicy::QueueAllEnqueue every task; native workers may run same-key tasks concurrently
TaskPolicy::DropIfRunningIgnore new task while one with same key is running without cancelling the active task
TaskPolicy::LatestOnlyKeep only newest pending task, cancel the active token, and cancel replaced pending tokens

LatestOnly cancellation is cooperative. Background work must poll its CommandLink / CancellationToken and use send_if_not_cancelled to avoid delivering stale messages.


Data Widgets

IndentStyle

Used by Tree::indent_style(...) and inherited by FileTree for hierarchy guide glyphs.

VariantGlyphs
IndentStyle::NoneNo guides
IndentStyle::Line
IndentStyle::Short,
IndentStyle::Long├─, └─
IndentStyle::ShortRounded,
IndentStyle::LongRounded├─, ╰─

FileTreeChangeView

VariantDescription
FileTreeChangeView::AllFilesBrowse all files under the configured root (default)
FileTreeChangeView::ChangedOnlyShow only changed paths and ancestor directories from the configured change source

FileTreeGitView is a compatibility alias for FileTreeChangeView.

FileTreeChangeSource

VariantDescription
FileTreeChangeSource::GitRead change data from the local git repository (default)
FileTreeChangeSource::Provided(Vec<FileTreeChange>)Use application/backend-provided change rows; does not require local git and may include virtual, nonexistent, or deleted paths

FileTreeChangeStatus

VariantDescription
FileTreeChangeStatus::ModifiedExisting path has modifications
FileTreeChangeStatus::AddedPath is newly added
FileTreeChangeStatus::DeletedPath was deleted and may not exist on disk
FileTreeChangeStatus::RenamedPath was renamed
FileTreeChangeStatus::UntrackedPath is untracked by the source
FileTreeChangeStatus::ConflictedPath has a conflict

FileTreeChange

FileTreeChange::new(path, status) creates a provided change row. Builder methods include .kind(FileKind), .diff_stat(additions, deletions), .additions(...), .deletions(...), and .staged(...).

FileTreeItemStyle

Path-specific FileTree decoration style used by FileTree::path_style(...) and FileTree::path_styles(...). FileTreeItemStyle::new() starts empty; builder methods .row(...), .icon(...), .label(...), and .suffix(...) set optional styles for the whole row, leading icon, name label, and right-side metadata suffix independently.

FileTreeSuffixPriority

Controls what wins when a FileTree row is too narrow for both the label and right-aligned change metadata.

VariantDescription
FileTreeSuffixPriority::LabelPreserve the label and truncate suffix metadata first (default)
FileTreeSuffixPriority::SuffixPreserve suffix metadata such as M +30 -21 and truncate the label first

Diff View (feature diff-view)

DiffViewMode

VariantDescription
DiffViewMode::SplitSide-by-side view (default)
DiffViewMode::UnifiedUnified view

DiffViewBackend

VariantDescription
DiffViewBackend::TextAreaTextArea-backed rendering (default, editable supported)
DiffViewBackend::DocumentViewDocumentView-backed rendering (read-only optimized)

DiffPane

VariantDescription
DiffPane::LeftLeft pane in split mode
DiffPane::RightRight pane in split mode
DiffPane::UnifiedUnified pane

DiffContextSeparatorDirection

VariantDescription
DiffContextSeparatorDirection::AboveHidden context appears above the visible hunk
DiffContextSeparatorDirection::BelowHidden context appears below the visible hunk
DiffContextSeparatorDirection::BetweenHidden context appears between two visible hunks

DiffContextRange

Stable identifier for a collapsed unchanged range. Line numbers are git-style, 1-based, and inclusive when present.

rust
pub struct DiffContextRange {
    pub old_start: Option<usize>,
    pub old_end: Option<usize>,
    pub new_start: Option<usize>,
    pub new_end: Option<usize>,
}

DiffHunkAnchor

Logical navigation anchor for one parsed unified-patch hunk. logical_line is a zero-based rendered source row before soft wrapping; DiffView::scroll_to_hunk uses this row and lets the active backend resolve the final visual row.

rust
pub struct DiffHunkAnchor {
    pub pane: DiffPane,
    pub index: usize,
    pub old_start: Option<usize>,
    pub new_start: Option<usize>,
    pub logical_line: usize,
}

Utility Types

GridPos

A position in a 2D grid, used for mouse-driven selection in grid-like UIs.

rust
pub struct GridPos {
    pub row: usize,  // Zero-based row index
    pub col: usize,  // Zero-based column index
}

GridSelection

A 2D range selection with anchor (start) and cursor (current) positions.

MethodReturnsDescription
new(pos)GridSelectionCreate a new single-point selection
extend_to(pos)-Extend selection to a new cursor position
normalized()(GridPos, GridPos)Get ordered (start, end) where start <= end
is_empty()boolCheck if anchor equals cursor
contains(row, col)boolCheck if a cell is within the selection
extract_text(lines)StringExtract selected text from a slice of line strings
columns_for_row(row, line_width)Option<(usize, usize)>Get selected column range for a row (for rendering)

GridSelectionEvent

rust
pub struct GridSelectionEvent {
    pub selection: Option<GridSelection>,
    pub text: Option<String>,
}

Element Helpers

ExpressionDescription
Element::empty()Empty placeholder (use in if/else branches)
widget.into()Convert any widget into Element
widget.key("my-key")Assign stable identity for reconciliation/focus

TextArea editor primitive enums

  • TextAreaDecorationKind: Range, WholeLine, Underline, VirtualText. Byte offsets remain canonical. Underline applies the supplied style and enables underline automatically. VirtualText is deprecated and remains a no-op; use TextAreaVirtualText with TextArea::virtual_text instead.
  • VirtualTextPlacement: Inline, Eol. Inline virtual text shifts visual columns before the anchor byte; EOL virtual text appends after a logical line's final visual row without affecting wrapping.
  • TextAreaStateChangeReason: Edit, SelectionChange, CursorMove, Scroll, VimModeChange.

MIT OR Apache-2.0