pub struct TextInput {Show 18 fields
pub id: Option<NodeId>,
pub value: String,
pub placeholder: Option<TextContent>,
pub on_change: Option<ActionEnvelope>,
pub width: Option<f32>,
pub height: Option<f32>,
pub multiline: bool,
pub min_lines: Option<usize>,
pub max_lines: Option<usize>,
pub obscure_text: bool,
pub obscuring_character: char,
pub mask: Option<InputMask>,
pub styled_runs: Option<Vec<TextRun>>,
pub borderless: bool,
pub capture_tab: bool,
pub auto_indent: bool,
pub on_cursor_change: Option<ActionEnvelope>,
pub highlight_ranges: Vec<(usize, usize, Color)>,
}Expand description
An editable text field with support for single-line and multiline input, syntax highlighting, password masking, and IME composition.
TextInput is the primary text-editing widget. It manages its own scroll
container, caret, selection, and (when styled_runs is provided)
multi-colour syntax-highlighted rendering.
§Example
let on_change = ctx.bind(TextChanged { .. }, handle_text as fn(&mut S, TextChanged));
TextInput {
value: view.state.query.clone(),
placeholder: Some("Search...".into()),
on_change: Some(on_change),
..Default::default()
}§Code editor mode
For embedding in a code editor, enable borderless, capture_tab,
auto_indent, and provide styled_runs for syntax highlighting:
TextInput {
value: source_code.clone(),
multiline: true,
borderless: true,
capture_tab: true,
auto_indent: true,
styled_runs: Some(highlighted_runs),
..Default::default()
}Fields§
§id: Option<NodeId>Explicit node identity (used for focus tracking and scroll state).
value: StringThe current text value (controlled by the application).
placeholder: Option<TextContent>Placeholder text shown when value is empty.
on_change: Option<ActionEnvelope>Action dispatched when the text changes.
width: Option<f32>Fixed width in layout points.
height: Option<f32>Fixed height in layout points.
multiline: boolWhen true, the input accepts newlines and scrolls vertically.
min_lines: Option<usize>Minimum number of visible lines (multiline only).
max_lines: Option<usize>Maximum number of visible lines (multiline only).
obscure_text: boolWhen true, display each grapheme as obscuring_character (password mode).
obscuring_character: charThe character used when obscure_text is true (default: '•').
mask: Option<InputMask>Structural input mask (e.g. phone number, date).
styled_runs: Option<Vec<TextRun>>Pre-styled text runs for syntax highlighting.
When provided and no selection is active, these runs are rendered instead
of the default single-colour text. The concatenated text of all runs
must match value exactly.
borderless: boolWhen true, the background rect and border are omitted (for embedding
in editor chrome).
capture_tab: boolWhen true, the Tab key inserts whitespace instead of moving focus.
auto_indent: boolWhen true, pressing Enter copies the leading whitespace of the current
line (auto-indentation).
on_cursor_change: Option<ActionEnvelope>Action dispatched when the caret or selection anchor changes.
highlight_ranges: Vec<(usize, usize, Color)>Ranges to highlight in the text (e.g. find-match results).
Each entry is (start_byte, end_byte, background_color).
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for TextInput
impl<'de> Deserialize<'de> for TextInput
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Lower for TextInput
impl Lower for TextInput
Source§fn lower(&self, cx: &mut LoweringContext<'_>) -> NodeId
fn lower(&self, cx: &mut LoweringContext<'_>) -> NodeId
Auto Trait Implementations§
impl Freeze for TextInput
impl RefUnwindSafe for TextInput
impl Send for TextInput
impl Sync for TextInput
impl Unpin for TextInput
impl UnsafeUnpin for TextInput
impl UnwindSafe for TextInput
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.