uttrflow / uttrflow/uttrflow-swift

The clipboard panel's sheets are not modal to VoiceOver, so the rows behind a delete confirmation stay reachable

Open Beginner friendly
#586 0 comments 0 reactions 0 assignees View on GitHub
accessibility area:clipboard bug good first issue P2
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

A sheet (naming, moving, confirming a delete, deleting a collection, a formatter's diff) is drawn as an overlay over the list (`Sources/Uttrflow/Panel/QuickPanelView.swift:48`, `sheetOverlay` at `:722-779`). Pointer clicks behind it are caught by a dimmed layer. The overlay is not marked modal for accessibility, though: `Sources/` has no `.isModal` trait anywhere. VoiceOver can move past the sheet to the rows, chips and tab bar behind it and activate them.

In that state, Return and Escape already belong to the sheet (`PanelKeyboard.swift:104-109`). A VoiceOver user who wanders behind a "Delete this clip?" sheet and activates a row gets a different result from the one they expect.

## Acceptance criteria

- The sheet's container carries `.accessibilityAddTraits(.isModal)`, so VoiceOver stays inside it while it is open.
- The sheet's title is read first when it opens: for example, focus moves to it, or it is marked as a header.
- The pull request says how it was checked with VoiceOver (open a delete confirmation on a pinned clip, then try to navigate out).

## Where to start

- `Sources/Uttrflow/Panel/QuickPanelView.swift:722-779`
- `QuickPanelView.swift` is SwiftUI and excluded from coverage, so no unit test is expected.
- Before pushing, run `make verify` (export `DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer` first). It is the same command CI runs, and it enforces the 95% coverage floor per module.
- Read [CONTRIBUTING.md](https://github.com/uttrflow/uttrflow-swift/blob/main/CONTRIBUTING.md) first, and say on this issue that you are taking it.

**Size:** XS, under an hour.

Contributor guide

Open the contributing guide

Research direction

Read CONTRIBUTING.md, then inspect the sheet overlay in Sources/Uttrflow/Panel/QuickPanelView.swift:722-779 and the related keyboard handling in PanelKeyboard.swift:104-109. Verify the sheet is modal to VoiceOver and its title is read first; check a delete confirmation on a pinned clip and try to navigate out. Run make verify with DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer before pushing.

Written by the indexing model from the issue text.

Assessment

Tech stack
swift
Domain
accessibility, desktop
Issue type
Bug
Difficulty
1/5
Estimated time
Under an hour
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
91/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.