Skip to content

TextInput

A single-line text input field for capturing short text values.

Name:

Basic Usage

from pywry import TextInput

name_input = TextInput(
    label="Name",
    event="form:name",
    placeholder="Enter your name",
)

With Default Value

from pywry import TextInput

TextInput(
    label="Title",
    event="form:title",
    value="Untitled Document",  # Pre-filled value
)

Validation Pattern

from pywry import PyWry, Toolbar, TextInput, Button

app = PyWry()

def on_email_change(data, event_type, label):
    email = data["value"]
    is_valid = "@" in email and "." in email
    if not is_valid and email:  # Don't warn on empty
        app.emit("pywry:alert", {"message": "Please enter a valid email", "type": "warning"}, label)

def on_submit(data, event_type, label):
    app.emit("pywry:alert", {"message": "Form submitted!", "type": "success"}, label)

app.show(
    "<h1>Contact Form</h1>",
    toolbars=[
        Toolbar(position="top", items=[
            TextInput(label="Email", event="form:email", placeholder="user@example.com"),
            Button(label="Submit", event="form:submit", variant="primary"),
        ])
    ],
    callbacks={"form:email": on_email_change, "form:submit": on_submit},
)

Form Fields

from pywry import Toolbar, TextInput, Button

form_fields = Toolbar(
    position="top",
    items=[
        TextInput(label="First Name", event="form:first_name"),
        TextInput(label="Last Name", event="form:last_name"),
        TextInput(label="Email", event="form:email"),
        Button(label="Submit", event="form:submit", variant="primary"),
    ],
)

Attributes

component_id : str | None
    Unique identifier for state tracking (auto-generated if not provided)
label : str | None
    Display label shown next to the input
description : str | None
    Tooltip/hover text for accessibility and user guidance
event : str
    Event name emitted on input change (format: namespace:event-name)
style : str | None
    Optional inline CSS
disabled : bool
    Whether the input is disabled (default: False)
value : str
    Current text value (default: "")
placeholder : str
    Placeholder text shown when empty (default: "")
debounce : int
    Milliseconds to debounce input events (default: 300)

Events

Emits the event name with payload:

{"value": "John Doe", "componentId": "text-abc123"}
  • value — current text content of the input

API Reference

Bases: ToolbarItem

A text input field with debounced change events.

Emits {value: ..., componentId: ...} on input change.

Attributes:

Name Type Description
value str

Initial text value (default: "").

placeholder str

Placeholder text shown when empty (default: "").

debounce int

Milliseconds to debounce input events (default: 300).

Examples:

>>> TextInput(
...     label="Search:",
...     event="search:query",
...     placeholder="Type to search...",
...     debounce=300,
... )

Functions

build_html

build_html() -> str

Build text input HTML.

auto_generate_component_id

auto_generate_component_id() -> ToolbarItem

Auto-generate component_id based on type if not provided.

validate_event_name classmethod

validate_event_name(v: str) -> str

Validate event follows namespace:event-name pattern.