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
@@ -1,22 +1,18 @@
1
+ import { getCliRuntime } from '../src/cli-runtime.ts'
1
2
  // "send to box": the running local app becomes a nano cloud simulator.
2
3
  //
3
4
  // one function serves both callers. the rail button in the shell reaches it
4
5
  // through the local daemon's `/__send-to-box` route, and `peach box send` calls
5
6
  // it directly; both hand it a way to run a bridge command against the sim that
6
7
  // is running the app, and both get the same simulator id and URL back.
7
-
8
- import { isStorageSnapshot } from '../../peach-engine/src/preview/storage-snapshot-contract.ts'
9
- import {
10
- DEFAULT_DEVICE_BY_PLATFORM,
11
- getRuntimePlatform,
12
- listDeviceModels,
13
- } from '../../peach-engine/src/settings/devices.ts'
8
+ import { DEFAULT_DEVICE_BY_PLATFORM, listDeviceModels } from '../src/device-catalog.ts'
14
9
  import { isRecord } from '../src/is-record'
15
10
  import { toPeachProductionBundleUrl } from '../src/metro-production-bundle.ts'
11
+ import { isStorageSnapshot } from '../src/storageSnapshotContract.ts'
12
+ import { StorageSnapshot } from '../src/storageSnapshotContract.ts'
16
13
  import { createCloudBox } from './cloud-client.ts'
17
- import type { StorageSnapshot } from '../../peach-engine/src/preview/storage-snapshot-contract.ts'
18
- import type { DeviceModel } from '../../peach-engine/src/settings/devices.ts'
19
14
  import type { BridgeCommandType } from '../src/bridge-contract.ts'
15
+ import type { DeviceModel } from '../src/device-catalog.ts'
20
16
 
