Name
On the invoice
One field. The name is as it prints.
Collects one line of text. 1px border, 2px focus ring, 12px label above.
On the invoice
One field. The name is as it prints.
Three ways in. They share one source, so the pixels match whichever you pick.
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.
npx @noorddev/vlak-cli add input
The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/input.json
The same registry item, installed by shadcn's CLI.
<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" />| Prop | Type | Default | Description |
|---|---|---|---|
label | ReactNode | Label rendered above the field at 12px. | |
ok | boolean | Marks the field as validated: ink border and ink feedback text. | |
feedback | ReactNode | Quiet feedback line under the field. | |
hint | ReactNode | Hint under the field; it describes the control. | |
error | ReactNode | Error under the field; it describes the control and marks it invalid. | |
plain | boolean | Control only — no field stack. For Field / InputGroup. | |
grouped | boolean | Flush into an InputGroup: no own stroke. |
Also accepts InputHTMLAttributes<HTMLInputElement>.
| Keys | Does |
|---|---|
| Tab | Moves focus to the field |
| Enter | Submits the enclosing form |
<div class="rs-field"><span class="rs-field-label">E-mail</span><input class="rs-input rs-input-full" /></div>