uttrflow / uttrflow/uttrflow-swift
The clipboard panel's sheets are not modal to VoiceOver, so the rows behind a delete confirmation stay reachable
- 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
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