Skip to content

feat: add semantic settings search#1687

Merged
arnestrickmann merged 6 commits intomainfrom
feature/semantic-settings-search
Apr 9, 2026
Merged

feat: add semantic settings search#1687
arnestrickmann merged 6 commits intomainfrom
feature/semantic-settings-search

Conversation

@janburzinski
Copy link
Copy Markdown
Collaborator

@janburzinski janburzinski commented Apr 7, 2026

Summary

finally able to search for the setting i was looking for quicker lol

very open on the design btw but its ok for testing this out for now
maybe we should make this just a search icon and when you click on it it expands(???) but then again i thought that would be too hard to maybe notice idk lol

this in general could also be a lil overcomplicated maybe but i really wanted to be able to search for e.g. jira or ticket and find jira and stuff

Fixes

#1682

Snapshot

Screen.Recording.2026-04-07.at.10.57.33.mov

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • Chore (refactoring code, technical debt, workflow improvements)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Refactor (does not change functionality, e.g. code style improvements, linting)
  • This change requires a documentation update

Mandatory Tasks

  • I have self-reviewed the code

Checklist

  • I have read the contributing guide
  • I have commented my code, particularly in hard-to-understand areas
  • I have checked if my PR needs changes to the documentation
  • I have added tests that prove my fix is effective or that my feature works

Summary by CodeRabbit

  • New Features

    • Added settings search with inline input, highlighted results, Cmd/Ctrl+F focus, and click-to-navigate/scroll-to behavior.
  • New UI Components

    • Added a dedicated settings search input and animated search results panel.
  • Enhancements

    • Added stable DOM anchors to many settings cards and rows for reliable scroll-to from search.
    • Centralized integrations metadata for consistent listing and runtime wiring.
  • Tests

    • Added tests validating the settings search index and integration routing.

- Add useSettingsSearch hook for indexing and searching settings
- Add SettingsSearchInput and SettingsSearchResults components
- Integrate search into SettingsPage with highlight and scroll-to behavior
- Add search metadata to all settings cards for indexability
- Add integration registry for searchable integration entries
- Add unit tests for settings search index
Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 7, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f309a904-f11d-44e9-8b63-c90a4bb72d17

📥 Commits

Reviewing files that changed from the base of the PR and between d3b82c5 and eb70f81.

📒 Files selected for processing (1)
  • src/test/renderer/settingsSearchIndex.test.ts
✅ Files skipped from review due to trivial changes (1)
  • src/test/renderer/settingsSearchIndex.test.ts

📝 Walkthrough

Walkthrough

Adds an in-app settings search with keyboard shortcut and scroll-to, centralizes integrations metadata, adds stable DOM IDs to many settings cards, refactors git-status parsing into helpers, restructures terminal input/submission and write-drain scheduling, and adds tests validating the settings/integrations index.

Changes

