@buoy-gg/core 7.0.40 → 7.0.42

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 (269) hide show
  1. package/README.md +14 -85
  2. package/bin/buoy.js +20 -347
  3. package/lib/commonjs/Buoy.js +1 -107
  4. package/lib/commonjs/browserRegister.js +1 -0
  5. package/lib/commonjs/browserRegister.server.js +1 -0
  6. package/lib/commonjs/earlyHookScript.js +1 -0
  7. package/lib/commonjs/earlyNetwork.js +1 -0
  8. package/lib/commonjs/floatingMenu/AppHost.js +1 -460
  9. package/lib/commonjs/floatingMenu/AppHost.web.js +1 -364
  10. package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -50
  11. package/lib/commonjs/floatingMenu/AppIcon.js +1 -91
  12. package/lib/commonjs/floatingMenu/AppIcon.web.js +1 -53
  13. package/lib/commonjs/floatingMenu/BrowserToolRuntime.js +1 -0
  14. package/lib/commonjs/floatingMenu/DefaultConfigContext.js +1 -45
  15. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +1 -1119
  16. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.shared.js +1 -0
  17. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +1 -1048
  18. package/lib/commonjs/floatingMenu/DevToolsVisibilityContext.js +1 -49
  19. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -554
  20. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -401
  21. package/lib/commonjs/floatingMenu/FloatingMenu.js +1 -371
  22. package/lib/commonjs/floatingMenu/MinimizedToolsContext.js +1 -274
  23. package/lib/commonjs/floatingMenu/MinimizedToolsStack.js +1 -288
  24. package/lib/commonjs/floatingMenu/MinimizedToolsStack.web.js +1 -371
  25. package/lib/commonjs/floatingMenu/ToggleStateManager.js +1 -36
  26. package/lib/commonjs/floatingMenu/ToolHost.js +1 -281
  27. package/lib/commonjs/floatingMenu/ToolOpenerBridge.js +1 -41
  28. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -461
  29. package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -434
  30. package/lib/commonjs/floatingMenu/defaultConfig.js +1 -167
  31. package/lib/commonjs/floatingMenu/deviceIdentity.js +1 -173
  32. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -904
  33. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -821
  34. package/lib/commonjs/floatingMenu/dial/DialHyperspace.js +1 -177
  35. package/lib/commonjs/floatingMenu/dial/DialIcon.js +1 -302
  36. package/lib/commonjs/floatingMenu/dial/DialPagination.js +1 -165
  37. package/lib/commonjs/floatingMenu/dial/DialSnow.js +1 -92
  38. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.js +1 -246
  39. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.web.js +2 -147
  40. package/lib/commonjs/floatingMenu/dial/dialUsageStore.js +1 -93
  41. package/lib/commonjs/floatingMenu/dial/onboardingConstants.js +1 -42
  42. package/lib/commonjs/floatingMenu/dial/onboardingConstants.web.js +1 -42
  43. package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -49
  44. package/lib/commonjs/floatingMenu/floatingTools.js +1 -42
  45. package/lib/commonjs/floatingMenu/floatingTools.web.js +1 -30
  46. package/lib/commonjs/floatingMenu/optionalRequire.js +1 -37
  47. package/lib/commonjs/floatingMenu/settingsBus.js +1 -23
  48. package/lib/commonjs/floatingMenu/sync/appSyncAdapter.js +1 -115
  49. package/lib/commonjs/floatingMenu/types.js +1 -5
  50. package/lib/commonjs/floatingMenu/useDesktopSyncStatus.js +1 -28
  51. package/lib/commonjs/floatingMenu/useDesktopSyncStatus.web.js +1 -0
  52. package/lib/commonjs/index.js +1 -291
  53. package/lib/commonjs/index.web.js +1 -150
  54. package/lib/commonjs/reactDevtoolsTypes.js +1 -0
  55. package/lib/commonjs/releaseOptIn.js +1 -0
  56. package/lib/commonjs/telemetry/installPing.js +1 -131
  57. package/lib/commonjs/toolkit.js +1 -584
  58. package/lib/commonjs/toolkitComponents.js +1 -241
  59. package/lib/commonjs/utils/autoDiscoverPresets.web.js +1 -219
  60. package/lib/commonjs/utils/createWebTool.js +1 -0
  61. package/lib/commonjs/utils/createWebTools.js +1 -0
  62. package/lib/commonjs/version.js +1 -18
  63. package/lib/module/Buoy.js +1 -102
  64. package/lib/module/browserRegister.js +1 -0
  65. package/lib/module/browserRegister.server.js +1 -0
  66. package/lib/module/earlyHookScript.js +1 -0
  67. package/lib/module/earlyNetwork.js +1 -0
  68. package/lib/module/floatingMenu/AppHost.js +1 -452
  69. package/lib/module/floatingMenu/AppHost.web.js +1 -356
  70. package/lib/module/floatingMenu/AppHostLogic.js +1 -45
  71. package/lib/module/floatingMenu/AppIcon.js +1 -84
  72. package/lib/module/floatingMenu/AppIcon.web.js +1 -47
  73. package/lib/module/floatingMenu/BrowserToolRuntime.js +1 -0
  74. package/lib/module/floatingMenu/DefaultConfigContext.js +1 -39
  75. package/lib/module/floatingMenu/DevToolsSettingsModal.js +1 -1115
  76. package/lib/module/floatingMenu/DevToolsSettingsModal.shared.js +1 -0
  77. package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +1 -1055
  78. package/lib/module/floatingMenu/DevToolsVisibilityContext.js +1 -44
  79. package/lib/module/floatingMenu/FloatingDevTools.js +1 -551
  80. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -399
  81. package/lib/module/floatingMenu/FloatingMenu.js +1 -366
  82. package/lib/module/floatingMenu/MinimizedToolsContext.js +1 -266
  83. package/lib/module/floatingMenu/MinimizedToolsStack.js +1 -285
  84. package/lib/module/floatingMenu/MinimizedToolsStack.web.js +1 -368
  85. package/lib/module/floatingMenu/ToggleStateManager.js +1 -32
  86. package/lib/module/floatingMenu/ToolHost.js +1 -273
  87. package/lib/module/floatingMenu/ToolOpenerBridge.js +1 -37
  88. package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -457
  89. package/lib/module/floatingMenu/autoExternalSync.js +1 -427
  90. package/lib/module/floatingMenu/defaultConfig.js +1 -158
  91. package/lib/module/floatingMenu/deviceIdentity.js +1 -163
  92. package/lib/module/floatingMenu/dial/DialDevTools.js +1 -900
  93. package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -818
  94. package/lib/module/floatingMenu/dial/DialHyperspace.js +1 -173
  95. package/lib/module/floatingMenu/dial/DialIcon.js +1 -299
  96. package/lib/module/floatingMenu/dial/DialPagination.js +1 -160
  97. package/lib/module/floatingMenu/dial/DialSnow.js +1 -90
  98. package/lib/module/floatingMenu/dial/OnboardingTooltip.js +1 -240
  99. package/lib/module/floatingMenu/dial/OnboardingTooltip.web.js +2 -142
  100. package/lib/module/floatingMenu/dial/dialUsageStore.js +1 -85
  101. package/lib/module/floatingMenu/dial/onboardingConstants.js +1 -3
  102. package/lib/module/floatingMenu/dial/onboardingConstants.web.js +1 -3
  103. package/lib/module/floatingMenu/externalSyncGate.js +1 -44
  104. package/lib/module/floatingMenu/floatingTools.js +1 -27
  105. package/lib/module/floatingMenu/floatingTools.web.js +1 -3
  106. package/lib/module/floatingMenu/optionalRequire.js +1 -33
  107. package/lib/module/floatingMenu/settingsBus.js +1 -19
  108. package/lib/module/floatingMenu/sync/appSyncAdapter.js +1 -112
  109. package/lib/module/floatingMenu/types.js +1 -3
  110. package/lib/module/floatingMenu/useDesktopSyncStatus.js +1 -25
  111. package/lib/module/floatingMenu/useDesktopSyncStatus.web.js +1 -0
  112. package/lib/module/index.js +1 -41
  113. package/lib/module/index.web.js +1 -29
  114. package/lib/module/reactDevtoolsTypes.js +1 -0
  115. package/lib/module/releaseOptIn.js +1 -0
  116. package/lib/module/telemetry/installPing.js +1 -127
  117. package/lib/module/toolkit.js +1 -62
  118. package/lib/module/toolkitComponents.js +1 -230
  119. package/lib/module/utils/autoDiscoverPresets.web.js +1 -213
  120. package/lib/module/utils/createWebTool.js +1 -0
  121. package/lib/module/utils/createWebTools.js +1 -0
  122. package/lib/module/version.js +1 -14
  123. package/lib/typescript/commonjs/browserRegister.d.ts +13 -0
  124. package/lib/typescript/commonjs/browserRegister.server.d.ts +6 -0
  125. package/lib/typescript/commonjs/earlyHookScript.d.ts +12 -0
  126. package/lib/typescript/commonjs/earlyNetwork.d.ts +52 -0
  127. package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts +3 -3
  128. package/lib/typescript/commonjs/floatingMenu/BrowserToolRuntime.d.ts +14 -0
  129. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts +2 -67
  130. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.shared.d.ts +71 -0
  131. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts +3 -16
  132. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts +12 -6
  133. package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
  134. package/lib/typescript/commonjs/floatingMenu/settingsBus.d.ts +1 -9
  135. package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.web.d.ts +3 -0
  136. package/lib/typescript/commonjs/index.web.d.ts +7 -0
  137. package/lib/typescript/commonjs/reactDevtoolsTypes.d.ts +8 -0
  138. package/lib/typescript/commonjs/releaseOptIn.d.ts +4 -0
  139. package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts +3 -40
  140. package/lib/typescript/commonjs/utils/createWebTool.d.ts +6 -0
  141. package/lib/typescript/commonjs/utils/createWebTools.d.ts +4 -0
  142. package/lib/typescript/commonjs/version.d.ts +1 -1
  143. package/lib/typescript/module/browserRegister.d.ts +13 -0
  144. package/lib/typescript/module/browserRegister.server.d.ts +6 -0
  145. package/lib/typescript/module/earlyHookScript.d.ts +12 -0
  146. package/lib/typescript/module/earlyNetwork.d.ts +52 -0
  147. package/lib/typescript/module/floatingMenu/AppHost.web.d.ts +3 -3
  148. package/lib/typescript/module/floatingMenu/BrowserToolRuntime.d.ts +14 -0
  149. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts +2 -67
  150. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.shared.d.ts +71 -0
  151. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts +3 -16
  152. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts +12 -6
  153. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
  154. package/lib/typescript/module/floatingMenu/settingsBus.d.ts +1 -9
  155. package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.web.d.ts +3 -0
  156. package/lib/typescript/module/index.web.d.ts +7 -0
  157. package/lib/typescript/module/reactDevtoolsTypes.d.ts +8 -0
  158. package/lib/typescript/module/releaseOptIn.d.ts +4 -0
  159. package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts +3 -40
  160. package/lib/typescript/module/utils/createWebTool.d.ts +6 -0
  161. package/lib/typescript/module/utils/createWebTools.d.ts +4 -0
  162. package/lib/typescript/module/version.d.ts +1 -1
  163. package/lib/web/chunks/chunk-5SGL6QL4.mjs +1 -0
  164. package/lib/web/chunks/chunk-FROELTJH.mjs +1 -0
  165. package/lib/web/chunks/chunk-QZDVCMCT.mjs +1 -0
  166. package/lib/web/chunks/chunk-R7RGRTY5.mjs +1 -0
  167. package/lib/web/index.mjs +10 -0
  168. package/lib/web/register-server.mjs +1 -0
  169. package/lib/web/register.mjs +1 -0
  170. package/lib/web/toolkit.mjs +1 -0
  171. package/package.json +50 -12
  172. package/lib/typescript/commonjs/Buoy.d.ts.map +0 -1
  173. package/lib/typescript/commonjs/floatingMenu/AppHost.d.ts.map +0 -1
  174. package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts.map +0 -1
  175. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts.map +0 -1
  176. package/lib/typescript/commonjs/floatingMenu/AppIcon.d.ts.map +0 -1
  177. package/lib/typescript/commonjs/floatingMenu/AppIcon.web.d.ts.map +0 -1
  178. package/lib/typescript/commonjs/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
  179. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
  180. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
  181. package/lib/typescript/commonjs/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
  182. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +0 -1
  183. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
  184. package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +0 -1
  185. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
  186. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
  187. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
  188. package/lib/typescript/commonjs/floatingMenu/ToggleStateManager.d.ts.map +0 -1
  189. package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts.map +0 -1
  190. package/lib/typescript/commonjs/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
  191. package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
  192. package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +0 -1
  193. package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts.map +0 -1
  194. package/lib/typescript/commonjs/floatingMenu/deviceIdentity.d.ts.map +0 -1
  195. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
  196. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
  197. package/lib/typescript/commonjs/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
  198. package/lib/typescript/commonjs/floatingMenu/dial/DialIcon.d.ts.map +0 -1
  199. package/lib/typescript/commonjs/floatingMenu/dial/DialPagination.d.ts.map +0 -1
  200. package/lib/typescript/commonjs/floatingMenu/dial/DialSnow.d.ts.map +0 -1
  201. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
  202. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
  203. package/lib/typescript/commonjs/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
  204. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
  205. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
  206. package/lib/typescript/commonjs/floatingMenu/externalSyncGate.d.ts.map +0 -1
  207. package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts.map +0 -1
  208. package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts.map +0 -1
  209. package/lib/typescript/commonjs/floatingMenu/optionalRequire.d.ts.map +0 -1
  210. package/lib/typescript/commonjs/floatingMenu/settingsBus.d.ts.map +0 -1
  211. package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
  212. package/lib/typescript/commonjs/floatingMenu/types.d.ts.map +0 -1
  213. package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
  214. package/lib/typescript/commonjs/index.d.ts.map +0 -1
  215. package/lib/typescript/commonjs/index.web.d.ts.map +0 -1
  216. package/lib/typescript/commonjs/telemetry/installPing.d.ts.map +0 -1
  217. package/lib/typescript/commonjs/toolkit.d.ts.map +0 -1
  218. package/lib/typescript/commonjs/toolkitComponents.d.ts.map +0 -1
  219. package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts.map +0 -1
  220. package/lib/typescript/commonjs/version.d.ts.map +0 -1
  221. package/lib/typescript/module/Buoy.d.ts.map +0 -1
  222. package/lib/typescript/module/floatingMenu/AppHost.d.ts.map +0 -1
  223. package/lib/typescript/module/floatingMenu/AppHost.web.d.ts.map +0 -1
  224. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts.map +0 -1
  225. package/lib/typescript/module/floatingMenu/AppIcon.d.ts.map +0 -1
  226. package/lib/typescript/module/floatingMenu/AppIcon.web.d.ts.map +0 -1
  227. package/lib/typescript/module/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
  228. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
  229. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
  230. package/lib/typescript/module/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
  231. package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +0 -1
  232. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
  233. package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +0 -1
  234. package/lib/typescript/module/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
  235. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
  236. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
  237. package/lib/typescript/module/floatingMenu/ToggleStateManager.d.ts.map +0 -1
  238. package/lib/typescript/module/floatingMenu/ToolHost.d.ts.map +0 -1
  239. package/lib/typescript/module/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
  240. package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
  241. package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +0 -1
  242. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts.map +0 -1
  243. package/lib/typescript/module/floatingMenu/deviceIdentity.d.ts.map +0 -1
  244. package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
  245. package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
  246. package/lib/typescript/module/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
  247. package/lib/typescript/module/floatingMenu/dial/DialIcon.d.ts.map +0 -1
  248. package/lib/typescript/module/floatingMenu/dial/DialPagination.d.ts.map +0 -1
  249. package/lib/typescript/module/floatingMenu/dial/DialSnow.d.ts.map +0 -1
  250. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
  251. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
  252. package/lib/typescript/module/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
  253. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
  254. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
  255. package/lib/typescript/module/floatingMenu/externalSyncGate.d.ts.map +0 -1
  256. package/lib/typescript/module/floatingMenu/floatingTools.d.ts.map +0 -1
  257. package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts.map +0 -1
  258. package/lib/typescript/module/floatingMenu/optionalRequire.d.ts.map +0 -1
  259. package/lib/typescript/module/floatingMenu/settingsBus.d.ts.map +0 -1
  260. package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
  261. package/lib/typescript/module/floatingMenu/types.d.ts.map +0 -1
  262. package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
  263. package/lib/typescript/module/index.d.ts.map +0 -1
  264. package/lib/typescript/module/index.web.d.ts.map +0 -1
  265. package/lib/typescript/module/telemetry/installPing.d.ts.map +0 -1
  266. package/lib/typescript/module/toolkit.d.ts.map +0 -1
  267. package/lib/typescript/module/toolkitComponents.d.ts.map +0 -1
  268. package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts.map +0 -1
  269. package/lib/typescript/module/version.d.ts.map +0 -1
