# Input

A single-line text input widget.

- [x] Focusable
- [ ] Container

## Example

The example below shows how you might create a simple form using two `Input` widgets.

=== "Output"

    ```{.textual path="docs/examples/widgets/input.py" press="tab,D,a,r,r,e,n"}
    ```

=== "input.py"

    ```python
    --8<-- "docs/examples/widgets/input.py"
    ```

## Reactive Attributes

| Name              | Type   | Default | Description                                                     |
| ----------------- | ------ | ------- | --------------------------------------------------------------- |
| `cursor_blink`    | `bool` | `True`  | True if cursor blinking is enabled.                             |
| `value`           | `str`  | `""`    | The value currently in the text input.                          |
| `cursor_position` | `int`  | `0`     | The index of the cursor in the value string.                    |
| `placeholder`     | `str`  | `str`   | The dimmed placeholder text to display when the input is empty. |
| `password`        | `bool` | `False` | True if the input should be masked.                             |

## Messages

### ::: textual.widgets.Input.Changed

### ::: textual.widgets.Input.Submitted

## Bindings

The input widget defines directly the following bindings:

::: textual.widgets.Input.BINDINGS
    options:
      show_root_heading: false
      show_root_toc_entry: false

## Component Classes

The input widget provides the following component classes:

::: textual.widgets.Input.COMPONENT_CLASSES
    options:
      show_root_heading: false
      show_root_toc_entry: false

## Additional Notes

* The spacing around the text content is due to border. To remove it, set `border: none;` in your CSS.

## See Also

* [Input](../api/input.md) code reference
