Swipe rows in the app (#400) #575

Closed
kayg wants to merge 0 commits from issue/400-swipe-port into dev
Owner

Fixes #400.

Swipe rows in the app, for note lists and the Trash: swipe right for Copy link and Pin, left for Delete; a long swipe runs the outer button; one row open at a time; each action says what it did, and Undo takes a delete back. A phone uses a finger, a desktop a two-finger sideways scroll.

  • One row-action registry (src/rows/), with plugins for notes and the Trash.
  • A delegated swipe on the list, so only a touched row draws its buttons.
  • The swipe start rules are shared with block swipe-select (@calternal/editor/swipe-start), so the two never disagree about what starts a swipe.
  • Rebased onto dev with train AA (document scrolling on phones, no full-screen live blur). Conflicts were in touch.ts (kept dev's follow/springBack, took the shared start rules) and the editor's package.json exports.
  • actions.gen.ts regenerated: it was out of date on dev, so check failed there.

Tests. e2e/swipe-rows.spec.ts, plus touch-select, contrast, list-chrome and phone-bars on chromium-390, webkit-390, chromium-1440 and webkit-1440 (E2E_MATRIX=sample): all pass. svelte-check: 0 errors. Perf and iPhone simulator shots are on #400.

🤖 Generated with Claude Code

https://claude.ai/code/session_01U5oTUycqAh7DT72mdSUztk

Fixes #400. Swipe rows in the app, for note lists and the Trash: swipe right for Copy link and Pin, left for Delete; a long swipe runs the outer button; one row open at a time; each action says what it did, and Undo takes a delete back. A phone uses a finger, a desktop a two-finger sideways scroll. - One row-action registry (`src/rows/`), with plugins for notes and the Trash. - A delegated swipe on the list, so only a touched row draws its buttons. - The swipe start rules are shared with block swipe-select (`@calternal/editor/swipe-start`), so the two never disagree about what starts a swipe. - Rebased onto dev with train AA (document scrolling on phones, no full-screen live blur). Conflicts were in `touch.ts` (kept dev's `follow`/`springBack`, took the shared start rules) and the editor's `package.json` exports. - `actions.gen.ts` regenerated: it was out of date on dev, so `check` failed there. **Tests.** `e2e/swipe-rows.spec.ts`, plus touch-select, contrast, list-chrome and phone-bars on chromium-390, webkit-390, chromium-1440 and webkit-1440 (`E2E_MATRIX=sample`): all pass. svelte-check: 0 errors. Perf and iPhone simulator shots are on #400. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01U5oTUycqAh7DT72mdSUztk
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QGa6qjALuHyi8H1naGp6b
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QGa6qjALuHyi8H1naGp6b
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QGa6qjALuHyi8H1naGp6b
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCcFhwwgMK66k9LMVqogNJ
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCcFhwwgMK66k9LMVqogNJ
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCcFhwwgMK66k9LMVqogNJ
Regenerate actions.gen.ts: dev's check was failing on the attachments actions
Some checks failed
CI / server (pull_request) Successful in 26s
CI / web (pull_request) Failing after 40s
CI / rust (pull_request) Successful in 2m2s
498a482dfa
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5oTUycqAh7DT72mdSUztk
Author
Owner

Landed in train AB, #580.

Train AB ran the full suite: fmt, clippy, workspace tests (502 passed, 0 failed), the build, svelte-check, and every Playwright project in parallel shards.

  • First run discarded: the Rust steps hadn't compiled (a broken shared environment file), so e2e had used an old binary. The train script now stops at the first failing Rust step.
  • Rerun: every shard passed except two tests that failed under load:
    • swipe-rows:116 passed 60 of 60 repeated alone;
    • missing-links:155 (page closed) passed 54 of 54.
  • webkit-390 shard 3/3: it collided on a port, was rerun alone, and passed 94 of 94.

Contents:

  • #576: the block-selection tint covers exactly its block;
  • #578: the phone layout never scrolls sideways;
  • #575: swipe rows;
  • #573: narrow handle and link pill padding;
  • #574: saves no longer copy the whole note, with the independent review's crash tests.
Landed in train AB, #580. Train AB ran the full suite: fmt, clippy, workspace tests (502 passed, 0 failed), the build, svelte-check, and every Playwright project in parallel shards. - **First run discarded:** the Rust steps hadn't compiled (a broken shared environment file), so e2e had used an old binary. The train script now stops at the first failing Rust step. - **Rerun:** every shard passed except two tests that failed under load: - `swipe-rows:116` passed 60 of 60 repeated alone; - `missing-links:155` (page closed) passed 54 of 54. - **webkit-390 shard 3/3:** it collided on a port, was rerun alone, and passed 94 of 94. Contents: - #576: the block-selection tint covers exactly its block; - #578: the phone layout never scrolls sideways; - #575: swipe rows; - #573: narrow handle and link pill padding; - #574: saves no longer copy the whole note, with the independent review's crash tests.
kayg closed this pull request 2026-10-18 12:07:47 +00:00
Some checks failed
CI / server (pull_request) Successful in 26s
CI / web (pull_request) Failing after 40s
CI / rust (pull_request) Successful in 2m2s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
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!575
No description provided.