peachsim 0.1.527

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 (324) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +640 -0
  3. package/cli/app-config.ts +82 -0
  4. package/cli/app-fonts.ts +388 -0
  5. package/cli/app-project.ts +59 -0
  6. package/cli/app-splash.ts +171 -0
  7. package/cli/app-state-reset.ts +26 -0
  8. package/cli/auth.ts +184 -0
  9. package/cli/bin.ts +59 -0
  10. package/cli/bridge-diagnostics.ts +226 -0
  11. package/cli/bridge-flow-runner.ts +2806 -0
  12. package/cli/browser-backend.ts +44 -0
  13. package/cli/browser-evals.ts +96 -0
  14. package/cli/cli-update.ts +261 -0
  15. package/cli/cloud-client.ts +1530 -0
  16. package/cli/cloud-dispatch.ts +206 -0
  17. package/cli/cloud-session.ts +227 -0
  18. package/cli/command-contract.ts +221 -0
  19. package/cli/command-registry.ts +304 -0
  20. package/cli/commands/agent-wrapper.ts +1048 -0
  21. package/cli/commands/agent.ts +439 -0
  22. package/cli/commands/app-fonts.ts +99 -0
  23. package/cli/commands/assert.ts +542 -0
  24. package/cli/commands/auth.ts +71 -0
  25. package/cli/commands/box/bundle-plane.ts +71 -0
  26. package/cli/commands/box/checkout-plane.ts +256 -0
  27. package/cli/commands/box/plane-share.ts +208 -0
  28. package/cli/commands/box/rnx-command.ts +60 -0
  29. package/cli/commands/box/search-command.ts +157 -0
  30. package/cli/commands/box.ts +925 -0
  31. package/cli/commands/camera.ts +266 -0
  32. package/cli/commands/cleanup.ts +169 -0
  33. package/cli/commands/compat.ts +176 -0
  34. package/cli/commands/config.ts +34 -0
  35. package/cli/commands/control.ts +2154 -0
  36. package/cli/commands/cpu-profile.ts +941 -0
  37. package/cli/commands/daemon-mac-app.ts +165 -0
  38. package/cli/commands/daemon.ts +800 -0
  39. package/cli/commands/debug.ts +751 -0
  40. package/cli/commands/desktop.ts +39 -0
  41. package/cli/commands/detect.ts +201 -0
  42. package/cli/commands/detox.ts +481 -0
  43. package/cli/commands/device.ts +134 -0
  44. package/cli/commands/diagnose.ts +589 -0
  45. package/cli/commands/do-chain.ts +408 -0
  46. package/cli/commands/electron.ts +94 -0
  47. package/cli/commands/film.ts +379 -0
  48. package/cli/commands/flow.ts +1240 -0
  49. package/cli/commands/inspect/actions.ts +516 -0
  50. package/cli/commands/inspect/core.ts +2086 -0
  51. package/cli/commands/inspect/count.ts +17 -0
  52. package/cli/commands/inspect/describe.ts +119 -0
  53. package/cli/commands/inspect/env.ts +25 -0
  54. package/cli/commands/inspect/find.ts +169 -0
  55. package/cli/commands/inspect/get-layout.ts +53 -0
  56. package/cli/commands/inspect/keyboard.ts +54 -0
  57. package/cli/commands/inspect/list.ts +175 -0
  58. package/cli/commands/inspect/memory.ts +215 -0
  59. package/cli/commands/inspect/redaction.ts +39 -0
  60. package/cli/commands/inspect/resolve-target.ts +77 -0
  61. package/cli/commands/inspect/screens.ts +78 -0
  62. package/cli/commands/inspect/settle.ts +32 -0
  63. package/cli/commands/inspect/settling.ts +197 -0
  64. package/cli/commands/inspect/shared.ts +259 -0
  65. package/cli/commands/inspect/sleep.ts +15 -0
  66. package/cli/commands/inspect/tree.ts +23 -0
  67. package/cli/commands/inspect/url.ts +17 -0
  68. package/cli/commands/inspect/wait-event.ts +211 -0
  69. package/cli/commands/inspect/wait-idle.ts +25 -0
  70. package/cli/commands/inspect/wait-ready.ts +87 -0
  71. package/cli/commands/inspect/wait-selector.ts +59 -0
  72. package/cli/commands/inspect/wait.ts +32 -0
  73. package/cli/commands/inspect.ts +4738 -0
  74. package/cli/commands/install-cli.ts +275 -0
  75. package/cli/commands/install-desktop.ts +385 -0
  76. package/cli/commands/login.ts +357 -0
  77. package/cli/commands/logout.ts +24 -0
  78. package/cli/commands/maestro-generate.ts +375 -0
  79. package/cli/commands/maestro.ts +536 -0
  80. package/cli/commands/mode.ts +58 -0
  81. package/cli/commands/no-bridge-hint.ts +80 -0
  82. package/cli/commands/perf.ts +67 -0
  83. package/cli/commands/permissions.ts +203 -0
  84. package/cli/commands/platform.ts +410 -0
  85. package/cli/commands/preview.ts +103 -0
  86. package/cli/commands/profile.ts +106 -0
  87. package/cli/commands/react.ts +353 -0
  88. package/cli/commands/record.ts +1435 -0
  89. package/cli/commands/report-issue.ts +305 -0
  90. package/cli/commands/reset.ts +89 -0
  91. package/cli/commands/runtime.ts +348 -0
  92. package/cli/commands/screenshot-command.ts +106 -0
  93. package/cli/commands/screenshot-layers.ts +144 -0
  94. package/cli/commands/screenshot-mode.ts +38 -0
  95. package/cli/commands/screenshot.ts +492 -0
  96. package/cli/commands/screenshots-capture.ts +608 -0
  97. package/cli/commands/screenshots.ts +127 -0
  98. package/cli/commands/serve.ts +139 -0
  99. package/cli/commands/setup.ts +416 -0
  100. package/cli/commands/shell-boolean-mode.ts +82 -0
  101. package/cli/commands/skills.ts +468 -0
  102. package/cli/commands/slides.ts +357 -0
  103. package/cli/commands/state.ts +94 -0
  104. package/cli/commands/storage.ts +58 -0
  105. package/cli/commands/telemetry.ts +55 -0
  106. package/cli/commands/test.ts +535 -0
  107. package/cli/commands/three-mode.ts +771 -0
  108. package/cli/commands/timeline.ts +121 -0
  109. package/cli/commands/upgrade.ts +167 -0
  110. package/cli/commands/upload.ts +1203 -0
  111. package/cli/commands/version.ts +63 -0
  112. package/cli/commands/welcome.ts +17 -0
  113. package/cli/commands/what-happened.ts +328 -0
  114. package/cli/current-sim.ts +217 -0
  115. package/cli/desktop-companion.ts +315 -0
  116. package/cli/drivers/electron.ts +70 -0
  117. package/cli/drivers/index.ts +20 -0
  118. package/cli/drivers/playwright-provisioning.ts +184 -0
  119. package/cli/drivers/playwright-sim-host.ts +537 -0
  120. package/cli/drivers/playwright.ts +209 -0
  121. package/cli/drivers/registry.ts +65 -0
  122. package/cli/drivers/types.ts +102 -0
  123. package/cli/flow-export.ts +55 -0
  124. package/cli/flow-file.ts +142 -0
  125. package/cli/flow-live-status.ts +126 -0
  126. package/cli/flow-session.ts +140 -0
  127. package/cli/help-core.ts +143 -0
  128. package/cli/help.ts +44 -0
  129. package/cli/hidden-runtime-alias.ts +19 -0
  130. package/cli/hints.ts +214 -0
  131. package/cli/inspect-notice-state.ts +114 -0
  132. package/cli/internal-child.ts +176 -0
  133. package/cli/maestro-js.ts +323 -0
  134. package/cli/main.ts +704 -0
  135. package/cli/open-url.ts +8 -0
  136. package/cli/outbound-endpoints.ts +830 -0
  137. package/cli/parent-pid.ts +204 -0
  138. package/cli/parse-args.ts +189 -0
  139. package/cli/privacy.ts +53 -0
  140. package/cli/prompt.ts +56 -0
  141. package/cli/recording-access.ts +108 -0
  142. package/cli/registry.ts +2 -0
  143. package/cli/resolve-assets.ts +63 -0
  144. package/cli/rnx-in-process.ts +98 -0
  145. package/cli/run-registry.ts +226 -0
  146. package/cli/run-rnx-core.ts +148 -0
  147. package/cli/run-rnx.ts +137 -0
  148. package/cli/runtime-notes.ts +66 -0
  149. package/cli/runtime-summary.ts +25 -0
  150. package/cli/secure-file.ts +31 -0
  151. package/cli/self-invocation.ts +58 -0
  152. package/cli/send-to-box.ts +109 -0
  153. package/cli/setup-repository.ts +191 -0
  154. package/cli/shell-init.ts +98 -0
  155. package/cli/standalone.ts +4 -0
  156. package/cli/telemetry.ts +84 -0
  157. package/cli/ui.ts +68 -0
  158. package/cli/ws-bridge.ts +1020 -0
  159. package/detox/attempt-events.cjs +23 -0
  160. package/detox/colors.ts +54 -0
  161. package/detox/config-loader.ts +135 -0
  162. package/detox/element-types.ts +48 -0
  163. package/detox/expectations.ts +534 -0
  164. package/detox/gestures.ts +501 -0
  165. package/detox/index.ts +2694 -0
  166. package/detox/jest-preset.cjs +29 -0
  167. package/detox/jest-setup-after-env.cjs +22 -0
  168. package/detox/matchers.ts +30 -0
  169. package/detox/motion-change.cjs +109 -0
  170. package/detox/motion-change.d.cts +35 -0
  171. package/detox/navigation-lifecycle.ts +290 -0
  172. package/detox/navigation.ts +43 -0
  173. package/detox/proof-frame.cjs +114 -0
  174. package/detox/record-block-execution.cjs +78 -0
  175. package/detox/screenshots/animated-color-test-rest-norngh.png +0 -0
  176. package/detox/screenshots/color-test-after-drag-norngh.png +0 -0
  177. package/detox/screenshots/color-test-rest-norngh.png +0 -0
  178. package/detox/screenshots/theme-blue-toggle.png +0 -0
  179. package/detox/screenshots/theme-blue.png +0 -0
  180. package/detox/screenshots/theme-red-toggle.png +0 -0
  181. package/detox/screenshots/theme-red.png +0 -0
  182. package/dist-lib/agent-daemon-client.cjs +502 -0
  183. package/dist-lib/agent-events.cjs +48 -0
  184. package/dist-lib/agent-identity.cjs +53 -0
  185. package/dist-lib/agent-sessions.cjs +759 -0
  186. package/dist-lib/attached-projects.cjs +526 -0
  187. package/dist-lib/auth/shared-session.cjs +208 -0
  188. package/dist-lib/backend-origin.cjs +88 -0
  189. package/dist-lib/beta.cjs +41 -0
  190. package/dist-lib/beta.mjs +13 -0
  191. package/dist-lib/bridge-constants.cjs +161 -0
  192. package/dist-lib/bridge-contract-input.cjs +451 -0
  193. package/dist-lib/bridge-contract-input.mjs +414 -0
  194. package/dist-lib/bridge-contract.cjs +130 -0
  195. package/dist-lib/bridge-contract.mjs +94 -0
  196. package/dist-lib/capture-contract.cjs +220 -0
  197. package/dist-lib/capture-contract.mjs +190 -0
  198. package/dist-lib/cli-constants.cjs +32 -0
  199. package/dist-lib/cloud-contract.cjs +194 -0
  200. package/dist-lib/cloud-contract.mjs +145 -0
  201. package/dist-lib/cloud.cjs +670 -0
  202. package/dist-lib/cloud.mjs +639 -0
  203. package/dist-lib/config.cjs +96 -0
  204. package/dist-lib/detox/index.cjs +3789 -0
  205. package/dist-lib/detox/jest-preset.cjs +29 -0
  206. package/dist-lib/dev-bundle-resolution.cjs +290 -0
  207. package/dist-lib/home-paths.cjs +638 -0
  208. package/dist-lib/host/bridge-host.cjs +10903 -0
  209. package/dist-lib/host/fetch-proxy-handler.cjs +421 -0
  210. package/dist-lib/host/fetch-proxy-overrides.cjs +63 -0
  211. package/dist-lib/host/fetch-proxy-overrides.mjs +37 -0
  212. package/dist-lib/host/replacement-module-handler.cjs +469 -0
  213. package/dist-lib/host/websocket-proxy.cjs +298 -0
  214. package/dist-lib/index.cjs +4268 -0
  215. package/dist-lib/jump-to-source-babel.cjs +93 -0
  216. package/dist-lib/jump-to-source-native.cjs +112 -0
  217. package/dist-lib/menu.cjs +646 -0
  218. package/dist-lib/menu.mjs +604 -0
  219. package/dist-lib/metro-fingerprint-registry.cjs +186 -0
  220. package/dist-lib/metro-fingerprint-registry.mjs +156 -0
  221. package/dist-lib/metro-production-bundle.cjs +329 -0
  222. package/dist-lib/metro-production-bundle.mjs +295 -0
  223. package/dist-lib/metro.cjs +904 -0
  224. package/dist-lib/profiles.cjs +246 -0
  225. package/dist-lib/public-brand.cjs +39 -0
  226. package/dist-lib/react-native-host-modules.cjs +51 -0
  227. package/dist-lib/react-native-host-modules.mjs +25 -0
  228. package/dist-lib/render-mode.cjs +54 -0
  229. package/dist-lib/scripts/dev-server-scanner.cjs +1232 -0
  230. package/dist-lib/sdk.cjs +2433 -0
  231. package/dist-lib/sdk.mjs +2336 -0
  232. package/dist-lib/skills.cjs +39132 -0
  233. package/dist-lib/swift-submit.cjs +92 -0
  234. package/dist-lib/swift-submit.mjs +65 -0
  235. package/dist-lib/swift.cjs +1646 -0
  236. package/dist-lib/vite.cjs +1591 -0
  237. package/package.json +290 -0
  238. package/scripts/dev-server-scanner.ts +1291 -0
  239. package/scripts/optional-demo-registry.ts +113 -0
  240. package/skills/contrast/SKILL.md +165 -0
  241. package/skills/rnx-debug/SKILL.md +433 -0
  242. package/skills/rnx-perf/SKILL.md +399 -0
  243. package/skills/rnx-setup/SKILL.md +172 -0
  244. package/skills/rnx-test/SKILL.md +321 -0
  245. package/skills/rnx-visual/SKILL.md +126 -0
  246. package/src/agent-daemon-client.ts +410 -0
  247. package/src/agent-events.ts +71 -0
  248. package/src/agent-identity.ts +23 -0
  249. package/src/agent-prompt.ts +71 -0
  250. package/src/agent-sessions.ts +580 -0
  251. package/src/app-url.ts +39 -0
  252. package/src/attached-projects.ts +539 -0
  253. package/src/auth/shared-session.ts +235 -0
  254. package/src/backend-origin.ts +70 -0
  255. package/src/beta.ts +19 -0
  256. package/src/bridge-constants.ts +175 -0
  257. package/src/bridge-contract-input.ts +502 -0
  258. package/src/bridge-contract.ts +558 -0
  259. package/src/browser-cache.ts +16 -0
  260. package/src/capture-contract.ts +587 -0
  261. package/src/cli-constants.ts +1 -0
  262. package/src/cli-version.ts +40 -0
  263. package/src/cloud-contract.ts +274 -0
  264. package/src/cloud.ts +762 -0
  265. package/src/codex-client.ts +234 -0
  266. package/src/config.ts +132 -0
  267. package/src/connect.ts +101 -0
  268. package/src/dev-bundle-resolution.ts +346 -0
  269. package/src/dev-server-open.ts +198 -0
  270. package/src/disk-cleanup.ts +540 -0
  271. package/src/flow-timeout-scale.ts +15 -0
  272. package/src/home-paths.ts +806 -0
  273. package/src/host/agent-host.ts +666 -0
  274. package/src/host/bridge-host.ts +2788 -0
  275. package/src/host/fetch-proxy-handler.ts +449 -0
  276. package/src/host/fetch-proxy-overrides.ts +51 -0
  277. package/src/host/open-url.ts +89 -0
  278. package/src/host/plane-host.ts +203 -0
  279. package/src/host/replacement-module-handler.ts +158 -0
  280. package/src/host/websocket-proxy.ts +315 -0
  281. package/src/index.ts +71 -0
  282. package/src/jump-to-source-babel.ts +135 -0
  283. package/src/jump-to-source-native.ts +102 -0
  284. package/src/menu.ts +777 -0
  285. package/src/metro-fingerprint-registry.ts +302 -0
  286. package/src/metro-plugin.ts +341 -0
  287. package/src/metro-production-bundle.ts +471 -0
  288. package/src/native-dev-bundle-url.ts +118 -0
  289. package/src/native-seam-manifest.ts +341 -0
  290. package/src/playwright-host-log.ts +16 -0
  291. package/src/plist.ts +27 -0
  292. package/src/poll-until.ts +123 -0
  293. package/src/profiles.ts +179 -0
  294. package/src/public-brand.ts +9 -0
  295. package/src/react-native-host-modules.ts +26 -0
  296. package/src/render-mode.ts +27 -0
  297. package/src/rolldown-plugin-swift.ts +240 -0
  298. package/src/runtime-assets.ts +233 -0
  299. package/src/runtime-delivery.ts +54 -0
  300. package/src/screenshots/compose.ts +422 -0
  301. package/src/screenshots/frame-compose.ts +514 -0
  302. package/src/screenshots/orchestrate.ts +256 -0
  303. package/src/screenshots/org-deck.ts +91 -0
  304. package/src/screenshots/registry.ts +58 -0
  305. package/src/screenshots/schema.ts +364 -0
  306. package/src/sdk.ts +15 -0
  307. package/src/settings-bundle.ts +418 -0
  308. package/src/shell-bridge-identity.ts +15 -0
  309. package/src/sim-client.ts +697 -0
  310. package/src/skills/builtin/a11y-review.ts +132 -0
  311. package/src/skills/builtin/compat-check.ts +71 -0
  312. package/src/skills/builtin/maestro-test.ts +121 -0
  313. package/src/skills/builtin/perf-profile.ts +90 -0
  314. package/src/skills/builtin/screenshot-all.ts +52 -0
  315. package/src/skills/builtin/visual-diff.ts +100 -0
  316. package/src/skills/registry.ts +107 -0
  317. package/src/skills/types.ts +41 -0
  318. package/src/swift-submit.ts +185 -0
  319. package/src/swift.ts +7 -0
  320. package/src/team-machine-prompt.ts +73 -0
  321. package/src/vite-plugin-one.ts +264 -0
  322. package/src/vite-plugin-swift.ts +620 -0
  323. package/src/vite-plugin.ts +1946 -0
  324. package/src/worklets-babel.ts +250 -0
