rnxsim 0.1.488 → 0.1.490

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 (56) hide show
  1. package/cli/bridge-flow-runner.ts +12 -17
  2. package/cli/commands/flow.ts +4 -0
  3. package/detox/proof-frame.cjs +10 -0
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/agent-identity.cjs +1 -1
  7. package/dist-lib/agent-sessions.cjs +1 -1
  8. package/dist-lib/attached-projects.cjs +1 -1
  9. package/dist-lib/auth/shared-session.cjs +1 -1
  10. package/dist-lib/backend-origin.cjs +1 -1
  11. package/dist-lib/beta.cjs +1 -1
  12. package/dist-lib/beta.mjs +1 -1
  13. package/dist-lib/bridge-constants.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.cjs +1 -1
  15. package/dist-lib/bridge-contract-input.mjs +1 -1
  16. package/dist-lib/bridge-contract.cjs +1 -1
  17. package/dist-lib/bridge-contract.mjs +1 -1
  18. package/dist-lib/capture-contract.cjs +1 -1
  19. package/dist-lib/capture-contract.mjs +1 -1
  20. package/dist-lib/cli-constants.cjs +1 -1
  21. package/dist-lib/cloud-contract.cjs +1 -1
  22. package/dist-lib/cloud-contract.mjs +1 -1
  23. package/dist-lib/cloud.cjs +1 -1
  24. package/dist-lib/cloud.mjs +1 -1
  25. package/dist-lib/config.cjs +1 -1
  26. package/dist-lib/detox/index.cjs +3 -1
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/home-paths.cjs +1 -1
  29. package/dist-lib/host/bridge-host.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  32. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  33. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  34. package/dist-lib/host/websocket-proxy.cjs +1 -1
  35. package/dist-lib/index.cjs +1 -1
  36. package/dist-lib/jump-to-source-babel.cjs +1 -1
  37. package/dist-lib/jump-to-source-native.cjs +1 -1
  38. package/dist-lib/menu.cjs +1 -1
  39. package/dist-lib/menu.mjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  41. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  42. package/dist-lib/metro-production-bundle.cjs +1 -1
  43. package/dist-lib/metro-production-bundle.mjs +1 -1
  44. package/dist-lib/metro.cjs +1 -1
  45. package/dist-lib/profiles.cjs +1 -1
  46. package/dist-lib/public-brand.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.cjs +1 -1
  48. package/dist-lib/react-native-host-modules.mjs +1 -1
  49. package/dist-lib/render-mode.cjs +1 -1
  50. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  51. package/dist-lib/sdk.cjs +1 -1
  52. package/dist-lib/sdk.mjs +1 -1
  53. package/dist-lib/skills.cjs +61 -156
  54. package/dist-lib/vite.cjs +1 -1
  55. package/package.json +3 -3
  56. package/src/vite-plugin.ts +28 -16
@@ -2,10 +2,7 @@ import * as fs from 'fs'
2
2
  import * as path from 'path'
3
3
  import { devices, type DeviceModel } from 'sootsim-engine/settings'
4
4
  import yaml from 'yaml'
5
- import {
6
- REQUIRED_IDENTICAL_PROOF_FRAMES,
7
- framesIdentical,
8
- } from '../detox/proof-frame.cjs'
5
+ import { REQUIRED_IDENTICAL_FLOW_FRAMES, framesIdentical } from '../detox/proof-frame.cjs'
9
6
  import { flowTimeoutScale } from '../src/flow-timeout-scale'
10
7
  import { composeFramedScreenshot } from '../src/screenshots/frame-compose'
11
8
  import { inspectWaitReady, waitReadyReason } from './commands/inspect/core'
@@ -1434,20 +1431,18 @@ export class SootSimBridgeFlowRunner {
1434
1431
  dataUrl.replace(/^data:image\/png;base64,/, ''),
1435
1432
  'base64',
1436
1433
  )
1437
- if (framesIdentical(previousBuffer, current)) {
1438
- identicalFrames++
1439
- if (identicalFrames >= REQUIRED_IDENTICAL_PROOF_FRAMES) {
1440
- rawBuffer = current
1441
- break
1442
- }
1443
- } else {
1444
- identicalFrames = 1
1445
- }
1434
+ identicalFrames = framesIdentical(previousBuffer, current) ? identicalFrames + 1 : 1
1446
1435
  previousBuffer = current
