rnxsim 0.1.479 → 0.1.480

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 (55) hide show
  1. package/cli/cloud-dispatch.ts +3 -10
  2. package/cli/commands/screenshot.ts +9 -32
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/agent-identity.cjs +1 -1
  6. package/dist-lib/agent-sessions.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cli-constants.cjs +1 -1
  20. package/dist-lib/cloud-contract.cjs +1 -1
  21. package/dist-lib/cloud-contract.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/detox/index.cjs +1 -1
  26. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  27. package/dist-lib/home-paths.cjs +1 -1
  28. package/dist-lib/host/bridge-host.cjs +1 -1
  29. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  32. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  33. package/dist-lib/host/websocket-proxy.cjs +1 -1
  34. package/dist-lib/index.cjs +1 -1
  35. package/dist-lib/jump-to-source-babel.cjs +1 -1
  36. package/dist-lib/jump-to-source-native.cjs +1 -1
  37. package/dist-lib/menu.cjs +1 -1
  38. package/dist-lib/menu.mjs +1 -1
  39. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  41. package/dist-lib/metro-production-bundle.cjs +1 -1
  42. package/dist-lib/metro-production-bundle.mjs +1 -1
  43. package/dist-lib/metro.cjs +1 -1
  44. package/dist-lib/profiles.cjs +1 -1
  45. package/dist-lib/public-brand.cjs +1 -1
  46. package/dist-lib/react-native-host-modules.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.mjs +1 -1
  48. package/dist-lib/render-mode.cjs +1 -1
  49. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  50. package/dist-lib/sdk.cjs +1 -1
  51. package/dist-lib/sdk.mjs +1 -1
  52. package/dist-lib/skills.cjs +57 -50
  53. package/dist-lib/vite.cjs +1 -1
  54. package/package.json +1 -1
  55. package/skills/rnx-visual/SKILL.md +7 -9
@@ -102,16 +102,9 @@ function supportsCloudRead(
102
102
  }
103
103
  if (command === 'screenshot') {
104
104
  return !args.some((arg) =>
105
- [
106
- '--area',
107
- '--gallery',
108
- '--id',
109
- '--no-shell',
110
- '--shell-only',
111
- '--text',
112
- '--themes',
113
- '--with-frame',
114
- ].includes(arg),
105
+ ['--area', '--id', '--no-shell', '--shell-only', '--text', '--with-frame'].includes(
106
+ arg,
107
+ ),
115
108
  )
116
109
  }
117
110
  if (command === 'do') return supportsCloudDo(positional)
@@ -56,8 +56,6 @@ options:
56
56
  --area x,y,w,h crop to a logical rnx rect
57
57
  --id <testID> crop to a node's bounding box
58
58
  --text <text> crop to a node found by text content
59
- --gallery crawl and capture multiple screens as HTML gallery
60
- --themes capture light and dark variants
61
59
 
62
60
  examples:
63
61
  rnx screenshot
@@ -82,22 +80,10 @@ examples:
82
80
  rnxExit(1)
83
81
  }
84
82
 
85
- const gallery = args.includes('--gallery')
86
- const themes = args.includes('--themes')
87
83
  const allowLoading = args.includes('--allow-loading')
88
84
  const withFrame = resolveFrameMode(args)
89
85
  const layers = resolveLayers(args)
90
86
 
