feat(web): swipe session rows to archive or delete (stacked after #4839) - #4849
feat(web): swipe session rows to archive or delete (stacked after #4839)#4849btli wants to merge 30 commits into
Conversation
bd56197 to
675a516
Compare
Consolidate pointer, touch, stylus, and keyboard resize behavior across sidebar, inline rail, terminal column, push panels, and comments. Centralize responsive input capability and breakpoint handling for web and Android. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Constrain the action hint to the strip vacated by the inset row surface so it cannot render beneath the trailing overflow target at partial or committed offsets. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Assert that the clipped delete reveal stays inert and disjoint from the accessible overflow target at partial reveal, the commit threshold, cancellation, and rest. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Replace mocked rectangles with Chromium layout assertions for both swipe directions and representative mobile widths. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Remove the duplicate drag transition and share touch E2E setup without changing the accepted gesture behavior. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Exercise axis ownership, cancellation resets, capture loss, and the same-pointer menu-to-drag transition with genuine Chromium touch streams. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Use Chromium's real pointer capture release path and bound pre/post-hold ownership around observable browser gesture states. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Drive near-hold touch ownership with Chromium virtual time and keep row gesture callbacks stable across renders. Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
|
@btli Thanks for the PR! It doesn't reference an issue yet. We require an issue for every PR, so the work can be prioritized before it's reviewed. Add one to the description:
No issue exists for this yet? Open one first, then reference it. That's how we track what's worth doing, and it's usually quicker than it sounds. Note a reference has to point at an issue: naming another PR doesn't count. The only exceptions are changes with no user-visible behaviour: pure Refactor / chore, Docs, or Test / CI work. If that's genuinely what this is, check that box under Type of change. Anything that fixes a bug, adds a feature, or changes the UI needs an issue, even when it also touches docs or tests. See CONTRIBUTING.md for the full policy. No action is taken beyond this comment. |
59ed9f0 to
f629825
Compare
Signed-off-by: Bryan Li <bryan.li@gmail.com>
Signed-off-by: Bryan Li <bryan.li@gmail.com>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com> Co-authored-by: omnigent <noreply@omnigent.ai>
Related issue
Supersedes closed PR #3985.
Stacked dependency: This PR depends on #4839 and must be merged only after #4839. It was developed against exact finalized #4839 head
17f71a3a31755c4f0e319d63640c29d5bf3a19b3(17f71a3a3). GitHub cannot use a fork branch as this upstream PR's base, so this PR targetsmain; its displayed diff includes #4839 and will shrink to the swipe-only changes after #4839 merges.Summary
ELI5: Hold a session to open its menu; keep pulling the same finger to close the menu and drag the session. A sideways move still swipes, and an up/down move still scrolls.
Test Plan
NODE_OPTIONS="--localstorage-file=<temp>" bun run test -- src/shell/Sidebar.rowActions.test.tsxpasses (65 tests).uv run pytest tests/e2e_ui/sessions/test_sidebar_session_gestures.py -qpasses (6 Chromium CDP touch tests): stationary hold opens exactly one menu; the same pointer continues into drag; horizontal swipe and vertical scroll arbitrate correctly around the hold boundary; pointer cancellation and real capture loss reset cleanly; unexpected nativedragstartandpointercancelfail the relevant paths.draggable={false}makes the unchanged stationary-hold browser test fail because the live anchor reportsdraggable === true; restoring it passes.RowGestureTouchSensorwith dnd-kit's old 250msTouchSensormakes the pre-hold ownership and post-hold menu/drag tests fail; restoring unified ownership passes 6/6.bun run lint,bun run format:check,bun run type-check,bun run build, anduv run --no-sync pre-commit run --all-filespass.OmnigentWebViewClientTestplusassembleDebugpass. The full 73-test Android unit run retains one unrelated existingMainActivityTestsystem-bar polarity failure.adb devices -lreturned no connected devices.Demo
Type of change
Test coverage
Coverage notes
Focused React tests cover the retained swipe actions and reset seams. Chromium CDP tests exercise genuine touch ordering across stationary hold, controlled menu open/dismiss, same-pointer drag activation/drop, and native vertical scrolling. Final-head Android manual evidence is explicitly unavailable because no adb device was connected.
Changelog
Swipe session rows on touch devices to archive them or request deletion.