Notes block shortcuts expose an editor focus outline without keyboard navigation #1448

Open
opened 2026-10-08 05:25:43 +00:00 by kayg · 1 comment
Owner

Found during the #1440 real-browser regression. This is a cosmetic finding. The Note source stays intact with the #1440 fix.

Steps on a production build in Chromium with macOS platform emulation:

  1. Open a Note with a heading.
  2. Click the heading text once to select its block.
  3. Press l to Copy link.

Expected: the selected block keeps its tinted fill. The shortcut does not add a focus outline. The owner rule dated 2026-10-07 reserves rings for Tab or arrow navigation.

Observed: a dark rectangular outline encloses the full editor surface. The capture records document.activeElement.className as editor-surface ... is-reading is-block-interactions, data-input="keyboard", and :focus-visible=true. The same state occurs at 390, 820 and 1440 px in Mono and Noir. The pointer Copy link capture has no rectangle.

Trace: NoteEditorSurface.svelte selects the block and calls focusSelectionSurface() on its tabindex="-1" wrapper. The printable l key on that non-editable wrapper changes the root modality through keydownSignalsKeyboardModality() in inputModality.ts. The existing wrapper then gains its focus outline. The shared focusQuietly() helper still allows the UA ring during keyboard modality, so a caller-only change needs care. Keep Tab and arrow focus feedback and shared motion durations.

Evidence: the #1440 screenshot attachment includes pointer and keyboard states at all widths and both schemes. No UI style or focus-modality change was included in the data-corruption fix.

Found during the #1440 real-browser regression. This is a cosmetic finding. The Note source stays intact with the #1440 fix. Steps on a production build in Chromium with macOS platform emulation: 1. Open a Note with a heading. 2. Click the heading text once to select its block. 3. Press `l` to Copy link. Expected: the selected block keeps its tinted fill. The shortcut does not add a focus outline. The owner rule dated 2026-10-07 reserves rings for Tab or arrow navigation. Observed: a dark rectangular outline encloses the full editor surface. The capture records `document.activeElement.className` as `editor-surface ... is-reading is-block-interactions`, `data-input="keyboard"`, and `:focus-visible=true`. The same state occurs at 390, 820 and 1440 px in Mono and Noir. The pointer Copy link capture has no rectangle. Trace: `NoteEditorSurface.svelte` selects the block and calls `focusSelectionSurface()` on its `tabindex="-1"` wrapper. The printable `l` key on that non-editable wrapper changes the root modality through `keydownSignalsKeyboardModality()` in `inputModality.ts`. The existing wrapper then gains its focus outline. The shared `focusQuietly()` helper still allows the UA ring during keyboard modality, so a caller-only change needs care. Keep Tab and arrow focus feedback and shared motion durations. Evidence: the #1440 screenshot attachment includes pointer and keyboard states at all widths and both schemes. No UI style or focus-modality change was included in the data-corruption fix.
Author
Owner

Evidence from the #1440 heading regression: all 12 actual-size screenshots. The copy-link-keyboard-* captures show the full editor outline after selecting a heading by pointer and pressing l; the paired pointer captures have no rectangle. Each keyboard capture records the selection wrapper as active, data-input="keyboard" and :focus-visible=true.

Evidence from the #1440 heading regression: [all 12 actual-size screenshots](https://git.kayg.org/attachments/97c3a15c-96c3-4b10-9b0a-94f49f001547). The `copy-link-keyboard-*` captures show the full editor outline after selecting a heading by pointer and pressing `l`; the paired pointer captures have no rectangle. Each keyboard capture records the selection wrapper as active, `data-input="keyboard"` and `:focus-visible=true`.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-v0#1448
No description provided.