@onekeyfe/react-native-pager-view 6.7.0-alpha.436 → 6.7.0-alpha.449

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +16 -0
  2. package/android/build.gradle +1 -0
  3. package/android/src/androidTest/java/com/reactnativepagerview/CollapsiblePagerTabReservationTest.kt +135 -0
  4. package/android/src/main/java/com/reactnativepagerview/CollapsiblePagerHost.kt +88 -12
  5. package/android/src/main/java/com/reactnativepagerview/CollapsiblePagerNativeHeaders.kt +442 -15
  6. package/android/src/main/java/com/reactnativepagerview/CollapsiblePagerViewManager.kt +11 -1
  7. package/android/src/main/java/com/reactnativepagerview/event/NativeHeaderPressEvent.kt +8 -0
  8. package/docs/SPEC.md +298 -3
  9. package/ios/RNCCollapsiblePagerViewComponentView.mm +834 -20
  10. package/ios/tests/RNCCollapsiblePagerFirstFrameTests.mm +61 -0
  11. package/ios/tests/RNCCollapsiblePagerHitTestTests.mm +22 -0
  12. package/lib/module/CollapsiblePagerView.js +37 -5
  13. package/lib/module/CollapsiblePagerView.web.js +519 -6
  14. package/lib/module/CollapsiblePagerViewNativeComponent.ts +6 -0
  15. package/lib/module/NativeScrollerNativeComponent.ts +0 -1
  16. package/lib/typescript/src/CollapsiblePagerView.d.ts +31 -2
  17. package/lib/typescript/src/CollapsiblePagerView.web.d.ts +44 -1
  18. package/lib/typescript/src/CollapsiblePagerViewNativeComponent.d.ts +11 -0
  19. package/lib/typescript/src/NativeScroller.d.ts +2 -2
  20. package/package.json +3 -2
  21. package/src/CollapsiblePagerView.tsx +68 -5
  22. package/src/CollapsiblePagerView.web.tsx +464 -5
  23. package/src/CollapsiblePagerViewNativeComponent.ts +6 -0
  24. package/src/NativeScroller.tsx +2 -3
  25. package/src/NativeScrollerNativeComponent.ts +0 -1
package/docs/SPEC.md CHANGED
@@ -136,6 +136,34 @@ style forwarding, overlay retention and disabling; UIKit tests cover native
136
136
  style switching and restoring the previous style. Rendered iOS acceptance must
137
137
  be reported separately from type, codegen and build checks.
138
138
 
139
+ ### iOS 27 local incoming transition hosts
140
+
141
+ Status: Implemented; scoped iOS 27 simulator runtime verified.
142
+
143
+ For the existing local smooth Hard direct-pager transition, incoming pages use
144
+ the external path's transparent, noninteractive per-page top/sticky interaction
145
+ hosts. Their horizontal origin follows each page's scroll viewport; vertical
146
+ geometry follows the existing overlay and sticky references. The actual local
147
+ overlay and source interaction/marker/borrowed-host identities remain unchanged.
148
+ No replacement material, background, public API or additional mask is added.
149
+ Existing completion, release-back-to-source, invalidation and recycle paths
150
+ release only owned temporary hosts.
151
+
152
+ Source-matched iOS 27 simulator checks passed for slow movement in both
153
+ directions, same-contact over-half return followed by UP, retained nonzero scroll
154
+ regions, light/dark header protection and actual toolbar sheet opening/closing.
155
+ Selected fixed-label anchors retained their geometry. This is scoped main-UI
156
+ native-view evidence; background runtime readiness and shared JS heaps are not
157
+ assumed. Continuous/rapid alternation remains unproven: the final recording
158
+ shows no discernible alternating page motion despite successful input ACKs.
159
+ True CANCEL, resize/orientation and native lifecycle test execution remain
160
+ unverified. The original physical-device recording's exact OS/build is unknown;
161
+ selected-frame results do not establish exhaustive frame or numeric-offset parity.
162
+ The run retains `normalDevSession=false` and its official launcher failure notice;
163
+ diagnostic compilation and strict-input installation are separate build evidence.
164
+ Market's equal-height secondary display-owner change is an independent consumer
165
+ companion, not a new SDK public guarantee or JS/native same-frame contract.
166
+
139
167
  ### iOS 27 external-overlay interactive ownership
140
168
 
