Add editable zoom dropdown with custom percentages (APP-4961)#14248
Draft
warp-dev-github-integration[bot] wants to merge 11 commits into
Draft
Add editable zoom dropdown with custom percentages (APP-4961)#14248warp-dev-github-integration[bot] wants to merge 11 commits into
warp-dev-github-integration[bot] wants to merge 11 commits into
Conversation
APP-4961) Spec for APP-4961: replace the Zoom setting's fixed-value dropdown with a reusable EditableDropdown (combobox) that keeps the existing presets and lets the user type a percentage directly, validated with the EditorView conventions (error border, commit on Enter/blur, revert on Escape/invalid). Resolves the open 350% preset / custom-range ambiguity (50-350% for consistency, surfaced for product confirmation). Full product + tech spec with exhaustive checkable validation criteria. Co-Authored-By: Warp <agent@warp.dev>
Add a reusable editable dropdown that combines preset menu actions with validated free-text entry. Wire Appearance zoom to accept integer percentages from 50% through 350%, preserve existing presets, and keep external setting changes synchronized. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
warp-dev-github-integration
Bot
force-pushed
the
factory/editable-zoom-dropdown
branch
from
July 24, 2026 17:44
aa94bce to
7bdc1ed
Compare
Co-Authored-By: Oz <oz-agent@warp.dev>
warp-dev-github-integration
Bot
force-pushed
the
factory/editable-zoom-dropdown
branch
from
July 24, 2026 17:45
7bdc1ed to
37336d7
Compare
Keep the test-only dispatch recorder type-erased so EditableDropdown remains generic over DropdownItemAction without requiring an additional Clone bound. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
Keep the spec-required helper surface available for future consumers while explicitly allowing the three helpers not yet wired outside the Zoom setting. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
Register the existing UserWorkspaces mock required when EditorView tests compile with the voice_input feature enabled. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
Use the standard test settings initializer so all feature-gated EditorView dependencies, including AISettings, are registered before constructing EditableDropdown. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
Initialize EditableDropdown tests with the same singleton dependencies used by EditorView tests, including all-features voice input support. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
Co-Authored-By: Oz <oz-agent@warp.dev>
Keep keyboard highlight changes provisional until a preset action is committed, preventing Escape from leaving an uncommitted percentage in the editable field. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Oz <oz-agent@warp.dev>
Co-Authored-By: Oz <oz-agent@warp.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
Adds a reusable
EditableDropdown<A>combobox that preserves preset menu actions while allowing validated free-text entry throughEditorView.Appearance → Window → Zoom now:
%;WindowSettings.zoom_level.ZoomLevelnow owns the shared bounds, percentage parser, and clamp validation.Linked Issue
Closes #7793
Linear: https://linear.app/warpdotdev/issue/APP-4961/editable-zoom-dropdown-preset-values-plus-free-text-entry-with-input
spec-done/ ready to implement.Testing
view_components::editable_dropdown::tests::typed_values_validate_commit_and_revert.view_components::editable_dropdown::tests::presets_and_external_values_stay_synchronized.window_settings::tests::parse_zoom_level_percentagewith the full accepted/rejected input table../script/format --check./script/check_no_inline_test_modules./script/run.Manual QA on final HEAD
9f99ad58covered the complete preset list; arrow-key highlight + Escape cancellation without stale text; selecting 125%; entering and applying 142%; the invalid 400 red-border/revert/refocus path; and Reset synchronization back to 100%.Screenshots / Videos
Computer-use screenshots
Computer-use video recordings
View video recording: Full flow of interacting with the Window → Zoom control in Warp Settings → Appearance: opening the preset menu, choosing a preset, typing a custom value (142), entering an invalid value (400), and using Reset to default.
Final-head keyboard navigation and core-flow proof
View final-head video recording: arrow highlight + Escape cancellation, 125% preset, custom 142%, invalid 400, and Reset.
Agent Mode
CHANGELOG-IMPROVEMENT: Enter any integer zoom percentage from 50% through 350% in Appearance settings.
Originating thread: https://warpdev.slack.com/archives/C0BDQDW8V5E/p1784907267342129
Co-Authored-By: Oz oz-agent@warp.dev
Conversation: https://staging.warp.dev/conversation/baa8416a-7862-4068-97ec-80b8e75a558b
Run: https://oz.staging.warp.dev/runs/019f94f9-9196-7cd1-897e-2e4ee829e208
This PR was generated with Oz.