@buoy-gg/shared-ui 7.0.39 → 7.0.41

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 (377) hide show
  1. package/README.md +6 -0
  2. package/lib/commonjs/JsModal.js +13 -61
  3. package/lib/commonjs/JsModal.web.js +32 -95
  4. package/lib/commonjs/clipboard/autoDetectClipboard.js +1 -1
  5. package/lib/commonjs/clipboard/clipboard-impl.web.js +21 -0
  6. package/lib/commonjs/dataViewer/tree/TreeDiffViewer.js +4 -2
  7. package/lib/commonjs/hooks/index.js +1 -1
  8. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  9. package/lib/commonjs/hooks/usePersistedState.js +1 -1
  10. package/lib/commonjs/hooks/useSafeAreaInsets.web.js +41 -0
  11. package/lib/commonjs/icons/index.js +14 -0
  12. package/lib/commonjs/index.js +34 -0
  13. package/lib/commonjs/license/AccountSetup.js +4 -25
  14. package/lib/commonjs/license/AccountSetup.web.js +78 -64
  15. package/lib/commonjs/license/AccountSetupContent.js +482 -0
  16. package/lib/commonjs/license/FreeAccountPrompt.js +32 -178
  17. package/lib/commonjs/license/LicenseEntryModal.js +5 -12
  18. package/lib/commonjs/license/accountRuntime.js +8 -0
  19. package/lib/commonjs/license/accountRuntime.web.js +9 -0
  20. package/lib/commonjs/license/licenseModule.js +2 -0
  21. package/lib/commonjs/settings/components/BubbleSettingsSection.js +1 -1
  22. package/lib/commonjs/storage/definePersistedSetting.js +1 -1
  23. package/lib/commonjs/stores/ignoredPatternsCore.js +8 -1
  24. package/lib/commonjs/stores/ignoredPatternsStore.js +10 -199
  25. package/lib/commonjs/stores/ignoredPatternsStore.shared.js +205 -0
  26. package/lib/commonjs/stores/ignoredPatternsStore.web.js +10 -230
  27. package/lib/commonjs/ui/backgrounds/backgroundStore.js +1 -1
  28. package/lib/commonjs/ui/backgrounds/variants/wormhole.js +3 -0
  29. package/lib/commonjs/ui/components/CopyButton.js +1 -1
  30. package/lib/commonjs/ui/components/EventStepperFooter.js +1 -1
  31. package/lib/commonjs/ui/components/ToolFooter.js +1 -1
  32. package/lib/commonjs/ui/floating/FloatingTool.web.js +12 -2
  33. package/lib/commonjs/ui/night/primitives.js +10 -3
  34. package/lib/commonjs/ui/otto/OttoSprite.js +1 -1
  35. package/lib/commonjs/utils/browserAsyncStorage.js +157 -0
  36. package/lib/commonjs/utils/browserNavigation.js +116 -0
  37. package/lib/commonjs/utils/devServer.js +8 -4
  38. package/lib/commonjs/utils/devServer.web.js +10 -0
  39. package/lib/commonjs/utils/domRuntime.js +143 -0
  40. package/lib/commonjs/utils/expoRouterModule.js +51 -0
  41. package/lib/commonjs/utils/expoRouterModule.web.js +14 -0
  42. package/lib/commonjs/utils/getSafeAreaInsets.web.js +35 -0
  43. package/lib/commonjs/utils/index.js +111 -4
  44. package/lib/commonjs/utils/loadToolModule.js +46 -0
  45. package/lib/commonjs/utils/loadToolModule.web.js +12 -0
  46. package/lib/commonjs/utils/modalStorage.js +42 -0
  47. package/lib/commonjs/utils/nativeWeb.js +454 -0
  48. package/lib/commonjs/utils/persistentStorage.web.js +78 -0
  49. package/lib/commonjs/utils/reloadApp.js +18 -57
  50. package/lib/commonjs/utils/reloadPlatform.js +37 -0
  51. package/lib/commonjs/utils/reloadPlatform.web.js +17 -0
  52. package/lib/commonjs/utils/safeExpoRouter.js +3 -53
  53. package/lib/commonjs/utils/safeExpoRouter.web.js +48 -0
  54. package/lib/commonjs/utils/toolModules.js +25 -0
  55. package/lib/module/JsModal.js +11 -59
  56. package/lib/module/JsModal.web.js +28 -91
  57. package/lib/module/clipboard/autoDetectClipboard.js +2 -2
  58. package/lib/module/clipboard/clipboard-impl.web.js +14 -0
  59. package/lib/module/dataViewer/tree/TreeDiffViewer.js +4 -2
  60. package/lib/module/hooks/index.js +2 -2
  61. package/lib/module/hooks/safe-area-impl.js +1 -1
  62. package/lib/module/hooks/usePersistedState.js +1 -1
  63. package/lib/module/hooks/useSafeAreaInsets.web.js +30 -0
  64. package/lib/module/icons/index.js +2 -1
  65. package/lib/module/index.js +3 -0
  66. package/lib/module/license/AccountSetup.js +5 -26
  67. package/lib/module/license/AccountSetup.web.js +79 -65
  68. package/lib/module/license/AccountSetupContent.js +476 -0
  69. package/lib/module/license/FreeAccountPrompt.js +27 -176
  70. package/lib/module/license/LicenseEntryModal.js +6 -13
  71. package/lib/module/license/accountRuntime.js +3 -0
  72. package/lib/module/license/accountRuntime.web.js +4 -0
  73. package/lib/module/license/licenseModule.js +2 -0
  74. package/lib/module/settings/components/BubbleSettingsSection.js +1 -1
  75. package/lib/module/storage/definePersistedSetting.js +1 -1
  76. package/lib/module/stores/ignoredPatternsCore.js +8 -1
  77. package/lib/module/stores/ignoredPatternsStore.js +1 -187
  78. package/lib/module/stores/ignoredPatternsStore.shared.js +189 -0
  79. package/lib/module/stores/ignoredPatternsStore.web.js +1 -219
  80. package/lib/module/ui/backgrounds/backgroundStore.js +1 -1
  81. package/lib/module/ui/backgrounds/variants/wormhole.js +3 -0
  82. package/lib/module/ui/components/CopyButton.js +1 -1
  83. package/lib/module/ui/components/EventStepperFooter.js +1 -1
  84. package/lib/module/ui/components/ToolFooter.js +1 -1
  85. package/lib/module/ui/floating/FloatingTool.web.js +12 -2
  86. package/lib/module/ui/night/primitives.js +11 -4
  87. package/lib/module/ui/otto/OttoSprite.js +1 -1
  88. package/lib/module/utils/browserAsyncStorage.js +151 -0
  89. package/lib/module/utils/browserNavigation.js +108 -0
  90. package/lib/module/utils/devServer.js +8 -4
  91. package/lib/module/utils/devServer.web.js +6 -0
  92. package/lib/module/utils/domRuntime.js +134 -0
  93. package/lib/module/utils/expoRouterModule.js +46 -0
  94. package/lib/module/utils/expoRouterModule.web.js +9 -0
  95. package/lib/module/utils/getSafeAreaInsets.web.js +31 -0
  96. package/lib/module/utils/index.js +9 -4
  97. package/lib/module/utils/loadToolModule.js +42 -0
  98. package/lib/module/utils/loadToolModule.web.js +8 -0
  99. package/lib/module/utils/modalStorage.js +37 -0
  100. package/lib/module/utils/nativeWeb.js +107 -0
  101. package/lib/module/utils/persistentStorage.web.js +72 -0
  102. package/lib/module/utils/reloadApp.js +13 -51
  103. package/lib/module/utils/reloadPlatform.js +31 -0
  104. package/lib/module/utils/reloadPlatform.web.js +11 -0
  105. package/lib/module/utils/safeExpoRouter.js +3 -53
  106. package/lib/module/utils/safeExpoRouter.web.js +37 -0
  107. package/lib/module/utils/toolModules.js +19 -0
  108. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  109. package/lib/typescript/commonjs/JsModal.web.d.ts +7 -18
  110. package/lib/typescript/commonjs/JsModal.web.d.ts.map +1 -1
  111. package/lib/typescript/commonjs/clipboard/clipboard-impl.web.d.ts +5 -0
  112. package/lib/typescript/commonjs/clipboard/clipboard-impl.web.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  115. package/lib/typescript/commonjs/hooks/useSafeAreaInsets.web.d.ts +6 -0
  116. package/lib/typescript/commonjs/hooks/useSafeAreaInsets.web.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/icons/index.d.ts +1 -0
  118. package/lib/typescript/commonjs/icons/index.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/index.d.ts +2 -0
  120. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/license/AccountSetup.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts +1 -1
  123. package/lib/typescript/commonjs/license/AccountSetup.web.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/license/AccountSetupContent.d.ts +11 -0
  125. package/lib/typescript/commonjs/license/AccountSetupContent.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts +3 -15
  127. package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/license/accountRuntime.d.ts +2 -0
  130. package/lib/typescript/commonjs/license/accountRuntime.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/license/accountRuntime.web.d.ts +2 -0
  132. package/lib/typescript/commonjs/license/accountRuntime.web.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/license/licenseModule.d.ts +3 -1
  134. package/lib/typescript/commonjs/license/licenseModule.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/stores/ignoredPatternsCore.d.ts +5 -1
  136. package/lib/typescript/commonjs/stores/ignoredPatternsCore.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/stores/ignoredPatternsStore.d.ts +1 -59
  138. package/lib/typescript/commonjs/stores/ignoredPatternsStore.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/stores/ignoredPatternsStore.shared.d.ts +60 -0
  140. package/lib/typescript/commonjs/stores/ignoredPatternsStore.shared.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/stores/ignoredPatternsStore.web.d.ts +1 -71
  142. package/lib/typescript/commonjs/stores/ignoredPatternsStore.web.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts +1 -1
  146. package/lib/typescript/commonjs/utils/browserAsyncStorage.d.ts +25 -0
  147. package/lib/typescript/commonjs/utils/browserAsyncStorage.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/utils/browserNavigation.d.ts +31 -0
  149. package/lib/typescript/commonjs/utils/browserNavigation.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/utils/devServer.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/utils/devServer.web.d.ts +2 -0
  152. package/lib/typescript/commonjs/utils/devServer.web.d.ts.map +1 -0
  153. package/lib/typescript/commonjs/utils/domRuntime.d.ts +27 -0
  154. package/lib/typescript/commonjs/utils/domRuntime.d.ts.map +1 -0
  155. package/lib/typescript/commonjs/utils/expoRouterModule.d.ts +3 -0
  156. package/lib/typescript/commonjs/utils/expoRouterModule.d.ts.map +1 -0
  157. package/lib/typescript/commonjs/utils/expoRouterModule.web.d.ts +3 -0
  158. package/lib/typescript/commonjs/utils/expoRouterModule.web.d.ts.map +1 -0
  159. package/lib/typescript/commonjs/utils/getSafeAreaInsets.web.d.ts +8 -0
  160. package/lib/typescript/commonjs/utils/getSafeAreaInsets.web.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/utils/index.d.ts +5 -0
  162. package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/utils/loadToolModule.d.ts +3 -0
  164. package/lib/typescript/commonjs/utils/loadToolModule.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/utils/loadToolModule.web.d.ts +2 -0
  166. package/lib/typescript/commonjs/utils/loadToolModule.web.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/utils/modalStorage.d.ts +21 -0
  168. package/lib/typescript/commonjs/utils/modalStorage.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/utils/nativeWeb.d.ts +22 -0
  170. package/lib/typescript/commonjs/utils/nativeWeb.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/utils/persistentStorage.web.d.ts +6 -0
  172. package/lib/typescript/commonjs/utils/persistentStorage.web.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/utils/reloadApp.d.ts +7 -25
  174. package/lib/typescript/commonjs/utils/reloadApp.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/utils/reloadPlatform.d.ts +8 -0
  176. package/lib/typescript/commonjs/utils/reloadPlatform.d.ts.map +1 -0
  177. package/lib/typescript/commonjs/utils/reloadPlatform.web.d.ts +4 -0
  178. package/lib/typescript/commonjs/utils/reloadPlatform.web.d.ts.map +1 -0
  179. package/lib/typescript/commonjs/utils/safeExpoRouter.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/utils/safeExpoRouter.web.d.ts +43 -0
  181. package/lib/typescript/commonjs/utils/safeExpoRouter.web.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/utils/toolModules.d.ts +5 -0
  183. package/lib/typescript/commonjs/utils/toolModules.d.ts.map +1 -0
  184. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  185. package/lib/typescript/module/JsModal.web.d.ts +7 -18
  186. package/lib/typescript/module/JsModal.web.d.ts.map +1 -1
  187. package/lib/typescript/module/clipboard/clipboard-impl.web.d.ts +5 -0
  188. package/lib/typescript/module/clipboard/clipboard-impl.web.d.ts.map +1 -0
  189. package/lib/typescript/module/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
  190. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  191. package/lib/typescript/module/hooks/useSafeAreaInsets.web.d.ts +6 -0
  192. package/lib/typescript/module/hooks/useSafeAreaInsets.web.d.ts.map +1 -0
  193. package/lib/typescript/module/icons/index.d.ts +1 -0
  194. package/lib/typescript/module/icons/index.d.ts.map +1 -1
  195. package/lib/typescript/module/index.d.ts +2 -0
  196. package/lib/typescript/module/index.d.ts.map +1 -1
  197. package/lib/typescript/module/license/AccountSetup.d.ts.map +1 -1
  198. package/lib/typescript/module/license/AccountSetup.web.d.ts +1 -1
  199. package/lib/typescript/module/license/AccountSetup.web.d.ts.map +1 -1
  200. package/lib/typescript/module/license/AccountSetupContent.d.ts +11 -0
  201. package/lib/typescript/module/license/AccountSetupContent.d.ts.map +1 -0
  202. package/lib/typescript/module/license/FreeAccountPrompt.d.ts +3 -15
  203. package/lib/typescript/module/license/FreeAccountPrompt.d.ts.map +1 -1
  204. package/lib/typescript/module/license/LicenseEntryModal.d.ts.map +1 -1
  205. package/lib/typescript/module/license/accountRuntime.d.ts +2 -0
  206. package/lib/typescript/module/license/accountRuntime.d.ts.map +1 -0
  207. package/lib/typescript/module/license/accountRuntime.web.d.ts +2 -0
  208. package/lib/typescript/module/license/accountRuntime.web.d.ts.map +1 -0
  209. package/lib/typescript/module/license/licenseModule.d.ts +3 -1
  210. package/lib/typescript/module/license/licenseModule.d.ts.map +1 -1
  211. package/lib/typescript/module/stores/ignoredPatternsCore.d.ts +5 -1
  212. package/lib/typescript/module/stores/ignoredPatternsCore.d.ts.map +1 -1
  213. package/lib/typescript/module/stores/ignoredPatternsStore.d.ts +1 -59
  214. package/lib/typescript/module/stores/ignoredPatternsStore.d.ts.map +1 -1
  215. package/lib/typescript/module/stores/ignoredPatternsStore.shared.d.ts +60 -0
  216. package/lib/typescript/module/stores/ignoredPatternsStore.shared.d.ts.map +1 -0
  217. package/lib/typescript/module/stores/ignoredPatternsStore.web.d.ts +1 -71
  218. package/lib/typescript/module/stores/ignoredPatternsStore.web.d.ts.map +1 -1
  219. package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts.map +1 -1
  220. package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -1
  221. package/lib/typescript/module/ui/otto/ottoEngine.d.ts +1 -1
  222. package/lib/typescript/module/utils/browserAsyncStorage.d.ts +25 -0
  223. package/lib/typescript/module/utils/browserAsyncStorage.d.ts.map +1 -0
  224. package/lib/typescript/module/utils/browserNavigation.d.ts +31 -0
  225. package/lib/typescript/module/utils/browserNavigation.d.ts.map +1 -0
  226. package/lib/typescript/module/utils/devServer.d.ts.map +1 -1
  227. package/lib/typescript/module/utils/devServer.web.d.ts +2 -0
  228. package/lib/typescript/module/utils/devServer.web.d.ts.map +1 -0
  229. package/lib/typescript/module/utils/domRuntime.d.ts +27 -0
  230. package/lib/typescript/module/utils/domRuntime.d.ts.map +1 -0
  231. package/lib/typescript/module/utils/expoRouterModule.d.ts +3 -0
  232. package/lib/typescript/module/utils/expoRouterModule.d.ts.map +1 -0
  233. package/lib/typescript/module/utils/expoRouterModule.web.d.ts +3 -0
  234. package/lib/typescript/module/utils/expoRouterModule.web.d.ts.map +1 -0
  235. package/lib/typescript/module/utils/getSafeAreaInsets.web.d.ts +8 -0
  236. package/lib/typescript/module/utils/getSafeAreaInsets.web.d.ts.map +1 -0
  237. package/lib/typescript/module/utils/index.d.ts +5 -0
  238. package/lib/typescript/module/utils/index.d.ts.map +1 -1
  239. package/lib/typescript/module/utils/loadToolModule.d.ts +3 -0
  240. package/lib/typescript/module/utils/loadToolModule.d.ts.map +1 -0
  241. package/lib/typescript/module/utils/loadToolModule.web.d.ts +2 -0
  242. package/lib/typescript/module/utils/loadToolModule.web.d.ts.map +1 -0
  243. package/lib/typescript/module/utils/modalStorage.d.ts +21 -0
  244. package/lib/typescript/module/utils/modalStorage.d.ts.map +1 -0
  245. package/lib/typescript/module/utils/nativeWeb.d.ts +22 -0
  246. package/lib/typescript/module/utils/nativeWeb.d.ts.map +1 -0
  247. package/lib/typescript/module/utils/persistentStorage.web.d.ts +6 -0
  248. package/lib/typescript/module/utils/persistentStorage.web.d.ts.map +1 -0
  249. package/lib/typescript/module/utils/reloadApp.d.ts +7 -25
  250. package/lib/typescript/module/utils/reloadApp.d.ts.map +1 -1
  251. package/lib/typescript/module/utils/reloadPlatform.d.ts +8 -0
  252. package/lib/typescript/module/utils/reloadPlatform.d.ts.map +1 -0
  253. package/lib/typescript/module/utils/reloadPlatform.web.d.ts +4 -0
  254. package/lib/typescript/module/utils/reloadPlatform.web.d.ts.map +1 -0
  255. package/lib/typescript/module/utils/safeExpoRouter.d.ts.map +1 -1
  256. package/lib/typescript/module/utils/safeExpoRouter.web.d.ts +43 -0
  257. package/lib/typescript/module/utils/safeExpoRouter.web.d.ts.map +1 -0
  258. package/lib/typescript/module/utils/toolModules.d.ts +5 -0
  259. package/lib/typescript/module/utils/toolModules.d.ts.map +1 -0
  260. package/lib/web/asyncStorage.mjs +2 -0
  261. package/lib/web/chunks/chunk-2MHKRRQW.mjs +8 -0
  262. package/lib/web/chunks/chunk-2Q3SDPH2.mjs +14 -0
  263. package/lib/web/chunks/chunk-34YQ42KI.mjs +2 -0
  264. package/lib/web/chunks/chunk-3NNNCQYP.mjs +14 -0
  265. package/lib/web/chunks/chunk-3UTMGIUG.mjs +2 -0
  266. package/lib/web/chunks/chunk-46CXXOQB.mjs +2 -0
  267. package/lib/web/chunks/chunk-475BSDCB.mjs +2 -0
  268. package/lib/web/chunks/chunk-53J2FMUD.mjs +2 -0
  269. package/lib/web/chunks/chunk-552W4COI.mjs +2 -0
  270. package/lib/web/chunks/chunk-56TTTMX4.mjs +6145 -0
  271. package/lib/web/chunks/chunk-5LOQZINQ.mjs +14 -0
  272. package/lib/web/chunks/chunk-5NOIO6ZM.mjs +16 -0
  273. package/lib/web/chunks/chunk-5NZOQR6Q.mjs +2 -0
  274. package/lib/web/chunks/chunk-6CCRCSA2.mjs +2 -0
  275. package/lib/web/chunks/chunk-6Q52HRBL.mjs +2 -0
  276. package/lib/web/chunks/chunk-6TEDFSNM.mjs +655 -0
  277. package/lib/web/chunks/chunk-7BMRSMHN.mjs +2 -0
  278. package/lib/web/chunks/chunk-A2SOFE47.mjs +24 -0
  279. package/lib/web/chunks/chunk-A7KJCK4R.mjs +14 -0
  280. package/lib/web/chunks/chunk-AEXGGXS7.mjs +2 -0
  281. package/lib/web/chunks/chunk-AGD7ZT6O.mjs +15 -0
  282. package/lib/web/chunks/chunk-AIEOQWNG.mjs +2 -0
  283. package/lib/web/chunks/chunk-ASTM35HG.mjs +16 -0
  284. package/lib/web/chunks/chunk-AZBMFPMX.mjs +1421 -0
  285. package/lib/web/chunks/chunk-B2V2UDCU.mjs +16 -0
  286. package/lib/web/chunks/chunk-BFGKGTAC.mjs +2 -0
  287. package/lib/web/chunks/chunk-BHW6AFO6.mjs +2 -0
  288. package/lib/web/chunks/chunk-BWRW3NJ2.mjs +16 -0
  289. package/lib/web/chunks/chunk-CBM2IZAK.mjs +2 -0
  290. package/lib/web/chunks/chunk-CDLCFF44.mjs +2 -0
  291. package/lib/web/chunks/chunk-CE5U3CSQ.mjs +2 -0
  292. package/lib/web/chunks/chunk-CI5CO7FQ.mjs +2 -0
  293. package/lib/web/chunks/chunk-CIB4U2YK.mjs +2 -0
  294. package/lib/web/chunks/chunk-CLLTZQGD.mjs +596 -0
  295. package/lib/web/chunks/chunk-D5HQLRFW.mjs +655 -0
  296. package/lib/web/chunks/chunk-DZDTNXXK.mjs +2 -0
  297. package/lib/web/chunks/chunk-FDOZ6YSS.mjs +2 -0
  298. package/lib/web/chunks/chunk-FMEWNGQO.mjs +2 -0
  299. package/lib/web/chunks/chunk-G4DH7GMT.mjs +2 -0
  300. package/lib/web/chunks/chunk-GBUZCZE4.mjs +2 -0
  301. package/lib/web/chunks/chunk-GF5C5DVX.mjs +2 -0
  302. package/lib/web/chunks/chunk-GLMS5ZLJ.mjs +445 -0
  303. package/lib/web/chunks/chunk-GNGMIA7V.mjs +2 -0
  304. package/lib/web/chunks/chunk-GTYIS7H7.mjs +15 -0
  305. package/lib/web/chunks/chunk-HJ36IONA.mjs +15 -0
  306. package/lib/web/chunks/chunk-HXPTZMAZ.mjs +2 -0
  307. package/lib/web/chunks/chunk-I27M4JCS.mjs +2 -0
  308. package/lib/web/chunks/chunk-IVCT27JB.mjs +2 -0
  309. package/lib/web/chunks/chunk-JG4QSK5B.mjs +2 -0
  310. package/lib/web/chunks/chunk-JR7BJW6B.mjs +389 -0
  311. package/lib/web/chunks/chunk-K46ZJUXJ.mjs +90 -0
  312. package/lib/web/chunks/chunk-K4LXMO4D.mjs +2 -0
  313. package/lib/web/chunks/chunk-K7CGIEFU.mjs +2 -0
  314. package/lib/web/chunks/chunk-KBTYK5YE.mjs +662 -0
  315. package/lib/web/chunks/chunk-KHP6CSSM.mjs +2 -0
  316. package/lib/web/chunks/chunk-KRDRIW7T.mjs +14 -0
  317. package/lib/web/chunks/chunk-L2DTKDER.mjs +2 -0
  318. package/lib/web/chunks/chunk-LFDFDGHY.mjs +655 -0
  319. package/lib/web/chunks/chunk-LZ7FZZ7R.mjs +2 -0
  320. package/lib/web/chunks/chunk-MAIUUK4E.mjs +2 -0
  321. package/lib/web/chunks/chunk-MKJKS3IG.mjs +275 -0
  322. package/lib/web/chunks/chunk-MRQKVLXG.mjs +2 -0
  323. package/lib/web/chunks/chunk-NK3OISOL.mjs +14 -0
  324. package/lib/web/chunks/chunk-NLJDDIXW.mjs +2 -0
  325. package/lib/web/chunks/chunk-OENR3XFI.mjs +11 -0
  326. package/lib/web/chunks/chunk-OZB3VKZE.mjs +2 -0
  327. package/lib/web/chunks/chunk-P64PFJT3.mjs +17618 -0
  328. package/lib/web/chunks/chunk-PACPGYH7.mjs +2 -0
  329. package/lib/web/chunks/chunk-PART6HOE.mjs +14 -0
  330. package/lib/web/chunks/chunk-PMRXUQRH.mjs +2 -0
  331. package/lib/web/chunks/chunk-PTK5FO6C.mjs +2 -0
  332. package/lib/web/chunks/chunk-PZ45TQ55.mjs +14 -0
  333. package/lib/web/chunks/chunk-Q5LN7GET.mjs +17624 -0
  334. package/lib/web/chunks/chunk-QCD6T6L4.mjs +297 -0
  335. package/lib/web/chunks/chunk-QD5EUANU.mjs +2 -0
  336. package/lib/web/chunks/chunk-QJTECJCO.mjs +2 -0
  337. package/lib/web/chunks/chunk-QPIZURPZ.mjs +2 -0
  338. package/lib/web/chunks/chunk-QPY45R5F.mjs +274 -0
  339. package/lib/web/chunks/chunk-R2SGZIG5.mjs +2 -0
  340. package/lib/web/chunks/chunk-S3GYQYVJ.mjs +16 -0
  341. package/lib/web/chunks/chunk-SCCXVTDM.mjs +2 -0
  342. package/lib/web/chunks/chunk-SHJHD646.mjs +2 -0
  343. package/lib/web/chunks/chunk-TCRVZ55E.mjs +2 -0
  344. package/lib/web/chunks/chunk-TJ6ZVV2L.mjs +15 -0
  345. package/lib/web/chunks/chunk-TPSY4RC3.mjs +14 -0
  346. package/lib/web/chunks/chunk-U5KNX5O6.mjs +17624 -0
  347. package/lib/web/chunks/chunk-UCKELQSM.mjs +2 -0
  348. package/lib/web/chunks/chunk-UGGCYHRH.mjs +15 -0
  349. package/lib/web/chunks/chunk-UNYQJZET.mjs +16 -0
  350. package/lib/web/chunks/chunk-VE72SWLV.mjs +15 -0
  351. package/lib/web/chunks/chunk-VKONO6MI.mjs +2 -0
  352. package/lib/web/chunks/chunk-W4BGMPJO.mjs +2 -0
  353. package/lib/web/chunks/chunk-WHNEEKLR.mjs +2 -0
  354. package/lib/web/chunks/chunk-WLGUP3KY.mjs +16 -0
  355. package/lib/web/chunks/chunk-WY7D4WBZ.mjs +2 -0
  356. package/lib/web/chunks/chunk-XRNB2MHO.mjs +107 -0
  357. package/lib/web/chunks/chunk-XXTIAXQY.mjs +2 -0
  358. package/lib/web/chunks/chunk-XYUAUO57.mjs +2 -0
  359. package/lib/web/chunks/chunk-YG6DIKQD.mjs +2 -0
  360. package/lib/web/chunks/chunk-YIZFMU66.mjs +2 -0
  361. package/lib/web/chunks/chunk-YOGAPOGC.mjs +2 -0
  362. package/lib/web/chunks/chunk-Z7373DS5.mjs +2 -0
  363. package/lib/web/chunks/chunk-Z76GRN66.mjs +17627 -0
  364. package/lib/web/chunks/persistentStorage.web-4FBAOYJ4.mjs +12 -0
  365. package/lib/web/chunks/persistentStorage.web-7W3Y6Q24.mjs +12 -0
  366. package/lib/web/chunks/persistentStorage.web-GOWNFMVT.mjs +2 -0
  367. package/lib/web/chunks/persistentStorage.web-RF47FXIK.mjs +12 -0
  368. package/lib/web/colors.mjs +2 -0
  369. package/lib/web/dataViewer.mjs +3 -0
  370. package/lib/web/floating.mjs +2 -0
  371. package/lib/web/history.mjs +2 -0
  372. package/lib/web/hooks.mjs +2 -0
  373. package/lib/web/index.mjs +15 -0
  374. package/lib/web/native.mjs +2 -0
  375. package/lib/web/ui.mjs +2 -0
  376. package/lib/web/utils.mjs +2 -0
  377. package/package.json +118 -36
