sootsim 0.1.271 → 0.1.273

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 (147) hide show
  1. package/README.md +2 -2
  2. package/detox/expectations.ts +84 -50
  3. package/dist-cli/bin.js +4 -4
  4. package/dist-cli/chunks/{agent-L744OWW2.js → agent-RY2XEBI4.js} +2 -2
  5. package/dist-cli/chunks/{agent-wrapper-F7YU7YQY.js → agent-wrapper-2JWRMQK3.js} +2 -2
  6. package/dist-cli/chunks/{app-fonts-AOVWJ64N.js → app-fonts-2QW4VIY2.js} +2 -2
  7. package/dist-cli/chunks/{assert-VM6WQOSH.js → assert-XJ3DVAL5.js} +2 -2
  8. package/dist-cli/chunks/{auth-I73YF2VH.js → auth-YOM3MY6Y.js} +2 -2
  9. package/dist-cli/chunks/beta-CKJTZEC2.js +2 -0
  10. package/dist-cli/chunks/{camera-5LP32MN5.js → camera-EEKTPZG4.js} +2 -2
  11. package/dist-cli/chunks/{chunk-DVUSIJGM.js → chunk-343JI4I2.js} +2 -2
  12. package/dist-cli/chunks/{chunk-V6JB3XB7.js → chunk-35WKL2MB.js} +2 -2
  13. package/dist-cli/chunks/{chunk-MP55R5YC.js → chunk-4GRRQEA3.js} +1 -1
  14. package/dist-cli/chunks/{chunk-SJRK4IQV.js → chunk-4VYPLSZX.js} +2 -2
  15. package/dist-cli/chunks/{chunk-YGEZZQ34.js → chunk-4VYSTDTE.js} +1 -1
  16. package/dist-cli/chunks/{chunk-7MWXZLC3.js → chunk-565TFOLU.js} +1 -1
  17. package/dist-cli/chunks/{chunk-QSUJV6FY.js → chunk-5FDV53XA.js} +1 -1
  18. package/dist-cli/chunks/{chunk-GATLQUZD.js → chunk-6CA6EBO3.js} +2 -2
  19. package/dist-cli/chunks/{chunk-NXJIRSYB.js → chunk-6DS5XJT5.js} +1 -1
  20. package/dist-cli/chunks/{chunk-TQK4ONSC.js → chunk-6UMAKITO.js} +3 -3
  21. package/dist-cli/chunks/{chunk-KNBKEQMZ.js → chunk-6YABIMDT.js} +1 -1
  22. package/dist-cli/chunks/{chunk-KDQDKEGD.js → chunk-7AOT4F42.js} +1 -1
  23. package/dist-cli/chunks/{chunk-BSKGIVGK.js → chunk-A4K5LKRP.js} +1 -1
  24. package/dist-cli/chunks/{chunk-I5GCWNIJ.js → chunk-A4NS2FVB.js} +1 -1
  25. package/dist-cli/chunks/{chunk-QPJHNF2H.js → chunk-AIVJBJ2Y.js} +2 -2
  26. package/dist-cli/chunks/{chunk-53YHX2QG.js → chunk-BAK2L2LI.js} +73 -69
  27. package/dist-cli/chunks/{chunk-6GT6YSKU.js → chunk-BVAGQ2NS.js} +1 -1
  28. package/dist-cli/chunks/{chunk-4SRHESEZ.js → chunk-CH5RNBQB.js} +2 -2
  29. package/dist-cli/chunks/{chunk-4ISBAFYP.js → chunk-CZHRHTEK.js} +2 -2
  30. package/dist-cli/chunks/{chunk-MY2BVCQF.js → chunk-D6M3O4UJ.js} +3 -3
  31. package/dist-cli/chunks/{chunk-WOLESEXG.js → chunk-D7WXHC3X.js} +2 -2
  32. package/dist-cli/chunks/{chunk-ZBGUJKMS.js → chunk-DHFXFBDV.js} +3 -3
  33. package/dist-cli/chunks/{chunk-Z6WIJUFD.js → chunk-EB3XV5F5.js} +2 -2
  34. package/dist-cli/chunks/{chunk-MVXVG2BX.js → chunk-EJH3FI7U.js} +2 -2
  35. package/dist-cli/chunks/{chunk-FLCWG5TT.js → chunk-FJGTGF3D.js} +1 -1
  36. package/dist-cli/chunks/{chunk-62CTB2NZ.js → chunk-FMA4WU4T.js} +1 -1
  37. package/dist-cli/chunks/{chunk-TIAKOUSI.js → chunk-IA3Z374S.js} +1 -1
  38. package/dist-cli/chunks/chunk-JIJN4BIT.js +2 -0
  39. package/dist-cli/chunks/{chunk-ACZDS4HL.js → chunk-JTSVDPX3.js} +1 -1
  40. package/dist-cli/chunks/chunk-M5MORYLO.js +2 -0
  41. package/dist-cli/chunks/{chunk-3PDYKW67.js → chunk-NJZMT75Z.js} +1 -1
  42. package/dist-cli/chunks/chunk-NQHXZIBC.js +2 -0
  43. package/dist-cli/chunks/{chunk-UTYJQ65T.js → chunk-Q74B7TLC.js} +2 -2
  44. package/dist-cli/chunks/{chunk-5PLAZK5V.js → chunk-SL7ITEPL.js} +2 -2
  45. package/dist-cli/chunks/{chunk-WIYFHKRE.js → chunk-STL3UBKD.js} +2 -2
  46. package/dist-cli/chunks/{chunk-WU3TJDWA.js → chunk-UQECJ6X7.js} +2 -2
  47. package/dist-cli/chunks/{chunk-OFKDXQMY.js → chunk-UZUBRINN.js} +2 -2
  48. package/dist-cli/chunks/{chunk-VI3WG25A.js → chunk-WESIOUQT.js} +2 -2
  49. package/dist-cli/chunks/{chunk-DQCYF257.js → chunk-WIDIBY2N.js} +2 -2
  50. package/dist-cli/chunks/{chunk-RBRFATPJ.js → chunk-XJ6VQYDX.js} +2 -2
  51. package/dist-cli/chunks/{chunk-KQTMW2VR.js → chunk-YLZGG6MD.js} +2 -2
  52. package/dist-cli/chunks/{chunk-2MAZYB4E.js → chunk-Z4TMT3OT.js} +1 -1
  53. package/dist-cli/chunks/{chunk-DDVJQ7KL.js → chunk-ZASTCWKL.js} +1 -1
  54. package/dist-cli/chunks/chunk-ZD7MRJC2.js +1 -0
  55. package/dist-cli/chunks/cli-version-A7HCRGTV.js +2 -0
  56. package/dist-cli/chunks/{compat-GTD44O52.js → compat-UYIVMZJ5.js} +3 -3
  57. package/dist-cli/chunks/{config-75QCBOYK.js → config-TXBLWS33.js} +2 -2
  58. package/dist-cli/chunks/{control-MOMQFZYG.js → control-FDADHJ25.js} +2 -2
  59. package/dist-cli/chunks/daemon-ID66VXWD.js +2 -0
  60. package/dist-cli/chunks/{debug-MOQUSHCC.js → debug-Y6YMYAZ5.js} +3 -3
  61. package/dist-cli/chunks/{desktop-5TQB3QBP.js → desktop-IF67YMZY.js} +3 -3
  62. package/dist-cli/chunks/{detox-EJIFEK7G.js → detox-TKXHHDEM.js} +2 -2
  63. package/dist-cli/chunks/{device-7XUADG3E.js → device-HS4L467M.js} +2 -2
  64. package/dist-cli/chunks/{diagnose-5DEHAEPK.js → diagnose-XJFXLNQS.js} +2 -2
  65. package/dist-cli/chunks/drivers-VCEL56H4.js +2 -0
  66. package/dist-cli/chunks/{film-AZXWITDW.js → film-DV6DNP2C.js} +3 -3
  67. package/dist-cli/chunks/flow-VBF6CP7Y.js +2 -0
  68. package/dist-cli/chunks/help-65JTTMOW.js +2 -0
  69. package/dist-cli/chunks/{hidden-runtime-alias-5FXUVO7I.js → hidden-runtime-alias-BTHAL2T7.js} +2 -2
  70. package/dist-cli/chunks/{home-paths-O6TNVGMZ.js → home-paths-CTUPSX2J.js} +2 -2
  71. package/dist-cli/chunks/inspect-VMN3IUAD.js +2 -0
  72. package/dist-cli/chunks/install-desktop-5HHUTF2L.js +2 -0
  73. package/dist-cli/chunks/{login-JZQBHZ6C.js → login-X6CCGXFJ.js} +4 -4
  74. package/dist-cli/chunks/{logout-W3ROHISE.js → logout-IBQHQ42Y.js} +2 -2
  75. package/dist-cli/chunks/{maestro-REMOLABE.js → maestro-M5376PL3.js} +3 -3
  76. package/dist-cli/chunks/{maestro-generate-IU2RUQLO.js → maestro-generate-QEQPNBHL.js} +3 -3
  77. package/dist-cli/chunks/{mode-2GQRQPIW.js → mode-NJWCUUT3.js} +2 -2
  78. package/dist-cli/chunks/optional-demo-registry-3R5RBJQI.js +2 -0
  79. package/dist-cli/chunks/{perf-CU7CUMKX.js → perf-WWKFD3MJ.js} +2 -2
  80. package/dist-cli/chunks/{record-XX3RELNP.js → record-MCAMAKYJ.js} +3 -3
  81. package/dist-cli/chunks/runtime-V6OPNNEX.js +2 -0
  82. package/dist-cli/chunks/{screenshot-command-UCB5GMXA.js → screenshot-command-UTZLRBPH.js} +3 -3
  83. package/dist-cli/chunks/{screenshots-capture-3ALWS273.js → screenshots-capture-QNX6LRHI.js} +2 -2
  84. package/dist-cli/chunks/{serve-GDMRYWRG.js → serve-4ELR7DTA.js} +2 -2
  85. package/dist-cli/chunks/{setup-HPSMVFGT.js → setup-5NHEPHDE.js} +3 -3
  86. package/dist-cli/chunks/{skills-B3FYCUCU.js → skills-OKH37AOP.js} +2 -2
  87. package/dist-cli/chunks/{storage-42GBCFPY.js → storage-QCIXAHOW.js} +2 -2
  88. package/dist-cli/chunks/store-X6LAVE5L.js +2 -0
  89. package/dist-cli/chunks/telemetry-UQVHOAJA.js +2 -0
  90. package/dist-cli/chunks/{timeline-VOVG5QCE.js → timeline-C5RZTQE6.js} +2 -2
  91. package/dist-cli/chunks/{upgrade-AJJ3DDIH.js → upgrade-SRZVUBH4.js} +2 -2
  92. package/dist-cli/chunks/upload-MA6PXOW3.js +2 -0
  93. package/dist-cli/chunks/{version-I46ZOIB5.js → version-LELQYDFL.js} +2 -2
  94. package/dist-cli/chunks/{web-TA7Z2M3K.js → web-UIV7BMMJ.js} +2 -2
  95. package/dist-cli/chunks/{what-happened-L7WYY5P3.js → what-happened-UXTKTYRS.js} +2 -2
  96. package/dist-lib/agent-daemon-client.cjs +1 -1
  97. package/dist-lib/agent-events.cjs +1 -1
  98. package/dist-lib/agent-identity.cjs +1 -1
  99. package/dist-lib/agent-sessions.cjs +1 -1
  100. package/dist-lib/attached-projects.cjs +1 -1
  101. package/dist-lib/auth/shared-session.cjs +1 -1
  102. package/dist-lib/backend-origin.cjs +1 -1
  103. package/dist-lib/beta.cjs +1 -1
  104. package/dist-lib/beta.mjs +1 -1
  105. package/dist-lib/bridge-constants.cjs +1 -1
  106. package/dist-lib/cli-constants.cjs +1 -1
  107. package/dist-lib/config.cjs +1 -1
  108. package/dist-lib/detox/index.cjs +61 -44
  109. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  110. package/dist-lib/home-paths.cjs +1 -1
  111. package/dist-lib/host/bridge-host.cjs +1 -1
  112. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  113. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  114. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  115. package/dist-lib/host/websocket-proxy.cjs +1 -1
  116. package/dist-lib/index.cjs +1 -1
  117. package/dist-lib/jump-to-source-babel.cjs +1 -1
  118. package/dist-lib/menu.cjs +1 -1
  119. package/dist-lib/menu.mjs +1 -1
  120. package/dist-lib/metro.cjs +1 -1
  121. package/dist-lib/profiles.cjs +1 -1
  122. package/dist-lib/render-mode.cjs +1 -1
  123. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  124. package/dist-lib/sdk.cjs +1 -1
  125. package/dist-lib/sdk.mjs +1 -1
  126. package/dist-lib/skills.cjs +1 -1
  127. package/dist-lib/vite.cjs +1 -1
  128. package/package.json +1 -1
  129. package/skills/sootsim-debug/SKILL.md +8 -0
  130. package/skills/sootsim-perf/SKILL.md +23 -4
  131. package/dist-cli/chunks/beta-FKJVCD4P.js +0 -2
  132. package/dist-cli/chunks/chunk-ILNCM267.js +0 -2
  133. package/dist-cli/chunks/chunk-JTQM46FY.js +0 -1
  134. package/dist-cli/chunks/chunk-OFYXCIJ4.js +0 -1
  135. package/dist-cli/chunks/chunk-RVATR53A.js +0 -2
  136. package/dist-cli/chunks/cli-version-YLTMQC3T.js +0 -2
  137. package/dist-cli/chunks/daemon-MCX26DKV.js +0 -2
  138. package/dist-cli/chunks/drivers-6QDWYOP5.js +0 -2
  139. package/dist-cli/chunks/flow-SBH3AZJ3.js +0 -2
  140. package/dist-cli/chunks/help-SLGCB5J2.js +0 -2
  141. package/dist-cli/chunks/inspect-NMJDGO37.js +0 -2
  142. package/dist-cli/chunks/install-desktop-PO67KHJF.js +0 -2
  143. package/dist-cli/chunks/optional-demo-registry-FNHY44IB.js +0 -2
  144. package/dist-cli/chunks/runtime-7TVHW27R.js +0 -2
  145. package/dist-cli/chunks/store-OTCZNVYJ.js +0 -2
  146. package/dist-cli/chunks/telemetry-LSW2JFI3.js +0 -2
  147. package/dist-cli/chunks/upload-D6KRF57A.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-FLCWG5TT.js";import{g as A,i as _}from"./chunk-UTYJQ65T.js";import"./chunk-MP55R5YC.js";import{c as k}from"./chunk-NXJIRSYB.js";import"./chunk-QSUJV6FY.js";import"./chunk-KDQDKEGD.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-FJGTGF3D.js";import{g as A,i as _}from"./chunk-Q74B7TLC.js";import"./chunk-4GRRQEA3.js";import{c as k}from"./chunk-6DS5XJT5.js";import"./chunk-5FDV53XA.js";import"./chunk-7AOT4F42.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
