peachsim 0.1.1644 → 0.1.1653

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 (608) hide show
  1. package/README.md +12 -0
  2. package/cli/app-catalog.ts +1 -1
  3. package/cli/app-fonts.ts +11 -80
  4. package/cli/app-splash.ts +18 -12
  5. package/cli/bridge-flow-runner.ts +11 -7
  6. package/cli/cloud-client.ts +10 -13
  7. package/cli/command-registry.ts +13 -4
  8. package/cli/commands/box.ts +4 -4
  9. package/cli/commands/control.ts +93 -53
  10. package/cli/commands/coverage-parser.ts +67 -0
  11. package/cli/commands/coverage.ts +550 -0
  12. package/cli/commands/debug.ts +9 -18
  13. package/cli/commands/desktop.ts +19 -7
  14. package/cli/commands/device.ts +14 -9
  15. package/cli/commands/guest-host.ts +6 -10
  16. package/cli/commands/inspect/core.ts +81 -17
  17. package/cli/commands/inspect.ts +13 -8
  18. package/cli/commands/kotlin.ts +2 -2
  19. package/cli/commands/maestro-compare.ts +1 -1
  20. package/cli/commands/platform.ts +20 -11
  21. package/cli/commands/preview.ts +16 -18
  22. package/cli/commands/runtime.ts +3 -2
  23. package/cli/commands/screenshot-layers.ts +1 -1
  24. package/cli/commands/screenshot.ts +1 -1
  25. package/cli/commands/serve.ts +5 -1
  26. package/cli/commands/support.ts +4 -4
  27. package/cli/commands/three-mode.ts +22 -15
  28. package/cli/commands/upload.ts +44 -45
  29. package/cli/current-sim.ts +38 -0
  30. package/cli/desktop-companion.ts +36 -8
  31. package/cli/device-option.ts +1 -1
  32. package/cli/drivers/playwright.ts +1 -0
  33. package/cli/drivers/types.ts +4 -0
  34. package/cli/help-core.ts +1 -1
  35. package/cli/internal-child.ts +2 -1
  36. package/cli/main.ts +9 -3
  37. package/cli/outbound-endpoints.ts +11 -3
  38. package/cli/output-redaction.ts +39 -14
  39. package/cli/remote-simulators.ts +4 -1
  40. package/cli/scene-video.ts +5 -2
  41. package/cli/send-to-box.ts +7 -10
  42. package/cli/telemetry.ts +1 -1
  43. package/cli/ws-bridge.ts +8 -1
  44. package/detox/attempt-events.cjs +3 -1
  45. package/detox/attempt-events.d.cts +1 -1
  46. package/detox/expectations.ts +108 -99
  47. package/detox/frame-offset.d.mts +6 -0
  48. package/detox/frame-offset.mjs +35 -0
  49. package/detox/gestures.ts +6 -18
  50. package/detox/index.ts +169 -101
  51. package/detox/jest-preset.cjs +1 -3
  52. package/detox/jest-transform.cjs +4 -0
  53. package/detox/matchers.ts +3 -0
  54. package/detox/motion-change.cjs +46 -114
  55. package/detox/motion-change.d.cts +5 -27
  56. package/dist-lib/agent-daemon-client.cjs +1 -1
  57. package/dist-lib/agent-events.cjs +1 -1
  58. package/dist-lib/attached-projects.cjs +1 -1
  59. package/dist-lib/auth/shared-session.cjs +1 -1
  60. package/dist-lib/backend-origin.cjs +1 -1
  61. package/dist-lib/beta.cjs +1 -1
  62. package/dist-lib/beta.mjs +1 -1
  63. package/dist-lib/bridge-constants.cjs +1 -1
  64. package/dist-lib/bridge-contract-input.cjs +65 -1
  65. package/dist-lib/bridge-contract-input.mjs +63 -1
  66. package/dist-lib/bridge-contract.cjs +19 -1
  67. package/dist-lib/bridge-contract.mjs +17 -1
  68. package/dist-lib/bundle-channel.cjs +38091 -14846
  69. package/dist-lib/capture-contract.cjs +1 -1
  70. package/dist-lib/capture-contract.mjs +1 -1
  71. package/dist-lib/cloud-contract.cjs +1 -1
  72. package/dist-lib/cloud-contract.mjs +1 -1
  73. package/dist-lib/cloud-test-args.cjs +1 -1
  74. package/dist-lib/cloud-test-args.mjs +1 -1
  75. package/dist-lib/cloud.cjs +1 -1
  76. package/dist-lib/cloud.mjs +1 -1
  77. package/dist-lib/config.cjs +1 -1
  78. package/dist-lib/config.mjs +5 -3
  79. package/dist-lib/detox/index.cjs +1244 -4509
  80. package/dist-lib/detox/jest-preset.cjs +1 -3
  81. package/dist-lib/detox/jest-transform.cjs +4 -0
  82. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  83. package/dist-lib/expo-swift-bundle.cjs +35049 -13125
  84. package/dist-lib/expo-swift-metadata.cjs +1 -1
  85. package/dist-lib/expo-swift-metadata.mjs +1 -1
  86. package/dist-lib/home-paths.cjs +1 -1
  87. package/dist-lib/host/bridge-host.cjs +45112 -63143
  88. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  89. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  90. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  91. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  92. package/dist-lib/host/websocket-proxy.cjs +1 -1
  93. package/dist-lib/index.cjs +1909 -2029
  94. package/dist-lib/jump-to-source-babel.cjs +1 -1
  95. package/dist-lib/jump-to-source-native.cjs +1 -1
  96. package/dist-lib/kotlin-host.cjs +2 -2
  97. package/dist-lib/menu.cjs +1 -1
  98. package/dist-lib/menu.mjs +1 -1
  99. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  100. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  101. package/dist-lib/metro-production-bundle.cjs +1 -1
  102. package/dist-lib/metro-production-bundle.mjs +1 -1
  103. package/dist-lib/metro.cjs +380 -522
  104. package/dist-lib/native-app-identity-project.cjs +39 -252
  105. package/dist-lib/native-app-identity-project.mjs +1174 -11
  106. package/dist-lib/native-app-identity.cjs +8 -3
  107. package/dist-lib/native-app-identity.mjs +8 -3
  108. package/dist-lib/native-firebase-metadata.cjs +1 -1
  109. package/dist-lib/native-firebase-metadata.mjs +1 -1
  110. package/dist-lib/plist.cjs +2 -244
  111. package/dist-lib/plist.mjs +1 -1
  112. package/dist-lib/profiles.cjs +1 -1
  113. package/dist-lib/public-brand.cjs +1 -1
  114. package/dist-lib/public-origins-lib-esm.json +290 -0
  115. package/dist-lib/public-origins-lib-static.json +1 -0
  116. package/dist-lib/public-origins-lib.json +1852 -0
  117. package/dist-lib/react-native-host-modules.cjs +1 -1
  118. package/dist-lib/react-native-host-modules.mjs +1 -1
  119. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  120. package/dist-lib/sdk.cjs +83 -16
  121. package/dist-lib/sdk.mjs +81 -15
  122. package/dist-lib/skills.cjs +50546 -75098
  123. package/dist-lib/swift-compile.cjs +25897 -1070
  124. package/dist-lib/swift-compile.mjs +25866 -1033
  125. package/dist-lib/swift-package.cjs +79 -1
  126. package/dist-lib/swift-package.mjs +75 -1
  127. package/dist-lib/swift-submit.cjs +1 -1
  128. package/dist-lib/swift-submit.mjs +1 -1
  129. package/dist-lib/swift-toolchain.cjs +1 -1
  130. package/dist-lib/swift.cjs +1 -1
  131. package/dist-lib/vite-swift.cjs +34273 -12349
  132. package/dist-lib/vite.cjs +373 -298
  133. package/dist-lib/worklet-executable.cjs +1 -1
  134. package/dist-lib/worklet-executable.mjs +1 -1
  135. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  136. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  137. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  138. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  139. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  140. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  141. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  142. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  143. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  144. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  145. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  146. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  147. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  148. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  149. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  150. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  151. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  152. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  153. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  154. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  156. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  157. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  158. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  159. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  160. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  161. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  162. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  163. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  164. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  165. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  166. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  167. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  168. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  169. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  170. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  171. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  172. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  173. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  174. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  175. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  176. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  177. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  178. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  179. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  180. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  181. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  182. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  183. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  184. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  185. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  186. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  187. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  188. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  189. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  190. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  191. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  192. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  193. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  194. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  195. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  197. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  198. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  199. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  200. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  201. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  202. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  203. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  204. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  205. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  206. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  207. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  208. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  209. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  210. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  214. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  215. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  216. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  217. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  218. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  219. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  224. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  225. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  226. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  227. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  228. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  229. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  230. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  231. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  232. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  233. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  234. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  235. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  236. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  237. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  238. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  239. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  240. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  241. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  242. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  243. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  244. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  245. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  246. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  247. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  248. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  249. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  250. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  251. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  252. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  253. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  254. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  255. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  256. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  257. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  258. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  259. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  260. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  261. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  262. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  263. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  264. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  265. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  266. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  267. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  268. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  269. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  270. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  271. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  272. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  273. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  274. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  275. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  276. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  277. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  333. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  334. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  335. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  336. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  337. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  338. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  339. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  340. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  341. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  342. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  343. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  344. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  345. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  346. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  347. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  348. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  349. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  350. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  351. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  352. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  353. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  354. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  355. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  356. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  357. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  358. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  359. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  360. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  361. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  362. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  363. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  364. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  365. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  367. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  368. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  369. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  370. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  371. package/kotlin/README.md +6 -0
  372. package/package.json +22 -2
  373. package/runtime-companion.json +1 -0
  374. package/skills/contrast/SKILL.md +1 -0
  375. package/src/assetCatalogContract.ts +21 -0
  376. package/src/bridge-contract-input.ts +84 -0
  377. package/src/bridge-contract.ts +35 -3
  378. package/src/browser-launch-policy.ts +1 -0
  379. package/src/bundle-channel.mjs +4 -2
  380. package/src/cli-runtime.ts +55 -0
  381. package/src/crash-fingerprint.ts +26 -0
  382. package/src/dev-bundle-resolution.ts +50 -23
  383. package/src/device-catalog.ts +1159 -0
  384. package/src/host/bridge-host.ts +3 -26
  385. package/src/host/browser-pointer.ts +71 -0
  386. package/src/host/dev-server-package-versions.ts +23 -0
  387. package/src/host/fetch-proxy-handler.ts +17 -4
  388. package/src/installed-package-versions.ts +142 -38
  389. package/src/kotlin-host.ts +1 -1
  390. package/src/metro-plugin.ts +4 -4
  391. package/src/metro-project-root.ts +68 -0
  392. package/src/nitro-adapter.lock.json +26 -0
  393. package/src/nitro-adapter.ts +103 -0
  394. package/src/nitro-bundle.ts +24 -10
  395. package/src/nitro-compile.ts +33 -51
  396. package/src/nitro-source.ts +177 -96
  397. package/src/nitroAdapterContract.ts +217 -0
  398. package/src/nitroContract.ts +24 -11
  399. package/src/process-group.ts +41 -34
  400. package/src/react-bridge-importers.ts +28 -0
  401. package/src/reactNativeConfigurationContract.ts +36 -0
  402. package/src/runtime-assets.ts +7 -2
  403. package/src/runtime-delivery.ts +2 -0
  404. package/src/runtimePlatformContract.ts +70 -0
  405. package/src/screenshots/frame-compose.ts +42 -43
  406. package/src/screenshots/org-deck.ts +9 -4
  407. package/src/screenshots/preset-names.ts +29 -0
  408. package/src/screenshots/registry.ts +5 -5
  409. package/src/screenshots/schema.ts +1 -1
  410. package/src/screenshots/screenshotContract.ts +971 -0
  411. package/src/settings-flags.ts +107 -0
  412. package/src/settingsContract.ts +609 -0
  413. package/src/storageSnapshotContract.ts +344 -0
  414. package/src/stub-pattern-matcher.ts +550 -0
  415. package/src/swift-compile.ts +908 -40
  416. package/src/swift-compiler-digest.ts +13 -1
  417. package/src/swift-distribution.lock.json +49 -22
  418. package/src/swift-host.ts +167 -52
  419. package/src/swift-objc-compile.ts +54 -24
  420. package/src/swift-objc-export.ts +532 -0
  421. package/src/swift-objc-import.ts +769 -0
  422. package/src/swift-objc-metadata.ts +285 -10
  423. package/src/swift-objc-sdk.ts +13970 -158
  424. package/src/swift-objc-standin.ts +137 -1
  425. package/src/swift-package.ts +94 -0
  426. package/src/swift-packages.ts +5 -5
  427. package/src/swift-submit.ts +6 -0
  428. package/src/swiftContract.ts +99 -0
  429. package/src/target-matcher.ts +6 -1
  430. package/src/vite-plugin.ts +14 -40
  431. package/src/worker-system-chunks.ts +1 -1
  432. package/src/workerChunkContract.ts +5 -0
  433. package/src/worklets-babel.ts +24 -5
  434. package/src/xcode-project.ts +36 -7
  435. package/src/xcode-target-members.ts +10 -3
  436. package/cli/drivers/playwright-sim-host.ts +0 -825
  437. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  438. package/kotlin/fixtures/counter/Counter.kt +0 -51
  439. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  440. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  441. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  442. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  443. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  444. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  445. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  446. package/kotlin/fixtures/counter/package.json +0 -20
  447. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  448. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  449. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  450. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  451. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  452. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  453. package/kotlin/fixtures/import-animation/README.md +0 -24
  454. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  455. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  456. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  457. package/kotlin/fixtures/import-animation/package.json +0 -23
  458. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  459. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  460. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  462. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  463. package/kotlin/fixtures/import-drawing/README.md +0 -34
  464. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-drawing/package.json +0 -23
  467. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  468. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  469. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  470. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  471. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  472. package/kotlin/fixtures/import-editor/README.md +0 -27
  473. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  474. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  475. package/kotlin/fixtures/import-editor/package.json +0 -23
  476. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  477. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  478. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  479. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  480. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  481. package/kotlin/fixtures/import-effects/README.md +0 -19
  482. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  483. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  484. package/kotlin/fixtures/import-effects/package.json +0 -23
  485. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  486. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  487. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  488. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  490. package/kotlin/fixtures/import-layout/README.md +0 -24
  491. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  492. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  493. package/kotlin/fixtures/import-layout/package.json +0 -23
  494. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  495. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  496. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  497. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  498. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  499. package/kotlin/fixtures/import-navigation/README.md +0 -31
  500. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  501. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  502. package/kotlin/fixtures/import-navigation/package.json +0 -23
  503. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  504. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  505. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  506. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  507. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  508. package/kotlin/fixtures/import-overlays/README.md +0 -34
  509. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  510. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  511. package/kotlin/fixtures/import-overlays/package.json +0 -23
  512. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  513. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  514. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  515. package/kotlin/fixtures/import-resources/README.md +0 -26
  516. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  517. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  518. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  519. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  520. package/kotlin/fixtures/import-resources/package.json +0 -23
  521. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  522. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  523. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  524. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  525. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  526. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  527. package/kotlin/fixtures/import-scroll/README.md +0 -38
  528. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  529. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  530. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  531. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  532. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  533. package/kotlin/fixtures/import-scroll/package.json +0 -23
  534. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  535. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  536. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  537. package/kotlin/fixtures/import-selection/README.md +0 -32
  538. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  539. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  540. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-selection/package.json +0 -23
  543. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  544. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  545. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  546. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  547. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  548. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  549. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  550. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  551. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  552. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  553. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  554. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  555. package/kotlin/fixtures/import-values/README.md +0 -28
  556. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  557. package/kotlin/fixtures/import-values/Values.kt +0 -84
  558. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  559. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  560. package/kotlin/fixtures/import-values/package.json +0 -23
  561. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  562. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  563. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  564. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  565. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  566. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  567. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  568. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  569. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  570. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  571. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  572. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  573. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  574. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  575. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  576. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  577. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  578. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  579. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  580. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  582. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  583. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  584. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  585. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  586. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  587. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  589. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  590. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  591. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  592. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  593. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  594. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  595. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  596. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  597. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  598. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  599. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  600. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  601. package/kotlin/fork/README.md +0 -97
  602. package/kotlin/fork/build.sh +0 -176
  603. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  604. package/kotlin/fork/fork.json +0 -46
  605. package/kotlin/fork/publish.ts +0 -99
  606. package/kotlin/fork/skia-android-shaping.patch +0 -189
  607. package/kotlin/fork/skiko-local.init.gradle +0 -10
  608. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -0,0 +1,3311 @@
