Settings Section

Layout for grouped settings pages.

Notifications

Choose what reaches your inbox.

Installation

pnpm dlx shadcn@latest add @paneui/settings-section

Usage

Composition

Examples

Danger Zone

Use for actions that delete data or can't be undone.

Interactive Rows

Use when a row opens a page, a dialog or a link.

Settings Nav

Rows

A row wraps its control under the text on narrow screens. Render it as a <label> (render={<label />}) so clicking anywhere toggles its switch.

Nav

Below md the settings nav becomes a horizontally scrolling strip.

Interactive rows

An interactive row is one <button> (or the element render gives): it takes the hover and press fill, an inset focus ring and a trailing chevron that flips in right-to-left layouts. Keep other controls out of it.

API Reference

SettingsGroup

Also accepts every prop of div.

tone= "default"
"default" | "destructive"
Destructive ring for a danger zone.
PropTypeDefaultDescription
tone"default" | "destructive""default"Destructive ring for a danger zone.

SettingsRow

Min 56px row with a hairline between rows. Also accepts every prop of div (useRender).

render
ReactElement
Render as another element, e.g. <label /> or a router link.
interactive= false
boolean
The row is the control: a <button> by default, with hover and press fill, focus ring and chevron.
detail
ReactNode
Muted trailing text before the chevron, such as the current value.
chevron= true
boolean
Show the chevron on an interactive row.
PropTypeDefaultDescription
renderReactElement—Render as another element, e.g. <label /> or a router link.
interactivebooleanfalseThe row is the control: a <button> by default, with hover and press fill, focus ring and chevron.
detailReactNode—Muted trailing text before the chevron, such as the current value.
chevronbooleantrueShow the chevron on an interactive row.
data-interactive
Present on an interactive row.
Data attributeDescription
data-interactivePresent on an interactive row.

Interactive row that renders an <a> and takes every anchor attribute; pass render for a router link. Also accepts every prop of a.

target
string
_blank without rel adds rel="noopener noreferrer".
external= false
boolean
An external-link icon instead of the chevron.
detail
React.ReactNode
Same as SettingsRow.
chevron= true
boolean
Same as SettingsRow.
PropTypeDefaultDescription
targetstring—_blank without rel adds rel="noopener noreferrer".
externalbooleanfalseAn external-link icon instead of the chevron.
detailReact.ReactNode—Same as SettingsRow.
chevronbooleantrueSame as SettingsRow.

SettingsGroupFooter

Muted band for Save / Cancel; with a SettingsFooterNote the note sits left. Also accepts every prop of div.

SettingsNavItem

Also accepts every prop of a (useRender).

isActive
boolean
Current page.
icon
ReactNode
16px solid icon.
render
ReactElement
Your router link.
PropTypeDefaultDescription
isActiveboolean—Current page.
iconReactNode—16px solid icon.
renderReactElement—Your router link.