@@ -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