rnxsim 0.1.456 → 0.1.458

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 (57) hide show
  1. package/cli/commands/inspect/actions.ts +63 -14
  2. package/cli/commands/inspect.ts +66 -5
  3. package/cli/ws-bridge.ts +3 -0
  4. package/detox/index.ts +12 -1
  5. package/dist-lib/agent-daemon-client.cjs +1 -1
  6. package/dist-lib/agent-events.cjs +1 -1
  7. package/dist-lib/agent-identity.cjs +1 -1
  8. package/dist-lib/agent-sessions.cjs +1 -1
  9. package/dist-lib/attached-projects.cjs +1 -1
  10. package/dist-lib/auth/shared-session.cjs +1 -1
  11. package/dist-lib/backend-origin.cjs +1 -1
  12. package/dist-lib/beta.cjs +1 -1
  13. package/dist-lib/beta.mjs +1 -1
  14. package/dist-lib/bridge-constants.cjs +1 -1
  15. package/dist-lib/bridge-contract-input.cjs +1 -1
  16. package/dist-lib/bridge-contract-input.mjs +1 -1
  17. package/dist-lib/bridge-contract.cjs +1 -1
  18. package/dist-lib/bridge-contract.mjs +1 -1
  19. package/dist-lib/capture-contract.cjs +1 -1
  20. package/dist-lib/capture-contract.mjs +1 -1
  21. package/dist-lib/cli-constants.cjs +1 -1
  22. package/dist-lib/cloud-contract.cjs +1 -1
  23. package/dist-lib/cloud-contract.mjs +1 -1
  24. package/dist-lib/cloud.cjs +1 -1
  25. package/dist-lib/cloud.mjs +1 -1
  26. package/dist-lib/config.cjs +1 -1
  27. package/dist-lib/detox/index.cjs +15 -2
  28. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  29. package/dist-lib/home-paths.cjs +1 -1
  30. package/dist-lib/host/bridge-host.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  32. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  33. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  34. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  35. package/dist-lib/host/websocket-proxy.cjs +1 -1
  36. package/dist-lib/index.cjs +43 -15
  37. package/dist-lib/jump-to-source-babel.cjs +1 -1
  38. package/dist-lib/jump-to-source-native.cjs +1 -1
  39. package/dist-lib/menu.cjs +1 -1
  40. package/dist-lib/menu.mjs +1 -1
  41. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  42. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  43. package/dist-lib/metro-production-bundle.cjs +1 -1
  44. package/dist-lib/metro-production-bundle.mjs +1 -1
  45. package/dist-lib/metro.cjs +1 -1
  46. package/dist-lib/profiles.cjs +1 -1
  47. package/dist-lib/public-brand.cjs +1 -1
  48. package/dist-lib/react-native-host-modules.cjs +1 -1
  49. package/dist-lib/react-native-host-modules.mjs +1 -1
  50. package/dist-lib/render-mode.cjs +1 -1
  51. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  52. package/dist-lib/sdk.cjs +43 -15
  53. package/dist-lib/sdk.mjs +43 -15
  54. package/dist-lib/skills.cjs +766 -58
  55. package/dist-lib/vite.cjs +1 -1
  56. package/package.json +1 -1
  57. package/src/sim-client.ts +4 -0
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.456 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.458 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -505,6 +505,9 @@ function softwareChromeLaunchOptions(opts) {
505
505
  return software;
506
506
  }
507
507
  function chromeLaunchOptions(opts = {}, runtime = currentRuntime()) {
508
+ if (signalShutdownClaimed) {
509
+ opts = { ...opts, handleSIGINT: false, handleSIGTERM: false, handleSIGHUP: false };
510
+ }
508
511
  return softwareChromeAllowed(runtime) ? softwareChromeLaunchOptions(opts) : gpuChromeLaunchOptions(opts, runtime);
509
512
  }
510
513
  async function launchReapedChrome(launch3, opts = {}, rendererTarget, policy = {}) {
@@ -587,6 +590,61 @@ function aggregateCompatibilityOutcomes(contributions) {
587
590
  function formatCompatibilityPercent(percent) {
588
591
  return percent > 0 && percent < 0.1 ? "<0.1" : String(Number(percent.toFixed(1)));
589
592
  }
593
+ function calculateFeatureCompatibility(features) {
594
+ const contributions = [];
595
+ const ids = /* @__PURE__ */ new Set();
596
+ function visit(siblings, parentWeight, parentEqualWeight) {
597
+ if (siblings.length === 0) throw new Error("feature assessment must not be empty");
598
+ let total = 0;
599
+ for (const feature of siblings) {
600
+ for (const rating of [feature.usage, feature.importance]) {
601
+ if (!Number.isInteger(rating) || rating < 1 || rating > 3) {
602
+ throw new Error(`feature ${feature.id} ratings must be integers from 1 to 3`);
603
+ }
604
+ }
605
+ total += feature.usage * feature.importance;
606
+ }
607
+ let estimatedMass = 0;
608
+ let equalEstimatedMass = 0;
609
+ for (const feature of siblings) {
610
+ const featureId = feature.id;
611
+ if (!feature.id.trim() || ids.has(feature.id)) {
612
+ throw new Error(`feature identity is empty or duplicated: ${feature.id}`);
613
+ }
614
+ ids.add(feature.id);
615
+ if (!feature.rationale.trim())
616
+ throw new Error(`feature ${feature.id} needs a rationale`);
617
+ const weight = parentWeight * feature.usage * feature.importance / total;
618
+ const equalWeight = parentEqualWeight / siblings.length;
619
+ if (feature.children !== void 0) {
620
+ if (feature.estimate !== void 0) {
621
+ throw new Error(`feature ${featureId} cannot have children and an estimate`);
622
+ }
623
+ const child = visit(feature.children, weight, equalWeight);
624
+ estimatedMass += feature.usage * feature.importance * child.estimate;
625
+ equalEstimatedMass += child.equalEstimate;
626
+ } else {
627
+ if (!Number.isFinite(feature.estimate) || feature.estimate < 0 || feature.estimate > 1) {
628
+ throw new Error(`feature ${feature.id} estimate must be between 0 and 1`);
629
+ }
630
+ estimatedMass += feature.usage * feature.importance * feature.estimate;
631
+ equalEstimatedMass += feature.estimate;
632
+ contributions.push({
633
+ id: feature.id,
634
+ weight,
635
+ equalWeight,
636
+ estimate: feature.estimate,
637
+ rationale: feature.rationale
638
+ });
639
+ }
640
+ }
641
+ return {
642
+ estimate: estimatedMass / total,
643
+ equalEstimate: equalEstimatedMass / siblings.length
644
+ };
645
+ }
646
+ return { features: contributions, ...visit(features, 1, 1) };
647
+ }
590
648
  var init_capability_outcomes = __esm({
591
649
  "../compat/src/capability-outcomes.ts"() {
592
650
  "use strict";
@@ -2804,7 +2862,53 @@ var init_capability_outcomes2 = __esm({
2804
2862
  "react-native": {
2805
2863
  exactTestedVersion: "0.86.2",
2806
2864
  supportedVersionRange: "0.86.x",
2807
- lastMeasured: null,
2865
+ lastMeasured: {
2866
+ byWeighting: {
2867
+ strict: {
2868
+ android: {
2869
+ passedWeight: 0,
2870
+ failedWeight: 0,
2871
+ unassessedWeight: 1196,
2872
+ totalWeight: 1196,
2873
+ assessedWeight: 0,
2874
+ compatibility: null,
2875
+ assessed: 0
2876
+ },
2877
+ ios: {
2878
+ passedWeight: 180,
2879
+ failedWeight: 0,
2880
+ unassessedWeight: 1025,
2881
+ totalWeight: 1205,
2882
+ assessedWeight: 180,
2883
+ compatibility: 1,
2884
+ assessed: 0.14937759336099585
2885
+ }
2886
+ },
2887
+ usage: {
2888
+ android: {
2889
+ passedWeight: 0,
2890
+ failedWeight: 0,
2891
+ unassessedWeight: 32399,
2892
+ totalWeight: 32399,
2893
+ assessedWeight: 0,
2894
+ compatibility: null,
2895
+ assessed: 0
2896
+ },
2897
+ ios: {
2898
+ passedWeight: 8422,
2899
+ failedWeight: 0,
2900
+ unassessedWeight: 24028,
2901
+ totalWeight: 32450,
2902
+ assessedWeight: 8422,
2903
+ compatibility: 1,
2904
+ assessed: 0.259537750385208
2905
+ }
2906
+ }
2907
+ },
2908
+ capturedAt: "2026-09-08T13:03:18.937Z",
2909
+ receipts: ["core-paired-capture.2026-09-08T13:03:18.937Z.json"],
2910
+ sourceCommit: "85cd28ced01db6f009d412d8208f365ababa43b8"
2911
+ },
2808
2912
  unmatchedReferenceCount: 7112,
2809
2913
  byPlatform: {
2810
2914
  android: {
@@ -2817,13 +2921,13 @@ var init_capability_outcomes2 = __esm({
2817
2921
  assessed: 0
2818
2922
  },
2819
2923
  ios: {
2820
- passedWeight: 8422,
2924
+ passedWeight: 0,
2821
2925
  failedWeight: 0,
2822
- unassessedWeight: 24028,
2926
+ unassessedWeight: 32450,
2823
2927
  totalWeight: 32450,
2824
- assessedWeight: 8422,
2825
- compatibility: 1,
2826
- assessed: 0.259537750385208
2928
+ assessedWeight: 0,
2929
+ compatibility: null,
2930
+ assessed: 0
2827
2931
  }
2828
2932
  },
2829
2933
  byWeighting: {
@@ -2838,13 +2942,13 @@ var init_capability_outcomes2 = __esm({
2838
2942
  assessed: 0
2839
2943
  },
2840
2944
  ios: {
2841
- passedWeight: 180,
2945
+ passedWeight: 0,
2842
2946
  failedWeight: 0,
2843
- unassessedWeight: 1025,
2947
+ unassessedWeight: 1205,
2844
2948
  totalWeight: 1205,
2845
- assessedWeight: 180,
2846
- compatibility: 1,
2847
- assessed: 0.14937759336099585
2949
+ assessedWeight: 0,
2950
+ compatibility: null,
2951
+ assessed: 0
2848
2952
  }
2849
2953
  },
2850
2954
  usage: {
@@ -2858,13 +2962,13 @@ var init_capability_outcomes2 = __esm({
2858
2962
  assessed: 0
2859
2963
  },
2860
2964
  ios: {
2861
- passedWeight: 8422,
2965
+ passedWeight: 0,
2862
2966
  failedWeight: 0,
2863
- unassessedWeight: 24028,
2967
+ unassessedWeight: 32450,
2864
2968
  totalWeight: 32450,
2865
- assessedWeight: 8422,
2866
- compatibility: 1,
2867
- assessed: 0.259537750385208
2969
+ assessedWeight: 0,
2970
+ compatibility: null,
2971
+ assessed: 0
2868
2972
  }
2869
2973
  }
2870
2974
  }
@@ -3719,21 +3823,19 @@ var init_capability_outcomes2 = __esm({
3719
3823
  });
3720
3824
 
3721
3825
  // ../compat/src/generated/react-native-root-export-coverage.ts
3722
- var REACT_NATIVE_ROOT_EXPORT_WILL_IT_WORK_COVERAGE, REACT_NATIVE_ROOT_EXPORT_STRICT_COVERAGE;
3826
+ var REACT_NATIVE_ROOT_EXPORT_STRICT_COVERAGE;
3723
3827
  var init_react_native_root_export_coverage = __esm({
3724
3828
  "../compat/src/generated/react-native-root-export-coverage.ts"() {
3725
3829
  "use strict";
3726
- REACT_NATIVE_ROOT_EXPORT_WILL_IT_WORK_COVERAGE = 0.99;
3727
3830
  REACT_NATIVE_ROOT_EXPORT_STRICT_COVERAGE = 0.765;
3728
3831
  }
3729
3832
  });
3730
3833
 
3731
3834
  // ../compat/src/generated/react-native-webview-coverage.ts
3732
- var REACT_NATIVE_WEBVIEW_WILL_IT_WORK_COVERAGE, REACT_NATIVE_WEBVIEW_STRICT_COVERAGE;
3835
+ var REACT_NATIVE_WEBVIEW_STRICT_COVERAGE;
3733
3836
  var init_react_native_webview_coverage = __esm({
3734
3837
  "../compat/src/generated/react-native-webview-coverage.ts"() {
3735
3838
  "use strict";
3736
- REACT_NATIVE_WEBVIEW_WILL_IT_WORK_COVERAGE = 0.74;
3737
3839
  REACT_NATIVE_WEBVIEW_STRICT_COVERAGE = 0.223;
3738
3840
  }
3739
3841
  });
@@ -4073,7 +4175,7 @@ var init_supported_native_packages = __esm({
4073
4175
  "react-native-key-command",
4074
4176
  // coverage
4075
4177
  "react-native-keyboard-controller",
4076
- // preset+visual-proof
4178
+ // preset+visual-proof+coverage
4077
4179
  "react-native-keychain",
4078
4180
  // coverage
4079
4181
  "react-native-keys",
@@ -4151,7 +4253,7 @@ var init_supported_native_packages = __esm({
4151
4253
  "react-native-splash-screen",
4152
4254
  // coverage
4153
4255
  "react-native-svg",
4154
- // preset+visual-proof
4256
+ // preset+visual-proof+coverage
4155
4257
  "react-native-system-bars",
4156
4258
  // coverage
4157
4259
  "react-native-teleport",
@@ -4253,10 +4355,11 @@ function scoredCoverage(packageName, estimate) {
4253
4355
  outcomes
4254
4356
  };
4255
4357
  }
4256
- var COMPAT_CATEGORIES, POLYFILL_REGISTRY;
4358
+ var COMPAT_CATEGORIES, POLYFILL_REGISTRY_INPUT, POLYFILL_REGISTRY;
4257
4359
  var init_registry = __esm({
4258
4360
  "../compat/src/registry.ts"() {
4259
4361
  "use strict";
4362
+ init_capability_outcomes();
4260
4363
  init_capability_inventory_coverage();
4261
4364
  init_capability_outcomes2();
4262
4365
  init_react_native_root_export_coverage();
@@ -4285,7 +4388,7 @@ var init_registry = __esm({
4285
4388
  "Analytics",
4286
4389
  "Internationalization"
4287
4390
  ];
4288
- POLYFILL_REGISTRY = {
4391
+ POLYFILL_REGISTRY_INPUT = {
4289
4392
  "react-native": {
4290
4393
  category: "Essentials",
4291
4394
  stubType: "native",
@@ -4295,7 +4398,108 @@ var init_registry = __esm({
4295
4398
  range: ">=0.86.0 <0.87.0",
4296
4399
  // outcomes measure declared scenarios; strictCoverage remains an
4297
4400
  // independent equal-export implementation estimate.
4298
- ...scoredCoverage("react-native", REACT_NATIVE_ROOT_EXPORT_WILL_IT_WORK_COVERAGE),
4401
+ ...scoredCoverage("react-native"),
4402
+ // initial iOS desk assessment; ratings are judgments, not measured corpus counts.
4403
+ features: [
4404
+ {
4405
+ id: "layout",
4406
+ usage: 3,
4407
+ importance: 3,
4408
+ estimate: 0.99,
4409
+ rationale: "Broad layout support; allow for fine geometry and shared styling differences."
4410
+ },
4411
+ {
4412
+ id: "text",
4413
+ usage: 3,
4414
+ importance: 3,
4415
+ estimate: 0.98,
4416
+ rationale: "Text shaping and wrapping work; uncommon typography and layout details remain estimated."
4417
+ },
4418
+ {
4419
+ id: "text-input",
4420
+ usage: 3,
4421
+ importance: 3,
4422
+ estimate: 0.98,
4423
+ rationale: "Ordinary editing and focus work; advanced selection, composition and autofill remain estimated."
4424
+ },
4425
+ {
4426
+ id: "scroll",
4427
+ usage: 3,
4428
+ importance: 3,
4429
+ estimate: 0.98,
4430
+ rationale: "Ordinary scrolling works; automatic insets and nested-scroll edges remain estimated."
4431
+ },
4432
+ {
4433
+ id: "lists",
4434
+ usage: 3,
4435
+ importance: 3,
4436
+ estimate: 0.99,
4437
+ rationale: "Windowed lists and list variants work; uncommon visibility and mutation sequences remain estimated."
4438
+ },
4439
+ {
4440
+ id: "press",
4441
+ usage: 3,
4442
+ importance: 3,
4443
+ estimate: 0.99,
4444
+ rationale: "Press and responder routing work; uncommon nested interaction sequences remain estimated."
4445
+ },
4446
+ {
4447
+ id: "images",
4448
+ usage: 3,
4449
+ importance: 2,
4450
+ estimate: 0.99,
4451
+ rationale: "Image loading and resize modes work; uncommon source and paint details remain estimated."
4452
+ },
4453
+ {
4454
+ id: "animation",
4455
+ usage: 2,
4456
+ importance: 3,
4457
+ estimate: 0.97,
4458
+ rationale: "Common animation graphs work; interruption and layout-animation edges remain estimated."
4459
+ },
4460
+ {
4461
+ id: "controls",
4462
+ usage: 2,
4463
+ importance: 3,
4464
+ estimate: 0.98,
4465
+ rationale: "Modals, alerts and controls work; uncommon native presentation details remain estimated."
4466
+ },
4467
+ {
4468
+ id: "keyboard",
4469
+ usage: 2,
4470
+ importance: 3,
4471
+ estimate: 0.97,
4472
+ rationale: "Keyboard presentation and avoidance work; accessory and inset edge behavior remain estimated."
4473
+ },
4474
+ {
4475
+ id: "environment",
4476
+ usage: 2,
4477
+ importance: 2,
4478
+ estimate: 0.99,
4479
+ rationale: "Platform, dimensions and appearance work; uncommon lifecycle transitions remain estimated."
4480
+ },
4481
+ {
4482
+ id: "accessibility",
4483
+ usage: 1,
4484
+ importance: 2,
4485
+ estimate: 0.85,
4486
+ rationale: "Focus and announcements have implementations; several accessibility preferences return fixed values."
4487
+ },
4488
+ {
4489
+ id: "system",
4490
+ usage: 1,
4491
+ importance: 2,
4492
+ estimate: 0.9,
4493
+ rationale: "Small system APIs depend on browser facilities; physical device behavior is not universally available."
4494
+ },
4495
+ {
4496
+ id: "native-integration",
4497
+ usage: 1,
4498
+ importance: 2,
4499
+ estimate: 0.95,
4500
+ rationale: "Core module lookup works; arbitrary app-specific native modules and uncommon system methods remain outside the implemented surface."
4501
+ }
4502
+ ],
4299
4503
  strictCoverage: REACT_NATIVE_ROOT_EXPORT_STRICT_COVERAGE,
4300
4504
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native"],
4301
4505
  note: "React Native 0.86 root surface with useful core rendering, input, scrolling, animation, list, platform, and native-module behavior",
@@ -4317,7 +4521,51 @@ var init_registry = __esm({
4317
4521
  },
4318
4522
  {
4319
4523
  range: ">=4.0.0 <5.0.0",
4320
- ...scoredCoverage("react-native-reanimated", 0.97),
4524
+ ...scoredCoverage("react-native-reanimated"),
4525
+ features: [
4526
+ {
4527
+ id: "animation-primitives",
4528
+ usage: 3,
4529
+ importance: 3,
4530
+ estimate: 1,
4531
+ rationale: "Shared values, timing, spring, decay, sequencing, repetition, interpolation, and easing drive the common animation workflow. The installed upstream JavaScript runs against the SootSim worklet seam, and no app-facing primitive is missing in the inspected path."
4532
+ },
4533
+ {
4534
+ id: "animated-components-and-props",
4535
+ usage: 3,
4536
+ importance: 3,
4537
+ estimate: 1,
4538
+ rationale: "Animated View, Text, Image, ScrollView, FlatList, animated styles, animated props, and animated refs cover the primary rendered workflow. The React 19.2.3 bridge receives refs as ordinary props and the adapter preserves them, with no observed app-facing wrapper gap."
4539
+ },
4540
+ {
4541
+ id: "scroll-and-event-workflows",
4542
+ usage: 3,
4543
+ importance: 3,
4544
+ estimate: 1,
4545
+ rationale: "Scroll handlers, offsets, frame callbacks, scheduling, gesture state, scrollTo and measure use the implemented engine paths. No separate scheduling defect is established."
4546
+ },
4547
+ {
4548
+ id: "layout-transitions",
4549
+ usage: 2,
4550
+ importance: 3,
4551
+ estimate: 1,
4552
+ rationale: "Upstream layout builders and the engine layout owner implement entering, exiting and layout transitions."
4553
+ },
4554
+ {
4555
+ id: "css-animations",
4556
+ usage: 1,
4557
+ importance: 2,
4558
+ estimate: 0.8,
4559
+ rationale: "Common opacity, transform and processed-color CSS animations work. The 20% allowance estimates the remaining layout, border metrics, shadows, filters and complex-value animation workflows."
4560
+ },
4561
+ {
4562
+ id: "device-and-native-integration",
4563
+ usage: 1,
4564
+ importance: 2,
4565
+ estimate: 1,
4566
+ rationale: "Native property reads and writes, commands, reduced motion, keyboard frames and sensor registration use engine paths; unavailable physical facilities follow the browser-hosted contract."
4567
+ }
4568
+ ],
4321
4569
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-reanimated"],
4322
4570
  note: "core animations, gestures, scroll, layout transitions, common CSS opacity, transform, and processed-color transitions and keyframes, keyboard, sensors, reduced motion, native view property reads, and direct static style snapshots",
4323
4571
  working: "useSharedValue, useAnimatedStyle/Props/Reaction, useDerivedValue, useAnimatedScrollHandler, useScrollViewOffset, useFrameCallback, useAnimatedRef, useAnimatedKeyboard, useAnimatedSensor, useReducedMotion, entering/exiting/layout transitions, css/createCSSAnimatedComponent with cubicBezier/linear/steps timing for common opacity and transform transitions, opacity and transform keyframes with retained forwards fill, withTiming/Spring/Decay/Delay/Sequence/Repeat/Clamp, interpolate, interpolateColor, runOnJS/UI, measure, scrollTo, getViewProp (layout, opacity, zIndex, backgroundColor, boxShadow), direct setViewStyle snapshots, Easing, createAnimatedComponent, Animated.View/Text/Image/ScrollView/FlatList",
@@ -4333,7 +4581,37 @@ var init_registry = __esm({
4333
4581
  { range: ">=2.0.0 <2.30.0", coverage: 0.7, note: "tap, pan, long press" },
4334
4582
  {
4335
4583
  range: ">=2.30.0 <3.0.0",
4336
- ...scoredCoverage("react-native-gesture-handler", 0.9),
4584
+ ...scoredCoverage("react-native-gesture-handler"),
4585
+ features: [
4586
+ {
4587
+ id: "gesture-recognition-and-composition",
4588
+ usage: 3,
4589
+ importance: 3,
4590
+ estimate: 1,
4591
+ rationale: "GestureDetector, gesture factories, discrete and continuous recognizers, and composed relationships use the recognition seam. ForceTouch reports unavailable hardware, as expected in the simulator."
4592
+ },
4593
+ {
4594
+ id: "native-wrappers-and-touchables",
4595
+ usage: 3,
4596
+ importance: 2,
4597
+ estimate: 1,
4598
+ rationale: "ScrollView, FlatList, Switch, Pressable, TextInput, RefreshControl, Text, and touchable/button wrappers preserve normal React Native controls while attaching gesture behavior where requested. The inspected wrapper path has no app-facing behavior gap."
4599
+ },
4600
+ {
4601
+ id: "root-and-native-interop",
4602
+ usage: 2,
4603
+ importance: 2,
4604
+ estimate: 1,
4605
+ rationale: "GestureHandlerRootView, root HOC, native wrappers, refs, and the registered recognition seam make the package usable inside ordinary app trees. The inspected root and registration path has no app-facing behavior gap."
4606
+ },
4607
+ {
4608
+ id: "drawers-and-swipeables",
4609
+ usage: 1,
4610
+ importance: 2,
4611
+ estimate: 1,
4612
+ rationale: "Swipeable, ReanimatedSwipeable and the upstream DrawerLayout use the implemented gesture and drawer paths for drag, open, close and lifecycle callbacks."
4613
+ }
4614
+ ],
4337
4615
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-gesture-handler"],
4338
4616
  note: "tap, pan, pinch, rotation, fling, long press, race, manual, simultaneous, force touch unavailable-hardware parity",
4339
4617
  working: "GestureDetector, Gesture.Tap/Pan/Pinch/Rotation/Fling/LongPress/ForceTouch/Manual/Race/Simultaneous/Exclusive/Hover, ForceTouchGestureHandler unavailable-hardware fallback (children render, forceTouchAvailable false, no force events), simultaneousWithExternalGesture/requireExternalGestureToFail/blocksExternalGesture, ScrollView/FlatList, Switch/RefreshControl, Pressable/Text, Touchables, BaseButton/RawButton/RectButton/BorderlessButton/PureNativeButton, Swipeable, ReanimatedSwipeable, DrawerLayout (the upstream component running on this seam: renderNavigationView, drawerPosition/drawerType/drawerWidth/edgeWidth, openDrawer/closeDrawer, edge-swipe drag, onDrawerOpen/onDrawerClose/onDrawerStateChanged), GestureHandlerRootView, createNativeWrapper, gestureHandlerRootHOC, PointerType/MouseButton/HoverEffect exports, velocity tracking, activeOffsets, multi-tap"
@@ -4348,7 +4626,44 @@ var init_registry = __esm({
4348
4626
  { range: ">=3.0.0 <4.0.0", coverage: 0.6, note: "basic screen container" },
4349
4627
  {
4350
4628
  range: ">=4.0.0",
4351
- ...scoredCoverage("react-native-screens", 0.95),
4629
+ ...scoredCoverage("react-native-screens"),
4630
+ features: [
4631
+ {
4632
+ id: "screen-containers-and-lifecycle",
4633
+ usage: 3,
4634
+ importance: 3,
4635
+ estimate: 1,
4636
+ rationale: "Screen, ScreenContainer, ScreenStack, ScreenStackItem, activity state, lifecycle callbacks, and enableScreens cover the primary navigation container workflow. The inspected container and lifecycle path has no app-facing behavior gap."
4637
+ },
4638
+ {
4639
+ id: "stack-presentations-and-transitions",
4640
+ usage: 3,
4641
+ importance: 3,
4642
+ estimate: 1,
4643
+ rationale: "Push, modal, transparent, page-sheet, form-sheet, replace, fade, zoom, slide, parallax, and interactive edge-swipe transitions determine the visible navigation workflow. The inspected stack transition path has no app-facing behavior gap outside the separate detent interaction feature."
4644
+ },
4645
+ {
4646
+ id: "headers-and-search",
4647
+ usage: 2,
4648
+ importance: 2,
4649
+ estimate: 1,
4650
+ rationale: "Header configuration, native buttons and menus, back and title presentation, custom subviews, search bars, large-title collapse, and iOS toolbar search placements cover common stack chrome. The inspected header and search path has no app-facing behavior gap."
4651
+ },
4652
+ {
4653
+ id: "sheets-and-modal-geometry",
4654
+ usage: 2,
4655
+ importance: 2,
4656
+ estimate: 0.75,
4657
+ rationale: "Initial detents, sheet geometry, corner radius, grabber, undimmed range and dismissal work. Interactive movement between form-sheet detents is absent, estimated as 25% of this sheet workflow."
4658
+ },
4659
+ {
4660
+ id: "tabs-freeze-and-overlay",
4661
+ usage: 1,
4662
+ importance: 1,
4663
+ estimate: 1,
4664
+ rationale: "Tabs.Host and Tabs.Screen, FullWindowOverlay, transition progress, and opt-in React freeze behavior remain available. The inspected tab, overlay, and freeze path has no app-facing behavior gap."
4665
+ }
4666
+ ],
4352
4667
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-screens"],
4353
4668
  note: "screen container, stack, header config, search bar, navigation props",
4354
4669
  working: "Screen, ScreenContainer, ScreenStack, enableFreeze/freezeEnabled with delayed React freeze, Android modal/pageSheet push fallback, Android statusBarHidden/statusBarStyle/navigationBarHidden traits, push/pop slide, replaceAnimation push/pop direction, zoom/fade/fade_from_bottom transitions, edge swipe-back, parallax behind-screen, large title collapse, header (back button, inline/large title, custom left/center/right/search bar subviews, native header bar buttons/menus/badges, crossfade), formSheet custom initial detents/corner radius/grabber/undimmed range and stacked sheets, useHeaderHeight, useTransitionProgress, FullWindowOverlay, SearchBar with stacked and iOS 26 automatic/inline/integrated/integratedCentered/integratedButton toolbar placement, Tabs.Host/Screen, lifecycle callbacks (onAppear/onDisappear/onWillAppear/onWillDisappear), onDismissed",
@@ -4363,11 +4678,41 @@ var init_registry = __esm({
4363
4678
  versions: [
4364
4679
  {
4365
4680
  range: ">=4.0.0",
4366
- ...scoredCoverage("react-native-safe-area-context", 0.95),
4681
+ ...scoredCoverage("react-native-safe-area-context"),
4682
+ features: [
4683
+ {
4684
+ id: "provider-and-window-metrics",
4685
+ usage: 3,
4686
+ importance: 3,
4687
+ estimate: 0.97,
4688
+ rationale: "SafeAreaProvider and initialWindowMetrics expose live frame and inset values from the device-spec and keyboard sources. The compatibility facade does not export the upstream initialWindowSafeAreaInsets value, so direct imports of that public constant do not receive the native package value."
4689
+ },
4690
+ {
4691
+ id: "edge-aware-layout",
4692
+ usage: 3,
4693
+ importance: 3,
4694
+ estimate: 1,
4695
+ rationale: "SafeAreaView applies additive, maximum, and off edge modes to padding or margin while preserving flattened caller styles. The inspected edge and style path has no app-facing behavior gap."
4696
+ },
4697
+ {
4698
+ id: "hooks-contexts-and-hoc",
4699
+ usage: 3,
4700
+ importance: 2,
4701
+ estimate: 1,
4702
+ rationale: "useSafeAreaInsets, useSafeAreaFrame, SafeAreaConsumer, SafeAreaContext, useSafeArea, and withSafeAreaInsets expose the provider values through the expected context and component APIs. The inspected hook and HOC path has no app-facing behavior gap under React 19.2.3 ref semantics."
4703
+ },
4704
+ {
4705
+ id: "listener-and-nested-provider",
4706
+ usage: 1,
4707
+ importance: 2,
4708
+ estimate: 1,
4709
+ rationale: "Nested providers retain parent values and SafeAreaListener subscribes to device, keyboard, bar, and soft-input changes. The inspected listener and nested-provider path has no app-facing behavior gap."
4710
+ }
4711
+ ],
4367
4712
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-safe-area-context"],
4368
4713
  note: "live device/system-bar/ime metrics, edges/mode padding, hooks",
4369
4714
  working: "SafeAreaProvider with live Android system-bar and IME-resized frame metrics, SafeAreaView (edges/mode padding/margin), useSafeAreaInsets, useSafeAreaFrame, SafeAreaInsetsContext, SafeAreaFrameContext, initialWindowMetrics, SafeAreaListener onInsetsChange, withSafeAreaInsets HOC",
4370
- missing: "rotation-specific provider frame deltas"
4715
+ missing: "initialWindowSafeAreaInsets is not exported; rotation-specific provider frame deltas remain unassessed"
4371
4716
  }
4372
4717
  ]
4373
4718
  },
@@ -4378,11 +4723,55 @@ var init_registry = __esm({
4378
4723
  versions: [
4379
4724
  {
4380
4725
  range: ">=13.0.0",
4381
- ...scoredCoverage("react-native-svg", 0.85),
4726
+ ...scoredCoverage("react-native-svg"),
4727
+ features: [
4728
+ {
4729
+ id: "shapes-and-transforms",
4730
+ usage: 3,
4731
+ importance: 3,
4732
+ estimate: 1,
4733
+ rationale: "Svg, Path, Circle, Rect, Line, Ellipse, Polygon, Polyline, G, Use, and Symbol render through the upstream JavaScript elements and registered CanvasKit host aliases, with viewBox scaling and shape transforms. The inspected common shape path has no app-facing behavior gap."
4734
+ },
4735
+ {
4736
+ id: "fills-strokes-and-gradients",
4737
+ usage: 3,
4738
+ importance: 2,
4739
+ estimate: 1,
4740
+ rationale: "Fill, stroke, opacity, dash arrays, currentColor, linear and radial gradients, coordinate spaces and gradient transforms use the implemented paint paths."
4741
+ },
4742
+ {
4743
+ id: "definitions-references-and-clipping",
4744
+ usage: 2,
4745
+ importance: 2,
4746
+ estimate: 0.95,
4747
+ rationale: "Defs, Use, Symbol, Mask, ClipPath, Pattern fills and Marker geometry render. The remaining 5% judgment allowance covers absent ForeignObject content, limited marker hosts and unverified context paint inheritance, and pattern non-scaling strokes using the tile matrix."
4748
+ },
4749
+ {
4750
+ id: "text-and-text-paths",
4751
+ usage: 1,
4752
+ importance: 2,
4753
+ estimate: 0.92,
4754
+ rationale: "Text, TSpan and shaped TextPath glyphs render, including offsets, anchors, curves and spans. The remaining 8% judgment allowance covers advanced path text layout, per-glyph positioning, objectBoundingBox paints and font or emoji fallback parity."
4755
+ },
4756
+ {
4757
+ id: "xml-and-document-helpers",
4758
+ usage: 1,
4759
+ importance: 1,
4760
+ estimate: 1,
4761
+ rationale: "SvgXml, SvgUri, SvgAst, SvgFromXml, SvgCss, parse, fetchText, and camelCase provide the installed package's document-loading and parsing workflow. The inspected helper path has no app-facing behavior gap."
4762
+ },
4763
+ {
4764
+ id: "filters-and-imperative-geometry",
4765
+ usage: 1,
4766
+ importance: 2,
4767
+ estimate: 0,
4768
+ rationale: "Filter hosts and native export, hit-testing, path-metric, bounding-box and matrix methods refuse the operation. These dedicated behaviors receive no implementation credit."
4769
+ }
4770
+ ],
4382
4771
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-svg"],
4383
- note: "full CanvasKit rendering for shapes, text, XML, gradients, references, masks, clipping, and images; SVG filter elements skipped",
4384
- working: "Svg, Path, Circle, Rect, Line, Ellipse, Polygon, Polyline, G, Text, TSpan, Defs, LinearGradient and RadialGradient with objectBoundingBox/userSpaceOnUse coordinates, focal points and gradientTransform, Stop, Mask, ClipPath, Image, Use and Symbol references, SvgXml, SvgUri, SvgAst, SvgFromXml, SvgCss, parse, fetchText, camelCase, shape transforms, fill/stroke/opacity/dasharray, currentColor, viewBox scaling",
4385
- missing: "SVG filter primitives (Filter, FeBlend, FeColorMatrix, FeGaussianBlur, FeComposite, etc), Pattern, Marker, ForeignObject, and TextPath are skipped by the renderer"
4772
+ note: "CanvasKit rendering for shapes, text, XML, gradients, references, masks, clipping, and images; native SVG filters and geometry queries are unsupported",
4773
+ working: "Svg, Path, Circle, Rect, Line, Ellipse, Polygon, Polyline, G, Text, TSpan, TextPath shaped glyphs along referenced paths, Defs, Pattern fills, Marker geometry on paths/lines/polylines/polygons, LinearGradient and RadialGradient with objectBoundingBox/userSpaceOnUse coordinates, focal points and gradientTransform, Stop, Mask, ClipPath, Image, Use and Symbol references, SvgXml, SvgUri, SvgAst, SvgFromXml, SvgCss, parse, fetchText, camelCase, shape transforms, fill/stroke/opacity/dasharray, currentColor, viewBox scaling",
4774
+ missing: "native SVG filter components and toDataURL, hit-testing, path-metric, bounding-box, and matrix methods refuse calls; ForeignObject does not render; marker context paints remain unverified; TextPath advanced layout, per-glyph positioning and objectBoundingBox paints are unsupported; pattern non-scaling strokes use the tile matrix; no font or emoji fallback parity claim"
4386
4775
  }
4387
4776
  ]
4388
4777
  },
@@ -4392,7 +4781,44 @@ var init_registry = __esm({
4392
4781
  versions: [
4393
4782
  {
4394
4783
  range: ">=1.0.0",
4395
- ...scoredCoverage("@react-native-async-storage/async-storage", 1),
4784
+ ...scoredCoverage("@react-native-async-storage/async-storage"),
4785
+ features: [
4786
+ {
4787
+ id: "single-key-read-write",
4788
+ usage: 3,
4789
+ importance: 3,
4790
+ estimate: 1,
4791
+ rationale: "ordinary get, set, remove, clear, and persistence work through the tenant storage seam"
4792
+ },
4793
+ {
4794
+ id: "batched-operations",
4795
+ usage: 3,
4796
+ importance: 3,
4797
+ estimate: 1,
4798
+ rationale: "upstream batch reads preserve null for absent keys and empty strings for stored values; batch writes run through the tenant storage seam"
4799
+ },
4800
+ {
4801
+ id: "merge-json",
4802
+ usage: 2,
4803
+ importance: 2,
4804
+ estimate: 1,
4805
+ rationale: "JSON object merge semantics are implemented by the native seam"
4806
+ },
4807
+ {
4808
+ id: "persistence-and-callbacks",
4809
+ usage: 2,
4810
+ importance: 3,
4811
+ estimate: 1,
4812
+ rationale: "tenant-scoped persistence and callback/promise completion match the app-facing contract"
4813
+ },
4814
+ {
4815
+ id: "use-async-storage-hook",
4816
+ usage: 1,
4817
+ importance: 2,
4818
+ estimate: 1,
4819
+ rationale: "the upstream hook runs over the default storage object"
4820
+ }
4821
+ ],
4396
4822
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-async-storage/async-storage"],
4397
4823
  note: "native-seam only \u2014 upstream AsyncStorage JS runs from the bundle and resolves RNCAsyncStorage, which persists through tenant localStorage"
4398
4824
  }
@@ -4405,15 +4831,56 @@ var init_registry = __esm({
4405
4831
  versions: [
4406
4832
  {
4407
4833
  range: ">=11.0.0",
4408
- ...scoredCoverage(
4409
- "react-native-webview",
4410
- REACT_NATIVE_WEBVIEW_WILL_IT_WORK_COVERAGE
4411
- ),
4834
+ ...scoredCoverage("react-native-webview"),
4835
+ features: [
4836
+ {
4837
+ id: "content-loading",
4838
+ usage: 3,
4839
+ importance: 3,
4840
+ estimate: 0.85,
4841
+ rationale: "HTML, base URL and compatible URI pages load. Cross-origin pages blocked by iframe or WebKit COEP restrictions account for an estimated 15% of loading workflows; session behavior is assessed separately."
4842
+ },
4843
+ {
4844
+ id: "lifecycle-messaging-injection",
4845
+ usage: 3,
4846
+ importance: 3,
4847
+ estimate: 0.84,
4848
+ rationale: "local page lifecycle, messaging, and injection work; arbitrary remote-frame scripting cannot cross origin"
4849
+ },
4850
+ {
4851
+ id: "navigation-controls",
4852
+ usage: 3,
4853
+ importance: 3,
4854
+ estimate: 0.7,
4855
+ rationale: "Reload and injection work. HTML fragment navigation now follows the observed iOS URL and callback sequence, and local link requests expose decisions with matching payloads. The remaining 30% judgment allowance retains initial-load interception, remote history, stop-loading, failed navigation and form requests."
4856
+ },
4857
+ {
4858
+ id: "layout-scroll-presentation",
4859
+ usage: 3,
4860
+ importance: 2,
4861
+ estimate: 1,
4862
+ rationale: "Layout, clipping, scrolling, loading UI and parked/live presentation use the implemented hosted surface."
4863
+ },
4864
+ {
4865
+ id: "request-session-props",
4866
+ usage: 2,
4867
+ importance: 2,
4868
+ estimate: 0.4,
4869
+ rationale: "headers, cache, incognito, user agent, and cross-origin cookie/session behavior differ from native"
4870
+ },
4871
+ {
4872
+ id: "media-file-integration",
4873
+ usage: 1,
4874
+ importance: 2,
4875
+ estimate: 0.45,
4876
+ rationale: "Browser file inputs and media remain browser-backed, but native inline/autoplay/fullscreen policy props are not forwarded to the iframe. Their missing control is estimated as 55% of this feature."
4877
+ }
4878
+ ],
4412
4879
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-webview"],
4413
4880
  strictCoverage: REACT_NATIVE_WEBVIEW_STRICT_COVERAGE,
4414
- note: "native-seam only: the published package runs unchanged and routes RNCWebView through the tenant-to-shell hosted iframe surface. coverage is generated from app-source use in six pinned applications; equal-surface strict coverage includes the shared, iOS, and Android public prop and ref surface. paired native and SootSim runtime conformance covers local HTML, base URL, URI loading, load and navigation callbacks, both injection phases, two-way messaging, imperative URI reload and injection, content scrolling, parent translation, and onOpenWindow target delivery.",
4415
- working: "source.uri/source.html/source.baseUrl, Chromium cross-origin URI loading under the shell COEP, same-origin URI cookies, source.html persistent localStorage, document-start ReactNativeWebView bootstrap and injectedJavaScriptBeforeContentLoaded/injectedJavaScript on source.html, strict ReactNativeWebView.postMessage bridge envelope in both directions, onMessage synthetic event with navigation fields, onOpenWindow target delivery for source.html, successful onLoad/Start/End and onNavigationStateChange, ref.reload on URI pages, ref.injectJavaScript/postMessage, internal content scrolling, renderLoading, javaScriptEnabled sandbox, layout, inherited clipping and visibility, parked/live presentation",
4416
- missing: "Safari/WebKit cross-origin URI pages without COEP-compatible response headers remain permanently loading because WebKit ignores iframe credentialless; Chromium credentialless cross-origin URI frames send no credentials, including cookies set by their own origin, and use ephemeral storage; iframe pixels in canvas screenshots; script injection, ReactNativeWebView bootstrap, and onOpenWindow for remote pages, which get no bridge at all because a browser cannot script a cross-origin frame; cross-origin ref.goBack/goForward/stopLoading and truthful canGoBack/canGoForward values; failed HTTP/refused navigation callbacks (onError/onHttpError and renderError); onShouldStartLoadWithRequest, allowsBackForwardNavigationGestures, userAgent, dataDetectorTypes, cacheEnabled, incognito, scalesPageToFit, originWhitelist enforcement"
4881
+ note: "native-seam only: the published package runs unchanged and routes RNCWebView through the tenant-to-shell hosted iframe surface. the implementation estimate uses reviewed feature weights; the separate equal-surface strict diagnostic includes the shared, iOS, and Android public prop and ref surface. paired native and SootSim runtime conformance covers local HTML, base URL, URI loading, load and navigation callbacks, both injection phases, two-way messaging, imperative URI reload and injection, local HTML fragment navigation and link-request decisions, content scrolling, parent translation, and onOpenWindow target delivery.",
4882
+ working: "source.uri/source.html/source.baseUrl, Chromium cross-origin URI loading under the shell COEP, same-origin URI cookies, source.html persistent localStorage, document-start ReactNativeWebView bootstrap and injectedJavaScriptBeforeContentLoaded/injectedJavaScript on source.html, strict ReactNativeWebView.postMessage bridge envelope in both directions, onMessage synthetic event with navigation fields, onOpenWindow target delivery for source.html, successful onLoad/Start/End and onNavigationStateChange, ref.reload on URI pages, ref.injectJavaScript/postMessage, local HTML fragment URL/callback behavior, onShouldStartLoadWithRequest for local link clicks with native-shaped request and loading payloads, internal content scrolling, renderLoading, javaScriptEnabled sandbox, layout, inherited clipping and visibility, parked/live presentation",
4883
+ missing: "Safari/WebKit cross-origin URI pages without COEP-compatible response headers remain permanently loading because WebKit ignores iframe credentialless; Chromium credentialless cross-origin URI frames send no credentials, including cookies set by their own origin, and use ephemeral storage; iframe pixels in canvas screenshots; script injection, ReactNativeWebView bootstrap, and onOpenWindow for remote pages, which get no bridge at all because a browser cannot script a cross-origin frame; cross-origin ref.goBack/goForward/stopLoading and truthful canGoBack/canGoForward values; failed HTTP/refused navigation callbacks (onError/onHttpError and renderError); initial-load and form onShouldStartLoadWithRequest callbacks, allowsBackForwardNavigationGestures, userAgent, dataDetectorTypes, cacheEnabled, incognito, scalesPageToFit, originWhitelist enforcement"
4417
4884
  }
4418
4885
  ]
4419
4886
  },
@@ -4485,11 +4952,48 @@ var init_registry = __esm({
4485
4952
  versions: [
4486
4953
  {
4487
4954
  range: ">=9.0.0",
4488
- ...scoredCoverage("@react-native-community/netinfo", 0.95),
4955
+ ...scoredCoverage("@react-native-community/netinfo"),
4956
+ features: [
4957
+ {
4958
+ id: "status-observation",
4959
+ usage: 3,
4960
+ importance: 3,
4961
+ estimate: 1,
4962
+ rationale: "upstream fetch, hooks, and listeners receive the host network snapshot, including the initial subscription notification"
4963
+ },
4964
+ {
4965
+ id: "global-singleton",
4966
+ usage: 3,
4967
+ importance: 3,
4968
+ estimate: 1,
4969
+ rationale: "the published singleton supplies configure, fetch, refresh, and subscription replacement over the native network seam"
4970
+ },
4971
+ {
4972
+ id: "hooks",
4973
+ usage: 3,
4974
+ importance: 2,
4975
+ estimate: 1,
4976
+ rationale: "published useNetInfo and useNetInfoInstance retain configuration, refresh, pause, resume, and subscription cleanup"
4977
+ },
4978
+ {
4979
+ id: "state-fidelity",
4980
+ usage: 2,
4981
+ importance: 2,
4982
+ estimate: 0.75,
4983
+ rationale: "browser transport hints and data-saving state populate the upstream snapshot; native network identifiers and metrics remain unavailable, and reachability follows navigator.onLine"
4984
+ },
4985
+ {
4986
+ id: "public-enums",
4987
+ usage: 1,
4988
+ importance: 1,
4989
+ estimate: 1,
4990
+ rationale: "upstream NetInfoStateType and NetInfoCellularGeneration runtime enums are present"
4991
+ }
4992
+ ],
4489
4993
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-community/netinfo"],
4490
- note: "navigator.onLine backed with online/offline event listeners",
4491
- working: "fetch, useNetInfo, addEventListener, NetInfoStateType",
4492
- missing: 'details field always null (no connection type subtype), type always "wifi" or "none" (no cellular/ethernet detection)'
4994
+ note: "published upstream JavaScript runs over the host-backed RNCNetInfo native seam; feature estimates cover browser-hosted network behavior",
4995
+ working: "fetch, refresh, configure, initial and subsequent listener notifications, useNetInfo, useNetInfoInstance, and upstream runtime enums",
4996
+ missing: "native network identifiers and metrics are unavailable; transport hints depend on browser support, and default Internet reachability mirrors navigator.onLine rather than probing a remote endpoint"
4493
4997
  }
4494
4998
  ]
4495
4999
  },
@@ -4500,11 +5004,48 @@ var init_registry = __esm({
4500
5004
  versions: [
4501
5005
  {
4502
5006
  range: ">=1.0.0",
4503
- ...scoredCoverage("react-native-keyboard-controller", 0.88),
5007
+ ...scoredCoverage("react-native-keyboard-controller"),
5008
+ features: [
5009
+ {
5010
+ id: "keyboard-layout-avoidance",
5011
+ usage: 3,
5012
+ importance: 3,
5013
+ estimate: 1,
5014
+ rationale: "KeyboardAvoidingView, KeyboardStickyView, and KeyboardAwareScrollView are upstream JavaScript components and cover the primary keyboard-aware layout workflow through the shared keyboard and reanimated paths. The inspected layout path has no app-facing behavior gap."
5015
+ },
5016
+ {
5017
+ id: "keyboard-events-and-hooks",
5018
+ usage: 3,
5019
+ importance: 3,
5020
+ estimate: 1,
5021
+ rationale: "KeyboardProvider, animation hooks, focused-input hooks, keyboard lifecycle events, and resize events use the live SootSim keyboard source and worklet dispatch path. The inspected event and hook path has no app-facing behavior gap."
5022
+ },
5023
+ {
5024
+ id: "keyboard-controller-api",
5025
+ usage: 2,
5026
+ importance: 2,
5027
+ estimate: 1,
5028
+ rationale: "Dismiss, focus navigation, preload, visibility and state reads, input mode, and default mode have explicit controller paths. The inspected controller path has no app-facing behavior gap."
5029
+ },
5030
+ {
5031
+ id: "interactive-keyboard-gesture",
5032
+ usage: 1,
5033
+ importance: 2,
5034
+ estimate: 1,
5035
+ rationale: "KeyboardGestureArea recognizes drag, settling, cancellation, focus retention, and cleanup. The current binding also registers and unregisters textInputNativeID and offset with the keyboard runtime on iOS, so the inspected gesture path has no app-facing behavior gap."
5036
+ },
5037
+ {
5038
+ id: "keyboard-native-views-and-toolbar",
5039
+ usage: 1,
5040
+ importance: 2,
5041
+ estimate: 0,
5042
+ rationale: "Over-keyboard hosting, keyboard background effects, extender layout, clipping and native toolbar grouping are absent. Ordinary View wrappers do not implement these native accessory behaviors."
5043
+ }
5044
+ ],
4504
5045
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-keyboard-controller"],
4505
5046
  note: "native bindings stubbed (KeyboardControllerNative, KeyboardEvents, FocusedInputEvents, WindowDimensionsEvents, KeyboardControllerView + sibling native views); upstream pure-JS components, hooks, animated module, and KeyboardAvoidingView resolve from node_modules unchanged",
4506
5047
  working: "every upstream JS export runs through reanimated worklets; Android KeyboardGestureArea drives the existing keyboard owner through drag progress, velocity/distance settling, cancellation, focus retention, and cleanup; supported exports include KeyboardProvider, KeyboardAvoidingView, KeyboardStickyView, KeyboardAwareScrollView, KeyboardToolbar, KeyboardGestureArea, useReanimatedKeyboardAnimation, useKeyboardAnimation, useKeyboardHandler, useGenericKeyboardHandler, useKeyboardController, useKeyboardState, useKeyboardContext, useReanimatedFocusedInput, useFocusedInputHandler, useResizeMode, useWindowDimensions, KeyboardEvents, FocusedInputEvents, WindowDimensionsEvents resize events, KeyboardController (dismiss/setFocusTo/isVisible/state/preload/setInputMode/setDefaultMode), KeyboardControllerView, OverKeyboardView, KeyboardBackgroundView, KeyboardExtender, ClippingScrollView, KeyboardToolbarGroupView, and AndroidSoftInputModes",
4507
- missing: "KeyboardGestureArea lacks its iOS textInputNativeID/offset effect; OverKeyboardView, KeyboardBackgroundView, and KeyboardExtender are passthrough views without their native platform effects"
5048
+ missing: "OverKeyboardView, KeyboardBackgroundView, KeyboardExtender, ClippingScrollView, and KeyboardToolbarGroupView are passthrough views without their native platform effects"
4508
5049
  }
4509
5050
  ]
4510
5051
  },
@@ -4514,7 +5055,23 @@ var init_registry = __esm({
4514
5055
  versions: [
4515
5056
  {
4516
5057
  range: ">=0.2.0",
4517
- ...scoredCoverage("@react-native-masked-view/masked-view", 1),
5058
+ ...scoredCoverage("@react-native-masked-view/masked-view"),
5059
+ features: [
5060
+ {
5061
+ id: "alpha-mask-compositing",
5062
+ usage: 3,
5063
+ importance: 3,
5064
+ estimate: 1,
5065
+ rationale: "the engine renders maskElement as an alpha mask with CanvasKit saveLayer and DstIn compositing"
5066
+ },
5067
+ {
5068
+ id: "view-props-and-fallback",
5069
+ usage: 2,
5070
+ importance: 2,
5071
+ estimate: 1,
5072
+ rationale: "children, styles, refs, accessibility, pointer events, and invalid-mask fallback preserve visible behavior"
5073
+ }
5074
+ ],
4518
5075
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-masked-view/masked-view"],
4519
5076
  note: "engine-level masked-view node with canvaskit saveLayer + BlendMode.DstIn alpha compositing",
4520
5077
  working: "MaskedView component renders sootsim-masked-view host element with __sootsimMaskSlot alpha-mask pipeline (saveLayer + DstIn in canvaskit-renderer), maskElement, children, style, pointerEvents, accessible, accessibilityLabel, nativeID, testID"
@@ -4566,7 +5123,37 @@ var init_registry = __esm({
4566
5123
  versions: [
4567
5124
  {
4568
5125
  range: ">=0.1.0",
4569
- ...scoredCoverage("react-native-worklets", 0.97),
5126
+ ...scoredCoverage("react-native-worklets"),
5127
+ features: [
5128
+ {
5129
+ id: "thread-scheduling-bridges",
5130
+ usage: 3,
5131
+ importance: 3,
5132
+ estimate: 1,
5133
+ rationale: "RN and UI scheduling use the implemented local and shell queues; asynchronous transport alone does not establish an ordering defect."
5134
+ },
5135
+ {
5136
+ id: "named-runtime-execution",
5137
+ usage: 2,
5138
+ importance: 2,
5139
+ estimate: 0.88,
5140
+ rationale: "Named runtimes support creation and asynchronous execution. Custom queues, event-loop disabling, polling intervals and synchronous or id-based named-runtime calls are unavailable, estimated as 12% of this feature."
5141
+ },
5142
+ {
5143
+ id: "shareable-and-serializable-values",
5144
+ usage: 2,
5145
+ importance: 2,
5146
+ estimate: 0.95,
5147
+ rationale: "Shareable values, synchronizable values, workletization, and the public serializable registration surface support the common cross-runtime value workflow. Custom serializers are recorded by the facade but are not connected to a separate structured-clone bridge for named runtimes."
5148
+ },
5149
+ {
5150
+ id: "runtime-kinds-and-feature-flags",
5151
+ usage: 1,
5152
+ importance: 1,
5153
+ estimate: 0.95,
5154
+ rationale: "Runtime-kind guards and the UI runtime id work. Dynamic flag writes are ignored, including the installed EXAMPLE_DYNAMIC_FLAG contract; this is estimated as 5% of the feature."
5155
+ }
5156
+ ],
4570
5157
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-worklets"],
4571
5158
  note: "core RN\u2194UI thread bridging, isolated named Worker runtimes, runtime-kind guards, UI-runtime-id execution, shareable/synchronizable guards, custom serializable registration, and feature flag readers use SootSim worker runtimes.",
4572
5159
  working: "createWorkletRuntime with isolated named Worker execution and lifecycle teardown, runOnRuntime/runOnRuntimeAsync/scheduleOnRuntime with scheduleOnRN callback return, runOnJS, runOnUI/Sync/Async, scheduleOnRN/UI, UI-runtime runOnRuntimeSyncWithId/scheduleOnRuntimeWithId, makeShareable, createShareable (3-arg form with hostDecorator), createSerializable, createSynchronizable, isShareable, isSynchronizable, isWorkletFunction, isShareableRef, isSerializableRef, makeShareableCloneRecursive/OnUIRecursive, executeOnUIRuntimeSync, callMicrotasks, WorkletsModule, RuntimeKind enum, getRuntimeKind, isRNRuntime, isUIRuntime, isWorkerRuntime, isWorkletRuntime, UIRuntimeId, getUIRuntimeHolder, getUISchedulerHolder, registerCustomSerializable, getStaticFeatureFlag, getDynamicFeatureFlag, setDynamicFeatureFlag, Worklets namespace",
@@ -4724,10 +5311,10 @@ var init_registry = __esm({
4724
5311
  versions: [
4725
5312
  {
4726
5313
  range: ">=12.0.0",
4727
- coverage: 0.65,
4728
- note: "the published package runs unchanged; openBrowserAsync hands the URL to the host browser, browser-list and lifecycle methods preserve their public result shapes, and an auth popup that the hosted worker cannot retain resolves with a clean cancel result instead of throwing. the 65% score reflects those observed browser-hosted behaviors, not a working native auth-session controller.",
4729
- working: "openBrowserAsync host handoff, dismissBrowser result, warmUpAsync, coolDownAsync, mayInitWithUrlAsync, published non-Android getCustomTabsSupportingBrowsersAsync shape with empty arrays and undefined browser packages, clean auth-session cancel when the hosted worker cannot retain its popup, maybeCompleteAuthSession status, and upstream enums and option processing",
4730
- missing: "an embedded SFSafariViewController or Chrome Custom Tab, closing the host browser tab from dismissBrowser, retaining an auth popup for successful callback and redirect delivery, cookie isolation, and native styling controls"
5314
+ coverage: 0.8,
5315
+ note: "the published package runs unchanged; ordinary browser opens hand off to the host, and host-owned auth sessions deliver successful callback URLs, explicit user cancellation, programmatic dismissal, and replacement. the 80% implementation estimate follows the mounted published-package test under cross-origin isolation and ordinary popup blocking; native browser presentation and unrestricted redirect schemes remain unsupported.",
5316
+ working: "openBrowserAsync host handoff, dismissBrowser result, warmUpAsync, coolDownAsync, mayInitWithUrlAsync, published non-Android getCustomTabsSupportingBrowsersAsync shape, openAuthSessionAsync success with callback URL, explicit host Cancel Sign-In, dismissAuthSession and replacement dismissal, identity-matched callback and control cleanup, preservation of guest alerts during sign-in, and upstream enums and option processing",
5317
+ missing: "embedded SFSafariViewController or Chrome Custom Tab, native styling and cookie isolation, closing an ordinary handed-off host tab from dismissBrowser, custom-scheme or foreign-origin auth callbacks, and observing abandonment after browser isolation severs the popup proxy. auth requires a same-origin HTTP(S) callback and user activation allowed by popup policy; an abandoned isolated provider requires the visible host cancel control"
4731
5318
  }
4732
5319
  ]
4733
5320
  },
@@ -5398,7 +5985,44 @@ var init_registry = __esm({
5398
5985
  versions: [
5399
5986
  {
5400
5987
  range: ">=5.0.0",
5401
- ...scoredCoverage("@sentry/react-native", 0.95),
5988
+ ...scoredCoverage("@sentry/react-native"),
5989
+ features: [
5990
+ {
5991
+ id: "event-telemetry",
5992
+ usage: 3,
5993
+ importance: 3,
5994
+ estimate: 1,
5995
+ rationale: "event capture and initialization are load-safe; delivery is intentionally suppressed in the browser simulator"
5996
+ },
5997
+ {
5998
+ id: "scope-context-breadcrumbs",
5999
+ usage: 3,
6000
+ importance: 3,
6001
+ estimate: 1,
6002
+ rationale: "scope, context, tags, users, extras, and breadcrumbs retain their JavaScript behavior"
6003
+ },
6004
+ {
6005
+ id: "tracing-performance",
6006
+ usage: 2,
6007
+ importance: 3,
6008
+ estimate: 1,
6009
+ rationale: "JavaScript spans and timing integrations work, and native profiling absence is a permitted load-safe simulator result"
6010
+ },
6011
+ {
6012
+ id: "react-integrations",
6013
+ usage: 2,
6014
+ importance: 3,
6015
+ estimate: 1,
6016
+ rationale: "wrap, boundaries, and profiler integrations run through the browser-compatible React path"
6017
+ },
6018
+ {
6019
+ id: "native-observability",
6020
+ usage: 1,
6021
+ importance: 2,
6022
+ estimate: 1,
6023
+ rationale: "native crash, screenshot, replay, and device-observability calls are safe no-ops permitted by the browser simulator contract"
6024
+ }
6025
+ ],
5402
6026
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@sentry/react-native"],
5403
6027
  note: "development noop \u2014 API surface is load-safe and no events are sent from sootsim",
5404
6028
  working: "init, wrap, captureException/Message/Event, ErrorBoundary/withErrorBoundary, withScope/configureScope, all scope setters, startTransaction, startSpan/startInactiveSpan/continueTrace, metrics namespace, hub/client/transport shape, modern integration factories, Severity enum",
@@ -5763,7 +6387,44 @@ var init_registry = __esm({
5763
6387
  versions: [
5764
6388
  {
5765
6389
  range: ">=9.1.0 <10.0.0",
5766
- ...scoredCoverage("@react-native-community/datetimepicker", 0.85),
6390
+ ...scoredCoverage("@react-native-community/datetimepicker"),
6391
+ features: [
6392
+ {
6393
+ id: "wheel-date-time-selection",
6394
+ usage: 3,
6395
+ importance: 3,
6396
+ estimate: 0.93,
6397
+ rationale: "date, time, datetime, bounds and selection events use the wheel control; non-wrapping day/year wheels and the narrower datetime range account for an estimated 7% of this feature"
6398
+ },
6399
+ {
6400
+ id: "locale-timezone-interval",
6401
+ usage: 2,
6402
+ importance: 3,
6403
+ estimate: 1,
6404
+ rationale: "locale, minute interval, fixed offsets, and named IANA zones are implemented by the spinner calendar conversion"
6405
+ },
6406
+ {
6407
+ id: "appearance-enabled-accessibility",
6408
+ usage: 2,
6409
+ importance: 2,
6410
+ estimate: 0.78,
6411
+ rationale: "theme, text color, disabled, and accessibility work, while accentColor and iOS display styles are approximated"
6412
+ },
6413
+ {
6414
+ id: "dismissal-and-legacy-callbacks",
6415
+ usage: 2,
6416
+ importance: 2,
6417
+ estimate: 0.55,
6418
+ rationale: "selection callbacks are adapted, but the seam drops onPickerDismiss; the missing dismissal workflow accounts for an estimated 45% of this callback group"
6419
+ },
6420
+ {
6421
+ id: "android-imperative-export",
6422
+ usage: 1,
6423
+ importance: 1,
6424
+ estimate: 1,
6425
+ rationale: "the iOS package contract intentionally exposes an unavailable warning-only Android helper"
6426
+ }
6427
+ ],
5767
6428
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-community/datetimepicker"],
5768
6429
  note: "the real upstream package JS runs from the guest bundle. the granular onValueChange prop starts in 9.1.0; its controlled iOS wrapper resolves codegenNativeComponent('RNDateTimePicker') to the engine UIDatePicker wheel. paired native and SootSim proof covers fixed-offset and IANA-named date calendars. the pinned Fabric emitter omits utcOffset, so its Int32 field is observed as 0 on native and intentionally matches that value here.",
5769
6430
  working: "real upstream DateTimePicker and exported constants, value, mode date/time/datetime, granular onValueChange event and Date, minimumDate, maximumDate, minuteInterval, locale, timeZoneOffsetInMinutes, timeZoneName for date-mode calendar selection, textColor, themeVariant, disabled",
@@ -6104,7 +6765,23 @@ var init_registry = __esm({
6104
6765
  versions: [
6105
6766
  {
6106
6767
  range: ">=1.0.0",
6107
- ...scoredCoverage("react-native-get-random-values", 1),
6768
+ ...scoredCoverage("react-native-get-random-values"),
6769
+ features: [
6770
+ {
6771
+ id: "secure-rng-side-effect",
6772
+ usage: 3,
6773
+ importance: 3,
6774
+ estimate: 1,
6775
+ rationale: "the browser already provides crypto.getRandomValues, so importing the side-effect polyfill preserves the app contract"
6776
+ },
6777
+ {
6778
+ id: "load-safe-fallback",
6779
+ usage: 1,
6780
+ importance: 1,
6781
+ estimate: 1,
6782
+ rationale: "the hosted runtime has secure crypto and the shim does not replace it"
6783
+ }
6784
+ ],
6108
6785
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-get-random-values"],
6109
6786
  note: "side-effect polyfill \u2014 browser already has crypto.getRandomValues, noop is correct",
6110
6787
  working: "polyfills globalThis.crypto.getRandomValues if absent (Math.random fallback)"
@@ -16340,6 +17017,36 @@ var init_registry = __esm({
16340
17017
  ]
16341
17018
  }
16342
17019
  };
17020
+ POLYFILL_REGISTRY = Object.fromEntries(
17021
+ Object.entries(POLYFILL_REGISTRY_INPUT).map(([name2, entry]) => [
17022
+ name2,
17023
+ {
17024
+ ...entry,
17025
+ versions: entry.versions.map((version) => {
17026
+ let features = version.features;
17027
+ if (features === void 0) {
17028
+ const estimate = version.estimate ?? version.coverage;
17029
+ if (estimate == null)
17030
+ throw new Error(`${name2}@${version.range} needs an implementation estimate`);
17031
+ features = [
17032
+ { id: "package", usage: 1, importance: 1, estimate, rationale: version.note }
17033
+ ];
17034
+ } else if (version.estimate !== void 0 || version.coverageSource !== "measured" && version.coverage !== void 0) {
17035
+ throw new Error(
17036
+ `${name2}@${version.range} cannot declare both features and a scalar estimate`
17037
+ );
17038
+ }
17039
+ const score = calculateFeatureCompatibility(features);
17040
+ return {
17041
+ ...version,
17042
+ features,
17043
+ coverage: version.coverageSource === "measured" ? version.coverage ?? null : score.estimate,
17044
+ ...version.coverageSource === "measured" ? { estimate: score.estimate } : {}
17045
+ };
17046
+ })
17047
+ }
17048
+ ])
17049
+ );
16343
17050
  }
16344
17051
  });
16345
17052
 
@@ -29158,6 +29865,7 @@ function describeVisibleSimCandidate(sims, currentId) {
29158
29865
  return `${candidate.id}${tags.length ? ` [${tags.join(", ")}]` : ""}`;
29159
29866
  }
29160
29867
  async function checkSimHealth(bridge) {
29868
+ if (bridge.plane === "cloud") return { hidden: false, warned: false };
29161
29869
  try {
29162
29870
  const probe3 = await bridge.send({
29163
29871
  type: "evaluate",