@@ -1,401 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.FloatingDevTools = FloatingDevTools;
7
- var _floating = require("@buoy-gg/shared-ui/floating");
8
- var _license = require("@buoy-gg/license");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _react = require("react");
11
- var _floatingToolsReact = require("@buoy-gg/floating-tools-react");
12
- var _autoDiscoverPresetsWeb = require("../utils/autoDiscoverPresets.web.js");
13
- var _floatingToolsWeb = require("./floatingTools.web.js");
14
- var _DialDevToolsWeb = require("./dial/DialDevTools.web.js");
15
- var _dialUsageStore = require("./dial/dialUsageStore.js");
16
- var _OnboardingTooltipWeb = require("./dial/OnboardingTooltip.web.js");
17
- var _DevToolsSettingsModalWeb = require("./DevToolsSettingsModal.web.js");
18
- var _AppHostWeb = require("./AppHost.web.js");
19
- var _MinimizedToolsStackWeb = require("./MinimizedToolsStack.web.js");
20
- var _jsxRuntime = require("react/jsx-runtime");
21
- /**
22
- * FloatingDevTools - Unified dev tools component for React DOM Web.
23
- *
24
- * Matches the mobile FloatingDevTools API exactly:
25
- * - Self-contained (doesn't wrap your app)
26
- * - Auto-discovers installed tool packages
27
- * - Manages dial menu and settings modal state internally
28
- *
29
- * Usage (same as mobile):
30
- * ```tsx
31
- * <>
32
- * <YourApp />
33
- * <FloatingDevTools environment="qa" userRole="admin" />
34
- * </>
35
- * ```
36
- *
37
- * @platform React DOM Web (Vite, CRA, Next.js, Electron)
38
- */
39
-
40
- // native FloatingMenu.tsx TOOLTIP_SHOWN_KEY
41
- const MENU_TOOLTIP_KEY = '@react_buoy_floating_menu_tooltip_shown';
42
-
43
- // Same localStorage adapter the settings modal uses — without it, useSettings
44
- // never loads persisted settings and this instance sits on defaults across
45
- // launches (live changes still arrive via the settings event bus).
46
- const webSettingsStorage = {
47
- getItem: key => localStorage.getItem(key),
48
- setItem: (key, value) => localStorage.setItem(key, value)
49
- };
50
-
51
- // =============================
52
- // Types
53
- // =============================
54
-
55
- // =============================
56
- // MenuLauncherIcon — native FloatingMenu.tsx:446-478: 3×3 dot grid rendered
57
- // when no userRole is set, so the dial/settings stay reachable.
58
- // =============================
59
- function MenuLauncherIcon({
60
- size = 14,
61
- color = '#20C997'
62
- }) {
63
- const dot = Math.max(2, size / 4);
64
- const gap = Math.max(1, size / 16);
65
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
66
- style: {
67
- display: 'grid',
68
- gridTemplateColumns: `repeat(3, ${dot}px)`,
69
- gap,
70
- width: size,
71
- height: size,
72
- alignContent: 'center',
73
- justifyContent: 'center'
74
- },
75
- children: Array.from({
76
- length: 9
77
- }).map((_, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
78
- style: {
79
- width: dot,
80
- height: dot,
81
- borderRadius: dot / 2,
82
- backgroundColor: color
83
- }
84
- }, i))
85
- });
86
- }
87
-
88
- // =============================
89
- // Main Component
90
- // =============================
91
-
92
- function AdmittedFloatingDevTools(props) {
93
- // The tool host wraps everything so dial presses can open tool components
94
- // into the AppOverlay (web twin of the native AppHostProvider/AppOverlay).
95
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppHostWeb.AppHostProvider, {
96
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingDevToolsInner, {
97
- ...props
98
- })
99
- });
100
- }
101
- function FloatingDevToolsInner({
102
- environment,
103
- userRole,
104
- availableEnvironments,
105
- onEnvironmentSwitch,
106
- apps,
107
- disableHints = false,
108
- headless = false
109
- }) {
110
- // Internal state for dial and settings
111
- const [isDialOpen, setIsDialOpen] = (0, _react.useState)(false);
112
- const [isSettingsOpen, setIsSettingsOpen] = (0, _react.useState)(false);
113
- const stateRestoredRef = (0, _react.useRef)(false);
114
- const appHost = (0, _AppHostWeb.useAppHost)();
115
-
116
- // Auto-discover tools and merge with custom apps
117
- const tools = (0, _react.useMemo)(() => (0, _autoDiscoverPresetsWeb.autoDiscoverWithCustom)(apps), [apps]);
118
-
119
- // Let the host restore `@react_buoy_open_apps` from the previous session
120
- // once it knows which tools exist (native registerApps parity).
121
- const {
122
- registerApps
123
- } = appHost;
124
- (0, _react.useEffect)(() => {
125
- registerApps(tools);
126
- }, [registerApps, tools]);
127
-
128
- // Convert to available tools config for settings
129
- const availableToolsConfig = (0, _react.useMemo)(() => tools.map(tool => ({
130
- id: tool.id,
131
- name: tool.name,
132
- description: tool.description,
133
- slot: tool.slot
134
- })), [tools]);
135
-
136
- // Register available tools with the shared settings hook (used by the
137
- // settings modal and the bubble-row visibility gating).
138
- const {
139
- settings
140
- } = (0, _floatingToolsReact.useSettings)({
141
- availableTools: availableToolsConfig,
142
- storage: webSettingsStorage
143
- });
144
-
145
- // Dial/settings open-state persistence — native FloatingMenu.tsx:95-122 and
146
- // DialDevTools.tsx:136-164 restore these across reloads.
147
- (0, _react.useEffect)(() => {
148
- let cancelled = false;
149
- const restore = async () => {
150
- const [dialOpen, settingsOpen] = await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()), _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);
151
- if (cancelled) return;
152
- if (dialOpen === 'true') setIsDialOpen(true);
153
- if (settingsOpen === 'true') {
154
- setIsDialOpen(true); // settings lives above the dial (native structure)
155
- setIsSettingsOpen(true);
156
- }
157
- stateRestoredRef.current = true;
158
- };
159
- void restore();
160
- return () => {
161
- cancelled = true;
162
- };
163
- }, []);
164
- (0, _react.useEffect)(() => {
165
- if (!stateRestoredRef.current) return;
166
- void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(), isDialOpen ? 'true' : 'false');
167
- }, [isDialOpen]);
168
- (0, _react.useEffect)(() => {
169
- if (!stateRestoredRef.current) return;
170
- void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(), isSettingsOpen ? 'true' : 'false');
171
- }, [isSettingsOpen]);
172
-
173
- // Shared open path for dial + bubble-row tools.
174
- const openTool = (0, _react.useCallback)(tool => {
175
- void (0, _dialUsageStore.recordToolUsage)(tool.id);
176
- if (tool.component) {
177
- const dockIcon = typeof tool.icon === 'function' ? tool.icon(20) : tool.icon;
178
- appHost.open({
179
- id: tool.id,
180
- title: tool.name || (0, _floatingToolsReact.getToolLabel)(tool.id),
181
- component: tool.component,
182
- props: tool.props,
183
- launchMode: tool.launchMode || 'self-modal',
184
- singleton: tool.singleton ?? true,
185
- icon: dockIcon,
186
- color: tool.color || (0, _floatingToolsReact.getToolColor)(tool.id)
187
- });
188
- } else {
189
- tool.onPress?.();
190
- }
191
- }, [appHost]);
192
-
193
- // Build dial icons for every dial-eligible tool. The dial paginates and
194
- // ranks them by usage, so there is no per-tool show/hide setting.
195
- const dialIcons = (0, _react.useMemo)(() => {
196
- const dialTools = (0, _autoDiscoverPresetsWeb.getToolsBySlot)(tools, 'dial');
197
- return dialTools.map(tool => {
198
- const color = tool.color || (0, _floatingToolsReact.getToolColor)(tool.id);
199
- // Handle icon - can be string (emoji) or function (size) => ReactNode
200
- let icon;
201
- if (typeof tool.icon === 'string') {
202
- icon = tool.icon;
203
- } else if (typeof tool.icon === 'function') {
204
- // It's a render function - call it with size
205
- icon = tool.icon(32);
206
- } else {
207
- icon = null;
208
- }
209
- return {
210
- id: tool.id,
211
- // The tool's own name wins (native parity); the registry label is
212
- // the fallback for preset tools that don't set one.
213
- name: tool.name || (0, _floatingToolsReact.getToolLabel)(tool.id),
214
- icon,
215
- // Preset tools with no component and no onPress can't do anything on
216
- // web — render them like native's uninstalled tools ("Unavailable"
217
- // caption, non-interactive) instead of a tile that silently no-ops.
218
- unavailable: !tool.component && !tool.onPress,
219
- color,
220
- onPress: () => {
221
- openTool(tool);
222
- setIsDialOpen(false);
223
- }
224
- };
225
- });
226
- }, [tools, openTool]);
227
-
228
- // Snapshot the usage-ranked order each time the dial opens. It stays stable
229
- // while open so icons don't jump positions mid-interaction.
230
- const rankedDialIcons = (0, _react.useMemo)(() => {
231
- if (!isDialOpen) return dialIcons;
232
- const byId = new Map(dialIcons.map(i => [i.id, i]));
233
- return (0, _dialUsageStore.getRankedToolIds)(dialIcons.map(i => i.id)).map(id => byId.get(id)).filter(i => Boolean(i));
234
- }, [isDialOpen, dialIcons]);
235
-
236
- // Bubble-row tools — native FloatingMenu.tsx:349-386: slot !== 'dial',
237
- // explicitly enabled in settings, rendered as small icon buttons.
238
- const rowTools = (0, _react.useMemo)(() => (0, _autoDiscoverPresetsWeb.getToolsBySlot)(tools, 'row').filter(tool => settings.floatingTools[tool.id] === true && (tool.component || tool.onPress)), [tools, settings.floatingTools]);
239
-
240
- // Build available tools for settings modal
241
- const availableTools = (0, _react.useMemo)(() => tools.map(tool => ({
242
- id: tool.id,
243
- name: tool.name || (0, _floatingToolsReact.getToolLabel)(tool.id),
244
- description: tool.description || (0, _floatingToolsReact.getToolDescription)(tool.id),
245
- slot: tool.slot,
246
- // Settings rows fall back to the tool's own icon when the modal has
247
- // no hardcoded glyph for it (mirrors native DialDevTools).
248
- icon: tool.icon,
249
- color: tool.color
250
- })), [tools]);
251
-
252
- // Welcome tooltip — native FloatingMenu.tsx:134-157: 1000ms after mount,
253
- // once ever, only while nothing else is open; the bubble centers under the
254
- // arrow while it shows.
255
- const [showWelcomeTooltip, setShowWelcomeTooltip] = (0, _react.useState)(false);
256
- const isAnyToolOpen = appHost.openApps.some(app => !app.minimized);
257
- (0, _react.useEffect)(() => {
258
- if (disableHints) return;
259
- let cancelled = false;
260
- const timer = setTimeout(async () => {
261
- const seen = await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);
262
- if (!cancelled && !seen) setShowWelcomeTooltip(true);
263
- }, 1000);
264
- return () => {
265
- cancelled = true;
266
- clearTimeout(timer);
267
- };
268
- }, [disableHints]);
269
- const dismissWelcomeTooltip = (0, _react.useCallback)(() => {
270
- setShowWelcomeTooltip(false);
271
- void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY, 'true');
272
- }, []);
273
-
274
- // Callbacks
275
- const handleOpenDial = (0, _react.useCallback)(() => {
276
- // Opening the dial dismisses the welcome tooltip (native handleDialOpen).
277
- if (showWelcomeTooltip) dismissWelcomeTooltip();
278
- setIsDialOpen(true);
279
- }, [showWelcomeTooltip, dismissWelcomeTooltip]);
280
- const handleCloseDial = (0, _react.useCallback)(() => {
281
- setIsDialOpen(false);
282
- setIsSettingsOpen(false); // settings lives above the dial
283
- }, []);
284
- // Center press toggles settings while the dial STAYS OPEN underneath —
285
- // the center label flips to CLOSE/SETTINGS (native DialDevTools behavior).
286
- const handleCenterPress = (0, _react.useCallback)(() => {
287
- setIsSettingsOpen(open => !open);
288
- }, []);
289
- const handleCloseSettings = (0, _react.useCallback)(() => setIsSettingsOpen(false), []);
290
- const showEnvironmentSelector = Boolean(availableEnvironments?.length && onEnvironmentSwitch);
291
- const environmentEnabled = settings.floatingTools.environment !== false;
292
- const welcomeActive = showWelcomeTooltip && !isDialOpen && !isAnyToolOpen;
293
- const hasMinimizedTools = appHost.openApps.some(app => app.minimized && app.launchMode !== 'toggle-only');
294
-
295
- // Headless: desktop sync is native-only, so there is nothing to mount on
296
- // web — accept the prop for API parity and render nothing. (After all
297
- // hooks so hook order is preserved.)
298
- if (headless) return null;
299
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
300
- children: [welcomeActive && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
301
- style: {
302
- position: 'fixed',
303
- inset: 0,
304
- backgroundColor: 'rgba(0,0,0,0.85)',
305
- zIndex: 10000
306
- }
307
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_floatingToolsWeb.FloatingTools, {
308
- enablePositionPersistence: !welcomeActive,
309
- pushToSide: isDialOpen || isAnyToolOpen,
310
- suspendPointerEvents: isDialOpen,
311
- centerOnboarding: welcomeActive,
312
- minimizedStack: hasMinimizedTools ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack, {}) : undefined,
313
- hasMinimizedStack: hasMinimizedTools,
314
- children: [environment && environmentEnabled && !showEnvironmentSelector && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator, {
315
- environment: environment
316
- }), showEnvironmentSelector && environmentEnabled && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline, {
317
- currentEnvironment: environment ?? 'local',
318
- availableEnvironments: availableEnvironments,
319
- onSelect: onEnvironmentSwitch
320
- }), userRole ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingToolsWeb.UserStatus, {
321
- userRole: userRole,
322
- onPress: handleOpenDial
323
- }) :
324
- /*#__PURE__*/
325
- // native MenuLauncherIcon fallback: dial stays reachable without a
326
- // userRole pill.
327
- (0, _jsxRuntime.jsx)("button", {
328
- "aria-label": "Open dev tools",
329
- onClick: handleOpenDial,
330
- style: {
331
- display: 'flex',
332
- alignItems: 'center',
333
- justifyContent: 'center',
334
- padding: '6px 8px',
335
- background: 'none',
336
- border: 'none',
337
- cursor: 'pointer'
338
- },
339
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuLauncherIcon, {})
340
- }), rowTools.map(tool =>
341
- /*#__PURE__*/
342
- // native FloatingMenu fab: paddingH 6, paddingV 4, r6, transparent
343
- (0, _jsxRuntime.jsx)("button", {
344
- "aria-label": tool.name || (0, _floatingToolsReact.getToolLabel)(tool.id),
345
- title: tool.description,
346
- onClick: () => openTool(tool),
347
- style: {
348
- display: 'flex',
349
- alignItems: 'center',
350
- justifyContent: 'center',
351
- padding: '4px 6px',
352
- borderRadius: 6,
353
- background: 'none',
354
- border: 'none',
355
- cursor: 'pointer'
356
- },
357
- children: typeof tool.icon === 'function' ? tool.icon(16) : tool.icon
358
- }, tool.id))]
359
- }), welcomeActive && /*#__PURE__*/(0, _jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip, {
360
- title: "Welcome to Buoy!",
361
- message: "Grab and position this menu wherever you want, then tap the icon to open your tools.",
362
- onDismiss: dismissWelcomeTooltip
363
- }), isDialOpen && /*#__PURE__*/(0, _jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu, {
364
- icons: rankedDialIcons,
365
- onClose: handleCloseDial,
366
- centerLabel: "BUOY",
367
- onCenterPress: handleCenterPress,
368
- settingsOpen: isSettingsOpen,
369
- hintsDisabled: disableHints
370
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal, {
371
- visible: isSettingsOpen,
372
- onClose: handleCloseSettings,
373
- availableTools: availableTools,
374
- onSettingsChange: _newSettings => {
375
- // Settings are already saved by the hook
376
- }
377
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppHostWeb.AppOverlay, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_floating.FloatingToolHost, {})]
378
- });
379
- }
380
-
381
- // =============================
382
- // Re-exports for convenience
383
- // =============================
384
-
385
- function FloatingDevTools(props) {
386
- const {
387
- access,
388
- isPro,
389
- licenseKey
390
- } = (0, _license.useLicense)();
391
- (0, _react.useEffect)(() => {
392
- void _license.LicenseManager.configure(props.licenseKey);
393
- }, [props.licenseKey]);
394
- const matches = props.licenseKey === undefined || props.licenseKey.trim().toUpperCase() === (licenseKey ?? "");
395
- const dev = typeof __DEV__ !== "undefined" ? __DEV__ : process.env.NODE_ENV !== "production";
396
- if (!dev && !isPro) return null;
397
- if (!matches || access.status !== "admitted") return props.headless ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.AccountSetup, {});
398
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(AdmittedFloatingDevTools, {
399
- ...props
400
- });
401
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FloatingDevTools=FloatingDevTools;var _floating=require("@buoy-gg/shared-ui/floating");var _license=require("@buoy-gg/license");var _sharedUi=require("@buoy-gg/shared-ui");var _react=require("react");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _autoDiscoverPresetsWeb=require("../utils/autoDiscoverPresets.web.js");var _floatingToolsWeb=require("./floatingTools.web.js");var _DialDevToolsWeb=require("./dial/DialDevTools.web.js");var _dialUsageStore=require("./dial/dialUsageStore.js");var _OnboardingTooltipWeb=require("./dial/OnboardingTooltip.web.js");var _DevToolsSettingsModalWeb=require("./DevToolsSettingsModal.web.js");var _AppHostWeb=require("./AppHost.web.js");var _MinimizedToolsStackWeb=require("./MinimizedToolsStack.web.js");var _createWebTools=require("../utils/createWebTools.js");var _BrowserToolRuntime=require("./BrowserToolRuntime.js");var _releaseOptIn=require("../releaseOptIn.js");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.js");var _jsxRuntime=require("react/jsx-runtime");const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:t=14,color:l="#20C997"}){const o=Math.max(2,t/4);const c=Math.max(1,t/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${o}px)`,gap:c,width:t,height:t,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((u,a)=>(0,_jsxRuntime.jsx)("div",{style:{width:o,height:o,borderRadius:o/2,backgroundColor:l}},a))})}function AdmittedFloatingDevTools(t){return(0,_jsxRuntime.jsx)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:(0,_jsxRuntime.jsx)(_AppHostWeb.AppHostProvider,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsInner,{...t})})})}function FloatingDevToolsInner({environment:t,userRole:l,availableEnvironments:o,onEnvironmentSwitch:c,apps:u,modules:a=EMPTY_MODULES,externalSync:v,requiredEnvVars:W,sentryGetClient:A,disableHints:S=false,headless:D=false}){const[i,b]=(0,_react.useState)(false);const[d,T]=(0,_react.useState)(false);const j=(0,_react.useRef)(false);const p=(0,_AppHostWeb.useAppHost)();const r=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(a),...u??[]]),[u,a]);const y=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();const O=p.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{y.setDialOpen(i)},[i,y.setDialOpen]);(0,_react.useEffect)(()=>{y.setToolOpen(O||d)},[O,d,y.setToolOpen]);const{registerApps:w}=p;(0,_react.useEffect)(()=>{w(r.map(e=>{const n=e.icon;return{...e,icon:typeof n==="function"?({size:s})=>n(s):n}}))},[w,r]);const L=(0,_react.useMemo)(()=>r.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[r]);const{settings:x}=(0,_floatingToolsReact.useSettings)({availableTools:L,storage:webSettingsStorage});(0,_react.useEffect)(()=>{let e=false;const n=async()=>{const[s,f]=await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()),_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);if(e)return;if(s==="true")b(true);if(f==="true"){b(true);T(true)}j.current=true};void n();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!j.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(),i?"true":"false")},[i]);(0,_react.useEffect)(()=>{if(!j.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),d?"true":"false")},[d]);const _=(0,_react.useCallback)(e=>{void(0,_dialUsageStore.recordToolUsage)(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const n=typeof e.icon==="function"?e.icon(20):e.icon;p.open({id:e.id,title:e.name||(0,_floatingToolsReact.getToolLabel)(e.id),component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:n,color:e.color||(0,_floatingToolsReact.getToolColor)(e.id)})}else{e.onPress?.()}},[p]);const h=(0,_react.useMemo)(()=>{const e=(0,_autoDiscoverPresetsWeb.getToolsBySlot)(r,"dial");return e.map(n=>{const s=n.color||(0,_floatingToolsReact.getToolColor)(n.id);let f;if(typeof n.icon==="string"){f=n.icon}else if(typeof n.icon==="function"){f=n.icon(32)}else{f=null}return{id:n.id,name:n.name||(0,_floatingToolsReact.getToolLabel)(n.id),icon:f,unavailable:!n.component&&!n.onPress,color:s,onPress:()=>{_(n);b(false)}}})},[r,_]);const R=(0,_react.useMemo)(()=>{if(!i)return h;const e=new Map(h.map(n=>[n.id,n]));return(0,_dialUsageStore.getRankedToolIds)(h.map(n=>n.id)).map(n=>e.get(n)).filter(n=>Boolean(n))},[i,h]);const K=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(r,"row").filter(e=>x.floatingTools[e.id]===true&&(e.component||e.onPress)),[r,x.floatingTools]);const B=(0,_react.useMemo)(()=>r.map(e=>({id:e.id,name:e.name||(0,_floatingToolsReact.getToolLabel)(e.id),description:e.description||(0,_floatingToolsReact.getToolDescription)(e.id),slot:e.slot,icon:e.icon,color:e.color})),[r]);const[U,C]=(0,_react.useState)(false);const E=p.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{if(S)return;let e=false;const n=setTimeout(async()=>{const s=await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);if(!e&&!s)C(true)},1e3);return()=>{e=true;clearTimeout(n)}},[S]);const g=(0,_react.useCallback)(()=>{C(false);void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY,"true")},[]);const M=(0,_react.useCallback)(()=>{g();b(true)},[g]);const V=(0,_react.useCallback)(()=>{b(false);T(false)},[]);const z=(0,_react.useCallback)(()=>{T(e=>!e)},[]);const F=(0,_react.useCallback)(()=>T(false),[]);const k=Boolean(o?.length&&c);const I=x.floatingTools.environment!==false;const m=U&&!i&&!E;(0,_react.useEffect)(()=>{if(!m)return;const e=s=>{if(!(s.target instanceof Element)||!s.target.closest("[data-buoy-root]"))g()};const n=s=>{if(s.key==="Escape")g()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",n);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",n)}},[m,g]);const P=p.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const q=(0,_jsxRuntime.jsx)(_BrowserToolRuntime.BrowserToolRuntime,{modules:a,apps:u,requiredEnvVars:W,externalSync:v,headless:D,sentryGetClient:A});if(D)return q;return(0,_jsxRuntime.jsxs)("div",{"data-buoy-root":"",style:{display:"contents"},children:[q,m&&(0,_jsxRuntime.jsx)("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),(0,_jsxRuntime.jsxs)(_floatingToolsWeb.FloatingTools,{enablePositionPersistence:!m,pushToSide:i||E,suspendPointerEvents:i,centerOnboarding:m,minimizedStack:P?(0,_jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack,{}):void 0,hasMinimizedStack:P,children:[t&&I&&!k&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:t}),k&&I&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:t??"local",availableEnvironments:o,onSelect:c}),l?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:l,onPress:M}):(0,_jsxRuntime.jsx)("button",{"aria-label":"Open dev tools",onClick:M,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:(0,_jsxRuntime.jsx)(MenuLauncherIcon,{})}),K.map(e=>(0,_jsxRuntime.jsx)("button",{"aria-label":e.name||(0,_floatingToolsReact.getToolLabel)(e.id),title:e.description,onClick:()=>_(e),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof e.icon==="function"?e.icon(16):e.icon},e.id))]}),m&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:g}),i&&(0,_jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu,{icons:R,onClose:V,centerLabel:"BUOY",onCenterPress:z,settingsOpen:d,hintsDisabled:S}),(0,_jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal,{visible:d,onClose:F,availableTools:B,onSettingsChange:e=>{}}),(0,_jsxRuntime.jsx)(_AppHostWeb.AppOverlay,{}),(0,_jsxRuntime.jsx)(_floating.FloatingToolHost,{})]})}function FloatingDevTools(t){const{access:l,isPro:o,licenseKey:c}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(t.licenseKey)},[t.licenseKey]);const u=t.licenseKey===void 0||t.licenseKey.trim().toUpperCase()===(c??"");const a=typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production";const v=u&&l.status==="admitted";(0,_react.useEffect)(()=>{if(!a&&o&&v)(0,_releaseOptIn.markReleaseOptIn)()},[a,o,v]);if(!a&&!o)return null;if(!v)return t.headless?null:(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{});return(0,_jsxRuntime.jsx)(AdmittedFloatingDevTools,{...t})}