1436
+ // checked after the capture, so the constant is a capture count: at 1
1437
+ // the first settled frame is the screenshot and nothing re-captures.
1438
+ if (identicalFrames >= REQUIRED_IDENTICAL_FLOW_FRAMES) {
1439
+ rawBuffer = current
1440
+ break
1441
+ }
1447
1442
  }
1448
1443
  if (!rawBuffer) {
1449
1444
  throw new Error(
1450
- `screenshot did not reach ${REQUIRED_IDENTICAL_PROOF_FRAMES} identical idle frames`,
1445
+ `screenshot did not reach ${REQUIRED_IDENTICAL_FLOW_FRAMES} identical idle frames`,
1451
1446
  )
1452
1447
  }
1453
1448
  if (spec.withFrame) {
@@ -2026,6 +2021,9 @@ export class SootSimBridgeFlowRunner {
2026
2021
  await this.startProfile()
2027
2022
  }
2028
2023
  if (this.recordingEnabled) {
2024
+ // a flow that starts with launchApp prepares recording before the step.
2025
+ // begin its pixels only after launch has mounted and settled, leaving the
2026
+ // loading prelude outside the playable video while its trace stays visible.
2029
2027
  await this.waitForVisualSettle()
2030
2028
  await this.ensureRecordingStarted()
2031
2029
  }
@@ -2088,9 +2086,6 @@ export class SootSimBridgeFlowRunner {
2088
2086
  if (state?.state !== 'home' || state.activeApp != null) return false
2089
2087
 
2090
2088
  const appId = this.resolveShellLaunchAppId(opts, state)
2091
- if (this.recordingEnabled) {
2092
- await this.ensureRecordingStarted()
2093
- }
2094
2089
  await callShellCommandWhenReady(this.bridge, 'launchApp', 1000, appId)
2095
2090
  await this.waitForShellAppLaunched(appId, 1000)
2096
2091
  return true
@@ -572,6 +572,10 @@ flow extension:
572
572
  commandTimeoutMs: resolvedBridgeArgs.commandTimeoutMs,
573
573
  simId: pinnedSimId,
574
574
  simIdSource: pinnedSimIdSource,
575
+ // the shell prints `lockedBy` over the device while the flow drives it.
576
+ // without a label that falls back to the cli identity key, which is an
577
+ // internal `ENV_VAR:value` string rather than something a viewer reads.
578
+ cliLabel: 'maestro test',
575
579
  })
576
580
  let driver: SootSimBridgeFlowRunner