3
3
  sootsim what-happened \u2014 show recent events from the semantic timeline
4
4
 
5
5
  usage:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -711,36 +711,25 @@ async function scrollMatcherElement(page, findNode, matcher, pixels, direction)
711
711
  if (!node) {
712
712
  throw new Error(`scroll container not found: ${JSON.stringify(matcher)}`);
713
713
  }
714
+ const before = scrollOffsetOf(node);
714
715
  await dragScrollNode(page, node, pixels, direction);
716
+ const after = scrollOffsetOf(await findNode(matcher));
717
+ return Math.abs(after.x - before.x) + Math.abs(after.y - before.y);
715
718
  }
716
- function isNodeVisibleInViewport(node, viewport) {
717
- if (!node || node.layout.width <= 0 || node.layout.height <= 0) {
718
- return false;
719
- }
720
- const frame = node.visibleFrame ?? {
721
- x: node.absolutePosition?.x ?? node.layout?.x ?? 0,
722
- y: node.absolutePosition?.y ?? node.layout?.y ?? 0,
723
- width: node.layout.width,
724
- height: node.layout.height
725
- };
726
- const right = frame.x + frame.width;
727
- const bottom = frame.y + frame.height;
728
- const visibleWidth = Math.max(0, Math.min(right, viewport.width) - Math.max(frame.x, 0));
729
- const visibleHeight = Math.max(
730
- 0,
731
- Math.min(bottom, viewport.height) - Math.max(frame.y, 0)
732
- );
733
- const visibleArea = visibleWidth * visibleHeight;
734
- const totalArea = node.layout.width * node.layout.height;
735
- return totalArea > 0 && visibleArea / totalArea >= DEFAULT_VISIBILITY_THRESHOLD;
719
+ function scrollOffsetOf(node) {
720
+ return { x: node?.scrollOffsetX ?? 0, y: node?.scrollOffsetY ?? 0 };
736
721
  }
737
- async function isNodeVisible(page, node) {
738
- if (!node || node.layout.width <= 0 || node.layout.height <= 0) {
739
- return false;
740
- }
741
- return isNodeVisibleInViewport(node, await readSootsimInteractiveViewport(page));
722
+ function visibleFraction(node) {
723
+ const totalArea = (node?.layout?.width ?? 0) * (node?.layout?.height ?? 0);
724
+ const frame = node?.visibleFrame;
725
+ if (totalArea <= 0 || !frame) return 0;
726
+ const visibleArea = Math.max(0, frame.width) * Math.max(0, frame.height);
727
+ return visibleArea / totalArea;
728
+ }
729
+ function isNodeVisible(node) {
730
+ return visibleFraction(node) >= DEFAULT_VISIBILITY_THRESHOLD;
742
731
  }
743
- function describeNodeVisibility(node, viewport) {
732
+ function describeNodeVisibility(node) {
744
733
  if (!node) return "not found";
745
734
  const absX = node.absolutePosition?.x ?? node.layout?.x ?? 0;
746
735
  const absY = node.absolutePosition?.y ?? node.layout?.y ?? 0;
@@ -754,7 +743,8 @@ function describeNodeVisibility(node, viewport) {
754
743
  bottom: absY + (node.layout?.height ?? 0)
755
744
  },
756
745
  visibleFrame: node.visibleFrame ?? null,
757
- viewport: viewport ?? null,
746
+ visibleFraction: visibleFraction(node),
747
+ threshold: DEFAULT_VISIBILITY_THRESHOLD,
758
748
  style: node.style ?? null
759
749
  });
760
750
  }
@@ -801,9 +791,7 @@ var SootSimExpectation = class _SootSimExpectation {
801
791
  }
802
792
  async toBeVisible() {
803
793
  const node = await this.findNode(this.matcher);
804
- const page = this.getPage();
805
- const viewport = node ? await readSootsimInteractiveViewport(page) : void 0;
806
- const visible = viewport ? isNodeVisibleInViewport(node, viewport) : false;
794
+ const visible = isNodeVisible(node);
807
795
  if (this.negated) {
808
796
  if (visible) {
809
797
  throw new Error(
@@ -813,14 +801,14 @@ var SootSimExpectation = class _SootSimExpectation {
813
801
  } else {
814
802
  if (!visible) {
815
803
  throw new Error(
816
- `expected element to be visible but it is ${describeNodeVisibility(node, viewport)}: ${JSON.stringify(this.matcher)}`
804
+ `expected element to be visible but it is ${describeNodeVisibility(node)}: ${JSON.stringify(this.matcher)}`
817
805
  );
818
806
  }
819
807
  }
820
808
  }
821
809
  async toBeNotVisible() {
822
810
  const node = await this.findNode(this.matcher);
823
- const visible = await isNodeVisible(this.getPage(), node);
811
+ const visible = isNodeVisible(node);
824
812
  if (visible) {
825
813
  throw new Error(
826
814
  `expected element NOT to be visible: ${JSON.stringify(this.matcher)}`
@@ -915,7 +903,26 @@ var SootSimExpectation = class _SootSimExpectation {
915
903
  }
916
904
  }
917
905
  async toBeFocused() {
918
- await this.toExist();
906
+ const node = await this.findNode(this.matcher);
907
+ if (!node) {
908
+ throw new Error(
909
+ `element not found for toBeFocused: ${JSON.stringify(this.matcher)}`
910
+ );
911
+ }
912
+ const nodeId = typeof node.nodeId === "number" ? node.nodeId : typeof node.id === "number" ? node.id : null;
913
+ const focused = nodeId !== null && await this.getPage().evaluate((id) => {
914
+ const active = document.activeElement;
915
+ return active?.getAttribute("data-sootsim-id") === String(id);
916
+ }, nodeId);
917
+ if (this.negated) {
918
+ if (focused) {
919
+ throw new Error(
920
+ `expected element NOT to be focused: ${JSON.stringify(this.matcher)}`
921
+ );
922
+ }
923
+ } else if (!focused) {
924
+ throw new Error(`expected element to be focused: ${JSON.stringify(this.matcher)}`);
925
+ }
919
926
  }
920
927
  async toHaveValue(value) {
921
928
  const node = await this.findNode(this.matcher);
@@ -977,12 +984,10 @@ var SootSimWaitForChain = class {
977
984
  toBeVisible() {
978
985
  this.assertionFn = async () => {
979
986
  const node = await this.findNode(this.matcher);
980
- const page = this.getPage();
981
- const viewport = node ? await readSootsimInteractiveViewport(page) : void 0;
982
- const visible = viewport ? isNodeVisibleInViewport(node, viewport) : false;
987
+ const visible = isNodeVisible(node);
983
988
  if (this._negated ? visible : !visible) {
984
989
  throw new Error(
985
- `waitFor toBeVisible failed (${describeNodeVisibility(node, viewport)}): ${JSON.stringify(this.matcher)}`
990
+ `waitFor toBeVisible failed (${describeNodeVisibility(node)}): ${JSON.stringify(this.matcher)}`
986
991
  );
987
992
  }
988
993
  };
@@ -991,7 +996,7 @@ var SootSimWaitForChain = class {
991
996
  toBeNotVisible() {
992
997
  this.assertionFn = async () => {
993
998
  const node = await this.findNode(this.matcher);
994
- const visible = await isNodeVisible(this.getPage(), node);
999
+ const visible = isNodeVisible(node);
995
1000
  if (visible) {
996
1001
  throw new Error(`waitFor toBeNotVisible failed: ${JSON.stringify(this.matcher)}`);
997
1002
  }
@@ -1080,22 +1085,34 @@ var SootSimWaitForScrollAction = class {
1080
1085
  this.getPage = getPage2;
1081
1086
  this.matcher = matcher;
1082
1087
  }
1088
+ // detox scrolls the container until the expectation passes or the container
1089
+ // can no longer move. bounding this by wall clock instead made the result
1090
+ // depend on how fast the host dispatches pointer events: the same fixture and
1091
+ // the same assertion pass on an idle machine and fail on a loaded one,
1092
+ // because each 200px drag is a real pointer stream and fewer of them fit in
1093
+ // the budget. end on scroll exhaustion, which is a property of the content.
1083
1094
  async scroll(pixels, direction, _startPositionX, _startPositionY) {
1084
1095
  const page = this.getPage();
1085
- const start = Date.now();
1086
- const timeoutMs = 5e3;
1087
1096
  let lastError = null;
1088
- while (Date.now() - start < timeoutMs) {
1097
+ let stalledSteps = 0;
1098
+ while (stalledSteps < 2) {
1089
1099
  try {
1090
1100
  await this.assertionFn();
1091
1101
  return;
1092
1102
  } catch (error) {
1093
1103
  lastError = error;
1094
1104
  }
1095
- await scrollMatcherElement(page, this.findNode, this.matcher, pixels, direction);
1105
+ const travelled = await scrollMatcherElement(
1106
+ page,
1107
+ this.findNode,
1108
+ this.matcher,
1109
+ pixels,
1110
+ direction
1111
+ );
1112
+ stalledSteps = travelled < 0.5 ? stalledSteps + 1 : 0;
1096
1113
  }
1097
1114
  throw lastError || new Error(
1098
- `waitFor whileElement(...).scroll() timed out: ${JSON.stringify(this.matcher)}`
1115
+ `waitFor whileElement(...).scroll() reached the end of ${JSON.stringify(this.matcher)}`
1099
1116
  );
1100
1117
  }
1101
1118
  };
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/menu.ts
4
4
  var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.273 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sootsim",
3
- "version": "0.1.271",
3
+ "version": "0.1.273",
4
4
  "description": "sootsim CLI + vite/metro plugins + skills registry. bridge client for driving the proprietary sootsim-engine over WebSocket.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "MIT",
@@ -143,6 +143,14 @@ sootsim debug diff before after # structural diff: what changed?
143
143
  sootsim what-happened # timeline events during the repro
144
144
  ```
145
145
 
146
+ for nested scroll ownership or momentum transfer, compare the shell's resolved
147
+ gesture chain with the published scroll registry:
148
+
149
+ ```sh
150
+ sootsim debug state scroll-input
151
+ sootsim debug state scroll-mirror
152
+ ```
153
+
146
154
  reading `describe` output:
147
155
 
148
156
  ```
@@ -42,10 +42,12 @@ indict, remeasure — and every wasted week came from skipping a step.
42
42
  existed. the frame-demand gate was blind to commit storms. the vsync
43
43
  pump flapped 100 msgs/s at rest. never assume a tier works because it's
44
44
  wired; read its counter during the exact workload.
45
- 3. **check free memory before blaming code.** an OOM machine mimics every
46
- perf and infra failure. `vm_stat` (free < ~6 GB) and `sysctl -n
47
- vm.loadavg` first. also check for abandoned playwright chromiums
48
- (`pgrep -alf ms-playwright`).
45
+ 3. **check free memory and sampled CPU before blaming code.** an OOM or busy
46
+ machine mimics every perf and infra failure. read `vm_stat`, then take at
47
+ least two `top -l 2` samples and use the busiest sample for admission.
48
+ attribute browser processes with `ps -eo pid,ppid,args` before treating
49
+ one as abandoned or stopping an exact pid. load average is not an
50
+ admission signal on macOS.
49
51
  4. **never trade animation fidelity for CPU.** the home clock sweeps
50
52
  sub-second like real iOS; discrete ticks have been proposed and rejected
51
53
  repeatedly. attack per-frame cost (layers, caching, damage), never
@@ -134,6 +136,23 @@ attributes a missing frame to its hop:
134
136
  compare baseline vs contended captures of the same scripted window; also
135
137
  compare **painted-frame counts**, the crudest and most robust signal.
136
138
 
139
+ the compositor cadence lines separate worker delivery from work submitted by
140
+ the worker:
141
+
142
+ - `engine-empty rAF` includes only sustained intervals where adjacent frames
143
+ have no engine demand, input message, shared-slot demand epoch change,
144
+ paint, prewarm pass, or CanvasKit flush.
145
+ - `rAF with CanvasKit flush` and `rAF after CanvasKit flush` isolate the frame
146
+ that called `Surface.flush()` and the next delivered frame.
147
+ - `CanvasKit submission` measures intervals between final `Surface.flush()`
148
+ completions on frames that submitted at least one surface. The JSON
149
+ `frameSeries` preserves each phase flag and exact count for correlation.
150
+
151
+ these are engine-owned boundaries. Playwright exposes raw CDP sessions only
152
+ for Chromium, and WebKit's public Inspector timeline exposes a WebCore
153
+ `Composite` record without a RemoteLayerTree transaction id or commit event.
154
+ Do not label CanvasKit flush or compositor rAF as a RemoteLayerTree commit.
155
+
137
156
  ## the contention harness ("smooth alone, laggy on a zoom call")
138
157
 
139
158
  low-load numbers do not predict feel under real-world CPU pressure. run the
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-I5GCWNIJ.js";import"./chunk-KDQDKEGD.js";export{d as BETA_ASK_HEADLINE,b as BETA_LABEL,c as BETA_TAGLINE,a as IS_BETA};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c as b,k as f,l as k,m as w}from"./chunk-RVATR53A.js";var y="sootsim:settings",g=["errorReporting","colorScheme","reduceMotion","a11yMode","a11yDepth","screenshotCanvas","screenshotBackground","screenshotText","screenshotPose","screenshotDynamicSize","alwaysShowLiveWebViews","agentProvider","onboardingComplete","betaConsentVersion","detailedTelemetry"];function m(){if(typeof window>"u")return null;let e=window.sootsimElectron;return e&&typeof e=="object"?e:null}function u(e){let n={};for(let t of g){if(!(t in e))continue;let i=e[t],o=f[t];o.validate&&!o.validate(i)||o.options&&!o.options.includes(i)||(n[t]=i)}return n}function V(e){let n={};for(let t of g)n[t]=e[t];return n}function D(){if(typeof localStorage>"u")return{};try{let e=localStorage.getItem(y);return e?u(JSON.parse(e)):{}}catch{return{}}}function j(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(y,JSON.stringify(e))}catch{}}function x(){let n=m()?.sharedConfig?.settings;return!n||typeof n!="object"?{}:u(n)}function M(e){let n=m();if(n?.writeSharedConfig)try{n.writeSharedConfig({settings:e})}catch{}}function C(){if(typeof window>"u")return null;let e=window.__sootsimSharedConfig;return e&&typeof e=="object"?e:null}function T(){let e=C()?.settings;return!e||typeof e!="object"?{}:u(e)}function I(e){if(!C())return;let n={settings:e};try{if(globalThis.__sootsimBridgeRequest?.writeSharedConfig?.(n))return}catch{}if(!(typeof fetch>"u"))try{fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n),keepalive:!0}).catch(()=>{})}catch{}}function K(){let e=D(),n=T(),t=x();return{...e,...n,...t}}function P(e,n={}){let t=V(e);for(let i of g)n[i]!==void 0&&(t[i]=n[i]);j(t),M(t),I(t)}function _(e){if(typeof window>"u")return()=>{};let n=r=>{if(!(r.key!==y||r.newValue==null))try{e(u(JSON.parse(r.newValue)))}catch{}};window.addEventListener("storage",n);let t=m(),i;t?.onSharedConfigChanged&&(i=t.onSharedConfigChanged(r=>{let d=r?.settings;!d||typeof d!="object"||e(u(d))}));let c=globalThis.__sootsimBridgeRequest?.subscribeSharedConfig?.(r=>{let d=r?.settings;!d||typeof d!="object"||e(u(d))});return()=>{window.removeEventListener("storage",n),i?.(),c?.()}}var B=k(),L=w(),S=K(),l=new Set,h={};for(let e of g)B[e]!==void 0&&(l.add(e),S[e]!==void 0&&(h[e]=S[e]),delete S[e]);var s={...L,...S},p=[],a=null;function v(){for(let e of p)e()}function R(){v(),P(s,h)}function E(e,n){let t=f[e];return t.validate&&!t.validate(n)||t.options&&!t.options.includes(n)||s[e]===n?!1:(s={...s,[e]:n},e==="deviceModel"&&(a=null),!0)}_(e=>{let n={...s},t=!1;for(let[i,o]of Object.entries(e)){let c=i;if(l.has(c)){h[c]=o;continue}n[c]!==o&&(n[c]=o,t=!0)}t&&(s=n,a=null,v())});var N={get(e){return s[e]},set(e,n){E(e,n)&&R()},setRuntime(e,n){l.has(e)||(l.add(e),g.includes(e)&&(h[e]=s[e])),E(e,n)&&v()},isRuntimeControlled(e){return l.has(e)},getAll(){return s},apply(e){let n=!1,t={...s};for(let[i,o]of Object.entries(e)){if(o===void 0)continue;let c=i,r=f[c];r&&(r.validate&&!r.validate(o)||r.options&&!r.options.includes(o)||t[c]!==o&&(t[c]=o,n=!0))}n&&(s=t,a=null,R())},reset(){s=w(),a=null,R()},subscribe(e){return p.push(e),()=>{p=p.filter(n=>n!==e)}},getDeviceSpec(){return a||(a=b(s.deviceModel)),a},getA11yMode(){return s.a11yMode},setA11yMode(e){this.set("a11yMode",e)},getInspectMode(){return s.inspectMode},setInspectMode(e){this.set("inspectMode",e)}};export{N as a};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- function r(e,t,i,s){return{width:3,ringToggle:{side:"left",top:e[0],height:e[1]},volumeUp:{side:"left",top:t[0],height:t[1]},volumeDown:{side:"left",top:i[0],height:i[1]},lock:{side:"right",top:s[0],height:s[1]}}}var B={width:2.5,lock:{side:"right",top:188.7,height:68.1},ringToggle:{side:"left",top:113.2,height:36},volumeUp:{side:"left",top:188.2,height:68.1},volumeDown:{side:"left",top:269,height:68.1}},f={width:3,lock:{side:"right",top:671/2.625,height:163/2.625},ringToggle:{side:"left",top:-1e3,height:0},volumeUp:{side:"right",top:971/2.625,height:165/2.625},volumeDown:{side:"right",top:1136/2.625,height:166/2.625}},w={width:3,lock:{side:"right",top:248,height:72},ringToggle:{side:"left",top:-1e3,height:0},volumeUp:{side:"right",top:144,height:62},volumeDown:{side:"right",top:216,height:62}},a=24,c="17",d=37,x=1080/2.625,P=2400/2.625,l=132/2.625;function o(e){return{top:e,right:e,bottom:e,left:e}}function R(e){let t=(e.frameInsets.top+e.frameInsets.right+e.frameInsets.bottom+e.frameInsets.left)/4,i=Math.max(Math.abs(e.frameInsets.top-t),Math.abs(e.frameInsets.right-t),Math.abs(e.frameInsets.bottom-t),Math.abs(e.frameInsets.left-t));return{frameRadius:e.cornerRadius+t,frameRadiusApproximationError:i,screenRadius:e.cornerRadius}}function C(e){return{...R(e),frameHeight:e.frameInsets.top+e.height+e.frameInsets.bottom,frameWidth:e.frameInsets.left+e.width+e.frameInsets.right,screenBottomInset:e.frameInsets.bottom,screenLeft:e.frameInsets.left,screenRightInset:e.frameInsets.right,screenTop:e.frameInsets.top}}function n(e){return{...e,platform:"ios",navigationBarHeight:0,navigationBarMode:e.homeIndicatorHeight>0?"gesture":"none",displayCutout:{top:e.dynamicIsland?e.statusBarHeight:0,bottom:0,left:0,right:0},cameraCutout:null,osVersion:e.iosVersion,androidApiLevel:null,systemName:"iOS",manufacturer:"Apple",brand:"Apple",modelName:e.name}}var b={"canvas-workspace":n({name:"Canvas Workspace",width:1440,height:900,scale:1,statusBarHeight:0,homeIndicatorHeight:0,cornerRadius:0,continuousCornerRadius:0,frameInsets:o(16),dynamicIsland:null,safeAreaInsets:{top:0,bottom:0,left:0,right:0},iosVersion:"26.4",physicalPPI:110,hardwareButtons:r([185.8,41.7],[258.2,67.6],[344,67.6],[281.5,106.9]),experimental:!0}),"iphone-se":n({name:"iPhone SE",width:375,height:667,scale:2,statusBarHeight:20,homeIndicatorHeight:0,cornerRadius:0,continuousCornerRadius:0,frameInsets:o(28.7),dynamicIsland:null,safeAreaInsets:{top:20,bottom:0,left:0,right:0},iosVersion:"15.8",physicalPPI:326,hardwareButtons:B}),"iphone-14":n({name:"iPhone 14",width:390,height:844,scale:3,statusBarHeight:47,homeIndicatorHeight:34,cornerRadius:46.2,continuousCornerRadius:67.462,frameInsets:o(19.5),dynamicIsland:null,safeAreaInsets:{top:47,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:r([141.7,29.7],[205.9,69.6],[289.5,69.6],[228.9,114.5])}),"iphone-15":n({name:"iPhone 15",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:o(18.2),dynamicIsland:{width:126,height:37.3,top:14.1},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:r([171.7,32],[235.8,65.3],[320.5,65.3],[280.6,105.2])}),"iphone-15-plus":n({name:"iPhone 15 Plus",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:o(17.3),dynamicIsland:{width:126,height:37.3,top:11.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:r([172.1,33],[236.1,66.6],[321.2,66.6],[281,106.8])}),"iphone-15-pro":n({name:"iPhone 15 Pro",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:o(15.3),dynamicIsland:{width:126,height:38,top:13.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"18.2",physicalPPI:460,hardwareButtons:r([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-15-pro-max":n({name:"iPhone 15 Pro Max",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:o(15.3),dynamicIsland:{width:126,height:38,top:13.3},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"18.2",physicalPPI:460,hardwareButtons:r([173.3,32.2],[253.4,61.7],[343.3,61.7],[268.5,98.5])}),"iphone-16":n({name:"iPhone 16",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:o(15.3),dynamicIsland:{width:126,height:37.3,top:11},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-16-plus":n({name:"iPhone 16 Plus",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:o(15.3),dynamicIsland:{width:126,height:37.3,top:11.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([173.3,32.2],[253.4,61.7],[343.3,61.7],[268.5,98.5])}),"iphone-16-pro":n({name:"iPhone 16 Pro",width:402,height:874,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:o(15.3),dynamicIsland:{width:126,height:38,top:13.5},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-16-pro-max":n({name:"iPhone 16 Pro Max",width:440,height:956,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61.3,continuousCornerRadius:85.163,frameInsets:o(15.4),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"iphone-17":n({name:"iPhone 17",width:402,height:874,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:o(15.3),dynamicIsland:{width:126,height:37.3,top:14},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-17-air":n({name:"iPhone Air",width:420,height:912,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:64.6,continuousCornerRadius:88.313,frameInsets:o(15.4),dynamicIsland:{width:126,height:38,top:20},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"iphone-17-pro":n({name:"iPhone 17 Pro",width:402,height:874,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:o(15.3),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-17-pro-max":n({name:"iPhone 17 Pro Max",width:440,height:956,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61.3,continuousCornerRadius:85.163,frameInsets:o(15.4),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:r([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"pixel-8":{platform:"android",name:"Pixel 8",width:x,height:P,scale:2.625,statusBarHeight:l,homeIndicatorHeight:0,navigationBarHeight:a,navigationBarMode:"gesture",displayCutout:{top:l,bottom:0,left:0,right:0},cornerRadius:39,continuousCornerRadius:39,frameInsets:{top:55/2.625,right:50/2.625,bottom:58/2.625,left:49/2.625},dynamicIsland:null,cameraCutout:{diameter:72.5/2.625},safeAreaInsets:{top:l,bottom:a,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 8",physicalPPI:428,hardwareButtons:f},"pixel-8-three-button":{platform:"android",name:"Pixel 8 (3-button)",width:x,height:P,scale:2.625,statusBarHeight:l,homeIndicatorHeight:0,navigationBarHeight:48,navigationBarMode:"three-button",displayCutout:{top:l,bottom:0,left:0,right:0},cornerRadius:39,continuousCornerRadius:39,frameInsets:{top:55/2.625,right:50/2.625,bottom:58/2.625,left:49/2.625},dynamicIsland:null,cameraCutout:{diameter:72.5/2.625},safeAreaInsets:{top:l,bottom:48,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 8",physicalPPI:428,hardwareButtons:f},"pixel-9-pro-xl":{platform:"android",name:"Pixel 9 Pro XL",width:448,height:997,scale:3,statusBarHeight:40,homeIndicatorHeight:0,navigationBarHeight:a,navigationBarMode:"gesture",displayCutout:{top:40,bottom:0,left:0,right:0},cornerRadius:41,continuousCornerRadius:41,frameInsets:o(12),dynamicIsland:null,cameraCutout:{diameter:24},safeAreaInsets:{top:40,bottom:a,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 9 Pro XL",physicalPPI:486,hardwareButtons:f},"galaxy-s24":{platform:"android",name:"Galaxy S24",width:360,height:780,scale:3,statusBarHeight:36,homeIndicatorHeight:0,navigationBarHeight:a,navigationBarMode:"gesture",displayCutout:{top:36,bottom:0,left:0,right:0},cornerRadius:36,continuousCornerRadius:36,frameInsets:o(8),dynamicIsland:null,cameraCutout:{diameter:18},safeAreaInsets:{top:36,bottom:a,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Samsung",brand:"samsung",modelName:"SM-S921B",physicalPPI:416,hardwareButtons:w},"galaxy-s24-ultra":{platform:"android",name:"Galaxy S24 Ultra",width:384,height:832,scale:3.75,statusBarHeight:36,homeIndicatorHeight:0,navigationBarHeight:a,navigationBarMode:"gesture",displayCutout:{top:36,bottom:0,left:0,right:0},cornerRadius:24,continuousCornerRadius:24,frameInsets:o(9),dynamicIsland:null,cameraCutout:{diameter:18},safeAreaInsets:{top:36,bottom:a,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Samsung",brand:"samsung",modelName:"SM-S928B",physicalPPI:505,hardwareButtons:w}},I="iphone-17-pro";function D(e){return b[e]}function y(){return Object.keys(b)}function N(){return y().filter(e=>!b[e].experimental)}var m={"iphone-6-9":{name:"iphone-6-9",label:'iPhone 6.7"',width:1284,height:2778,store:"apple"},"iphone-6-1":{name:"iphone-6-1",label:'iPhone 6.5"',width:1242,height:2688,store:"apple"},"android-phone":{name:"android-phone",label:"Google Play phone",width:1080,height:1920,store:"google"},"android-tablet-7":{name:"android-tablet-7",label:'Google Play 7" tablet',width:1200,height:1920,store:"google"},"android-tablet-10":{name:"android-tablet-10",label:'Google Play 10" tablet',width:1600,height:2560,store:"google"}},p={dark:{type:"gradient",direction:180,glow:"#4caeff",stops:[{offset:0,color:"#111827"},{offset:40,color:"#101725"},{offset:100,color:"#06080d"}]},cyan:{type:"gradient",direction:180,glow:"#25c3ec",stops:[{offset:0,color:"#1b465c"},{offset:32,color:"#122336"},{offset:100,color:"#05070b"}]},gold:{type:"gradient",direction:180,glow:"#ffc25a",stops:[{offset:0,color:"#3b2f1a"},{offset:34,color:"#18140d"},{offset:100,color:"#050505"}]},red:{type:"gradient",direction:180,glow:"#ff6178",stops:[{offset:0,color:"#3e1018"},{offset:35,color:"#17080c"},{offset:100,color:"#050405"}]}},M={color:"#25c3ec",blur:120,spread:52,opacity:.34},_="iphone-17-pro";var A=[{name:"white",value:"#ffffff"},{name:"gray-light",value:"#d1d5db"},{name:"gray",value:"#6b7280"},{name:"gray-dark",value:"#3b4350"},{name:"slate",value:"#2a3644"},{name:"black",value:"#000000"},{name:"cyan",value:"#25c3ec"},{name:"blue",value:"#3f7cff"},{name:"teal",value:"#1fc7b4"},{name:"green",value:"#42c95d"},{name:"lime",value:"#92d21b"},{name:"gold",value:"#f5c518"},{name:"orange",value:"#ff912e"},{name:"coral",value:"#ff6f5b"},{name:"red",value:"#ff4f6f"},{name:"berry",value:"#d054ff"},{name:"magenta",value:"#ff4eb8"}],v=Object.fromEntries(A.map(e=>[e.name,e.value]));function O(e){return v[e]??v.gray}function V(e){return Object.prototype.hasOwnProperty.call(m,e)?m[e]:null}function T(e){return{type:e.type,color:e.color,direction:e.direction,glow:e.glow,stops:e.stops?.map(t=>({...t}))}}function F(e){return Object.prototype.hasOwnProperty.call(p,e)?T(p[e]):null}var S={deviceModel:{type:"enum",default:I,description:"device model to simulate",cliFlag:"device",cliFlagShort:"d",options:y(),group:"device"},orientation:{type:"enum",default:"portrait",description:"screen orientation",cliFlag:"orientation",options:["portrait","landscape"],group:"device"},colorScheme:{type:"enum",default:"auto",description:"color scheme (auto follows system preference)",cliFlag:"theme",cliFlagShort:"t",options:["light","dark","auto"],group:"appearance"},reduceMotion:{type:"boolean",default:!1,description:"reduce motion",group:"appearance"},boldText:{type:"boolean",default:!1,description:"bold text",group:"appearance"},fontSize:{type:"number",default:1,description:"font size multiplier (1.0 = default)",group:"appearance",validate:e=>e>=.5&&e<=2},networkCondition:{type:"enum",default:"wifi",description:"simulated network condition",cliFlag:"network",options:["wifi","lte","fast-3g","slow-3g","offline"],group:"network"},language:{type:"string",default:"en",description:"language code (ISO 639-1)",cliFlag:"language",group:"locale"},region:{type:"string",default:"US",description:"region code (ISO 3166-1)",cliFlag:"region",group:"locale"},renderDensity:{type:"number",default:0,description:"render density override in device pixels per point for high-resolution capture (0 = device native)",group:"simulator",validate:e=>e===0||e>=1&&e<=9},showTouches:{type:"boolean",default:!1,description:"show touch indicators",group:"simulator"},showFrame:{type:"boolean",default:!0,description:"show device frame",cliFlag:"frame",group:"simulator"},showTopBar:{type:"boolean",default:!0,description:"show simulator top bar",group:"simulator"},screenshotMode:{type:"boolean",default:!1,description:"show screenshot composition mode in the browser shell",group:"simulator"},screenshotCanvasEditing:{type:"boolean",default:!1,description:"experimental figma-style slide editing: draggable copy block, drop-in image layers (owner review pending)",group:"simulator"},threeMode:{type:"boolean",default:!1,description:"show the experimental 3d device stage in the browser shell",group:"simulator"},threeRecordingEditor:{type:"boolean",default:!1,description:"dock the 3d recording editor in the 3d stage (toggled from its rail)",group:"simulator"},screenshotCanvas:{type:"enum",default:"iphone-6-9",description:"target app-store canvas preset for screenshot mode",options:Object.keys(m),group:"simulator"},screenshotBackground:{type:"enum",default:"dark",description:"background preset rendered inside the screenshot canvas",options:Object.keys(p),group:"simulator"},screenshotText:{type:"enum",default:"bold-top",description:"text layout preset for the screenshot canvas",options:["bold-top","editorial-left","minimal-bottom","none"],group:"simulator"},screenshotPose:{type:"enum",default:"straight",description:"device pose preset inside the screenshot canvas",options:["straight","tilted-left","tilted-right","cut-bottom","cut-top"],group:"simulator"},screenshotDynamicSize:{type:"boolean",default:!1,description:"let the screenshot canvas rect fit available space (off = pin to exact preset pixels)",group:"simulator"},showStatusBar:{type:"boolean",default:!0,description:"show status bar",group:"simulator"},showHomeIndicator:{type:"boolean",default:!0,description:"show home indicator",group:"simulator"},alwaysShowLiveWebViews:{type:"boolean",default:!1,description:"always render WebViews as live browser views",group:"simulator"},a11yMode:{type:"enum",default:"delayed",description:"accessibility tree sync mode (off, delayed=100ms, active=30ms)",options:["off","delayed","active"],group:"simulator"},a11yDepth:{type:"enum",default:"deep",description:"accessibility tree structure depth (shallow or deep)",options:["shallow","deep"],group:"simulator"},inspectMode:{type:"boolean",default:!1,description:"inspect mode",group:"simulator"},errorReporting:{type:"boolean",default:!1,description:"send anonymous crash reports",group:"privacy"},agentProvider:{type:"enum",default:"codex",description:"ai agent used by the sootsim agent prompt bar",options:["codex","claude"],group:"agent"},onboardingComplete:{type:"boolean",default:!1,description:"first-run onboarding completed",group:"beta"},betaConsentVersion:{type:"number",default:0,description:"last accepted beta telemetry policy version",group:"beta"},detailedTelemetry:{type:"boolean",default:!0,description:"send detailed usage telemetry (sessions, perf samples)",group:"beta"}};function k(){if(typeof window>"u")return{};let e={};try{let t=new URLSearchParams(window.location.search),i=t.get("device");i&&S.deviceModel.options?.includes(i)&&(e.deviceModel=i),t.get("ssMode")==="1"&&(e.screenshotMode=!0),t.get("filmStage")==="1"&&(e.threeMode=!0);let s=Number(t.get("renderDensity"));Number.isFinite(s)&&s>=1&&s<=9&&(e.renderDensity=s),t.get("ssEdit")==="1"&&(e.screenshotCanvasEditing=!0);let g=t.get("colorScheme")??t.get("theme");g&&S.colorScheme.options?.includes(g)&&(e.colorScheme=g);let u=t.get("reduceMotion");u==="1"||u==="true"?e.reduceMotion=!0:(u==="0"||u==="false")&&(e.reduceMotion=!1);let h=t.get("alwaysShowLiveWebViews");h==="1"||h==="true"?e.alwaysShowLiveWebViews=!0:(h==="0"||h==="false")&&(e.alwaysShowLiveWebViews=!1)}catch{}return e}function j(){let e={};for(let[t,i]of Object.entries(S))e[t]=i.default;return Object.assign(e,k()),e}export{C as a,b,D as c,N as d,M as e,_ as f,O as g,V as h,T as i,F as j,S as k,k as l,j as m};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-7MWXZLC3.js";import"./chunk-KDQDKEGD.js";export{a as getCliVersion};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-VI3WG25A.js";import"./chunk-Z6WIJUFD.js";import"./chunk-RBRFATPJ.js";import"./chunk-4ISBAFYP.js";import"./chunk-SJRK4IQV.js";import"./chunk-GATLQUZD.js";import"./chunk-DQCYF257.js";import"./chunk-MP55R5YC.js";import"./chunk-NXJIRSYB.js";import"./chunk-TIAKOUSI.js";import"./chunk-QSUJV6FY.js";import"./chunk-7MWXZLC3.js";import"./chunk-I5GCWNIJ.js";import"./chunk-RVATR53A.js";import"./chunk-KDQDKEGD.js";export{c as daemonInstall,b as getDaemonServiceStatus,a as runDaemon,d as teardownDaemonService,e as teardownSootsimHome};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-JTQM46FY.js";import{f as a,g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i}from"./chunk-DVUSIJGM.js";import"./chunk-DDVJQ7KL.js";import"./chunk-2MAZYB4E.js";import"./chunk-NXJIRSYB.js";import"./chunk-QSUJV6FY.js";import"./chunk-KDQDKEGD.js";export{e as ALL_DRIVERS,i as buildDriverListRows,a as chromiumDriver,b as electronDriver,f as getAllDrivers,g as getDriver,c as playwrightDriver,h as resolveDriver,d as systemDriver};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c,d,e,f,g,h}from"./chunk-ZBGUJKMS.js";import"./chunk-V6JB3XB7.js";import"./chunk-6GT6YSKU.js";import{c as a,d as b}from"./chunk-53YHX2QG.js";import"./chunk-WIYFHKRE.js";import"./chunk-MVXVG2BX.js";import"./chunk-5PLAZK5V.js";import"./chunk-KQTMW2VR.js";import"./chunk-WOLESEXG.js";import"./chunk-OFYXCIJ4.js";import"./chunk-DVUSIJGM.js";import"./chunk-DDVJQ7KL.js";import"./chunk-YGEZZQ34.js";import"./chunk-3PDYKW67.js";import"./chunk-2MAZYB4E.js";import"./chunk-KNBKEQMZ.js";import"./chunk-4SRHESEZ.js";import"./chunk-FLCWG5TT.js";import"./chunk-UTYJQ65T.js";import"./chunk-BSKGIVGK.js";import"./chunk-Z6WIJUFD.js";import"./chunk-RBRFATPJ.js";import"./chunk-GATLQUZD.js";import"./chunk-DQCYF257.js";import"./chunk-MP55R5YC.js";import"./chunk-NXJIRSYB.js";import"./chunk-TIAKOUSI.js";import"./chunk-QSUJV6FY.js";import"./chunk-ILNCM267.js";import"./chunk-RVATR53A.js";import"./chunk-KDQDKEGD.js";export{e as discoverSootsimUrl,c as getLastFlowPreviewUploadResult,d as getLastFlowTraceSteps,g as hoistLeadingSimFlag,a as parseFlowFile,f as runFlowPlayback,h as runMaestroAuthoring,b as validateFlowFile};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-4ISBAFYP.js";import"./chunk-SJRK4IQV.js";import"./chunk-GATLQUZD.js";import"./chunk-DQCYF257.js";import"./chunk-MP55R5YC.js";import"./chunk-NXJIRSYB.js";import"./chunk-TIAKOUSI.js";import"./chunk-QSUJV6FY.js";import"./chunk-7MWXZLC3.js";import"./chunk-I5GCWNIJ.js";import"./chunk-RVATR53A.js";import"./chunk-KDQDKEGD.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{j as a,k as b}from"./chunk-53YHX2QG.js";import"./chunk-WIYFHKRE.js";import"./chunk-KQTMW2VR.js";import"./chunk-WOLESEXG.js";import"./chunk-OFYXCIJ4.js";import"./chunk-DVUSIJGM.js";import"./chunk-DDVJQ7KL.js";import"./chunk-YGEZZQ34.js";import"./chunk-3PDYKW67.js";import"./chunk-2MAZYB4E.js";import"./chunk-KNBKEQMZ.js";import"./chunk-4SRHESEZ.js";import"./chunk-FLCWG5TT.js";import"./chunk-UTYJQ65T.js";import"./chunk-BSKGIVGK.js";import"./chunk-GATLQUZD.js";import"./chunk-DQCYF257.js";import"./chunk-MP55R5YC.js";import"./chunk-NXJIRSYB.js";import"./chunk-TIAKOUSI.js";import"./chunk-QSUJV6FY.js";import"./chunk-ILNCM267.js";import"./chunk-RVATR53A.js";import"./chunk-KDQDKEGD.js";export{a as printShellPerfReport,b as runInspect};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.271 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-MY2BVCQF.js";import"./chunk-DDVJQ7KL.js";import"./chunk-ACZDS4HL.js";import"./chunk-KDQDKEGD.js";export{a as runInstallDesktop};