Section
import { Card, Field, Group, Heading, Note, Once, Row, Soft } from '@hanzo/ui/settings'
A section
Its heading and action, a group over a bordered card of rows, a field, and the note the last action left.
GeneralHow this surface looks and listens.
AppearanceKept in this browser.
ThemeFollows the system.
hk-live-3f9aMade Sep 27, 2026
What should Hanzo call you?The home page greets you by it.
export function Default() {const [name, setName] = useState('')const [note, setNote] = useState('')return (<YStack gap="$6" width="100%" maxW={760}><Heading title="General" detail="How this surface looks and listens." action={<Button size="sm" onPress={() => setNote('Saved.')}>Save</Button>} /><Group title="Appearance" detail="Kept in this browser."><Card><Row first title="Theme" detail="Follows the system." trailing={<Switch aria-label="Dark" />} /><Row title="hk-live-3f9a" detail="Made Sep 27, 2026" mono trailing={<Button size="sm" variant="outline">Revoke</Button>} /></Card></Group><Field label="What should Hanzo call you?" hint="The home page greets you by it."><Input value={name} onChangeText={setName} placeholder="Name" aria-label="What should Hanzo call you?" /></Field><Note>{note}</Note></YStack>)}
The quiet lines
Empty, signed out — and a credential the platform shows once.
No keys yet.
Sign in to see your keys.
hk-live-3f9a0c71d2
Copy it now. It is not shown again.export function Quiet() {return (<YStack gap="$4" width="100%" maxW={760}><Card><Soft>No keys yet.</Soft></Card><Soft action={<Button size="sm">Sign in</Button>}>Sign in to see your keys.</Soft><Once value="hk-live-3f9a0c71d2" label="API key" /></YStack>)}
Types
export interface HeadingProps {title: string/** One or two lines on what the section is for. */detail?: string/** The section's one action — an Add, a Save. */action?: ReactNode/** The heading's outline level. The page's own title is the nav's, so 2. */level?: 1 | 2 | 3}
export interface GroupProps {title: stringdetail?: stringaction?: ReactNode/** One level under the section's `Heading`. */level?: 2 | 3 | 4children: ReactNode}
export interface RowProps {title: stringdetail?: string/** Before the words — a mark, an icon, a status. */leading?: ReactNode/** After them — what can be done to this row. */trailing?: ReactNode/** The Card's first row draws no rule above itself. */first?: boolean/** The title is an identifier — a key name, a path — and is set in `$mono`. */mono?: boolean}
export interface OnceProps {/** The credential. */value: string/** What it is — "API key". Names the value and its copy control. */label: string/** The line under it. */says?: string/** What follows — a Done. */children?: ReactNode}
Exports
CardFieldGroupHeadingNoteOnceRowSofttype GroupPropstype HeadingPropstype OncePropstype RowProps