Picker appearance: horizontal layout, icon-only mode, icon size - #20
Merged
Merged
Conversation
…size The picker was one fixed shape, a vertical list of 22pt icons with names. With many browsers and profiles that's a tall column. A new optional `picker` config block (layout, labels, iconSize) sets it globally, edited under Settings → Browsers → Picker appearance. - Horizontal lays choices out in a grid sized to the screen: as many columns as fit, capped at 9 so the digit keys cover the first row. ←/→ step one choice and ↑/↓ jump a row. The vertical list keeps ↑/↓ only. - Icon-only drops the names. Grid cells and icon-only rows show the digit on the icon corner, and a line above the choices names the selected one, so same-icon Chrome profiles stay distinguishable. - iconSize is clamped to 16–64 on load rather than rejected, so a wild value can't take routing down with the config. An unknown layout or labels value fails to parse, and parse errors from bad values now name their location (e.g. "at picker.layout"). - The block is left out of the file until the user changes it, so existing configs don't grow a new key on their next save. Closes #13 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019Y9gVVaoGd4dCz42XkXkpP
Vertical + icons-only kept the 340pt panel with empty space where the names were, which missed the point of the mode. The footer's text links now become icon buttons in that mode, and the panel narrows to the icon column. Also: - Choice buttons carry an accessibility label; icon-only cells read as just "button" to VoiceOver before. - The icon-size slider saves keyboard and VoiceOver adjustments directly; only a mouse drag is buffered until release. Before, a non-drag change sat in the draft unsaved. - The saved-file assertion parses JSON rather than matching pretty-print spacing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019Y9gVVaoGd4dCz42XkXkpP
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Sep 27, 2026
jnahian
added a commit
that referenced
this pull request
Sep 27, 2026
The `picker` config key (layout, labels, iconSize) shipped in #20 without a mention in the README config section or the site's top-level key list, and the picker description didn't say it could change shape. Claude-Session: https://claude.ai/code/session_019Y9gVVaoGd4dCz42XkXkpP Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
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.
Closes #13. Replaces #17, which GitHub closed when its stacked base branch was deleted after #16 merged. Same commits, rebased onto
main.What
A new optional
pickerblock, global only (per-rule was left out, as the issue suggests):It's edited under Settings → Browsers → Picker appearance: a layout picker, a names/icons-only picker, and an icon-size slider. The slider saves once, when the drag ends, not on every tick.
How the issue's concerns are handled
PickerPanelController.movedSelection: ↑/↓ move by a row (one item in the vertical list), and ←/→ only move in the grid. In the vertical list they still fall through as before.1–9are unchanged. In a grid the digit sits as a badge on the icon's corner.resizePanelnow updates the max width as well as the max height. Cells have fixed sizes, so the scroll area's height is computed exactly, not estimated.iconSizeis clamped to 16–64 on load rather than rejected. An unknownlayoutorlabelsvalue fails to parse.describeDecodingError's.dataCorruptedbranch now includes the location, so the error readsCannot initialize Layout from invalid String value sideways at picker.layout. It previously had no location.pickeris optional and left out of the file until the user changes it, so existing configs don't gain a block on their next unrelated save. The Swift case for"none"is.iconOnly, because a case named.noneon an optional would silently compare againstOptional.none.Vertical + icons only
In this mode the panel narrows to the icon column (120pt at the default size). The footer's text links become icon buttons with tooltips and accessibility labels, and the keyboard-shortcut hint is dropped.
Testing
swift test: all passing. New tests:junction config validateon a bad and an oversized config: clear error for the bad value, clamped size for the oversized one.cd web && npm test && npm run buildpass. ChangelogAdded:entry and the docs' Settings summary are updated.🤖 Generated with Claude Code
https://claude.ai/code/session_019Y9gVVaoGd4dCz42XkXkpP