LearnNewsExamplesServices
Frontmatter
id18968
titleRemove the default whole-View grid focus outline
stateClosed
labels
enhancementdesignaigridaccessibility
assigneesneo-opus-ada
createdAtSep 19, 2026, 3:59 PM
updatedAtSep 19, 2026, 5:28 PM
githubUrlhttps://github.com/neomjs/neo/issues/18968
authorneo-gpt
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 19, 2026, 5:28 PM

Remove the default whole-View grid focus outline

Closed v13.2.0/archive-v13-2-0-chunk-22 enhancementdesignaigridaccessibility
neo-gpt
neo-gpt commented on Sep 19, 2026, 3:59 PM

Context

Requested by @tobiu on 2026-09-19 while inspecting the native-speed cell-editing recording: the grid View/Body-sized focus outline should not appear. Reproduced in headed Chromium 153 at c27c6648f5c56a39828490eda99627e70ca9bb91, on test/playwright/component/apps/grid-cell-editing/index.html, viewport 1400×900.

Click a cell in the upper grid, then press ArrowRight. The active element stays grid.View. Pointer modality has outline-style: none; keyboard modality paints 2px solid rgb(26,115,232) around the 1398×386.25 View. All three Bodies retain outline-style: none. This is an explicit Neo style, not a browser-default Body ring.

The Problem

The frame encloses the entire scroll viewport, including the large empty area below the records. The operator requests removal of that default presentation. Keyboard focus ownership and navigation must continue to work.

The Architectural Reality

  • resources/scss/src/grid/View.scss selects .neo-focus-keyboard:focus and supplies a hardcoded blue fallback to --grid-view-focus-outline.
  • Pointer modality already suppresses the frame.
  • #15195 intentionally centralized focus and key handling on View and kept Bodies as delegates. Its ownership repair remains correct; this follow-up changes the default visual presentation.

The Fix

Change the default View outline presentation in the existing stylesheet, retaining the existing custom-property hook for an explicit application/theme override. Update the adjacent comment and affected focus assertions to describe the new default. Preserve View as the keyboard anchor and existing selection/editor focus cues. No new module or API is needed.

Contract Ledger

Surface Authority Delivered behavior Compatibility / evidence
Default View focus presentation Operator direction; grid/View.scss No viewport-sized default outline Real pointer→keyboard and editor→View paths in both Neo themes
Logical focus/key ownership #15195; grid.View Unchanged View-owned focus, selection and navigation Active element, selection, edit terminal and scroll-stability assertions
--grid-view-focus-outline Existing stylesheet hook Explicit override remains usable Override control, without restoring a default full-View frame

Acceptance Criteria

  • Real keyboard navigation and editor completion/cancellation do not add a default whole-View or Body outline.
  • View retains focus ownership, arrow/Tab behavior and scroll stability.
  • Existing selected-cell/row/column and editor focus cues remain; this is not a global suppression of control focus styling.
  • Explicit custom-property overrides retain their documented effect.
  • Neo light/dark visual checks and the existing pointer/keyboard focus tests cover the new default.

Out of Scope

Changing selection semantics, per-Body focus ownership, global application focus styles, column widths, or header-gap appearance.

Related: #15195, #9496, #18762 (where the observation surfaced). This is a standalone visual follow-up. Decision Record impact: none. unowned-rationale: operator-requested follow-up, ready for a bounded styling pickup; the author is completing #18954's review loop. Origin Session ID: 553fd0f7-80d4-4937-884a-7dfcad72e19a Retrieval Hint: grid whole View keyboard outline neo-focus-keyboard spare viewport

Sweep receipt: live latest-open and A2A recency checked immediately before filing. MC recovered the intentional #15195 ownership/modality decision, not an equivalent open presentation ticket. #9496 is navigation scope; own #18954 is an edit terminal, not this style change. KB lookup was inconclusive; local/history reads confirmed the predecessor.