Make plugin settings rows expandable #230

Closed
opened 2026-06-02 16:03:46 +00:00 by steve · 0 comments
Owner

Turn the Settings > Core plugins and Settings > Community plugins plugin rows into expandable sections so feature-heavy rows do not always render their full inline details panel.

Problem

Core and Community plugin settings rows currently always render the mounted inline panel under the row header. That makes the plugin management lists harder to scan once a plugin exposes feature sections, and it forces settings-search navigation to land on rows whose relevant feature content is always already expanded.

Goal

Add row-level disclosure so rows with plugin feature sections show a chevron affordance, start collapsed, and expand inline when the user clicks the row or disclosure button.

Scope

  • Settings > Core plugins rows in packages/workspace/src/lib/components/configuration/core-plugins.ts
  • Settings > Community plugins rows in packages/workspace/src/lib/components/configuration/community-plugins.ts
  • Settings search row navigation in packages/workspace/src/lib/components/configuration/configuration.svelte
  • Shared settings/plugin specs that describe those plugin rows

Non-goals

  • Reworking the Plugin registry Installed tab
  • Replacing the shared Setting / SettingTab model with a new Svelte list view
  • Redesigning the existing inline Details | Features panel contents

Acceptance Criteria

  • Core plugin rows with feature sections render a disclosure affordance at the end of the row, start collapsed, and expand inline on row click.
  • Community plugin rows with feature sections behave the same way for loaded plugins and indexed-diagnostics-only rows.
  • Rows without feature sections do not show a disclosure affordance and keep their current visible details content.
  • Existing row controls such as settings, restart, disable, uninstall, hotkeys, and enable/disable toggles keep their current behavior and do not accidentally toggle the row.
  • Settings search navigation expands a targeted collapsed plugin row before scrolling and highlighting it.

Implementation Notes

  • Reuse PluginExtensionPanel and buildPluginFeatureSections(...); do not fork the feature rendering.
  • Keep expansion state local to the active SettingTab instance so rerenders can preserve expanded rows during the session.
  • Add a small shared helper for row disclosure wiring instead of duplicating DOM event handling in both plugin tabs.

Suggested Files or Specs To Inspect

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

Validation Commands

  • pnpm --filter @lapis-notes/workspace check:types
  • pnpm --filter @lapis-notes/workspace check:unit
  • make spec-lint
  • mdbook build spec
  • pnpm test:smoke

Follow-up Tasks

Implementation Summary

Made Core plugins and Community plugins rows expandable with chevron disclosure, added row-reveal search behavior, and documented the new settings interaction.

Turn the Settings > Core plugins and Settings > Community plugins plugin rows into expandable sections so feature-heavy rows do not always render their full inline details panel. ## Problem Core and Community plugin settings rows currently always render the mounted inline panel under the row header. That makes the plugin management lists harder to scan once a plugin exposes feature sections, and it forces settings-search navigation to land on rows whose relevant feature content is always already expanded. ## Goal Add row-level disclosure so rows with plugin feature sections show a chevron affordance, start collapsed, and expand inline when the user clicks the row or disclosure button. ## Scope - Settings > Core plugins rows in `packages/workspace/src/lib/components/configuration/core-plugins.ts` - Settings > Community plugins rows in `packages/workspace/src/lib/components/configuration/community-plugins.ts` - Settings search row navigation in `packages/workspace/src/lib/components/configuration/configuration.svelte` - Shared settings/plugin specs that describe those plugin rows ## Non-goals - Reworking the Plugin registry Installed tab - Replacing the shared `Setting` / `SettingTab` model with a new Svelte list view - Redesigning the existing inline Details | Features panel contents ## Acceptance Criteria - Core plugin rows with feature sections render a disclosure affordance at the end of the row, start collapsed, and expand inline on row click. - Community plugin rows with feature sections behave the same way for loaded plugins and indexed-diagnostics-only rows. - Rows without feature sections do not show a disclosure affordance and keep their current visible details content. - Existing row controls such as settings, restart, disable, uninstall, hotkeys, and enable/disable toggles keep their current behavior and do not accidentally toggle the row. - Settings search navigation expands a targeted collapsed plugin row before scrolling and highlighting it. ## Implementation Notes - Reuse `PluginExtensionPanel` and `buildPluginFeatureSections(...)`; do not fork the feature rendering. - Keep expansion state local to the active `SettingTab` instance so rerenders can preserve expanded rows during the session. - Add a small shared helper for row disclosure wiring instead of duplicating DOM event handling in both plugin tabs. ## Suggested Files or Specs To Inspect - `packages/workspace/src/lib/components/configuration/core-plugins.ts` - `packages/workspace/src/lib/components/configuration/community-plugins.ts` - `packages/workspace/src/lib/components/configuration/configuration.svelte` - `packages/workspace/src/lib/components/configuration/plugin-extension-panel.svelte` - `packages/workspace/src/lib/components/configuration/plugin-feature-sections.ts` - `spec/src/30-cross-package-contracts/configuration-and-settings.md` - `spec/src/20-packages/workspace/index.md` - `packages/workspace/spec.md` ## Validation Commands - `pnpm --filter @lapis-notes/workspace check:types` - `pnpm --filter @lapis-notes/workspace check:unit` - `make spec-lint` - `mdbook build spec` - `pnpm test:smoke` ## Related Issues - Follow-up to #186 — [Add settings sidebar search and plugin settings polish](../closed/186-add-settings-sidebar-search-and-plugin-settings-polish.md) ## Follow-up Tasks ## Implementation Summary Made Core plugins and Community plugins rows expandable with chevron disclosure, added row-reveal search behavior, and documented the new settings interaction. <!-- backlog:task_id=TASK-WORKSPACE-PLUGIN-ROW-DISCLOSURE source_spec=spec/src/30-cross-package-contracts/configuration-and-settings.md related_issue=186 -->
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#230
No description provided.