package/README.md CHANGED
@@ -34,8 +34,14 @@ Use the installed declarations to select components and their props. Avoid priva
34
34
 
35
35
  Follow the [custom-tool guide](https://buoy.gg/buoy/latest/docs/custom-tools) to register a tool and its adapter. Verify your panel with empty data, a known populated state, and the supported app theme before connecting remote actions.
36
36
 
37
+ ## Account setup
38
+
39
+ `AccountSetup` shows the sign-in launcher when Buoy needs a verified account. Native and web use the same launcher and account card, including the copyable login command, connection feedback, and support links. The web card opens above the launcher and closes with Escape, its close button, or a click outside. `FreeAccountPrompt` presents the card in a native modal.
40
+
37
41
  ## Custom floating tools
38
42
 
39
43
  `FloatingTool` provides the same drag, hide/restore and position behavior used by the DevTools bubble. Use `FloatingToolHost` with `openFloatingTool` to keep compact custom controls mounted across navigation. Each tool supplies its own content and actions. Set `dragFromSurface` to make the background draggable while buttons keep their gestures; the default uses the grip only.
40
44
 
41
45
  See the [custom floating tools guide](https://buoy.gg/buoy/latest/docs/custom-tools/floating-tools) for native and browser integration, lifecycle rules and examples. Browser consumers can import the dedicated `@buoy-gg/shared-ui/floating` entry.
46
+
47
+ In browser panels, header dragging starts on non-interactive space. Buttons, tabs, inputs, and other focusable controls keep their pointer input. Window controls have 24 px hit areas.
@@ -9,12 +9,13 @@ var _AccountSetup = require("./license/AccountSetup");
9
9
  var _react = require("react");
10
10
  var _reactNative = require("react-native");
11
11
  var _absoluteFill = require("./utils/absoluteFill.js");
12
- var _useSafeAreaInsets = require("./hooks/useSafeAreaInsets.js");
12
+ var _useSafeAreaInsets = require("./hooks/useSafeAreaInsets");
13
13
  var _index = require("./ui/gameUI/index.js");
14
14
  var _index2 = require("./ui/components/index.js");
15
15
  var _ToolBackground = require("./ui/backgrounds/ToolBackground.js");
16
16
  var _nightTheme = require("./ui/night/nightTheme.js");
17
- var _persistentStorage = require("./utils/persistentStorage.js");
17
+ var _persistentStorage = require("./utils/persistentStorage");
18
+ var _modalStorage = require("./utils/modalStorage.js");
18
19
  var _devToolsStorageKeys = require("./storage/devToolsStorageKeys.js");
19
20
  var _index3 = require("./context/index.js");
20
21
  var _jsxRuntime = require("react/jsx-runtime");
@@ -66,61 +67,6 @@ const FLOATING_MIN_HEIGHT = 80; // Just a bit more than header height (60px head
66
67
  */
67
68
  const WINDOW_CONTROLS_BAND = 20;
68
69
 
69
- // ============================================================================
70
- // STORAGE - Modal state persistence with AsyncStorage
71
- // ============================================================================
72
-
73
- /**
74
- * Utility class for persisting modal state to AsyncStorage
75
- *
76
- * Handles saving and loading modal state including mode, dimensions,
77
- * and position with memory caching for performance.
78
- */
79
- class ModalStorage {
80
- static memoryCache = {};
81
-
82
- /**
83
- * Save modal state to AsyncStorage with memory caching
84
- *
85
- * @param key - Storage key for the modal state
86
- * @param value - Modal state to persist
87
- */
88
- static async save(key, value) {
89
- try {
90
- this.memoryCache[key] = value;
91
- await _persistentStorage.persistentStorage.setItem(key, JSON.stringify(value));
92
- } catch (error) {
93
- // Failed to save modal state
94
- }
95
- }
96
-
97
- /**
98
- * Load modal state from AsyncStorage with memory cache fallback
99
- *
100
- * @param key - Storage key for the modal state
101
- * @returns Persisted modal state or null if not found
102
- */
103
- static async load(key) {
104
- try {
105
- // Try memory cache first
106
- if (this.memoryCache[key]) {
107
- return this.memoryCache[key];
108
- }
109
-
110
- // Load from storage (AsyncStorage or memory fallback)
111
- const stored = await _persistentStorage.persistentStorage.getItem(key);
112
- if (stored) {
113
- const parsed = JSON.parse(stored);
114
- this.memoryCache[key] = parsed;
115
- return parsed;
116
- }
117
- } catch (error) {
118
- // Failed to load modal state
119
- }
120
- return null;
121
- }
122
- }
123
-
124
70
  // ============================================================================
125
71
  // TYPE DEFINITIONS - Interface contracts for the modal
126
72
  // ============================================================================
@@ -430,7 +376,7 @@ const JsModalComponent = ({
430
376
  (0, _react.useEffect)(() => {
431
377
  if (!enablePersistence || !persistenceKey || !isStateLoaded) return;
432
378
  const timeoutId = setTimeout(() => {
433
- ModalStorage.save(persistenceKey, {
379
+ _modalStorage.ModalStorage.save(persistenceKey, {
434
380
  mode,
435
381
  panelHeight: currentHeightRef.current,
436
382
  dimensions,
@@ -533,7 +479,7 @@ const JsModalComponent = ({
533
479
  }
534
480
  let mounted = true;
535
481
  const loadState = async () => {
536
- const savedState = await ModalStorage.load(persistenceKey);
482
+ const savedState = await _modalStorage.ModalStorage.load(persistenceKey);
537
483
  if (mounted && savedState) {
538
484
  // Restore mode
539
485
  if (savedState.mode) {
@@ -650,6 +596,7 @@ const JsModalComponent = ({
650
596
  height: currentDimensionsRef.current.height
651
597
  }
652
598
  };
599
+ if (enablePersistence && persistenceKey) void _modalStorage.ModalStorage.saveMinimized(persistenceKey, currentState);
653
600
 
654
601
  // Animate modal shrinking toward target position
655
602
  const targetX = minimizeTargetPosition?.x ?? SCREEN.width - 50;
@@ -690,7 +637,7 @@ const JsModalComponent = ({
690
637
  onMinimize(currentState);
691
638
  });
692
639
  }
693
- }, [mode, onMinimize, minimizeTargetPosition, visibilityProgress, bottomSheetTranslateY, floatingScale, floatingPosition]);
640
+ }, [mode, onMinimize, minimizeTargetPosition, enablePersistence, persistenceKey, visibilityProgress, bottomSheetTranslateY, floatingScale, floatingPosition]);
694
641
  const lastMinimizeRequest = (0, _react.useRef)(minimizeRequest);
695
642
  (0, _react.useEffect)(() => {
696
643
  if (lastMinimizeRequest.current === minimizeRequest) return;
@@ -1333,7 +1280,11 @@ const JsModalComponent = ({
1333
1280
  paddingBottom: footerHeight
1334
1281
  },
1335
1282
  showsVerticalScrollIndicator: true,
1336
- nestedScrollEnabled: true,
1283
+ nestedScrollEnabled: true
1284
+ // Without this, a tap on a button while the keyboard is up only
1285
+ // dismisses the keyboard: typing a URL and tapping Load did nothing.
1286
+ ,
1287
+ keyboardShouldPersistTaps: "handled",
1337
1288
  children: children
1338
1289
  }), footer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1339
1290
  style: footerStyles.footerContainer,
@@ -1447,6 +1398,7 @@ const JsModalComponent = ({
1447
1398
  },
1448
1399
  showsVerticalScrollIndicator: true,
1449
1400
  nestedScrollEnabled: true,
1401
+ keyboardShouldPersistTaps: "handled",
1450
1402
  children: children
1451
1403
  }), footer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1452
1404
  style: footerStyles.footerContainer,
@@ -7,6 +7,8 @@ exports.JsModal = void 0;
7
7
  var _licenseModule = require("./license/licenseModule.js");
8
8
  var _AccountSetup = require("./license/AccountSetup");
9
9
  var _react = require("react");
10
+ var _persistentStorage = require("./utils/persistentStorage");
11
+ var _modalStorage = require("./utils/modalStorage.js");
10
12
  var _devToolsStorageKeys = require("./storage/devToolsStorageKeys.js");
11
13
  var _index = require("./context/index.js");
12
14
  var _ToolBackground = require("./ui/backgrounds/ToolBackground.js");
@@ -21,7 +23,7 @@ var _jsxRuntime = require("react/jsx-runtime");
21
23
  * native file. Zero react-native imports — header chrome that lives in
22
24
  * shared-ui RN components (`WindowControls`, `DraggableHeader`, `ModalHeader`,
23
25
  * `ModalHintBanner`) is replicated as DOM with provenance comments, the same
24
- * way DevToolsSettingsModal.web.tsx replicates the WindowControls close dot.
26
+ * way the browser host supplies DOM positioning.
25
27
  *
26
28
  * Gesture spec (verbatim from native):
27
29
  * - Sheet header drag: steal at |dy| > 3px, absolute finger anchoring
@@ -36,17 +38,8 @@ var _jsxRuntime = require("react/jsx-runtime");
36
38
  * - Header taps (both modes): taps accumulate within a 500ms window and
37
39
  * settle after 300ms — 2 taps toggles mode, ≥3 taps minimizes.
38
40
  *
39
- * Persistence (verbatim from native ModalStorage): the `persistenceKey` prop
40
- * is the storage key, used verbatim (native callers pass fully-derived
41
- * `@react_buoy…` keys or short keys — no extra derivation happens here
42
- * either). JSON shape `{ mode, panelHeight, dimensions: {width, height, top,
43
- * left}, isVisible }`, saved on a 500ms debounce after state loads, with the
44
- * same in-memory cache in front of storage. Backed by a local
45
- * localStorage adapter matching the `persistentStorage` API — importing
46
- * `./utils/persistentStorage` is avoided on purpose: its lazy `require()`
47
- * probing of expo-file-system/AsyncStorage doesn't survive Vite's ESM graph.
48
- * The hint-acknowledged flag uses the real `devToolsStorageKeys` helper
49
- * (zero-dep) so the key matches native exactly.
41
+ * Persistence uses the shared ModalStorage implementation and platform storage.
42
+ * State is saved on a 500ms debounce, with an immediate save on minimize.
50
43
  *
51
44
  * Intentional deviations from the native file (all logged):
52
45
  * - No native-driver springs: rAF drives all animations. The open/close
@@ -66,14 +59,12 @@ var _jsxRuntime = require("react/jsx-runtime");
66
59
  * WKWebView) doesn't bake in a 0×0 screen.
67
60
  * - Safe-area insets come from a one-shot `env(safe-area-inset-*)` probe
68
61
  * (same trick as floatingTools.web.tsx) instead of the RN hook.
69
- * - On restore-from-minimize, the floating position re-syncs from the last
70
- * committed dimensions when the panel becomes visible: the web AppHost
71
- * doesn't pass `initialModalState` back, and without the re-sync the panel
72
- * would reappear at the minimize target.
62
+ * - On restore, the floating position re-syncs from the saved dimensions.
63
+ * Some tool components do not forward `initialModalState`.
73
64
  * - `JsModalProps` is additionally exported (native keeps it private) so web
74
65
  * consumers can type wrappers without redeclaring the contract.
75
- * - `visible={false}` renders children in a `display:none` div (state and
76
- * listeners survive) instead of native's offscreen −9999 container.
66
+ * - `visible={false}` hides the content in a `display:none` container.
67
+ * Tool state that must survive shell changes belongs above this component.
77
68
  * - The hidden/floating/bottomSheet root branches carry distinct React keys:
78
69
  * the rAF animations write opacity/transform straight to the DOM, and DOM
79
70
  * reuse across branches (e.g. an async persisted-mode flip mid-entrance)
@@ -134,59 +125,6 @@ const screenH = () => typeof window !== "undefined" ? window.innerHeight : 0;
134
125
  // STORAGE — exact native ModalStorage semantics over localStorage
135
126
  // ============================================================================
136
127
 
137
- /**
138
- * Local localStorage-backed adapter matching the shared `persistentStorage`
139
- * API surface JsModal uses (getItem/setItem). Same recipe as the app shims
140
- * (example-tauri/src/shims/shared-ui.web.ts).
141
- */
142
- const webPersistentStorage = {
143
- async getItem(key) {
144
- try {
145
- return window.localStorage.getItem(key);
146
- } catch {
147
- return null;
148
- }
149
- },
150
- async setItem(key, value) {
151
- try {
152
- window.localStorage.setItem(key, value);
153
- } catch {
154
- // Best-effort, like native's swallowed save errors.
155
- }
156
- }
157
- };
158
-
159
- /** Persisted JSON shape — identical to native `PersistedModalState`. */
160
-
161
- /** Native `ModalStorage` twin: memory cache in front of persistent storage. */
162
- class ModalStorage {
163
- static memoryCache = {};
164
- static async save(key, value) {
165
- try {
166
- this.memoryCache[key] = value;
167
- await webPersistentStorage.setItem(key, JSON.stringify(value));
168
- } catch {
169
- // Failed to save modal state
170
- }
171
- }
172
- static async load(key) {
173
- try {
174
- if (this.memoryCache[key]) {
175
- return this.memoryCache[key];
176
- }
177
- const stored = await webPersistentStorage.getItem(key);
178
- if (stored) {
179
- const parsed = JSON.parse(stored);
180
- this.memoryCache[key] = parsed;
181
- return parsed;
182
- }
183
- } catch {
184
- // Failed to load modal state
185
- }
186
- return null;
187
- }
188
- }
189
-
190
128
  // ============================================================================
191
129
  // TYPES — same exported names as native
192
130
  // ============================================================================
@@ -408,8 +346,8 @@ const WC_COLORS = {
408
346
  minimize: "#FEBC2E",
409
347
  toggleMode: "#28C840"
410
348
  };
411
- const WC_BUTTON_SIZE = 12; // native BUTTON_SIZE
412
- const WC_BUTTON_SPACING = 8; // native BUTTON_SPACING
349
+ const WC_BUTTON_SIZE = 24;
350
+ const WC_BUTTON_SPACING = 2;
413
351
  const WC_ICON_SIZE = 8; // native ICON_SIZE
414
352
 
415
353
  const wcDotStyle = bg => ({
@@ -419,7 +357,7 @@ const wcDotStyle = bg => ({
419
357
  display: "flex",
420
358
  alignItems: "center",
421
359
  justifyContent: "center",
422
- backgroundColor: bg,
360
+ background: `radial-gradient(circle, ${bg} 6px, transparent 6px)`,
423
361
  border: "none",
424
362
  padding: 0,
425
363
  cursor: "pointer",
@@ -492,10 +430,10 @@ const DragIndicator = /*#__PURE__*/(0, _react.memo)(function DragIndicator({
492
430
  alignItems: "center",
493
431
  position: "relative",
494
432
  // native dragIndicatorContainer: paddingVertical 8; custom variant
495
- // claims the 20pt window-controls band (native WINDOW_CONTROLS_BAND)
433
+ // reserves room for the browser window controls
496
434
  // so the header row below can run the full width.
497
435
  justifyContent: hasCustomContent ? "center" : undefined,
498
- minHeight: hasCustomContent ? 20 : undefined,
436
+ minHeight: hasCustomContent ? 32 : undefined,
499
437
  paddingTop: hasCustomContent ? 0 : 8,
500
438
  paddingBottom: hasCustomContent ? 0 : 8,
501
439
  backgroundColor: "transparent"
@@ -770,6 +708,8 @@ const JsModalComponent = ({
770
708
  const [insets] = (0, _react.useState)(readSafeAreaInsets);
771
709
  const [isStateLoaded, setIsStateLoaded] = (0, _react.useState)(!enablePersistence);
772
710
  const [mode, setMode] = (0, _react.useState)(initialMode);
711
+ const onModeChangeRef = (0, _react.useRef)(onModeChange);
712
+ onModeChangeRef.current = onModeChange;
773
713
  const [isResizing, setIsResizing] = (0, _react.useState)(false);
774
714
  const [isDragging, setIsDragging] = (0, _react.useState)(false);
775
715
  const [panelHeight, setPanelHeight] = (0, _react.useState)(initialHeight);
@@ -819,11 +759,11 @@ const JsModalComponent = ({
819
759
  }
820
760
  let mounted = true;
821
761
  const loadState = async () => {
822
- const savedState = await ModalStorage.load(persistenceKey);
762
+ const savedState = await _modalStorage.ModalStorage.load(persistenceKey);
823
763
  if (mounted && savedState) {
824
764
  if (savedState.mode) {
825
765
  setMode(savedState.mode);
826
- onModeChange?.(savedState.mode);
766
+ onModeChangeRef.current?.(savedState.mode);
827
767
  }
828
768
  if (savedState.panelHeight) {
829
769
  setPanelHeight(savedState.panelHeight);
@@ -847,11 +787,11 @@ const JsModalComponent = ({
847
787
  mounted = false;
848
788
  };
849
789
  // eslint-disable-next-line react-hooks/exhaustive-deps
850
- }, [persistenceKey, enablePersistence, onModeChange]);
790
+ }, [persistenceKey, enablePersistence]);
851
791
  (0, _react.useEffect)(() => {
852
792
  if (!enablePersistence || !persistenceKey || !isStateLoaded) return;
853
793
  const timeoutId = setTimeout(() => {
854
- ModalStorage.save(persistenceKey, {
794
+ _modalStorage.ModalStorage.save(persistenceKey, {
855
795
  mode,
856
796
  panelHeight: currentHeightRef.current,
857
797
  dimensions,
@@ -869,7 +809,7 @@ const JsModalComponent = ({
869
809
  const loadHintStatus = async () => {
870
810
  try {
871
811
  const hintKey = _devToolsStorageKeys.devToolsStorageKeys.modal.hintAcknowledged();
872
- const acknowledged = await webPersistentStorage.getItem(hintKey);
812
+ const acknowledged = await _persistentStorage.persistentStorage.getItem(hintKey);
873
813
  if (mounted) {
874
814
  setShowHint(acknowledged !== "true");
875
815
  setHintLoaded(true);
@@ -889,7 +829,7 @@ const JsModalComponent = ({
889
829
  const handleHintAcknowledge = (0, _react.useCallback)(async () => {
890
830
  try {
891
831
  const hintKey = _devToolsStorageKeys.devToolsStorageKeys.modal.hintAcknowledged();
892
- await webPersistentStorage.setItem(hintKey, "true");
832
+ await _persistentStorage.persistentStorage.setItem(hintKey, "true");
893
833
  setShowHint(false);
894
834
  } catch {
895
835
  setShowHint(false);
@@ -902,12 +842,10 @@ const JsModalComponent = ({
902
842
  const toggleMode = (0, _react.useCallback)(() => {
903
843
  setIsDragging(false);
904
844
  setIsResizing(false);
905
- setMode(prev => {
906
- const newMode = prev === "bottomSheet" ? "floating" : "bottomSheet";
907
- onModeChange?.(newMode);
908
- return newMode;
909
- });
910
- }, [onModeChange]);
845
+ const newMode = mode === "bottomSheet" ? "floating" : "bottomSheet";
846
+ setMode(newMode);
847
+ onModeChangeRef.current?.(newMode);
848
+ }, [mode]);
911
849
 
912
850
  // Belt-and-suspenders: also clear flags when mode changes (native parity).
913
851
  (0, _react.useEffect)(() => {
@@ -928,6 +866,7 @@ const JsModalComponent = ({
928
866
  height: currentDimensionsRef.current.height
929
867
  }
930
868
  };
869
+ if (enablePersistence && persistenceKey) void _modalStorage.ModalStorage.saveMinimized(persistenceKey, currentState);
931
870
 
932
871
  // native defaults: SCREEN.width - 50 / SCREEN.height - 150
933
872
  const targetX = minimizeTargetPosition?.x ?? screenW() - 50;
@@ -964,7 +903,7 @@ const JsModalComponent = ({
964
903
  el.style.transform = `translate(${x}px, ${y}px)`;
965
904
  }, () => onMinimize(currentState)));
966
905
  }
967
- }, [mode, onMinimize, minimizeTargetPosition, cancelAnims]);
906
+ }, [mode, onMinimize, minimizeTargetPosition, cancelAnims, enablePersistence, persistenceKey]);
968
907
  const lastMinimizeRequest = (0, _react.useRef)(minimizeRequest);
969
908
  (0, _react.useEffect)(() => {
970
909
  if (lastMinimizeRequest.current === minimizeRequest) return;
@@ -977,7 +916,7 @@ const JsModalComponent = ({
977
916
  if (!initialModalState) return;
978
917
  if (initialModalState.mode) {
979
918
  setMode(initialModalState.mode);
980
- onModeChange?.(initialModalState.mode);
919
+ onModeChangeRef.current?.(initialModalState.mode);
981
920
  }
982
921
  if (initialModalState.panelHeight) {
983
922
  setPanelHeight(initialModalState.panelHeight);
@@ -1024,9 +963,7 @@ const JsModalComponent = ({
1024
963
  } else {
1025
964
  const el = floatRef.current;
1026
965
  if (!el) return;
1027
- // Restore-from-minimize deviation (see header): re-sync position from
1028
- // the last committed rect so the panel doesn't reopen at the minimize
1029
- // target the web AppHost never restores via initialModalState.
966
+ // Restore the saved position after the minimize animation.
1030
967
  posRef.current = {
1031
968
  x: currentDimensionsRef.current.left,
1032
969
  y: currentDimensionsRef.current.top
@@ -1084,7 +1021,7 @@ const JsModalComponent = ({
1084
1021
  if (mode !== "bottomSheet") return;
1085
1022
  // Ignore clicks on interactive header children (window controls live
1086
1023
  // outside the header, but custom content may contain buttons).
1087
- if (e.target.closest("button")) return;
1024
+ if (e.button !== 0 || e.target.closest('button, a, input, textarea, select, [role="button"], [role="tab"], [role="switch"], [contenteditable="true"], [tabindex]')) return;
1088
1025
  const g = sheetGestureRef.current;
1089
1026
  g.active = true;
1090
1027
  g.resizing = false;
@@ -1189,7 +1126,7 @@ const JsModalComponent = ({
1189
1126
  const handleFloatPointerDown = (0, _react.useCallback)(e => {
1190
1127
  // native: DraggableHeader enabled = mode === "floating" && !isResizing
1191
1128
  if (mode !== "floating" || isResizing) return;
1192
- if (e.target.closest("button")) return;
1129
+ if (e.button !== 0 || e.target.closest('button, a, input, textarea, select, [role="button"], [role="tab"], [role="switch"], [contenteditable="true"], [tabindex]')) return;
1193
1130
  const g = dragGestureRef.current;
1194
1131
  g.active = true;
1195
1132
  g.dragging = false;
@@ -23,7 +23,7 @@ Object.defineProperty(exports, "isClipboardAvailable", {
23
23
  return _clipboardImpl.isClipboardAvailable;
24
24
  }
25
25
  });
26
- var _clipboardImpl = require("./clipboard-impl.js");
26
+ var _clipboardImpl = require("./clipboard-impl");
27
27
  /**
28
28
  * Auto-detect Clipboard Implementation
29
29
  *
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isClipboardAvailable = exports.clipboardType = exports.clipboardFunction = void 0;
7
+ const isClipboardAvailable = () => typeof navigator !== "undefined" && typeof navigator.clipboard?.writeText === "function";
8
+ exports.isClipboardAvailable = isClipboardAvailable;
9
+ const clipboardType = () => isClipboardAvailable() ? "web" : null;
10
+ exports.clipboardType = clipboardType;
11
+ const clipboardFunction = async text => {
12
+ try {
13
+ if (!isClipboardAvailable()) return false;
14
+ await navigator.clipboard.writeText(text);
15
+ return true;
16
+ } catch {
17
+ // Clipboard access can be denied even in a secure context.
18
+ return false;
19
+ }
20
+ };
21
+ exports.clipboardFunction = clipboardFunction;
@@ -297,8 +297,10 @@ function stringifyValue(value, compact = true) {
297
297
  return `"${value}"`;
298
298
  }
299
299
  if (typeof value === "number") {
300
- // Format large numbers with commas for readability
301
- return value.toLocaleString();
300
+ // The exact value. toLocaleString() added separators (1019 read as
301
+ // "1,019", like a string) and rounded to three decimals, so a diff could
302
+ // show a change that looked like nothing, or hide one that was real.
303
+ return String(value);
302
304
  }
303
305
  if (typeof value === "boolean") {
304
306
  return String(value);
@@ -73,5 +73,5 @@ var _useFilterManager = require("./useFilterManager.js");
73
73
  var _usePersistedState = require("./usePersistedState.js");
74
74
  var _useChangeLog = require("./useChangeLog.js");
75
75
  var _useEventStoreEvents = require("./useEventStoreEvents.js");
76
- var _useSafeAreaInsets = require("./useSafeAreaInsets.js");
76
+ var _useSafeAreaInsets = require("./useSafeAreaInsets");
77
77
  var _useDeviceInfo = require("./useDeviceInfo.js");
@@ -7,7 +7,7 @@ exports.useNativeSafeAreaInsets = exports.safeAreaType = exports.hasSafeAreaPack
7
7
  /**
8
8
  * Auto-generated safe area implementation
9
9
  * Detected: none
10
- * Generated at: 2026-09-18T01:47:02.828Z
10
+ * Generated at: 2026-09-28T19:22:44.461Z
11
11
  *
12
12
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
13
13
  *
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.resetPersistedStateCache = resetPersistedStateCache;
7
7
  exports.usePersistedState = usePersistedState;
8
8
  var _react = require("react");
9
- var _persistentStorage = require("../utils/persistentStorage.js");
9
+ var _persistentStorage = require("../utils/persistentStorage");
10
10
  /**
11
11
  * Per-key cache so remounts (and multiple consumers of the same key) render
12
12
  * the last-known value immediately instead of flashing the default while the
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "getSafeAreaInsets", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _getSafeAreaInsetsWeb.getSafeAreaInsets;
10
+ }
11
+ });
12
+ exports.hasNotch = void 0;
13
+ exports.useSafeAreaInsets = useSafeAreaInsets;
14
+ var _react = require("react");
15
+ var _getSafeAreaInsetsWeb = require("../utils/getSafeAreaInsets.web.js");
16
+ function useSafeAreaInsets(options = {}) {
17
+ const [insets, setInsets] = (0, _react.useState)({
18
+ top: 0,
19
+ bottom: 0,
20
+ left: 0,
21
+ right: 0
22
+ });
23
+ (0, _react.useEffect)(() => {
24
+ const update = () => setInsets((0, _getSafeAreaInsetsWeb.getSafeAreaInsets)());
25
+ update();
26
+ window.addEventListener("resize", update);
27
+ window.visualViewport?.addEventListener("resize", update);
28
+ return () => {
29
+ window.removeEventListener("resize", update);
30
+ window.visualViewport?.removeEventListener("resize", update);
31
+ };
32
+ }, []);
33
+ return {
34
+ top: Math.max(insets.top, options.minTop ?? 0),
35
+ bottom: Math.max(insets.bottom, options.minBottom ?? 0),
36
+ left: Math.max(insets.left, options.minLeft ?? 0),
37
+ right: Math.max(insets.right, options.minRight ?? 0)
38
+ };
39
+ }
40
+ const hasNotch = () => (0, _getSafeAreaInsetsWeb.getSafeAreaInsets)().hasNotch;
41
+ exports.hasNotch = hasNotch;
@@ -101,6 +101,8 @@ var _exportNames = {
101
101
  WifiBifIcon: true,
102
102
  BenchmarkIcon: true,
103
103
  BENCHMARK_ICON_COLOR: true,
104
+ NotificationsIcon: true,
105
+ NOTIFICATIONS_ICON_COLOR: true,
104
106
  EnvLaptopIcon: true,
105
107
  LaptopIcon: true,
106
108
  ReactQueryIcon: true,
@@ -507,6 +509,12 @@ Object.defineProperty(exports, "NETWORK_ICON_COLOR", {
507
509
  return _floatingToolsCore.NETWORK_ICON_COLOR;
508
510
  }
509
511
  });
512
+ Object.defineProperty(exports, "NOTIFICATIONS_ICON_COLOR", {
513
+ enumerable: true,
514
+ get: function () {
515
+ return _floatingToolsCore.NOTIFICATIONS_ICON_COLOR;
516
+ }
517
+ });
510
518
  Object.defineProperty(exports, "Navigation", {
511
519
  enumerable: true,
512
520
  get: function () {
@@ -525,6 +533,12 @@ Object.defineProperty(exports, "NetworkIcon", {
525
533
  return _floatingToolsCore.NetworkIcon;
526
534
  }
527
535
  });
536
+ Object.defineProperty(exports, "NotificationsIcon", {
537
+ enumerable: true,
538
+ get: function () {
539
+ return _floatingToolsCore.NotificationsIcon;
540
+ }
541
+ });
528
542
  Object.defineProperty(exports, "Palette", {
529
543
  enumerable: true,
530
544
  get: function () {
@@ -53,6 +53,9 @@ var _exportNames = {
53
53
  getSafeCurrentPathname: true,
54
54
  getSafeCurrentRoute: true,
55
55
  isExpoRouterAvailable: true,
56
+ registerBrowserRouter: true,
57
+ browserRouter: true,
58
+ subscribeBrowserNavigation: true,
56
59
  PREVIEW_ITEM_RENDER_BYTE_LIMIT: true,
57
60
  createRestoreScope: true,
58
61
  emptyRestoreResult: true,
@@ -316,6 +319,12 @@ Object.defineProperty(exports, "assertAccountAccess", {
316
319
  return _licenseModule.assertAccountAccess;
317
320
  }
318
321
  });
322
+ Object.defineProperty(exports, "browserRouter", {
323
+ enumerable: true,
324
+ get: function () {
325
+ return _browserNavigation.browserRouter;
326
+ }
327
+ });
319
328
  Object.defineProperty(exports, "buoyColors", {
320
329
  enumerable: true,
321
330
  get: function () {
@@ -628,6 +637,12 @@ Object.defineProperty(exports, "refreshGameUIColors", {
628
637
  return _gameUIColors.refreshGameUIColors;
629
638
  }
630
639
  });
640
+ Object.defineProperty(exports, "registerBrowserRouter", {
641
+ enumerable: true,
642
+ get: function () {
643
+ return _browserNavigation.registerBrowserRouter;
644
+ }
645
+ });
631
646
  Object.defineProperty(exports, "registerStateSnapshotProvider", {
632
647
  enumerable: true,
633
648
  get: function () {
@@ -700,6 +715,12 @@ Object.defineProperty(exports, "subscribeAccountAccess", {
700
715
  return _licenseModule.subscribeAccountAccess;
701
716
  }
702
717
  });
718
+ Object.defineProperty(exports, "subscribeBrowserNavigation", {
719
+ enumerable: true,
720
+ get: function () {
721
+ return _browserNavigation.subscribeBrowserNavigation;
722
+ }
723
+ });
703
724
  Object.defineProperty(exports, "subscribeToStateSnapshotProviders", {
704
725
  enumerable: true,
705
726
  get: function () {
@@ -983,6 +1004,19 @@ Object.keys(_toolUiBridge).forEach(function (key) {
983
1004
  });
984
1005
  });
985
1006
  var _index3 = require("./utils/index.js");
1007
+ var _toolModules = require("./utils/toolModules.js");
1008
+ Object.keys(_toolModules).forEach(function (key) {
1009
+ if (key === "default" || key === "__esModule") return;
1010
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
1011
+ if (key in exports && exports[key] === _toolModules[key]) return;
1012
+ Object.defineProperty(exports, key, {
1013
+ enumerable: true,
1014
+ get: function () {
1015
+ return _toolModules[key];
1016
+ }
1017
+ });
1018
+ });
1019
+ var _browserNavigation = require("./utils/browserNavigation.js");
986
1020
  var _snapshotProviderKit = require("./utils/snapshotProviderKit.js");
987
1021
  var _stateTools = require("./utils/stateTools.js");
988
1022
  var _index4 = require("./utils/formatting/index.js");