feat(swift-ios): let readers dismiss the keyboard over a long draft - #7501
feat(swift-ios): let readers dismiss the keyboard over a long draft#7501saphid wants to merge 3 commits into
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:
Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a localized Hide keyboard control to the production thread-detail composer and enables it by default for that flow. Although the implementation is small and preserves existing drafts and other composer call sites, it changes the product’s default user experience. You can add or adjust custom eligibility rules. Learn more. |
1e3b9bb to
a8b87f3
Compare
A grown composer plus the keyboard covered the whole transcript with no way back to reading it. Two iOS-conventional exits, both draft-preserving: - The transcript now uses `keyboardDismissMode = .interactive` and tracks the drag itself. The transcript is laid out above the keyboard, so `.interactive` alone never engages; a downward drag past 16pt — reaching back through a bottom-anchored thread — dismisses immediately wherever it starts. Upward nudges toward the latest turn keep the draft editable, replacing the previous dismiss-on-any-drag behaviour. - The composer footer gains a `keyboard.chevron.compact.down` control while focused. It only drops focus, so the draft and its caret survive, and it is opt-in per call site — the thread page passes a handler, other composers do not. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
a8b87f3 to
4b90652
Compare
…r-7501-b994 # Conflicts: # apps/swift-ios/Features/Chat/FeatureComposerView.swift
A long draft and the keyboard can cover most of a SwiftUI thread. Thread detail now opts into a 44-point Hide keyboard footer button while its composer is focused. The button uses the existing dismiss handler and preserves the draft.
The refresh keeps the native parent's attachment, voice, draft, and gesture integration. The button is scoped to thread detail.
Verification — 5 September 2026
Head:
ee9345cd8e9104e46dc5ede15462297e37dda6e5. Refreshed againstt3code/rebuild-mobile-app-swiftatb99405468a6b2be1e0f67d551ece824b1627e35c.ThreadKeyboardDismissTests: 3 passed, 0 failed; the app and test target compiled. Current-build keyboard/draft visual evidence has not been refreshed.This PR targets the native development branch. Merging it there does not deliver it to
main.Earlier visual evidence
These retained captures show earlier revisions. They have not been recaptured or revalidated against the head above.
Light appearance after dismissal
Dark appearance after dismissal
interaction-light-keyboard-dismiss.mp4
Tracking issue: https://github.com/saphid/t3code-personal/issues/125.
Repair and review: GPT-6 in Codex, with GPT-5.6 Sol workers. A direct Claude Opus 5 review launch was attempted with high effort but exited 1 because OAuth had expired; no Claude review occurred.