141
169
  Status: Implemented in iOS source; runtime acceptance is reported separately.
@@ -555,11 +583,11 @@ input, coalesced-event delivery, and physical-device acceptance.
555
583
 
556
584
  Status: implemented locally. Focused production-class iOS XCTest and Android
557
585
  instrumentation checks pass; consuming App interaction acceptance is separate.
558
- `nativeTabBar.style.variant` accepts `"underline"` (the default) or
559
- `"segmented"` on iOS and Android. The optional
586
+ `nativeTabBar.style.variant` retains `"underline"` (the default) and
587
+ `"segmented"` on iOS and Android; the text variant is specified below. The optional
560
588
  `nativeTabBar.style.contentPaddingVertical` is a nonnegative logical inset,
561
589
  defaulting to zero. Omitting both fields preserves the existing content-width,
562
- horizontally scrollable underline bar. Web ignores `nativeTabBar` and retains
590
+ horizontally scrollable underline bar. Web ignores legacy `nativeTabBar` configurations and retains
563
591
  its caller-rendered sticky header.
564
592
 
565
593
  In segmented mode, the existing `height` is the entire tab slot. The track
@@ -1128,3 +1156,270 @@ This separates package initialization in the Native UI main runtime; it does not
1128
1156
  add a bridge, share JS heaps with background, or change Native scroll commands.
1129
1157
  Acceptance includes the actual Native dependency graph and unchanged startup
1130
1158
  budgets, Web runtime/type exports, and package source/module/declaration entries.
