Field
Preview appears after the next Storybook update.
<Field />When to use
Use it for
- Around every Input, Textarea, Select, Combobox, NumberField or Slider that does not take a label prop itself.
- To show a server-side error next to the right control (error prop, or Form errors by name).
- description for what the user needs before typing: format, limits, why you ask.
Not for
- Checkbox and Switch: they carry their own label next to the control.
- A group of checkboxes or radios: use CheckboxGroup or RadioGroup, which render a fieldset and legend.
Do and don't
Every example is rendered with the real component, so it always matches what ships.
Paste the link from Share, Copy link.
Description before, error after
The description answers questions before typing; the error appears under the control, where the eye already is.
Placeholder as the label
It disappears on the first keystroke and has low contrast. Keep a visible label.
Accessibility
- The label is a native <label> bound to the control: clicking it focuses the control.
- description and error are linked through aria-describedby; an error also sets aria-invalid on the control.
- Errors carry an icon and text, never color alone (WCAG 1.4.1).
- required shows an asterisk (hidden from screen readers) and sets the native required attribute, which is announced.
- hideLabel keeps the label for assistive tech; use it only when the context labels the field visually (a search bar with an icon).
Content guidelines
- Labels are nouns in sentence case, no colon: "Repository", not "Repository:".
- Errors name the problem and the fix: "Repository not found. Check the owner and the name."
- Do not repeat the label in the description.
From the code Generated from the component, not editable here.
Anatomy and tokens
Read from packages/react/src/components/Field/Field.module.css at build time. Every value is a token: open one to see its alias chain in both themes.
- Container
.field - Label
.label - Container
.field[data-disabled] .label - Required marker
.required - hiddenLabel
.hiddenLabel - Description
.description - Error message
.error - Error icon
.errorIcon
Motion and interaction
Field animates on hover. Try it in the preview at the top.
| When | What changes | Duration | Easing |
|---|---|---|---|
| Hover | Border | motion.duration.instant75 ms | motion.easing.standardsettles in place |
With reduced motion turned on, every change happens at once.
From the code Generated from the component, not editable here.
Props
Parsed from the TypeScript types in packages/react/src/components/Field/Field.tsx, so this table cannot drift from the code. It also accepts every native <div> attribute except onChange.
| Prop | Type | Default | Description |
|---|---|---|---|
labelrequired | ReactNode | none | Visible label. Required: placeholders are not labels. |
childrenrequired | ReactNode | none | The control: Input, Textarea, Select, Combobox, NumberField, Slider. |
description | ReactNode | none | Help shown under the label, before the control: format, constraints, privacy notes. |
error | ReactNode | none | Error message. When set, the field is invalid and the message is announced through aria-describedby. Leave it unset to show the browser's validation message after a failed submit. |
required | boolean | false | Marks the control as required (adds `required` to our controls and a visual marker to the label). |
disabled | boolean | none | No description in the code yet. |
name | string | none | Name used by Form for submit values and server errors. |
validate | (value: unknown) => string | string[] | null | undefined | Promise<string | string[] | null | undefined> | none | Custom validation. Return an error string (or strings) to mark the field invalid. |
validationMode | 'onSubmit' | 'onBlur' | 'onChange' | none | When validation runs. Default `onSubmit` (inherits Form). |
hideLabel | boolean | false | Visually hide the label (it stays the accessible name). Use only when the context labels the field, like a search bar. |
Comes with useFieldContext, each accepting native <div> attributes.
Playground
Change the props and see the real Field update. Controls are generated from the TypeScript props; nothing here changes the system.
<Field
validationMode="onSubmit"
label="Repository"
description="Owner and name, like acme/design-tokens."
/>Workbench
For contributors: every state with the accessibility panel, in the component workbench (Storybook). The stories double as visual test fixtures; the guidance on this page is the user documentation (open Field in Storybook).
Embed Storybook stories here (5)
Loads from https://bridge-storybook.floriangouloubi.com (set STORYBOOK_URL at build time). If Storybook is not running, the frames stay empty.
Default
Invalid
Required
Disabled
AllStates
From the code Generated from the component, not editable here.
Changelog
- Breaking
Bridge brand moves to the "Field Guide" direction: white content, ink text, Harbor zones and Deep Harbor as the one strong color, Fraunces headings over Instrument Sans text, rounder radii
v1.0.0, Nov 11, 2026
- New
A bridge.config.json field this version does not know is warned about and left alone, never fatal: a config written for a newer Bridge (a product's design copy, a new setting) still loads in an older CLI, workflow or MCP server
v1.0.0, Nov 11, 2026
- New
Component change requests:
composeRequestIssue,parseRequestIssue,requestStatus,requestBrief, Jira field mapping, GitHub issue methods, and anintegrationsblock in bridge.config.jsonv1.0.0, Nov 11, 2026
- New
The agent mark of
Avatar kind="agent"(andavatarHtml({ kind: 'agent' })) is now the Field Guide robot from the landing page: a rounded head with an antenna, two dot eyes, a smile, side ears and two legs, drawn as one round-cap stroke in currentColor with no fill, so it keeps the tile contrast in light and dark and reads at the xs size (16px mark)v1.0.0, Nov 11, 2026
- New
Textarea gets
appearance="inline"for editing existing text in place: no border, no resize handle, the surrounding font, size and line height, a height that fits the content (field-sizing: content, measured without moving the page where it is not supported), a fill and hairline on hover and the DS focus ring on focusv1.0.0, Nov 11, 2026
- New
Forms: Field (label, description, error wired by Base UI Field) and Input rebuilt on it (prefix, suffix, sizes; label, hint and error props kept)
v1.0.0, Nov 11, 2026
- New
A new homepage at "/", ported from the validated test page: drag the bridge to keep what your exploration added; "Start it in Bridge", "Ship it everywhere at once" and "One system everyone can trust", each step drawn as an animated Field Guide illustration; "Decide in seconds" for the design system lead; "How Bridge compares" (a short table, every feature on demand); the questions teams ask; and the Horizon closing
v1.0.0, Nov 11, 2026
- Fix
withRepoTokenPathsbinds a measured field whose declaration is a variable alone (var(--cds-button-primary, #0f62fe)) to the written token of its chain, so a design system measured without token files gets its colors and type bound to variablesv1.0.0, Nov 11, 2026
- Fix
Measure: a part's box-shadow becomes a
shadowfield (drop and inner shadows, transparent rings left out), drawn as Figma effects by the plugin; and a part a transform moves or scales (a progress indicator slid left with translateX) sits where and as big as it is drawn, out of the flow, instead of where the layout would put itv1.0.0, Nov 11, 2026
- Fix
Combobox: a chip cut by the field width shows its full value on hover (title)
v1.0.0, Nov 11, 2026
- Fix
Combobox: the listbox takes the field's name (its
label,aria-labeloraria-labelledby), so it is never an anonymous list, including while it closesv1.0.0, Nov 11, 2026
- Fix
Add a product opens on one question, "Which product does your team design for?", with two choice cards and their Field Guide drawings: "It's already built" (pick your product, or "Find it on GitHub" when Bridge sees none, with "Ask a developer" copying a ready message) and "It's a new product" (Bridge sets it up with your library)
v1.0.0, Nov 11, 2026
- Fix
It's a new product: no Where field and no address line any more
v1.0.0, Nov 11, 2026
- Fix
Studio: page headers drop their drawing, so the primary action sits at the end of the title line again and the header stays compact; Field Guide drawings show at once, with no draw-in
v1.0.0, Nov 11, 2026
- Fix
Studio Tokens: a page header and one toolbar row (filter field "Filter N tokens", type chips with counts, one Options menu for collections, usage, brand and modes, columns and exact match, then New token), and the table at full width with Name, Light and Dark
v1.0.0, Nov 11, 2026
- Fix
Pull no longer hides every component when one value in component-specs.json has a shape the plugin does not read: that field is listed with the others that cannot be bound ("update DS Bridge") and the rest pull as usual
v1.0.0, Nov 11, 2026
- Fix
Community art in the Field Guide direction (Fraunces, Harbor zone, Deep Harbor), with fresh screenshots of the plugin (595 variables) and Bridge Studio
v1.0.0, Nov 11, 2026
- Fix
Settings: a saved GitHub token shows as a Connected state row with Replace and Remove; the field appears only to replace it
v1.0.0, Nov 11, 2026
- Fix
Plugin screens in the Field Guide layout: a Harbor intro with a line drawing on every idle, connect and result screen, a Source card, Settings as cards with a link to create a token, Deep Harbor tab indicator
v1.0.0, Nov 11, 2026