Input

Collects one line of text. 1px border, 2px focus ring, 12px label above.

Name

On the invoice

One field. The name is as it prints.

Use it for

  • Single-line text, e-mail, number, password, and search fields.
  • label, hint, and error together; the component wires them to the control.

Not for

  • Long text; use Textarea.
  • A fixed set of options; use Select or NativeSelect.

Three ways in. They share one source, so the pixels match whichever you pick.

1. Import the package

npm install @noorddev/vlak-react

// once, next to your app's root
import "@noorddev/vlak-react/css";

import { Input } from "@noorddev/vlak-react";

Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/input.

2. Vendor the source

npx @noorddev/vlak-cli add input

The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.

3. Through shadcn

npx shadcn add https://vlak.dev/r/input.json

The same registry item, installed by shadcn's CLI.

CSS only

<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />

No React. Link vlak.css and use the markup and classes below.

import { Input } from "@noorddev/vlak-react";

<Input label="E-mail" type="email" placeholder="you@example.com" hint="We never share it." />
<Input label="Name" error="Name is required." />
<Input label="Handle" ok feedback="Available" />

Input

PropTypeDefaultDescription
labelReactNodeLabel rendered above the field at 12px.
okbooleanMarks the field as validated: ink border and ink feedback text.
feedbackReactNodeQuiet feedback line under the field.
hintReactNodeHint under the field; it describes the control.
errorReactNodeError under the field; it describes the control and marks it invalid.
plainbooleanControl only — no field stack. For Field / InputGroup.
groupedbooleanFlush into an InputGroup: no own stroke.

Also accepts InputHTMLAttributes<HTMLInputElement>.

KeysDoes
TabMoves focus to the field
EnterSubmits the enclosing form
<div class="rs-field"><span class="rs-field-label">E-mail</span><input class="rs-input rs-input-full" /></div>
.rs-field.rs-field-label.rs-input.rs-input-full.rs-input-ok.rs-input-invalid.rs-feedback.rs-feedback-ok.rs-feedback-error.rs-input-field.rs-input-grouped.rs-input-label