Cohort / File(s) Summary
Settings search UI & flow
src/renderer/components/SettingsPage.tsx, src/renderer/components/SettingsSearchInput.tsx, src/renderer/components/SettingsSearchResults.tsx, src/renderer/hooks/useSettingsSearch.ts
Introduced controlled search input with Cmd/Ctrl+F focus, a relevance-scored SETTINGS_INDEX, grouped/animated search results, click-to-navigate that switches tabs and scrolls target element into view; added search state and keyboard handling.
Settings card DOM IDs
src/renderer/components/BrowserPreviewSettingsCard.tsx, src/renderer/components/DefaultAgentSettingsCard.tsx, src/renderer/components/HiddenToolsSettingsCard.tsx, src/renderer/components/KeyboardSettingsCard.tsx, src/renderer/components/NotificationSettingsCard.tsx, src/renderer/components/RepositorySettingsCard.tsx, src/renderer/components/ResourceMonitorSettingsCard.tsx, src/renderer/components/ReviewAgentSettingsCard.tsx, src/renderer/components/RightSidebarSettingsCard.tsx, src/renderer/components/TaskHoverActionCard.tsx, src/renderer/components/TaskSettingsRows.tsx, src/renderer/components/TelemetryCard.tsx, src/renderer/components/TerminalSettingsCard.tsx, src/renderer/components/ThemeCard.tsx, src/renderer/components/WorkspaceProviderInfoCard.tsx
Added stable id attributes to root containers for many settings cards/rows to support scroll-to and DOM targeting; no behavioral changes.
Integration registry & usage
src/renderer/components/integrations/registry.ts, src/renderer/components/IntegrationsCard.tsx
Added INTEGRATION_REGISTRY and IntegrationId type; IntegrationsCard now derives entries from the registry and merges per-integration runtime/connect state.
Settings search tests
src/test/renderer/settingsSearchIndex.test.ts
Added tests ensuring SETTINGS_INDEX includes integration entries and that integration-indexed settings route to the integrations tab.
Git status parsing refactor
src/main/utils/gitStatusParser.ts
Refactored porcelain v1/v2 parsing into helpers (parseV1Entries, parseV2Entries, createStatusEntry, isStagedFromStatusCode) and tightened mergeNumstatValues typing; public APIs preserved.
Terminal input & submission refactors
src/renderer/terminal/TerminalInputBuffer.ts, src/renderer/terminal/submitCapture.ts, src/renderer/terminal/writeDrainScheduler.ts
Moved per-character processing into helpers, converted submission aggregation to a pure reduce/state object, simplified confirm/submit flow, and replaced finished/cancel semantics with isCancelled/hasRun and shared cleanup in scheduler.
New registry file
src/renderer/components/integrations/registry.ts
New registry exporting INTEGRATION_REGISTRY, IntegrationRegistryEntry, and IntegrationId with seven predefined integration entries.

Sequence Diagram(s)

sequenceDiagram
    participant User as User
    participant Page as SettingsPage
    participant Input as SettingsSearchInput
    participant Search as useSettingsSearch
    participant Results as SettingsSearchResults
    participant DOM as DOM

    User->>Input: Cmd/Ctrl+F / type query
    Input->>Page: onQueryChange(query)
    Page->>Search: searchSettings(trimmedQuery)
    Search-->>Page: results[]
    Page->>Results: render results
    User->>Results: click result
    Results->>Page: onResultClick(tabId, elementId)
    Page->>Page: switch tab, clear query
    Page->>DOM: render tab content
    Page->>DOM: element.scrollIntoView()
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 Hop, hop — I found the settings nest,

IDs for every card to make scrolling best,
Integrations lined up in tidy rows,
Search hops quick where a keyboard goes,
Parsers and terminals tuck in for rest.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add semantic settings search' clearly and concisely describes the main change: adding a semantic search feature to settings, which is the primary objective of this PR.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/semantic-settings-search

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@vercel
Copy link
Copy Markdown

vercel bot commented Apr 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Error Error Apr 7, 2026 7:55pm

Request Review

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (4)
src/renderer/components/SettingsSearchInput.tsx (2)

15-20: Minor: Consider calling .select() after .focus() for consistency with Cmd/Ctrl+F behavior.

The Cmd/Ctrl+F handler in SettingsPage calls both focus() and select(), but handleClear only calls focus(). This creates a subtle UX difference: after pressing Cmd+F the text is selected, but after clicking clear it is not. This is a minor inconsistency.

♻️ Optional fix for consistency
 const handleClear = () => {
   onQueryChange('');
   if (ref && typeof ref === 'object') {
     ref.current?.focus();
+    ref.current?.select();
   }
 };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/SettingsSearchInput.tsx` around lines 15 - 20,
handleClear currently calls onQueryChange('') and then ref.current?.focus()
which leaves the input unselected; change it to also call ref.current?.select()
after focus so clearing mirrors the Cmd/Ctrl+F behavior in SettingsPage. Update
the handleClear function (and any related refs used for the input) to call
focus() followed by select() on ref.current when present and of type object,
ensuring the caret/selection state matches the keyboard shortcut flow.

6-6: navigator.platform is deprecated but acceptable here.

For keyboard hint display (⌘F vs Ctrl F), this is a minor visual feature where the deprecated API is still widely supported. Consider using navigator.userAgentData?.platform with a fallback if broader future-proofing is desired, but this is not blocking.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/SettingsSearchInput.tsx` at line 6, The code uses
deprecated navigator.platform to set isMac which may break in future; update the
isMac detection in SettingsSearchInput by first checking
navigator.userAgentData?.platform (if available) and falling back to the
existing typeof navigator !== 'undefined' &&
/mac|iphone|ipad|ipod/i.test(navigator.platform) approach; update the
declaration for isMac (and any places referencing it) to use the new
userAgentData-first strategy so keyboard hints (e.g., "⌘F" vs "Ctrl F") continue
to render correctly.
src/renderer/hooks/useSettingsSearch.ts (1)