577
581
  const applySimSettings = async () => {
@@ -7,8 +7,17 @@ const PROOF_CONTENT_DEFINITION = Object.freeze({
7
7
  minimumContentPercent: 0.005,
8
8
  })
9
9
 
10
+ // conformance compares these captures against native ios baselines, so a frame
11
+ // caught mid-animation reads as a real pixel diff. three consecutive identical
12
+ // frames is the evidence that the screen actually stopped moving.
10
13
  const REQUIRED_IDENTICAL_PROOF_FRAMES = 3
11
14
 
15
+ // a flow's `takeScreenshot` is a developer artifact, not pixel evidence. one
16
+ // settled capture is what it wants: re-capturing flashes the screen on every
17
+ // attempt, and a screen with a blinking caret never produces two identical
18
+ // frames at all, so the step fails on a page that is perfectly fine.
19
+ const REQUIRED_IDENTICAL_FLOW_FRAMES = 1
20
+
12
21
  function framesIdentical(a, b) {
13
22
  if (!a || !b || a.length !== b.length) return false
14
23
  return a.equals(b)
@@ -98,6 +107,7 @@ function settleDecision(previousPixels, currentFrame) {
98
107
  module.exports = {
99
108
  PROOF_CONTENT_DEFINITION,
100
109
  REQUIRED_IDENTICAL_PROOF_FRAMES,
110
+ REQUIRED_IDENTICAL_FLOW_FRAMES,
101
111
  framesIdentical,
102
112
  measureProofFrameContent,
103
113
  settleDecision,
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_DEFAULT_MS = 500;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -146,6 +146,7 @@ var require_proof_frame = __commonJS({
146
146
  minimumContentPercent: 5e-3
147
147
  });
148
148
  var REQUIRED_IDENTICAL_PROOF_FRAMES2 = 3;
149
+ var REQUIRED_IDENTICAL_FLOW_FRAMES = 1;
149
150
  function framesIdentical2(a, b) {
150
151
  if (!a || !b || a.length !== b.length) return false;
151
152
  return a.equals(b);
@@ -215,6 +216,7 @@ var require_proof_frame = __commonJS({
215
216
  module2.exports = {
216
217
  PROOF_CONTENT_DEFINITION,
217
218
  REQUIRED_IDENTICAL_PROOF_FRAMES: REQUIRED_IDENTICAL_PROOF_FRAMES2,
219
+ REQUIRED_IDENTICAL_FLOW_FRAMES,
218
220
  framesIdentical: framesIdentical2,
219
221
  measureProofFrameContent,
220
222
  settleDecision
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "rnx";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-fingerprint-registry.ts
4
4
  var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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 __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
@@ -2196,36 +2196,36 @@ var init_capability_inventory_coverage = __esm({
2196
2196
  raw: {
2197
2197
  covered: 0,
2198
2198
  ratio: 0,
2199
- total: 96
2199
+ total: 139
2200
2200
  },
2201
2201
  weighted: {
2202
2202
  covered: 0,
2203
2203
  ratio: 0,
2204
- total: 8.96774193548
2204
+ total: 8.96356275304
2205
2205
  }
2206
2206
  },
2207
2207
  semantic: {
2208
2208
  raw: {
2209
2209
  covered: 0,
2210
2210
  ratio: 0,
2211
- total: 49
2211
+ total: 70
2212
2212
  },
2213
2213
  weighted: {
2214
2214
  covered: 0,
2215
2215
  ratio: 0,
2216
- total: 4.6935483871
2216
+ total: 4.69230769231
2217
2217
  }
2218
2218
  },
2219
2219
  visual: {
2220
2220
  raw: {
2221
2221
  covered: 0,
2222
2222
  ratio: 0,
2223
- total: 47
2223
+ total: 69
2224
2224
  },
2225
2225
  weighted: {
2226
2226
  covered: 0,
2227
2227
  ratio: 0,
2228
- total: 4.27419354839
2228
+ total: 4.27125506073
2229
2229
  }
2230
2230
  },
2231
2231
  byPlatform: {
@@ -2234,36 +2234,36 @@ var init_capability_inventory_coverage = __esm({
2234
2234
  raw: {
2235
2235
  covered: 0,
2236
2236
  ratio: 0,
2237
- total: 96
2237
+ total: 139
2238
2238
  },
2239
2239
  weighted: {
2240
2240
  covered: 0,
2241
2241
  ratio: 0,
2242
- total: 8.96774193548
2242
+ total: 8.96356275304
2243
2243
  }
2244
2244
  },
2245
2245
  semantic: {
2246
2246
  raw: {
2247
2247
  covered: 0,
2248
2248
  ratio: 0,
2249
- total: 49
2249
+ total: 70
2250
2250
  },
2251
2251
  weighted: {
2252
2252
  covered: 0,
2253
2253
  ratio: 0,
2254
- total: 4.6935483871
2254
+ total: 4.69230769231
2255
2255
  }
2256
2256
  },
2257
2257
  visual: {
2258
2258
  raw: {
2259
2259
  covered: 0,
2260
2260
  ratio: 0,
2261
- total: 47
2261
+ total: 69
2262
2262
  },
2263
2263
  weighted: {
2264
2264
  covered: 0,
2265
2265
  ratio: 0,
2266
- total: 4.27419354839
2266
+ total: 4.27125506073
2267
2267
  }
2268
2268
  }
2269
2269
  },
@@ -2272,36 +2272,36 @@ var init_capability_inventory_coverage = __esm({
2272
2272
  raw: {
2273
2273
  covered: 0,
2274
2274
  ratio: 0,
2275
- total: 96
2275
+ total: 139
2276
2276
  },
2277
2277
  weighted: {
2278
2278
  covered: 0,
2279
2279
  ratio: 0,
2280
- total: 8.96774193548
2280
+ total: 8.96356275304
2281
2281
  }
2282
2282
  },
2283
2283
  semantic: {
2284
2284
  raw: {
2285
2285
  covered: 0,
2286
2286
  ratio: 0,
2287
- total: 49
2287
+ total: 70
2288
2288
  },
2289
2289
  weighted: {
2290
2290
  covered: 0,
2291
2291
  ratio: 0,
2292
- total: 4.6935483871
2292
+ total: 4.69230769231
2293
2293
  }
2294
2294
  },
2295
2295
  visual: {
2296
2296
  raw: {
2297
2297
  covered: 0,
2298
2298
  ratio: 0,
2299
- total: 47
2299
+ total: 69
2300
2300
  },
2301
2301
  weighted: {
2302
2302
  covered: 0,
2303
2303
  ratio: 0,
2304
- total: 4.27419354839
2304
+ total: 4.27125506073
2305
2305
  }
2306
2306
  }
2307
2307
  }
@@ -2776,7 +2776,7 @@ var init_capability_inventory_coverage = __esm({
2776
2776
  raw: {
2777
2777
  covered: 0,
2778
2778
  ratio: 0,
2779
- total: 61
2779
+ total: 63
2780
2780
  },
2781
2781
  weighted: {
2782
2782
  covered: 0,
@@ -2788,7 +2788,7 @@ var init_capability_inventory_coverage = __esm({
2788
2788
  raw: {
2789
2789
  covered: 0,
2790
2790
  ratio: 0,
2791
- total: 32
2791
+ total: 33
2792
2792
  },
2793
2793
  weighted: {
2794
2794
  covered: 0,
@@ -2800,7 +2800,7 @@ var init_capability_inventory_coverage = __esm({
2800
2800
  raw: {
2801
2801
  covered: 0,
2802
2802
  ratio: 0,
2803
- total: 29
2803
+ total: 30
2804
2804
  },
2805
2805
  weighted: {
2806
2806
  covered: 0,
@@ -2814,7 +2814,7 @@ var init_capability_inventory_coverage = __esm({
2814
2814
  raw: {
2815
2815
  covered: 0,
2816
2816
  ratio: 0,
2817
- total: 61
2817
+ total: 63
2818
2818
  },
2819
2819
  weighted: {
2820
2820
  covered: 0,
@@ -2826,7 +2826,7 @@ var init_capability_inventory_coverage = __esm({
2826
2826
  raw: {
2827
2827
  covered: 0,
2828
2828
  ratio: 0,
2829
- total: 32
2829
+ total: 33
2830
2830
  },
2831
2831
  weighted: {
2832
2832
  covered: 0,
@@ -2838,7 +2838,7 @@ var init_capability_inventory_coverage = __esm({
2838
2838
  raw: {
2839
2839
  covered: 0,
2840
2840
  ratio: 0,
2841
- total: 29
2841
+ total: 30
2842
2842
  },
2843
2843
  weighted: {
2844
2844
  covered: 0,
@@ -2852,7 +2852,7 @@ var init_capability_inventory_coverage = __esm({
2852
2852
  raw: {
2853
2853
  covered: 0,
2854
2854
  ratio: 0,
2855
- total: 61
2855
+ total: 63
2856
2856
  },
2857
2857
  weighted: {
2858
2858
  covered: 0,
@@ -2864,7 +2864,7 @@ var init_capability_inventory_coverage = __esm({
2864
2864
  raw: {
2865
2865
  covered: 0,
2866
2866
  ratio: 0,
2867
- total: 32
2867
+ total: 33
2868
2868
  },
2869
2869
  weighted: {
2870
2870
  covered: 0,
@@ -2876,7 +2876,7 @@ var init_capability_inventory_coverage = __esm({
2876
2876
  raw: {
2877
2877
  covered: 0,
2878
2878
  ratio: 0,
2879
- total: 29
2879
+ total: 30
2880
2880
  },
2881
2881
  weighted: {
2882
2882
  covered: 0,
@@ -3796,56 +3796,10 @@ var init_capability_outcomes2 = __esm({
3796
3796
  }
3797
3797
  },
3798
3798
  "react-native-gesture-handler": {
3799
- exactTestedVersion: "2.32.0",
3800
- supportedVersionRange: ">=2.30.0",
3801
- lastMeasured: {
3802
- byWeighting: {
3803
- strict: {
3804
- android: {
3805
- passedWeight: 0,
3806
- failedWeight: 0,
3807
- unassessedWeight: 49,
3808
- totalWeight: 49,
3809
- assessedWeight: 0,
3810
- compatibility: null,
3811
- assessed: 0
3812
- },
3813
- ios: {
3814
- passedWeight: 9,
3815
- failedWeight: 0,
3816
- unassessedWeight: 40,
3817
- totalWeight: 49,
3818
- assessedWeight: 9,
3819
- compatibility: 1,
3820
- assessed: 0.1836734693877551
3821
- }
3822
- },
3823
- usage: {
3824
- android: {
3825
- passedWeight: 0,
3826
- failedWeight: 0,
3827
- unassessedWeight: 776,
3828
- totalWeight: 776,
3829
- assessedWeight: 0,
3830
- compatibility: null,
3831
- assessed: 0
3832
- },
3833
- ios: {
3834
- passedWeight: 7,
3835
- failedWeight: 0,
3836
- unassessedWeight: 769,
3837
- totalWeight: 776,
3838
- assessedWeight: 7,
3839
- compatibility: 1,
3840
- assessed: 0.00902061855670103
3841
- }
3842
- }
3843
- },
3844
- capturedAt: "2026-09-08T05:52:45.303Z",
3845
- receipts: ["retained-essentials-react-native-gesture-handler-r22458-20260908"],
3846
- sourceCommit: "ea3eb82eeea6f6925ae708b7028cb577ad37f36a"
3847
- },
3848
- unmatchedReferenceCount: 528,
3799
+ exactTestedVersion: "3.3.0",
3800
+ supportedVersionRange: ">=3.3.0",
3801
+ lastMeasured: null,
3802
+ unmatchedReferenceCount: 529,
3849
3803
  byPlatform: {
3850
3804
  android: {
3851
3805
  passedWeight: 0,
@@ -3871,8 +3825,8 @@ var init_capability_outcomes2 = __esm({
3871
3825
  android: {
3872
3826
  passedWeight: 0,
3873
3827
  failedWeight: 0,
3874
- unassessedWeight: 49,
3875
- totalWeight: 49,
3828
+ unassessedWeight: 70,
3829
+ totalWeight: 70,
3876
3830
  assessedWeight: 0,
3877
3831
  compatibility: null,
3878
3832
  assessed: 0
@@ -3880,8 +3834,8 @@ var init_capability_outcomes2 = __esm({
3880
3834
  ios: {
3881
3835
  passedWeight: 0,
3882
3836
  failedWeight: 0,
3883
- unassessedWeight: 49,
3884
- totalWeight: 49,
3837
+ unassessedWeight: 70,
3838
+ totalWeight: 70,
3885
3839
  assessedWeight: 0,
3886
3840
  compatibility: null,
3887
3841
  assessed: 0
@@ -4323,58 +4277,9 @@ var init_capability_outcomes2 = __esm({
4323
4277
  }
4324
4278
  },
4325
4279
  "react-native-screens": {
4326
- exactTestedVersion: "4.26.2",
4280
+ exactTestedVersion: "4.27.0",
4327
4281
  supportedVersionRange: ">=4.0.0",
4328
- lastMeasured: {
4329
- byWeighting: {
4330
- strict: {
4331
- android: {
4332
- passedWeight: 0,
4333
- failedWeight: 0,
4334
- unassessedWeight: 32,
4335
- totalWeight: 32,
4336
- assessedWeight: 0,
4337
- compatibility: null,
4338
- assessed: 0
4339
- },
4340
- ios: {
4341
- passedWeight: 3,
4342
- failedWeight: 0,
4343
- unassessedWeight: 29,
4344
- totalWeight: 32,
4345
- assessedWeight: 3,
4346
- compatibility: 1,
4347
- assessed: 0.09375
4348
- }
4349
- },
4350
- usage: {
4351
- android: {
4352
- passedWeight: 0,
4353
- failedWeight: 0,
4354
- unassessedWeight: 6,
4355
- totalWeight: 6,
4356
- assessedWeight: 0,
4357
- compatibility: null,
4358
- assessed: 0
4359
- },
4360
- ios: {
4361
- passedWeight: 4,
4362
- failedWeight: 0,
4363
- unassessedWeight: 2,
4364
- totalWeight: 6,
4365
- assessedWeight: 4,
4366
- compatibility: 1,
4367
- assessed: 0.6666666666666666
4368
- }
4369
- }
4370
- },
4371
- capturedAt: "2026-09-08T06:14:31.559Z",
4372
- receipts: [
4373
- "retained-essentials-react-native-screens-r22458-20260908",
4374
- "screens-sheets-paired-clean-p40993"
4375
- ],
4376
- sourceCommit: "ea3eb82eeea6f6925ae708b7028cb577ad37f36a"
4377
- },
4282
+ lastMeasured: null,
4378
4283
  unmatchedReferenceCount: 0,
4379
4284
  byPlatform: {
4380
4285
  android: {
@@ -4401,8 +4306,8 @@ var init_capability_outcomes2 = __esm({
4401
4306
  android: {
4402
4307
  passedWeight: 0,
4403
4308
  failedWeight: 0,
4404
- unassessedWeight: 32,
4405
- totalWeight: 32,
4309
+ unassessedWeight: 33,
4310
+ totalWeight: 33,
4406
4311
  assessedWeight: 0,
4407
4312
  compatibility: null,
4408
4313
  assessed: 0
@@ -4410,8 +4315,8 @@ var init_capability_outcomes2 = __esm({
4410
4315
  ios: {
4411
4316
  passedWeight: 0,
4412
4317
  failedWeight: 0,
4413
- unassessedWeight: 32,
4414
- totalWeight: 32,
4318
+ unassessedWeight: 33,
4319
+ totalWeight: 33,
4415
4320
  assessedWeight: 0,
4416
4321
  compatibility: null,
4417
4322
  assessed: 0
@@ -4749,7 +4654,7 @@ var init_supported_native_packages = __esm({
4749
4654
  "@bugsnag/react-native-performance",
4750
4655
  // coverage
4751
4656
  "@callstack/liquid-glass",
4752
- // seam
4657
+ // preset+seam
4753
4658
  "@candlefinance/faster-image",
4754
4659
  // seam
4755
4660
  "@clerk/expo-passkeys",
@@ -5201,7 +5106,7 @@ var init_supported_native_packages = __esm({
5201
5106
  "react-native-bootsplash",
5202
5107
  // preset+seam+coverage
5203
5108
  "react-native-bottom-tabs",
5204
- // preset+visual-proof
5109
+ // visual-proof
5205
5110
  "react-native-branch",
5206
5111
  // coverage
5207
5112
  "react-native-calendar-events",
@@ -5899,6 +5804,11 @@ var init_registry = __esm({
5899
5804
  { range: ">=2.0.0 <2.30.0", coverage: 0.7, note: "tap, pan, long press" },
5900
5805
  {
5901
5806
  range: ">=2.30.0 <3.0.0",
5807
+ coverage: 0.75,
5808
+ note: "legacy gesture builders, handlers, swipeable and drawer entrypoints"
5809
+ },
5810
+ {
5811
+ range: ">=3.3.0",
5902
5812
  ...scoredCoverage("react-native-gesture-handler"),
5903
5813
  features: [
5904
5814
  {
@@ -9529,8 +9439,8 @@ var init_registry = __esm({
9529
9439
  {
9530
9440
  range: ">=1.21.0",
9531
9441
  coverage: 0.72,
9532
- note: "native-seam only for toolbar/menu host views. One's public Stack.Toolbar components use the real @vxrn/native implementation, whose React code runs from the bundle and converts the composition API into native host props and native-stack header items.",
9533
- working: "StackToolbar header and bottom placements, Button, Label, Icon with SF Symbols/image sources, Badge, fixed/fluid Spacer, View children, nested Menu/MenuAction trees, disabled/selected/destructive actions, visible action callbacks, and native-stack header bar item integration",
9442
+ note: "native-seam only for toolbar/menu host views. The real @vxrn/native React code runs from the bundle and converts its public props into native host props.",
9443
+ working: "ToolbarHost, ToolbarItem with SF Symbols/image sources, badges, fixed/fluid spacers, view children, nested MenuAction trees, disabled/selected/destructive actions, and visible action callbacks",
9534
9444
  missing: "Color and zoom-transition native hosts, SplitView gamma host, bottom SearchBarSlot integration with a configured native search controller, exact UIKit shared-background grouping"
9535
9445
  }
9536
9446
  ]
@@ -35512,7 +35422,8 @@ var require_proof_frame = __commonJS({
35512
35422
  contentBandInsetFraction: 0.08,
35513
35423
  minimumContentPercent: 5e-3
35514
35424
  });
35515
- var REQUIRED_IDENTICAL_PROOF_FRAMES2 = 3;
35425
+ var REQUIRED_IDENTICAL_PROOF_FRAMES = 3;
35426
+ var REQUIRED_IDENTICAL_FLOW_FRAMES2 = 1;
35516
35427
  function framesIdentical2(a, b) {
35517
35428
  if (!a || !b || a.length !== b.length) return false;
35518
35429
  return a.equals(b);
@@ -35581,7 +35492,8 @@ var require_proof_frame = __commonJS({
35581
35492
  }
35582
35493
  module2.exports = {
35583
35494
  PROOF_CONTENT_DEFINITION,
35584
- REQUIRED_IDENTICAL_PROOF_FRAMES: REQUIRED_IDENTICAL_PROOF_FRAMES2,
35495
+ REQUIRED_IDENTICAL_PROOF_FRAMES,
35496
+ REQUIRED_IDENTICAL_FLOW_FRAMES: REQUIRED_IDENTICAL_FLOW_FRAMES2,
35585
35497
  framesIdentical: framesIdentical2,
35586
35498
  measureProofFrameContent,
35587
35499
  settleDecision
@@ -37342,20 +37254,16 @@ var init_bridge_flow_runner = __esm({
37342
37254
  dataUrl.replace(/^data:image\/png;base64,/, ""),
37343
37255
  "base64"
37344
37256
  );
37345
- if ((0, import_proof_frame.framesIdentical)(previousBuffer, current)) {
37346
- identicalFrames++;
37347
- if (identicalFrames >= import_proof_frame.REQUIRED_IDENTICAL_PROOF_FRAMES) {
37348
- rawBuffer = current;
37349
- break;
37350
- }
37351
- } else {
37352
- identicalFrames = 1;
37353
- }
37257
+ identicalFrames = (0, import_proof_frame.framesIdentical)(previousBuffer, current) ? identicalFrames + 1 : 1;
37354
37258
  previousBuffer = current;
37259
+ if (identicalFrames >= import_proof_frame.REQUIRED_IDENTICAL_FLOW_FRAMES) {
37260
+ rawBuffer = current;
37261
+ break;
37262
+ }
37355
37263
  }
37356
37264
  if (!rawBuffer) {
37357
37265
  throw new Error(
37358
- `screenshot did not reach ${import_proof_frame.REQUIRED_IDENTICAL_PROOF_FRAMES} identical idle frames`
37266
+ `screenshot did not reach ${import_proof_frame.REQUIRED_IDENTICAL_FLOW_FRAMES} identical idle frames`
37359
37267
  );
37360
37268
  }
37361
37269
  if (spec.withFrame) {
@@ -37867,9 +37775,6 @@ var init_bridge_flow_runner = __esm({
37867
37775
  }
37868
37776
  if (state?.state !== "home" || state.activeApp != null) return false;
37869
37777
  const appId = this.resolveShellLaunchAppId(opts, state);
37870
- if (this.recordingEnabled) {
37871
- await this.ensureRecordingStarted();
37872
- }
37873
37778
  await callShellCommandWhenReady(this.bridge, "launchApp", 1e3, appId);
37874
37779
  await this.waitForShellAppLaunched(appId, 1e3);
37875
37780
  return true;
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.488 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.490 | (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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.488",
3
+ "version": "0.1.490",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for rnx.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -261,14 +261,14 @@
261
261
  },
262
262
  "devDependencies": {
263
263
  "@contrast/runtime-delivery": "workspace:*",
264
- "@sootsim/compat": "workspace:*",
265
264
  "@rnx/box": "workspace:*",
266
265
  "@rnx/globals": "workspace:*",
267
266
  "@rnx/skills": "workspace:*",
267
+ "@sootsim/compat": "workspace:*",
268
268
  "@types/ws": "^8.5.13",
269
269
  "rnx-cloud-box": "workspace:*",
270
270
  "sootsim-engine": "workspace:*",
271
- "typescript": "^5.7.0",
271
+ "typescript": "^6.0.3",
272
272
  "vite": "^8.2.2",
273
273
  "yaml": "^2.8.3"
274
274
  }
@@ -229,15 +229,14 @@ const expoUiJetpackComposeRealAliases = [
229
229
  }
230
230
  })
231
231
 
232
- // `react-native-gesture-handler/ReanimatedSwipeable` and `.../DrawerLayout` are
233
- // upstream pure JS and should load from the installed package. The root RNGH
234
- // package still aliases to SootSim's native seam, so add exact subpath aliases
235
- // before the root stub can rewrite them to
236
- // `<stubs>/react-native-gesture-handler.ts/<subpath>`.
237
- function rnghSubpathRealPath(subpath: string): string | null {
232
+ // these components are upstream pure JS and should load unchanged over the
233
+ // native seam. gesture handler 3 still supplies ReanimatedSwipeable but removed
234
+ // DrawerLayout, so the latter resolves from the explicit v2 compatibility
235
+ // alias. exact subpath aliases must precede the root facade alias.
236
+ function rnghSubpathRealPath(packageName: string, subpath: string): string | null {
238
237
  try {
239
238
  const packageJsonPath = sootsimPluginRequire.resolve(
240
- `react-native-gesture-handler/${subpath}/package.json`,
239
+ `${packageName}/${subpath}/package.json`,
241
240
  )
242
241
  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
243
242
  const moduleEntry = packageJson?.module
@@ -253,8 +252,14 @@ function rnghSubpathRealPath(subpath: string): string | null {
253
252
  }
254
253
  }
255
254
 
256
- const rnghReanimatedSwipeableRealPath = rnghSubpathRealPath('ReanimatedSwipeable')
257
- const rnghDrawerLayoutRealPath = rnghSubpathRealPath('DrawerLayout')
255
+ const rnghReanimatedSwipeableRealPath = rnghSubpathRealPath(
256
+ 'react-native-gesture-handler',
257
+ 'ReanimatedSwipeable',
258
+ )
259
+ const rnghDrawerLayoutRealPath = rnghSubpathRealPath(
260
+ 'react-native-gesture-handler-v2',
261
+ 'DrawerLayout',
262
+ )
258
263
 
259
264
  const rnghGestureHandlerRootViewContextRealPath = (() => {
260
265
  try {
@@ -273,9 +278,12 @@ const rnghGestureHandlerRootViewContextShimPath = path.resolve(
273
278
  'rngh-gesture-handler-root-view-context.ts',
274
279
  )
275
280
  const rnghRootStubPath = path.resolve(compatStubsDir, 'react-native-gesture-handler.ts')
276
- const rnghLibModuleRoot = rnghGestureHandlerRootViewContextRealPath
277
- ? path.dirname(rnghGestureHandlerRootViewContextRealPath)
278
- : null
281
+ const rnghLibModuleRoots = [
282
+ rnghGestureHandlerRootViewContextRealPath
283
+ ? path.dirname(rnghGestureHandlerRootViewContextRealPath)
284
+ : null,
285
+ rnghDrawerLayoutRealPath ? path.dirname(path.dirname(rnghDrawerLayoutRealPath)) : null,
286
+ ].filter((root): root is string => root !== null)
279
287
 
280
288
  const compatWrapperRealPackageAliases: Array<{
281
289
  find: string
@@ -415,9 +423,11 @@ function rnghUpstreamInternalResolvePlugin(): Plugin {
415
423
  id: /(?:^\.\.\/\.\.(?:\.(?:js|jsx|mjs|ts|tsx))?$|GestureDetector(?:\.(?:js|jsx|mjs|ts|tsx))?$|GestureHandlerRootViewContext(?:\.(?:js|jsx|mjs|ts|tsx))?$|(?:PanGestureHandler|TapGestureHandler|State)(?:\.(?:js|jsx|mjs|ts|tsx))?$)/,
416
424
  },
417
425
  handler(source, importer) {
418
- if (!importer || !rnghLibModuleRoot) return null
426
+ if (!importer || rnghLibModuleRoots.length === 0) return null
419
427
  const importerPath = stripViteQuery(importer)
420
- if (!isPathInside(importerPath, rnghLibModuleRoot)) return null
428
+ if (!rnghLibModuleRoots.some((root) => isPathInside(importerPath, root))) {
429
+ return null
430
+ }
421
431
  const sourcePath = source.replace(/\.(js|jsx|mjs|ts|tsx)$/, '')
422
432
  if (
423
433
  sourcePath === '../..' ||
@@ -503,7 +513,9 @@ const ENGINE_WORKER_BOOT_CLOSURES: WorkerBootClosure[] = [
503
513
  // name table, and it sends the aliases and metrics it read on the wire
504
514
  // (engine/app-font-registry.ts registerForwardedAppFonts). keep it that way
505
515
  // when adding font work here, or both caps take the parser again.
506
- { entry: 'src/render-worker/shell-worker-entry.ts', maxBytes: 3_400_000 },
516
+ // gesture handler 3's upstream hook surface moved the measured closure to
517
+ // 3,446,531 bytes. keep only the four-kilobyte rounding margin here.
518
+ { entry: 'src/render-worker/shell-worker-entry.ts', maxBytes: 3_450_000 },
507
519
  { entry: 'src/render-worker/compositor-worker-entry.ts', maxBytes: 1_080_000 },
508
520
  { entry: 'src/render-worker/compositor-worker-ganesh-entry.ts', maxBytes: 1_820_000 },
509
521
  ]
@@ -1206,7 +1218,7 @@ function sootsimConfigPlugin(
1206
1218
  ...(rnghDrawerLayoutRealPath
1207
1219
  ? [
1208
1220
  {
1209
- find: /^react-native-gesture-handler\/DrawerLayout$/,
1221
+ find: /^(?:react-native-gesture-handler|react-native-gesture-handler-v2)\/DrawerLayout$/,
1210
1222
  replacement: rnghDrawerLayoutRealPath,
1211
1223
  },
1212
1224
  ]