Add settings sidebar search and plugin settings polish #186

Closed
opened 2026-06-01 06:50:33 +00:00 by steve · 0 comments
Owner

Settings currently has no global search across schema-backed settings,
settings tabs, and plugin metadata. Plugin settings gear buttons also have
separate routing logic in the core and community plugin tabs, which can fail for
plugins that expose only declarative configuration. The inline plugin metadata
panels use nested scroll containers, making the settings pane harder to scan.

Problem

Users must manually browse the settings sidebar and plugin lists to find
settings, declarative plugin configuration, plugin diagnostics, or feature
metadata. Declarative-only plugin settings can show an Options affordance whose
target is not resolved consistently. Plugin Details/Features panels also create
scrollable containers inside the already scrollable settings dialog.

Goal

Add structured, command-palette-style search to Settings and make plugin
settings navigation reliable for both imperative SettingTab plugins and
declarative configuration plugins. Let the main settings pane own scrolling for
plugin metadata panels.

Scope

  • Add a search field at the top of the Settings left sidebar.
  • Build a structured search index for schema-backed settings, settings tabs,
    core/community plugin rows, plugin metadata, diagnostics/features, and
    declarative configuration contribution text.
  • Reuse the shared @lapis-notes/ui fuzzy matcher and highlight matching text
    in grouped result cards shown in the main settings pane.
  • Route search results to settings sections, individual schema rows, settings
    tabs, plugin list rows, or plugin declarative configuration sections.
  • Share plugin settings target resolution between Core Plugins and Community
    Plugins.
  • Remove nested scroll behavior from inline plugin Details/Features panels.
  • Update workspace and configuration/settings specs.

Non-goals

  • Scraping hidden imperative settings tabs by mounting them off-screen.
  • Replacing the existing settings registry or plugin manager contracts.
  • Changing plugin distribution, registry signing, or install behavior.

Acceptance Criteria

  • The settings sidebar shows a search input above the nav.
  • Non-empty search queries keep the normal nav visible and replace the main
    settings pane with a fuzzy-ranked grouped result list.
  • Results render as large scan-friendly cards with highlighted
    title/path/excerpt text and navigate to the matched setting or plugin row.
  • Built-in schema settings, app settings tabs, core plugin rows, community
    plugin rows, plugin feature metadata, and declarative configuration
    contributions are searchable through structured data.
  • Core and Community plugin Options buttons open imperative settings tabs when
    present and declarative configuration categories otherwise.
  • Inline plugin metadata panels rely on the settings pane scroll instead of
    nested panel scroll containers.
  • Tests cover search indexing/navigation, plugin settings target resolution,
    and safe highlighting.
  • Specs are updated and validation passes.

Implementation Notes

  • Prefer new pure helpers under
    packages/workspace/src/lib/components/configuration/ for search indexing,
    navigation target resolution, and plugin settings resolution.
  • Keep all highlighting text-node based; do not write unsanitized HTML into
    search results.
  • Add stable data-* attributes to plugin rows and searchable targets so
    Playwright can assert navigation without depending on layout order.
  • Preserve existing uncommitted registry work in shared files.

Suggested Files or Specs To Inspect

  • packages/workspace/src/lib/components/configuration/configuration.svelte
  • packages/workspace/src/lib/components/configuration/configuration.ts
  • packages/workspace/src/lib/components/configuration/core-plugins.ts
  • packages/workspace/src/lib/components/configuration/community-plugins.ts
  • packages/workspace/src/lib/components/configuration/plugin-extension-panel.svelte
  • packages/workspace/src/lib/components/configuration/plugin-extension-features.svelte
  • packages/workspace/e2e/core-plugin-settings.spec.ts
  • spec/src/20-packages/workspace/index.md
  • spec/src/30-cross-package-contracts/configuration-and-settings.md

Validation Commands

  • pnpm --filter @lapis-notes/workspace exec vitest run src/lib/components/configuration
  • pnpm --filter @lapis-notes/workspace test:e2e -- --grep "settings"
  • pnpm --filter @lapis-notes/workspace check:all
  • make spec-lint
  • mdbook build spec
  • pnpm test:smoke

Follow-up Tasks

Implementation Summary

Added structured settings search with right-pane grouped result cards, safe
text-node highlighting, schema/tab/plugin/plugin-feature indexing, shared
plugin settings target resolution, plugin row search targets, natural-height
plugin metadata panels, updated Playwright coverage, and synced
workspace/API/configuration specs.

Reduced right-pane settings search result headings, card titles, metadata text,
and card spacing so the results read slightly smaller than the surrounding
settings pane while preserving navigation behavior.

Fixed the settings search regression by making left-sidebar section and settings-tab clicks clear search, wait for the normal settings pane to remount, then select or scroll to the target. Added Playwright coverage for navigating to both changed and already-active left-nav items after searching.

Reopen Reason

Regression in the just-closed settings search work: after entering a search query, clicking items in the left settings navigation can clear the search results without rendering the selected settings panel.

Settings currently has no global search across schema-backed settings, settings tabs, and plugin metadata. Plugin settings gear buttons also have separate routing logic in the core and community plugin tabs, which can fail for plugins that expose only declarative configuration. The inline plugin metadata panels use nested scroll containers, making the settings pane harder to scan. ## Problem Users must manually browse the settings sidebar and plugin lists to find settings, declarative plugin configuration, plugin diagnostics, or feature metadata. Declarative-only plugin settings can show an Options affordance whose target is not resolved consistently. Plugin Details/Features panels also create scrollable containers inside the already scrollable settings dialog. ## Goal Add structured, command-palette-style search to Settings and make plugin settings navigation reliable for both imperative `SettingTab` plugins and declarative configuration plugins. Let the main settings pane own scrolling for plugin metadata panels. ## Scope - Add a search field at the top of the Settings left sidebar. - Build a structured search index for schema-backed settings, settings tabs, core/community plugin rows, plugin metadata, diagnostics/features, and declarative configuration contribution text. - Reuse the shared `@lapis-notes/ui` fuzzy matcher and highlight matching text in grouped result cards shown in the main settings pane. - Route search results to settings sections, individual schema rows, settings tabs, plugin list rows, or plugin declarative configuration sections. - Share plugin settings target resolution between Core Plugins and Community Plugins. - Remove nested scroll behavior from inline plugin Details/Features panels. - Update workspace and configuration/settings specs. ## Non-goals - Scraping hidden imperative settings tabs by mounting them off-screen. - Replacing the existing settings registry or plugin manager contracts. - Changing plugin distribution, registry signing, or install behavior. ## Acceptance Criteria - The settings sidebar shows a search input above the nav. - Non-empty search queries keep the normal nav visible and replace the main settings pane with a fuzzy-ranked grouped result list. - Results render as large scan-friendly cards with highlighted title/path/excerpt text and navigate to the matched setting or plugin row. - Built-in schema settings, app settings tabs, core plugin rows, community plugin rows, plugin feature metadata, and declarative configuration contributions are searchable through structured data. - Core and Community plugin Options buttons open imperative settings tabs when present and declarative configuration categories otherwise. - Inline plugin metadata panels rely on the settings pane scroll instead of nested panel scroll containers. - Tests cover search indexing/navigation, plugin settings target resolution, and safe highlighting. - Specs are updated and validation passes. ## Implementation Notes - Prefer new pure helpers under `packages/workspace/src/lib/components/configuration/` for search indexing, navigation target resolution, and plugin settings resolution. - Keep all highlighting text-node based; do not write unsanitized HTML into search results. - Add stable `data-*` attributes to plugin rows and searchable targets so Playwright can assert navigation without depending on layout order. - Preserve existing uncommitted registry work in shared files. ## Suggested Files or Specs To Inspect - `packages/workspace/src/lib/components/configuration/configuration.svelte` - `packages/workspace/src/lib/components/configuration/configuration.ts` - `packages/workspace/src/lib/components/configuration/core-plugins.ts` - `packages/workspace/src/lib/components/configuration/community-plugins.ts` - `packages/workspace/src/lib/components/configuration/plugin-extension-panel.svelte` - `packages/workspace/src/lib/components/configuration/plugin-extension-features.svelte` - `packages/workspace/e2e/core-plugin-settings.spec.ts` - `spec/src/20-packages/workspace/index.md` - `spec/src/30-cross-package-contracts/configuration-and-settings.md` ## Validation Commands - `pnpm --filter @lapis-notes/workspace exec vitest run src/lib/components/configuration` - `pnpm --filter @lapis-notes/workspace test:e2e -- --grep "settings"` - `pnpm --filter @lapis-notes/workspace check:all` - `make spec-lint` - `mdbook build spec` - `pnpm test:smoke` ## Related Issues - Follow-up to #91 — [Replace plugin list diagnostics with VS Code-style Features panel](../closed/91-replace-plugin-list-diagnostics-with-vs-code-style-features-panel.md) ## Follow-up Tasks ## Implementation Summary Added structured settings search with right-pane grouped result cards, safe text-node highlighting, schema/tab/plugin/plugin-feature indexing, shared plugin settings target resolution, plugin row search targets, natural-height plugin metadata panels, updated Playwright coverage, and synced workspace/API/configuration specs. Reduced right-pane settings search result headings, card titles, metadata text, and card spacing so the results read slightly smaller than the surrounding settings pane while preserving navigation behavior. Fixed the settings search regression by making left-sidebar section and settings-tab clicks clear search, wait for the normal settings pane to remount, then select or scroll to the target. Added Playwright coverage for navigating to both changed and already-active left-nav items after searching. ## Reopen Reason Regression in the just-closed settings search work: after entering a search query, clicking items in the left settings navigation can clear the search results without rendering the selected settings panel. <!-- backlog:task_id=TASK-SETTINGS-SEARCH-PLUGIN-POLISH source_spec=spec/src/20-packages/workspace/index.md related_issue=91 -->
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lapis-notes/lapis#186
No description provided.