1-14: Type tabId as SettingsPageTab for compile-time safety.

Currently tabId: string allows any string value, but valid values are constrained to the SettingsPageTab union. This forces type casts in SettingsSearchResults.tsx when passing tabId to onResultClick.

♻️ Suggested fix
+import type { SettingsPageTab } from '@/components/SettingsPage';
+
 export interface SearchableSetting {
   id: string;
   label: string;
   description: string;
   aliases: string[];
-  tabId: string;
+  tabId: SettingsPageTab;
   /** DOM element id to scroll to when this result is selected. */
   elementId: string;
 }

This also requires updating groupResultsByTab return type:

-export function groupResultsByTab(results: SearchResult[]): Map<string, SearchResult[]> {
-  const grouped = new Map<string, SearchResult[]>();
+export function groupResultsByTab(results: SearchResult[]): Map<SettingsPageTab, SearchResult[]> {
+  const grouped = new Map<SettingsPageTab, SearchResult[]>();
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/hooks/useSettingsSearch.ts` around lines 1 - 14, Change
SearchableSetting.tabId from string to the SettingsPageTab union and update any
dependent types: update the SearchableSetting interface's tabId to
SettingsPageTab, adjust SearchResult if necessary, and change the return type of
groupResultsByTab to use SettingsPageTab keys; then update call sites (e.g.
where SearchableSetting.tabId is passed to onResultClick in
SettingsSearchResults.tsx) to remove casts. Ensure you import SettingsPageTab
where these types are declared/used and update any type annotations referencing
groupResultsByTab accordingly.
src/renderer/components/SettingsSearchResults.tsx (1)

87-94: Consider aligning tabId type at the source to avoid casts.

The as SettingsPageTab casts here are necessary because SearchableSetting.tabId is typed as string (see useSettingsSearch.ts line 6). This works but pushes type safety to runtime.

A cleaner approach would be to type tabId as SettingsPageTab in the SearchableSetting interface, which would provide compile-time guarantees that only valid tab IDs are used in SETTINGS_INDEX.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/SettingsSearchResults.tsx` around lines 87 - 94, The
SearchableSetting.tabId is currently typed as string causing casts; change the
SearchableSetting interface so tabId is typed as SettingsPageTab (update the
interface in useSettingsSearch.ts and any other declaration) and then update all
places that construct SearchableSetting (e.g., where SETTINGS_INDEX is built) to
use valid SettingsPageTab values so the compiler enforces correct tab IDs and
you can remove the runtime casts of tabId in SettingsSearchResults.tsx
(references: SearchableSetting, useSettingsSearch.ts, tabId, SettingsPageTab,
SETTINGS_INDEX).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/components/integrations/registry.ts`:
- Around line 15-25: The explicit type annotation on INTEGRATION_REGISTRY widens
the literal types to string; remove the "readonly IntegrationRegistryEntry[]"
annotation and instead keep the array as const and use the TypeScript
"satisfies" operator to validate shape (e.g. make INTEGRATION_REGISTRY a const
array with "as const" and add "satisfies readonly IntegrationRegistryEntry[]")
so IntegrationId (defined as (typeof INTEGRATION_REGISTRY)[number]['id'])
preserves the literal union; update the declaration of INTEGRATION_REGISTRY and
leave IntegrationId unchanged.

In `@src/renderer/terminal/TerminalInputBuffer.ts`:
- Around line 46-66: processInputCharacter currently ignores the line-kill
control (Ctrl+U, '\x15'), causing a cleared line to still be captured later;
update processInputCharacter to handle '\x15' by clearing this.buffer and also
clearing/resetting this.pendingMessage (mirroring the behavior in
submitCapture.ts) so that a Ctrl+U truly discards the current input and cannot
be accidentally captured as the next message.

In `@src/renderer/terminal/writeDrainScheduler.ts`:
- Around line 24-28: The execute() function needs a one-shot completion guard to
avoid calling run() twice when both schedulers trigger; add a local or outer
boolean (e.g., "hasRun" or "isCompleted") checked at the top of execute()
(alongside isCancelled) and set to true immediately after cleanup() but before
calling run(), so subsequent execute() invocations return early; apply the same
guard to the other execute() instance referenced in the file to ensure single
execution.
- Around line 31-35: The current RAF scheduling only checks
requestAnimationFrame but cleanup() assumes cancelAnimationFrame exists; update
the guard used when setting frameId (the canUseAnimationFrame check used before
calling requestAnimationFrame in writeDrainScheduler) to require both typeof
requestAnimationFrame === 'function' and typeof cancelAnimationFrame ===
'function', and in cleanup() only call cancelAnimationFrame(frameId) when that
same combined guard is true and frameId is non-null; leave the fallback timeout
(timeoutId, VISIBLE_DRAIN_FALLBACK_MS) and execute function logic unchanged.

---

Nitpick comments:
In `@src/renderer/components/SettingsSearchInput.tsx`:
- Around line 15-20: handleClear currently calls onQueryChange('') and then
ref.current?.focus() which leaves the input unselected; change it to also call
ref.current?.select() after focus so clearing mirrors the Cmd/Ctrl+F behavior in
SettingsPage. Update the handleClear function (and any related refs used for the
input) to call focus() followed by select() on ref.current when present and of
type object, ensuring the caret/selection state matches the keyboard shortcut
flow.
- Line 6: The code uses deprecated navigator.platform to set isMac which may
break in future; update the isMac detection in SettingsSearchInput by first
checking navigator.userAgentData?.platform (if available) and falling back to
the existing typeof navigator !== 'undefined' &&
/mac|iphone|ipad|ipod/i.test(navigator.platform) approach; update the
declaration for isMac (and any places referencing it) to use the new
userAgentData-first strategy so keyboard hints (e.g., "⌘F" vs "Ctrl F") continue
to render correctly.

In `@src/renderer/components/SettingsSearchResults.tsx`:
- Around line 87-94: The SearchableSetting.tabId is currently typed as string
causing casts; change the SearchableSetting interface so tabId is typed as
SettingsPageTab (update the interface in useSettingsSearch.ts and any other
declaration) and then update all places that construct SearchableSetting (e.g.,
where SETTINGS_INDEX is built) to use valid SettingsPageTab values so the
compiler enforces correct tab IDs and you can remove the runtime casts of tabId
in SettingsSearchResults.tsx (references: SearchableSetting,
useSettingsSearch.ts, tabId, SettingsPageTab, SETTINGS_INDEX).

In `@src/renderer/hooks/useSettingsSearch.ts`:
- Around line 1-14: Change SearchableSetting.tabId from string to the
SettingsPageTab union and update any dependent types: update the
SearchableSetting interface's tabId to SettingsPageTab, adjust SearchResult if
necessary, and change the return type of groupResultsByTab to use
SettingsPageTab keys; then update call sites (e.g. where SearchableSetting.tabId
is passed to onResultClick in SettingsSearchResults.tsx) to remove casts. Ensure
you import SettingsPageTab where these types are declared/used and update any
type annotations referencing groupResultsByTab accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b9954af4-ea94-4953-bbc6-1c88fef35697

📥 Commits

Reviewing files that changed from the base of the PR and between c797ed5 and 17bbcfb.

📒 Files selected for processing (26)
  • src/main/utils/gitStatusParser.ts
  • src/renderer/components/BrowserPreviewSettingsCard.tsx
  • src/renderer/components/DefaultAgentSettingsCard.tsx
  • src/renderer/components/HiddenToolsSettingsCard.tsx
  • src/renderer/components/IntegrationsCard.tsx
  • src/renderer/components/KeyboardSettingsCard.tsx
  • src/renderer/components/NotificationSettingsCard.tsx
  • src/renderer/components/RepositorySettingsCard.tsx
  • src/renderer/components/ResourceMonitorSettingsCard.tsx
  • src/renderer/components/ReviewAgentSettingsCard.tsx
  • src/renderer/components/RightSidebarSettingsCard.tsx
  • src/renderer/components/SettingsPage.tsx
  • src/renderer/components/SettingsSearchInput.tsx
  • src/renderer/components/SettingsSearchResults.tsx
  • src/renderer/components/TaskHoverActionCard.tsx
  • src/renderer/components/TaskSettingsRows.tsx
  • src/renderer/components/TelemetryCard.tsx
  • src/renderer/components/TerminalSettingsCard.tsx
  • src/renderer/components/ThemeCard.tsx
  • src/renderer/components/WorkspaceProviderInfoCard.tsx
  • src/renderer/components/integrations/registry.ts
  • src/renderer/hooks/useSettingsSearch.ts
  • src/renderer/terminal/TerminalInputBuffer.ts
  • src/renderer/terminal/submitCapture.ts
  • src/renderer/terminal/writeDrainScheduler.ts
  • src/test/renderer/settingsSearchIndex.test.ts

- registry: use 'as const satisfies' to preserve IntegrationId literal union
- TerminalInputBuffer: handle Ctrl+U (\x15) to clear buffer and pendingMessage
- writeDrainScheduler: add one-shot hasRun guard; require cancelAnimationFrame
- SettingsSearchInput: also select() input on clear for consistency with Cmd+F
- useSettingsSearch: type tabId as SettingsPageTab; drop runtime casts
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/hooks/useSettingsSearch.ts`:
- Around line 1-385: The file fails Prettier formatting—run your project's
Prettier formatter (e.g., npm run format or npx prettier --write) on the file
containing SETTINGS_INDEX, scoreField, searchSettings, and groupResultsByTab,
reformat the file to match the repo's Prettier config, verify CI/local
pre-commit hooks are happy, and commit the resulting formatted changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 40b6f2bf-2282-44e4-a55f-3e73cbf04dd9

📥 Commits

Reviewing files that changed from the base of the PR and between 17bbcfb and bbe9859.

📒 Files selected for processing (6)
  • src/renderer/components/SettingsSearchInput.tsx
  • src/renderer/components/SettingsSearchResults.tsx
  • src/renderer/components/integrations/registry.ts
  • src/renderer/hooks/useSettingsSearch.ts
  • src/renderer/terminal/TerminalInputBuffer.ts
  • src/renderer/terminal/writeDrainScheduler.ts
✅ Files skipped from review due to trivial changes (3)
  • src/renderer/terminal/TerminalInputBuffer.ts
  • src/renderer/components/integrations/registry.ts
  • src/renderer/terminal/writeDrainScheduler.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/renderer/components/SettingsSearchInput.tsx

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/renderer/hooks/useSettingsSearch.ts (1)

112-144: Consider aligning section comment with actual tab identifier.

The comment says "Agents Tab" but tabId is 'clis-models'. While the UI may display "Agents", the identifier mismatch could confuse future maintainers. Consider updating to // Agents (clis-models) Tab for clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/hooks/useSettingsSearch.ts` around lines 112 - 144, The section
comment "// Agents Tab" is misleading because the entries use tabId
'clis-models'; update the comment to include the actual tab identifier (for
example "// Agents (clis-models) Tab") so it matches the tabId used by items
like default-agent, review-agent, review-prompt, and cli-agents; ensure the
updated comment appears immediately above the block that contains those objects.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/renderer/hooks/useSettingsSearch.ts`:
- Around line 112-144: The section comment "// Agents Tab" is misleading because
the entries use tabId 'clis-models'; update the comment to include the actual
tab identifier (for example "// Agents (clis-models) Tab") so it matches the
tabId used by items like default-agent, review-agent, review-prompt, and
cli-agents; ensure the updated comment appears immediately above the block that
contains those objects.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ef1a9fa2-2a28-4264-81af-43dfdadc8d78

📥 Commits

Reviewing files that changed from the base of the PR and between bbe9859 and dfd8a7d.

📒 Files selected for processing (1)
  • src/renderer/hooks/useSettingsSearch.ts

@arnestrickmann
Copy link
Copy Markdown
Contributor

Really like that addition! especially the command+f shortcut! @janburzinski

@janburzinski
Copy link
Copy Markdown
Collaborator Author

typecheck should pass now :D

@arnestrickmann arnestrickmann merged commit 70ac89f into main Apr 9, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants