feat(swift-ios): add pull-down command drawer - #7345
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Warning Your free Security trial is over. An organization admin can activate Security or dismiss this notice. Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This is a substantial new iOS capability that adds a searchable command drawer, global pan-gesture arbitration, keyboard/focus handoff, and routing from both Home and thread detail. Because it changes core workspace interaction and introduces cross-view UIKit/SwiftUI lifecycle behavior across several production files, it warrants human review. You can add or adjust custom eligibility rules. Learn more. |
1f39d72 to
fce7740
Compare
9a94ad2 to
b815cd4
Compare
|
Adds the command drawer's gesture and fixes how it presents. The drawer now opens on a plain downward swipe that starts anywhere on the app's top bar — Home, an open thread, and the other pushed surfaces alike — instead of only on a deliberate long drag: the settle is an absolute commit distance measured from the rest position the drag started at, with the release's momentum projected a little ahead, so a short fast swipe commits on speed and a slow one on position, and the push that closes the drawer is as short as the swipe that opened it. Eligibility is unchanged, so Home's thread list and the thread transcript keep every ordinary scroll and the status bar above the safe-area inset stays the system's own notification-shade gesture. The drawer is also presented over the workspace rather than pushing it: the page underneath no longer translates at all, so the rows, header and composer stay exactly where they were while the drawer and its scrim move with the finger (measured on the simulator as a 0-pixel shift of the background, with a sharp minimum). Finally, the search field now reliably takes focus — the request is made when the pull starts, which is what puts the keyboard's height into the drawer's open height before the finger lifts, but at that moment the field is still above the window's top edge and the request can be dropped; it is now renewed once the drawer is open and still unfocused, so the keyboard arrives on every entry path including a quarter-second swipe. Coordination trace: T3 thread DD1ED949-643E-4C94-B93A-8A87DF73B471 · saphid/t3code-personal#122 |
|
Desperately needs screenshots and videos |
|
Added the visual proof to the PR description:
The assets are committed in |
nope those are old |
|
Replaced the obsolete command-palette media with fresh captures from the current SwiftUI PR build.
The PR description now embeds/links the replacements from commit |
|
Updated the visual proof again with a populated simulator environment: 3 projects (T3 Code, React, Linux) and 9 recent threads. The replacement videos now open on the populated Home list and show the unfiltered drawer before searching:
The two replacement screenshots also visibly include the recent thread rows and all three project actions. Assets are in |
|
Re-recorded both videos with the iOS software keyboard explicitly visible for the complete drawer search interaction.
Replacements are in |
@t3dotgg how about that |
Define the command drawer geometry, gesture arbitration, responder ownership, and bounded focus renewal as a focused foundation slice. Restore the exact prior responder after an abandoned pull and cover cancellation, teardown, and eligibility paths with focused tests.
b3a4673 to
0e0fb94
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 55623cf. Configure here.
|
@t3dotgg Ready to go plz |

Summary
SwiftUI-only. This is the consolidated implementation for #86, #122, #135, and #154 and supersedes the former stacked draft #8350.
Proof
Exact target
b67837984e5650888b1eed0e1cd7fff83625f696→ headc1eef5a073bf25dfb277882444f187c1f64647b9.The dark-mode sequence shows
prior, an abandoned pull followed byrestored, then a complete pull/open/gesture-close followed byreturned. Both suffixes were typed without tapping Home search; the caret and software keyboard remain with the same field.Annotated MP4 · Clean MP4 · Contact sheet
Exact-target and light-mode context
Exact-target pull — the same top-edge pull leaves Home unchanged because the live target has no drawer.
Test
FeatureCommandDrawerTests+FeatureCommandDrawerPresentationTests: 61 passed, 0 failed on iPhone 16 Pro / iOS 26.5.command-drawerlane.Generated by GPT-5.6 Sol in the Codex harness.