21
17
  export interface SendToBoxOptions {
22
18
  /** runs one bridge command against the sim running the app. */
@@ -49,7 +45,8 @@ export interface SendToBoxResult {
49
45
  // iOS only, so an Android sim sends to the default iPhone rather than refusing.
50
46
  function cloudDevice(capturedModel: unknown): DeviceModel {
51
47
  const captured = listDeviceModels().find((model) => model === capturedModel)
52
- return captured && getRuntimePlatform(captured) === 'ios'
48
+ return captured &&
49
+ getCliRuntime().settings_devices.getRuntimePlatform(captured) === 'ios'
53
50
  ? captured
54
51
  : DEFAULT_DEVICE_BY_PLATFORM.ios
55
52
  }
package/cli/telemetry.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { createHash } from 'node:crypto'
2
2
  import { homedir } from 'node:os'
3
3
  import { eventUuid } from '@peach/globals/event-identity'
4
- import { crashFingerprint } from 'peach-engine/crash-fingerprint'
5
4
  import { getCliVersion } from '../src/cli-version'
5
+ import { crashFingerprint } from '../src/crash-fingerprint.ts'
6
6
  import {
7
7
  readActiveRuntime,
8
8
  readOrCreateAnonymousId,
package/cli/ws-bridge.ts CHANGED
@@ -14,6 +14,7 @@ import {
14
14
  DEFAULT_SOOTSIM_BRIDGE_PORT,
15
15
  resolveSootsimBridgePort,
16
16
  } from '../src/bridge-constants'
17
+ import { commandWritesSim, type WsBridgeCommand } from '../src/bridge-contract'
17
18
  import { DEFAULT_SOOTSIM_SHELL_URL } from '../src/cli-constants'
18
19
  import {
19
20
  isDaemonLockfileFresh,
@@ -30,10 +31,10 @@ import {
30
31
  getStableOwnerPid,
31
32
  readCurrentSim,
32
33
  readCurrentSimId,
34
+ assertNoPendingOpen,
33
35
  saveCurrentSimId,
34
36
  } from './current-sim'
35
37
  import { setPauseAwareTimeout } from './pause-aware-timeout'
36
- import type { WsBridgeCommand } from '../src/bridge-contract'
37
38
 
38
39
  // --- bridge world resolution ---------------------------------------------
39
40
  //
@@ -805,6 +806,12 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
805
806
  opts.simIdSource === 'flag' ? opts.simId : (readCurrentSimId() ?? opts.simId)
806
807
  const targetedSimId =
807
808
  typeof cmd.simId === 'string' && cmd.simId ? cmd.simId : sentSimId
809
+ // an open that has not pinned a sim means the caller's intended target
810
+ // is not connected. a mutating command with no explicit sim must not
811
+ // fall to the sole other tab; reads still may.
812
+ if (!sentSimId && !cmd.simId && (commandWritesSim(cmd) || cmd.type === 'close')) {
813
+ assertNoPendingOpen()
814
+ }
808
815
  try {
809
816
  // a command can itself reload the page and retire its sim id. capture
810
817
  // the browser-host lineage before dispatch, while the target still
@@ -1,3 +1,6 @@
1
+ const {
2
+ parseDiscreteFrameCadence,
3
+ } = require('../../peach-conformance/src/cases/checkpoint-evidence.cjs')
1
4
  const fs = require('node:fs')
2
5
  const path = require('node:path')
3
6
 
@@ -25,7 +28,6 @@ module.exports = { attemptEventsPath, writeAttemptEvent }
25
28
  const crypto = require('node:crypto')
26
29
  const { spawnSync } = require('node:child_process')
27
30
  const {
28
- parseDiscreteFrameCadence,
29
31
  classifyDiscreteFrame,
30
32
  evaluateDiscreteFrameTrace,
31
33
  } = require('./motion-change.cjs')
@@ -1,6 +1,6 @@
1
+ import type { DiscreteFrameCadence } from '../../peach-conformance/src/cases/checkpoint-evidence.cjs'
1
2
  import type {
2
3
  DiscreteFrameBinding,
3
- DiscreteFrameCadence,
4
4
  DiscreteFrameDecision,
5
5
  DiscreteFrameTrace,
6
6
  } from './motion-change.cjs'
@@ -6,7 +6,11 @@ import { dragScrollNode } from './gestures'
6
6
  import { getSootsimNavigationDiagnostics } from './navigation-lifecycle'
7
7
  import type { SootSimElement } from './element-types'
8
8
  import type { Matcher } from './matchers'
9
- import type { SootSimFocusedNodeInfo, SootSimNodeInfo } from '@peach/globals'
9
+ import type {
10
+ PeachAccessibilityNode,
11
+ SootSimFocusedNodeInfo,
12
+ SootSimNodeInfo,
13
+ } from '@peach/globals'
10
14
  import type { Page } from 'playwright-core'
11
15
 
12
16
  type FindFn = (matcher: Matcher) => Promise<any>
@@ -121,12 +125,8 @@ class SootSimExpectation {
121
125
  }
122
126
 
123
127
  get not(): SootSimExpectation {
124
- return new SootSimExpectation(
125
- this.matcher,
126
- this.findNode,
127
- this.getPage,
128
- !this.negated,
129
- )
128
+ this.negated = true
129
+ return this
130
130
  }
131
131
 
132
132
  async toExist(): Promise<void> {
@@ -141,15 +141,18 @@ class SootSimExpectation {
141
141
  } else {
142
142
  if (!exists) {
143
143
  throw new Error(
144
- `expected element to exist but it was not found: ${JSON.stringify(this.matcher)}`,
144
+ `expected element to exist but it was not found: ${JSON.stringify(this.matcher)}\nrecent page diagnostics:\n${JSON.stringify(getSootsimNavigationDiagnostics(this.getPage()))}`,
145
145
  )
146
146
  }
147
147
  }
148
148
  }
149
149
 
150
- async toBeVisible(): Promise<void> {
150
+ async toBeVisible(percent = 75): Promise<void> {
151
151
  const node = await this.findNode(this.matcher)
152
- const visible = isNodeVisible(node)
152
+ if (!Number.isSafeInteger(percent) || percent < 1 || percent > 100) {
153
+ throw new Error('`percent` must be an integer between 1 and 100')
154
+ }
155
+ const visible = visibleFraction(node) >= percent / 100
153
156
  if (this.negated) {
154
157
  if (visible) {
155
158
  throw new Error(
@@ -166,13 +169,31 @@ class SootSimExpectation {
166
169
  }
167
170
 
168
171
  async toBeNotVisible(): Promise<void> {
169
- const node = await this.findNode(this.matcher)
170
- const visible = isNodeVisible(node)
171
- if (visible) {
172
- throw new Error(
173
- `expected element NOT to be visible: ${JSON.stringify(this.matcher)}`,
174
- )
175
- }
172
+ await this.not.toBeVisible()
173
+ }
174
+
175
+ async toBeNotFocused(): Promise<void> {
176
+ await this.not.toBeFocused()
177
+ }
178
+
179
+ async toNotExist(): Promise<void> {
180
+ await this.not.toExist()
181
+ }
182
+
183
+ async toNotHaveText(text: string): Promise<void> {
184
+ await this.not.toHaveText(text)
185
+ }
186
+
187
+ async toNotHaveLabel(label: string): Promise<void> {
188
+ await this.not.toHaveLabel(label)
189
+ }
190
+
191
+ async toNotHaveId(id: string): Promise<void> {
192
+ await this.not.toHaveId(id)
193
+ }
194
+
195
+ async toNotHaveValue(value: string): Promise<void> {
196
+ await this.not.toHaveValue(value)
176
197
  }
177
198
 
178
199
  async toHaveText(expectedText: string): Promise<void> {
@@ -222,7 +243,7 @@ class SootSimExpectation {
222
243
  )
223
244
  }
224
245
  // check explicit accessibilityLabel, then derived text content
225
- const actual = node.accessibilityLabel || node.text || ''
246
+ const actual = node.accessibilityLabel ?? node.text ?? ''
226
247
  const matches = actual === expectedLabel
227
248
  if (this.negated) {
228
249
  if (matches)
@@ -296,16 +317,25 @@ class SootSimExpectation {
296
317
  `element not found for toHaveValue: ${JSON.stringify(this.matcher)}`,
297
318
  )
298
319
  }
299
- // value could be in text or props
300
- const actual = node.text || ''
320
+ const actual = await this.getPage().evaluate(async (nodeId) => {
321
+ const findValue = (nodes: PeachAccessibilityNode[]): string | null => {
322
+ for (const candidate of nodes) {
323
+ if (candidate.nodeId === nodeId) return candidate.value
324
+ const value = findValue(candidate.children)
325
+ if (value !== null) return value
326
+ }
327
+ return null
328
+ }
329
+ return findValue(await window.__sootsimTest!.captureAccessibilityTree())
330
+ }, node.nodeId)
301
331
  if (this.negated) {
302
- if (actual.includes(value)) {
332
+ if (actual === value) {
303
333
  throw new Error(
304
334
  `expected element NOT to have value "${value}" but got "${actual}"`,
305
335
  )
306
336
  }
307
337
  } else {
308
- if (!actual.includes(value)) {
338
+ if (actual !== value) {
309
339
  throw new Error(`expected element to have value "${value}" but got "${actual}"`)
310
340
  }
311
341
  }
@@ -332,104 +362,79 @@ export function createWaitFor(findNode: FindFn, getPage: GetPageFn) {
332
362
  }
333
363
 
334
364
  class SootSimWaitForChain {
335
- private matcher: Matcher
336
- private findNode: FindFn
337
- private getPage: GetPageFn
338
- private assertionFn: (() => Promise<void>) | null = null
339
- private _negated = false
365
+ private expectation: SootSimExpectation
340
366
 
341
- constructor(matcher: Matcher, findNode: FindFn, getPage: GetPageFn) {
342
- this.matcher = matcher
343
- this.findNode = findNode
344
- this.getPage = getPage
367
+ constructor(
368
+ matcher: Matcher,
369
+ private findNode: FindFn,
370
+ private getPage: GetPageFn,
371
+ ) {
372
+ this.expectation = new SootSimExpectation(matcher, findNode, getPage, false)
345
373
  }
346
374
 
347
375
  get not(): SootSimWaitForChain {
348
- this._negated = true
376
+ this.expectation = this.expectation.not
349
377
  return this
350
378
  }
351
379
 
352
380
  toExist(): SootSimWaitForAction {
353
- this.assertionFn = async () => {
354
- const node = await this.findNode(this.matcher)
355
- const exists = node !== null && node !== undefined
356
- if (this._negated ? exists : !exists) {
357
- // a guest that never mounts leaves its console and page errors only here
358
- throw new Error(
359
- `waitFor toExist failed: ${JSON.stringify(this.matcher)}\nrecent page diagnostics:\n${JSON.stringify(getSootsimNavigationDiagnostics(this.getPage()))}`,
360
- )
361
- }
362
- }
363
- return new SootSimWaitForAction(this.assertionFn, this.findNode, this.getPage)
381
+ return this.assertion(() => this.expectation.toExist())
364
382
  }
365
383
 
366
- toBeVisible(): SootSimWaitForAction {
367
- this.assertionFn = async () => {
368
- const node = await this.findNode(this.matcher)
369
- const visible = isNodeVisible(node)
370
- if (this._negated ? visible : !visible) {
371
- throw new Error(
372
- `waitFor toBeVisible failed (${describeNodeVisibility(node)}): ${JSON.stringify(this.matcher)}`,
373
- )
374
- }
375
- }
376
- return new SootSimWaitForAction(this.assertionFn, this.findNode, this.getPage)
384
+ toNotExist(): SootSimWaitForAction {
385
+ return this.not.toExist()
386
+ }
387
+
388
+ toBeVisible(percent?: number): SootSimWaitForAction {
389
+ return this.assertion(() => this.expectation.toBeVisible(percent))
377
390
  }
378
391
 
379
392
  toBeNotVisible(): SootSimWaitForAction {
380
- this.assertionFn = async () => {
381
- const node = await this.findNode(this.matcher)
382
- const visible = isNodeVisible(node)
383
- if (visible) {
384
- throw new Error(`waitFor toBeNotVisible failed: ${JSON.stringify(this.matcher)}`)
385
- }
386
- }
387
- return new SootSimWaitForAction(this.assertionFn, this.findNode, this.getPage)
393
+ return this.not.toBeVisible()
388
394
  }
389
395
 
390
- toHaveText(expectedText: string): SootSimWaitForAction {
391
- this.assertionFn = async () => {
392
- const node = await this.findNode(this.matcher)
393
- if (!node)
394
- throw new Error(
395
- `waitFor toHaveText: element not found: ${JSON.stringify(this.matcher)}`,
396
- )
397
- const actual = node.text || ''
398
- const matches = actual === expectedText
399
- if (this._negated ? matches : !matches) {
400
- throw new Error(
401
- `waitFor toHaveText: expected "${expectedText}" but got "${actual}" ${JSON.stringify(this.matcher)}`,
402
- )
403
- }
404
- }
405
- return new SootSimWaitForAction(this.assertionFn, this.findNode, this.getPage)
396
+ toHaveText(text: string): SootSimWaitForAction {
397
+ return this.assertion(() => this.expectation.toHaveText(text))
398
+ }
399
+
400
+ toNotHaveText(text: string): SootSimWaitForAction {
401
+ return this.not.toHaveText(text)
402
+ }
403
+
404
+ toHaveLabel(label: string): SootSimWaitForAction {
405
+ return this.assertion(() => this.expectation.toHaveLabel(label))
406
+ }
407
+
408
+ toNotHaveLabel(label: string): SootSimWaitForAction {
409
+ return this.not.toHaveLabel(label)
410
+ }
411
+
412
+ toHaveId(id: string): SootSimWaitForAction {
413
+ return this.assertion(() => this.expectation.toHaveId(id))
414
+ }
415
+
416
+ toNotHaveId(id: string): SootSimWaitForAction {
417
+ return this.not.toHaveId(id)
406
418
  }
407
419
 
408
420
  toHaveValue(value: string): SootSimWaitForAction {
409
- this.assertionFn = async () => {
410
- const node = await this.findNode(this.matcher)
411
- if (!node) throw new Error(`waitFor toHaveValue: element not found`)
412
- const actual = node.text || ''
413
- if (!actual.includes(value)) {
414
- throw new Error(`waitFor toHaveValue: expected "${value}" in "${actual}"`)
415
- }
416
- }
417
- return new SootSimWaitForAction(this.assertionFn, this.findNode, this.getPage)
421
+ return this.assertion(() => this.expectation.toHaveValue(value))
422
+ }
423
+
424
+ toNotHaveValue(value: string): SootSimWaitForAction {
425
+ return this.not.toHaveValue(value)
418
426
  }
419
427
 
420
428
  toBeFocused(): SootSimWaitForAction {
421
- this.assertionFn = async () => {
422
- const node = await this.findNode(this.matcher)
423
- if (!node)
424
- throw new Error(
425
- `waitFor toBeFocused: element not found: ${JSON.stringify(this.matcher)}`,
426
- )
427
- const focused = await isNodeFocused(node, this.getPage())
428
- if (this._negated ? focused : !focused) {
429
- throw new Error(`waitFor toBeFocused failed: ${JSON.stringify(this.matcher)}`)
430
- }
431
- }
432
- return new SootSimWaitForAction(this.assertionFn, this.findNode, this.getPage)
429
+ return this.assertion(() => this.expectation.toBeFocused())
430
+ }
431
+
432
+ toBeNotFocused(): SootSimWaitForAction {
433
+ return this.not.toBeFocused()
434
+ }
435
+
436
+ private assertion(assertionFn: () => Promise<void>): SootSimWaitForAction {
437
+ return new SootSimWaitForAction(assertionFn, this.findNode, this.getPage)
433
438
  }
434
439
  }
435
440
 
@@ -445,6 +450,10 @@ class SootSimWaitForAction {
445
450
  }
446
451
 
447
452
  async withTimeout(ms: number): Promise<void> {
453
+ if (typeof ms !== 'number' || ms < 0) {
454
+ throw new Error('timeout must be a nonnegative number')
455
+ }
456
+ if (ms === 0) return this.assertionFn()
448
457
  const start = Date.now()
449
458
  const pollInterval = 100
450
459
  let lastError: Error | null = null
@@ -0,0 +1,6 @@
1
+ export function frameIndexForOffset(offsetMs: number, frameIntervalMs: number): number
2
+ export function frameTimingRoundingBound(...operands: number[]): number
3
+ export function stageTouchOffsetMs(
4
+ touches: ReadonlyArray<{ scheduledMs: number; landedMs: number }> | null | undefined,
5
+ offsetMs: number,
6
+ ): number
@@ -0,0 +1,35 @@
1
+ // ceiling a represented display tick must not advance it by one frame.
2
+ /** @param {number} offsetMs @param {number} frameIntervalMs */
3
+ export function frameIndexForOffset(offsetMs, frameIntervalMs) {
4
+ if (!Number.isFinite(offsetMs) || offsetMs < 0)
5
+ throw new Error(`capture: invalid stage offset ${offsetMs}`)
6
+ if (!Number.isFinite(frameIntervalMs) || frameIntervalMs <= 0)
7
+ throw new Error(`capture: invalid frame interval ${frameIntervalMs}`)
8
+ const quotient = offsetMs / frameIntervalMs
9
+ const nearest = Math.round(quotient)
10
+ return Math.abs(quotient - nearest) <= Number.EPSILON * Math.abs(quotient)
11
+ ? nearest
12
+ : Math.ceil(quotient)
13
+ }
14
+
15
+ // gamma(2) bounds seconds representation, unit conversion and arithmetic.
16
+ // include original clock operands before subtraction cancels their epoch.
17
+ /** @param {...number} operands */
18
+ export function frameTimingRoundingBound(...operands) {
19
+ return (
20
+ (Number.EPSILON / (1 - Number.EPSILON)) *
21
+ operands.reduce((sum, value) => sum + Math.abs(value), 0)
22
+ )
23
+ }
24
+
25
+ // a held trigger replays a touch schedule ({ scheduledMs, landedMs }, both in
26
+ // ms after the first touch). each lane delivers a touch after its schedule, so
27
+ // a stage keeps its time since the last touch scheduled at or before it, and
28
+ // the frame shows the finger state the schedule declares, that long after the
29
+ // finger got there.
30
+ /** @param {Array<{ scheduledMs: number, landedMs: number }> | null | undefined} touches @param {number} offsetMs */
31
+ export function stageTouchOffsetMs(touches, offsetMs) {
32
+ let last = null
33
+ for (const touch of touches ?? []) if (touch.scheduledMs <= offsetMs) last = touch
34
+ return last ? last.landedMs + offsetMs - last.scheduledMs : offsetMs
35
+ }
package/detox/gestures.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { scrollTouchSlop } from '../../peach-engine/src/engine/scroll-platform'
1
+ import { getCliRuntime } from '../src/cli-runtime.ts'
2
2
  import { pollUntil } from '../src/poll-until'
3
3
  // pull in @peach/globals so window.__sootsimTest and
4
4
  // window.__sootsimFindInteractiveCanvas are typed inside page.evaluate
@@ -348,7 +348,7 @@ export async function dragScrollNode(
348
348
  let endSootSimY = startSootSimY
349
349
  // recognition consumes only axis slop. compensate that distance once so
350
350
  // excess travel on the first move remains part of the requested scroll.
351
- const slop = scrollTouchSlop(DETOX_PLATFORM, 1)
351
+ const slop = getCliRuntime().engine_scroll_platform.scrollTouchSlop(DETOX_PLATFORM, 1)
352
352
  const travel = pixels + slop
353
353
 
354
354
  switch (direction) {
@@ -381,9 +381,7 @@ export async function dragScrollNode(
381
381
  const metrics = await readSootsimPageMetrics(page, 5000)
382
382
  const horizontal = direction === 'left' || direction === 'right'
383
383
  const startAxis = horizontal ? startSootSimX : startSootSimY
384
- const lowerBound = horizontal
385
- ? metrics.scrollWindow.left
386
- : metrics.scrollWindow.top
384
+ const lowerBound = horizontal ? metrics.scrollWindow.left : metrics.scrollWindow.top
387
385
  const upperBound = horizontal
388
386
  ? metrics.scrollWindow.right
389
387
  : metrics.scrollWindow.bottom
@@ -403,9 +401,7 @@ export async function dragScrollNode(
403
401
  const canvas = window.__sootsimFindInteractiveCanvas?.()
404
402
  if (!canvas) throw new Error('peach interactive canvas not found')
405
403
  const axisDelta =
406
- endPage.x !== startPage.x
407
- ? endPage.x - startPage.x
408
- : endPage.y - startPage.y
404
+ endPage.x !== startPage.x ? endPage.x - startPage.x : endPage.y - startPage.y
409
405
  const sign = Math.sign(axisDelta)
410
406
  const nextFrame = () =>
411
407
  new Promise<void>((resolve) => requestAnimationFrame(() => resolve()))
@@ -430,11 +426,7 @@ export async function dragScrollNode(
430
426
  let strokeRemaining = remaining + 10
431
427
  let point = startAxis
432
428
  const offsets = [point]
433
- while (
434
- strokeRemaining > 0 &&
435
- point > lowerBound &&
436
- point < upperBound
437
- ) {
429
+ while (strokeRemaining > 0 && point > lowerBound && point < upperBound) {
438
430
  const delta = Math.min(25, strokeRemaining)
439
431
  point += sign * delta
440
432
  strokeRemaining -= delta
@@ -540,11 +532,7 @@ export async function dispatchTwoFingerGesture(
540
532
  const canvas: HTMLCanvasElement | null =
541
533
  window.__sootsimFindInteractiveCanvas?.() ?? document.querySelector('canvas')
542
534
  if (!canvas) throw new Error('sootsim interactive canvas not found')
543
- const fire = (
544
- point: { x: number; y: number },
545
- id: number,
546
- primary: boolean,
547
- ) => {
535
+ const fire = (point: { x: number; y: number }, id: number, primary: boolean) => {
548
536
  canvas.dispatchEvent(
549
537
  new PointerEvent('pointerdown', {
550
538
  bubbles: true,