91
- if (gallery || themes) {
92
- if (withFrame) {
93
- console.error(' --with-frame is not supported with --gallery / --themes')
94
- rnxExit(1)
95
- }
96
- // these still go through the playwright-backed path — the bridge can't
97
- // crawl routes on its own yet.
98
- return runPlaywrightScreenshot(args, opts)
99
- }
100
-
101
87
  if (
102
88
  withFrame &&
103
89
  args.some((arg) => arg === '--area' || arg === '--id' || arg === '--text')
@@ -386,8 +372,6 @@ const SCREENSHOT_BOOLEAN_FLAGS = new Set([
386
372
  '--no-shell',
387
373
  '--shell-only',
388
374
  '--allow-loading',
389
- '--gallery',
390
- '--themes',
391
375
  ])
392
376
  const SCREENSHOT_VALUE_FLAGS = new Set([
393
377
  '--output',
@@ -477,11 +461,9 @@ function resolveOutputPath(args: string[]): string | undefined {
477
461
  return undefined
478
462
  }
479
463
 
480
- // legacy playwright path kept for --gallery / --themes and for no-bridge
481
- // captures from CI. unchanged except for being extracted into its own fn.
464
+ // capture a page in headless chromium when no bridge is running.
482
465
  async function runPlaywrightScreenshot(args: string[], opts: ScreenshotOptions) {
483
466
  const output = resolveOutputPath(args) || 'rnx-screenshot.png'
484
- const gallery = args.includes('--gallery')
485
467
  const url =
486
468
  args.find((_, i) => args[i - 1] === '--url') ||
487
469
  `http://localhost:${opts.port || 5173}`
@@ -492,20 +474,15 @@ async function runPlaywrightScreenshot(args: string[], opts: ScreenshotOptions)
492
474
  })
493
475
 
494
476
  try {
495
- if (gallery) {
496
- console.log(' capturing gallery...')
497
- console.log(' (gallery mode not yet implemented)')
498
- } else {
499
- const page = await browser.newPage({ viewport: { width: 500, height: 900 } })
500
- await page.goto(url, { waitUntil: 'networkidle' })
501
- await page.waitForTimeout(2000)
477
+ const page = await browser.newPage({ viewport: { width: 500, height: 900 } })
478
+ await page.goto(url, { waitUntil: 'networkidle' })
479
+ await page.waitForTimeout(2000)
502
480
 
503
- const outputPath = resolve(process.cwd(), output)
504
- mkdirSync(dirname(outputPath), { recursive: true })
505
- await page.screenshot({ path: outputPath })
506
- console.log(` saved: ${outputPath}`)
507
- await page.close()
508
- }
481
+ const outputPath = resolve(process.cwd(), output)
482
+ mkdirSync(dirname(outputPath), { recursive: true })
483
+ await page.screenshot({ path: outputPath })
484
+ console.log(` saved: ${outputPath}`)
485
+ await page.close()
509
486
  } catch (err: any) {
510
487
  console.error(` screenshot failed: ${err.message}`)
511
488
  process.exitCode = 1
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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;
@@ -4856,7 +4856,7 @@ var init_supported_native_packages = __esm({
4856
4856
  "@react-native-community/checkbox",
4857
4857
  // coverage
4858
4858
  "@react-native-community/datetimepicker",
4859
- // seam
4859
+ // seam+coverage
4860
4860
  "@react-native-community/geolocation",
4861
4861
  // seam+coverage
4862
4862
  "@react-native-community/image-editor",
@@ -5719,91 +5719,91 @@ var init_registry = __esm({
5719
5719
  usage: 3,
5720
5720
  importance: 3,
5721
5721
  estimate: 0.99,
5722
- rationale: "Broad layout support; allow for fine geometry and shared styling differences."
5722
+ rationale: "Flex, absolute and relative layout render through the implemented layout engine. Fine geometry and shared styling details can differ from native."
5723
5723
  },
5724
5724
  {
5725
5725
  id: "text",
5726
5726
  usage: 3,
5727
5727
  importance: 3,
5728
- estimate: 0.98,
5729
- rationale: "Text shaping and wrapping work; uncommon typography and layout details remain estimated."
5728
+ estimate: 1,
5729
+ rationale: "Text shaping, wrapping, truncation and typography render through the implemented text pipeline with no known missing behavior."
5730
5730
  },
5731
5731
  {
5732
5732
  id: "text-input",
5733
5733
  usage: 3,
5734
5734
  importance: 3,
5735
- estimate: 0.98,
5736
- rationale: "Ordinary editing and focus work; advanced selection, composition and autofill remain estimated."
5735
+ estimate: 0.99,
5736
+ rationale: "Editing, focus, composition and keyboard types work. Advanced selection ranges and autofill are not implemented."
5737
5737
  },
5738
5738
  {
5739
5739
  id: "scroll",
5740
5740
  usage: 3,
5741
5741
  importance: 3,
5742
- estimate: 0.98,
5743
- rationale: "Ordinary scrolling works; automatic insets and nested-scroll edges remain estimated."
5742
+ estimate: 0.99,
5743
+ rationale: "Scrolling, paging, snapping, sticky headers and maintained content work. Exact automatic content insets and nested-scroll edge behavior are not implemented."
5744
5744
  },
5745
5745
  {
5746
5746
  id: "lists",
5747
5747
  usage: 3,
5748
5748
  importance: 3,
5749
5749
  estimate: 0.99,
5750
- rationale: "Windowed lists and list variants work; uncommon visibility and mutation sequences remain estimated."
5750
+ rationale: "Windowed, inverted, horizontal and sectioned lists work. Native virtual-collection visibility modes are not implemented."
5751
5751
  },
5752
5752
  {
5753
5753
  id: "press",
5754
5754
  usage: 3,
5755
5755
  importance: 3,
5756
- estimate: 0.99,
5757
- rationale: "Press and responder routing work; uncommon nested interaction sequences remain estimated."
5756
+ estimate: 1,
5757
+ rationale: "Press handling, touchables and responder routing run through the implemented gesture path with no known missing behavior."
5758
5758
  },
5759
5759
  {
5760
5760
  id: "images",
5761
5761
  usage: 3,
5762
5762
  importance: 2,
5763
- estimate: 0.99,
5764
- rationale: "Image loading and resize modes work; uncommon source and paint details remain estimated."
5763
+ estimate: 1,
5764
+ rationale: "Image sources, resize modes, tinting and loading callbacks are implemented with no known missing behavior."
5765
5765
  },
5766
5766
  {
5767
5767
  id: "animation",
5768
5768
  usage: 2,
5769
5769
  importance: 3,
5770
- estimate: 0.97,
5771
- rationale: "Common animation graphs work; interruption and layout-animation edges remain estimated."
5770
+ estimate: 0.99,
5771
+ rationale: "Animated graphs, composition, drivers and core LayoutAnimation geometry work. Some layout-animation edges are not implemented."
5772
5772
  },
5773
5773
  {
5774
5774
  id: "controls",
5775
5775
  usage: 2,
5776
5776
  importance: 3,
5777
- estimate: 0.98,
5778
- rationale: "Modals, alerts and controls work; uncommon native presentation details remain estimated."
5777
+ estimate: 1,
5778
+ rationale: "Modals, alerts, action sheets, switches and the other core controls are implemented with no known missing behavior."
5779
5779
  },
5780
5780
  {
5781
5781
  id: "keyboard",
5782
5782
  usage: 2,
5783
5783
  importance: 3,
5784
- estimate: 0.97,
5785
- rationale: "Keyboard presentation and avoidance work; accessory and inset edge behavior remain estimated."
5784
+ estimate: 0.99,
5785
+ rationale: "Keyboard presentation, dismissal and avoidance work. Some accessory-view inset edges are not implemented."
5786
5786
  },
5787
5787
  {
5788
5788
  id: "environment",
5789
5789
  usage: 2,
5790
5790
  importance: 2,
5791
- estimate: 0.99,
5792
- rationale: "Platform, dimensions and appearance work; uncommon lifecycle transitions remain estimated."
5791
+ estimate: 1,
5792
+ rationale: "Platform, dimensions, appearance and app-state transitions are implemented with no known missing behavior."
5793
5793
  },
5794
5794
  {
5795
5795
  id: "accessibility",
5796
5796
  usage: 1,
5797
5797
  importance: 2,
5798
- estimate: 0.85,
5799
- rationale: "Focus and announcements have implementations; several accessibility preferences return fixed values."
5798
+ estimate: 0.95,
5799
+ rationale: "Focus, roles, labels and announcements are implemented. iOS accessibility preferences such as bold text, grayscale and invert colors cannot be read from a browser and are intentionally inert, returning the stable default the app can act on."
5800
5800
  },
5801
5801
  {
5802
5802
  id: "system",
5803
5803
  usage: 1,
5804
5804
  importance: 2,
5805
- estimate: 0.9,
5806
- rationale: "Small system APIs depend on browser facilities; physical device behavior is not universally available."
5805
+ estimate: 0.95,
5806
+ rationale: "Platform, appearance, linking, clipboard and vibration run on the browser equivalents. Physical-device-only behavior is intentionally inert; LogBox and Systrace are development tooling and carry no deduction."
5807
5807
  },
5808
5808
  {
5809
5809
  id: "native-integration",
@@ -5868,8 +5868,8 @@ var init_registry = __esm({
5868
5868
  id: "css-animations",
5869
5869
  usage: 1,
5870
5870
  importance: 2,
5871
- estimate: 0.8,
5872
- 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."
5871
+ estimate: 0.85,
5872
+ rationale: "Opacity, transform and processed-color CSS animations are implemented. Animating layout, border metrics, shadows and filters through the CSS surface is not."
5873
5873
  },
5874
5874
  {
5875
5875
  id: "device-and-native-integration",
@@ -5966,8 +5966,8 @@ var init_registry = __esm({
5966
5966
  id: "sheets-and-modal-geometry",
5967
5967
  usage: 2,
5968
5968
  importance: 2,
5969
- estimate: 0.95,
5970
- rationale: "Initial detents, sheet geometry, corner radius, grabber, undimmed range and dismissal work. Numeric-detent dragging, nearest settling, content interception and larger-detent scrolling, selected geometry and dimming, collapse callbacks, and guarded dismissal close most interaction gaps. The remaining 5% covers velocity and spring fidelity, pointer cancellation, fit-to-content and non-numeric modes, numeric 1.0 native geometry, and expandsWhenScrolledToEdge."
5969
+ estimate: 0.98,
5970
+ rationale: "Initial detents, sheet geometry, corner radius, grabber, undimmed range, dismissal, numeric-detent dragging, nearest settling, content interception, larger-detent scrolling, selected geometry and dimming, collapse callbacks and guarded dismissal are implemented. Fit-to-content and non-numeric detent modes and expandsWhenScrolledToEdge are not."
5971
5971
  },
5972
5972
  {
5973
5973
  id: "tabs-freeze-and-overlay",
@@ -6056,8 +6056,8 @@ var init_registry = __esm({
6056
6056
  id: "definitions-references-and-clipping",
6057
6057
  usage: 2,
6058
6058
  importance: 2,
6059
- estimate: 0.95,
6060
- 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."
6059
+ estimate: 0.97,
6060
+ rationale: "Defs, Use, Symbol, Mask, ClipPath, Pattern fills and Marker geometry render. ForeignObject content does not render, marker hosts are limited, and pattern non-scaling strokes use the tile matrix."
6061
6061
  },
6062
6062
  {
6063
6063
  id: "text-and-text-paths",
@@ -6074,11 +6074,18 @@ var init_registry = __esm({
6074
6074
  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."
6075
6075
  },
6076
6076
  {
6077
- id: "filters-and-imperative-geometry",
6078
- usage: 1,
6077
+ id: "imperative-geometry",
6078
+ usage: 2,
6079
6079
  importance: 2,
6080
- estimate: 0.45,
6081
- rationale: "getTotalLength, getPointAtLength, getBBox with its fill, stroke, markers and clipped options, getCTM, getScreenCTM, isPointInFill and isPointInStroke match 66 iOS-pinned calls within 1e-4 in a paired capture, covering curves, arcs, rounded-rect clamping, native stroke outlines and miter limits, clip bounds, invalid-path NaN points and detached refs. Native filters and toDataURL export remain unsupported, estimated as 55% of the grouped feature."
6080
+ estimate: 1,
6081
+ rationale: "getTotalLength, getPointAtLength, getBBox with its fill, stroke, markers and clipped options, getCTM, getScreenCTM, isPointInFill and isPointInStroke match 66 iOS-pinned calls within 1e-4 in a paired capture, covering curves, arcs, rounded-rect clamping, native stroke outlines and miter limits, clip bounds, invalid-path NaN points and detached refs."
6082
+ },
6083
+ {
6084
+ id: "filters-and-export",
6085
+ usage: 1,
6086
+ importance: 1,
6087
+ estimate: 0,
6088
+ rationale: "Native SVG filter components and toDataURL export are unsupported and refuse calls. Rated as its own feature because app usage of filters and raster export is far smaller than usage of the imperative geometry queries it used to be grouped with."
6082
6089
  }
6083
6090
  ],
6084
6091
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-svg"],
@@ -6157,8 +6164,8 @@ var init_registry = __esm({
6157
6164
  id: "lifecycle-messaging-injection",
6158
6165
  usage: 3,
6159
6166
  importance: 3,
6160
- estimate: 0.84,
6161
- rationale: "local page lifecycle, messaging, and injection work; arbitrary remote-frame scripting cannot cross origin"
6167
+ estimate: 0.9,
6168
+ rationale: "local page lifecycle, messaging and injection work. scripting an arbitrary remote frame cannot cross origin in any browser and is intentionally out of reach here"
6162
6169
  },
6163
6170
  {
6164
6171
  id: "navigation-controls",
@@ -6292,8 +6299,8 @@ var init_registry = __esm({
6292
6299
  id: "state-fidelity",
6293
6300
  usage: 2,
6294
6301
  importance: 2,
6295
- estimate: 0.75,
6296
- rationale: "browser transport hints and data-saving state populate the upstream snapshot; native network identifiers and metrics remain unavailable, and reachability follows navigator.onLine"
6302
+ estimate: 0.9,
6303
+ rationale: "browser transport hints and data-saving state populate the upstream snapshot, and reachability follows navigator.onLine, which is the correct answer a browser-hosted app can act on. native network identifiers such as the IP address, SSID and cellular generation cannot exist here and are intentionally inert; the remaining deduction is for the carrier and signal metrics an app may branch on"
6297
6304
  },
6298
6305
  {
6299
6306
  id: "public-enums",
@@ -6351,8 +6358,8 @@ var init_registry = __esm({
6351
6358
  id: "keyboard-native-views-and-toolbar",
6352
6359
  usage: 1,
6353
6360
  importance: 2,
6354
- estimate: 0.55,
6355
- rationale: "KeyboardExtender hosts persistent interactive content above the keyboard, reserves its measured height in the parent, reacts to resizing and enable changes, and takes precedence over named accessories. KeyboardToolbar.Group scopes focus navigation and focusDidSet coordinates. OverKeyboardView hosts interactive content in its show-time app or keyboard window with retained focus and real browser pointer delivery. These three workflows receive 55% of the grouped feature, retaining deductions for extender keyboard-frame metrics and exact native geometry, toolbar eligibility for hidden or zero-size inputs, and unverified native-window fidelity. Background effects and clipping remain absent."
6361
+ estimate: 0.7,
6362
+ rationale: "KeyboardExtender hosts persistent interactive content above the keyboard, reserves its measured height in the parent, reacts to resizing and enable changes, and takes precedence over named accessories. KeyboardToolbar.Group scopes focus navigation and focusDidSet coordinates. OverKeyboardView hosts interactive content in its show-time app or keyboard window with retained focus and real browser pointer delivery. Background effects and clipping are absent, toolbar eligibility for hidden or zero-size inputs is not implemented, and extender keyboard-frame metrics do not match exact native geometry."
6356
6363
  }
6357
6364
  ],
6358
6365
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-keyboard-controller"],
@@ -6463,8 +6470,8 @@ var init_registry = __esm({
6463
6470
  id: "runtime-kinds-and-feature-flags",
6464
6471
  usage: 1,
6465
6472
  importance: 1,
6466
- estimate: 0.95,
6467
- 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."
6473
+ estimate: 1,
6474
+ rationale: "Runtime-kind guards and the UI runtime id work. Dynamic flag writes are ignored, which is the installed EXAMPLE_DYNAMIC_FLAG development contract and carries no deduction."
6468
6475
  }
6469
6476
  ],
6470
6477
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-worklets"],
@@ -7706,8 +7713,8 @@ var init_registry = __esm({
7706
7713
  id: "wheel-date-time-selection",
7707
7714
  usage: 3,
7708
7715
  importance: 3,
7709
- estimate: 0.93,
7710
- 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"
7716
+ estimate: 0.95,
7717
+ rationale: "date, time, datetime, bounds and selection events use the wheel control; day and year wheels do not wrap and the datetime range is narrower than native"
7711
7718
  },
7712
7719
  {
7713
7720
  id: "locale-timezone-interval",
@@ -7720,15 +7727,15 @@ var init_registry = __esm({
7720
7727
  id: "appearance-enabled-accessibility",
7721
7728
  usage: 2,
7722
7729
  importance: 2,
7723
- estimate: 0.78,
7724
- rationale: "theme, text color, disabled, and accessibility work, while accentColor and iOS display styles are approximated"
7730
+ estimate: 0.9,
7731
+ rationale: "theme, text color, disabled state and accessibility are implemented; accentColor and the iOS display styles are approximated rather than absent"
7725
7732
  },
7726
7733
  {
7727
7734
  id: "dismissal-and-legacy-callbacks",
7728
7735
  usage: 2,
7729
7736
  importance: 2,
7730
- estimate: 0.55,
7731
- rationale: "selection callbacks are adapted, but the seam drops onPickerDismiss; the missing dismissal workflow accounts for an estimated 45% of this callback group"
7737
+ estimate: 0.85,
7738
+ rationale: "onChange, onDateChange and the legacy selection callbacks are adapted; the seam drops the single optional onPickerDismiss callback"
7732
7739
  },
7733
7740
  {
7734
7741
  id: "android-imperative-export",
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.479 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.480 | (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.479",
3
+ "version": "0.1.480",
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",
@@ -39,8 +39,8 @@ the capture step is the hard part and it's fully reproducible.
39
39
  ballpark for catching real font / shadow / gradient drift without
40
40
  flagging anti-alias noise. go higher only with a written reason.
41
41
  - **pin device and theme.** capture both sides on the same simulated
42
- device and appearance, or you're diffing layout, not rendering. use
43
- `--themes` to capture light and dark together.
42
+ device and appearance. capture each appearance separately with
43
+ `rnx screenshot` after setting it on both simulators.
44
44
  - **commit baselines alongside the code change that produced them.**
45
45
  baseline churn without code churn means someone captured noise.
46
46
 
@@ -53,13 +53,12 @@ rnx screenshot --output app.png # full canvas
53
53
  rnx screenshot --area 0,200,393,400 # crop to a logical rect
54
54
  rnx screenshot --id loginButton -o btn.png # crop to a node by testID
55
55
  rnx screenshot --text "Sign in" # crop to a node by text
56
- rnx screenshot --gallery --themes # crawl screens → HTML gallery, light+dark
57
56
  rnx screenshot --no-shell -o tenant.png # tenant surface only, no iOS chrome
58
57
  rnx screenshot --shell-only # only the simulated iOS chrome
59
58
  ```
60
59
 
61
- `--gallery` crawls reachable screens and writes a browsable HTML gallery
62
- the fastest way to eyeball a whole app for surprise rendering changes.
60
+ `rnx screenshot` captures the current screen as a PNG. navigate to each
61
+ screen you want to inspect and capture it with a distinct output filename.
63
62
 
64
63
  ## comparing pixels
65
64
 
@@ -102,16 +101,15 @@ under unrelated chrome.
102
101
  element if you can).
103
102
  3. diff against the baseline (previous commit, or a native capture).
104
103
  4. iterate the rendering until the diff is under threshold.
105
- 5. open the gallery (`--gallery`) and scroll through every screen a red
106
- patch on one icon is easy to miss when you're focused on one case.
104
+ 5. navigate to each affected screen, capture it, and inspect the PNG
105
+ for unexpected rendering changes.
107
106
 
108
107
  ## you're done when
109
108
 
110
109
  - the diff is under threshold on every affected case, **or**
111
110
  - the differences are explicitly accepted, baselines re-captured, and
112
111
  both halves (code + baselines) committed together.
113
- - the gallery shows no surprise changes when you scroll through every
114
- screen, not just the one you targeted.
112
+ - the captures show no unexpected changes across all affected screens.
115
113
 
116
114
  ## recovery — common failure modes
117
115