ReviewOS

also looking at this

craft-native/craft

fix(mobile): preserve native editing, navigation, and durable media requests

#369
Merged chris wants to merge codex/native-vertical-scroll-tab-swipes into main
36 files +864 -185

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

packages/ios/fixtures/native-navigation/NativeNavigationUITests.swiftmodified+10-2
Changes to packages/ios/fixtures/native-navigation/NativeNavigationUITests.swift
@@ -61,9 +61,17 @@ final class NativeNavigationUITests: XCTestCase {
6161 file: StaticString = #filePath,
6262 line: UInt = #line
6363 ) {
64 XCTAssertTrue(element.waitForExistence(timeout: 10), "missing control before scrolling", file: file, line: line)
64 guard element.waitForExistence(timeout: 10) else {
65 XCTFail("missing control before scrolling", file: file, line: line)
66 return
67 }
6568 if let root { reveal(scroll, in: root, file: file, line: line) }
66 for _ in 0..<24 {
69 // The fixture grows as renderer coverage grows. Budget for the actual
70 // distance, including UIKit's initial pan threshold, while keeping a
71 // hard bound and requiring the same fully visible, hittable target.
72 let distanceToTarget = abs(element.frame.midY - scroll.frame.midY)
73 let attempts = min(128, max(24, Int(ceil(distanceToTarget / 200)) + 8))
74 for _ in 0..<attempts {
6775 if inside(element, scroll) && element.isHittable { return }
6876 let viewport = scroll.frame
6977 let nested: [CGRect] = scroll.descendants(matching: .scrollView).allElementsBoundByIndex.map { $0.frame }