Add UI Controls Library for plugin interfaces #897
+3,586
−1,727
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Introduces a comprehensive TypeScript UI Controls Library (
controls.ts) that provides reusable components for building plugin interfaces. This eliminates manual text construction and byte offset calculation when creating plugin UIs, mirroring the Rust control patterns used in the editor's Settings UI.Key Changes
New Controls Library (
controls.ts): Added 1135 lines of TypeScript controls including:ButtonControl- Buttons with focus indicators (brackets when focused)ToggleButton- Toggle buttons with ON/OFF stateListControl<T>- Selectable lists with scrolling and selection managementGroupedListControl<T>- Lists with grouped sections (e.g., "Installed" vs "Available")TextInputControl- Text input fields with cursor managementFocusManager<T>- Focus cycling through UI elements (mirrors Rust FocusManager)SplitView- Side-by-side panel rendering with dividersFilterBar- Toggle filter buttonsHelpBar- Key binding help displaySeparator&Label- Simple layout componentsType Definitions: Added
StyleRange,ControlOutput,ItemRenderer, and related types for consistent styling and renderingExport Updates (
index.ts):VirtualBufferBuilderexport (fromvbuffer.ts)Code Formatting: Applied consistent formatting across
finder.ts,navigation-controller.ts,panel-manager.ts, andsearch-utils.ts(trailing commas, line breaks for readability)Implementation Details
render()method returningControlOutputwith text and style rangesFocusStateenum) support Normal, Focused, Hovered, and Disabled statesBenefits
https://claude.ai/code/session_01Kt49PHNWUZjs4TNk8zxZZ1