Skip to content

Commit 6b92938

Browse files
committed
docs(settings): document SettingsAction.tooltip in the settings rule
1 parent a61b2ec commit 6b92938

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

.claude/rules/sim-settings-pages.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,16 @@ return (
5555
## `SettingsPanel` props
5656

5757
- `actions?: SettingsAction[]` — right-aligned header chips, **data only**:
58-
`{ text, icon?, variant?: 'primary'|'destructive', active?, onSelect, disabled? }`.
58+
`{ text, icon?, variant?: 'primary'|'destructive', active?, onSelect, disabled?, tooltip? }`.
5959
The shell renders each as a `Chip` — never pass JSX, a `<div>`, or `className`
6060
(the locked contract: it's structurally impossible to vibe-code a padding
6161
change). Multiple/conditional actions are a plain array
6262
(`[...(canManage ? [{…}] : []), …]`). Labels are **sentence case** (`Add override`,
63-
not `Add Override`). Save/Discard pairs come from the `saveDiscardActions()`
64-
helper (spread it into `actions`). A widget that genuinely cannot be a chip
65-
(tooltip-wrapped chip, custom dropdown) goes in the `aside` escape hatch.
63+
not `Add Override`). A disabled action that needs to explain itself sets
64+
`tooltip` (the shell renders the hover tooltip, disabled chip included) — never
65+
hand-roll a tooltip-wrapped chip in `aside`. Save/Discard pairs come from the
66+
`saveDiscardActions()` helper (spread it into `actions`). Only a widget that
67+
genuinely cannot be a chip (e.g. one needing hover-prefetch) goes in `aside`.
6668
- `back?: SettingsBackAction` (`{ text, icon?, onSelect }`) — left-aligned back
6769
chip for a **detail sub-view** (e.g. a selected MCP server, a permission group,
6870
a retention policy). Detail sub-views render through `SettingsPanel` like list

0 commit comments

Comments
 (0)