> ## Documentation Index
> Fetch the complete documentation index at: https://docs.napps.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Text input

`textInput` provides native text entry and keyboard behavior.

## Properties

| Property       | Accepted value            | Description                                                             |
| -------------- | ------------------------- | ----------------------------------------------------------------------- |
| `value`        | `string`                  | Current text value.                                                     |
| `placeholder`  | `string`                  | Hint shown when the input is empty.                                     |
| `keyboardType` | `string`                  | Native keyboard variant, such as `"default"`, `"email"`, or `"number"`. |
| `onChange`     | `(value: string) => void` | Called as the user edits the text.                                      |
| `onSubmit`     | `() => void`              | Called when the user confirms from the keyboard.                        |
| `style`        | `StyleProperties`         | Layout, typography, and appearance values.                              |
| `key`          | `string \| number`        | React key for dynamic inputs.                                           |
| `class`        | `string`                  | Registered style name for this node only.                               |

## Example

```tsx theme={null}
const [email, setEmail] = useState("");

<textInput
  value={email}
  placeholder="Email address"
  keyboardType="email"
  onChange={setEmail}
  onSubmit={() => submitEmail(email)}
  style={{
    width: "100%",
    padding: 12,
    borderWidth: 1,
    borderColor: "#d0d5dd",
    borderRadius: 8
  }}
/>
```

Treat `value` as the source of truth and update it from `onChange` so the input remains controlled.
`textInput` is a leaf node and does not render `children`.
