ComponentsLayout

Settings List

Titled groups of settings. Each row names a setting, explains it, and puts its value or control beside it.

Profile

Picture

Shown beside your name in every workspace. PNG, JPEG, or WebP, up to 2 MB. It is resized to 128 px. Without one, a colored initial is shown.
M
Shown to people in your workspaces. Up to 80 characters.

Email

Used to sign in.

Sign-in methods

Private to your account. Available ways to sign in, not a record of past logins.

Google · Email link

Preferences

Theme

System follows your device. Saved in this browser.

Analytics

Review or change optional analytics for this browser.
Sign-in methods state

Usage

Settings list usageTSX
import { SettingsGroup, SettingsRow } from "@tulipfarm/sprout/settings-list";

<SettingsGroup title="Profile" titleId="profile-heading">
  <SettingsRow label="Email" description="Used to sign in.">
    <span className="break-all">{user.email}</span>
  </SettingsRow>
  <SettingsRow
    label="Name"
    htmlFor="account-name"
    description={<span id="account-name-help">Up to 80 characters.</span>}
  >
    <Input id="account-name" aria-describedby="account-name-help" />
  </SettingsRow>
</SettingsGroup>

SettingsGroup renders a section with a title and a bordered panel. Pass titleId to name the section by its title; leave it out for lists that repeat, like one group per table. The title is anh2; set heading to "h3" or "h4" when the group sits under another heading.

SettingsRow takes a label, an optionaldescription, and children for the value or control. WithhtmlFor, the label is a real label, so clicking it focuses the control. A row without children has no control area, which suits read-only facts like a role or a directory entry.

Rows

Rows stack text over the control in narrow groups. From 36rem of group width, the control moves to the right and takes at most 60% of the row. Controls wrap; long text and codes break instead of overflowing.

Row content

Workspace identity

Role

Your role is workspace admin.

Workspace name

Northwind Logistics

Role

Your role in this workspace.
admin

Workspace URL

Permanent address. This cannot be edited.
https://app.tulipfarm.example/northwind-logistics-international-operations
Shown to people in your workspaces. Up to 80 characters.

Pause fictional notifications.
Groups without a named title

Workspace directory

Notes, forms, and alerts

Other children in a groupTSX
<SettingsGroup title="Workspace identity" titleId="identity-heading">
  {!admin && <p className="px-[var(--sprout-settings-row-inline)] py-[var(--sprout-settings-row-block)]">
    Only workspace admins can rename or close this workspace.
  </p>}
  <form onSubmit={save}>
    <SettingsRow label="Workspace name" htmlFor="workspace-name">…</SettingsRow>
    {dirty && <div className="flex justify-end gap-2 px-4 pb-3">…</div>}
  </form>
  {saved && <p role="status">Workspace name saved.</p>}
</SettingsGroup>

Any child can sit in a group, and every child gets a divider above it. Children that render nothing add no divider. Notes and blocks can match row padding with --sprout-settings-row-inline and--sprout-settings-row-block. Pick the Workspace and Account pages in the playground to see forms, save messages, a conflict alert, and loading or error states inside rows.

Accessibility

Name controls with htmlFor, or pass your ownlabel element as the label. Link help text witharia-describedby by giving the description an id. The list has no motion of its own. Switches, checkboxes, the text field, and the theme toggle in these examples are docs-only stand-ins; data and saving are sample code.