@buoy-gg/core 7.0.41 → 7.0.43

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 (270) hide show
  1. package/README.md +14 -95
  2. package/bin/buoy.js +19 -340
  3. package/lib/commonjs/Buoy.js +1 -107
  4. package/lib/commonjs/browserRegister.js +1 -48
  5. package/lib/commonjs/browserRegister.server.js +1 -10
  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 -376
  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 -150
  14. package/lib/commonjs/floatingMenu/DefaultConfigContext.js +1 -45
  15. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +1 -18
  16. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.shared.js +1 -1114
  17. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +1 -48
  18. package/lib/commonjs/floatingMenu/DevToolsVisibilityContext.js +1 -49
  19. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -559
  20. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -415
  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 -377
  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 -471
  29. package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -443
  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 -895
  34. package/lib/commonjs/floatingMenu/dial/DialHyperspace.js +1 -177
  35. package/lib/commonjs/floatingMenu/dial/DialIcon.js +1 -304
  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 -12
  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 -14
  52. package/lib/commonjs/index.js +1 -291
  53. package/lib/commonjs/index.web.js +1 -241
  54. package/lib/commonjs/reactDevtoolsTypes.js +1 -1
  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 -46
  60. package/lib/commonjs/utils/createWebTool.js +1 -20
  61. package/lib/commonjs/utils/createWebTools.js +1 -30
  62. package/lib/commonjs/version.js +1 -18
  63. package/lib/module/Buoy.js +1 -102
  64. package/lib/module/browserRegister.js +1 -44
  65. package/lib/module/browserRegister.server.js +1 -6
  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 -368
  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 -146
  74. package/lib/module/floatingMenu/DefaultConfigContext.js +1 -39
  75. package/lib/module/floatingMenu/DevToolsSettingsModal.js +1 -3
  76. package/lib/module/floatingMenu/DevToolsSettingsModal.shared.js +1 -1110
  77. package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +1 -44
  78. package/lib/module/floatingMenu/DevToolsVisibilityContext.js +1 -44
  79. package/lib/module/floatingMenu/FloatingDevTools.js +1 -556
  80. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -412
  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 -374
  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 -467
  89. package/lib/module/floatingMenu/autoExternalSync.js +1 -436
  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 -891
  94. package/lib/module/floatingMenu/dial/DialHyperspace.js +1 -173
  95. package/lib/module/floatingMenu/dial/DialIcon.js +1 -301
  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 -3
  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 -10
  112. package/lib/module/index.js +1 -41
  113. package/lib/module/index.web.js +1 -36
  114. package/lib/module/reactDevtoolsTypes.js +1 -1
  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 -38
  120. package/lib/module/utils/createWebTool.js +1 -17
  121. package/lib/module/utils/createWebTools.js +1 -25
  122. package/lib/module/version.js +1 -14
  123. package/lib/typescript/commonjs/browserRegister.d.ts +9 -1
  124. package/lib/typescript/commonjs/browserRegister.server.d.ts +1 -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/defaultConfig.d.ts +1 -1
  128. package/lib/typescript/commonjs/index.web.d.ts +1 -0
  129. package/lib/typescript/commonjs/releaseOptIn.d.ts +4 -0
  130. package/lib/typescript/commonjs/version.d.ts +1 -1
  131. package/lib/typescript/module/browserRegister.d.ts +9 -1
  132. package/lib/typescript/module/browserRegister.server.d.ts +1 -0
  133. package/lib/typescript/module/earlyHookScript.d.ts +12 -0
  134. package/lib/typescript/module/earlyNetwork.d.ts +52 -0
  135. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
  136. package/lib/typescript/module/index.web.d.ts +1 -0
  137. package/lib/typescript/module/releaseOptIn.d.ts +4 -0
  138. package/lib/typescript/module/version.d.ts +1 -1
  139. package/lib/web/chunks/chunk-5SGL6QL4.mjs +1 -0
  140. package/lib/web/chunks/chunk-FROELTJH.mjs +1 -0
  141. package/lib/web/chunks/chunk-QZDVCMCT.mjs +1 -2
  142. package/lib/web/chunks/chunk-R7RGRTY5.mjs +1 -2
  143. package/lib/web/index.mjs +2 -3
  144. package/lib/web/register-server.mjs +1 -2
  145. package/lib/web/register.mjs +1 -2
  146. package/lib/web/toolkit.mjs +1 -2
  147. package/package.json +6 -9
  148. package/lib/typescript/commonjs/Buoy.d.ts.map +0 -1
  149. package/lib/typescript/commonjs/browserRegister.d.ts.map +0 -1
  150. package/lib/typescript/commonjs/browserRegister.server.d.ts.map +0 -1
  151. package/lib/typescript/commonjs/floatingMenu/AppHost.d.ts.map +0 -1
  152. package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts.map +0 -1
  153. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts.map +0 -1
  154. package/lib/typescript/commonjs/floatingMenu/AppIcon.d.ts.map +0 -1
  155. package/lib/typescript/commonjs/floatingMenu/AppIcon.web.d.ts.map +0 -1
  156. package/lib/typescript/commonjs/floatingMenu/BrowserToolRuntime.d.ts.map +0 -1
  157. package/lib/typescript/commonjs/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
  158. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
  159. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.shared.d.ts.map +0 -1
  160. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
  161. package/lib/typescript/commonjs/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
  162. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +0 -1
  163. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
  164. package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +0 -1
  165. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
  166. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
  167. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
  168. package/lib/typescript/commonjs/floatingMenu/ToggleStateManager.d.ts.map +0 -1
  169. package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts.map +0 -1
  170. package/lib/typescript/commonjs/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
  171. package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
  172. package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +0 -1
  173. package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts.map +0 -1
  174. package/lib/typescript/commonjs/floatingMenu/deviceIdentity.d.ts.map +0 -1
  175. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
  176. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
  177. package/lib/typescript/commonjs/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
  178. package/lib/typescript/commonjs/floatingMenu/dial/DialIcon.d.ts.map +0 -1
  179. package/lib/typescript/commonjs/floatingMenu/dial/DialPagination.d.ts.map +0 -1
  180. package/lib/typescript/commonjs/floatingMenu/dial/DialSnow.d.ts.map +0 -1
  181. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
  182. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
  183. package/lib/typescript/commonjs/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
  184. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
  185. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
  186. package/lib/typescript/commonjs/floatingMenu/externalSyncGate.d.ts.map +0 -1
  187. package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts.map +0 -1
  188. package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts.map +0 -1
  189. package/lib/typescript/commonjs/floatingMenu/optionalRequire.d.ts.map +0 -1
  190. package/lib/typescript/commonjs/floatingMenu/settingsBus.d.ts.map +0 -1
  191. package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
  192. package/lib/typescript/commonjs/floatingMenu/types.d.ts.map +0 -1
  193. package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
  194. package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.web.d.ts.map +0 -1
  195. package/lib/typescript/commonjs/index.d.ts.map +0 -1
  196. package/lib/typescript/commonjs/index.web.d.ts.map +0 -1
  197. package/lib/typescript/commonjs/reactDevtoolsTypes.d.ts.map +0 -1
  198. package/lib/typescript/commonjs/telemetry/installPing.d.ts.map +0 -1
  199. package/lib/typescript/commonjs/toolkit.d.ts.map +0 -1
  200. package/lib/typescript/commonjs/toolkitComponents.d.ts.map +0 -1
  201. package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts.map +0 -1
  202. package/lib/typescript/commonjs/utils/createWebTool.d.ts.map +0 -1
  203. package/lib/typescript/commonjs/utils/createWebTools.d.ts.map +0 -1
  204. package/lib/typescript/commonjs/version.d.ts.map +0 -1
  205. package/lib/typescript/module/Buoy.d.ts.map +0 -1
  206. package/lib/typescript/module/browserRegister.d.ts.map +0 -1
  207. package/lib/typescript/module/browserRegister.server.d.ts.map +0 -1
  208. package/lib/typescript/module/floatingMenu/AppHost.d.ts.map +0 -1
  209. package/lib/typescript/module/floatingMenu/AppHost.web.d.ts.map +0 -1
  210. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts.map +0 -1
  211. package/lib/typescript/module/floatingMenu/AppIcon.d.ts.map +0 -1
  212. package/lib/typescript/module/floatingMenu/AppIcon.web.d.ts.map +0 -1
  213. package/lib/typescript/module/floatingMenu/BrowserToolRuntime.d.ts.map +0 -1
  214. package/lib/typescript/module/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
  215. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
  216. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.shared.d.ts.map +0 -1
  217. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
  218. package/lib/typescript/module/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
  219. package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +0 -1
  220. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
  221. package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +0 -1
  222. package/lib/typescript/module/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
  223. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
  224. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
  225. package/lib/typescript/module/floatingMenu/ToggleStateManager.d.ts.map +0 -1
  226. package/lib/typescript/module/floatingMenu/ToolHost.d.ts.map +0 -1
  227. package/lib/typescript/module/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
  228. package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
  229. package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +0 -1
  230. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts.map +0 -1
  231. package/lib/typescript/module/floatingMenu/deviceIdentity.d.ts.map +0 -1
  232. package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
  233. package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
  234. package/lib/typescript/module/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
  235. package/lib/typescript/module/floatingMenu/dial/DialIcon.d.ts.map +0 -1
  236. package/lib/typescript/module/floatingMenu/dial/DialPagination.d.ts.map +0 -1
  237. package/lib/typescript/module/floatingMenu/dial/DialSnow.d.ts.map +0 -1
  238. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
  239. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
  240. package/lib/typescript/module/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
  241. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
  242. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
  243. package/lib/typescript/module/floatingMenu/externalSyncGate.d.ts.map +0 -1
  244. package/lib/typescript/module/floatingMenu/floatingTools.d.ts.map +0 -1
  245. package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts.map +0 -1
  246. package/lib/typescript/module/floatingMenu/optionalRequire.d.ts.map +0 -1
  247. package/lib/typescript/module/floatingMenu/settingsBus.d.ts.map +0 -1
  248. package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
  249. package/lib/typescript/module/floatingMenu/types.d.ts.map +0 -1
  250. package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
  251. package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.web.d.ts.map +0 -1
  252. package/lib/typescript/module/index.d.ts.map +0 -1
  253. package/lib/typescript/module/index.web.d.ts.map +0 -1
  254. package/lib/typescript/module/reactDevtoolsTypes.d.ts.map +0 -1
  255. package/lib/typescript/module/telemetry/installPing.d.ts.map +0 -1
  256. package/lib/typescript/module/toolkit.d.ts.map +0 -1
  257. package/lib/typescript/module/toolkitComponents.d.ts.map +0 -1
  258. package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts.map +0 -1
  259. package/lib/typescript/module/utils/createWebTool.d.ts.map +0 -1
  260. package/lib/typescript/module/utils/createWebTools.d.ts.map +0 -1
  261. package/lib/typescript/module/version.d.ts.map +0 -1
  262. package/lib/web/chunks/chunk-5NZOQR6Q.mjs +0 -2
  263. package/lib/web/chunks/chunk-CGDSLLZF.mjs +0 -2
  264. package/lib/web/chunks/chunk-DCJDUSNR.mjs +0 -2
  265. package/lib/web/chunks/chunk-IDSHFS6G.mjs +0 -2
  266. package/lib/web/chunks/chunk-JOAMJGCS.mjs +0 -2
  267. package/lib/web/chunks/chunk-KYKZ2N52.mjs +0 -2
  268. package/lib/web/chunks/chunk-NGM7JGGS.mjs +0 -2
  269. package/lib/web/chunks/chunk-Z3XWDDIO.mjs +0 -2
  270. package/lib/web/chunks/chunk-ZTGQ6TTY.mjs +0 -2