1159
+
1160
+ ## Text tabs, controlled selection and per-tab toolbar
1161
+
1162
+ Physical font-owner revision: Implemented from source-matched consumer candidates
1163
+ and independently accepted for the scoped three-platform checks: iOS `e6dab83e`,
1164
+ Android Header `c7fdbb4d` and Web `c75c725c`. Native compiled objects/classes,
1165
+ archives/APKs and installed binaries are matched separately from runtime evidence.
1166
+ iOS original-resolution bidirectional slow motion pairs body displacement with
1167
+ normalized same-label glyph references across halfway, and actual adjacent and
1168
+ nonadjacent clicks were reviewed. Supplemental same-contact out-and-back followed
1169
+ by UP also passed on the same task device/source: one native path contains 244
1170
+ events (1 DOWN, 242 MOVE, 1 UP). Selected-frame analysis of the 442-frame original
1171
+ recording independently pairs body displacement with normalized glyphs across the outgoing and returning
1172
+ halfway crossings, closing the out-and-back/UP evidence gap. An injected CANCEL
1173
+ event remains untested. Image-derived progress has plus/minus two-physical-pixel
1174
+ uncertainty; exact midpoint paint time is not claimed. Its authorized lower-level
1175
+ runtime remains `normalDevSession=false` with the existing DeviceHub GUI limitation.
1176
+
1177
+ Android actual slow and reverse motion, clicks and same-contact out-and-back
1178
+ input were reviewed with glyph/body evidence. The boundary estimate has a
1179
+ plus/minus two-physical-pixel uncertainty; the cancel input settled on Perps, so
1180
+ it is not evidence that cancellation returned to the source page. Web reviewed
1181
+ actual release-time CSS motion, normalized glyph ownership and stable neighboring
1182
+ tab geometry. Its existing touch path still moves the body after release. These
1183
+ are scoped runtime passes, not full gesture, typography or accessibility coverage.
1184
+ Two mounted DOM regressions exercise the physical-owner/semantic distinction and
1185
+ inherited-family/mode cleanup; they do not replace browser/native pixel evidence.
1186
+
1187
+ Prior interaction revision evidence (retained for unchanged paths): Implemented
1188
+ and synchronized from the source-matched consumer prototype. Targeted independent
1189
+ runtime acceptance passed for Web (`f22adedb`),
1190
+ iOS (`14ac191c`) and Android (Header `bafa2c02`, Host `f80156f7`). The consumer
1191
+ records are `web-settled-review.json`, `ios-14ac-review.json` and
1192
+ `android-bafa-review.json`; the unchanged Android Host/component/history evidence
1193
+ is retained separately in `android-f801-review.json`.
1194
+
1195
+ Web exercised different/same SVG handoff, approximately 100 ms presence, pointer
1196
+ cancellation/late UP, keyboard activation, resize/reattach and real Home menus.
1197
+ iOS exercised fresh History-to-Spot settlement, route/owner return, different/same
1198
+ SVG and no-entry Gallery controls, continuous actual-motion label colors, and a
1199
+ 50-to-100 History append with exact key/image prefix. Android's final background
1200
+ build measured zero leaked badge pixels over 142 with-entry frames and a clean
1201
+ slot over 84 no-entry frames, plus real pressed feedback and route/owner menus.
1202
+ Its unchanged Host build separately exercised Gallery return, owner changes,
1203
+ 50-to-100 History append and retained viewport/key-image prefix.
1204
+
1205
+ These are main-UI/native-view checks; background initializes independently and no
1206
+ shared JS heap/readiness is assumed. iOS verification used the authorized
1207
+ lower-level launch with `normalDevSession=false`. Its unchanged vendor/session
1208
+ payload followed an earlier OCI manifest HTTP 404 local-build fallback, so this
1209
+ is not normal-launcher or clean cache-hit evidence. Existing debugger/Purchases
1210
+ and Gallery warnings remain; no console-clean claim is made.
1211
+
1212
+ Native exact slow-drag/cancel and sub-150 ms tap storms, physical hover, complete
1213
+ RTL/extreme-font coverage, live custom-RGBA composition and exact append commit
1214
+ frame stability were not established by the final targeted builds. Earlier
1215
+ component evidence remains scoped to unchanged paths, never relabeled as new
1216
+ binary footage. Source/type/method-double checks and new native test drafts are
1217
+ separate from runtime evidence; the new native host/Bitmap test additions have
1218
+ not yet executed in the SDK host.
1219
+
1220
+ Earlier revision validation (retained baseline; not proof of the revision below):
1221
+ Validation scope: Web exercised real content switching, toolbar menus and selected
1222
+ feedback, drag cancellation, keyboard activation, sticky headers, localized narrow
1223
+ labels, dark mode and the unchanged wide layout. iOS exercised real page contents,
1224
+ medium/semibold labels and descenders, named SVG controls, 38-point button frames,
1225
+ press/drag cancellation, filter menus, LP selected-background restoration and sticky
1226
+ navigation. Android exercised real page contents, toolbar controls, native press
1227
+ and drag cancellation, LP selected-background restoration and sticky scrolling.
1228
+
1229
+ Rich-data Home checks on all three targets expanded the token list from 6 to 50
1230
+ items, loaded 785 NFT items, and reached 150 unique History entries through two
1231
+ successive page appends. History checks included the companion consumer
1232
+ content-generation update. Native append recordings showed no return to the
1233
+ initial list top, and 10-fps samples showed no whole-column icon clearing.
1234
+ Pixel-exact anchor stability and zero individual-image flicker were not measured.
1235
+
1236
+ VoiceOver/TalkBack speech and native hover were not exercised. An iOS Spot
1237
+ accessibility-tree snapshot failure also occurs with the original Home JS tab
1238
+ bar in the same binary; History snapshots succeed. This comparison does not
1239
+ establish a full native baseline or resolve the separate accessibility issue.
1240
+
1241
+ The existing `nativeTabBar` additionally accepts the `text` style variant. It
1242
+ uses scrollable, intrinsic-width labels, no indicator or track, and full-height
1243
+ hit areas with sufficient font ascent/descent space. Text labels use 18-point medium by default, with semibold text for the visual
1244
+ font owner defined below; consumers supply fontSize, fontFamily and
1245
+ activeFontFamily for their bundled brand faces. Native width reserves the larger
1246
+ medium/semibold label. Controlled Web text buttons use a private overlapping grid
1247
+ with one visible label and two hidden normal/active face reservations, so a font
1248
+ handoff does not resize the button or move its neighboring tabs. Hidden copies
1249
+ are AX-hidden, noninteractive and unselectable; there remains one named button
1250
+ and one visible label. The normal face keeps its inherited family when
1251
+ fontFamily is omitted, and the active face falls back to that normal family.
1252
+ Other modes retain their existing structure and behavior. Existing underline and
1253
+ segmented defaults remain unchanged.
1254
+
1255
+ `nativeTabBar.controlled` defaults to false. When true, a tab press emits its
1256
+ stable item key without issuing a pager command. `selectedKey` identifies the
1257
+ selected item independently of its visual index. Consumers own business routing
1258
+ and call the existing pager commands when appropriate. With unique item/page
1259
+ keys and every page matched, label colors follow actual pager progress, including
1260
+ integer samples. Only the two page endpoints interpolate; extra non-page items
1261
+ receive no transition emphasis. Config echoes and semantic selection callbacks
1262
+ MUST NOT replace this actual progress with the target endpoint. Semantic selection,
1263
+ including selectedKey, aria-selected/native selected traits and press callbacks,
1264
+ continues to follow the existing controlled contract. Toolbar snapshot ownership,
1265
+ activation and settlement are unchanged.
1266
+
1267
+ For valid controlled text tabs with an actual progress sample, only the visual
1268
+ font owner follows the physical page: clamp raw page progress to the page range,
1269
+ choose its source page below fraction 0.5 and its destination at or above 0.5,
1270
+ then map that page key to its item. At 0.49 the source uses the active face; at
1271
+ 0.50 and 0.51 the destination does. Reversing actual progress uses the same rule.
1272
+ Do not round interpolated item coordinates: an extra non-page item between the
1273
+ two endpoints must never become the transition font owner. Both font weight and
1274
+ normal/active font family use this owner, including native remeasurement and Web
1275
+ render/RAF synchronization. Config or semantic echoes do not move the font owner
1276
+ ahead of physical progress. Missing/invalid mappings, selected non-page items,
1277
+ no actual sample, uncontrolled and non-text modes retain their existing semantic
1278
+ or automatic fallback; stale valid mapping state must not survive a newly invalid
1279
+ configuration. Label color interpolation is unchanged.
1280
+
1281
+
1282
+ `nativeTabBar.toolbar` is one JSON-compatible dictionary indexed by stable tab
1283
+ key. Each entry describes one `iconName` from the existing OneKeyImage named-SVG
1284
+ pipeline, `selected`, `accessibilityLabel` and `testID`. Omitting `toolbar`
1285
+ reserves zero width. Explicit `toolbar: {}` reserves 44 logical units. A nonempty
1286
+ map reserves the largest resolved `contentWidth + trailingInset` across all its
1287
+ entries, independent of the displayed owner. A missing selected entry has no
1288
+ button, hit target or accessibility element while this fixed slot remains. Each toolbar entry accepts `iconColor`, `selectedBackgroundColor`, `hoverBackgroundColor` and `pressedBackgroundColor` as resolved CSS strings. `size`, `iconSize`, `contentWidth` and `trailingInset` are logical dimensions supplied by the consumer (defaults 38, 24, 24 and 20). The circular frame includes the icon and border; layout reservation is contentWidth plus trailingInset, preserving the consumer's negative-margin layout. The SDK does not infer application scale rules.
1289
+ At the native JSON boundary, finite `size` is clamped to 1..128,
1290
+ `iconSize` to 1..size, `contentWidth` to 0..size, and `trailingInset` to
1291
+ 0..128. Missing, null, nonnumeric or nonfinite dimensions use the defaults
1292
+ above (iconSize/contentWidth defaults are additionally capped by size).
1293
+ Consumers supply finite dimensions on Web; finite bounds and missing/null
1294
+ defaults apply there, while direct NaN/Infinity values are unsupported CSS
1295
+ inputs. Colors are normalized at the native wrapper boundary: iconColor uses
1296
+ OneKeyImage's rgba representation and native background colors use ARGB.
1297
+ This does not add a second toolbar configuration or a JavaScript feedback loop. Default background is transparent;
1298
+ selected background remains the base color after hover, press or cancellation.
1299
+ iOS UIKit and Android drawable state own feedback without JavaScript roundtrips
1300
+ or default Android ripples. No menus or business capability checks live here.
1301
+
1302
+ `onNativeToolbarPress` reports the stable `key` of the displayed control and
1303
+ `anchorRect` (`x`, `y`, `width`, `height`) in window/viewport logical coordinates.
1304
+ It never changes pager selection. Invalid, stale or removed controls emit
1305
+ nothing. The controlled toolbar has a private committed presentation snapshot:
1306
+ owner key, image, dimensions, label/test identifier, colors and selected base.
1307
+ During a gesture, programmatic/queued transition or detach, the old whole visual
1308
+ remains, with hit testing and accessibility disabled and active input invalidated.
1309
+ A config-selected target before the page command cannot transfer this snapshot.
1310
+
1311
+ With a valid page mapping, commit requires genuine physical settlement and a
1312
+ physical page key matching the latest `selectedKey`. A late business echo delays
1313
+ enablement; it never changes business selection. Cancellation restores the old
1314
+ owner, rapid commands submit only the final stable owner, and idle same-owner
1315
+ LP/config updates apply once ready. Non-page/invalid mapping uses semantic fallback
1316
+ at genuine idle. Automatic/legacy modes retain their existing timing; changing
1317
+ modes cancels requests/ready owners and restores the destination mode's hit/AX state.
1318
+
1319
+ Presence changes alone fade for approximately 100 ms from current presentation
1320
+ opacity. Two present entries never fade the whole button out: identical rendering
1321
+ inputs reuse artwork across distinct action owners; different ready artwork
1322
+ replaces in place once, without crossfade or fade-through. Pending artwork may
1323
+ retain the old snapshot only as disabled, AX-hidden decoration. Ready callbacks
1324
+ recheck owner, attachment and physical settlement before atomically changing the
1325
+ whole entry. Missing/failed artwork hides content without removing the fixed slot.
1326
+
1327
+ The existing named-SVG identity includes name, color, scale and raster geometry;
1328
+ it is separate from the owner key. Replacement/detach cancels pending and ready
1329
+ owners; stale callbacks cannot paint or enable. One loaded image, at most one
1330
+ pending/ready target and one failed identity are retained per toolbar view; this
1331
+ does not replace the image package's existing resource cache. Repeated config or
1332
+ frame updates do not retry a failed identity. Returning to it still cancels a
1333
+ different pending target and hides old content; matching loaded artwork wins over
1334
+ failure memory. Android clears failed identity on detach; iOS retains it across
1335
+ transient header reparenting, and Web clears it on disposal.
1336
+
1337
+ A pointer origin is invalidated on suspension/owner transfer; a late UP cannot
1338
+ fall back to the new owner. Valid idle keyboard/AX activation remains available.
1339
+ Web blurs a focused toolbar before AX hiding. Native busy state must preserve the
1340
+ old raster without UIKit's default disabled-image dimming.
1341
+
1342
+ Platform settlement and progress:
1343
+
1344
+ - iOS uses actual scroll/presentation bounds during programmatic animation;
1345
+ UIView's model offset is not physical completion. Toolbar settlement follows
1346
+ completion, pending-command drain and observer/header restoration, with current
1347
+ generation, controller, transition, attachment and geometry checks. An owned,
1348
+ logically idle toolbar may retry transient tracking/presentation guards on at
1349
+ most two actual display ticks. Every tick rechecks full state; tracking still
1350
+ prevents commit. Real dragging/deceleration/queued transitions do not poll.
1351
+ Success stops immediately; same-context sync does not replenish the budget,
1352
+ and exhaustion stays disabled without self-renewal. Command, drag, route,
1353
+ recycle, mode and exact width changes cancel stale callbacks. Width identifies
1354
+ the geometry owner exactly, independently of visual offset-arrival tolerance.
1355
+ - Android accepts actual `onPageScrolled` for controlled text, independently of
1356
+ shared-header transition bookkeeping. Semantic `onPageSelected` keeps its
1357
+ business timing but cannot write the visual target early. IDLE settlement also
1358
+ requires valid attached bounds, no fake drag/suppression and no pending/computing
1359
+ RecyclerView or ViewPager2 layout. The existing pre-draw drain normally measures
1360
+ and lays out a requested parent pager for this opt-in mode, including when its
1361
+ RecyclerView is already clean. A retained host may reattach with positive
1362
+ bounds but without a completed layout; this opt-in path normally measures and
1363
+ lays out the attached, shown, idle host before testing its real `isLaidOut`.
1364
+ It never assigns that flag or bypasses it. Hidden/zero/busy/computing hosts wait.
1365
+ The existing RecyclerView drain then keeps its original behavior. A deferred turn rechecks all guards and the fresh page before updating
1366
+ endpoint color and toolbar together. Only success records a generation/page
1367
+ stamp; later idle draws do not repeatedly post or lay out. Config, actual motion,
1368
+ transitions and attachment invalidate it; a separately attached busy header can
1369
+ recover. Legacy RecyclerView drain behavior is unchanged. Text-bar background belongs to
1370
+ the parent Header over the full row and fixed slot; row/content are transparent
1371
+ to composite fractional alpha once. Non-text clears that parent and keeps its
1372
+ original row/track path. Toolbar presence/LP/hover/pressed fills do not change
1373
+ this background ownership.
1374
+ - Web samples the live computed CSS track transform and existing gesture progress.
1375
+ Its existing touch path moves the body after release; the new font owner follows
1376
+ that actual CSS movement and does not add continuous body dragging. Timeout or
1377
+ semantic state alone does not settle. Finish, resize and route return
1378
+ require valid live width/transform and no active gesture/inactive route; old
1379
+ RAF/timer/transition owners cannot finish a newer transition.
1380
+
1381
+ Web uses the same existing `CollapsiblePagerView.nativeTabBar` entry point,
1382
+ selection semantics and toolbar dictionary. Pointer CSS owns hover/active states;
1383
+ viewport geometry comes from the clicked element. For compatibility, legacy configurations containing only underline/segmented items remain ignored by Web as before; the new text variant, controlled=true or an explicitly supplied toolbar opt into Web rendering. The consumer remains the owner
1384
+ of menus, filtering, export, analytics and translated labels.
1385
+
1386
+ Acceptance: focused wrapper tests must cover automatic compatibility, controlled
1387
+ presses, stable keys with extra tabs, empty toolbar and toolbar events. Rendered
1388
+ checks must cover long localized labels and p/y/g glyphs, changing tabs while
1389
+ pressed, drag cancellation, sticky headers, SVG icons, light/dark colors, no-icon
1390
+ fixed reservation and native/Web parity. Include adjacent same/different SVG,
1391
+ LP differences, config-before-command, fast reversals/cancel, DOWN-switch-UP,
1392
+ pending/failed/late image completion, mode changes, no-animation, initial attach,
1393
+ resize/reorder/route return and interrupted presence fades. Different-artwork
1394
+ acceptance must render the actual component, not infer it from Home's same icon.
1395
+ Rebuilt Android frames must remove semantic-endpoint flashes and retained-layout
1396
+ settle deadlocks. Focused mounted DOM regressions cover the actual track matrix
1397
+ around 0.49/0.50/0.51 and reversal with interleaved items and unchanged selected
1398
+ AX, plus inherited normal family and text-only reservation cleanup across mode
1399
+ changes. DOM style checks do not prove browser geometry or native glyph weight.
1400
+ Real frame acceptance pairs physical body displacement with normalized glyph
1401
+ shape using the same label's normal/active endpoint references; color darkness
1402
+ alone is not font-weight evidence. Separate bidirectional gestures do not prove
1403
+ same-contact out-and-back behavior, and an out-and-back ending in UP does not prove
1404
+ CANCEL-event behavior. Source/type/JVM-double checks are not runtime proof.
1405
+
1406
+ ### React Native public type boundary
1407
+
1408
+ The three codegen specs import the public `CodegenTypes` namespace from
1409
+ `react-native`. NativeScroller's six host methods derive from its existing
1410
+ native `HostRef`, preserving the 11-method ref API and valid parameter calls.
1411
+ `keyboardShouldPersistTaps` explicitly retains the deprecated boolean aliases
1412
+ (`true` to `always`, `false` to `never`) alongside the standard string values;
1413
+ the Web wrapper also normalizes these aliases before forwarding to ScrollView,
1414
+ as in the merged main branch. Other values and owner/ref behavior are unchanged.
1415
+
1416
+ The merged development workspace follows main's RN 0.88/React 19.3 dependency
1417
+ baseline. Fresh normal package prepare/typecheck passed there; isolated copies of
1418
+ the current sources also passed normal declaration builds with RN 0.86.2.
1419
+ Actual ref/parameter fixtures passed on both RN versions, and RN 0.88 checks
1420
+ established bidirectional compatibility of the derived six host methods with
1421
+ public `HostInstance`. Both Codegen parsers produced unchanged three-component
1422
+ schemas relative to the pre-integration PR. Native source and erased JavaScript
1423
+ for the native wrapper/codegen files remain unchanged; the Web boolean forwarding
1424
+ above is a separate main-branch runtime change. These checks do not prove a new
1425
+ RN 0.88 SDK native example build or extend the scoped consumer UI acceptance.