@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,90 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * DialSnow — pale particles drifting down inside the open dial's face, built
5
- * from the shared background primitives (packages/shared/src/ui/backgrounds).
6
- *
7
- * Same performance contract as the backgrounds: the loop is native-driven
8
- * (useLoop hands the whole animation to the UI thread once — zero JS work per
9
- * frame), the flakes are one rasterized texture, and the scatter table is
10
- * generated at module load. Cost while the dial is open: 1 animated node and
11
- * ~24 static views, mounted only for the dial's lifetime.
12
- *
13
- * Rendered inside the circle's `overflow: "hidden"` background. The dial is
14
- * fixed-size (never user-resized), so sizing geometry from the passed circle
15
- * size is correct here.
16
- */
17
-
18
- import { memo } from "react";
19
- import { Animated, View } from "react-native";
20
- import { RasterLayer, scatter, useLoop, withBgAlpha } from "@buoy-gg/shared-ui";
21
-
22
- /** Pale mint-ice flake tint — sits quietly on the dial's dark face. */
23
- import { jsx as _jsx } from "react/jsx-runtime";
24
- const SNOW_COLOR = "#A8E0D2";
25
-
26
- /** Stride 3: x, y, size — fixed seed so the flurry is identical every open. */
27
- const SNOW_COUNT = 12;
28
- const SNOW_TABLE = scatter(0x5ea1, SNOW_COUNT * 3);
29
-
30
- /**
31
- * The two-copy tiling trick from the backdrops: everything drawn twice one
32
- * height apart, translated a full height per loop, so the seam never shows.
33
- * Sway is keyframed onto the SAME loop value.
34
- */
35
- export const DialSnow = /*#__PURE__*/memo(function DialSnow({
36
- size
37
- }) {
38
- const t = useLoop(26000);
39
- const translateY = t.interpolate({
40
- inputRange: [0, 1],
41
- outputRange: [0, size]
42
- });
43
- const translateX = t.interpolate({
44
- inputRange: [0, 0.25, 0.5, 0.75, 1],
45
- outputRange: [0, 5, 0, -5, 0]
46
- });
47
- const flakes = [];
48
- for (let i = 0; i < SNOW_COUNT; i++) {
49
- const x = SNOW_TABLE[i * 3] * size;
50
- const y = SNOW_TABLE[i * 3 + 1] * size;
51
- // Bigger flakes read nearer, so they get more alpha too.
52
- const dia = 1.4 + SNOW_TABLE[i * 3 + 2] * 1.2;
53
- const alpha = 0.28 + SNOW_TABLE[i * 3 + 2] * 0.18;
54
- for (let copy = 0; copy < 2; copy++) {
55
- flakes.push(/*#__PURE__*/_jsx(View, {
56
- style: {
57
- position: "absolute",
58
- left: x - dia / 2,
59
- top: y + copy * size - dia / 2,
60
- width: dia,
61
- height: dia,
62
- borderRadius: dia / 2,
63
- backgroundColor: withBgAlpha(SNOW_COLOR, alpha)
64
- }
65
- }, `${i}-${copy}`));
66
- }
67
- }
68
- return /*#__PURE__*/_jsx(Animated.View, {
69
- style: {
70
- position: "absolute",
71
- left: 0,
72
- top: -size,
73
- width: size,
74
- height: size * 2,
75
- transform: [{
76
- translateY
77
- }, {
78
- translateX
79
- }]
80
- },
81
- pointerEvents: "none",
82
- children: /*#__PURE__*/_jsx(RasterLayer, {
83
- style: {
84
- width: size,
85
- height: size * 2
86
- },
87
- children: flakes
88
- })
89
- });
90
- });
1
+ "use strict";import{memo as f}from"react";import{Animated as d,View as g}from"react-native";import{RasterLayer as w,scatter as R,useLoop as y,withBgAlpha as O}from"@buoy-gg/shared-ui";import{jsx as a}from"react/jsx-runtime";const x="#A8E0D2";const l=12;const r=R(24225,l*3);export const DialSnow=f(function S({size:t}){const s=y(26e3);const p=s.interpolate({inputRange:[0,1],outputRange:[0,t]});const c=s.interpolate({inputRange:[0,.25,.5,.75,1],outputRange:[0,5,0,-5,0]});const i=[];for(let o=0;o<l;o++){const h=r[o*3]*t;const u=r[o*3+1]*t;const n=1.4+r[o*3+2]*1.2;const m=.28+r[o*3+2]*.18;for(let e=0;e<2;e++){i.push(a(g,{style:{position:"absolute",left:h-n/2,top:u+e*t-n/2,width:n,height:n,borderRadius:n/2,backgroundColor:O(x,m)}},`${o}-${e}`))}}return a(d.View,{style:{position:"absolute",left:0,top:-t,width:t,height:t*2,transform:[{translateY:p},{translateX:c}]},pointerEvents:"none",children:a(w,{style:{width:t,height:t*2},children:i})})});
@@ -1,240 +1 @@
1
- "use strict";
2
-
3
- import { useEffect, useRef } from "react";
4
- import { Animated, Pressable, StyleSheet, Text, View, Easing } from "react-native";
5
- import { absoluteFill, monoFont } from "@buoy-gg/shared-ui";
6
- // dialColors comes from floating-tools-core — the shared-ui export of the same
7
- // name is a stale legacy copy and must not be used here.
8
- import { dialColors } from "@buoy-gg/floating-tools-core";
9
- import { calculateTooltipPosition, ARROW_BOTTOM_OFFSET, ARROW_HEIGHT } from "./onboardingConstants";
10
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
- export const OnboardingTooltip = ({
12
- visible,
13
- onDismiss,
14
- title = "Welcome to Buoy!",
15
- message = "Tap the center button to configure and add tools to your dial menu."
16
- }) => {
17
- const fadeAnim = useRef(new Animated.Value(0)).current;
18
- const scaleAnim = useRef(new Animated.Value(0.8)).current;
19
- const pulseAnim = useRef(new Animated.Value(1)).current;
20
- const arrowBounceAnim = useRef(new Animated.Value(0)).current;
21
- useEffect(() => {
22
- if (visible) {
23
- // Entrance animation
24
- Animated.parallel([Animated.timing(fadeAnim, {
25
- toValue: 1,
26
- duration: 300,
27
- easing: Easing.out(Easing.ease),
28
- useNativeDriver: true
29
- }), Animated.spring(scaleAnim, {
30
- toValue: 1,
31
- damping: 12,
32
- stiffness: 150,
33
- useNativeDriver: true
34
- })]).start();
35
-
36
- // Continuous pulse animation for the tooltip
37
- Animated.loop(Animated.sequence([Animated.timing(pulseAnim, {
38
- toValue: 1.02,
39
- duration: 1500,
40
- easing: Easing.inOut(Easing.ease),
41
- useNativeDriver: true
42
- }), Animated.timing(pulseAnim, {
43
- toValue: 1,
44
- duration: 1500,
45
- easing: Easing.inOut(Easing.ease),
46
- useNativeDriver: true
47
- })])).start();
48
-
49
- // Bouncing arrow animation
50
- Animated.loop(Animated.sequence([Animated.timing(arrowBounceAnim, {
51
- toValue: -8,
52
- duration: 800,
53
- easing: Easing.inOut(Easing.ease),
54
- useNativeDriver: true
55
- }), Animated.timing(arrowBounceAnim, {
56
- toValue: 0,
57
- duration: 800,
58
- easing: Easing.inOut(Easing.ease),
59
- useNativeDriver: true
60
- })])).start();
61
- } else {
62
- // Exit animation
63
- Animated.parallel([Animated.timing(fadeAnim, {
64
- toValue: 0,
65
- duration: 200,
66
- easing: Easing.in(Easing.ease),
67
- useNativeDriver: true
68
- }), Animated.timing(scaleAnim, {
69
- toValue: 0.8,
70
- duration: 200,
71
- easing: Easing.in(Easing.ease),
72
- useNativeDriver: true
73
- })]).start();
74
- }
75
- }, [visible]);
76
- if (!visible) {
77
- return null;
78
- }
79
- return /*#__PURE__*/_jsx(Animated.View, {
80
- style: [styles.container, {
81
- opacity: fadeAnim,
82
- transform: [{
83
- scale: scaleAnim
84
- }]
85
- }],
86
- pointerEvents: "box-none",
87
- children: /*#__PURE__*/_jsx(Animated.View, {
88
- style: [styles.tooltipContainer, {
89
- transform: [{
90
- scale: pulseAnim
91
- }]
92
- }],
93
- children: /*#__PURE__*/_jsxs(View, {
94
- style: styles.tooltip,
95
- children: [/*#__PURE__*/_jsx(View, {
96
- style: styles.glowEffect
97
- }), /*#__PURE__*/_jsxs(View, {
98
- style: styles.content,
99
- children: [/*#__PURE__*/_jsx(Text, {
100
- style: styles.title,
101
- children: title
102
- }), /*#__PURE__*/_jsx(Text, {
103
- style: styles.message,
104
- children: message
105
- }), /*#__PURE__*/_jsx(Pressable, {
106
- onPress: onDismiss,
107
- style: ({
108
- pressed
109
- }) => [styles.button, pressed && styles.buttonPressed],
110
- children: /*#__PURE__*/_jsx(View, {
111
- style: styles.buttonGradient,
112
- children: /*#__PURE__*/_jsx(Text, {
113
- style: styles.buttonText,
114
- children: "Got it!"
115
- })
116
- })
117
- })]
118
- }), /*#__PURE__*/_jsx(Animated.View, {
119
- style: [styles.arrowContainer, {
120
- transform: [{
121
- translateY: arrowBounceAnim
122
- }]
123
- }],
124
- children: /*#__PURE__*/_jsx(View, {
125
- style: styles.arrow
126
- })
127
- })]
128
- })
129
- })
130
- });
131
- };
132
- const styles = StyleSheet.create({
133
- container: {
134
- ...absoluteFill,
135
- alignItems: "center",
136
- justifyContent: "center",
137
- pointerEvents: "box-none"
138
- },
139
- tooltipContainer: {
140
- position: "absolute",
141
- bottom: calculateTooltipPosition(),
142
- alignItems: "center",
143
- maxWidth: 280
144
- },
145
- tooltip: {
146
- backgroundColor: dialColors.dialBackground,
147
- borderRadius: 16,
148
- borderWidth: 1,
149
- borderColor: dialColors.dialBorder,
150
- padding: 20,
151
- shadowColor: dialColors.dialShadow,
152
- shadowOffset: {
153
- width: 0,
154
- height: 0
155
- },
156
- shadowOpacity: 0.6,
157
- shadowRadius: 20,
158
- elevation: 10
159
- },
160
- glowEffect: {
161
- position: "absolute",
162
- top: -4,
163
- left: -4,
164
- right: -4,
165
- bottom: -4,
166
- borderRadius: 18,
167
- backgroundColor: "#FFFFFF",
168
- opacity: 0.06
169
- },
170
- content: {
171
- alignItems: "center",
172
- gap: 12
173
- },
174
- title: {
175
- color: dialColors.accent,
176
- fontSize: 16,
177
- fontWeight: "900",
178
- fontFamily: monoFont,
179
- letterSpacing: 1,
180
- textAlign: "center",
181
- textTransform: "uppercase"
182
- },
183
- message: {
184
- color: dialColors.centerText,
185
- fontSize: 13,
186
- lineHeight: 20,
187
- textAlign: "center",
188
- fontFamily: monoFont
189
- },
190
- button: {
191
- marginTop: 8,
192
- borderRadius: 8,
193
- overflow: "hidden"
194
- },
195
- buttonPressed: {
196
- opacity: 0.7,
197
- transform: [{
198
- scale: 0.96
199
- }]
200
- },
201
- // Night primary button — accent fill takes dark ink.
202
- buttonGradient: {
203
- backgroundColor: dialColors.accent,
204
- paddingHorizontal: 24,
205
- paddingVertical: 10,
206
- alignItems: "center"
207
- },
208
- buttonText: {
209
- color: "#000000",
210
- fontSize: 14,
211
- fontWeight: "900",
212
- fontFamily: monoFont,
213
- letterSpacing: 1.5,
214
- textTransform: "uppercase"
215
- },
216
- arrowContainer: {
217
- position: "absolute",
218
- bottom: ARROW_BOTTOM_OFFSET,
219
- left: 0,
220
- right: 0,
221
- alignItems: "center"
222
- },
223
- arrow: {
224
- width: 0,
225
- height: 0,
226
- borderLeftWidth: 12,
227
- borderRightWidth: 12,
228
- borderTopWidth: ARROW_HEIGHT,
229
- borderLeftColor: "transparent",
230
- borderRightColor: "transparent",
231
- borderTopColor: dialColors.accent,
232
- shadowColor: dialColors.dialShadow,
233
- shadowOffset: {
234
- width: 0,
235
- height: 0
236
- },
237
- shadowOpacity: 0.5,
238
- shadowRadius: 10
239
- }
240
- });
1
+ "use strict";import{useEffect as y,useRef as a}from"react";import{Animated as e,Pressable as v,StyleSheet as V,Text as g,View as i,Easing as t}from"react-native";import{absoluteFill as x,monoFont as m}from"@buoy-gg/shared-ui";import{dialColors as n}from"@buoy-gg/floating-tools-core";import{calculateTooltipPosition as T,ARROW_BOTTOM_OFFSET as C,ARROW_HEIGHT as O}from"./onboardingConstants";import{jsx as r,jsxs as p}from"react/jsx-runtime";export const OnboardingTooltip=({visible:s,onDismiss:h,title:f="Welcome to Buoy!",message:b="Tap the center button to configure and add tools to your dial menu."})=>{const l=a(new e.Value(0)).current;const u=a(new e.Value(.8)).current;const d=a(new e.Value(1)).current;const c=a(new e.Value(0)).current;y(()=>{if(s){e.parallel([e.timing(l,{toValue:1,duration:300,easing:t.out(t.ease),useNativeDriver:true}),e.spring(u,{toValue:1,damping:12,stiffness:150,useNativeDriver:true})]).start();e.loop(e.sequence([e.timing(d,{toValue:1.02,duration:1500,easing:t.inOut(t.ease),useNativeDriver:true}),e.timing(d,{toValue:1,duration:1500,easing:t.inOut(t.ease),useNativeDriver:true})])).start();e.loop(e.sequence([e.timing(c,{toValue:-8,duration:800,easing:t.inOut(t.ease),useNativeDriver:true}),e.timing(c,{toValue:0,duration:800,easing:t.inOut(t.ease),useNativeDriver:true})])).start()}else{e.parallel([e.timing(l,{toValue:0,duration:200,easing:t.in(t.ease),useNativeDriver:true}),e.timing(u,{toValue:.8,duration:200,easing:t.in(t.ease),useNativeDriver:true})]).start()}},[s]);if(!s){return null}return r(e.View,{style:[o.container,{opacity:l,transform:[{scale:u}]}],pointerEvents:"box-none",children:r(e.View,{style:[o.tooltipContainer,{transform:[{scale:d}]}],children:p(i,{style:o.tooltip,children:[r(i,{style:o.glowEffect}),p(i,{style:o.content,children:[r(g,{style:o.title,children:f}),r(g,{style:o.message,children:b}),r(v,{onPress:h,style:({pressed:w})=>[o.button,w&&o.buttonPressed],children:r(i,{style:o.buttonGradient,children:r(g,{style:o.buttonText,children:"Got it!"})})})]}),r(e.View,{style:[o.arrowContainer,{transform:[{translateY:c}]}],children:r(i,{style:o.arrow})})]})})})};const o=V.create({container:{...x,alignItems:"center",justifyContent:"center",pointerEvents:"box-none"},tooltipContainer:{position:"absolute",bottom:T(),alignItems:"center",maxWidth:280},tooltip:{backgroundColor:n.dialBackground,borderRadius:16,borderWidth:1,borderColor:n.dialBorder,padding:20,shadowColor:n.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:20,elevation:10},glowEffect:{position:"absolute",top:-4,left:-4,right:-4,bottom:-4,borderRadius:18,backgroundColor:"#FFFFFF",opacity:.06},content:{alignItems:"center",gap:12},title:{color:n.accent,fontSize:16,fontWeight:"900",fontFamily:m,letterSpacing:1,textAlign:"center",textTransform:"uppercase"},message:{color:n.centerText,fontSize:13,lineHeight:20,textAlign:"center",fontFamily:m},button:{marginTop:8,borderRadius:8,overflow:"hidden"},buttonPressed:{opacity:.7,transform:[{scale:.96}]},buttonGradient:{backgroundColor:n.accent,paddingHorizontal:24,paddingVertical:10,alignItems:"center"},buttonText:{color:"#000000",fontSize:14,fontWeight:"900",fontFamily:m,letterSpacing:1.5,textTransform:"uppercase"},arrowContainer:{position:"absolute",bottom:C,left:0,right:0,alignItems:"center"},arrow:{width:0,height:0,borderLeftWidth:12,borderRightWidth:12,borderTopWidth:O,borderLeftColor:"transparent",borderRightColor:"transparent",borderTopColor:n.accent,shadowColor:n.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.5,shadowRadius:10}});
@@ -1,21 +1,4 @@
1
- "use strict";
2
-
3
- /**
4
- * OnboardingTooltip — Web twin of OnboardingTooltip.tsx.
5
- * Centered glowing card with a down-pointing arrow, pulse loop, bouncing
6
- * arrow, and a "Got it!" button. Rendered over a dark backdrop by callers.
7
- * All values annotated with the native tokens they mirror.
8
- */
9
- import { useEffect, useState } from 'react';
10
- import { dialColors, withAlpha } from '@buoy-gg/floating-tools-react';
11
- import { ARROW_BOTTOM_OFFSET, ARROW_HEIGHT, calculateTooltipPosition } from "./onboardingConstants.web.js";
12
- import { monoFont } from "@buoy-gg/shared-ui";
13
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- let onboardingKeyframesInjected = false;
15
- function injectOnboardingKeyframes() {
16
- if (onboardingKeyframesInjected || typeof document === 'undefined') return;
17
- const style = document.createElement('style');
18
- style.textContent = `
1
+ "use strict";import{useEffect as g,useState as l}from"react";import{dialColors as e,withAlpha as d}from"@buoy-gg/floating-tools-react";import{ARROW_BOTTOM_OFFSET as h,ARROW_HEIGHT as F,calculateTooltipPosition as O}from"./onboardingConstants.web.js";import{monoFont as c}from"@buoy-gg/shared-ui";import{jsx as t,jsxs as p}from"react/jsx-runtime";let f=false;function A(){if(f||typeof document==="undefined")return;const o=document.createElement("style");o.textContent=`
19
2
  @keyframes buoyOnboardPulse {
20
3
  0%, 100% { transform: scale(1); }
21
4
  50% { transform: scale(1.02); }
@@ -24,127 +7,4 @@ function injectOnboardingKeyframes() {
24
7
  0%, 100% { transform: translateY(0); }
25
8
  50% { transform: translateY(-8px); }
26
9
  }
27
- `;
28
- document.head.appendChild(style);
29
- onboardingKeyframesInjected = true;
30
- }
31
-
32
- // The single brand accent (night accent, #20C997)
33
- const PRIMARY = dialColors.accent;
34
- export function OnboardingTooltip({
35
- title,
36
- message,
37
- onDismiss,
38
- showArrow = true
39
- }) {
40
- const [entered, setEntered] = useState(false);
41
- const [buttonPressed, setButtonPressed] = useState(false);
42
- useEffect(() => {
43
- injectOnboardingKeyframes();
44
- const raf = requestAnimationFrame(() => setEntered(true));
45
- return () => cancelAnimationFrame(raf);
46
- }, []);
47
- const monoLabel = {
48
- fontFamily: monoFont,
49
- textTransform: 'uppercase'
50
- };
51
- return /*#__PURE__*/_jsx("div", {
52
- style: {
53
- position: 'fixed',
54
- left: '50%',
55
- bottom: calculateTooltipPosition(),
56
- transform: `translateX(-50%) scale(${entered ? 1 : 0.8})`,
57
- opacity: entered ? 1 : 0,
58
- // native: fade 300ms + spring scale .8→1
59
- transition: 'transform 300ms cubic-bezier(0.34, 1.3, 0.64, 1), opacity 300ms ease',
60
- zIndex: 10002,
61
- pointerEvents: 'auto'
62
- },
63
- children: /*#__PURE__*/_jsxs("div", {
64
- style: {
65
- position: 'relative',
66
- animation: entered ? 'buoyOnboardPulse 3s ease-in-out infinite' : 'none'
67
- },
68
- children: [/*#__PURE__*/_jsx("div", {
69
- style: {
70
- position: 'absolute',
71
- inset: -4,
72
- borderRadius: 18,
73
- backgroundColor: '#FFFFFF',
74
- opacity: 0.06
75
- }
76
- }), /*#__PURE__*/_jsxs("div", {
77
- style: {
78
- position: 'relative',
79
- maxWidth: 280,
80
- backgroundColor: dialColors.dialBackground,
81
- borderRadius: 16,
82
- border: `1px solid ${dialColors.dialBorder}`,
83
- padding: 20,
84
- boxShadow: `0 0 20px ${withAlpha(dialColors.dialShadow, 0.6)}`,
85
- display: 'flex',
86
- flexDirection: 'column',
87
- alignItems: 'center',
88
- gap: 8
89
- },
90
- children: [/*#__PURE__*/_jsx("span", {
91
- style: {
92
- ...monoLabel,
93
- fontSize: 16,
94
- fontWeight: 900,
95
- letterSpacing: 1,
96
- color: PRIMARY,
97
- textAlign: 'center'
98
- },
99
- children: title
100
- }), /*#__PURE__*/_jsx("span", {
101
- style: {
102
- fontFamily: monoFont,
103
- fontSize: 13,
104
- lineHeight: '20px',
105
- color: dialColors.centerText,
106
- textAlign: 'center'
107
- },
108
- children: message
109
- }), /*#__PURE__*/_jsx("button", {
110
- onClick: onDismiss,
111
- onMouseDown: () => setButtonPressed(true),
112
- onMouseUp: () => setButtonPressed(false),
113
- onMouseLeave: () => setButtonPressed(false),
114
- style: {
115
- ...monoLabel,
116
- marginTop: 8,
117
- borderRadius: 8,
118
- // night primary button — accent fill takes dark ink
119
- border: 'none',
120
- backgroundColor: PRIMARY,
121
- padding: '10px 24px',
122
- fontSize: 14,
123
- fontWeight: 900,
124
- letterSpacing: 1.5,
125
- color: '#000000',
126
- cursor: 'pointer',
127
- opacity: buttonPressed ? 0.7 : 1,
128
- transform: buttonPressed ? 'scale(0.96)' : 'scale(1)',
129
- transition: 'transform 100ms ease, opacity 100ms ease'
130
- },
131
- children: "Got it!"
132
- })]
133
- }), showArrow && /*#__PURE__*/_jsx("div", {
134
- style: {
135
- position: 'absolute',
136
- left: '50%',
137
- bottom: ARROW_BOTTOM_OFFSET,
138
- marginLeft: -12,
139
- width: 0,
140
- height: 0,
141
- borderLeft: '12px solid transparent',
142
- borderRight: '12px solid transparent',
143
- borderTop: `${ARROW_HEIGHT}px solid ${PRIMARY}`,
144
- filter: `drop-shadow(0 0 10px ${withAlpha(dialColors.dialShadow, 0.5)})`,
145
- animation: entered ? 'buoyOnboardArrowBounce 1.6s ease-in-out infinite' : 'none'
146
- }
147
- })]
148
- })
149
- });
150
- }
10
+ `;document.head.appendChild(o);f=true}const i=e.accent;export function OnboardingTooltip({title:o,message:m,onDismiss:u,showArrow:b=true}){const[n,y]=l(false);const[a,r]=l(false);g(()=>{A();const x=requestAnimationFrame(()=>y(true));return()=>cancelAnimationFrame(x)},[]);const s={fontFamily:c,textTransform:"uppercase"};return t("div",{style:{position:"fixed",left:"50%",bottom:O(),transform:`translateX(-50%) scale(${n?1:.8})`,opacity:n?1:0,transition:"transform 300ms cubic-bezier(0.34, 1.3, 0.64, 1), opacity 300ms ease",zIndex:10002,pointerEvents:"auto"},children:p("div",{style:{position:"relative",animation:n?"buoyOnboardPulse 3s ease-in-out infinite":"none"},children:[t("div",{style:{position:"absolute",inset:-4,borderRadius:18,backgroundColor:"#FFFFFF",opacity:.06}}),p("div",{style:{position:"relative",maxWidth:280,backgroundColor:e.dialBackground,borderRadius:16,border:`1px solid ${e.dialBorder}`,padding:20,boxShadow:`0 0 20px ${d(e.dialShadow,.6)}`,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[t("span",{style:{...s,fontSize:16,fontWeight:900,letterSpacing:1,color:i,textAlign:"center"},children:o}),t("span",{style:{fontFamily:c,fontSize:13,lineHeight:"20px",color:e.centerText,textAlign:"center"},children:m}),t("button",{onClick:u,onMouseDown:()=>r(true),onMouseUp:()=>r(false),onMouseLeave:()=>r(false),style:{...s,marginTop:8,borderRadius:8,border:"none",backgroundColor:i,padding:"10px 24px",fontSize:14,fontWeight:900,letterSpacing:1.5,color:"#000000",cursor:"pointer",opacity:a?.7:1,transform:a?"scale(0.96)":"scale(1)",transition:"transform 100ms ease, opacity 100ms ease"},children:"Got it!"})]}),b&&t("div",{style:{position:"absolute",left:"50%",bottom:h,marginLeft:-12,width:0,height:0,borderLeft:"12px solid transparent",borderRight:"12px solid transparent",borderTop:`${F}px solid ${i}`,filter:`drop-shadow(0 0 10px ${d(e.dialShadow,.5)})`,animation:n?"buoyOnboardArrowBounce 1.6s ease-in-out infinite":"none"}})]})})}
@@ -1,85 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * Persists dial usage and orders tools by their last launch.
5
- * The cache loads on import so opening the dial can rank tools synchronously.
6
- */
7
-
8
- import { persistentStorage, devToolsStorageKeys } from "@buoy-gg/shared-ui";
9
- import { recordUsage, pruneUsage } from "@buoy-gg/floating-tools-core";
10
- const STORAGE_KEY = devToolsStorageKeys.dial.usage();
11
- let cache = {};
12
- let loaded = false;
13
- let loadPromise = null;
14
-
15
- /**
16
- * Load persisted usage data into the in-memory cache. Safe to call multiple
17
- * times — the underlying read happens only once.
18
- */
19
- export function loadDialUsage() {
20
- if (loadPromise) return loadPromise;
21
- loadPromise = (async () => {
22
- try {
23
- const raw = await persistentStorage.getItem(STORAGE_KEY);
24
- if (raw) {
25
- const parsed = JSON.parse(raw);
26
- if (parsed && typeof parsed === "object") {
27
- cache = parsed;
28
- }
29
- }
30
- } catch {
31
- // Ignore — start with an empty usage map.
32
- } finally {
33
- loaded = true;
34
- }
35
- })();
36
- return loadPromise;
37
- }
38
-
39
- // Kick off the load as soon as this module is imported.
40
- void loadDialUsage();
41
-
42
- /** Whether the usage cache has finished loading from storage. */
43
- export function isDialUsageLoaded() {
44
- return loaded;
45
- }
46
-
47
- /** Most recently opened first; unused tools keep registration order. */
48
- export function getRankedToolIds(orderedIds) {
49
- return orderedIds.map((id, index) => ({
50
- id,
51
- index,
52
- lastUsed: cache[id]?.lastUsed ?? 0
53
- })).sort((a, b) => b.lastUsed - a.lastUsed || a.index - b.index).map(({
54
- id
55
- }) => id);
56
- }
57
-
58
- /**
59
- * Record a single press of a tool and persist the updated usage map.
60
- *
61
- * @param id - Tool id that was pressed
62
- */
63
- export async function recordToolUsage(id) {
64
- if (!id) return;
65
- if (!loaded) await loadDialUsage();
66
-
67
- // Preserve launch order even when presses share a timestamp or the clock moves back.
68
- const now = Math.max(Date.now(), ...Object.values(cache).map(entry => entry.lastUsed + 1));
69
- cache = pruneUsage(recordUsage(cache, id, now), now);
70
- try {
71
- await persistentStorage.setItem(STORAGE_KEY, JSON.stringify(cache));
72
- } catch {
73
- // Ignore persistence failure — the in-memory cache is still updated.
74
- }
75
- }
76
-
77
- /** Clear all usage data (in-memory and persisted). */
78
- export async function resetDialUsage() {
79
- cache = {};
80
- try {
81
- await persistentStorage.removeItem(STORAGE_KEY);
82
- } catch {
83
- // Ignore — the in-memory cache is already cleared.
84
- }
85
- }
1
+ "use strict";import{persistentStorage as r,devToolsStorageKeys as c}from"@buoy-gg/shared-ui";import{recordUsage as l,pruneUsage as d}from"@buoy-gg/floating-tools-core";const n=c.dial.usage();let a={};let i=false;let o=null;export function loadDialUsage(){if(o)return o;o=(async()=>{try{const t=await r.getItem(n);if(t){const e=JSON.parse(t);if(e&&typeof e==="object"){a=e}}}catch{}finally{i=true}})();return o}void loadDialUsage();export function isDialUsageLoaded(){return i}export function getRankedToolIds(t){return t.map((e,s)=>({id:e,index:s,lastUsed:a[e]?.lastUsed??0})).sort((e,s)=>s.lastUsed-e.lastUsed||e.index-s.index).map(({id:e})=>e)}export async function recordToolUsage(t){if(!t)return;if(!i)await loadDialUsage();const e=Math.max(Date.now(),...Object.values(a).map(s=>s.lastUsed+1));a=d(l(a,t,e),e);try{await r.setItem(n,JSON.stringify(a))}catch{}}export async function resetDialUsage(){a={};try{await r.removeItem(n)}catch{}}
@@ -1,3 +1 @@
1
- "use strict";
2
-
3
- export { ARROW_BOTTOM_OFFSET, ARROW_HEIGHT, SPACING_GAP, getScreenCenterY, calculateTooltipPosition, calculateTargetPosition } from "@buoy-gg/shared-ui";
1
+ "use strict";export{ARROW_BOTTOM_OFFSET,ARROW_HEIGHT,SPACING_GAP,getScreenCenterY,calculateTooltipPosition,calculateTargetPosition}from"@buoy-gg/shared-ui";
@@ -1,3 +1 @@
1
- "use strict";
2
-
3
- export { ARROW_BOTTOM_OFFSET, ARROW_HEIGHT, SPACING_GAP, getScreenCenterY, calculateTooltipPosition, calculateTargetPosition } from "@buoy-gg/shared-ui/floating";
1
+ "use strict";export{ARROW_BOTTOM_OFFSET,ARROW_HEIGHT,SPACING_GAP,getScreenCenterY,calculateTooltipPosition,calculateTargetPosition}from"@buoy-gg/shared-ui/floating";
@@ -1,44 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * Decides whether FloatingDevTools mounts <AutoExternalSync /> — i.e. whether
5
- * this build is allowed to dial the Buoy Desktop broker.
6
- *
7
- * Kept as a pure function in its own module (no react-native / no guarded
8
- * requires) so the rule is unit-testable: the gate used to be an inline
9
- * `isDevelopment && ...` in JSX, which silently made release builds unable to
10
- * reach the desktop dashboard or MCP with no way to opt in from app code.
11
- *
12
- * The rule has two halves that must BOTH hold in a release build, because a
13
- * shipped app must never contact a broker on an end user's device:
14
- * 1. a real Pro license (never the Weekend Pass — see useProAccess), and
15
- * 2. an EXPLICIT opt-in from app code (`externalSync.enableInRelease`).
16
- * Dev builds keep the zero-config behavior: sync is on unless turned off.
17
- */
18
-
19
- /** The options object from the prop, or undefined when it's a boolean. */
20
- export function externalSyncOptions(externalSync) {
21
- return typeof externalSync === "object" && externalSync !== null ? externalSync : undefined;
22
- }
23
- export function shouldMountExternalSync({
24
- isDevelopment,
25
- isLicensed,
26
- externalSync,
27
- isAvailable
28
- }) {
29
- // Turned off outright, or the package isn't installed — nothing to mount.
30
- if (externalSync === false) return false;
31
- if (!isAvailable) return false;
32
-
33
- // Dev builds: zero-config, on by default (historical behavior).
34
- if (isDevelopment) return true;
35
-
36
- // Release builds: opt-in only, and Pro only. `enableInRelease` has to be set
37
- // by the app itself, so an app that just ships FloatingDevTools with a Pro
38
- // key still never opens a socket on a customer's phone.
39
- //
40
- // The `isLicensed` half is belt-and-braces: FloatingDevTools already renders
41
- // nothing at all for an unlicensed release build. Keep it anyway so this rule
42
- // stands on its own and can't be broken by a change to that earlier return.
43
- return isLicensed && externalSyncOptions(externalSync)?.enableInRelease === true;
44
- }
1
+ "use strict";export function externalSyncOptions(e){return typeof e==="object"&&e!==null?e:void 0}export function shouldMountExternalSync({isDevelopment:e,isLicensed:n,externalSync:t,isAvailable:r}){if(t===false)return false;if(!r)return false;if(e)return true;return n&&externalSyncOptions(t)?.enableInRelease===true}
@@ -1,27 +1 @@
1
- "use strict";
2
-
3
- import { useCallback } from "react";
4
- import { FloatingTool } from "@buoy-gg/shared-ui";
5
- import { MinimizedToolsStack } from "./MinimizedToolsStack";
6
- import { useMinimizedTools } from "./MinimizedToolsContext.js";
7
- import { useAppHost } from "./AppHost";
8
- import { jsx as _jsx } from "react/jsx-runtime";
9
- export { FloatingToolDivider as Divider, FloatingToolUserStatus as UserStatus } from "@buoy-gg/shared-ui";
10
- /** The DevTools content adapter. All floating behavior lives in shared UI. */
11
- export function FloatingTools(props) {
12
- const {
13
- minimizedTools
14
- } = useMinimizedTools();
15
- const {
16
- restore
17
- } = useAppHost();
18
- const onRestore = useCallback(tool => restore(tool.instanceId, tool.modalState), [restore]);
19
- return /*#__PURE__*/_jsx(FloatingTool, {
20
- ...props,
21
- hasMinimizedStack: minimizedTools.length > 0,
22
- minimizedStack: minimizedTools.length ? /*#__PURE__*/_jsx(MinimizedToolsStack, {
23
- onRestore: onRestore,
24
- containerWidth: 32
25
- }) : undefined
26
- });
27
- }
1
+ "use strict";import{useCallback as n}from"react";import{FloatingTool as m}from"@buoy-gg/shared-ui";import{MinimizedToolsStack as a}from"./MinimizedToolsStack";import{useMinimizedTools as l}from"./MinimizedToolsContext.js";import{useAppHost as d}from"./AppHost";import{jsx as e}from"react/jsx-runtime";export{FloatingToolDivider as Divider,FloatingToolUserStatus as UserStatus}from"@buoy-gg/shared-ui";export function FloatingTools(r){const{minimizedTools:o}=l();const{restore:t}=d();const s=n(i=>t(i.instanceId,i.modalState),[t]);return e(m,{...r,hasMinimizedStack:o.length>0,minimizedStack:o.length?e(a,{onRestore:s,containerWidth:32}):void 0})}
@@ -1,3 +1 @@
1
- "use strict";
2
-
3
- export { FloatingTool as FloatingTools, FloatingToolDivider as Divider, FloatingToolUserStatus as UserStatus, getBubbleAnchorPosition } from "@buoy-gg/shared-ui/floating";
1
+ "use strict";export{FloatingTool as FloatingTools,FloatingToolDivider as Divider,FloatingToolUserStatus as UserStatus,getBubbleAnchorPosition}from"@buoy-gg/shared-ui/floating";