feat(settings): add item search (#1592)

Adds item-level search inside Settings so users can find concrete settings like provider auth, agent mode, terminal font size, tunnel options, notification events, and similar controls instead of only filtering top-level pages.
Groups search results by Settings page and shows localized labels plus optional descriptions where useful.
Supports keyboard navigation with Arrow Up/Down, Enter, and Escape, matching the existing autocomplete interaction style.
Opens the correct Settings page or split-page draft state before scrolling to the matching control.
Highlights the matched setting with a subtle token-based background so users can see where they landed without an aggressive outline.
Adds explicit data-settings-item anchors across Settings pages and a centralized search registry with runtime/mobile availability guards.
Updates Settings UI skill guidance so future Settings changes keep search registry entries, anchors, localization, and availability guards in sync.
This commit is contained in:
Bohdan Triapitsyn
2026-06-10 12:15:15 +03:00
committed by GitHub
parent eff6f46ad9
commit 079e3a9bd6
44 changed files with 1428 additions and 87 deletions
@@ -68,6 +68,12 @@ export const PluginsSidebar: React.FC<PluginsSidebarProps> = ({
void loadPlugins();
}, [loadPlugins]);
React.useEffect(() => {
const handleOpenAdd = () => setIsAddOpen(true);
window.addEventListener('openchamber:settings-open-plugin-add', handleOpenAdd);
return () => window.removeEventListener('openchamber:settings-open-plugin-add', handleOpenAdd);
}, []);
const updateCounts = React.useMemo(() => {
const counts = { userEntries: 0, projectEntries: 0 };
for (const entry of entries) {
@@ -282,6 +288,7 @@ export const PluginsSidebar: React.FC<PluginsSidebarProps> = ({
<div className="flex items-center gap-1">
<Button
type="button"
data-settings-item="plugins.create"
variant="ghost"
size="icon"
className="h-7 w-7 -my-1 text-muted-foreground"