@@ -1,452 +1 @@
1
- "use strict";
2
-
3
- import { persistentStorage, setExpandableWindowControls } from "@buoy-gg/shared-ui";
4
- import React, { createContext, useCallback, useContext, useMemo, useState, useEffect, useRef } from "react";
5
- import { BackHandler, Modal, StyleSheet, View } from "react-native";
6
- import { resolveOpenAppsState } from "./AppHostLogic.js";
7
- import { renderAppIcon } from "./AppIcon";
8
- import { useMinimizedTools } from "./MinimizedToolsContext.js";
9
- import { ToolModalShell } from "./ToolHost.js";
10
- import { useDevToolsSettings } from "./DevToolsSettingsModal";
11
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
12
- const AppHostContext = /*#__PURE__*/createContext(null);
13
- const STORAGE_KEY_OPEN_APPS = "@react_buoy_open_apps";
14
- const PERSISTENCE_DELAY = 500;
15
-
16
- // Type for persisted app state
17
-
18
- /**
19
- * Provides the floating dev tools application host. Tracks open tool instances, restores
20
- * persisted state, and exposes imperative helpers used by `FloatingMenu` and friends.
21
- */
22
- export const AppHostProvider = ({
23
- children
24
- }) => {
25
- const [openApps, setOpenApps] = useState([]);
26
- const [isRestored, setIsRestored] = useState(false);
27
- const persistenceTimeoutRef = useRef(null);
28
- const installedAppsRef = useRef([]);
29
- const pendingRestoreRef = useRef(null);
30
- const {
31
- restore: removeFromMinimizedStack
32
- } = useMinimizedTools();
33
- const open = useCallback(def => {
34
- let resolvedId = "";
35
- setOpenApps(current => {
36
- const {
37
- apps,
38
- instanceId,
39
- wasMinimized
40
- } = resolveOpenAppsState(current, def, () => `${def.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);
41
- resolvedId = instanceId;
42
-
43
- // If the app was minimized, remove it from the minimized stack
44
- // This needs to be done outside of setOpenApps to avoid nested state updates
45
- if (wasMinimized) {
46
- // Schedule the removal for after this state update completes
47
- setTimeout(() => removeFromMinimizedStack(instanceId), 0);
48
- }
49
- return apps;
50
- });
51
- return resolvedId;
52
- }, [removeFromMinimizedStack]);
53
- const tryRestorePending = useCallback(() => {
54
- if (isRestored) return;
55
- if (!installedAppsRef.current.length) return;
56
- const pendingApps = pendingRestoreRef.current;
57
- if (!pendingApps || pendingApps.length === 0) {
58
- setIsRestored(true);
59
- return;
60
- }
61
- pendingRestoreRef.current = null;
62
- pendingApps.forEach(({
63
- id: appId,
64
- minimized
65
- }) => {
66
- const appDef = installedAppsRef.current.find(app => app.id === appId);
67
- if (appDef) {
68
- const resolvedIcon = renderAppIcon(appDef.icon, {
69
- slot: "dial",
70
- size: 20,
71
- color: appDef.color
72
- });
73
- open({
74
- id: appDef.id,
75
- title: appDef.name,
76
- component: appDef.component,
77
- props: appDef.props,
78
- launchMode: appDef.launchMode || "self-modal",
79
- singleton: appDef.singleton,
80
- icon: resolvedIcon,
81
- color: appDef.color,
82
- modal: appDef.modal,
83
- minimized: minimized // Preserve minimized state
84
- });
85
- }
86
- });
87
- setIsRestored(true);
88
- }, [isRestored, open]);
89
-
90
- // Restore open apps on mount
91
- useEffect(() => {
92
- const restoreOpenApps = async () => {
93
- try {
94
- const saved = await persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);
95
- if (saved) {
96
- const parsed = JSON.parse(saved);
97
- // Handle both old format (string[]) and new format (PersistedAppState[])
98
- let savedApps;
99
- if (Array.isArray(parsed) && parsed.length > 0) {
100
- if (typeof parsed[0] === "string") {
101
- // Old format: convert string[] to PersistedAppState[]
102
- savedApps = parsed.map(id => ({
103
- id,
104
- minimized: false
105
- }));
106
- } else {
107
- // New format: already PersistedAppState[]
108
- savedApps = parsed;
109
- }
110
- if (savedApps.length) {
111
- pendingRestoreRef.current = savedApps;
112
- tryRestorePending();
113
- return;
114
- }
115
- }
116
- }
117
- } catch (error) {
118
- // Failed to restore open apps - continue with fresh state
119
- }
120
- setIsRestored(true);
121
- };
122
- restoreOpenApps();
123
- }, [tryRestorePending]);
124
-
125
- // Save open apps with debounce
126
- useEffect(() => {
127
- if (!isRestored) return;
128
-
129
- // Clear existing timeout
130
- if (persistenceTimeoutRef.current) {
131
- clearTimeout(persistenceTimeoutRef.current);
132
- }
133
-
134
- // Set new timeout to save
135
- persistenceTimeoutRef.current = setTimeout(() => {
136
- const appStates = openApps.map(app => ({
137
- id: app.id,
138
- minimized: app.minimized ?? false
139
- }));
140
- persistentStorage.setItem(STORAGE_KEY_OPEN_APPS, JSON.stringify(appStates));
141
- }, PERSISTENCE_DELAY);
142
- return () => {
143
- if (persistenceTimeoutRef.current) {
144
- clearTimeout(persistenceTimeoutRef.current);
145
- }
146
- };
147
- }, [openApps, isRestored]);
148
-
149
- // Store reference to installed apps for restoration
150
- const registerApps = useCallback(apps => {
151
- installedAppsRef.current = apps;
152
- tryRestorePending();
153
- }, [tryRestorePending]);
154
- const close = useCallback(instanceId => {
155
- setOpenApps(s => {
156
- if (!s.length) return s;
157
- if (!instanceId) return s.slice(0, -1);
158
- return s.filter(a => a.instanceId !== instanceId);
159
- });
160
- }, []);
161
- const closeAll = useCallback(() => setOpenApps([]), []);
162
- const minimize = useCallback(instanceId => {
163
- setOpenApps(s => s.map(app => app.instanceId === instanceId ? {
164
- ...app,
165
- minimized: true
166
- } : app));
167
- }, []);
168
- const restore = useCallback((instanceId, restoreState) => {
169
- setOpenApps(s => s.map(app => app.instanceId === instanceId ? {
170
- ...app,
171
- minimized: false,
172
- restoreState
173
- } : app));
174
- }, []);
175
- const isMinimized = useCallback(instanceId => {
176
- const app = openApps.find(a => a.instanceId === instanceId);
177
- return app?.minimized ?? false;
178
- }, [openApps]);
179
- React.useEffect(() => {
180
- if (openApps.length === 0) return;
181
- const handler = () => {
182
- close();
183
- return true;
184
- };
185
- const sub = BackHandler.addEventListener("hardwareBackPress", handler);
186
- return () => sub.remove();
187
- }, [openApps.length, close]);
188
- const value = useMemo(() => ({
189
- openApps,
190
- // Only count non-toggle-only and non-minimized tools as "open"
191
- isAnyOpen: openApps.filter(app => app.launchMode !== "toggle-only" && !app.minimized).length > 0,
192
- open,
193
- close,
194
- closeAll,
195
- registerApps,
196
- minimize,
197
- restore,
198
- isMinimized
199
- }), [openApps, open, close, closeAll, registerApps, minimize, restore, isMinimized]);
200
- return /*#__PURE__*/_jsx(AppHostContext.Provider, {
201
- value: value,
202
- children: children
203
- });
204
- };
205
-
206
- /**
207
- * Accessor hook for the dev tools app host. Components can open/close tools or inspect
208
- * the active stack. Falls back to a no-op implementation when rendered outside the provider.
209
- */
210
- export const useAppHost = () => {
211
- const ctx = useContext(AppHostContext);
212
- // Return a default value if not in provider (for backwards compatibility)
213
- if (!ctx) {
214
- return {
215
- openApps: [],
216
- isAnyOpen: false,
217
- open: () => "",
218
- close: () => {},
219
- closeAll: () => {},
220
- minimize: () => {},
221
- restore: (_instanceId, _restoreState) => {},
222
- isMinimized: () => false
223
- };
224
- }
225
- return ctx;
226
- };
227
-
228
- /**
229
- * Renders a single app instance. Keeps component mounted even when minimized
230
- * by passing visible={false} instead of unmounting.
231
- *
232
- * Supports multiple simultaneous modals - each gets its own z-index based on
233
- * position in the open apps stack (later opened = higher z-index).
234
- */
235
- const AppRenderer = ({
236
- app,
237
- zIndex,
238
- onClose,
239
- onMinimize,
240
- minimizeTargetPosition,
241
- globalEnableSharedModalDimensions
242
- }) => {
243
- const Comp = app.component;
244
- // All non-minimized apps are visible - supports multiple simultaneous modals
245
- const isVisible = !app.minimized;
246
-
247
- // Merge props with global settings override
248
- // Priority: Global settings (if defined) > Tool prop > Default (false)
249
- const mergedProps = {
250
- ...(app.props ?? {}),
251
- // Only override if globalEnableSharedModalDimensions is explicitly true
252
- // (when the user turns it on in settings)
253
- ...(globalEnableSharedModalDimensions === true ? {
254
- enableSharedModalDimensions: true
255
- } : {})
256
- };
257
-
258
- // Declarative chrome: the component is a plain body — wrap it in the shared
259
- // modal shell (JsModal + managed header + search + toasts).
260
- if (app.modal && (app.launchMode === "self-modal" || !app.launchMode)) {
261
- return /*#__PURE__*/_jsx(ToolModalShell, {
262
- app: app,
263
- config: app.modal,
264
- visible: isVisible,
265
- zIndex: zIndex,
266
- onClose: onClose,
267
- onMinimize: onMinimize,
268
- initialModalState: app.restoreState,
269
- enableSharedModalDimensions: globalEnableSharedModalDimensions === true,
270
- bodyProps: mergedProps
271
- });
272
- }
273
- if (app.launchMode === "self-modal") {
274
- return /*#__PURE__*/_jsx(Comp, {
275
- ...mergedProps,
276
- visible: isVisible,
277
- onClose: onClose,
278
- onRequestClose: onClose,
279
- onMinimize: onMinimize,
280
- minimizeTargetPosition: minimizeTargetPosition,
281
- initialModalState: app.restoreState,
282
- instanceId: app.instanceId,
283
- zIndex: zIndex
284
- });
285
- }
286
- if (app.launchMode === "inline") {
287
- if (!isVisible) return null;
288
- return /*#__PURE__*/_jsx(View, {
289
- pointerEvents: "box-none",
290
- style: [StyleSheet.absoluteFill, {
291
- zIndex
292
- }],
293
- children: /*#__PURE__*/_jsx(Comp, {
294
- ...mergedProps,
295
- onClose: onClose,
296
- onMinimize: onMinimize,
297
- minimizeTargetPosition: minimizeTargetPosition,
298
- initialModalState: app.restoreState,
299
- instanceId: app.instanceId
300
- })
301
- });
302
- }
303
-
304
- // host-modal mode
305
- return /*#__PURE__*/_jsx(Modal, {
306
- visible: isVisible,
307
- transparent: true,
308
- animationType: "slide",
309
- onRequestClose: onClose,
310
- children: /*#__PURE__*/_jsx(View, {
311
- style: styles.backdrop,
312
- children: /*#__PURE__*/_jsx(View, {
313
- style: styles.card,
314
- children: /*#__PURE__*/_jsx(Comp, {
315
- ...mergedProps,
316
- onClose: onClose,
317
- onMinimize: onMinimize,
318
- minimizeTargetPosition: minimizeTargetPosition,
319
- initialModalState: app.restoreState,
320
- instanceId: app.instanceId
321
- })
322
- })
323
- })
324
- });
325
- };
326
-
327
- /**
328
- * Renders all dev tool surfaces. Keeps minimized apps mounted but hidden
329
- * so their state and listeners are preserved (similar to React Navigation screens).
330
- *
331
- * Supports multiple simultaneous modals - each modal gets a z-index based on
332
- * its position in the stack (later opened modals appear on top).
333
- */
334
- export const AppOverlay = () => {
335
- const {
336
- openApps,
337
- close,
338
- minimize
339
- } = useAppHost();
340
- const {
341
- minimize: addToMinimizedStack,
342
- restore: removeFromMinimizedStack,
343
- getNextIconPosition,
344
- minimizedTools
345
- } = useMinimizedTools();
346
- const {
347
- settings
348
- } = useDevToolsSettings();
349
-
350
- // Sync expandable window controls setting to WindowControls module
351
- useEffect(() => {
352
- // Default to true (expandable ON) when setting is undefined
353
- setExpandableWindowControls(settings.globalSettings?.expandableWindowControls !== false);
354
- }, [settings.globalSettings?.expandableWindowControls]);
355
-
356
- // Sync restored minimized apps to MinimizedToolsContext
357
- // This handles apps that were restored from persistence with minimized=true
358
- React.useEffect(() => {
359
- openApps.forEach(app => {
360
- if (app.minimized && app.launchMode !== "toggle-only") {
361
- // Check if this app is already in the minimized stack
362
- const isInStack = minimizedTools.some(t => t.instanceId === app.instanceId);
363
- if (!isInStack) {
364
- // Add to minimized stack (restored from persistence)
365
- addToMinimizedStack({
366
- instanceId: app.instanceId,
367
- id: app.id,
368
- title: app.title || app.id,
369
- icon: app.icon,
370
- color: app.color
371
- });
372
- }
373
- }
374
- });
375
-
376
- // ...and take out anything the rail is still showing that is no longer
377
- // minimized, or no longer open at all.
378
- //
379
- // WHY THIS HALF EXISTS. `openApps` and the rail are two separate stores
380
- // for one fact, and only the ADD side was reliable. Minimizing goes
381
- // through an event handler; un-minimizing happens inside `open`, which
382
- // schedules the rail removal with a `setTimeout` from INSIDE a
383
- // `setOpenApps` updater. Updaters are not a safe place for side effects —
384
- // React may double-invoke or discard them — so the removal could be
385
- // skipped while `minimized: false` still landed. The rail then kept an
386
- // icon for an already-open tool, and tapping it did nothing except delete
387
- // the icon: the tool looked like it vanished, with no way back to it, and
388
- // both stores are persisted so it survived every reload.
389
- //
390
- // Reconciling here makes the rail eventually consistent with `openApps`
391
- // whichever way the state moved, without moving the side effect.
392
- minimizedTools.forEach(tool => {
393
- const app = openApps.find(a => a.instanceId === tool.instanceId);
394
- if (!app || !app.minimized) {
395
- removeFromMinimizedStack(tool.instanceId);
396
- }
397
- });
398
- }, [openApps, minimizedTools, addToMinimizedStack, removeFromMinimizedStack]);
399
-
400
- // Filter to renderable apps (exclude toggle-only)
401
- const renderableApps = openApps.filter(app => app.launchMode !== "toggle-only");
402
- if (renderableApps.length === 0) return null;
403
-
404
- // Base z-index for modals - each subsequent modal gets +1
405
- const BASE_ZINDEX = 9000;
406
- return /*#__PURE__*/_jsx(_Fragment, {
407
- children: renderableApps.map((app, index) => {
408
- // z-index based on position - later in array = higher z-index (on top)
409
- const zIndex = BASE_ZINDEX + index;
410
- const minimizeTargetPosition = getNextIconPosition();
411
- const handleMinimize = modalState => {
412
- // IMPORTANT: Order matters here!
413
- // 1. First mark the app as minimized in AppHost - this updates isAnyOpen
414
- // so that pushToSide becomes false before the icon component mounts
415
- minimize(app.instanceId);
416
- // 2. Then add to the minimized stack - this triggers the icon to mount
417
- // By now isAnyOpen is false, so the icon mounts with pushToSide=false
418
- addToMinimizedStack({
419
- instanceId: app.instanceId,
420
- id: app.id,
421
- title: app.title || app.id,
422
- icon: app.icon,
423
- color: app.color,
424
- modalState: modalState
425
- });
426
- };
427
- return /*#__PURE__*/_jsx(AppRenderer, {
428
- app: app,
429
- zIndex: zIndex,
430
- onClose: () => close(app.instanceId),
431
- onMinimize: handleMinimize,
432
- minimizeTargetPosition: minimizeTargetPosition,
433
- globalEnableSharedModalDimensions: settings.globalSettings?.enableSharedModalDimensions
434
- }, app.instanceId);
435
- })
436
- });
437
- };
438
- const styles = StyleSheet.create({
439
- backdrop: {
440
- flex: 1,
441
- backgroundColor: "rgba(0,0,0,0.28)",
442
- alignItems: "center",
443
- justifyContent: "center"
444
- },
445
- card: {
446
- maxHeight: "90%",
447
- width: "94%",
448
- borderRadius: 12,
449
- backgroundColor: "white",
450
- overflow: "hidden"
451
- }
452
- });
1
+ "use strict";import{persistentStorage as T,setExpandableWindowControls as F}from"@buoy-gg/shared-ui";import R,{createContext as H,useCallback as z,useContext as j,useMemo as B,useState as C,useEffect as y,useRef as v}from"react";import{BackHandler as W,Modal as $,StyleSheet as P,View as x}from"react-native";import{resolveOpenAppsState as q}from"./AppHostLogic.js";import{renderAppIcon as J}from"./AppIcon";import{useMinimizedTools as _}from"./MinimizedToolsContext.js";import{ToolModalShell as L}from"./ToolHost.js";import{useDevToolsSettings as V}from"./DevToolsSettingsModal";import{jsx as m,Fragment as Y}from"react/jsx-runtime";const k=H(null);const w="@react_buoy_open_apps";const G=500;export const AppHostProvider=({children:n})=>{const[s,l]=C([]);const[c,u]=C(false);const f=v(null);const a=v([]);const d=v(null);const{restore:g}=_();const M=z(t=>{let i="";l(r=>{const{apps:o,instanceId:S,wasMinimized:N}=q(r,t,()=>`${t.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);i=S;if(N){setTimeout(()=>g(S),0)}return o});return i},[g]);const e=z(()=>{if(c)return;if(!a.current.length)return;const t=d.current;if(!t||t.length===0){u(true);return}d.current=null;t.forEach(({id:i,minimized:r})=>{const o=a.current.find(S=>S.id===i);if(o){const S=J(o.icon,{slot:"dial",size:20,color:o.color});M({id:o.id,title:o.name,component:o.component,props:o.props,launchMode:o.launchMode||"self-modal",singleton:o.singleton,icon:S,color:o.color,modal:o.modal,minimized:r})}});u(true)},[c,M]);y(()=>{const t=async()=>{try{const i=await T.getItem(w);if(i){const r=JSON.parse(i);let o;if(Array.isArray(r)&&r.length>0){if(typeof r[0]==="string"){o=r.map(S=>({id:S,minimized:false}))}else{o=r}if(o.length){d.current=o;e();return}}}}catch(i){}u(true)};t()},[e]);y(()=>{if(!c)return;if(f.current){clearTimeout(f.current)}f.current=setTimeout(()=>{const t=s.map(i=>({id:i.id,minimized:i.minimized??false}));T.setItem(w,JSON.stringify(t))},G);return()=>{if(f.current){clearTimeout(f.current)}}},[s,c]);const I=z(t=>{a.current=t;e()},[e]);const h=z(t=>{l(i=>{if(!i.length)return i;if(!t)return i.slice(0,-1);return i.filter(r=>r.instanceId!==t)})},[]);const p=z(()=>l([]),[]);const A=z(t=>{l(i=>i.map(r=>r.instanceId===t?{...r,minimized:true}:r))},[]);const b=z((t,i)=>{l(r=>r.map(o=>o.instanceId===t?{...o,minimized:false,restoreState:i}:o))},[]);const E=z(t=>{const i=s.find(r=>r.instanceId===t);return i?.minimized??false},[s]);R.useEffect(()=>{if(s.length===0)return;const t=()=>{h();return true};const i=W.addEventListener("hardwareBackPress",t);return()=>i.remove()},[s.length,h]);const D=B(()=>({openApps:s,isAnyOpen:s.filter(t=>t.launchMode!=="toggle-only"&&!t.minimized).length>0,open:M,close:h,closeAll:p,registerApps:I,minimize:A,restore:b,isMinimized:E}),[s,M,h,p,I,A,b,E]);return m(k.Provider,{value:D,children:n})};export const useAppHost=()=>{const n=j(k);if(!n){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},minimize:()=>{},restore:(s,l)=>{},isMinimized:()=>false}}return n};const K=({app:n,zIndex:s,onClose:l,onMinimize:c,minimizeTargetPosition:u,globalEnableSharedModalDimensions:f})=>{const a=n.component;const d=!n.minimized;const g={...n.props??{},...f===true?{enableSharedModalDimensions:true}:{}};if(n.modal&&(n.launchMode==="self-modal"||!n.launchMode)){return m(L,{app:n,config:n.modal,visible:d,zIndex:s,onClose:l,onMinimize:c,initialModalState:n.restoreState,enableSharedModalDimensions:f===true,bodyProps:g})}if(n.launchMode==="self-modal"){return m(a,{...g,visible:d,onClose:l,onRequestClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:n.restoreState,instanceId:n.instanceId,zIndex:s})}if(n.launchMode==="inline"){if(!d)return null;return m(x,{pointerEvents:"box-none",style:[P.absoluteFill,{zIndex:s}],children:m(a,{...g,onClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:n.restoreState,instanceId:n.instanceId})})}return m($,{visible:d,transparent:true,animationType:"slide",onRequestClose:l,children:m(x,{style:O.backdrop,children:m(x,{style:O.card,children:m(a,{...g,onClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:n.restoreState,instanceId:n.instanceId})})})})};export const AppOverlay=()=>{const{openApps:n,close:s,minimize:l}=useAppHost();const{minimize:c,restore:u,getNextIconPosition:f,minimizedTools:a}=_();const{settings:d}=V();y(()=>{F(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);R.useEffect(()=>{n.forEach(e=>{if(e.minimized&&e.launchMode!=="toggle-only"){const I=a.some(h=>h.instanceId===e.instanceId);if(!I){c({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color})}}});a.forEach(e=>{const I=n.find(h=>h.instanceId===e.instanceId);if(!I||!I.minimized){u(e.instanceId)}})},[n,a,c,u]);const g=n.filter(e=>e.launchMode!=="toggle-only");if(g.length===0)return null;const M=9e3;return m(Y,{children:g.map((e,I)=>{const h=M+I;const p=f();const A=b=>{l(e.instanceId);c({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color,modalState:b})};return m(K,{app:e,zIndex:h,onClose:()=>s(e.instanceId),onMinimize:A,minimizeTargetPosition:p,globalEnableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions},e.instanceId)})})};const O=P.create({backdrop:{flex:1,backgroundColor:"rgba(0,0,0,0.28)",alignItems:"center",justifyContent:"center"},card:{maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"}});