Input

Text-like field with icon slots. Labels and errors are composed with Field rather than baked in.

Source
1 file
Dependencies
none
Playground
yes

Examples

Every variant of the shipped component, live. Switch the layout to read them as a table or one at a time, and open Code for the file behind them.

01Default
02With description

We‘ll never share your email.

03Start icon
04Password
05Error
06Disabled
07Types
08Controlled
value = hello

Installation

One package for the whole library — run this once and every component on this site is importable. Adding the tokens to your stylesheet is the other half; the installation guide covers it.

npm install kipui
import { Input } from "kipui";
Peer dependencies

react 19

react-dom 19

tailwindcss 4

Bundled dependencies

None beyond the peers above.

Usage

input-example.tsx
import { Input } from "kipui";

<Input
  type="email"
  placeholder="you@example.com"
  onValueChange={(value) => console.log(value)}
/>
  • Set `aria-invalid` (Field does this for you) to get the error styling — there is no `invalid` prop.
  • `onValueChange` is a convenience on top of `onChange`; both fire.

Playground

Change the props and the snippet underneath updates with them.

Preview

<Input />

Props

3
<Input type="email" placeholder="you@example.com" />

API reference

Transcribed from the component's own types. Props with no default are required.

PropDefaultDescription
type"text" | "email" | "password" | "search" | "tel" | "url" | "number""text"One of the supported text-like input types.
onValueChange(value: string) => voidrequiredReceives the raw string instead of the event.
startIconReactNoderequiredDecorative element rendered inside the field, before the text.
endIconReactNoderequiredDecorative element rendered inside the field, after the text.
classNamestringrequiredMerged last, so callers can override any style.