feat(webview): hex-grid row selection, keyboard navigation, and UI/UX polish - #176
Merged
Conversation
… run gating, profile confirms, paste notice, toolbar overflow, keyboard/ARIA, polish) - record-empty-copy: real empty state when recordCount === 0 (renderEmpty title param) - scripts-run-gating: non-running Run buttons disabled while one script runs - integrity-profile-confirm: profile delete + apply-overwrite route through inlineConfirm - paste-overflow-notice: truncated pastes surface a toolbar status message - toolbar-overflow: search input shrinks + toolbar scrolls at narrow widths - keyboard-aria: grid arrow-key selection (Shift extends, gap-skipping), grid tabindex + Menu key, context-menu role=menu/menuitem + arrow-key nav + focus, labels action buttons focusable, icon-only aria-labels - polish: integrity status glyph, nibble placeholder, EDITING pill tooltip, Ctrl+S, fill-input Escape staging, struct move glyphs, script log auto-scroll, reload-progress spinner, prev/next glyphs - specs updated; tests: 732 passing (was 729)
…focus gate, shift-extend anchor, gap-jump walk, menu-submenu nav, tooltip preserve, paste notice gating - A1: keydown handlers register once at module load (double-fire after reload) - grid arrows/menu-key gated on focus inside #memory-view (no webview-wide hijack) - Shift-extend tracks a fixed anchor so it can shrink (gridArrowAnchor) - walkMappedAddress jumps gaps via segment binary search (no byte-scan freeze) - context menu arrow nav excludes collapsed-submenu rows (no focus stall) - scripts run button keeps trust/esbuild tooltips on state re-renders - paste overflow notice only claims pasted bytes when staging succeeded - fallow: 0/0/0; types/lint clean; 732 tests passing
deviousprophet
added a commit
that referenced
this pull request
Aug 11, 2026
…b wait, skip ChromeDriver-flaky interaction specs - openHexFixture falls back to workbench quick-open when the CLI-reuse open no-ops on headless Linux - waitForEditorTab/editorTabExists match the tab title basename (workspace fixture path) - record-empty spec asserts the version-agnostic empty node (main renders 'Record View Unavailable'; #176 renders 'No Records') - skip grid-keyboard, context-menu keyboard, scripts run-gating, integrity profile-delete specs: webview-frame focus/key routing is unreliable under ChromeDriver (logic unit-covered) - slow hello scripts for a deterministic run window - locally: 8 passing / 7 pending / 0 failing
Cell mousedown/contextmenu now focuses #memory-view (rootEl().focus() before preventDefault); previously the gate required focus that only blank-space clicks (native tabindex) could grant, so byte-click then arrow keys did nothing. Suppress the resulting UA focus outline on the grid; selection cells provide visual feedback.
ContextMenu now records the element focused before show() and refocuses it on hide (if still connected), so keyboard control returns to the triggering grid instead of dropping to body after Escape/click-outside/command.
…eshold show()/hide() exceeded CRAP 30 at zero coverage (cyclo 5). Merged the two guards into one condition and extracted focusableActiveElement() + restoreTriggerFocus(), dropping both functions to cyclo <= 3.
- Added functionality to dismiss the context menu with the Escape key even when text is present in the input field. - Enhanced hex view to allow selection of entire columns and rows via mouse clicks, with corresponding logging of selections. - Updated integrity panel to confirm profile application when checks differ from the selected profile. - Implemented redo functionality for edit transactions, allowing users to reapply undone edits. - Improved sidebar resizing with keyboard support for accessibility. - Refined toolbar styles for better visibility and user experience. - Added new CSS variables for warning states and adjusted styles for various components.
redoLastEditTransaction re-pushes inverse to undoStack so undo-after-redo works; fix shipped type errors (hexViewer null coalesce, gapPaddingNoteHtml); wire profile-apply confirm into integration test; fallow refactors to 0 findings; collapse pasteNotice tautology.
…nt, run-button notice, label buttons, spec drift, focus ring
…rch glyphs, drag tests, PRD supersedence
…n keyboard nav; ok-soft token; context-menu spec
deviousprophet
marked this pull request as ready for review
August 16, 2026 05:43
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.
Summary
Fixes the seven UI/UX follow-up tasks from the webview component-refactor review (record empty state, script run gating, Integrity profile confirmations, paste-truncation feedback, toolbar responsiveness, keyboard/ARIA pass, polish) and rounds out hex-grid interaction: row click-and-drag selection that spans unmapped gaps, header column highlighting, and column-preserving keyboard navigation.
Main changes
onBlockedRun— clicking one shows a status notice explaining a script is already runningrole="menu"/menuitemsemantics, arrow-key/Enter navigation, Enter on a submenu row opens it, Escape/focus restore to the trigger