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.
- package/cli/cloud-dispatch.ts +3 -10
- package/cli/commands/screenshot.ts +9 -32
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +57 -50
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/skills/rnx-visual/SKILL.md +7 -9
package/cli/cloud-dispatch.ts
CHANGED
|
@@ -102,16 +102,9 @@ function supportsCloudRead(
|
|
|
102
102
|
}
|
|
103
103
|
if (command === 'screenshot') {
|
|
104
104
|
return !args.some((arg) =>
|
|
105
|
-
[
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
496
|
-
|
|
497
|
-
|
|
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
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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.
|
|
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/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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.
|
|
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.
|
|
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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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.
|
|
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.
|
|
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.
|
|
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);
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
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: "
|
|
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:
|
|
5729
|
-
rationale: "Text shaping
|
|
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.
|
|
5736
|
-
rationale: "
|
|
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.
|
|
5743
|
-
rationale: "
|
|
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
|
|
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:
|
|
5757
|
-
rationale: "Press and responder routing
|
|
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:
|
|
5764
|
-
rationale: "Image
|
|
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.
|
|
5771
|
-
rationale: "
|
|
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:
|
|
5778
|
-
rationale: "Modals, alerts and controls
|
|
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.
|
|
5785
|
-
rationale: "Keyboard presentation and avoidance work
|
|
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:
|
|
5792
|
-
rationale: "Platform, dimensions and
|
|
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.
|
|
5799
|
-
rationale: "Focus and announcements
|
|
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.
|
|
5806
|
-
rationale: "
|
|
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.
|
|
5872
|
-
rationale: "
|
|
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.
|
|
5970
|
-
rationale: "Initial detents, sheet geometry, corner radius, grabber, undimmed range
|
|
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.
|
|
6060
|
-
rationale: "Defs, Use, Symbol, Mask, ClipPath, Pattern fills and Marker geometry render.
|
|
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: "
|
|
6078
|
-
usage:
|
|
6077
|
+
id: "imperative-geometry",
|
|
6078
|
+
usage: 2,
|
|
6079
6079
|
importance: 2,
|
|
6080
|
-
estimate:
|
|
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.
|
|
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.
|
|
6161
|
-
rationale: "local page lifecycle, messaging
|
|
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.
|
|
6296
|
-
rationale: "browser transport hints and data-saving state populate the upstream snapshot
|
|
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.
|
|
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.
|
|
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:
|
|
6467
|
-
rationale: "Runtime-kind guards and the UI runtime id work. Dynamic flag writes are ignored,
|
|
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.
|
|
7710
|
-
rationale: "date, time, datetime, bounds and selection events use the wheel control;
|
|
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.
|
|
7724
|
-
rationale: "theme, text color, disabled
|
|
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.
|
|
7731
|
-
rationale: "selection callbacks are adapted
|
|
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.
|
|
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
|
@@ -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
|
|
43
|
-
|
|
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
|
-
|
|
62
|
-
|
|
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.
|
|
106
|
-
|
|
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
|
|
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
|
|