Repository navigation
Conversation
- Add Pin/Unpin to the dock context menu, and open the menu on group popover and group sidebar members. The menu takes focus, supports arrow keys, and Escape closes it and returns focus to the trigger. - A pinned group member now also gets its own dock bar button, so a tool such as Nuxt > Components is one click away. - The float bar keeps up to `docksRecentLimit` (default 3) tools last opened from a group popover or the overflow menu, in slots after the bar items. Recent group members show even when the bar does not overflow. The session store gains `recentDockIds`; `recentDockId` is deprecated and still read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
👁️🗨️ Review this pull request with grouped, summarized diffs at: raw result💭 analyzed by {
"headSha": "f324c4ac7cfddbb81c39f58252250ea4036b0a73",
"result": {
"overallSummary": "Adds a \"Pin\" item to the dock context menu (now also usable via right-click on group popover/sidebar rows and via keyboard) and redefines pinning a group member as giving it its own bar button. It also generalizes the float bar's single \"recent dock\" slot into up to `docksRecentLimit` (default 3) slots that work even when the bar doesn't overflow, fixing the case where Nuxt DevTools' ~20-member group never surfaced a recent tool. The changes span core split/grouping logic, UI components, a new settings control, translations, tests/stories, and documentation.",
"groups": [
{
"key": "core-pin-recent-logic",
"label": "Pin & recent dock logic",
"summary": "Core domain logic for the feature: `docksGroupByCategories` gains `liftPinnedMembers` so a pinned group member gets its own bar bucket, the recent-dock slot is generalized from a single entry (`recentDockId`) to a capped list (`recentDockIds`, `docksRecentLimit`), and the new setting/session fields are declared across the `@devframes/hub` and `hub-ui` type augmentations.",
"category": "core",
"filePaths": [
"packages/hub-ui/src/client/state/dock-settings.ts",
"packages/hub-ui/src/client/state/docks.ts",
"packages/hub-ui/src/client/state/context.ts",
"packages/hub-ui/src/client/state/settings-defaults.ts",
"packages/hub-ui/src/client/types.ts",
"packages/hub/src/client/docks.ts",
"tests/__snapshots__/tsnapi/@devframes/hub/client.snapshot.d.ts"
],
"fileNotes": [
{
"path": "packages/hub-ui/src/client/state/dock-settings.ts",
"text": "Main algorithm changes: capacity-aware recent-slot reservation now supports multiple entries and lifting pinned members onto the bar without displacing visible bar items."
},
{
"path": "packages/hub/src/client/docks.ts",
"text": "`recentDockId` is deprecated in favor of `recentDockIds`; both fields stay on the interface for backward compatibility."
}
]
},
{
"key": "ui-context-menu-and-bar",
"label": "Dock context menu & bar UI",
"summary": "User-facing pieces: a Pin/Unpin item is added to the dock context menu (now keyboard-navigable and reachable from group popover/sidebar rows too), the float bar renders multiple recent slots alongside pinned member buttons, and a new Settings > Appearance control lets users set the recent-tools limit.",
"category": "ui",
"filePaths": [
"packages/hub-ui/src/client/components/dock/Dock.vue",
"packages/hub-ui/src/client/components/dock/DockContextMenu.ts",
"packages/hub-ui/src/client/components/dock/DockGroupPopover.vue",
"packages/hub-ui/src/client/components/dock/DockGroupSidebar.vue",
"packages/hub-ui/src/client/components/views-builtin/SettingsAppearance.vue",
"packages/hub-ui/src/client/state/commands.ts"
],
"critical": true,
"fileNotes": [
{
"path": "packages/hub-ui/src/client/components/dock/DockContextMenu.ts",
"text": "Adds a focus-managed menu component (Shift+F10/Menu key support, arrow/Home/End navigation, Escape/Tab handling) plus the Pin/Unpin action and visibility rule."
},
{
"path": "packages/hub-ui/src/client/state/commands.ts",
"text": "The global shortcut listener now ignores keys originating inside the open dock menu, so Escape closes only the menu instead of the whole panel."
}
]
},
{
"key": "tests-and-stories",
"label": "Tests and stories",
"summary": "Unit tests rewritten for the new multi-entry recent-slot and pinned-member behavior, plus a new Storybook story demonstrating a pinned member and a recent slot together.",
"category": "tests",
"filePaths": [
"packages/hub-ui/src/client/state/dock-settings.test.ts",
"packages/hub-ui/src/client/components/dock/Dock.stories.ts"
]
},
{
"key": "i18n-locales",
"label": "Locale strings",
"summary": "Adds translated labels for the new 'Recent tools on the dock bar' appearance setting across all supported locales.",
"category": "i18n",
"filePaths": [
"packages/hub-ui/src/client/i18n/locales/de.json",
"packages/hub-ui/src/client/i18n/locales/en.json",
"packages/hub-ui/src/client/i18n/locales/es.json",
"packages/hub-ui/src/client/i18n/locales/fr.json",
"packages/hub-ui/src/client/i18n/locales/ja.json",
"packages/hub-ui/src/client/i18n/locales/ko.json",
"packages/hub-ui/src/client/i18n/locales/pt-BR.json",
"packages/hub-ui/src/client/i18n/locales/ru.json",
"packages/hub-ui/src/client/i18n/locales/zh-CN.json",
"packages/hub-ui/src/client/i18n/locales/zh-TW.json"
]
},
{
"key": "docs-guide",
"label": "Guide documentation",
"summary": "Documents the new pin and recent-tools behavior for hub-ui and the integrator-facing note that no group config changes are needed.",
"category": "docs",
"filePaths": [
"docs/content/1.guide/16.hub.md"
]
}
],
"schemaVersion": 1,
"source": "llm",
"generatedAt": "2026-10-30T00:24:43.410Z",
"model": "vercel-ai-gateway/anthropic/claude-sonnet-5",
"locale": "en"
}
} |
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.
Why
Nuxt DevTools v4 puts about 20 tools in one dock group ("Nuxt"). After the 4.0.0 release, a user asked:
Before this PR:
What changes
1. Context menu: Pin / Unpin
2. A pinned group member gets its own bar button
Decision: this is what "pin" means for a group member. There is no new setting.
Reasons:
docksPinnedkeeps its shape. Settings that already exist get the new behavior with no migration.How it works:
docksGroupByCategorieshas a newliftPinnedMembersoption. Only the bar'sgroupedEntriessets it. A pinned member then goes into the~pinnedbucket on the bar. It also still leads inside its group.3. Recent tools: up to N slots, default 3
docksRecentLimittools keep a slot.maxVisibleItems. The default capacity is 5. If 3 recent slots came out of that capacity, most tools would move into the overflow. With extra slots, the main bar items never move when the user opens a tool.Default: on, with a limit of 3. Reasons: the bar already had a recent slot that was on by default, so this raises its limit. A slot shows only after the user opens a tool from beyond the bar, so a bar that nobody has used looks the same as before. Users can set the limit to
0to turn the slots off.The list stays per browser tab in the session store, as before (
recentDockIds, newest first).recentDockIdis deprecated. It is still read once, so a tab that saved the old field keeps its recent tool after an upgrade.The edge-mode toolbar shows pinned members but no recent slots. This is the same as before for recent slots.
New keys
docksRecentLimitdevframe:user-settings, hub-ui augmentation)number(0turns slots off)3recentDockIdsDockSessionStorage(@devframes/hub/client)string[][]recentDockIdonDockSessionStorageis now@deprecated.The control is in Settings > Appearance > Recent tools on the dock bar (Off, 1 to 5). The label is translated for all 10 locales.
For integrators (Nuxt DevTools)
You do not need to change anything. Group members need no flag. Pinning and recent slots work for every
groupIdmember.Screenshots
I checked the changes in Storybook with Playwright. The
Dock/Shell/Float Bar > With Pinned And Recent Membersstory shows Nuxt > Components pinned at the front of the bar, and Nuxt > Pages in a recent slot at the end. InWith Groups, right-click on a Playground popover row opens Pin / Hide / Refresh / Edge Mode / Popup with focus on Pin. Pin puts "Two" on the bar. Shift+F10 on that button opens the menu with "Unpin". ArrowDown moves focus to Hide. Escape closes the menu and returns focus to the button. I could not attach the image files from the CLI. Runpnpm -C packages/hub-ui storybookto see the stories.Tests
dock-settings.test.ts: multi-slot split, the lone-overflow fold, member slots without overflow, the limit and0, slots that keep their order,liftPinnedMembers, and a pinned recent member that renders in place.@devframes/hub/clientexport snapshot forrecentDockIds.pnpm lint && pnpm knip && pnpm test && pnpm typecheck && pnpm buildall pass.🤖 Generated with Claude Code