Input
A single-line text field. Use it for names, emails, tokens, numbers, dates, times, and inline searches.
Scales
default fits dense forms. lg is for sign-in and onboarding. Each scale shows the fields Cloud uses it for.
Default
32px · settings, dialogs, builders17/120
Optional
Channel ID, like C0123456789.
Large
44px · sign-in and onboardingStates
Empty with a placeholder, filled, read-only, disabled, and invalid, at both scales. Field.Root passes disabled and invalid to the input.
Optional
Optional
Optional
Read-only. Select it to copy.
Optional
Optional
Optional
Optional
Optional
Read-only. Select it to copy.
Optional
Optional
Types
Each native type Cloud uses. Date, time, and number inputs keep the browser picker and take min, max, and step.
Optional
Paste a comma-separated list to add many.
Stored encrypted. You can rotate it later.
Minutes, from 1 to 1440.
Optional
Tokens before older turns are summarised.
Optional
Letters, numbers, and dashes.
Optional
Optional
Optional
Optional
Optional
Your time zone.
Optional
Labels without a field
Pair id with a label's htmlFor and point aria-describedby at help and error text. Inline searches use aria-label.
The part before .atlassian.net.
- Customers
- Invoices
- Purchase orders
- Suppliers
- Support tickets
Create workspace
Large inputs in a form. Submit empty to see a field error. The URL acme is taken, so the server error lands on the slug. Inputs are disabled while saving.
Inline rename
autoFocus and aria-label for a title edited in place. Enter saves and Escape cancels. The input is read-only while it saves, so focus stays put.
Hidden file chooser
A hidden file input with a ref, opened by a button. tabIndex={-1} and aria-hidden keep it out of focus and the accessibility tree.
Compositions
SidebarInput is the sidebar search field. Override data-slot and className to set an Input inside your own bordered group.
The group draws the border and focus ring.
Usage
import { Field } from "@base-ui/react/field";
import { Input } from "@tulipfarm/sprout/input";
const [name, setName] = useState("");
<Field.Root invalid={!name.trim()}>
<Field.Label>Agent name</Field.Label>
<Input
value={name}
maxLength={120}
placeholder="People Ops helper"
onChange={(event) => setName(event.target.value)}
/>
<Field.Error match>Enter a name.</Field.Error>
</Field.Root>
<label htmlFor="site">Site ID</label>
<Input id="site" aria-describedby="site-help" />
<Input scale="lg" type="email" placeholder="you@company.com" autoComplete="email" />Input renders a native input and takes every input prop:value or defaultValue, onChange(or Base UI's onValueChange), ref,required, maxLength, pattern,autoComplete, inputMode, and event handlers such as onKeyDown and onPaste.
Props
scale is "default" (32px tall, 10px side padding, 14px text) or "lg" (44px, 12px padding, 16px text). Use lg for sign-in and onboarding forms.
type can be any native type. Cloud uses text, email, password, number, url, date, time, datetime-local, and file. A visible file input styles its button to match. A hidden file input (hidden, tabIndex={-1},aria-hidden) can be opened with ref.current.click().
disabled dims the input and blocks edits.readOnly keeps it focusable and selectable, which suits copy fields and saving states. aria-invalid draws a danger border and focus ring. The input sets data-slot="input" anddata-scale; you can pass your own data-slot andclassName to set it inside another control.
With a field
Input is a Base UI Input, so it works inside Base UIField.Root. The field gives it an id, labels it withField.Label, describes it with Field.Descriptionand Field.Error, and passes disabled andinvalid. Without a field, pair id with a label's htmlFor, or use aria-label.
SidebarInput
import { SidebarHeader, SidebarInput } from "@tulipfarm/sprout/sidebar";
<SidebarHeader>
<SidebarInput aria-label="Search sample sidebar" placeholder="Search locally…" />
</SidebarHeader>SidebarInput is a default-scale Input on the canvas color, withdata-slot="sidebar-input" anddata-sidebar="input".
Accessibility
Every input needs a name: a field label, a label withhtmlFor, or aria-label. Pointaria-describedby at help and error text. A focused input shows a 2px focus ring, red when invalid. Read-only inputs stay in the tab order; disabled ones leave it.
Color changes take 120ms and stop when reduced motion is requested. In forced colors mode the input keeps a system border and a highlight focus ring.
Theme tokens
The border uses --sprout-input, the fill--sprout-surface, text --sprout-text, and the placeholder --sprout-muted. Focus uses--sprout-focus, invalid --sprout-danger, and disabled --sprout-hover. Radius follows--sprout-radius-control. The opt-in TulipFarm theme tints the focus ring through these tokens.