@@ -0,0 +1,646 @@
1
+ /*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
+ "use strict";
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name2 in all)
10
+ __defProp(target, name2, { get: all[name2], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+
22
+ // src/menu.ts
23
+ var menu_exports = {};
24
+ __export(menu_exports, {
25
+ SOOTSIM_AMBIENT_GLOW_LABELS: () => SOOTSIM_AMBIENT_GLOW_LABELS,
26
+ SOOTSIM_AMBIENT_GLOW_LEVELS: () => SOOTSIM_AMBIENT_GLOW_LEVELS,
27
+ SOOTSIM_ENGINE_EVENT_NAME: () => SOOTSIM_ENGINE_EVENT_NAME,
28
+ SOOTSIM_HOME_SCREEN_VERSIONS: () => SOOTSIM_HOME_SCREEN_VERSIONS,
29
+ SOOTSIM_HOME_SCREEN_VERSION_LABELS: () => SOOTSIM_HOME_SCREEN_VERSION_LABELS,
30
+ SOOTSIM_SHELL_COMMAND_NAME: () => SOOTSIM_SHELL_COMMAND_NAME,
31
+ buildSootSimDeviceChoiceDefs: () => buildSootSimDeviceChoiceDefs,
32
+ buildSootSimMenuDefs: () => buildSootSimMenuDefs,
33
+ formatAccelerator: () => formatAccelerator,
34
+ getMenuShortcutEntries: () => getMenuShortcutEntries,
35
+ getMenuShortcutEntriesFromDefs: () => getMenuShortcutEntriesFromDefs,
36
+ getShortcutDocSections: () => getShortcutDocSections,
37
+ getShortcutDocSectionsFromDefs: () => getShortcutDocSectionsFromDefs,
38
+ isSootSimAmbientGlowLevel: () => isSootSimAmbientGlowLevel,
39
+ isSootSimHomeScreenVersion: () => isSootSimHomeScreenVersion,
40
+ matchesAccelerator: () => matchesAccelerator
41
+ });
42
+ module.exports = __toCommonJS(menu_exports);
43
+
44
+ // src/public-brand.ts
45
+ var name = "rnx";
46
+ var rnxPublicBrand = Object.freeze({
47
+ name,
48
+ packageName: "rnxsim",
49
+ commandName: "rnx",
50
+ domain: "rnxsim.com",
51
+ origin: "https://rnxsim.com"
52
+ });
53
+
54
+ // src/menu.ts
55
+ var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
56
+ var SOOTSIM_SHELL_COMMAND_NAME = "sootsim:shell-command";
57
+ var SOOTSIM_AMBIENT_GLOW_LEVELS = ["off", "soft", "full"];
58
+ function isSootSimAmbientGlowLevel(value) {
59
+ return value === "off" || value === "soft" || value === "full";
60
+ }
61
+ var SOOTSIM_AMBIENT_GLOW_LABELS = {
62
+ off: "Off",
63
+ soft: "Soft",
64
+ full: "Full"
65
+ };
66
+ var SOOTSIM_HOME_SCREEN_VERSIONS = ["ios26", "ios27"];
67
+ function isSootSimHomeScreenVersion(value) {
68
+ return value === "ios26" || value === "ios27";
69
+ }
70
+ var SOOTSIM_HOME_SCREEN_VERSION_LABELS = {
71
+ ios26: "iOS 26",
72
+ ios27: "iOS 27"
73
+ };
74
+ function buildSootSimMenuDefs(state, deviceChoices) {
75
+ return [
76
+ appMenu(),
77
+ fileMenu(state, deviceChoices),
78
+ editMenu(),
79
+ deviceMenu(state, deviceChoices),
80
+ debugMenu(state),
81
+ windowMenu(state),
82
+ helpMenu()
83
+ ];
84
+ }
85
+ function appMenu() {
86
+ return {
87
+ label: rnxPublicBrand.name,
88
+ brand: true,
89
+ items: [
90
+ { label: `About ${rnxPublicBrand.name}`, action: "about" },
91
+ { type: "separator" },
92
+ {
93
+ label: "Preferences...",
94
+ accelerator: "CmdOrCtrl+,",
95
+ action: "preferences",
96
+ browserAccelerator: true,
97
+ shortcutLabel: "settings",
98
+ showInShortcutDocs: true
99
+ },
100
+ {
101
+ label: "Settings Pages",
102
+ items: [
103
+ {
104
+ label: "Accessibility",
105
+ action: "open-settings-page",
106
+ actionPayload: "accessibility"
107
+ },
108
+ {
109
+ label: "Display & Text Size",
110
+ action: "open-settings-page",
111
+ actionPayload: "display-and-text-size"
112
+ },
113
+ {
114
+ label: "Notifications",
115
+ action: "open-settings-page",
116
+ actionPayload: "notifications"
117
+ },
118
+ {
119
+ label: "Apps",
120
+ action: "open-settings-page",
121
+ actionPayload: "apps"
122
+ },
123
+ {
124
+ label: "Privacy & Security",
125
+ action: "open-settings-page",
126
+ actionPayload: "privacy"
127
+ }
128
+ ]
129
+ },
130
+ { type: "separator" },
131
+ {
132
+ label: "Hide rnx",
133
+ accelerator: "CmdOrCtrl+H",
134
+ action: "hide",
135
+ hiddenIn: "browser"
136
+ },
137
+ {
138
+ label: "Hide Others",
139
+ accelerator: "CmdOrCtrl+Alt+H",
140
+ action: "hide-others",
141
+ hiddenIn: "browser"
142
+ },
143
+ { label: "Show All", action: "unhide", hiddenIn: "browser" },
144
+ { type: "separator" },
145
+ {
146
+ label: "Quit rnx",
147
+ accelerator: "CmdOrCtrl+Q",
148
+ action: "quit",
149
+ hiddenIn: "browser"
150
+ }
151
+ ]
152
+ };
153
+ }
154
+ function fileMenu(state, deviceChoices) {
155
+ return {
156
+ label: "File",
157
+ notMinimal: true,
158
+ items: [
159
+ { label: "New Window", accelerator: "CmdOrCtrl+N", action: "new-window" },
160
+ {
161
+ label: "New Simulator",
162
+ hiddenIn: "browser",
163
+ items: buildSootSimDeviceChoiceDefs(state.currentDevice, deviceChoices, {
164
+ action: "new-simulator"
165
+ })
166
+ },
167
+ {
168
+ label: "Close Window",
169
+ accelerator: "CmdOrCtrl+W",
170
+ action: "close-window",
171
+ hiddenIn: "browser"
172
+ },
173
+ { type: "separator" },
174
+ {
175
+ label: "Save Screen",
176
+ accelerator: "CmdOrCtrl+S",
177
+ action: "save-screen"
178
+ },
179
+ {
180
+ label: "Copy Screen",
181
+ accelerator: "CmdOrCtrl+Alt+C",
182
+ action: "copy-screen"
183
+ },
184
+ { type: "separator" },
185
+ {
186
+ label: "Record",
187
+ accelerator: "Ctrl+CmdOrCtrl+R",
188
+ action: "toggle-recording",
189
+ browserAccelerator: true,
190
+ shortcutLabel: "start/stop recording",
191
+ showInShortcutDocs: true
192
+ },
193
+ {
194
+ label: "Send to Box",
195
+ action: "send-to-box"
196
+ }
197
+ ]
198
+ };
199
+ }
200
+ function editMenu() {
201
+ return {
202
+ label: "Edit",
203
+ hiddenIn: "browser",
204
+ items: [
205
+ { label: "Undo", accelerator: "CmdOrCtrl+Z", action: "undo" },
206
+ { label: "Redo", accelerator: "CmdOrCtrl+Shift+Z", action: "redo" },
207
+ { type: "separator" },
208
+ { label: "Cut", accelerator: "CmdOrCtrl+X", action: "cut" },
209
+ { label: "Copy", accelerator: "CmdOrCtrl+C", action: "copy" },
210
+ { label: "Paste", accelerator: "CmdOrCtrl+V", action: "paste" },
211
+ { label: "Select All", accelerator: "CmdOrCtrl+A", action: "select-all" }
212
+ ]
213
+ };
214
+ }
215
+ function deviceMenu(state, deviceChoices) {
216
+ return {
217
+ label: "Device",
218
+ items: [
219
+ { label: "Restart", accelerator: "CmdOrCtrl+R", action: "reload" },
220
+ { label: "Erase All Content and Settings...", action: "erase-all" },
221
+ { type: "separator" },
222
+ {
223
+ label: "Home",
224
+ accelerator: "Shift+CmdOrCtrl+H",
225
+ action: "home",
226
+ browserAccelerator: true,
227
+ shortcutLabel: "go home",
228
+ showInShortcutDocs: true
229
+ },
230
+ {
231
+ label: "Lock",
232
+ accelerator: "CmdOrCtrl+L",
233
+ action: "lock",
234
+ shortcutLabel: "lock / unlock",
235
+ showInShortcutDocs: true
236
+ },
237
+ { label: "Shake", accelerator: "Ctrl+CmdOrCtrl+Z", action: "shake" },
238
+ {
239
+ label: "App Switcher",
240
+ accelerator: "Ctrl+Shift+CmdOrCtrl+H",
241
+ action: "app-switcher",
242
+ browserAccelerator: true,
243
+ shortcutLabel: "app switcher",
244
+ showInShortcutDocs: true
245
+ },
246
+ { type: "separator" },
247
+ { label: "Trigger Screenshot", action: "screenshot" },
248
+ { type: "separator" },
249
+ ...buildSootSimDeviceChoiceDefs(state.currentDevice, deviceChoices, {
250
+ action: "switch-device"
251
+ })
252
+ ]
253
+ };
254
+ }
255
+ function debugMenu(state) {
256
+ return {
257
+ label: "Debug",
258
+ items: [
259
+ // both toggles are stateful in the browser, where the open state lives
260
+ // in the same document. electron's menu process cannot see it, so it
261
+ // keeps the plain (stateless) items rather than a permanently
262
+ // unchecked checkbox — same reasoning as the screenshot/3d entries
263
+ // being hidden there. accelerators stay single-registered per surface.
264
+ {
265
+ label: "Toggle Devtools",
266
+ accelerator: "Alt+I",
267
+ action: "toggle-devtools",
268
+ showInShortcutDocs: true,
269
+ hiddenIn: "browser"
270
+ },
271
+ {
272
+ label: "Toggle Devtools",
273
+ type: "checkbox",
274
+ checked: state.devtoolsOpen,
275
+ accelerator: "Alt+I",
276
+ action: "toggle-devtools",
277
+ browserAccelerator: true,
278
+ showInShortcutDocs: true,
279
+ hiddenIn: "electron"
280
+ },
281
+ {
282
+ label: "Inspect",
283
+ accelerator: "Shift+CmdOrCtrl+C",
284
+ action: "toggle-inspect",
285
+ hiddenIn: "browser"
286
+ },
287
+ {
288
+ label: "Inspect",
289
+ type: "checkbox",
290
+ checked: state.inspectMode,
291
+ accelerator: "Shift+CmdOrCtrl+C",
292
+ action: "toggle-inspect",
293
+ browserAccelerator: true,
294
+ hiddenIn: "electron"
295
+ },
296
+ { type: "separator" },
297
+ {
298
+ label: "Open Chrome Devtools",
299
+ accelerator: "CmdOrCtrl+Alt+I",
300
+ action: "open-devtools",
301
+ hiddenIn: "browser",
302
+ shortcutLabel: "developer tools",
303
+ showInShortcutDocs: true
304
+ },
305
+ { type: "separator" },
306
+ {
307
+ label: "Always Show Live WebViews",
308
+ type: "checkbox",
309
+ checked: state.alwaysShowLiveWebViews,
310
+ action: "toggle-live-webviews"
311
+ },
312
+ {
313
+ label: "Send to Box Carries Sign-In",
314
+ type: "checkbox",
315
+ checked: state.sendToBoxCarryAuth,
316
+ action: "toggle-send-to-box-auth"
317
+ },
318
+ { type: "separator" },
319
+ {
320
+ label: "Clear Cache and Reload",
321
+ accelerator: "CmdOrCtrl+Shift+R",
322
+ action: "clear-cache"
323
+ },
324
+ { label: "Clear Local Storage", action: "clear-localstorage" },
325
+ { label: "Clear IndexedDB", action: "clear-indexeddb" },
326
+ { label: "Clear Service Workers", action: "clear-serviceworkers" },
327
+ { type: "separator" },
328
+ {
329
+ label: "Open User Data Folder",
330
+ action: "open-userdata",
331
+ hiddenIn: "browser"
332
+ }
333
+ ]
334
+ };
335
+ }
336
+ function windowMenu(state) {
337
+ return {
338
+ label: "Window",
339
+ items: [
340
+ {
341
+ label: "Minimize",
342
+ accelerator: "CmdOrCtrl+M",
343
+ action: "minimize",
344
+ hiddenIn: "browser"
345
+ },
346
+ {
347
+ label: "Close",
348
+ accelerator: "CmdOrCtrl+W",
349
+ action: "close-window",
350
+ hiddenIn: "browser"
351
+ },
352
+ { type: "separator" },
353
+ {
354
+ label: "Toggle Appearance",
355
+ accelerator: "Shift+CmdOrCtrl+A",
356
+ action: "toggle-appearance",
357
+ browserAccelerator: true,
358
+ shortcutLabel: "toggle appearance",
359
+ showInShortcutDocs: true
360
+ },
361
+ { type: "separator" },
362
+ {
363
+ label: "Show Device Bezels",
364
+ type: "checkbox",
365
+ checked: state.showBezels,
366
+ action: "toggle-bezels"
367
+ },
368
+ {
369
+ label: "Show Menu Bar",
370
+ type: "checkbox",
371
+ checked: state.showMenuBar,
372
+ action: "toggle-menubar",
373
+ hiddenIn: "electron"
374
+ },
375
+ {
376
+ label: "Show Rail",
377
+ type: "checkbox",
378
+ checked: state.showRail,
379
+ action: "toggle-rail",
380
+ hiddenIn: "electron"
381
+ },
382
+ {
383
+ // desktop only. the device window is frameless and transparent, which
384
+ // is right for a phone floating on the desktop and wrong for the
385
+ // full-window modes; this pins the solid style on all the time. 3d
386
+ // mode switches to it on its own either way.
387
+ label: "Solid Window",
388
+ type: "checkbox",
389
+ checked: state.solidWindow,
390
+ action: "toggle-solid-window",
391
+ hiddenIn: "browser"
392
+ },
393
+ {
394
+ // browser only: the wash needs several glow radii of stage around the
395
+ // device to fade out in, and electron's transparent window is sized to
396
+ // the device, so there it can only paint a clipped rectangle.
397
+ label: "Ambient Glow",
398
+ hiddenIn: "electron",
399
+ items: SOOTSIM_AMBIENT_GLOW_LEVELS.map((level) => ({
400
+ label: SOOTSIM_AMBIENT_GLOW_LABELS[level],
401
+ type: "radio",
402
+ checked: state.ambientGlow === level,
403
+ action: "set-ambient-glow",
404
+ actionPayload: level
405
+ }))
406
+ },
407
+ // both eras stay selectable while the ios 27 home surfaces land one at a
408
+ // time, and the device's own os picks the starting value. the switch is
409
+ // the iPhone Duo's, so it is offered exactly where the Duo is.
410
+ ...state.developmentMode ? [
411
+ {
412
+ label: "Home Screen",
413
+ items: SOOTSIM_HOME_SCREEN_VERSIONS.map((version) => ({
414
+ label: SOOTSIM_HOME_SCREEN_VERSION_LABELS[version],
415
+ type: "radio",
416
+ checked: state.homeScreenVersion === version,
417
+ action: "set-home-screen",
418
+ actionPayload: version
419
+ }))
420
+ }
421
+ ] : [],
422
+ {
423
+ label: "Wireframe",
424
+ type: "checkbox",
425
+ checked: state.wireframe,
426
+ action: "toggle-wireframe",
427
+ hiddenIn: "electron"
428
+ },
429
+ {
430
+ label: "Screenshot",
431
+ type: "checkbox",
432
+ checked: state.screenshotMode,
433
+ action: "toggle-screenshot-mode",
434
+ hiddenIn: "electron"
435
+ },
436
+ {
437
+ label: "3D",
438
+ type: "checkbox",
439
+ checked: state.threeMode,
440
+ action: "toggle-three-mode",
441
+ hiddenIn: "electron"
442
+ },
443
+ {
444
+ label: "Stay On Top",
445
+ type: "checkbox",
446
+ checked: state.stayOnTop,
447
+ action: "toggle-stay-on-top",
448
+ hiddenIn: "browser"
449
+ },
450
+ { type: "separator" },
451
+ {
452
+ label: "Physical Size",
453
+ accelerator: "CmdOrCtrl+1",
454
+ type: "radio",
455
+ checked: state.scaleMode === "physical",
456
+ action: "scale-physical"
457
+ },
458
+ {
459
+ label: "Point Accurate",
460
+ accelerator: "CmdOrCtrl+2",
461
+ type: "radio",
462
+ checked: state.scaleMode === "point",
463
+ action: "scale-point"
464
+ },
465
+ {
466
+ label: "Pixel Accurate",
467
+ accelerator: "CmdOrCtrl+3",
468
+ type: "radio",
469
+ checked: state.scaleMode === "pixel",
470
+ action: "scale-pixel"
471
+ },
472
+ {
473
+ label: "Fit Screen",
474
+ accelerator: "CmdOrCtrl+0",
475
+ type: "radio",
476
+ checked: state.scaleMode === "fit",
477
+ action: "scale-fit"
478
+ }
479
+ ]
480
+ };
481
+ }
482
+ function helpMenu() {
483
+ return {
484
+ label: "Help",
485
+ notMinimal: true,
486
+ items: [
487
+ { label: `${rnxPublicBrand.name} Website`, action: "open-website" },
488
+ {
489
+ label: "Send Feedback...",
490
+ accelerator: "CmdOrCtrl+Shift+I",
491
+ action: "open-devtools-report",
492
+ showInShortcutDocs: true
493
+ }
494
+ ]
495
+ };
496
+ }
497
+ function buildSootSimDeviceChoiceDefs(currentDevice, deviceChoices, options) {
498
+ const items = [];
499
+ let lastPlatform = "";
500
+ const isStateful = options.action === "switch-device";
501
+ for (const choice of deviceChoices) {
502
+ if (lastPlatform && choice.platform !== lastPlatform)
503
+ items.push({ type: "separator" });
504
+ lastPlatform = choice.platform;
505
+ if (isStateful) {
506
+ items.push({
507
+ label: choice.label,
508
+ type: "radio",
509
+ checked: choice.model === currentDevice,
510
+ action: options.action,
511
+ actionPayload: choice.model
512
+ });
513
+ } else {
514
+ items.push({
515
+ label: choice.label,
516
+ action: options.action,
517
+ actionPayload: choice.model
518
+ });
519
+ }
520
+ }
521
+ return items;
522
+ }
523
+ function shouldIncludeItemForPlatform(item, platform) {
524
+ if (item.hiddenIn === platform) return false;
525
+ if (!item.accelerator || !item.action) return false;
526
+ if (platform === "browser") return item.browserAccelerator === true;
527
+ return true;
528
+ }
529
+ function shouldIncludeItemInDocs(item, platform) {
530
+ if (!item.showInShortcutDocs) return false;
531
+ if (platform === "browser" && !item.browserAccelerator) return false;
532
+ return true;
533
+ }
534
+ function collectMenuShortcutsFromDefs(menus, platform, includeItem) {
535
+ const entries = [];
536
+ const visit = (menuLabel, items) => {
537
+ for (const item of items) {
538
+ if (item.type === "separator") continue;
539
+ if (item.items?.length) visit(menuLabel, item.items);
540
+ if (!includeItem(item, platform)) continue;
541
+ const { accelerator, action } = item;
542
+ if (!accelerator || !action) continue;
543
+ entries.push({
544
+ menuLabel,
545
+ label: item.shortcutLabel ?? item.label,
546
+ accelerator,
547
+ action,
548
+ actionPayload: item.actionPayload
549
+ });
550
+ }
551
+ };
552
+ for (const menu of menus) {
553
+ if (menu.hiddenIn === platform) continue;
554
+ visit(menu.label, menu.items);
555
+ }
556
+ return entries;
557
+ }
558
+ function getMenuShortcutEntriesFromDefs(menus, platform) {
559
+ return collectMenuShortcutsFromDefs(menus, platform, shouldIncludeItemForPlatform);
560
+ }
561
+ function getMenuShortcutEntries(state, deviceChoices, platform) {
562
+ return getMenuShortcutEntriesFromDefs(
563
+ buildSootSimMenuDefs(state, deviceChoices),
564
+ platform
565
+ );
566
+ }
567
+ function getShortcutDocSections(state, deviceChoices, platform) {
568
+ return getShortcutDocSectionsFromDefs(
569
+ buildSootSimMenuDefs(state, deviceChoices),
570
+ platform
571
+ );
572
+ }
573
+ function getShortcutDocSectionsFromDefs(menus, platform) {
574
+ const sections = [];
575
+ const byMenu = /* @__PURE__ */ new Map();
576
+ for (const entry of collectMenuShortcutsFromDefs(
577
+ menus,
578
+ platform,
579
+ shouldIncludeItemInDocs
580
+ )) {
581
+ const items = byMenu.get(entry.menuLabel) ?? [];
582
+ items.push({
583
+ keys: formatAccelerator(entry.accelerator),
584
+ label: entry.label
585
+ });
586
+ byMenu.set(entry.menuLabel, items);
587
+ }
588
+ for (const [title, entries] of byMenu) {
589
+ sections.push({
590
+ title: title.toLowerCase(),
591
+ entries
592
+ });
593
+ }
594
+ return sections;
595
+ }
596
+ function formatAccelerator(accel) {
597
+ return accel.replace(/CmdOrCtrl\+/g, "\u2318").replace(/Ctrl\+/g, "\u2303").replace(/Alt\+/g, "\u2325").replace(/Shift\+/g, "\u21E7").replace(/Left/g, "\u2190").replace(/Right/g, "\u2192").replace(/Up/g, "\u2191").replace(/Down/g, "\u2193");
598
+ }
599
+ var ARROW_KEYS = {
600
+ Left: "arrowleft",
601
+ Right: "arrowright",
602
+ Up: "arrowup",
603
+ Down: "arrowdown"
604
+ };
605
+ function normalizeAcceleratorKey(key) {
606
+ return ARROW_KEYS[key] ?? key.toLowerCase();
607
+ }
608
+ function normalizeEventKey(key) {
609
+ return key.toLowerCase();
610
+ }
611
+ function matchesAccelerator(event, accelerator) {
612
+ const tokens = accelerator.split("+");
613
+ const keyToken = tokens[tokens.length - 1];
614
+ const wantsCmdOrCtrl = tokens.includes("CmdOrCtrl");
615
+ const wantsCtrl = tokens.includes("Ctrl");
616
+ const wantsAlt = tokens.includes("Alt");
617
+ const wantsShift = tokens.includes("Shift");
618
+ if (!keyToken) return false;
619
+ if (event.altKey !== wantsAlt) return false;
620
+ if (event.shiftKey !== wantsShift) return false;
621
+ const hasCmdOrCtrl = event.metaKey || event.ctrlKey;
622
+ if (wantsCmdOrCtrl && !hasCmdOrCtrl) return false;
623
+ if (!wantsCmdOrCtrl && event.metaKey) return false;
624
+ if (wantsCtrl && !event.ctrlKey) return false;
625
+ if (!wantsCtrl && !wantsCmdOrCtrl && event.ctrlKey) return false;
626
+ return normalizeEventKey(event.key) === normalizeAcceleratorKey(keyToken);
627
+ }
628
+ // Annotate the CommonJS export names for ESM import in node:
629
+ 0 && (module.exports = {
630
+ SOOTSIM_AMBIENT_GLOW_LABELS,
631
+ SOOTSIM_AMBIENT_GLOW_LEVELS,
632
+ SOOTSIM_ENGINE_EVENT_NAME,
633
+ SOOTSIM_HOME_SCREEN_VERSIONS,
634
+ SOOTSIM_HOME_SCREEN_VERSION_LABELS,
635
+ SOOTSIM_SHELL_COMMAND_NAME,
636
+ buildSootSimDeviceChoiceDefs,
637
+ buildSootSimMenuDefs,
638
+ formatAccelerator,
639
+ getMenuShortcutEntries,
640
+ getMenuShortcutEntriesFromDefs,
641
+ getShortcutDocSections,
642
+ getShortcutDocSectionsFromDefs,
643
+ isSootSimAmbientGlowLevel,
644
+ isSootSimHomeScreenVersion,
645
+ matchesAccelerator
646
+ });