Repository navigation
feat: inspector UX — publishers follow unit selection, draggable divider - #8
Merged
Merged
Conversation
cboulay
force-pushed
the
feat/publisher-focus-on-unit-click
branch
from
August 14, 2026 16:49
9f7544e to
cc68d5a
Compare
cboulay
force-pushed
the
fix/frontend-typecheck
branch
from
August 14, 2026 18:56
4c23007 to
df91ca3
Compare
Clicking a unit in the topology already snaps the Settings panel to that component. Do the same in Publishers: reveal every row whose owning component is the selected unit, and scroll the first one into view. The panel already had this machinery for publisher and subscriber stream selections, so the three focus branches now share one `revealRows` helper rather than repeating the expand/scroll block a third time. Two deliberate choices: - The Publishers section's collapsed state is left alone. Collapsing a section is a deliberate "maximize the other one" action, so a unit click should not undo it -- the panel is unmounted while collapsed and picks the request up when it is expanded again. - A focus request that matches no rows is not marked handled, so a unit whose publishers only show up in a later snapshot still gets focused then. Collections are untouched: their streams belong to their child units, and selecting one continues to focus Settings only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The split between the topology and the Publishers/Settings inspector was only adjustable through the `Inspector Width` number field in global settings. Make the border between them a real divider: drag it to trade width between the two, double-click to return to the default, or focus it and use the arrow keys (`Home`/`End` jump to the extremes). The width still lives in `globalSettings.inspectorWidthPx`, so it persists and stays in sync with the existing number field, and the 360-900px clamp -- until now spelled out separately in three places -- is a single `clampInspectorWidth`. While dragging, the live width is held in component state and only committed to global settings on release, so a drag is one localStorage write rather than one per frame. The handle overlays the existing border rather than taking a grid column, so nothing shifts when it appears. Resizing deliberately does not re-fit the topology view, matching what the number field has always done -- a re-fit would throw away the user's pan/zoom. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Picks up the publishers focus and draggable divider changes so the packaged dashboard serves them, and keeps the new CI staleness check green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
cboulay
force-pushed
the
feat/publisher-focus-on-unit-click
branch
from
August 14, 2026 18:56
9f7544e to
7dae678
Compare
This was referenced Aug 14, 2026
Base automatically changed from
fix/frontend-typecheck
to
fix/nonfinite-float-settings
August 14, 2026 23:09
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.
Two inspector UX changes. Stacked on #6 (base is
fix/frontend-typecheck), so the diff here is just the five files below.1. Selecting a unit also focuses the Publishers list
Clicking a unit in the topology already snapped Settings to that component and expanded it. Now Publishers follows too: every row whose owning component is the selected unit is expanded, and the first is scrolled into view.
ProfilingPanelalready did this for publisher-stream and subscriber-stream selections, so rather than repeat the expand-and-scroll block a third time, the three branches now share arevealRows(matchedIds, contributorEndpointId)helper. The new branch matches onrow.unitAddress, which the panel already resolves from the graph snapshot for every publisher row.Two deliberate choices:
Collections are untouched — their streams belong to their child units, so selecting one still focuses Settings only.
2. The inspector divider can be dragged
The split between the topology and the inspector was only adjustable through the
Inspector Widthnumber field buried in global settings. The border between them is now a real divider:←/→move 16px,Home/Endjump to the widest/narrowest inspector. It's arole="separator"witharia-valuenow/min/max, so the current width is announced.The width still lives in
globalSettings.inspectorWidthPx, so it persists and stays in sync with the existing number field. The 360–900px clamp — until now spelled out separately in three places — is a singleclampInspectorWidth.Implementation notes:
position: absolute; left: -3px; width: 7px) instead of taking its own grid column, so nothing shifts when it appears and the collapsed-inspector layout is untouched. It isn't rendered while the inspector is collapsed.is-resizing-inspectorclass suppresses text selection and holds thecol-resizecursor for the duration.Verification
npm run test:e2e: 28 passed, including four new tests:aria-valuenowreadout.npm test: 35 passed.npm run build: clean.Two notes on the tests: the drag asserts persistence by reading localStorage rather than reloading, because the
primeGlobalSettingsinit script re-primes the width on every navigation — there's a comment saying so. And the publisher-focus scroll isn't asserted, because no fixture has enough publisher rows for the list to overflow; thescrollIntoViewcall is the one the existing focus paths already make through the shared helper.Possible follow-up
Selecting a unit from the Settings list (rather than the topology) still leaves Publishers where it is. Making that symmetric is a one-line change, but it would rearrange the Publishers list on every click while browsing settings, so I left it out.
Packaged assets (last commit)
src/ezmsg/dashboard/_webis a committed copy offrontend/dist(see #5 and #6). The last commit rebuilds it so the packaged dashboard actually serves these UX changes —inspector-resize-handleis present in the bundle — and so the staleness check added in #6 stays green.🤖 Generated with Claude Code