Skip to content

feat(web): swipe session rows to archive or delete - #18

Closed
btli wants to merge 1 commit into
codex/touch-interactions-consolidatedfrom
codex/swipe-session-rows-stack
Closed

feat(web): swipe session rows to archive or delete#18
btli wants to merge 1 commit into
codex/touch-interactions-consolidatedfrom
codex/swipe-session-rows-stack

Conversation

@btli

@btli btli commented Aug 15, 2026

Copy link
Copy Markdown
Owner

Related issue

Supersedes closed PR omnigent-ai#3985. This is the second PR in the touch-interaction stack and depends on omnigent-ai#4839.

Summary

  • Adds configurable touch swipes on session rows: archive/unarchive in one direction and reveal a confirmation before delete in the other.
  • Builds on feat(web): unify touch resize interactions omnigent-ai/omnigent#4839's shared input-capability source and preserves mouse, keyboard, vertical scrolling, drag-and-drop, and sidebar resize behavior.
  • Handles axis locking, thresholds, pointer capture/cancellation, trailing-click suppression, inert directions, portal controls, and accessible action hints.

ELI5: A session row now behaves like a card on a phone: slide it sideways far enough to act, let go early to cancel, and deletion still asks before removing anything.

touch down -> 12 px axis decision -> horizontal drag -> 72 px threshold
                  |                     |                  |
                  +-> vertical scroll   +-> release/cancel +-> archive or confirm delete

Test Plan

  • NODE_OPTIONS=--no-experimental-webstorage bun --cwd web test src/lib/swipeActionPreferences.test.ts src/shell/Sidebar.rowActions.test.tsx (85 passed)
  • Mutation verification: all 45 added tests were run individually with anchored -t filters; each failed against a targeted temporary production mutant and passed after restoring the committed implementation.
  • bunx prettier --check ... and bunx oxlint --deny-warnings --report-unused-disable-directives ... on all five changed files
  • bun run build and bun run build:embed
  • JAVA_HOME='/Applications/Android Studio.app/Contents/jbr/Contents/Home' ANDROID_HOME='/Users/bryan.li/Library/Android/sdk' ./gradlew assembleDebug
  • Android emulator manual verification with Developer Options Show taps enabled: below-threshold cancellation, vertical-scroll seam, delete reveal/confirmation/cancel, and archive.
  • bun run type-check and full uv run pre-commit run --all-files were also run; both reach unrelated base/environment failures in lazyCodePlugin.ts (duplicate Streamdown/Shiki types), optional Python imports, VS Code typecheck, and lock normalization. All changed-file formatting/lint hooks pass.

Demo

Android emulator video — Show taps enabled

The visible touch dot demonstrates swipe reveal/cancel, vertical gesture yielding, destructive delete confirmation with Cancel, and archive confirmation.

Type of change

  • Bug fix
  • Feature
  • UI / frontend change
  • Refactor / chore
  • Docs
  • Test / CI
  • Breaking change

Test coverage

  • Unit tests added / updated
  • Integration tests added / updated
  • E2E tests added / updated
  • Manual verification completed
  • Existing tests cover this change
  • Not applicable

Coverage notes

Focused tests cover preference parsing/storage, capability changes, thresholds, damping, direction mappings, archive/unarchive/delete actions, cancellation and capture release, mouse/pen/keyboard isolation, scrolling/drag/resize seams, accessibility, portals, and click suppression. Manual Android verification covers browser pointer behavior and native touch-action handling.

Changelog

Swipe session rows on touch devices to archive them or request deletion.

Co-authored-by: omnigent <noreply@omnigent.ai>
Signed-off-by: Bryan Li <bryan.li@gmail.com>
@github-actions github-actions Bot added the size/XL Pull request size: XL label Aug 15, 2026
@btli btli closed this Aug 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XL Pull request size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant