Repository navigation
U03: Docked resizable right panel column (Dock) - #881
Merged
Merged
Conversation
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
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.
What changed
AppShellcan now host a third grid column on the right: a docked panel that pushes the screen narrower (not an overlay), opens/closes, resizes from its left edge (360–640px, capped at 45vw), and remembers width + open state in localStorage. Below 860px the same content renders as a right-side sheet over a scrim. The panel's content is a prop; the Agent Author fills it in a later ticket.src/shell/dockState.ts(new): width constants/limits,dockMaxWidth,clampDockWidth,readDockWidth,readDockOpenon top ofreadStored/writeStored(forge.dock.width,forge.dock.open).src/shell/Dock.tsx(new):DockProvider/useDock(open + width state, lazy restore, re-clamp on viewport resize),Dockcomponent (renders nothing while closed),useDockResize(pointer-capture drag, keyboard splitter), opener-focus capture/restore, sheet focus, Escape handling.src/shell/dock.css(new): third grid column rules, resize handle, sheet + scrim, reduced-motion handling.src/shell/AppShell.tsx: wraps the layout inDockProvider;ShellLayoutsetsdata-dock/--dock-widthand renders<Dock label="Agent Author">when thedockprop is defined; opening the narrow nav drawer closes the dock (one drawer at a time).App.tsxdoes not passdock, so nothing changes visually yet.How tested
npm test --workspace apps/agent-forge -- --run— 985 tests, 90 files, all green (incl. newdockState.test.ts6 cases andDock.test.tsx8 cases)npm run typecheck --workspace apps/agent-forge+typecheck:server— clean;npm run test:server— 1121 tests greennpm run lint --workspace apps/agent-forge— 0 errors (31 pre-existing warnings in server files, none in this diff)npx tsc --noEmit,npm run lint,npm run test:coverage(483 files green),npm run fallow(0 dead code, 0 above threshold),npm run docs:ratchet,npm run api:check,npm run docs:llms:check,npm run size-check— all cleanAcceptance criteria
dockundefined the shell renders exactly as before (2 columns, nodata-dock) — covered by test + all existing AppShell tests stay green--space-2padding)forge.dock.width(live preview writes nothing mid-drag)aria-valuenow/aria-valuemin/aria-valuemax.dock-resizetransition and sheet animation gated onprefers-reduced-motion)Generated with Devin