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/android/src/grid-rows.test.tsmodified+4-1
Changes to packages/android/src/grid-rows.test.ts
@@ -40,7 +40,8 @@ test('encodes shared grid counts as the unsigned integer fields in the native AB
4040 const template = await Bun.file(new URL('../templates/MainActivityNative.kt.template', import.meta.url)).text()
4141 const columns = template.match(/^[^\n]*put(?:Enum)?\(base, 29, node\.gridColumns[^\n]*$/m)?.[0]
4242 const rows = template.match(/^[^\n]*if \(explicitRowsAware\) put(?:Enum)?\(base, 34, [^\n]*$/m)?.[0]
43 if (!columns || !rows) throw new Error('Shared grid count serialization is missing')
43 const directColumns = template.match(/^[^\n]*put(?:Enum)?\(base, 29, 1f?\)[^\n]*$/m)?.[0]
44 if (!columns || !rows || !directColumns) throw new Error('Shared grid count serialization is missing')
4445 await runKotlinFixture(`
4546data class GridNode(val gridColumns: Int, val gridRows: Int?)
4647
@@ -55,6 +56,8 @@ ${columns}
5556${rows}
5657 check(nodeData[29].toRawBits() == 2) { "grid_columns is not encoded as u32" }
5758 check(nodeData[34].toRawBits() == 3) { "grid_rows is not encoded as u32" }
59${directColumns}
60 check(nodeData[29].toRawBits() == 1) { "direct layout grid_columns default is not encoded as u32" }
5861 println("PASS native grid counts retain the integer bit patterns consumed by Zig")
5962}
6063`)
packages/android/templates/MainActivityNative.kt.templatemodified+1-1
Changes to packages/android/templates/MainActivityNative.kt.template
@@ -1521,7 +1521,7 @@ internal class CraftNativeFlexLayout(context: Context) : LinearLayout(context) {
15211521 put(base, 26, padding[3].toFloat())
15221522 put(base, 27, padding[0].toFloat())
15231523 putEnum(base, 28, 0)
1524 put(base, 29, 1f)
1524 putEnum(base, 29, 1)
15251525 put(base, 30, if (root) rowGapValue else 0f)
15261526 put(base, 31, if (root) columnGapValue else 0f)
15271527 }