1
+ import type { FrameBreakdownCapture } from './frameBreakdownContract.d.ts';
2
+ import type { PointerSourceEvent } from './pointerSourceEventContract.d.ts';
3
+ import type { ProfileFile, SootSimProfilerBridge } from './profilerContract.d.ts';
4
+ export type { PointerSourceEvent } from './pointerSourceEventContract.d.ts';
5
+ export type PreviewCaptureKind = 'recording' | 'run';
6
+ export type NativeScreenCaptureState = 'active' | 'inactive' | 'unspecified';
7
+ export declare function isPreviewCaptureKind(value: unknown): value is PreviewCaptureKind;
8
+ export type PeachRecordingMode = 'scene' | 'video' | 'live' | 'combined';
9
+ export type PeachRecordingStartOptions = {
10
+ liveBundle?: boolean;
11
+ video?: boolean;
12
+ skipEntitlement?: boolean;
13
+ capture?: PreviewCaptureKind;
14
+ };
15
+ type Listener<T> = (value: T) => void;
16
+ export type Emitter<T> = {
17
+ value: T;
18
+ emit: (value: T) => void;
19
+ listen: (fn: Listener<T>) => () => void;
20
+ nextValue: () => Promise<T>;
21
+ };
22
+ export type NativeViewMeasureMode = 'undefined' | 'exactly' | 'at-most';
23
+ export type NativeViewMeasure = (width: number, widthMode: NativeViewMeasureMode, height: number, heightMode: NativeViewMeasureMode) => {
24
+ width: number;
25
+ height: number;
26
+ };
27
+ export type PeachNativeWorkletEventDispatcher = (viewTag: number, event: {
28
+ eventName?: string;
29
+ } & Record<string, unknown>, options?: {
30
+ deferFlush?: boolean;
31
+ timestamp?: number;
32
+ localOnly?: boolean;
33
+ }) => void;
34
+ export interface SootsimBridgeStatusDetail {
35
+ id?: string | null;
36
+ isPrimary?: boolean;
37
+ url?: string;
38
+ title?: string;
39
+ attachedCliCount?: number;
40
+ activeAgentCommandCount?: number;
41
+ recentActions?: ReadonlyArray<unknown>;
42
+ lockedBy?: string | null;
43
+ lockedByKind?: string | null;
44
+ lockExpiresAt?: number;
45
+ userFocused?: boolean;
46
+ userVisible?: boolean | null;
47
+ visibilityState?: string | null;
48
+ documentFocused?: boolean | null;
49
+ hasClientActivity?: boolean;
50
+ }
51
+ export interface SootsimActiveAppChangeDetail {
52
+ activeAppId: string | null;
53
+ activeAppName: string | null;
54
+ isAppOpen: boolean;
55
+ }
56
+ export type SootsimSettingsPage = 'root' | 'accessibility' | 'display-and-text-size' | 'larger-text' | 'notifications' | 'apps' | 'privacy' | 'apple-account';
57
+ export type SootsimSettingsRoute = {
58
+ kind: 'app';
59
+ appId: string;
60
+ } | {
61
+ kind: 'system';
62
+ page: SootsimSettingsPage;
63
+ };
64
+ export interface SootsimNavigateAppDetail {
65
+ appId?: string;
66
+ settingsPage?: SootsimSettingsPage;
67
+ route?: {
68
+ kind: 'rn';
69
+ id: string;
70
+ };
71
+ replace?: boolean;
72
+ }
73
+ export interface SootsimNavigateHomeDetail {
74
+ replace?: boolean;
75
+ }
76
+ export interface SootsimEmbedVisibilityDetail {
77
+ visible: boolean;
78
+ }
79
+ export type SootsimEmbedInteraction = {
80
+ kind: 'press';
81
+ target: {
82
+ kind: 'id' | 'text';
83
+ value: string;
84
+ };
85
+ } | {
86
+ kind: 'drag';
87
+ from: {
88
+ x: number;
89
+ y: number;
90
+ };
91
+ to: {
92
+ x: number;
93
+ y: number;
94
+ };
95
+ durationMs: number;
96
+ };
97
+ export interface SootsimEngineFailureDetail {
98
+ reason: string;
99
+ detail?: string;
100
+ }
101
+ export type SootsimBootStage = 'engine' | 'tenant' | 'shell-booted' | 'shell-modules' | 'shell-mounted' | 'painted';
102
+ export declare const SOOTSIM_BOOT_STAGE_ORDER: Record<SootsimBootStage, number>;
103
+ export declare const SOOTSIM_TENANT_READY_MARK = "sootsim:tenant-ready";
104
+ export type SootsimBootMarkName = 'wasm-body' | 'worker-ready' | 'compositor-ready' | 'tenant-commit' | 'app-paint' | 'canvaskit-init' | 'corpus-loaded' | 'home-tree' | 'home-paint';
105
+ export interface SootsimBootMark {
106
+ name: SootsimBootMarkName;
107
+ atEpochMs: number;
108
+ }
109
+ export declare const SOOTSIM_BOOT_MARKS_GLOBAL = "__sootsimBootMarks";
110
+ export interface SootsimHostKeyDetail {
111
+ key: string;
112
+ code?: string;
113
+ phase?: 'press' | 'release';
114
+ repeat?: boolean;
115
+ shift?: boolean;
116
+ alt?: boolean;
117
+ meta?: boolean;
118
+ ctrl?: boolean;
119
+ }
120
+ export interface SootsimHapticActivityDetail {
121
+ strength: number;
122
+ source?: string;
123
+ }
124
+ export type SootsimColorScheme = 'light' | 'dark' | 'auto';
125
+ export type SootsimTopOverlayKind = 'none' | 'notification-center' | 'control-center';
126
+ export interface SootsimEventMap {
127
+ 'peach:device-frame-layout': void;
128
+ 'sootsim:goHome': null;
129
+ 'sootsim:appSwitcher': null;
130
+ 'sootsim:toggleLock': null;
131
+ 'sootsim:shake': null;
132
+ 'sootsim:screenshotTaken': null;
133
+ 'peach:screenCaptureState': NativeScreenCaptureState;
134
+ 'sootsim:openNotificationCenter': null;
135
+ 'sootsim:closeNotificationCenter': null;
136
+ 'sootsim:openControlCenter': null;
137
+ 'sootsim:closeControlCenter': null;
138
+ 'sootsim:setTopOverlay': {
139
+ overlay: SootsimTopOverlayKind;
140
+ };
141
+ 'sootsim:inspectModeChange': {
142
+ active: boolean;
143
+ };
144
+ 'sootsim:ringHint': null;
145
+ 'sootsim:ringModeChange': {
146
+ mode: 'ring' | 'silent';
147
+ };
148
+ 'sootsim:homeIntro': null;
149
+ 'sootsim:hoverPosition': {
150
+ x: number;
151
+ y: number;
152
+ };
153
+ 'sootsim:hoverLeave': null;
154
+ 'sootsim:inspectSelectPosition': {
155
+ x: number;
156
+ y: number;
157
+ };
158
+ 'sootsim:prewarmApp': {
159
+ appId: string;
160
+ iconPosition?: {
161
+ x: number;
162
+ y: number;
163
+ };
164
+ };
165
+ 'sootsim:cancelPrewarmApp': null;
166
+ 'sootsim:colorSchemeChange': {
167
+ scheme: SootsimColorScheme;
168
+ };
169
+ 'sootsim:activeAppChange': SootsimActiveAppChangeDetail;
170
+ 'sootsim:navigateApp': SootsimNavigateAppDetail;
171
+ 'sootsim:navigateHome': SootsimNavigateHomeDetail;
172
+ 'sootsim:demoBundleModeChange': {
173
+ mode: 'development' | 'production';
174
+ };
175
+ 'sootsim:urlstatechange': null;
176
+ 'sootsim:externalAppReady': null;
177
+ 'sootsim:externalAppError': null;
178
+ 'sootsim:previewReloadRequest': null;
179
+ 'sootsim:externalAppReloadStart': {
180
+ entryPath: string;
181
+ };
182
+ 'sootsim:bridgeStatusChange': SootsimBridgeStatusDetail;
183
+ 'sootsim:hostFocusChange': {
184
+ focused: boolean;
185
+ };
186
+ 'sootsim:embed-visibility-change': SootsimEmbedVisibilityDetail;
187
+ 'sootsim:hostKey': SootsimHostKeyDetail;
188
+ 'sootsim:bundleProgress': {
189
+ percent: number;
190
+ };
191
+ 'sootsim:bootStage': {
192
+ stage: SootsimBootStage;
193
+ };
194
+ 'sootsim:engineFailure': SootsimEngineFailureDetail;
195
+ 'sootsim:uploadActivity': {
196
+ phase: 'uploading' | 'copied' | 'failed' | 'done';
197
+ immediate?: boolean;
198
+ };
199
+ 'sootsim:hapticActivity': SootsimHapticActivityDetail;
200
+ 'sootsim:statusBarOverride': {
201
+ time?: string | null;
202
+ };
203
+ 'sootsim:previewReplayClock': {
204
+ nowMs: number;
205
+ advancing?: boolean;
206
+ };
207
+ 'sootsim:menuAnimOverride': {
208
+ value: number | null;
209
+ highlightMoveDuration?: number | null;
210
+ liquidGlass?: {
211
+ light?: Record<string, unknown>;
212
+ dark?: Record<string, unknown>;
213
+ } | null;
214
+ };
215
+ 'sootsim:agentAction': SootSimAgentActionDetail;
216
+ 'sootsim:hardwareKeyboardInput': SootSimHardwareKeyboardInputDetail;
217
+ 'sootsim:bootClients': null;
218
+ 'sootsim:plugin-bridge-ready': {
219
+ plugin: string;
220
+ };
221
+ 'sootsim:agent-bridge-change': {
222
+ available: boolean;
223
+ };
224
+ 'contrast-preview-reload': {
225
+ target?: 'web' | 'ios' | 'android';
226
+ } | null;
227
+ 'sootsim:bootMark': SootsimBootMark;
228
+ }
229
+ export type SootsimEventName = keyof SootsimEventMap;
230
+ export declare function dispatchSootsimEvent<K extends SootsimEventName>(name: K, detail: SootsimEventMap[K], target?: EventTarget): void;
231
+ export declare function listenSootsimEvent<K extends SootsimEventName>(name: K, handler: (detail: SootsimEventMap[K]) => void, target?: EventTarget): () => void;
232
+ export interface SootSimChrome {
233
+ shell: boolean;
234
+ headless: boolean;
235
+ electron: boolean;
236
+ engineBase: string | null;
237
+ engineTenantBase: string | null;
238
+ demo: boolean;
239
+ demoGatewayOrigin: string | null;
240
+ preview: boolean;
241
+ }
242
+ type MaybeAsync<T> = T | Promise<T>;
243
+ export interface SootSimTestQueryFilter {
244
+ type?: string;
245
+ hasText?: string;
246
+ hasId?: string;
247
+ idPattern?: string | {
248
+ source: string;
249
+ flags: string;
250
+ matchLastSegment?: boolean;
251
+ };
252
+ hasRole?: string;
253
+ hasLabel?: string;
254
+ hasHint?: string;
255
+ hasState?: Partial<SootSimAccessibilityState>;
256
+ pruneHidden?: boolean;
257
+ }
258
+ export interface SootSimTextCandidatesOptions {
259
+ query: string;
260
+ exact?: boolean;
261
+ role?: string;
262
+ }
263
+ export interface SootSimTextCandidate {
264
+ info: SootSimNodeInfo;
265
+ ancestorTestIDs: string[];
266
+ ancestorPickerColumnIndices: number[];
267
+ }
268
+ export interface SootSimTextCandidatesResult {
269
+ total: number;
270
+ candidates: SootSimTextCandidate[];
271
+ }
272
+ export interface SootSimDumpTreeOptions {
273
+ describe?: boolean;
274
+ verbose?: boolean;
275
+ filter?: string;
276
+ testIdLike?: string;
277
+ onlyGlob?: string;
278
+ subtreeRoot?: string;
279
+ compact?: boolean;
280
+ hideXy?: boolean;
281
+ fullText?: boolean;
282
+ includeOccluded?: boolean;
283
+ format?: 'boxes';
284
+ }
285
+ export interface SootSimInspectPointOptions {
286
+ excludeTestId?: string;
287
+ excludeTestIds?: string[];
288
+ }
289
+ export interface SootSimListInspectableOptions {
290
+ excludeTestIds?: string[];
291
+ }
292
+ export type SootSimInspectNeighborDirection = 'parent' | 'firstChild' | 'prevSibling' | 'nextSibling';
293
+ export type SootSimGestureCallback = 'onBegin' | 'onStart' | 'onUpdate' | 'onEnd' | 'onFinalize';
294
+ export interface SootSimTapPathEntry {
295
+ nodeId?: number;
296
+ type: string;
297
+ testID?: string;
298
+ text?: string;
299
+ }
300
+ export interface SootSimTapRefusal {
301
+ hit: false;
302
+ requestedTargetMatched: false;
303
+ reason: 'target-covered' | 'target-not-found';
304
+ requestedTarget: SootSimReplayTarget;
305
+ coordinateTarget: SootSimReplayTarget | null;
306
+ }
307
+ export interface SootSimTapTargetMatch {
308
+ requestedTargetMatched: true;
309
+ requestedTarget: SootSimReplayTarget;
310
+ coordinateTarget: SootSimReplayTarget;
311
+ }
312
+ export type SootSimTapTargetVerification = SootSimTapTargetMatch | SootSimTapRefusal;
313
+ export interface SootSimTapResult extends Partial<Omit<SootSimTapRefusal, 'hit'>> {
314
+ hit: boolean;
315
+ type?: string;
316
+ testID?: string;
317
+ isTextInput?: boolean;
318
+ keyboardOpened?: boolean;
319
+ text?: string;
320
+ responderTestID?: string;
321
+ responderType?: string;
322
+ path?: SootSimTapPathEntry[];
323
+ directTapHandled?: boolean;
324
+ pointerTapHandled?: boolean;
325
+ }
326
+ export type SootSimTapTargetStrategy = 'matched-node' | 'actionable-ancestor' | 'actionable-descendant';
327
+ export interface SootSimTapTargetInfo {
328
+ match: SootSimNodeInfo;
329
+ target: SootSimNodeInfo;
330
+ cx: number;
331
+ cy: number;
332
+ strategy: SootSimTapTargetStrategy;
333
+ viewport: {
334
+ width: number;
335
+ height: number;
336
+ };
337
+ }
338
+ export interface SootSimRouteInfo {
339
+ routeNames: string[];
340
+ currentPath: string | null;
341
+ coveringPath: string | null;
342
+ canGoBack: boolean;
343
+ rootState: unknown;
344
+ }
345
+ export interface SootSimUndeclaredScreen {
346
+ navigator: string;
347
+ screen: string;
348
+ declared: string[];
349
+ settledMs: number;
350
+ }
351
+ export interface SootSimScrollToResult {
352
+ ok: boolean;
353
+ via?: string;
354
+ reason?: string;
355
+ }
356
+ export interface SootSimCursorState {
357
+ nodeId: number;
358
+ position: number;
359
+ opacity: number;
360
+ visible: boolean;
361
+ captureActive: boolean;
362
+ rect?: {
363
+ x: number;
364
+ y: number;
365
+ width: number;
366
+ height: number;
367
+ } | null;
368
+ }
369
+ export interface SootSimLoupeState {
370
+ x: number;
371
+ y: number;
372
+ active: boolean;
373
+ }
374
+ export interface SootSimEditMenuRect {
375
+ x: number;
376
+ y: number;
377
+ width: number;
378
+ height: number;
379
+ }
380
+ export interface SootSimEditMenuItem {
381
+ action: string;
382
+ label: string;
383
+ }
384
+ export interface SootSimEditMenuState {
385
+ items: SootSimEditMenuItem[];
386
+ anchor: SootSimEditMenuRect;
387
+ barRect: SootSimEditMenuRect | null;
388
+ itemRects: Array<SootSimEditMenuRect & {
389
+ action: string;
390
+ }>;
391
+ }
392
+ export interface SootSimTextSelection {
393
+ start: number | null;
394
+ end: number | null;
395
+ }
396
+ export interface SootSimTextSelectionHandles {
397
+ start: {
398
+ x: number;
399
+ y: number;
400
+ } | null;
401
+ end: {
402
+ x: number;
403
+ y: number;
404
+ } | null;
405
+ }
406
+ export interface SootSimRequestEntry {
407
+ kind: 'fetch';
408
+ runtime: 'window' | 'worker';
409
+ method: string;
410
+ url: string;
411
+ displayUrl: string;
412
+ timestamp: number;
413
+ ok: boolean;
414
+ status: number | null;
415
+ statusText: string | null;
416
+ error: string | null;
417
+ responseBody: string | null;
418
+ requestBody?: string | null;
419
+ }
420
+ export interface SootSimRequestCounts {
421
+ total: number;
422
+ failed: number;
423
+ inFlight: number;
424
+ }
425
+ export type SootSimAnimationSource = 'value' | 'engine' | 'native' | 'reanimated';
426
+ export interface SootSimAnimationInfo {
427
+ id: number;
428
+ kind: 'timing' | 'spring' | 'linearLoop' | 'program' | 'formSheetSettle' | 'timed' | 'interpolate' | 'native' | 'reanimated';
429
+ source: SootSimAnimationSource;
430
+ realm: 'tenant' | 'shell';
431
+ from?: number;
432
+ to?: number;
433
+ current: number | null;
434
+ animatedValue: number | null;
435
+ startedAt?: number;
436
+ elapsedMs: number;
437
+ progress?: number;
438
+ duration?: number;
439
+ easing?: string;
440
+ stiffness?: number;
441
+ damping?: number;
442
+ mass?: number;
443
+ velocity?: number;
444
+ loop?: boolean;
445
+ layoutBound?: boolean;
446
+ listenerCount: number;
447
+ graphBacked?: boolean;
448
+ remoteDriven?: boolean;
449
+ priority?: string;
450
+ visible?: boolean;
451
+ }
452
+ export interface SootSimAnimationTraceSample {
453
+ t: number;
454
+ value: number;
455
+ velocity: number;
456
+ }
457
+ export interface SootSimAnimationTraceStatus {
458
+ id: number;
459
+ count: number;
460
+ limit: number;
461
+ }
462
+ export interface SootSimRuntimeState {
463
+ url: string;
464
+ hidden: boolean;
465
+ nodeCount: number;
466
+ animations: {
467
+ active: number;
468
+ byKind: {
469
+ timing: number;
470
+ spring: number;
471
+ };
472
+ };
473
+ keyboard: {
474
+ visible: boolean;
475
+ mode: string | null;
476
+ };
477
+ diagnostics: {
478
+ errors: number;
479
+ warnings: number;
480
+ failedRequests: number;
481
+ totalRequests: number;
482
+ };
483
+ shell?: Record<string, unknown> | null;
484
+ }
485
+ export interface SootSimScreenTransitionWaitOptions {
486
+ timeoutMs?: number;
487
+ settleMs?: number;
488
+ startWindowMs?: number;
489
+ }
490
+ export interface SootSimScreenTransitionWaitResult {
491
+ started: boolean;
492
+ settled: boolean;
493
+ timedOut: boolean;
494
+ activeCount: number;
495
+ peakActiveCount: number;
496
+ waitedMs: number;
497
+ restedMs: number;
498
+ }
499
+ export interface SootSimInspectDeviceInfo {
500
+ platform: 'ios' | 'android';
501
+ model: string;
502
+ name: string;
503
+ width: number;
504
+ height: number;
505
+ scale: number;
506
+ statusBarHeight?: number;
507
+ cornerRadius?: number;
508
+ dynamicIsland?: {
509
+ width: number;
510
+ height: number;
511
+ top: number;
512
+ } | null;
513
+ osVersion: string;
514
+ iosVersion: string;
515
+ androidApiLevel?: number | null;
516
+ }
517
+ export interface SootSimInspectAncestor {
518
+ nodeId?: number;
519
+ type: string;
520
+ text?: string;
521
+ componentName?: string;
522
+ id?: string;
523
+ testID?: string;
524
+ testId?: string;
525
+ role?: string;
526
+ label?: string;
527
+ accessibilityLabel?: string;
528
+ screenId?: string;
529
+ srcloc?: string;
530
+ sourceFile?: string;
531
+ }
532
+ export interface SootSimInspectBoxModel {
533
+ margin: {
534
+ top: number;
535
+ right: number;
536
+ bottom: number;
537
+ left: number;
538
+ };
539
+ border: {
540
+ top: number;
541
+ right: number;
542
+ bottom: number;
543
+ left: number;
544
+ };
545
+ padding: {
546
+ top: number;
547
+ right: number;
548
+ bottom: number;
549
+ left: number;
550
+ };
551
+ content: {
552
+ width: number;
553
+ height: number;
554
+ };
555
+ }
556
+ export interface SootSimInspectImageSource {
557
+ kind: 'uri' | 'metro-asset' | 'module-default';
558
+ assetId?: number;
559
+ uri?: string;
560
+ assetPath?: string;
561
+ assetFile?: string;
562
+ modulePath?: string;
563
+ width?: number;
564
+ height?: number;
565
+ scale?: number;
566
+ }
567
+ export type SootSimInspectHookKind = 'state' | 'reducer' | 'effect' | 'layoutEffect' | 'insertionEffect' | 'memo' | 'callback' | 'ref' | 'context' | 'other';
568
+ export interface SootSimInspectHookSummary {
569
+ total: number;
570
+ counts: Partial<Record<SootSimInspectHookKind, number>>;
571
+ }
572
+ export type SootSimInspectCommitCause = 'mount' | 'props' | 'state' | 'context' | 'parent';
573
+ export interface SootSimInspectLastCommit {
574
+ ageMs: number;
575
+ causes: SootSimInspectCommitCause[];
576
+ propDiffs?: string[];
577
+ stateChanged?: boolean;
578
+ actualDurationMs?: number;
579
+ }
580
+ export interface SootSimInspectReactInfo {
581
+ component?: string;
582
+ owners?: string[];
583
+ source?: string;
584
+ key?: string;
585
+ hasRef?: boolean;
586
+ hooks?: SootSimInspectHookSummary;
587
+ contexts?: string[];
588
+ lastCommit?: SootSimInspectLastCommit;
589
+ }
590
+ export interface SootSimInspectNavigationInfo {
591
+ appId?: string;
592
+ appName?: string;
593
+ screenId?: string;
594
+ routeName?: string;
595
+ routePath?: string;
596
+ params?: Record<string, unknown>;
597
+ stackDepth?: number;
598
+ stackTrail?: string[];
599
+ presentation?: string;
600
+ }
601
+ export interface SootSimInspectTimelineEntry {
602
+ ageMs: number;
603
+ kind: string;
604
+ context: 'host' | 'shell' | 'tenant';
605
+ label?: string;
606
+ }
607
+ export interface SootSimInspectTreeNode {
608
+ nodeId: number;
609
+ parentId: number | null;
610
+ type: string;
611
+ components?: string[];
612
+ testID?: string;
613
+ label?: string;
614
+ text?: string;
615
+ width: number;
616
+ height: number;
617
+ pressable?: boolean;
618
+ hidden?: boolean;
619
+ }
620
+ export interface SootSimInspectInfo {
621
+ nodeId: number;
622
+ sessionId?: string;
623
+ type: string;
624
+ componentName?: string;
625
+ componentStack?: string[];
626
+ id?: string;
627
+ testID?: string;
628
+ testId?: string;
629
+ role?: string;
630
+ label?: string;
631
+ accessibilityLabel?: string;
632
+ accessibilityHidden?: true;
633
+ readsFirst?: true;
634
+ accessibilityContainer?: true;
635
+ accessibilityFrame?: SootSimInspectInfo['absolute'];
636
+ screenId?: string;
637
+ hint?: string;
638
+ text?: string;
639
+ layout: {
640
+ x: number;
641
+ y: number;
642
+ width: number;
643
+ height: number;
644
+ };
645
+ absolute: {
646
+ x: number;
647
+ y: number;
648
+ width: number;
649
+ height: number;
650
+ };
651
+ backgroundPlayback?: true;
652
+ visibleFrame?: SootSimVisibleFrame | null;
653
+ handlers: string[];
654
+ style: Record<string, unknown>;
655
+ authoredStyle: Record<string, unknown>;
656
+ computedStyle: Record<string, unknown>;
657
+ boxModel: SootSimInspectBoxModel;
658
+ parentId?: number;
659
+ prevSiblingId?: number;
660
+ nextSiblingId?: number;
661
+ firstChildId?: number;
662
+ ancestors: SootSimInspectAncestor[];
663
+ appName?: string;
664
+ appearanceScheme?: string;
665
+ device?: SootSimInspectDeviceInfo;
666
+ srcloc?: string;
667
+ sourceFile?: string;
668
+ sourceChain?: string[];
669
+ imageSource?: SootSimInspectImageSource;
670
+ react?: SootSimInspectReactInfo;
671
+ navigation?: SootSimInspectNavigationInfo;
672
+ timeline?: SootSimInspectTimelineEntry[];
673
+ }
674
+ export type PeachSemanticInspectInfo = Pick<SootSimInspectInfo, 'nodeId' | 'type' | 'testID' | 'testId' | 'id' | 'text' | 'role' | 'accessibilityLabel' | 'label' | 'handlers' | 'accessibilityHidden' | 'absolute' | 'parentId' | 'readsFirst'> & {
675
+ ancestors: Array<Pick<SootSimInspectAncestor, 'nodeId'>>;
676
+ };
677
+ export interface PointerDispatchOptions {
678
+ sourceEvent?: PointerSourceEvent;
679
+ altKey?: boolean;
680
+ shiftKey?: boolean;
681
+ pointerType?: string;
682
+ stylusData?: {
683
+ tiltX: number;
684
+ tiltY: number;
685
+ altitudeAngle: number;
686
+ azimuthAngle: number;
687
+ pressure: number;
688
+ };
689
+ timestamp?: number;
690
+ nativeWindowRoot?: number;
691
+ }
692
+ export interface PeachAccessibilityNode {
693
+ platform: SootSimInspectDeviceInfo['platform'];
694
+ elementId: string;
695
+ nodeId: number;
696
+ type: string;
697
+ testID: string | null;
698
+ label: string | null;
699
+ hint: string | null;
700
+ inputLabels?: string[] | null;
701
+ traits?: string[];
702
+ value: string | null;
703
+ placeholder: string | null;
704
+ role: string;
705
+ isAccessibilityElement: boolean;
706
+ enabled: boolean;
707
+ selected: boolean;
708
+ checked: boolean;
709
+ clickable: boolean;
710
+ isTextInput: boolean;
711
+ state: SootSimAccessibilityState | null;
712
+ accessibilityValue: SootSimAccessibilityValue | null;
713
+ hasFocus?: boolean;
714
+ frame: {
715
+ x: number;
716
+ y: number;
717
+ width: number;
718
+ height: number;
719
+ };
720
+ children: PeachAccessibilityNode[];
721
+ }
722
+ export type PeachSwiftUiAccessibility = Pick<PeachAccessibilityNode, 'testID' | 'role'> & Required<Pick<PeachAccessibilityNode, 'inputLabels' | 'traits'>>;
723
+ export type PeachDebugSnapshotOperation = 'snapshot' | 'snapshots' | 'diff' | 'clearSnapshots';
724
+ export interface SootSimTargetMatcher {
725
+ type: 'id' | 'text' | 'label' | 'type' | 'role';
726
+ value: string;
727
+ regexFlags?: string;
728
+ index?: number;
729
+ }
730
+ export interface SootSimTargetObservation extends SootSimNodeInfo {
731
+ tapPoint: {
732
+ x: number;
733
+ y: number;
734
+ } | null;
735
+ sampledAt: number;
736
+ }
737
+ export interface PeachPeerStatsProgress {
738
+ tenant: 'pending' | 'replied' | 'null' | 'rejected';
739
+ shell: 'pending' | 'replied' | 'null' | 'rejected' | 'absent';
740
+ }
741
+ export interface PeachPeerStats {
742
+ replayedFrameCallbacks: number;
743
+ nativeFrameFirstTimestampMs: number | null;
744
+ writeRequests: number;
745
+ batchesSent: number;
746
+ pendingRunWorklets?: number;
747
+ runWorkletsIdleMs: number | null;
748
+ runWorkletsSent?: number;
749
+ runWorkletsDone?: number;
750
+ runWorkletsFailed?: number;
751
+ closureCacheHits?: number;
752
+ closureCacheMisses?: number;
753
+ }
754
+ export interface SootSimTestBridge {
755
+ resolveViewTags?(tags: readonly number[]): MaybeAsync<Record<number, {
756
+ component: string | null;
757
+ sourceChain?: string[];
758
+ }>>;
759
+ dispatchTextInputText?(text: string, nodeId: number): MaybeAsync<GuardedTextInputResult>;
760
+ captureAccessibilityTree(): MaybeAsync<PeachAccessibilityNode[]>;
761
+ startScrollPerformanceTrace(limit?: number): MaybeAsync<void>;
762
+ stopScrollPerformanceTrace(): MaybeAsync<SootSimScrollOffsetSample[]>;
763
+ setShellReanimatedTraceEnabled?(enabled: boolean, reset?: boolean, limit?: number): MaybeAsync<boolean>;
764
+ getShellReanimatedTrace?(reset?: boolean): MaybeAsync<unknown[]>;
765
+ findById(id: string): MaybeAsync<SootSimNodeInfo | null>;
766
+ findByTestId(testId: string): MaybeAsync<SootSimNodeInfo | null>;
767
+ ancestorChainById(id: string): MaybeAsync<SootSimNodeInfo[] | null>;
768
+ ancestorChainByTestId(testId: string): MaybeAsync<SootSimNodeInfo[] | null>;
769
+ findByText(text: string): MaybeAsync<SootSimNodeInfo | null>;
770
+ findByTextOrLabel(text: string): MaybeAsync<SootSimNodeInfo | null>;
771
+ queryMatchingNodes(matcher: SootSimTargetMatcher): MaybeAsync<SootSimNodeInfo[]>;
772
+ observeTapTarget(matcher: SootSimTargetMatcher): MaybeAsync<SootSimTargetObservation | null>;
773
+ resolveTapTarget(nodeId: number): MaybeAsync<SootSimTapTargetInfo | null>;
774
+ verifyTapTargetAt(x: number, y: number, target: SootSimReplayTarget, nativeWindowRoot?: number): MaybeAsync<SootSimTapTargetVerification>;
775
+ debugByText(text: string): MaybeAsync<SootSimDebugNodeInfo[] | null>;
776
+ debugByTestId(testId: string): MaybeAsync<SootSimDebugNodeInfo[] | null>;
777
+ findByLabel(label: string): MaybeAsync<SootSimNodeInfo | null>;
778
+ findByRole(role: string): MaybeAsync<SootSimNodeInfo | null>;
779
+ findAllByRole(role: string): MaybeAsync<SootSimNodeInfo[]>;
780
+ findByA11yState(state: Partial<SootSimAccessibilityState>): MaybeAsync<SootSimNodeInfo | null>;
781
+ findAllByA11yState(state: Partial<SootSimAccessibilityState>): MaybeAsync<SootSimNodeInfo[]>;
782
+ findByHint(hint: string): MaybeAsync<SootSimNodeInfo | null>;
783
+ inspectAt(x: number, y: number, opts?: SootSimInspectPointOptions): MaybeAsync<SootSimInspectInfo | null>;
784
+ inspectHoverAt(x: number, y: number, opts?: SootSimInspectPointOptions): MaybeAsync<SootSimInspectInfo | null>;
785
+ inspectByNodeId(nodeId: number): MaybeAsync<SootSimInspectInfo | null>;
786
+ inspectLastTap(): MaybeAsync<SootSimInspectInfo | null>;
787
+ inspectNeighbor(nodeId: number, direction: SootSimInspectNeighborDirection): MaybeAsync<SootSimInspectInfo | null>;
788
+ inspectSetStyleOverride(nodeId: number, key: string, value: unknown): MaybeAsync<boolean>;
789
+ inspectSetHandlerLogging(nodeId: number, handlerName: string, enabled: boolean): MaybeAsync<boolean>;
790
+ listInspectable(opts?: SootSimListInspectableOptions): MaybeAsync<SootSimInspectInfo[]>;
791
+ listSemanticInspectable(opts?: SootSimListInspectableOptions): MaybeAsync<PeachSemanticInspectInfo[]>;
792
+ inspectTree(): MaybeAsync<SootSimInspectTreeNode[] | null>;
793
+ captureRenderTree?(): MaybeAsync<SootSimRenderTreeSnapshot>;
794
+ beginCaptureTransaction?(): MaybeAsync<SootSimCaptureTransactionReceipt>;
795
+ endCaptureTransaction?(token: number): MaybeAsync<SootSimCaptureTransactionReceipt>;
796
+ captureBoundLongPress?(token: number, x: number, y: number, durationMs?: number, nativeWindowRoot?: number): MaybeAsync<SootSimCaptureBoundLongPressReceipt>;
797
+ captureBoundTap?(token: number, x: number, y: number, nativeWindowRoot?: number): MaybeAsync<SootSimCaptureBoundTapReceipt>;
798
+ debugHitAt(x: number, y: number): MaybeAsync<SootSimDebugNodeInfo[] | null>;
799
+ debugGestureAt(x: number, y: number): MaybeAsync<Record<string, unknown> | null>;
800
+ invokeGestureAt(x: number, y: number, gestureType: string, callback: SootSimGestureCallback): MaybeAsync<boolean>;
801
+ findPressable(): MaybeAsync<SootSimNodeInfo[]>;
802
+ getStyle(id: string): MaybeAsync<Record<string, unknown> | null>;
803
+ getLayout(id: string): MaybeAsync<SootSimLayout | null>;
804
+ getAbsolutePosition(id: string): MaybeAsync<{
805
+ x: number;
806
+ y: number;
807
+ } | null>;
808
+ isVisible(id: string): MaybeAsync<boolean>;
809
+ blurFocusedTextInput(): MaybeAsync<boolean>;
810
+ isTextInputFocused(): MaybeAsync<boolean>;
811
+ getFocusedNode(): MaybeAsync<SootSimFocusedNodeInfo | null>;
812
+ getNodeCount(): MaybeAsync<number>;
813
+ getWindowNodeCount(): MaybeAsync<number>;
814
+ getTreeQuietMs(): MaybeAsync<number>;
815
+ getGeometryRevision(): MaybeAsync<string | null>;
816
+ getCullStats?(reset?: boolean): MaybeAsync<{
817
+ examined: number;
818
+ kept: number;
819
+ skipped: number;
820
+ }>;
821
+ getImageLoaderStats?(reset?: boolean): MaybeAsync<Record<string, unknown>>;
822
+ getFontDebug?(family?: string, fontWeight?: unknown): MaybeAsync<Record<string, unknown>>;
823
+ getIncrementalYogaVerifier?(): MaybeAsync<{
824
+ enabled: boolean;
825
+ runs: number;
826
+ comparedNodes: number;
827
+ diverged: number;
828
+ lastRootId: number | null;
829
+ lastComparedNodes: number;
830
+ lastDivergences: number;
831
+ lastDiffs: string[];
832
+ }>;
833
+ getPeerStats?(reset?: boolean): PeachPeerStats | null | (Promise<PeachPeerStats | null> & {
834
+ peachPeerProgress?: PeachPeerStatsProgress;
835
+ });
836
+ getWorkletSlotStats?(): MaybeAsync<{
837
+ role: 'tenant' | 'shell' | 'host';
838
+ capacity: number;
839
+ nextId: number;
840
+ freeSlots: number;
841
+ freedSlots: number;
842
+ nextObjectId: number;
843
+ freeObjectSlots: number;
844
+ freedObjectSlots: number;
845
+ primitiveAllocs: number;
846
+ objectAllocs: number;
847
+ reusedAllocs: number;
848
+ frees: number;
849
+ listenerSlots: number;
850
+ objectListenerSlots: number;
851
+ objectSlots: number;
852
+ pendingPrimitiveUpdates: number;
853
+ pendingObjectUpdates: number;
854
+ runJSCallbackSent: number;
855
+ runJSCallbackReceived: number;
856
+ runJSCallbackMissing: number;
857
+ eventHandlers: number;
858
+ hasPeer: boolean;
859
+ eventHandlerNames: Array<[string, number]>;
860
+ remoteEventHandlers: number;
861
+ keyboardHandlers: number;
862
+ } | null>;
863
+ queryAll(filter: SootSimTestQueryFilter): MaybeAsync<SootSimNodeInfo[]>;
864
+ queryTextCandidates(opts: SootSimTextCandidatesOptions): MaybeAsync<SootSimTextCandidatesResult>;
865
+ dumpTree(maxDepth?: number, opts?: SootSimDumpTreeOptions): MaybeAsync<string>;
866
+ dumpAccessibilityTree(maxDepth?: number): MaybeAsync<string>;
867
+ debugFind(target: 'sheets' | 'portals' | 'boundaries'): MaybeAsync<unknown>;
868
+ debugSnapshot(operation: PeachDebugSnapshotOperation, labels: string[], target: 'tenant' | 'shell'): MaybeAsync<unknown>;
869
+ waitForTree(): Promise<void>;
870
+ waitForScreenTransitions?(opts?: SootSimScreenTransitionWaitOptions): Promise<SootSimScreenTransitionWaitResult>;
871
+ activatePressAt(x: number, y: number, nodeId?: number): MaybeAsync<Record<string, unknown> | null>;
872
+ activatePressByText(text: string): MaybeAsync<Record<string, unknown> | null>;
873
+ activatePressById(id: string): MaybeAsync<Record<string, unknown> | null>;
874
+ getRequests(limit?: number): MaybeAsync<SootSimRequestEntry[]>;
875
+ getFailedRequests(limit?: number): MaybeAsync<SootSimRequestEntry[]>;
876
+ getRequestCounts(): MaybeAsync<SootSimRequestCounts>;
877
+ clearRequests(): MaybeAsync<void>;
878
+ listAnimations(): MaybeAsync<SootSimAnimationInfo[]>;
879
+ getAnimation(id: number): MaybeAsync<SootSimAnimationInfo | null>;
880
+ stopAnimation(target: number | 'all'): MaybeAsync<number>;
881
+ enableAnimationTrace(target: number | 'all', limit?: number): MaybeAsync<void>;
882
+ disableAnimationTrace(target: number | 'all'): MaybeAsync<void>;
883
+ getAnimationTrace(id: number, limit?: number): MaybeAsync<SootSimAnimationTraceSample[]>;
884
+ listAnimationTraces(): MaybeAsync<SootSimAnimationTraceStatus[]>;
885
+ getRuntimeState(): MaybeAsync<SootSimRuntimeState>;
886
+ getExternalAppState?(): MaybeAsync<Record<string, unknown> | null>;
887
+ scrollToTop(x: number): MaybeAsync<boolean>;
888
+ getScrollState(id: string): MaybeAsync<Record<string, unknown> | null>;
889
+ getScrollStateAt(x: number, y: number): MaybeAsync<Record<string, unknown> | null>;
890
+ getCursorState(): MaybeAsync<SootSimCursorState | null>;
891
+ setCursorCaptureActive(active: boolean): MaybeAsync<void>;
892
+ getLoupeState(): MaybeAsync<SootSimLoupeState>;
893
+ getEditMenuState(): MaybeAsync<SootSimEditMenuState | null>;
894
+ getTextSelection(id: string): MaybeAsync<SootSimTextSelection | null>;
895
+ getTextSelectionHandles(id: string): MaybeAsync<SootSimTextSelectionHandles | null>;
896
+ getTextInputDisplayText(id: string): MaybeAsync<string | null>;
897
+ getTextInputValue(id: string): MaybeAsync<string | null>;
898
+ getTextInputDisplayColor(id: string): MaybeAsync<string | null>;
899
+ getImageState(nodeId: number): MaybeAsync<Record<string, unknown> | null>;
900
+ scrollTo(target: string | number | {
901
+ id?: string;
902
+ nodeId?: number;
903
+ }, x: number, y: number, animated?: boolean): MaybeAsync<SootSimScrollToResult>;
904
+ workerDebugState(): MaybeAsync<Record<string, unknown>>;
905
+ screenshot(): Promise<string>;
906
+ tap?(x: number, y: number, target?: SootSimReplayTarget): MaybeAsync<SootSimTapResult>;
907
+ longPress?(x: number, y: number, durationMs?: number, nativeWindowRoot?: number): MaybeAsync<boolean>;
908
+ captureBoundLongPress?(token: number, x: number, y: number, durationMs?: number, nativeWindowRoot?: number): MaybeAsync<SootSimCaptureBoundLongPressReceipt>;
909
+ captureBoundTap?(token: number, x: number, y: number, nativeWindowRoot?: number): MaybeAsync<SootSimCaptureBoundTapReceipt>;
910
+ drag?(fromX: number, fromY: number, toX: number, toY: number, steps?: number, stepMs?: number): MaybeAsync<boolean>;
911
+ pinch?(fromX1: number, fromY1: number, fromX2: number, fromY2: number, toX1: number, toY1: number, toX2: number, toY2: number, steps?: number, stepMs?: number): MaybeAsync<boolean>;
912
+ longPress?(x: number, y: number, durationMs?: number, nativeWindowRoot?: number): MaybeAsync<boolean>;
913
+ touchDown?(x: number, y: number, pointerId?: number, nativeWindowRoot?: number, timestamp?: number): MaybeAsync<boolean>;
914
+ touchMove?(x: number, y: number, pointerId?: number, nativeWindowRoot?: number, timestamp?: number): MaybeAsync<boolean>;
915
+ touchUp?(x: number, y: number, pointerId?: number, nativeWindowRoot?: number, timestamp?: number): MaybeAsync<boolean>;
916
+ touchCancel?(pointerId?: number, timestamp?: number): MaybeAsync<boolean>;
917
+ settleInteractionRelease?(): MaybeAsync<void>;
918
+ openDeepLink(url: string): MaybeAsync<{
919
+ ok: boolean;
920
+ error?: string;
921
+ }>;
922
+ getRouteInfo?(): MaybeAsync<SootSimRouteInfo>;
923
+ undeclaredScreen?(href: string): MaybeAsync<SootSimUndeclaredScreen | null>;
924
+ pushRoute?(href: string): MaybeAsync<boolean>;
925
+ replaceRoute?(href: string): MaybeAsync<boolean>;
926
+ goBackRoute?(): MaybeAsync<boolean>;
927
+ getFocusKeyboardSnapshot?(): MaybeAsync<Record<string, unknown> | null>;
928
+ getScrollSnapshots?(): MaybeAsync<Array<Record<string, unknown>>>;
929
+ getNavigationSnapshot?(): MaybeAsync<Record<string, unknown> | null>;
930
+ isNavigationIdle?(): MaybeAsync<boolean>;
931
+ getSurfaceMetricsSnapshot?(): MaybeAsync<Record<string, unknown> | null>;
932
+ permissionListApps?(): MaybeAsync<readonly SystemPermissionApp[]>;
933
+ permissionGuestAppId?(): MaybeAsync<string>;
934
+ permissionGetAppSettings?(appId: string): MaybeAsync<AppSettingsSnapshot>;
935
+ permissionSetAppPermission?(appId: string, kind: SystemPermissionKind, mutation: SystemPermissionMutation): MaybeAsync<AppSettingsSnapshot>;
936
+ permissionResetApp?(appId: string): MaybeAsync<void>;
937
+ clearKeychain?(): MaybeAsync<void>;
938
+ evalInTenant?(code: string): MaybeAsync<{
939
+ ok: boolean;
940
+ value?: unknown;
941
+ error?: string;
942
+ }>;
943
+ armNodeY(nodeId: number, frames?: number): MaybeAsync<void>;
944
+ recordNodeY(): MaybeAsync<void>;
945
+ takeNodeY(): MaybeAsync<number[] | null>;
946
+ }
947
+ type BridgeMethodKeys<T> = {
948
+ [K in keyof T]-?: NonNullable<T[K]> extends (...args: any[]) => unknown ? K : never;
949
+ }[keyof T];
950
+ export type SootSimTestBridgeMethod = Extract<BridgeMethodKeys<SootSimTestBridge>, string>;
951
+ export type SootSimTestBridgeArgs<M extends SootSimTestBridgeMethod> = NonNullable<SootSimTestBridge[M]> extends (...args: infer A) => unknown ? A : never;
952
+ export type SootSimTestBridgeResult<M extends SootSimTestBridgeMethod> = NonNullable<SootSimTestBridge[M]> extends (...args: any[]) => infer R ? Awaited<R> : never;
953
+ export interface SootSimInteractBridge {
954
+ tap(x: number, y: number, target?: SootSimReplayTarget): MaybeAsync<SootSimTapResult>;
955
+ doubleTap?(x: number, y: number, gapMs?: number): MaybeAsync<boolean>;
956
+ drag(fromX: number, fromY: number, toX: number, toY: number, steps?: number, stepMs?: number): MaybeAsync<boolean>;
957
+ pinch(fromX1: number, fromY1: number, fromX2: number, fromY2: number, toX1: number, toY1: number, toX2: number, toY2: number, steps?: number, stepMs?: number): MaybeAsync<boolean>;
958
+ longPress?(x: number, y: number, durationMs?: number, nativeWindowRoot?: number): MaybeAsync<boolean>;
959
+ captureBoundLongPress?(token: number, x: number, y: number, durationMs?: number, nativeWindowRoot?: number): MaybeAsync<SootSimCaptureBoundLongPressReceipt>;
960
+ captureBoundTap?(token: number, x: number, y: number, nativeWindowRoot?: number): MaybeAsync<SootSimCaptureBoundTapReceipt>;
961
+ touchDown?(x: number, y: number, pointerId?: number, timestamp?: number): MaybeAsync<boolean>;
962
+ touchMove?(x: number, y: number, pointerId?: number, timestamp?: number): MaybeAsync<boolean>;
963
+ touchUp?(x: number, y: number, pointerId?: number, timestamp?: number): MaybeAsync<boolean>;
964
+ touchCancel?(pointerId?: number, timestamp?: number): MaybeAsync<boolean>;
965
+ }
966
+ export interface GuardedTextInputResult {
967
+ handled: boolean;
968
+ secureTextEntry: boolean;
969
+ }
970
+ export interface TextInputEditRange {
971
+ start: number;
972
+ end: number;
973
+ }
974
+ export type TextInputEditCommand = {
975
+ kind: 'compositionStart';
976
+ range: TextInputEditRange;
977
+ } | {
978
+ kind: 'replace';
979
+ range: TextInputEditRange;
980
+ text: string;
981
+ composition: 'none' | 'update' | 'commit';
982
+ key?: string;
983
+ };
984
+ export declare function isTextInputEditCommand(value: unknown): value is TextInputEditCommand;
985
+ export interface SootSimKeyboardBridge {
986
+ [key: string]: unknown;
987
+ type?(text: string): MaybeAsync<void>;
988
+ typeInto?(text: string, nodeId: number): MaybeAsync<GuardedTextInputResult>;
989
+ press?(key: string): MaybeAsync<void>;
990
+ dispatchKey?(key: string): MaybeAsync<void>;
991
+ edit?(command: TextInputEditCommand): MaybeAsync<boolean>;
992
+ show?(): MaybeAsync<void>;
993
+ dismiss?(): MaybeAsync<boolean>;
994
+ isVisible?(): MaybeAsync<boolean>;
995
+ hasHostedEditorFocus?(): MaybeAsync<boolean>;
996
+ getMode?(): MaybeAsync<string>;
997
+ getLayout?(): {
998
+ spec: {
999
+ secureTextEntry: boolean;
1000
+ } | null;
1001
+ };
1002
+ getKeyRect?(label: string): MaybeAsync<{
1003
+ x: number;
1004
+ y: number;
1005
+ width: number;
1006
+ height: number;
1007
+ } | null>;
1008
+ }
1009
+ export interface SootSimDetectedBarcode {
1010
+ format: string;
1011
+ rawValue: string;
1012
+ boundingBox: {
1013
+ x: number;
1014
+ y: number;
1015
+ width: number;
1016
+ height: number;
1017
+ };
1018
+ cornerPoints: Array<{
1019
+ x: number;
1020
+ y: number;
1021
+ }>;
1022
+ }
1023
+ export interface PeachCameraPhotoOptions {
1024
+ mimeType?: string;
1025
+ quality?: number;
1026
+ isMirrored?: boolean;
1027
+ }
1028
+ export interface PeachCameraPhotoResult {
1029
+ dataUri: string;
1030
+ width: number;
1031
+ height: number;
1032
+ timestamp: number;
1033
+ }
1034
+ export interface PeachCameraRecordingOptions {
1035
+ recordingId?: string;
1036
+ persistent?: PeachCameraSourceConfiguration;
1037
+ mimeType: string;
1038
+ containerFormat?: 'mp4' | 'mov';
1039
+ audio: boolean;
1040
+ videoBitsPerSecond?: number;
1041
+ maxDuration?: number;
1042
+ maxFileSize?: number;
1043
+ }
1044
+ export type PeachCameraRecordingCommand = 'stop' | 'pause' | 'resume' | 'cancel' | 'bind' | 'unbind';
1045
+ export type PeachCameraRecordingEvent = {
1046
+ type: 'started' | 'paused' | 'resumed';
1047
+ } | {
1048
+ type: 'progress';
1049
+ duration: number;
1050
+ fileSize: number;
1051
+ } | {
1052
+ type: 'finished';
1053
+ blob: Blob;
1054
+ duration: number;
1055
+ width: number;
1056
+ height: number;
1057
+ reason: 'stopped' | 'max-duration-reached' | 'max-file-size-reached';
1058
+ } | {
1059
+ type: 'cancelled';
1060
+ } | {
1061
+ type: 'error';
1062
+ message: string;
1063
+ };
1064
+ export interface PeachCameraSourceInfo {
1065
+ settings: MediaTrackSettings;
1066
+ capabilities: MediaTrackCapabilities;
1067
+ }
1068
+ export interface PeachCameraSourceConfiguration {
1069
+ width: number;
1070
+ height: number;
1071
+ frameRate?: number;
1072
+ }
1073
+ export interface PeachCameraFrameResult {
1074
+ codedWidth: number;
1075
+ codedHeight: number;
1076
+ visibleX: number;
1077
+ visibleY: number;
1078
+ producerGeneration: bigint;
1079
+ format: VideoPixelFormat;
1080
+ width: number;
1081
+ height: number;
1082
+ timestamp: number;
1083
+ layout: PlaneLayout[];
1084
+ colorSpace: VideoColorSpaceInit;
1085
+ pixels: ArrayBuffer;
1086
+ }
1087
+ export interface SootSimCameraBridge {
1088
+ configureSource(configuration: PeachCameraSourceConfiguration): Promise<void>;
1089
+ captureFrame(format: 'source' | 'BGRA'): Promise<PeachCameraFrameResult>;
1090
+ getSourceInfo(facing: 'user' | 'environment'): Promise<PeachCameraSourceInfo>;
1091
+ startCamera(facing: 'user' | 'environment', onFrame: (bitmap: ImageBitmap, width: number, height: number) => void, configuration?: PeachCameraSourceConfiguration): Promise<{
1092
+ width: number;
1093
+ height: number;
1094
+ }>;
1095
+ capturePhoto(options?: PeachCameraPhotoOptions): Promise<PeachCameraPhotoResult | null>;
1096
+ stopCamera(): Promise<void>;
1097
+ startRecording(options: PeachCameraRecordingOptions, onEvent: (event: PeachCameraRecordingEvent) => void): Promise<void>;
1098
+ commandRecording(command: PeachCameraRecordingCommand, recordingId?: string): Promise<void>;
1099
+ isCameraActive?(): boolean;
1100
+ startBarcodeScan(formats: string[], onResults: (barcodes: SootSimDetectedBarcode[], videoWidth: number, videoHeight: number) => void): Promise<void>;
1101
+ stopBarcodeScan(): Promise<void>;
1102
+ }
1103
+ export type SootSimVideoSource = {
1104
+ uri?: string;
1105
+ headers?: Record<string, string>;
1106
+ };
1107
+ export type SootSimVideoStatus = 'idle' | 'loading' | 'readyToPlay' | 'error';
1108
+ export type SootSimVideoEvent = {
1109
+ name: 'statusChange';
1110
+ payload: {
1111
+ status: SootSimVideoStatus;
1112
+ oldStatus?: SootSimVideoStatus;
1113
+ error?: {
1114
+ message: string;
1115
+ };
1116
+ };
1117
+ } | {
1118
+ name: 'playingChange';
1119
+ payload: {
1120
+ isPlaying: boolean;
1121
+ oldIsPlaying?: boolean;
1122
+ };
1123
+ } | {
1124
+ name: 'playbackRateChange';
1125
+ payload: {
1126
+ playbackRate: number;
1127
+ oldPlaybackRate?: number;
1128
+ };
1129
+ } | {
1130
+ name: 'volumeChange';
1131
+ payload: {
1132
+ volume: number;
1133
+ oldVolume?: number;
1134
+ };
1135
+ } | {
1136
+ name: 'mutedChange';
1137
+ payload: {
1138
+ muted: boolean;
1139
+ oldMuted?: boolean;
1140
+ };
1141
+ } | {
1142
+ name: 'playToEnd';
1143
+ payload: undefined;
1144
+ } | {
1145
+ name: 'timeUpdate';
1146
+ payload: {
1147
+ currentTime: number;
1148
+ currentLiveTimestamp: null;
1149
+ currentOffsetFromLive: null;
1150
+ bufferedPosition: number;
1151
+ };
1152
+ } | {
1153
+ name: 'sourceChange';
1154
+ payload: {
1155
+ source: SootSimVideoSource | null;
1156
+ oldSource?: SootSimVideoSource | null;
1157
+ };
1158
+ } | {
1159
+ name: 'sourceLoad';
1160
+ payload: {
1161
+ videoSource: SootSimVideoSource | null;
1162
+ duration: number;
1163
+ availableVideoTracks: [];
1164
+ availableSubtitleTracks: [];
1165
+ availableAudioTracks: [];
1166
+ naturalSize: {
1167
+ width: number;
1168
+ height: number;
1169
+ };
1170
+ };
1171
+ } | {
1172
+ name: 'seeked';
1173
+ payload: {
1174
+ currentTime: number;
1175
+ };
1176
+ };
1177
+ export interface SootSimVideoBridge {
1178
+ createPlayer(instanceId: number, source: SootSimVideoSource | null, onEvent: (event: SootSimVideoEvent) => void, onFrame: (bitmap: ImageBitmap, width: number, height: number) => void): void;
1179
+ command(instanceId: number, command: 'play' | 'pause' | 'replay' | 'seekBy' | 'replace', value?: number | SootSimVideoSource | null): void;
1180
+ setProperty(instanceId: number, property: 'currentTime' | 'loop' | 'muted' | 'playbackRate' | 'preservesPitch' | 'timeUpdateEventInterval' | 'timeUpdatesWhilePaused' | 'volume', value: number | boolean): void;
1181
+ releasePlayer(instanceId: number): void;
1182
+ }
1183
+ export type SootSimSpeechSynthesisUtterance = {
1184
+ text: string;
1185
+ lang: string;
1186
+ rate: number;
1187
+ pitch: number;
1188
+ volume: number;
1189
+ };
1190
+ export type SootSimSpeechSynthesisEvent = {
1191
+ type: 'start';
1192
+ } | {
1193
+ type: 'boundary';
1194
+ charIndex: number;
1195
+ charLength: number;
1196
+ } | {
1197
+ type: 'end';
1198
+ } | {
1199
+ type: 'error';
1200
+ error: string;
1201
+ };
1202
+ export interface SootSimSpeechSynthesisBridge {
1203
+ speak(utterance: SootSimSpeechSynthesisUtterance, onEvent: (event: SootSimSpeechSynthesisEvent) => void): void;
1204
+ pause(): void;
1205
+ resume(): void;
1206
+ cancel(): void;
1207
+ }
1208
+ export interface SootSimAudioRecorderOptions {
1209
+ isMeteringEnabled?: boolean;
1210
+ bitRate?: number;
1211
+ bitsPerSecond?: number;
1212
+ mimeType?: string;
1213
+ extension?: string;
1214
+ sampleRate?: number;
1215
+ numberOfChannels?: number;
1216
+ deviceId?: string;
1217
+ }
1218
+ export type SootSimAudioRecorderCommand = 'inputs' | 'prepare' | 'record' | 'pause' | 'status' | 'stop';
1219
+ export interface SootSimAudioRecorderSnapshot {
1220
+ state: 'inactive' | 'recording' | 'paused' | 'stopped';
1221
+ durationMs: number;
1222
+ inputs: Array<{
1223
+ uid: string;
1224
+ name: string;
1225
+ type: string;
1226
+ }>;
1227
+ inputId?: string;
1228
+ metering?: number;
1229
+ blob?: Blob;
1230
+ }
1231
+ export interface SootSimAudioRecorderBridge {
1232
+ subscribe(id: string, listener: (snapshot: SootSimAudioRecorderSnapshot) => void): () => void;
1233
+ request(id: string, command: SootSimAudioRecorderCommand, options?: SootSimAudioRecorderOptions): Promise<SootSimAudioRecorderSnapshot>;
1234
+ release(id: string): void;
1235
+ }
1236
+ export interface SootSimMediaSessionBridge {
1237
+ readonly session: Pick<MediaSession, 'metadata' | 'playbackState' | 'setActionHandler' | 'setPositionState'>;
1238
+ readonly MediaMetadata: new (init?: MediaMetadataInit) => MediaMetadata;
1239
+ reset(): void;
1240
+ }
1241
+ export interface SootSimClipboardImage {
1242
+ bytes: ArrayBuffer;
1243
+ mimeType: string;
1244
+ width: number;
1245
+ height: number;
1246
+ scale: number;
1247
+ }
1248
+ export interface SootSimClipboardChange {
1249
+ changeCount: number;
1250
+ types: string[];
1251
+ contentTypes: string[];
1252
+ }
1253
+ export interface SootSimClipboardBridge {
1254
+ readText(): Promise<string>;
1255
+ writeText(text: string): Promise<void>;
1256
+ readImage(): Promise<SootSimClipboardImage | null>;
1257
+ writeImage(image: {
1258
+ bytes: ArrayBuffer;
1259
+ mimeType: string;
1260
+ kind: 'bitmap' | 'file';
1261
+ scale?: number;
1262
+ types?: string[];
1263
+ }): Promise<void>;
1264
+ subscribe(listener: (change: SootSimClipboardChange) => void): () => void;
1265
+ }
1266
+ export interface SootSimHostStorageBridge {
1267
+ snapshotLocalStorageEntries(scopeUrl: string): Promise<Array<[string, string]>>;
1268
+ }
1269
+ export interface SootSimImagePickerAsset {
1270
+ uri: string;
1271
+ width: number;
1272
+ height: number;
1273
+ fileName?: string;
1274
+ mimeType?: string;
1275
+ fileSize?: number;
1276
+ mediaType?: 'image' | 'video';
1277
+ duration?: number;
1278
+ }
1279
+ export interface SootSimImagePickerResult {
1280
+ continuing?: boolean;
1281
+ error?: string;
1282
+ canceled: boolean;
1283
+ assets: SootSimImagePickerAsset[] | null;
1284
+ }
1285
+ export interface SootSimImagePickerOptions {
1286
+ continuous?: boolean;
1287
+ preferredItemEncoding?: 'automatic' | 'current' | 'compatible';
1288
+ mediaTypes?: 'images' | 'videos' | 'all';
1289
+ allowsMultiple?: boolean;
1290
+ selectionLimit?: number;
1291
+ ordered?: boolean;
1292
+ }
1293
+ export interface ShellNativeEvaluationOwner {
1294
+ readonly kind: 'shell';
1295
+ readonly appId: string;
1296
+ readonly surfaceId: 'app:one' | 'app:two';
1297
+ readonly generation: number;
1298
+ }
1299
+ export interface SootSimImagePickerBridge {
1300
+ readonly cameraAvailable: boolean;
1301
+ captureFromCamera(signal?: AbortSignal, owner?: ShellNativeEvaluationOwner): Promise<SootSimImagePickerResult>;
1302
+ pickFromLibrary(options?: SootSimImagePickerOptions, signal?: AbortSignal, owner?: ShellNativeEvaluationOwner, onSelection?: (result: SootSimImagePickerResult) => void): Promise<SootSimImagePickerResult>;
1303
+ }
1304
+ export interface SootSimImageCropperSpec {
1305
+ previewUri: string;
1306
+ imageWidth: number;
1307
+ imageHeight: number;
1308
+ aspectRatio: number;
1309
+ shape: 'rectangle' | 'circle';
1310
+ }
1311
+ export interface SootSimImageCropperBridge {
1312
+ present(spec: SootSimImageCropperSpec): Promise<{
1313
+ done: boolean;
1314
+ }>;
1315
+ }
1316
+ export interface SootSimAndroidPickerDay {
1317
+ year: number;
1318
+ month: number;
1319
+ day: number;
1320
+ }
1321
+ export interface SootSimAndroidPickerButton {
1322
+ label?: string;
1323
+ textColor?: number;
1324
+ }
1325
+ export interface SootSimAndroidDateTimePickerSpec extends SootSimAndroidPickerDay {
1326
+ dialog: 'date' | 'time';
1327
+ display: 'default' | 'spinner';
1328
+ hour: number;
1329
+ minute: number;
1330
+ is24Hour: boolean;
1331
+ minimumDay?: SootSimAndroidPickerDay;
1332
+ maximumDay?: SootSimAndroidPickerDay;
1333
+ minuteInterval?: number;
1334
+ firstDayOfWeek?: number;
1335
+ startOnYearSelection?: boolean;
1336
+ buttons: {
1337
+ positive?: SootSimAndroidPickerButton;
1338
+ negative?: SootSimAndroidPickerButton;
1339
+ neutral?: SootSimAndroidPickerButton;
1340
+ };
1341
+ }
1342
+ export type SootSimAndroidDateTimePickerResult = ({
1343
+ action: 'set';
1344
+ hour: number;
1345
+ minute: number;
1346
+ } & SootSimAndroidPickerDay) | {
1347
+ action: 'neutral';
1348
+ } | {
1349
+ action: 'dismissed';
1350
+ };
1351
+ export interface SootSimAndroidDateTimePickerBridge {
1352
+ present(spec: SootSimAndroidDateTimePickerSpec, signal: AbortSignal): {
1353
+ result: Promise<SootSimAndroidDateTimePickerResult>;
1354
+ update: (spec: SootSimAndroidDateTimePickerSpec) => void;
1355
+ };
1356
+ }
1357
+ export type SystemPermissionKind = 'app-tracking-transparency' | 'bluetooth' | 'calendars' | 'camera' | 'contacts' | 'face-id' | 'local-network' | 'location-always' | 'location-when-in-use' | 'media-library' | 'microphone' | 'motion' | 'notifications' | 'photo-library' | 'photo-library-add-only' | 'reminders' | 'siri' | 'speech-recognition';
1358
+ export type SystemPermissionStatus = 'not-determined' | 'restricted' | 'denied' | 'authorized' | 'limited' | 'provisional' | 'ephemeral' | 'unavailable';
1359
+ export type SystemPermissionLocationAccuracy = 'full' | 'reduced';
1360
+ export type SystemPermissionPlatform = 'ios' | 'android';
1361
+ export type AppPreferenceValue = string | number | boolean;
1362
+ export type AppSettingsSpecifier = {
1363
+ type: 'group';
1364
+ title?: string;
1365
+ footer?: string;
1366
+ } | {
1367
+ type: 'toggle';
1368
+ key: string;
1369
+ title: string;
1370
+ defaultValue: boolean;
1371
+ currentValue: boolean;
1372
+ } | {
1373
+ type: 'text';
1374
+ key: string;
1375
+ title: string;
1376
+ defaultValue: string;
1377
+ currentValue: string;
1378
+ placeholder?: string;
1379
+ secure?: boolean;
1380
+ keyboardType?: 'alphabet' | 'numbers-and-punctuation' | 'number-pad' | 'url' | 'email-address' | 'name-phone-pad' | 'ascii-capable';
1381
+ autocapitalization?: 'none' | 'sentences' | 'words' | 'all-characters';
1382
+ autocorrection?: boolean;
1383
+ } | {
1384
+ type: 'multi-value';
1385
+ key: string;
1386
+ title: string;
1387
+ defaultValue: AppPreferenceValue;
1388
+ currentValue: AppPreferenceValue;
1389
+ values: readonly AppPreferenceValue[];
1390
+ titles: readonly string[];
1391
+ } | {
1392
+ type: 'title-value';
1393
+ key: string;
1394
+ title: string;
1395
+ defaultValue: AppPreferenceValue;
1396
+ currentValue: AppPreferenceValue;
1397
+ } | {
1398
+ type: 'slider';
1399
+ key: string;
1400
+ title?: string;
1401
+ defaultValue: number;
1402
+ currentValue: number;
1403
+ minimumValue: number;
1404
+ maximumValue: number;
1405
+ minimumValueImage?: string;
1406
+ maximumValueImage?: string;
1407
+ } | {
1408
+ type: 'child-pane';
1409
+ title: string;
1410
+ file?: string;
1411
+ specifiers: readonly AppSettingsSpecifier[];
1412
+ };
1413
+ export interface SystemNotificationSettings {
1414
+ authorizationStatus: SystemPermissionStatus;
1415
+ alerts: boolean;
1416
+ sounds: boolean;
1417
+ badges: boolean;
1418
+ lockScreen: boolean;
1419
+ notificationCenter: boolean;
1420
+ banners: boolean;
1421
+ bannerStyle: 'temporary' | 'persistent';
1422
+ previews: 'always' | 'whenUnlocked' | 'never';
1423
+ grouping: 'automatic' | 'byApp' | 'off';
1424
+ criticalAlerts: boolean;
1425
+ announcements: boolean;
1426
+ scheduledDelivery: boolean;
1427
+ timeSensitive: boolean;
1428
+ }
1429
+ export interface SystemPermissionState {
1430
+ kind: SystemPermissionKind;
1431
+ status: SystemPermissionStatus;
1432
+ canAskAgain: boolean;
1433
+ requested: boolean;
1434
+ authorizationScope?: 'persistent' | 'once';
1435
+ locationAccuracy?: SystemPermissionLocationAccuracy;
1436
+ limitedResourceIds?: readonly string[];
1437
+ notifications?: SystemNotificationSettings;
1438
+ }
1439
+ export interface SystemPermissionDescriptor {
1440
+ kind: SystemPermissionKind;
1441
+ purpose?: string;
1442
+ notificationOptions?: readonly ('alert' | 'badge' | 'sound' | 'carPlay' | 'criticalAlert' | 'provisional' | 'providesAppSettings')[];
1443
+ }
1444
+ export interface SystemPermissionApp {
1445
+ appId: string;
1446
+ bundleIdentifier?: string;
1447
+ displayName: string;
1448
+ version?: string;
1449
+ icon?: string;
1450
+ settingsBundle?: readonly AppSettingsSpecifier[];
1451
+ settingsStorageScopeUrl?: string;
1452
+ }
1453
+ export interface SystemPermissionRecord extends SystemPermissionState {
1454
+ appId: string;
1455
+ platform: SystemPermissionPlatform;
1456
+ updatedAt: number;
1457
+ }
1458
+ export interface AppPermissionSetting {
1459
+ kind: SystemPermissionKind;
1460
+ status: SystemPermissionStatus;
1461
+ mutable: boolean;
1462
+ locationAccuracy?: SystemPermissionLocationAccuracy;
1463
+ }
1464
+ export interface AppSettingsSnapshot {
1465
+ appId: string;
1466
+ platform: SystemPermissionPlatform;
1467
+ permissions: readonly AppPermissionSetting[];
1468
+ notifications?: SystemNotificationSettings;
1469
+ declaredSettings?: {
1470
+ specifiers: readonly AppSettingsSpecifier[];
1471
+ values: Readonly<Record<string, AppPreferenceValue>>;
1472
+ };
1473
+ }
1474
+ export type SystemPermissionMutation = {
1475
+ status: 'not-determined';
1476
+ } | {
1477
+ status: 'restricted';
1478
+ } | {
1479
+ status: 'denied';
1480
+ canAskAgain?: boolean;
1481
+ } | {
1482
+ status: 'authorized';
1483
+ locationAccuracy?: SystemPermissionLocationAccuracy;
1484
+ authorizationScope?: 'persistent' | 'once';
1485
+ } | {
1486
+ status: 'limited';
1487
+ limitedResourceIds?: readonly string[];
1488
+ } | {
1489
+ status: 'provisional';
1490
+ } | {
1491
+ status: 'ephemeral';
1492
+ } | {
1493
+ status: 'unavailable';
1494
+ };
1495
+ export interface SystemPermissionRequestContext extends SystemPermissionApp {
1496
+ presentationAppId?: string;
1497
+ platform: SystemPermissionPlatform;
1498
+ }
1499
+ export interface SootSimPermissionsBridge {
1500
+ listApps(): MaybeAsync<readonly SystemPermissionApp[]>;
1501
+ getAppSettingsSnapshot(appId: string): MaybeAsync<AppSettingsSnapshot>;
1502
+ setAppPermission(appId: string, kind: SystemPermissionKind, mutation: SystemPermissionMutation): MaybeAsync<AppSettingsSnapshot>;
1503
+ patchNotificationSettings(appId: string, patch: Partial<SystemNotificationSettings>): MaybeAsync<AppSettingsSnapshot>;
1504
+ setAppDeclaredSetting(appId: string, key: string, value: AppPreferenceValue): MaybeAsync<AppSettingsSnapshot>;
1505
+ resetPermission(appId: string, kind: SystemPermissionKind): MaybeAsync<void>;
1506
+ resetAppPermissions(appId: string): MaybeAsync<void>;
1507
+ }
1508
+ export interface SootSimShareSheetOptions {
1509
+ title?: string;
1510
+ message?: string;
1511
+ url?: string;
1512
+ subject?: string;
1513
+ excludedActivityTypes?: string[];
1514
+ }
1515
+ export interface SootSimShareSheetResult {
1516
+ completed: boolean;
1517
+ activityType: string | null;
1518
+ }
1519
+ export interface SootSimShareSheetBridge {
1520
+ share(options: SootSimShareSheetOptions): Promise<SootSimShareSheetResult>;
1521
+ }
1522
+ export interface SootSimPhotoLibraryAsset {
1523
+ id: string;
1524
+ uri: string;
1525
+ width: number;
1526
+ height: number;
1527
+ fileName?: string;
1528
+ mediaType: 'photo' | 'video';
1529
+ timestamp: number;
1530
+ fileSize?: number;
1531
+ durationMs?: number;
1532
+ isFavorite: boolean;
1533
+ mimeType?: string;
1534
+ }
1535
+ export interface SootSimPhotoLibraryPage {
1536
+ assets: SootSimPhotoLibraryAsset[];
1537
+ hasNextPage: boolean;
1538
+ endCursor: string | null;
1539
+ totalCount: number;
1540
+ }
1541
+ export interface SootSimPhotoLibraryQueryOptions {
1542
+ first: number;
1543
+ after?: string;
1544
+ assetType?: 'All' | 'Photos' | 'Videos';
1545
+ readFiles?: boolean;
1546
+ }
1547
+ export interface SootSimPhotoLibraryCreateOptions {
1548
+ uri: string;
1549
+ width?: number;
1550
+ height?: number;
1551
+ fileName?: string;
1552
+ mediaType?: 'photo' | 'video';
1553
+ }
1554
+ export interface SootSimPhotoLibraryBridge {
1555
+ getPhotos(options: SootSimPhotoLibraryQueryOptions): Promise<SootSimPhotoLibraryPage>;
1556
+ createAsset(options: SootSimPhotoLibraryCreateOptions): Promise<SootSimPhotoLibraryAsset>;
1557
+ }
1558
+ export interface SootSimNavigationRoutesPayload {
1559
+ prefixes: string[];
1560
+ screens: unknown;
1561
+ filter?: unknown;
1562
+ }
1563
+ export interface SootSimNavigationRoutesBridge {
1564
+ publish(payload: SootSimNavigationRoutesPayload | null): void;
1565
+ }
1566
+ export interface SootSimLinkingDispatcherBridge {
1567
+ dispatch(url: string): void;
1568
+ }
1569
+ export interface PeachWebViewDocumentData {
1570
+ bytesBase64: string;
1571
+ mimeType: string;
1572
+ characterEncodingName: string;
1573
+ }
1574
+ export interface SootSimWebViewSource {
1575
+ uri?: string;
1576
+ html?: string;
1577
+ baseUrl?: string;
1578
+ headers?: Record<string, string>;
1579
+ method?: string;
1580
+ bodyBase64?: string;
1581
+ documentData?: PeachWebViewDocumentData;
1582
+ }
1583
+ export type SootSimWebViewHostRequest = {
1584
+ kind: 'navigationDecision';
1585
+ instanceId: string;
1586
+ requestId: number;
1587
+ allow: boolean;
1588
+ } | {
1589
+ kind: 'attach';
1590
+ instanceId: string;
1591
+ frameName: string;
1592
+ url: string;
1593
+ headers: Record<string, string>;
1594
+ method?: string;
1595
+ bodyBase64?: string;
1596
+ documentData?: PeachWebViewDocumentData;
1597
+ config: string;
1598
+ beforeKey: string;
1599
+ beforeContent: string;
1600
+ afterContent: string;
1601
+ incognito: boolean;
1602
+ } | {
1603
+ kind: 'detach';
1604
+ instanceId: string;
1605
+ } | {
1606
+ kind: 'cookies';
1607
+ instanceId: string;
1608
+ cookies: string;
1609
+ } | {
1610
+ kind: 'evaluate';
1611
+ instanceId: string;
1612
+ js: string;
1613
+ userAgent?: string;
1614
+ } | {
1615
+ kind: 'tap';
1616
+ instanceId: string;
1617
+ x: number;
1618
+ y: number;
1619
+ } | {
1620
+ kind: 'fileResponse';
1621
+ instanceId: string;
1622
+ requestId: number;
1623
+ file: {
1624
+ mimeType: string;
1625
+ bytesBase64: string;
1626
+ } | null;
1627
+ } | {
1628
+ kind: 'snapshot';
1629
+ instanceId: string;
1630
+ requestId: number;
1631
+ rect: {
1632
+ x: number;
1633
+ y: number;
1634
+ width: number;
1635
+ height: number;
1636
+ };
1637
+ scale: number;
1638
+ };
1639
+ export type { SootSimCornerRadii, NativeSurfaceShadow, NativeSurfaceShadowCast, NativeSurfaceLayout, NativeSurfacePresentation, NativeSurfaceIdentity, NativeSurfacePresented, NativeSurfaceRegistration, } from './nativeSurfaceContract.d.ts';
1640
+ import type { SootSimCornerRadii, NativeSurfacePresentation } from './nativeSurfaceContract.d.ts';
1641
+ export declare function uncutCornerRadii(radii: SootSimCornerRadii, rect: {
1642
+ x: number;
1643
+ y: number;
1644
+ width: number;
1645
+ height: number;
1646
+ }, clipped: {
1647
+ x: number;
1648
+ y: number;
1649
+ width: number;
1650
+ height: number;
1651
+ }): SootSimCornerRadii | undefined;
1652
+ export interface SootSimWebKitConfiguration {
1653
+ navigation: number;
1654
+ navigationType: -1 | 2 | 3;
1655
+ userScripts: Array<{
1656
+ source: string;
1657
+ time: 0 | 1;
1658
+ }>;
1659
+ messageHandlers: string[];
1660
+ userAgent?: string;
1661
+ }
1662
+ export type SootSimWebKitValue = {
1663
+ type: 'null';
1664
+ } | {
1665
+ type: 'string';
1666
+ value: string;
1667
+ } | {
1668
+ type: 'number';
1669
+ value: number;
1670
+ } | {
1671
+ type: 'boolean';
1672
+ value: boolean;
1673
+ } | {
1674
+ type: 'date';
1675
+ value: number;
1676
+ } | {
1677
+ type: 'array';
1678
+ value: SootSimWebKitValue[];
1679
+ } | {
1680
+ type: 'object';
1681
+ value: {
1682
+ [key: string]: SootSimWebKitValue;
1683
+ };
1684
+ };
1685
+ export type SootSimWebKitEvent = {
1686
+ event: 'themeColor';
1687
+ navigation: number;
1688
+ color: [number, number, number, number] | null;
1689
+ } | {
1690
+ event: 'start' | 'finish';
1691
+ navigation: number;
1692
+ url: string;
1693
+ title?: string;
1694
+ } | {
1695
+ event: 'title';
1696
+ url: string;
1697
+ title: string;
1698
+ } | {
1699
+ event: 'policy';
1700
+ shouldPerformDownload: boolean;
1701
+ headers?: Record<string, string>;
1702
+ method?: string;
1703
+ bodyBase64?: string;
1704
+ navigation: number;
1705
+ navigationType: number;
1706
+ targetURL: string;
1707
+ lock: number;
1708
+ } | {
1709
+ event: 'response';
1710
+ navigation: number;
1711
+ targetURL: string;
1712
+ status: number;
1713
+ mime: string;
1714
+ length?: number;
1715
+ lock: number;
1716
+ } | {
1717
+ event: 'file';
1718
+ navigation: number;
1719
+ requestId: number;
1720
+ url: string;
1721
+ } | {
1722
+ event: 'snapshot';
1723
+ requestId: number;
1724
+ pngBase64: string | null;
1725
+ } | {
1726
+ event: 'redirect';
1727
+ navigation: number;
1728
+ url: string;
1729
+ } | {
1730
+ event: 'fail';
1731
+ navigation: number;
1732
+ url: string;
1733
+ domain: string;
1734
+ code: number;
1735
+ description: string;
1736
+ provisional: boolean;
1737
+ } | {
1738
+ event: 'cookie';
1739
+ url: string;
1740
+ value: string;
1741
+ } | {
1742
+ event: 'responseCookies';
1743
+ url: string;
1744
+ headers: string[];
1745
+ } | {
1746
+ event: 'message';
1747
+ securityOrigin: string;
1748
+ name: string;
1749
+ body: SootSimWebKitValue;
1750
+ requestId: number;
1751
+ } | {
1752
+ event: 'commit';
1753
+ securityOrigin: string;
1754
+ navigation: number;
1755
+ url: string;
1756
+ canGoBack?: boolean;
1757
+ canGoForward?: boolean;
1758
+ } | {
1759
+ event: 'evaluate';
1760
+ requestId: number;
1761
+ result: {
1762
+ value?: SootSimWebKitValue;
1763
+ title?: string;
1764
+ undefined?: true;
1765
+ errorCode?: number;
1766
+ errorInfo?: Record<string, string | number>;
1767
+ };
1768
+ };
1769
+ export interface SootSimWebViewCookieStore {
1770
+ cookies: string;
1771
+ policy: 0 | 1;
1772
+ }
1773
+ export interface SootSimWebViewSpec extends Partial<NativeSurfacePresentation> {
1774
+ cookieStore?: SootSimWebViewCookieStore;
1775
+ captureOwner?: {
1776
+ surfaceId: string;
1777
+ generation: number;
1778
+ };
1779
+ webKit?: SootSimWebKitConfiguration;
1780
+ source?: SootSimWebViewSource;
1781
+ injectedJavaScript?: string;
1782
+ injectedJavaScriptBeforeContentLoaded?: string;
1783
+ injectedJavaScriptObject?: string;
1784
+ hasOnOpenWindowEvent?: boolean;
1785
+ hasOnShouldStartLoadWithRequest?: boolean;
1786
+ incognito?: boolean;
1787
+ javaScriptEnabled?: boolean;
1788
+ scrollEnabled?: boolean;
1789
+ startInLoadingState?: boolean;
1790
+ testID?: string;
1791
+ }
1792
+ export type SootSimWebViewEvent = {
1793
+ kind: 'webKit';
1794
+ instanceId: string;
1795
+ payload: SootSimWebKitEvent;
1796
+ } | {
1797
+ kind: 'message';
1798
+ instanceId: string;
1799
+ data: string;
1800
+ url: string;
1801
+ loading: boolean;
1802
+ title: string;
1803
+ canGoBack: boolean;
1804
+ canGoForward: boolean;
1805
+ lockIdentifier: number;
1806
+ } | {
1807
+ kind: 'presentation';
1808
+ instanceId: string;
1809
+ live: boolean;
1810
+ closable: boolean;
1811
+ } | {
1812
+ kind: 'loadStart';
1813
+ instanceId: string;
1814
+ url: string;
1815
+ loading: boolean;
1816
+ navigationType: SootSimWebViewNavigationType;
1817
+ } | {
1818
+ kind: 'load';
1819
+ instanceId: string;
1820
+ url: string;
1821
+ } | {
1822
+ kind: 'loadEnd';
1823
+ instanceId: string;
1824
+ url: string;
1825
+ } | {
1826
+ kind: 'openWindow';
1827
+ instanceId: string;
1828
+ targetUrl: string;
1829
+ } | {
1830
+ kind: 'navigationStateChange';
1831
+ instanceId: string;
1832
+ url: string;
1833
+ title: string;
1834
+ loading: boolean;
1835
+ canGoBack: boolean;
1836
+ canGoForward: boolean;
1837
+ } | {
1838
+ kind: 'shouldStartLoadWithRequest';
1839
+ instanceId: string;
1840
+ url: string;
1841
+ mainDocumentURL: string;
1842
+ navigationType: SootSimWebViewNavigationType;
1843
+ isTopFrame: boolean;
1844
+ hasTargetFrame: boolean;
1845
+ lockIdentifier: number;
1846
+ loading: boolean;
1847
+ } | {
1848
+ kind: 'loadingError';
1849
+ instanceId: string;
1850
+ url: string;
1851
+ domain: string;
1852
+ code: number;
1853
+ description: string;
1854
+ didFailProvisionalNavigation: boolean;
1855
+ } | {
1856
+ kind: 'httpError';
1857
+ instanceId: string;
1858
+ url: string;
1859
+ statusCode: number;
1860
+ };
1861
+ export type SootSimWebViewNavigationType = 'click' | 'formsubmit' | 'backforward' | 'reload' | 'formresubmit' | 'other';
1862
+ export type SootSimWebKitReply = {
1863
+ json: string;
1864
+ } | {
1865
+ undefined: true;
1866
+ } | {
1867
+ error: string;
1868
+ };
1869
+ export interface SootSimWebViewBridge {
1870
+ setMessageHandlers(instanceId: string, names: string[]): void;
1871
+ replyScriptMessage(instanceId: string, requestId: number, reply: SootSimWebKitReply): void;
1872
+ evaluateJavaScript(instanceId: string, requestId: number, js: string, userAgent?: string): void;
1873
+ updateWebKitCookies(instanceId: string, requestId: number, cookies: string, policy: number): void;
1874
+ mount(instanceId: string, spec: SootSimWebViewSpec): void;
1875
+ update(instanceId: string, spec: SootSimWebViewSpec): void;
1876
+ unmount(instanceId: string): void;
1877
+ activate(instanceId: string, point?: {
1878
+ x: number;
1879
+ y: number;
1880
+ }): void;
1881
+ deactivate(instanceId: string): void;
1882
+ injectJavaScript(instanceId: string, js: string): void;
1883
+ postMessage(instanceId: string, data: string): void;
1884
+ goBack(instanceId: string): void;
1885
+ goForward(instanceId: string): void;
1886
+ reload(instanceId: string): void;
1887
+ stopLoading(instanceId: string, navigation?: number): void;
1888
+ shouldStartLoadWithLockIdentifier(lockIdentifier: number, shouldStart: boolean): void;
1889
+ fileResponse(instanceId: string, requestId: number, file: {
1890
+ mimeType: string;
1891
+ bytesBase64: string;
1892
+ } | null): void;
1893
+ snapshot(instanceId: string, requestId: number, rect: {
1894
+ x: number;
1895
+ y: number;
1896
+ width: number;
1897
+ height: number;
1898
+ }, scale: number): void;
1899
+ subscribe(listener: (event: SootSimWebViewEvent) => void): () => void;
1900
+ }
1901
+ export interface SootSimA11yBridge {
1902
+ [key: string]: unknown;
1903
+ setMode?(mode: string): void;
1904
+ getMode?(): string;
1905
+ enable?(): void;
1906
+ disable?(): void;
1907
+ inspect?(on?: boolean): MaybeAsync<boolean>;
1908
+ profile?(): MaybeAsync<Record<string, unknown> | undefined>;
1909
+ resetProfile?(): MaybeAsync<void>;
1910
+ }
1911
+ export interface SootSimPerfBridge {
1912
+ [key: string]: unknown;
1913
+ enableFrameStats?(reset?: boolean): unknown;
1914
+ disableFrameStats?(): void;
1915
+ getVsyncStats?(): unknown;
1916
+ resetVsyncStats?(): void;
1917
+ getLiveRenderLoad(): SootSimLiveRenderLoad;
1918
+ }
1919
+ export interface SootSimLiveRenderLoad {
1920
+ liveFrames: number;
1921
+ softwareAdapter: boolean | null;
1922
+ }
1923
+ export interface SootSimDebugBridge {
1924
+ frameBreakdown: {
1925
+ start(): void;
1926
+ stop(): Promise<FrameBreakdownCapture>;
1927
+ };
1928
+ enable(...channels: string[]): readonly string[];
1929
+ disable(...channels: string[]): readonly string[];
1930
+ toggle(channel: string): boolean;
1931
+ status(): readonly string[];
1932
+ channels(): readonly string[];
1933
+ flags(): Readonly<Record<string, boolean>>;
1934
+ snapshot(label?: string): unknown;
1935
+ diff(a: string, b: string): unknown;
1936
+ snapshots(): string[];
1937
+ clearSnapshots(label?: string): void;
1938
+ findSheets(): unknown[];
1939
+ findPortals(): unknown[];
1940
+ record(on?: boolean): boolean;
1941
+ recent(channel?: string, limit?: number): unknown[];
1942
+ clearEvents(): void;
1943
+ cullStats?(reset?: boolean): {
1944
+ examined: number;
1945
+ kept: number;
1946
+ skipped: number;
1947
+ };
1948
+ }
1949
+ export interface SootSimRecorderBridge {
1950
+ renderScene(): Promise<{
1951
+ durationMs: number;
1952
+ frameCount: number;
1953
+ renderTimeMs: number;
1954
+ }>;
1955
+ start(opts?: {
1956
+ format?: 'webm' | 'mp4';
1957
+ fps?: number;
1958
+ layers?: 'full' | 'tenant' | 'shell';
1959
+ }): Promise<{
1960
+ ok: boolean;
1961
+ error?: string;
1962
+ format?: string;
1963
+ startedAtMs?: number;
1964
+ }>;
1965
+ stop(): Promise<{
1966
+ ok: boolean;
1967
+ error?: string;
1968
+ size?: number;
1969
+ mime?: string;
1970
+ durationMs?: number;
1971
+ frameCount?: number;
1972
+ profile?: ProfileFile | null;
1973
+ }>;
1974
+ state(): 'idle' | 'starting' | 'recording' | 'processing' | 'ready';
1975
+ getStartedAtMs(): number | null;
1976
+ getDurationMs(): number | null;
1977
+ getBlob(): Blob | null;
1978
+ getBlobBase64(opts?: {
1979
+ chunk?: number;
1980
+ offset?: number;
1981
+ }): Promise<{
1982
+ data: string;
1983
+ size: number;
1984
+ offset: number;
1985
+ done: boolean;
1986
+ mime: string;
1987
+ } | null>;
1988
+ captureFrames(count: number, durationMs: number): Promise<SootSimCapturedFrame[]>;
1989
+ startFrameCapture(opts: {
1990
+ count: number;
1991
+ durationMs: number;
1992
+ maxWidth?: number;
1993
+ observation?: 'presented';
1994
+ surfaceId?: string;
1995
+ }): Promise<{
1996
+ ok: boolean;
1997
+ requestId?: number;
1998
+ error?: string;
1999
+ }>;
2000
+ getFrameCaptureResult(requestId: number, page?: {
2001
+ offset: number;
2002
+ limit: number;
2003
+ }): Promise<{
2004
+ ok: boolean;
2005
+ done: boolean;
2006
+ capturedCount: number;
2007
+ totalFrames?: number;
2008
+ frames?: SootSimCapturedFrame[];
2009
+ error?: string;
2010
+ } | null>;
2011
+ getFrameCaptureProgress(requestId: number, opts?: {
2012
+ latestFrames?: number;
2013
+ presentedBeforeEpochMs?: number;
2014
+ }): Promise<{
2015
+ done: boolean;
2016
+ capturedCount: number;
2017
+ latestFrames?: SootSimCapturedFrame[];
2018
+ } | null>;
2019
+ stopFrameCapture(requestId: number): Promise<{
2020
+ ok: boolean;
2021
+ error?: string;
2022
+ }>;
2023
+ flushFrameCapture(requestId: number): Promise<{
2024
+ ok: boolean;
2025
+ error?: string;
2026
+ }>;
2027
+ captureGif(opts: {
2028
+ frames: number;
2029
+ durationMs: number;
2030
+ maxWidth?: number;
2031
+ }): Promise<{
2032
+ data: string;
2033
+ size: number;
2034
+ } | null>;
2035
+ forceRelease(): Promise<boolean>;
2036
+ cancel?(): void;
2037
+ }
2038
+ export interface SootSimCapturedFrame {
2039
+ data: string;
2040
+ size: number;
2041
+ capturedAtEpochMs: number;
2042
+ frameToken?: number;
2043
+ surfacePresentations?: SootSimCapturedSurfacePresentation[];
2044
+ }
2045
+ export interface SootSimCapturedSurfacePresentation {
2046
+ surfaceId: string;
2047
+ display: string;
2048
+ opacity: number;
2049
+ scale: number;
2050
+ animations: number;
2051
+ }
2052
+ export interface SootSimEventRecorderBridge {
2053
+ [key: string]: unknown;
2054
+ start?(videoStartedAtMs?: number | null): Promise<boolean>;
2055
+ startPrelude?(): boolean;
2056
+ markVisibleStart?(videoStartedAtMs?: number | null): Promise<boolean>;
2057
+ stop?(): SootSimReplayEvent[];
2058
+ clear?(): void;
2059
+ getEvents?(): SootSimReplayEvent[];
2060
+ isRecording?(): boolean;
2061
+ }
2062
+ export interface SootSimPreviewRecorder {
2063
+ flush(): Promise<void>;
2064
+ list(bundleOrigin: string): unknown[];
2065
+ clear(): void;
2066
+ [key: string]: unknown;
2067
+ }
2068
+ export interface SootSimPortalManager {
2069
+ [key: string]: unknown;
2070
+ ensureHost?(name: string): unknown;
2071
+ releaseHost?(name: string): void;
2072
+ getHostNode?(name: string): unknown;
2073
+ register?(name: string, node: unknown): () => void;
2074
+ get?(name: string): unknown;
2075
+ list?(): string[];
2076
+ }
2077
+ export interface SootSimWindowScaleBridge {
2078
+ get(): 'physical' | 'point' | 'pixel' | 'fit';
2079
+ set(mode: 'physical' | 'point' | 'pixel' | 'fit'): void;
2080
+ subscribe(fn: () => void): () => void;
2081
+ }
2082
+ export interface SootSimElectronBridge {
2083
+ personalHomeApps?: PeachHomeApp[];
2084
+ homeAppStorage?(bundleUrl: string): Promise<PeachHomeStorageValue[]>;
2085
+ captureScreen(full?: boolean): Promise<string | null>;
2086
+ captureVideo(): Promise<unknown>;
2087
+ presentationMode?: 'window' | 'grid';
2088
+ getPlatform?(): string;
2089
+ shouldOfferCliInstall?(): Promise<boolean>;
2090
+ installCli?(): Promise<{
2091
+ persistentDaemon: boolean;
2092
+ }>;
2093
+ onCliInstallOffer?(callback: () => void): () => void;
2094
+ openExternal?(url: string): MaybeAsync<void>;
2095
+ setDevice?(model: string): void;
2096
+ setDevicePosture?(posture: string, foldActive: boolean): void;
2097
+ setDeviceOrientation?(orientation: string): void;
2098
+ [key: string]: unknown;
2099
+ }
2100
+ export interface PeachHomeApp {
2101
+ id: string;
2102
+ name: string;
2103
+ icon: string;
2104
+ source: {
2105
+ bundleUrl?: string;
2106
+ devUrl?: string;
2107
+ };
2108
+ }
2109
+ export interface PeachHomeStorageValue {
2110
+ key: string;
2111
+ value: string;
2112
+ store: 'localStorage' | 'secureStore';
2113
+ service?: string;
2114
+ }
2115
+ export interface PeachHomeStorageBinding {
2116
+ key: string;
2117
+ store: 'localStorage' | 'secureStore';
2118
+ service?: string;
2119
+ value?: string;
2120
+ credential?: {
2121
+ file: string;
2122
+ field: string[];
2123
+ encoding?: 'json' | 'text';
2124
+ };
2125
+ }
2126
+ export interface PeachHomeScreenConfig {
2127
+ apps: Array<PeachHomeApp & {
2128
+ storage?: PeachHomeStorageBinding[];
2129
+ }>;
2130
+ }
2131
+ export interface SootSimConsoleBuffer {
2132
+ [key: string]: unknown;
2133
+ getErrors?(limit?: number): unknown[];
2134
+ getWarnings?(limit?: number): unknown[];
2135
+ getAll?(limit?: number): unknown[];
2136
+ clear?(): void;
2137
+ count?(): {
2138
+ errors: number;
2139
+ warnings: number;
2140
+ total: number;
2141
+ };
2142
+ }
2143
+ export interface SootSimShellCommands {
2144
+ [key: string]: unknown;
2145
+ launchApp?(appId: string): MaybeAsync<unknown>;
2146
+ goHome?(): MaybeAsync<unknown>;
2147
+ openSwitcher?(): MaybeAsync<unknown>;
2148
+ openSwitcherCard?(appId: string): MaybeAsync<unknown>;
2149
+ dispatch?(cmd: {
2150
+ type: string;
2151
+ [key: string]: unknown;
2152
+ }): void;
2153
+ }
2154
+ export interface SootSimMainShellBridge {
2155
+ [key: string]: unknown;
2156
+ launchApp?(appId: string): MaybeAsync<unknown>;
2157
+ goBack?(): MaybeAsync<unknown>;
2158
+ goHome?(): MaybeAsync<unknown>;
2159
+ openSwitcher?(): MaybeAsync<unknown>;
2160
+ openSwitcherCard?(appId: string): MaybeAsync<unknown>;
2161
+ toggleLock?(): MaybeAsync<unknown>;
2162
+ setTopOverlay?(overlay: 'none' | 'notification-center' | 'control-center'): MaybeAsync<unknown>;
2163
+ getState?(): MaybeAsync<Record<string, unknown> | null>;
2164
+ postNativeUIRequest?(request: unknown): MaybeAsync<unknown>;
2165
+ onNativeUIEvent?(cb: (event: unknown) => void): () => void;
2166
+ }
2167
+ export interface SootSimDemoShareLeaseOptions {
2168
+ ownerToken?: string | null;
2169
+ bundleMode?: 'development' | 'production';
2170
+ }
2171
+ export interface SootSimDemoShareBridge {
2172
+ activateDemoShare?(name: string, options?: SootSimDemoShareLeaseOptions): MaybeAsync<unknown>;
2173
+ releaseCurrentShare?(options?: SootSimDemoShareLeaseOptions): MaybeAsync<unknown>;
2174
+ }
2175
+ export interface SootSimRenderActivityState {
2176
+ busy: boolean;
2177
+ frameToken: number;
2178
+ }
2179
+ export interface SootSimShellSceneFanoutStats {
2180
+ fastVersion: number;
2181
+ fastFanouts: number;
2182
+ slowFanouts: number;
2183
+ listenerFanouts: number;
2184
+ }
2185
+ export interface SootSimAuxCompositorStats {
2186
+ trajectoryPosts: number;
2187
+ trajectoryCancels: number;
2188
+ sceneSyncs: number;
2189
+ auxStylePasses: number;
2190
+ browserCompositeFrames: number;
2191
+ shellScene: SootSimShellSceneFanoutStats | null;
2192
+ }
2193
+ export interface SootSimLiveCompositeBridge {
2194
+ getCanvas(): HTMLCanvasElement | null;
2195
+ getFrameToken(): number;
2196
+ captureFresh(): Promise<{
2197
+ canvas: HTMLCanvasElement | null;
2198
+ frameToken: number;
2199
+ }>;
2200
+ subscribe(listener: () => void, opts?: {
2201
+ maxWidth?: number;
2202
+ }): () => void;
2203
+ setSourceScale(scale: number): void;
2204
+ markDirty(): void;
2205
+ }
2206
+ export interface PeachAnimatedExecution {
2207
+ id: number;
2208
+ kind: 'delay' | 'timing' | 'spring' | 'decay';
2209
+ phase: 'unknown' | 'waiting' | 'running' | 'finished' | 'stopped';
2210
+ delayStartedAtMs: number | null;
2211
+ delayMs: number | null;
2212
+ startedAtMs: number | null;
2213
+ lastCallbackMs: number | null;
2214
+ callbacks: number;
2215
+ sampleValue: number | null;
2216
+ appliedValue: number | null;
2217
+ applications: number;
2218
+ endCallback: 'absent' | 'invoking' | 'returned' | null;
2219
+ }
2220
+ export interface PeachLockstepTenantFrame {
2221
+ frameNowMs: number | null;
2222
+ guestNowMs: number;
2223
+ guestClockFrozen: boolean;
2224
+ animationFramesFrozen: boolean;
2225
+ animationFrameCallbacks: number;
2226
+ animatedExecution: {
2227
+ records: PeachAnimatedExecution[];
2228
+ evicted: number;
2229
+ } | null;
2230
+ animatedRenderTriggers: number;
2231
+ rendered: boolean;
2232
+ }
2233
+ export interface SootSimLockstepFrameReceipt {
2234
+ frameIndex: number;
2235
+ virtualTimestampMs: number;
2236
+ tenantFrame: PeachLockstepTenantFrame | null;
2237
+ }
2238
+ export type LockstepInputReceipt = {
2239
+ phase: 'down' | 'move' | 'up';
2240
+ x: number;
2241
+ y: number;
2242
+ pointerId: number;
2243
+ eventTimestampMs: number;
2244
+ frameIndex: number;
2245
+ virtualTimestampMs: number;
2246
+ };
2247
+ export type LockstepScheduledInput = {
2248
+ afterMs: number;
2249
+ eventAfterMs?: number;
2250
+ phase: LockstepInputReceipt['phase'];
2251
+ x: number;
2252
+ y: number;
2253
+ pointerId: number;
2254
+ deliver: (timestampMs: number) => Promise<void>;
2255
+ };
2256
+ export interface SootSimLockstepCaptureController {
2257
+ readonly initialFrame: SootSimLockstepFrameReceipt;
2258
+ readonly inputReceipts: LockstepInputReceipt[];
2259
+ scheduleInput(events: LockstepScheduledInput[]): Promise<void>;
2260
+ stepFrame(elapsedMs?: number, options?: {
2261
+ awaitPageShown?: boolean;
2262
+ }): Promise<SootSimLockstepFrameReceipt>;
2263
+ flushFrame(options?: {
2264
+ awaitPageShown?: boolean;
2265
+ }): Promise<SootSimLockstepFrameReceipt>;
2266
+ framesForOffset(offsetMs: number): number;
2267
+ stageTouchOffsetMs(touches: ReadonlyArray<{
2268
+ scheduledMs: number;
2269
+ landedMs: number;
2270
+ }>, offsetMs: number): number;
2271
+ stepToOffset(anchor: SootSimLockstepFrameReceipt, offsetMs: number): Promise<SootSimLockstepFrameReceipt>;
2272
+ endWorkletFrameReceipt(): void;
2273
+ end(): void;
2274
+ }
2275
+ export interface SootSimLockstepCaptureBridge {
2276
+ begin(fps: number, options?: {
2277
+ baseline?: boolean;
2278
+ holdGpuScenes?: boolean;
2279
+ workletFrameTimestampsSeconds?: number[];
2280
+ }): Promise<SootSimLockstepCaptureController>;
2281
+ end(): boolean;
2282
+ }
2283
+ export type PointerDeliveryTarget = 'tenant' | 'shell';
2284
+ export interface PointerDeliveryPendingDrop {
2285
+ ackRequestId: number;
2286
+ target: PointerDeliveryTarget;
2287
+ surfaceId: string;
2288
+ phase: string;
2289
+ elapsedMs: number;
2290
+ timestamp: number;
2291
+ }
2292
+ export interface PointerDeliveryStats {
2293
+ sent: number;
2294
+ acked: number;
2295
+ droppedTimeouts: number;
2296
+ pending: number;
2297
+ lastAckLatencyMs: number | null;
2298
+ maxAckLatencyMs: number;
2299
+ recentDrops: PointerDeliveryPendingDrop[];
2300
+ }
2301
+ export interface SootSimShellHostBridge {
2302
+ getPointerDeliveryStats(): PointerDeliveryStats;
2303
+ getHeartbeatCount(): number;
2304
+ getLastHeartbeatAt(): number;
2305
+ getRenderActivity(): SootSimRenderActivityState;
2306
+ subscribeRenderActivity(listener: () => void): () => void;
2307
+ getSceneFanoutStats(): SootSimShellSceneFanoutStats;
2308
+ triggerSnapshotRequest(): void;
2309
+ }
2310
+ export type SootSimLaunchArguments = Record<string, unknown>;
2311
+ export interface SootSimExternalAppLifecycleOptions {
2312
+ launchArguments?: SootSimLaunchArguments | null;
2313
+ initialUrl?: string | null;
2314
+ relaunch?: boolean;
2315
+ }
2316
+ export type SootSimStorageResetStrategy = 'data' | 'full';
2317
+ export interface SootSimExternalAppResetOptions extends SootSimExternalAppLifecycleOptions {
2318
+ strategy: SootSimStorageResetStrategy;
2319
+ }
2320
+ export interface SootSimExternalAppResetResult {
2321
+ cleared: string[];
2322
+ failures: string[];
2323
+ relaunched: boolean;
2324
+ workerReloaded: boolean;
2325
+ }
2326
+ export interface SootSimHotRemountBridge {
2327
+ hotRemount(reason?: string): MaybeAsync<void>;
2328
+ reloadExternalApp(options?: SootSimExternalAppLifecycleOptions): MaybeAsync<void>;
2329
+ resetExternalApp?(options: SootSimExternalAppResetOptions): MaybeAsync<SootSimExternalAppResetResult>;
2330
+ }
2331
+ export interface SootSimSettingsBridge {
2332
+ get(): unknown;
2333
+ set(key: string, value: unknown): boolean;
2334
+ apply(settings: Record<string, unknown>): unknown;
2335
+ applyRuntime(settings: Record<string, unknown>): unknown;
2336
+ subscribe(listener: () => void): () => void;
2337
+ }
2338
+ export interface SootSimCaptureFilter {
2339
+ hideTestIds?: string[];
2340
+ soloTestId?: string;
2341
+ soloNodeId?: number;
2342
+ soloOwnPaint?: boolean;
2343
+ fitToOutput?: {
2344
+ width: number;
2345
+ height: number;
2346
+ frame?: SootSimLayout;
2347
+ };
2348
+ }
2349
+ export interface SootSimCaptureOptions {
2350
+ layers?: 'full' | 'tenant' | 'shell';
2351
+ usePresentedFrame?: boolean;
2352
+ outputWidth?: number;
2353
+ outputHeight?: number;
2354
+ crop?: {
2355
+ x: number;
2356
+ y: number;
2357
+ w: number;
2358
+ h: number;
2359
+ };
2360
+ suppressText?: boolean;
2361
+ captureFilter?: SootSimCaptureFilter;
2362
+ format?: 'webp' | 'png';
2363
+ quality?: number;
2364
+ }
2365
+ export declare const SOOTSIM_CAPTURE_IMAGE_QUALITY = 0.8;
2366
+ export declare function sootsimCaptureIsFlat(canvas: {
2367
+ width: number;
2368
+ height: number;
2369
+ getContext(id: '2d', opts?: {
2370
+ willReadFrequently?: boolean;
2371
+ }): unknown;
2372
+ }): boolean;
2373
+ export declare const SOOTSIM_TIMELINE_KINDS: readonly ['console', 'fetch', 'app-launch', 'shell', 'route', 'screen', 'flow-step', 'keyboard', 'alert', 'actionsheet', 'picker', 'notification', 'toast', 'scroll', 'gesture', 'text-input', 'react-commit', 'layout', 'animation', 'console-log', 'frame', 'profile', 'animation-samples', 'memory'];
2374
+ export type SootSimTimelineKind = (typeof SOOTSIM_TIMELINE_KINDS)[number];
2375
+ export declare function isTimelineKind(value: unknown): value is SootSimTimelineKind;
2376
+ export declare function isTimelineEvent(value: unknown): value is SootSimTimelineEvent;
2377
+ export type SootSimTimelineContext = 'host' | 'shell' | 'tenant';
2378
+ export interface SootSimTimelineEvent {
2379
+ schemaVersion: 1;
2380
+ t: number;
2381
+ seq: number;
2382
+ context: SootSimTimelineContext;
2383
+ kind: SootSimTimelineKind;
2384
+ id?: string;
2385
+ data: unknown;
2386
+ }
2387
+ export interface SootSimTimelineQuery {
2388
+ kinds?: SootSimTimelineKind | SootSimTimelineKind[];
2389
+ since?: number;
2390
+ sinceCursor?: string;
2391
+ until?: number;
2392
+ limit?: number;
2393
+ }
2394
+ export interface SootSimTimelineQueryResult {
2395
+ events: SootSimTimelineEvent[];
2396
+ watermark: number;
2397
+ }
2398
+ export interface SootSimTimelineCountsByKind {
2399
+ [kind: string]: number;
2400
+ }
2401
+ export interface SootSimTimelineSummary {
2402
+ total: number;
2403
+ byKind: SootSimTimelineCountsByKind;
2404
+ firstAt: number | null;
2405
+ lastAt: number | null;
2406
+ }
2407
+ export interface SootSimTimelineStatus {
2408
+ enabled: SootSimTimelineKind[];
2409
+ all: SootSimTimelineKind[];
2410
+ ringSizes: {
2411
+ host: number;
2412
+ shell: number;
2413
+ tenant: number;
2414
+ };
2415
+ }
2416
+ export interface SootSimTimelineBridge {
2417
+ record(kind: SootSimTimelineKind, data: unknown, opts?: {
2418
+ id?: string;
2419
+ t?: number;
2420
+ }): void;
2421
+ recent(query?: SootSimTimelineQuery): SootSimTimelineQueryResult;
2422
+ summary(query?: SootSimTimelineQuery): SootSimTimelineSummary;
2423
+ cursorAdvance(key: string, watermark: number): void;
2424
+ cursorAt(key: string): number;
2425
+ cursorClear(key: string): void;
2426
+ enable(...kinds: (SootSimTimelineKind | 'all')[]): void;
2427
+ disable(...kinds: (SootSimTimelineKind | 'all')[]): void;
2428
+ clear(): void;
2429
+ status(): SootSimTimelineStatus;
2430
+ }
2431
+ export interface SootSimReactProfileBridge {
2432
+ start(opts?: {
2433
+ includeProps?: boolean;
2434
+ maxCommits?: number;
2435
+ }): MaybeAsync<unknown>;
2436
+ stop(): MaybeAsync<unknown>;
2437
+ slow(opts?: {
2438
+ limit?: number;
2439
+ }): MaybeAsync<unknown>;
2440
+ rerenders(opts?: {
2441
+ limit?: number;
2442
+ }): MaybeAsync<unknown>;
2443
+ tree(opts?: {
2444
+ depth?: number;
2445
+ find?: string;
2446
+ }): MaybeAsync<unknown>;
2447
+ why(fiberId: number): MaybeAsync<unknown>;
2448
+ }
2449
+ export interface SootSimShellPerfBridge {
2450
+ start(): MaybeAsync<unknown>;
2451
+ stop(): MaybeAsync<unknown>;
2452
+ }
2453
+ export type SootSimScrollTraceLayer = 'tenant' | 'shell' | 'compositor';
2454
+ export interface SootSimScrollOffsetSample {
2455
+ layer: SootSimScrollTraceLayer;
2456
+ t: number;
2457
+ seq: number;
2458
+ surfaceId: string;
2459
+ nodeId: number;
2460
+ generation?: number;
2461
+ frameToken?: number;
2462
+ surfaceEpoch?: number;
2463
+ textureEpoch?: number;
2464
+ drag?: boolean;
2465
+ momentum?: boolean;
2466
+ offsetX: number;
2467
+ offsetY: number;
2468
+ slotX?: number;
2469
+ slotY?: number;
2470
+ phase?: 'idle' | 'drag' | 'momentum' | 'active';
2471
+ paint?: number;
2472
+ contentWidth?: number;
2473
+ contentHeight?: number;
2474
+ viewportWidth?: number;
2475
+ viewportHeight?: number;
2476
+ }
2477
+ export interface SootSimTransitionProgressSample {
2478
+ t: number;
2479
+ surfaceId: string;
2480
+ stackId: number;
2481
+ progress: number;
2482
+ targetApplies: number;
2483
+ targetChanges: number;
2484
+ targetMisses: number;
2485
+ paintCount: number;
2486
+ }
2487
+ export interface SootSimPressPerformanceSample {
2488
+ inputSurfaceId: string;
2489
+ surfaceId: string;
2490
+ targetWasMounted: boolean;
2491
+ pointerT: number;
2492
+ treeT: number;
2493
+ paintT: number;
2494
+ }
2495
+ export interface SootSimScrollPerformanceTrace {
2496
+ startedAt: number;
2497
+ stoppedAt: number;
2498
+ paired: false;
2499
+ layers: {
2500
+ tenant: SootSimScrollOffsetSample[];
2501
+ shell: SootSimScrollOffsetSample[];
2502
+ compositor: SootSimScrollOffsetSample[];
2503
+ };
2504
+ transitions: SootSimTransitionProgressSample[];
2505
+ presses: SootSimPressPerformanceSample[];
2506
+ }
2507
+ export interface SootSimScrollPerfBridge {
2508
+ start(limit?: number, pressTestID?: string): MaybeAsync<void>;
2509
+ stop(): MaybeAsync<SootSimScrollPerformanceTrace>;
2510
+ }
2511
+ export interface SootSimReactDevtoolsConnection {
2512
+ send(frame: unknown): void;
2513
+ disconnect(): void;
2514
+ }
2515
+ export interface SootSimReactDevtoolsBridge {
2516
+ connect(onFrame: (frame: unknown) => void): SootSimReactDevtoolsConnection;
2517
+ }
2518
+ export type SootSimSceneStreamCommand = {
2519
+ action: 'recordStart';
2520
+ } | {
2521
+ action: 'recordStop';
2522
+ } | {
2523
+ action: 'play';
2524
+ } | {
2525
+ action: 'pause';
2526
+ } | {
2527
+ action: 'seek';
2528
+ timeMs: number;
2529
+ } | {
2530
+ action: 'step';
2531
+ timeMs: number;
2532
+ } | {
2533
+ action: 'state';
2534
+ };
2535
+ export interface SootSimSceneReplayState {
2536
+ timeMs: number;
2537
+ durationMs: number;
2538
+ playing: boolean;
2539
+ ended: boolean;
2540
+ recordedAtEpochMs: number | null;
2541
+ }
2542
+ export type SootSimSceneStreamResult = {
2543
+ action: 'recordStart';
2544
+ } | {
2545
+ action: 'recordStop';
2546
+ bytes: Uint8Array;
2547
+ durationMs: number;
2548
+ frameCount: number;
2549
+ } | ({
2550
+ action: 'play' | 'pause' | 'seek' | 'step' | 'state';
2551
+ } & SootSimSceneReplayState);
2552
+ export interface SootSimSceneStreamBridge {
2553
+ run(command: SootSimSceneStreamCommand): Promise<SootSimSceneStreamResult>;
2554
+ }
2555
+ export interface SootSimBridges {
2556
+ test: SootSimTestBridge | null;
2557
+ interact: SootSimInteractBridge | null;
2558
+ keyboard: SootSimKeyboardBridge | null;
2559
+ camera: SootSimCameraBridge | null;
2560
+ video: SootSimVideoBridge | null;
2561
+ speechSynthesis: SootSimSpeechSynthesisBridge | null;
2562
+ audioRecorder: SootSimAudioRecorderBridge | null;
2563
+ mediaSession: SootSimMediaSessionBridge | null;
2564
+ clipboard: SootSimClipboardBridge | null;
2565
+ hostStorage: SootSimHostStorageBridge | null;
2566
+ demoShare: SootSimDemoShareBridge | null;
2567
+ imagePicker: SootSimImagePickerBridge | null;
2568
+ imageCropper: SootSimImageCropperBridge | null;
2569
+ androidDateTimePicker: SootSimAndroidDateTimePickerBridge | null;
2570
+ shareSheet: SootSimShareSheetBridge | null;
2571
+ photoLibrary: SootSimPhotoLibraryBridge | null;
2572
+ permissions: SootSimPermissionsBridge | null;
2573
+ navigationRoutes: SootSimNavigationRoutesBridge | null;
2574
+ linkingDispatcher: SootSimLinkingDispatcherBridge | null;
2575
+ webview: SootSimWebViewBridge | null;
2576
+ a11y: SootSimA11yBridge | null;
2577
+ perf: SootSimPerfBridge | null;
2578
+ shellPerf: SootSimShellPerfBridge | null;
2579
+ scrollPerf: SootSimScrollPerfBridge | null;
2580
+ debug: SootSimDebugBridge | null;
2581
+ timeline: SootSimTimelineBridge | null;
2582
+ profiler: SootSimProfilerBridge | null;
2583
+ reactProfile: SootSimReactProfileBridge | null;
2584
+ reactDevtools: SootSimReactDevtoolsBridge | null;
2585
+ recorder: SootSimRecorderBridge | null;
2586
+ eventRecorder: SootSimEventRecorderBridge | null;
2587
+ previewRecorder: SootSimPreviewRecorder | null;
2588
+ portalManager: SootSimPortalManager | null;
2589
+ settings: SootSimSettingsBridge | null;
2590
+ windowScale: SootSimWindowScaleBridge | null;
2591
+ electron: SootSimElectronBridge | null;
2592
+ shellHost: SootSimShellHostBridge | null;
2593
+ shellCommands: SootSimShellCommands | null;
2594
+ mainShell: SootSimMainShellBridge | null;
2595
+ hotRemount: SootSimHotRemountBridge | null;
2596
+ liveComposite: SootSimLiveCompositeBridge | null;
2597
+ sceneStream: SootSimSceneStreamBridge | null;
2598
+ lockstepCapture: SootSimLockstepCaptureBridge | null;
2599
+ exitApp: (() => void) | null;
2600
+ forceRender: (() => void) | null;
2601
+ scrollToTop: (() => void) | null;
2602
+ screenshot: ((opts?: SootSimCaptureOptions) => Promise<string>) | null;
2603
+ getWindowSnapshot: (() => unknown) | null;
2604
+ appSnapshot: ((appId: string) => unknown) | null;
2605
+ captureBundle: (() => unknown) | null;
2606
+ readTransformedBundleSlice: ((offset: number, end: number) => Promise<string | null>) | null;
2607
+ createPortal: ((children: unknown, rootNode: unknown, key?: string | null) => unknown) | null;
2608
+ toggleRecording: (() => void) | null;
2609
+ isRecording: (() => boolean) | null;
2610
+ getRecordingState: (() => unknown) | null;
2611
+ getRecordingStartError: (() => string | null) | null;
2612
+ startRecording: ((mode?: PeachRecordingMode, layers?: 'full' | 'tenant' | 'shell', options?: PeachRecordingStartOptions) => Promise<boolean>) | null;
2613
+ startRecordingPrelude: (() => boolean | Promise<boolean>) | null;
2614
+ stopRecording: (() => Promise<boolean | 'pending'>) | null;
2615
+ cancelRecording: (() => void) | null;
2616
+ setSession: ((snapshot: {
2617
+ token: string | null;
2618
+ user: {
2619
+ id: string;
2620
+ name?: string;
2621
+ email?: string;
2622
+ image?: string;
2623
+ } | null;
2624
+ }) => void) | null;
2625
+ workerPerfStats: (() => Promise<unknown>) | null;
2626
+ workerPerfStart: (() => unknown) | null;
2627
+ workerPerfStop: (() => Promise<unknown>) | null;
2628
+ workerCpuProfileStart: ((opts?: {
2629
+ sampleInterval?: number;
2630
+ maxBufferSize?: number;
2631
+ }) => unknown) | null;
2632
+ workerCpuProfileStop: (() => Promise<unknown>) | null;
2633
+ }
2634
+ export interface SootSimAccessibilityState {
2635
+ disabled: boolean;
2636
+ selected: boolean;
2637
+ checked: boolean | 'mixed';
2638
+ busy: boolean;
2639
+ expanded: boolean;
2640
+ }
2641
+ export interface SootSimAccessibilityValue {
2642
+ min?: number;
2643
+ max?: number;
2644
+ now?: number;
2645
+ text?: string;
2646
+ }
2647
+ export type SootSimAccessibilityLiveRegion = 'none' | 'polite' | 'assertive';
2648
+ export interface SootSimFocusedNodeInfo extends SootSimNodeInfo {
2649
+ ancestorNodeIds: number[];
2650
+ }
2651
+ export interface SootSimAccessibilityInput {
2652
+ nodeId: number;
2653
+ rootId: number;
2654
+ activate: boolean;
2655
+ escape: boolean;
2656
+ adjust: boolean;
2657
+ }
2658
+ export interface SootSimNodeInfo {
2659
+ nativeTag?: number;
2660
+ accessibilityFrame?: SootSimLayout;
2661
+ nativeType?: string | null;
2662
+ nodeId: number;
2663
+ type: string;
2664
+ id: string | null;
2665
+ testID: string | null;
2666
+ text: string | null;
2667
+ style: Record<string, unknown>;
2668
+ layout: SootSimLayout;
2669
+ frame: SootSimLayout | null;
2670
+ absolutePosition: {
2671
+ x: number;
2672
+ y: number;
2673
+ width?: number;
2674
+ height?: number;
2675
+ };
2676
+ visibleFrame: SootSimVisibleFrame | null;
2677
+ childCount: number;
2678
+ pressed: boolean;
2679
+ pressable: boolean;
2680
+ isTextInput: boolean;
2681
+ textSelection: {
2682
+ start: number | null;
2683
+ end: number | null;
2684
+ } | null;
2685
+ secureTextEntry: boolean;
2686
+ placeholder: string | null;
2687
+ scrollOffsetX: number;
2688
+ scrollOffsetY: number;
2689
+ zoomScale: number | null;
2690
+ nativePinchEnabled: boolean;
2691
+ contentOffsetProp: {
2692
+ x?: number;
2693
+ y?: number;
2694
+ } | null;
2695
+ decelerationRateProp: unknown;
2696
+ strokeDashoffsetProp: number | null;
2697
+ accessible: boolean;
2698
+ accessibilityLabel: string | null;
2699
+ accessibilityRole: string | null;
2700
+ accessibilityHint: string | null;
2701
+ accessibilityIdentifier?: string | null;
2702
+ accessibilityUserInputLabels?: string[] | null;
2703
+ accessibilityTraits?: string[];
2704
+ accessibilityLiveRegion: SootSimAccessibilityLiveRegion | null;
2705
+ accessibilityState: SootSimAccessibilityState | null;
2706
+ accessibilityValue: SootSimAccessibilityValue | null;
2707
+ accessibilityInput?: SootSimAccessibilityInput;
2708
+ }
2709
+ export interface SootSimStyleTokenBinding {
2710
+ token: string;
2711
+ theme: string;
2712
+ }
2713
+ export interface SootSimCapturedTextSegment {
2714
+ text: string;
2715
+ color?: string | number;
2716
+ fontFamily?: string;
2717
+ fontSize?: number;
2718
+ fontStyle?: string;
2719
+ fontWeight?: string | number;
2720
+ letterSpacing?: number;
2721
+ textDecorationLine?: string;
2722
+ }
2723
+ export interface SootSimCapturedTextLine {
2724
+ text: string;
2725
+ x: number;
2726
+ y: number;
2727
+ width: number;
2728
+ height: number;
2729
+ baseline: number;
2730
+ segments?: SootSimCapturedTextSegment[];
2731
+ }
2732
+ export interface SootSimRenderTreeNode extends SootSimNodeInfo {
2733
+ nativeSurfaceId?: string;
2734
+ parentNodeId: number | null;
2735
+ childNodeIds: number[];
2736
+ paintIndex: number;
2737
+ props: Record<string, unknown>;
2738
+ inspect: SootSimInspectInfo;
2739
+ styleTokenBindings: Record<string, SootSimStyleTokenBinding>;
2740
+ textLines?: SootSimCapturedTextLine[];
2741
+ }
2742
+ export interface SootSimRenderTreeSnapshot {
2743
+ width: number;
2744
+ height: number;
2745
+ rootNodeId: number;
2746
+ nodes: SootSimRenderTreeNode[];
2747
+ commitRevision?: number;
2748
+ }
2749
+ export interface SootSimCaptureTransactionReceipt {
2750
+ token: number;
2751
+ commitRevision: number;
2752
+ }
2753
+ export interface SootSimCaptureBoundLongPressReceipt {
2754
+ handled: boolean;
2755
+ transaction: SootSimCaptureTransactionReceipt;
2756
+ }
2757
+ export interface SootSimCaptureBoundTapReceipt {
2758
+ handled: SootSimTapResult;
2759
+ transaction: SootSimCaptureTransactionReceipt;
2760
+ transition: SootSimScreenTransitionWaitResult | null;
2761
+ }
2762
+ export interface SootSimDebugNodeInfo {
2763
+ nodeId: number;
2764
+ parentNodeId: number | null;
2765
+ childNodeIds: number[];
2766
+ type: string;
2767
+ text: string | null;
2768
+ testID: string | null;
2769
+ accessibilityRole: string | null;
2770
+ pointerEvents: string | null;
2771
+ layout: {
2772
+ x: number;
2773
+ y: number;
2774
+ width: number;
2775
+ height: number;
2776
+ };
2777
+ style: Record<string, unknown>;
2778
+ runtime: {
2779
+ hasFocusImpl: boolean;
2780
+ hasBlurImpl: boolean;
2781
+ hasClearImpl: boolean;
2782
+ hasIsFocusedImpl: boolean;
2783
+ isFocused: boolean | null;
2784
+ hasTextInputState: boolean;
2785
+ controlledTextInput: boolean | null;
2786
+ };
2787
+ propKeys: string[];
2788
+ handlers: Record<string, boolean>;
2789
+ }
2790
+ export interface SootSimVisibleFrame extends SootSimLayout {
2791
+ area?: number;
2792
+ hidden?: SootSimVisibleFrameHidden;
2793
+ }
2794
+ export interface SootSimVisibilityNodeRef {
2795
+ nodeId: number;
2796
+ type: string;
2797
+ testID: string | null;
2798
+ }
2799
+ export type SootSimVisibleFrameHidden = {
2800
+ cached?: true;
2801
+ } & ({
2802
+ path: 'unpainted';
2803
+ by: SootSimVisibilityNodeRef;
2804
+ style: 'hidden' | 'opacity' | 'display-none';
2805
+ } | {
2806
+ path: 'clipped';
2807
+ paint: SootSimLayout;
2808
+ clip: SootSimLayout | null;
2809
+ viewport: SootSimLayout | null;
2810
+ by: (SootSimVisibilityNodeRef | 'viewport')[];
2811
+ } | {
2812
+ path: 'occluded';
2813
+ clipped: SootSimLayout;
2814
+ by: SootSimVisibilityNodeRef;
2815
+ rect: SootSimLayout;
2816
+ } | {
2817
+ path: 'unknown';
2818
+ });
2819
+ export interface SootSimLayout {
2820
+ x: number;
2821
+ y: number;
2822
+ width: number;
2823
+ height: number;
2824
+ }
2825
+ export interface SootSimDeviceSpec {
2826
+ platform?: 'ios' | 'android';
2827
+ width: number;
2828
+ height: number;
2829
+ scale: number;
2830
+ statusBarHeight?: number;
2831
+ homeIndicatorHeight?: number;
2832
+ navigationBarHeight?: number;
2833
+ osVersion?: string;
2834
+ iosVersion?: string;
2835
+ androidApiLevel?: number | null;
2836
+ }
2837
+ export interface SootSimEngineSnapshot {
2838
+ recording: {
2839
+ state: 'idle' | 'recording' | 'processing';
2840
+ mode: PeachRecordingMode | null;
2841
+ duration: number;
2842
+ };
2843
+ inspectActive: boolean;
2844
+ selectedInspect: SootSimInspectInfo | null;
2845
+ devtoolsOpen: boolean;
2846
+ devtoolsPosition: 'right' | 'bottom';
2847
+ devtoolsTab: 'network' | 'performance' | 'logs' | 'agent' | 'test' | 'react' | 'report' | 'onboard' | 'recordings' | 'inspect';
2848
+ devtoolsFilterLogLevel: 'log' | 'info' | 'warn' | 'error' | 'debug' | null;
2849
+ a11yMode: 'off' | 'delayed' | 'active' | 'default' | 'always' | 'agent';
2850
+ ringMode: 'ring' | 'silent';
2851
+ browserNav: {
2852
+ canGoBack: boolean;
2853
+ isAppOpen: boolean;
2854
+ } | null;
2855
+ activeApp: {
2856
+ appId: string | null;
2857
+ appName: string | null;
2858
+ isAppOpen: boolean;
2859
+ };
2860
+ windowState: {
2861
+ deviceModel: string;
2862
+ deviceSpec: SootSimDeviceSpec;
2863
+ orientation: 'portrait' | 'landscape';
2864
+ scaleMode: 'physical' | 'point' | 'pixel' | 'fit';
2865
+ agentProvider: 'codex' | 'claude';
2866
+ showFrame: boolean;
2867
+ showMenuBar: boolean;
2868
+ showRail: boolean;
2869
+ solidWindow: boolean;
2870
+ ambientGlow: 'off' | 'soft' | 'full';
2871
+ stageBackground: 'system' | 'light' | 'dark' | 'gray';
2872
+ stageChecker: boolean;
2873
+ screenshotMode: boolean;
2874
+ threeMode: boolean;
2875
+ threeRecordingEditor: boolean;
2876
+ screenshotCanvas: string;
2877
+ screenshotBackground: string;
2878
+ screenshotText: string;
2879
+ screenshotPose: string;
2880
+ screenshotDynamicSize: boolean;
2881
+ } | null;
2882
+ menuDefs: unknown;
2883
+ }
2884
+ export type SootSimReplayCursorMode = 'live' | 'replay';
2885
+ export interface SootSimReplayCursorPose {
2886
+ x: number;
2887
+ y: number;
2888
+ scale: number;
2889
+ pressed: boolean;
2890
+ opacity: number;
2891
+ transitionMs: number;
2892
+ }
2893
+ export interface SootSimReplayCursorState {
2894
+ visible: boolean;
2895
+ mode: SootSimReplayCursorMode;
2896
+ tone: 'blue' | 'gray';
2897
+ home: {
2898
+ x: number;
2899
+ y: number;
2900
+ };
2901
+ primary: SootSimReplayCursorPose;
2902
+ secondary: SootSimReplayCursorPose | null;
2903
+ hasReplayMoved: boolean;
2904
+ }
2905
+ export interface SootSimAgentActionDetail {
2906
+ type: 'tap' | 'longPress' | 'drag' | 'pinch' | 'scroll' | 'type' | 'screenshot' | 'move';
2907
+ x?: number;
2908
+ y?: number;
2909
+ toX?: number;
2910
+ toY?: number;
2911
+ x2?: number;
2912
+ y2?: number;
2913
+ toX2?: number;
2914
+ toY2?: number;
2915
+ durationMs?: number;
2916
+ moveMs?: number;
2917
+ text?: string;
2918
+ keyboardAction?: 'type' | 'press' | 'dispatchKey' | 'dismiss' | 'edit';
2919
+ edit?: TextInputEditCommand;
2920
+ target?: SootSimReplayTarget;
2921
+ }
2922
+ export type SootSimHardwareKeyboardInputDetail = {
2923
+ keyboardAction: 'type' | 'dispatchKey';
2924
+ text: string;
2925
+ } | {
2926
+ keyboardAction: 'edit';
2927
+ edit: TextInputEditCommand;
2928
+ };
2929
+ export interface SootSimReplayTarget {
2930
+ nodeId?: number | null;
2931
+ id?: string | null;
2932
+ testID?: string | null;
2933
+ text?: string | null;
2934
+ type?: string | null;
2935
+ }
2936
+ export declare function createSootSimReplayScreenIdentity(nodes: readonly PeachAccessibilityNode[]): string;
2937
+ export interface SootSimReplayEvent {
2938
+ startScreen?: string;
2939
+ t: number;
2940
+ sourceT?: number;
2941
+ type: Exclude<SootSimAgentActionDetail['type'], 'screenshot'>;
2942
+ x?: number;
2943
+ y?: number;
2944
+ toX?: number;
2945
+ toY?: number;
2946
+ x2?: number;
2947
+ y2?: number;
2948
+ toX2?: number;
2949
+ toY2?: number;
2950
+ durationMs?: number;
2951
+ moveMs?: number;
2952
+ text?: string;
2953
+ keyboardAction?: 'type' | 'press' | 'dispatchKey' | 'dismiss' | 'edit';
2954
+ edit?: TextInputEditCommand;
2955
+ target?: SootSimReplayTarget;
2956
+ path?: SootSimReplayPathPoint[];
2957
+ }
2958
+ export interface SootSimReplayPathPoint {
2959
+ x: number;
2960
+ y: number;
2961
+ dt: number;
2962
+ }
2963
+ export interface SootSimReplayPreviewState {
2964
+ flowVideoUrl: string | null;
2965
+ flowVideoDurationMs: number | null;
2966
+ bootSnapshotUrl: string | null;
2967
+ bootLoading: boolean;
2968
+ flowVideoLoaded: boolean;
2969
+ sceneLoaded: boolean;
2970
+ recordingStartedAtMs: number | null;
2971
+ surface: 'video' | 'live';
2972
+ interaction: 'replay' | 'paused' | 'live';
2973
+ }
2974
+ export interface SootSimReplayState {
2975
+ status: 'idle' | 'loading' | 'ready' | 'error';
2976
+ previewId: string | null;
2977
+ error: string | null;
2978
+ events: SootSimReplayEvent[];
2979
+ playback: {
2980
+ playing: boolean;
2981
+ scrubbing: boolean;
2982
+ currentTimeMs: number;
2983
+ durationMs: number;
2984
+ currentEventIndex: number;
2985
+ rate: number;
2986
+ };
2987
+ restore: {
2988
+ phase: 'idle' | 'reloading' | 'restoring';
2989
+ targetTimeMs: number | null;
2990
+ progress: number;
2991
+ };
2992
+ cursor: SootSimReplayCursorState;
2993
+ preview: SootSimReplayPreviewState;
2994
+ }
2995
+ export type SootSimRenderMode = 'main' | 'worker';
2996
+ export type SootSimTransformedBundle = {
2997
+ url: string;
2998
+ blob: Blob;
2999
+ byteLength: number;
3000
+ timestamp: number;
3001
+ nativeAppIdentityHeader?: string | null;
3002
+ };
3003
+ export type SootSimConnection = 'idle' | 'connecting' | 'connected' | 'disconnected';
3004
+ export type SootSimShellPathRoute = {
3005
+ kind: 'home';
3006
+ } | {
3007
+ kind: 'connect-rn';
3008
+ } | {
3009
+ kind: 'app';
3010
+ slug: string;
3011
+ } | {
3012
+ kind: 'rn';
3013
+ id: string;
3014
+ } | {
3015
+ kind: 'dock';
3016
+ id: string;
3017
+ };
3018
+ export interface SootSimShellRouteSnapshot {
3019
+ pathname: string;
3020
+ search: string;
3021
+ hash: string;
3022
+ shellRoute: SootSimShellPathRoute;
3023
+ }
3024
+ export interface SootSimRouter {
3025
+ getSnapshot?: () => SootSimShellRouteSnapshot;
3026
+ subscribe?: (listener: () => void) => () => void;
3027
+ push?: (route: SootSimShellPathRoute) => void;
3028
+ replace?: (route: SootSimShellPathRoute) => void;
3029
+ parsePath?: (pathname: string) => SootSimShellPathRoute;
3030
+ buildUrl?: (currentHref: string, route: SootSimShellPathRoute) => string;
3031
+ isManagedPath?: (pathname: string) => boolean;
3032
+ assignAppRouteSlugs?: <T extends {
3033
+ id: string;
3034
+ name: string;
3035
+ }>(entries: T[]) => Array<T & {
3036
+ routeSlug: string;
3037
+ }>;
3038
+ assignRNRouteIds?: <T extends {
3039
+ port: number;
3040
+ projectName?: string;
3041
+ }>(entries: T[]) => Array<T & {
3042
+ routeId: string;
3043
+ }>;
3044
+ }
3045
+ export interface SootSimState {
3046
+ root: unknown;
3047
+ renderHost: unknown;
3048
+ engineSnapshot: SootSimEngineSnapshot | null;
3049
+ simId: string | null;
3050
+ stats: {
3051
+ [key: string]: unknown;
3052
+ getSnapshot?: () => Record<string, unknown>;
3053
+ getAnimationDebugInfo?: () => unknown;
3054
+ } | null;
3055
+ lastTransformedBundle: SootSimTransformedBundle | null;
3056
+ launchMetadata: {
3057
+ reference: string;
3058
+ metadata: URLSearchParams;
3059
+ } | null;
3060
+ console: SootSimConsoleBuffer | null;
3061
+ connection: SootSimConnection;
3062
+ renderMode: SootSimRenderMode;
3063
+ verboseLogs: boolean;
3064
+ capturedComponent: unknown;
3065
+ capturedKey: string | null;
3066
+ rolldownStubs: Record<string, unknown> | null;
3067
+ requestAnimationFrame: ((cb: FrameRequestCallback) => number) | null;
3068
+ shellEventsInstalled: boolean;
3069
+ }
3070
+ export interface SootSimDebugChannels {
3071
+ portals: boolean;
3072
+ sheets: boolean;
3073
+ layout: boolean;
3074
+ onlayout: boolean;
3075
+ animated: boolean;
3076
+ render: boolean;
3077
+ touch: boolean;
3078
+ yoga: boolean;
3079
+ [key: string]: boolean;
3080
+ }
3081
+ export interface SootSimDebugEvent {
3082
+ channel: string;
3083
+ ts: number;
3084
+ payload: unknown;
3085
+ }
3086
+ export interface SootSimDebugState {
3087
+ channels: SootSimDebugChannels;
3088
+ snapshots: Map<string, unknown>;
3089
+ events: SootSimDebugEvent[];
3090
+ recording: boolean;
3091
+ }
3092
+ export interface SootSimGlobals {
3093
+ chrome: SootSimChrome;
3094
+ router: SootSimRouter;
3095
+ bridges: SootSimBridges;
3096
+ state: SootSimState;
3097
+ debug: SootSimDebugState;
3098
+ replayStore: Emitter<SootSimReplayState>;
3099
+ }
3100
+ export declare function inferCursorMoveMs(prevPoint: {
3101
+ x: number;
3102
+ y: number;
3103
+ } | null | undefined, nextPoint: {
3104
+ x: number;
3105
+ y: number;
3106
+ } | null | undefined, gapMs?: number): number;
3107
+ export declare function createSootSimReplayCursorState(mode?: SootSimReplayCursorMode, home?: {
3108
+ x: number;
3109
+ y: number;
3110
+ }): SootSimReplayCursorState;
3111
+ export declare function createSootSimReplayState(): SootSimReplayState;
3112
+ export interface SootSimLegacyGlobals {
3113
+ __sootsimRoot: SootSimState['root'];
3114
+ __sootsimRenderHost: SootSimState['renderHost'];
3115
+ __sootsimSimId: string | null;
3116
+ __sootsimVerboseLogs: boolean;
3117
+ __sootsimEngineState: SootSimEngineSnapshot | null;
3118
+ __sootsimBridgeInstalled: boolean;
3119
+ __sootsimLastTransformedBundle: SootSimState['lastTransformedBundle'];
3120
+ __sootsimConsole: SootSimConsoleBuffer | null;
3121
+ __sootsimStats: SootSimState['stats'];
3122
+ __sootsim_rolldown_stubs: Record<string, unknown> | null;
3123
+ __sootsim_captured_component: SootSimState['capturedComponent'];
3124
+ __sootsim_captured_key: string | null;
3125
+ __sootsimRequestAnimationFrame: SootSimState['requestAnimationFrame'];
3126
+ __sootsim_demo_gateway_origin: string | null;
3127
+ __sootsimTest: SootSimTestBridge | null;
3128
+ __sootsimInteract: SootSimInteractBridge | null;
3129
+ __sootsimKeyboard: SootSimKeyboardBridge | null;
3130
+ __sootsimA11y: SootSimA11yBridge | null;
3131
+ __sootsimDebug: SootSimDebugBridge | null;
3132
+ __sootsimTimeline: SootSimTimelineBridge | null;
3133
+ __sootsimPerf: SootSimPerfBridge | null;
3134
+ __sootsimShellPerf: SootSimShellPerfBridge | null;
3135
+ __sootsimRecorder: SootSimRecorderBridge | null;
3136
+ __sootsimEventRecorder: SootSimEventRecorderBridge | null;
3137
+ __sootsimPreviewRecorder: SootSimPreviewRecorder | null;
3138
+ __sootsimPortalManager: SootSimPortalManager | null;
3139
+ __sootsimCreatePortal: SootSimBridges['createPortal'];
3140
+ __sootsimSettings: SootSimSettingsBridge | null;
3141
+ __sootsimWindowScale: SootSimWindowScaleBridge | null;
3142
+ __sootsimShell: SootSimShellHostBridge | null;
3143
+ __sootsimShellCommands: SootSimShellCommands | null;
3144
+ __sootsimForceRender: SootSimBridges['forceRender'];
3145
+ __sootsimScrollToTop: SootSimBridges['scrollToTop'];
3146
+ __sootsimScreenshot: SootSimBridges['screenshot'];
3147
+ __sootsimGetWindowSnapshot: SootSimBridges['getWindowSnapshot'];
3148
+ __sootsimSnapshot: SootSimBridges['appSnapshot'];
3149
+ __sootsimCaptureBundle: SootSimBridges['captureBundle'];
3150
+ __sootsimToggleRecording: SootSimBridges['toggleRecording'];
3151
+ __sootsimIsRecording: SootSimBridges['isRecording'];
3152
+ __sootsimGetRecordingState: SootSimBridges['getRecordingState'];
3153
+ __sootsimPerfStats: SootSimBridges['workerPerfStats'];
3154
+ __sootsimPerfStart: SootSimBridges['workerPerfStart'];
3155
+ __sootsimPerfStop: SootSimBridges['workerPerfStop'];
3156
+ }
3157
+ export interface SootSimMetroAssetRecord {
3158
+ httpServerLocation?: string;
3159
+ name?: string;
3160
+ type?: string;
3161
+ scales?: number[];
3162
+ width?: number;
3163
+ height?: number;
3164
+ }
3165
+ export interface SootSimMetroRequire {
3166
+ (moduleId: number | string): unknown;
3167
+ getModules?: () => Map<number | string, unknown> | Record<string, unknown>;
3168
+ }
3169
+ export interface SootSimTenantLocation {
3170
+ href: string;
3171
+ origin: string;
3172
+ protocol: string;
3173
+ host: string;
3174
+ hostname: string;
3175
+ port: string;
3176
+ pathname: string;
3177
+ search: string;
3178
+ hash: string;
3179
+ assign(next: string): void;
3180
+ replace(next: string): void;
3181
+ reload(): void;
3182
+ toString(): string;
3183
+ }
3184
+ export interface SootSimTenantNavigator {
3185
+ product: 'ReactNative';
3186
+ userAgent: string;
3187
+ platform: string;
3188
+ language: string;
3189
+ languages: string[];
3190
+ onLine: boolean;
3191
+ maxTouchPoints: number;
3192
+ clipboard: {
3193
+ readText(): Promise<string>;
3194
+ writeText(text: string): Promise<void>;
3195
+ };
3196
+ canShare(data?: unknown): boolean;
3197
+ vibrate(pattern?: number | number[]): boolean;
3198
+ mediaDevices: {
3199
+ getUserMedia(constraints?: unknown): Promise<MediaStream>;
3200
+ enumerateDevices?(): Promise<MediaDeviceInfo[]>;
3201
+ };
3202
+ geolocation?: Geolocation;
3203
+ credentials?: CredentialsContainer;
3204
+ permissions?: Permissions;
3205
+ storage?: StorageManager;
3206
+ }
3207
+ export interface SootSimTenantScreen {
3208
+ width: number;
3209
+ height: number;
3210
+ availWidth: number;
3211
+ availHeight: number;
3212
+ orientation: {
3213
+ angle: number;
3214
+ type: string;
3215
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject): void;
3216
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject): void;
3217
+ };
3218
+ }
3219
+ export interface SootSimWorkerTextInputBridge<Node = unknown> {
3220
+ focus?(node: Node): boolean;
3221
+ focusCommand?(node: Node): boolean;
3222
+ blur?(node: Node): boolean;
3223
+ isFocused?(node: Node): boolean;
3224
+ blurFocused?(): boolean;
3225
+ isAnyFocused?(): boolean;
3226
+ getFocused?(): Node | null;
3227
+ focusAdjacent?(direction: 1 | -1): boolean;
3228
+ focusCurrent?(): boolean;
3229
+ }
3230
+ export declare const SOOTSIM_KEYBOARD_TOOLBAR_GROUP_PROP: '__sootsimKeyboardToolbarGroup';
3231
+ export interface SootSimWorkerTextInputBridgeGlobal<Node = unknown> {
3232
+ readonly Object: ObjectConstructor;
3233
+ __sootsimWorkerTextInputBridge?: SootSimWorkerTextInputBridge<Node>;
3234
+ }
3235
+ export type PeachPageServingAuthority = 'published' | 'contributor';
3236
+ export interface SootSimTenantEnvironment {
3237
+ localStorage: Storage;
3238
+ sessionStorage: Storage;
3239
+ matchMedia(query: string): MediaQueryList;
3240
+ location: SootSimTenantLocation;
3241
+ navigator: SootSimTenantNavigator;
3242
+ open(url?: string, target?: string, features?: string): WindowProxy | null;
3243
+ devicePixelRatio: number;
3244
+ innerWidth: number;
3245
+ innerHeight: number;
3246
+ outerWidth: number;
3247
+ outerHeight: number;
3248
+ screen: SootSimTenantScreen;
3249
+ }
3250
+ export type SootSimMetroDefine = (factory: (globalObj: typeof globalThis, require: (id: number) => unknown, metroImportDefault: (id: number) => unknown, metroImportAll: (id: number) => unknown, module: {
3251
+ exports: unknown;
3252
+ }, exports: unknown, dependencyMap: unknown) => void, moduleId: number, dependencyMap: unknown, moduleName?: string, inverseDependencies?: Record<number, number[]>) => void;
3253
+ export interface SootSimDirectGlobals {
3254
+ __peachPageServingAuthority: PeachPageServingAuthority | null;
3255
+ __peachWebViewHost: (request: SootSimWebViewHostRequest) => Promise<void>;
3256
+ __sootsimAuxCompositorStats: () => SootSimAuxCompositorStats;
3257
+ __sootsimDeviceSpec: SootSimDeviceSpec;
3258
+ __sootsimDeviceSpecListeners: Set<() => void>;
3259
+ __sootsimTenantEnvironment: SootSimTenantEnvironment;
3260
+ __sootsim_launch_arguments: string | Record<string, unknown>;
3261
+ __sootsim_react_native_keys_json: string | {
3262
+ secure?: Record<string, string>;
3263
+ public?: Record<string, unknown>;
3264
+ };
3265
+ __sootsimEmitBackPress: () => boolean;
3266
+ __sootsimFindInteractiveCanvas: () => HTMLCanvasElement | null;
3267
+ __r: SootSimMetroRequire;
3268
+ __d: SootSimMetroDefine;
3269
+ __metro_assets: Array<SootSimMetroAssetRecord | undefined>;
3270
+ __sootsim_bundle_origin: string;
3271
+ __sootsimMetroAssetRegistryModuleId: number | string;
3272
+ __sootsimOneNativeContentSnapshot: (appId: string) => unknown;
3273
+ __sootsimStatusBarResetListenerInstalled: boolean;
3274
+ __sootsimDebugWedgeTenant: (ms: number) => void;
3275
+ __contrastModules: {
3276
+ require: (name: string) => unknown;
3277
+ [k: string]: unknown;
3278
+ };
3279
+ __sootsimRuntimeVersion: string;
3280
+ __sootsimCliVersion: string;
3281
+ __peachDesktopHostInstalled: boolean;
3282
+ __peachWorkerHost: {
3283
+ pullSurface?: (source: HTMLCanvasElement, kx?: number, ky?: number) => Promise<void>;
3284
+ };
3285
+ }
3286
+
3287
+ export declare function createDefaultSootSim(): SootSimGlobals;
3288
+ export declare function ensureSootSim(): SootSimGlobals;
3289
+ export declare function getSootSim(): SootSimGlobals | undefined;
3290
+ export declare const SOOTSIM_NATIVE_PUBLIC_INSTANCE: unique symbol;
3291
+ export interface SootSimNativePublicInstance {
3292
+ readonly [SOOTSIM_NATIVE_PUBLIC_INSTANCE]: true;
3293
+ readonly __nativeTag: number | undefined;
3294
+ readonly _nativeTag: number | undefined;
3295
+ readonly __viewTag: number | undefined;
3296
+ }
3297
+ export declare function isSootSimNativePublicInstance(value: unknown): value is SootSimNativePublicInstance;
3298
+ export declare function withSootSimNativePublicInstanceTags<T extends object>(handle: Omit<T, keyof SootSimNativePublicInstance>, viewTag: () => number | undefined): T & SootSimNativePublicInstance;
3299
+ export type BoxViewingMode = 'remote' | 'local';
3300
+ export interface BoxViewingMessage {
3301
+ type: 'sootsim:boxViewing';
3302
+ mode: BoxViewingMode;
3303
+ }
3304
+ export declare function isBoxViewingMessage(value: unknown): value is BoxViewingMessage;
3305
+ export interface NumericTextPaintRequest {
3306
+ value: number;
3307
+ countsDown?: boolean;
3308
+ animated: boolean;
3309
+ speed: number;
3310
+ delay: number;
3311
+ }