@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,177 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.DialHyperspace = void 0;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _jsxRuntime = require("react/jsx-runtime");
11
- /**
12
- * DialHyperspace — the Hyperspace backdrop's lightspeed starfield, scaled
13
- * down to live inside the open dial's face. Replaces DialSnow (kept next
14
- * door for an easy swap back) so the dial matches the tool background.
15
- *
16
- * Same construction as the full preset (shared-ui
17
- * `backgrounds/variants/hyperspace.tsx`, see its header for the derivation):
18
- * the Skia original's per-frame `screen = plane/z` projection becomes scale
19
- * keyframes on phase-offset shells — a layer scaled by 1/z moves every star
20
- * outward on the true hyperbolic curve — with each shell's wrap snap hidden
21
- * inside the fade the original applies to the first/last 6% of a star's
22
- * life. Dial tuning: fewer stars, a slightly gentler cycle and lower alpha
23
- * so the field reads behind the icons instead of competing with them.
24
- * Stars are round crisp points, as in the original — never streaks.
25
- *
26
- * Cost while the dial is open: 1 animated node, ~48 static views — the same
27
- * budget DialSnow ran. The dial is fixed-size (never user-resized), so
28
- * sizing geometry from the passed circle size is correct here, and the
29
- * circle's `overflow: "hidden"` clips the streaks.
30
- */
31
-
32
- const Z_SPAN = 0.94;
33
- const MAX_SCALE = 6;
34
- const CYCLE_MS = 2400;
35
- const SHELLS = 3;
36
- const STARS_PER_SHELL = 16;
37
- /** Stride 4: angle, radius, size jitter, palette pick — fixed seeds so the
38
- * field is identical every open. */
39
- const SHELL_TABLES = Array.from({
40
- length: SHELLS
41
- }, (_, k) => (0, _sharedUi.scatter)(0x5747 ^ k * 0x9e37, STARS_PER_SHELL * 4));
42
- const STAR_COLORS = ["#FFFFFF", "#B3D9FF", "#8CB3FF"];
43
-
44
- /** The dial face draws 6 grid spokes, one every 60° starting at 0°. Star
45
- * motion is radial (uniform scale about the centre), so a star whose angle
46
- * sits near a spoke rides that line for its entire life. Remap the uniform
47
- * angle pick into the clear wedge between spokes, leaving `SPOKE_GAP` of
48
- * clearance centred on each line. */
49
- const SPOKE_STEP = Math.PI / 3;
50
- const SPOKE_GAP = 14 * Math.PI / 180;
51
- function spokeClearAngle(u) {
52
- const sector = Math.min(5, Math.floor(u * 6));
53
- const t = u * 6 - sector;
54
- return sector * SPOKE_STEP + SPOKE_GAP / 2 + t * (SPOKE_STEP - SPOKE_GAP);
55
- }
56
- function scaleAt(p) {
57
- return Math.min(MAX_SCALE, 1 / (1 - p * Z_SPAN));
58
- }
59
- function opacityAt(p) {
60
- let bright = 0.15 + 0.85 * p * p;
61
- // The original's 6% fade at both ends of a star's life.
62
- if (p < 0.06) bright *= p / 0.06;else if (p > 0.94) bright *= (1 - p) / 0.06;
63
- // Dial tuning: never brighter than 0.7 — the icons own the foreground.
64
- return Math.min(0.7, bright);
65
- }
66
-
67
- /** Interpolate stops for shell k (phase = (v + k/K) mod 1), the wrap point
68
- * double-sampled 1e-4 apart inside the zero-opacity sliver. */
69
- function shellStops(k) {
70
- const offset = k / SHELLS;
71
- const vs = [];
72
- const SEGMENTS = 12;
73
- for (let i = 0; i <= SEGMENTS; i++) vs.push(i / SEGMENTS);
74
- const vWrap = (1 - offset) % 1;
75
- if (vWrap > 1e-3 && vWrap < 1 - 1e-3) vs.push(vWrap - 1e-4, vWrap + 1e-4);
76
- vs.sort((a, b) => a - b);
77
- const input = [];
78
- const scale = [];
79
- const opacity = [];
80
- for (const v of vs) {
81
- // At the loop boundary the offset-0 shell's phase must read as END of
82
- // life (p=1, max scale, zero opacity), not wrap to 0 — otherwise the
83
- // last segment lerps scale 6→1 at visible opacity and the stars
84
- // retract to the centre once per cycle.
85
- const p = offset === 0 && v === 1 ? 1 : (v + offset) % 1;
86
- input.push(v);
87
- scale.push(scaleAt(p));
88
- opacity.push(opacityAt(p));
89
- }
90
- return {
91
- input,
92
- scale,
93
- opacity
94
- };
95
- }
96
- const SHELL_STOPS = Array.from({
97
- length: SHELLS
98
- }, (_, k) => shellStops(k));
99
- const DialHyperspace = exports.DialHyperspace = /*#__PURE__*/(0, _react.memo)(function DialHyperspace({
100
- size
101
- }) {
102
- const drive = (0, _sharedUi.useLoop)(CYCLE_MS);
103
- const c = size / 2;
104
- const shells = [];
105
- for (let k = 0; k < SHELLS; k++) {
106
- const table = SHELL_TABLES[k];
107
- const stops = SHELL_STOPS[k];
108
- const stars = [];
109
- for (let i = 0; i < STARS_PER_SHELL; i++) {
110
- const ang = spokeClearAngle(table[i * 4]);
111
- // sqrt-biased outward, inner 15% clear of the vanishing point. Offsets
112
- // scale with the HALF-extent, as in the original's projection.
113
- const rad = (0.15 + 0.85 * Math.sqrt(table[i * 4 + 1])) * 0.5 * c;
114
- const color = STAR_COLORS[Math.floor(table[i * 4 + 3] * STAR_COLORS.length) % 3];
115
- const x = c + Math.cos(ang) * rad;
116
- const y = c + Math.sin(ang) * rad;
117
- // Round crisp points, as in the original — the visible star is the
118
- // sprite's lit core (~12.5% of the stamp), so it starts sub-pixel and
119
- // only reaches ~2-3px before the fade-out kills it. A soft halo disc
120
- // at α0.3 stands in for the sprite's blur.
121
- const core = 0.6;
122
- const halo = core * 2.4;
123
- stars.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
124
- style: {
125
- position: "absolute",
126
- left: x - halo / 2,
127
- top: y - halo / 2,
128
- width: halo,
129
- height: halo,
130
- borderRadius: halo / 2,
131
- backgroundColor: (0, _sharedUi.withBgAlpha)(color, 0.3)
132
- }
133
- }, `${i}-h`), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
134
- style: {
135
- position: "absolute",
136
- left: x - core / 2,
137
- top: y - core / 2,
138
- width: core,
139
- height: core,
140
- borderRadius: core / 2,
141
- backgroundColor: color
142
- }
143
- }, i));
144
- }
145
- shells.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
146
- style: {
147
- position: "absolute",
148
- left: 0,
149
- top: 0,
150
- width: size,
151
- height: size,
152
- opacity: drive.interpolate({
153
- inputRange: stops.input,
154
- outputRange: stops.opacity
155
- }),
156
- transform: [{
157
- scale: drive.interpolate({
158
- inputRange: stops.input,
159
- outputRange: stops.scale
160
- })
161
- }]
162
- },
163
- pointerEvents: "none",
164
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.RasterLayer, {
165
- style: {
166
- width: size,
167
- height: size
168
- },
169
- raster: false,
170
- children: stars
171
- })
172
- }, k));
173
- }
174
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
175
- children: shells
176
- });
177
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialHyperspace=void 0;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");const Z_SPAN=.94;const MAX_SCALE=6;const CYCLE_MS=2400;const SHELLS=3;const STARS_PER_SHELL=16;const SHELL_TABLES=Array.from({length:SHELLS},(e,t)=>(0,_sharedUi.scatter)(22343^t*40503,STARS_PER_SHELL*4));const STAR_COLORS=["#FFFFFF","#B3D9FF","#8CB3FF"];const SPOKE_STEP=Math.PI/3;const SPOKE_GAP=14*Math.PI/180;function spokeClearAngle(e){const t=Math.min(5,Math.floor(e*6));const n=e*6-t;return t*SPOKE_STEP+SPOKE_GAP/2+n*(SPOKE_STEP-SPOKE_GAP)}function scaleAt(e){return Math.min(MAX_SCALE,1/(1-e*Z_SPAN))}function opacityAt(e){let t=.15+.85*e*e;if(e<.06)t*=e/.06;else if(e>.94)t*=(1-e)/.06;return Math.min(.7,t)}function shellStops(e){const t=e/SHELLS;const n=[];const i=12;for(let o=0;o<=i;o++)n.push(o/i);const a=(1-t)%1;if(a>.001&&a<1-.001)n.push(a-1e-4,a+1e-4);n.sort((o,s)=>o-s);const r=[];const l=[];const c=[];for(const o of n){const s=t===0&&o===1?1:(o+t)%1;r.push(o);l.push(scaleAt(s));c.push(opacityAt(s))}return{input:r,scale:l,opacity:c}}const SHELL_STOPS=Array.from({length:SHELLS},(e,t)=>shellStops(t));const DialHyperspace=exports.DialHyperspace=(0,_react.memo)(function e({size:t}){const n=(0,_sharedUi.useLoop)(CYCLE_MS);const i=t/2;const a=[];for(let r=0;r<SHELLS;r++){const l=SHELL_TABLES[r];const c=SHELL_STOPS[r];const o=[];for(let s=0;s<STARS_PER_SHELL;s++){const p=spokeClearAngle(l[s*4]);const f=(.15+.85*Math.sqrt(l[s*4+1]))*.5*i;const d=STAR_COLORS[Math.floor(l[s*4+3]*STAR_COLORS.length)%3];const S=i+Math.cos(p)*f;const g=i+Math.sin(p)*f;const u=.6;const h=u*2.4;o.push((0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:"absolute",left:S-h/2,top:g-h/2,width:h,height:h,borderRadius:h/2,backgroundColor:(0,_sharedUi.withBgAlpha)(d,.3)}},`${s}-h`),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:"absolute",left:S-u/2,top:g-u/2,width:u,height:u,borderRadius:u/2,backgroundColor:d}},s))}a.push((0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{position:"absolute",left:0,top:0,width:t,height:t,opacity:n.interpolate({inputRange:c.input,outputRange:c.opacity}),transform:[{scale:n.interpolate({inputRange:c.input,outputRange:c.scale})}]},pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_sharedUi.RasterLayer,{style:{width:t,height:t},raster:false,children:o})},r))}return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:a})});
@@ -1,304 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.DialIcon = void 0;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _floatingToolsCore = require("@buoy-gg/floating-tools-core");
10
- var _jsxRuntime = require("react/jsx-runtime");
11
- /** Full names agents wait for (`waitFor: "Network"`), not the truncated glyph. */const DIAL_A11Y = {
12
- network: "Network",
13
- images: "Images",
14
- "image-overlay": "Image Overlay",
15
- assets: "Assets",
16
- query: "React Query",
17
- storage: "Storage",
18
- env: "Env",
19
- console: "Console",
20
- events: "Events",
21
- redux: "Redux",
22
- zustand: "Zustand",
23
- jotai: "Jotai",
24
- "route-events": "Routes",
25
- "time-machine": "Time Machine",
26
- "highlight-updates": "Highlight Updates",
27
- "debug-borders": "Debug Borders",
28
- // Bench (@buoy-gg/perf-monitor) has two dial entries: the HUD toggle and
29
- // the tool. Both used to read "Perf Monitor", a name the product no longer uses.
30
- "perf-monitor": "Bench HUD",
31
- "js-top": "JS Top",
32
- "js-top-modal": "JS Top",
33
- impersonate: "Impersonate",
34
- "perf-monitor-modal": "Bench"
35
- };
36
- function dialAccessibilityLabel(id, name) {
37
- if (id && DIAL_A11Y[id]) return DIAL_A11Y[id];
38
- return name;
39
- }
40
-
41
- // The circle radius depends on the live window width and is computed inside
42
- // the component (must match DialDevTools' circle, which does the same).
43
- const VIEW_SIZE = _floatingToolsCore.DIAL_ICON_SIZE;
44
- const DialIcon = ({
45
- index,
46
- icon,
47
- iconsProgress,
48
- onPress,
49
- totalIcons,
50
- active
51
- }) => {
52
- // Animation values - using interpolation for better performance
53
- const scale = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
54
- const {
55
- width: screenWidth
56
- } = (0, _reactNative.useWindowDimensions)();
57
- const layout = (0, _react.useMemo)(() => (0, _floatingToolsCore.getDialLayout)({
58
- screenWidth
59
- }), [screenWidth]);
60
-
61
- // Hover animation on press in/out - using shared config
62
- // Fallback values in case dialAnimationConfig hasn't loaded yet
63
- const iconAnimConfig = _floatingToolsCore.dialAnimationConfig?.icons ?? {
64
- pressIn: {
65
- scale: 0.95,
66
- damping: 15,
67
- stiffness: 400
68
- },
69
- pressOut: {
70
- scale: 1,
71
- damping: 15,
72
- stiffness: 400
73
- }
74
- };
75
- const {
76
- pressIn,
77
- pressOut
78
- } = iconAnimConfig;
79
- const handlePressIn = () => {
80
- _reactNative.Animated.spring(scale, {
81
- toValue: pressIn.scale,
82
- damping: pressIn.damping,
83
- stiffness: pressIn.stiffness,
84
- useNativeDriver: true
85
- }).start();
86
- };
87
- const handlePressOut = () => {
88
- _reactNative.Animated.spring(scale, {
89
- toValue: pressOut.scale,
90
- damping: pressOut.damping,
91
- stiffness: pressOut.stiffness,
92
- useNativeDriver: true
93
- }).start();
94
- };
95
-
96
- // Position + spiral-entrance interpolations depend only on the (fixed) slot
97
- // index, so compute them once. This keeps re-renders — which happen on every
98
- // page change as `active` toggles — cheap.
99
- const motion = (0, _react.useMemo)(() => {
100
- const iconPosition = (0, _floatingToolsCore.getIconPosition)(index, totalIcons, layout.iconRadius, _floatingToolsCore.DIAL_START_ANGLE);
101
- const {
102
- x: finalX,
103
- y: finalY,
104
- angle
105
- } = iconPosition;
106
- const radius = layout.iconRadius;
107
- const staggerInputRange = (0, _floatingToolsCore.getIconStaggerInputRange)(index, totalIcons);
108
-
109
- // Use interpolation for smooth animation that works both directions
110
- const staggeredProgress = iconsProgress.interpolate({
111
- inputRange: staggerInputRange,
112
- outputRange: [0, 0, 1, 1],
113
- extrapolate: "clamp"
114
- });
115
-
116
- // Spiral animation with interpolation
117
- const spiralRotation = staggeredProgress.interpolate({
118
- inputRange: [0, 1],
119
- outputRange: [Math.PI * 2, 0] // Spiral from 2π to 0
120
- });
121
-
122
- // Distance from center
123
- const distance = staggeredProgress.interpolate({
124
- inputRange: [0, 1],
125
- outputRange: [0, radius]
126
- });
127
-
128
- // Calculate X and Y positions using Animated operations
129
- const translateX = _reactNative.Animated.add(_reactNative.Animated.multiply(distance, spiralRotation.interpolate({
130
- inputRange: [0, Math.PI * 2],
131
- outputRange: [Math.cos(angle), Math.cos(angle + Math.PI * 2)]
132
- })), staggeredProgress.interpolate({
133
- inputRange: [0, 1],
134
- outputRange: [0, finalX - radius * Math.cos(angle + Math.PI * 2)]
135
- }));
136
- const translateY = _reactNative.Animated.add(_reactNative.Animated.multiply(distance, spiralRotation.interpolate({
137
- inputRange: [0, Math.PI * 2],
138
- outputRange: [Math.sin(angle), Math.sin(angle + Math.PI * 2)]
139
- })), staggeredProgress.interpolate({
140
- inputRange: [0, 1],
141
- outputRange: [0, finalY - radius * Math.sin(angle + Math.PI * 2)]
142
- }));
143
-
144
- // Opacity animation
145
- const itemOpacity = staggeredProgress.interpolate({
146
- inputRange: [0, 0.3, 1],
147
- outputRange: [0, 0.3, 1]
148
- });
149
- return {
150
- translateX,
151
- translateY,
152
- itemOpacity,
153
- progressScale: staggeredProgress
154
- };
155
- }, [index, totalIcons, iconsProgress, layout]);
156
-
157
- // Main animated style for position and appearance
158
- const animatedStyle = {
159
- position: "absolute",
160
- left: layout.circleRadius - VIEW_SIZE / 2,
161
- // Center position
162
- top: layout.circleRadius - VIEW_SIZE / 2,
163
- // Center position
164
- opacity: motion.itemOpacity,
165
- transform: [{
166
- translateX: motion.translateX
167
- },
168
- // Apply translation from center
169
- {
170
- translateY: motion.translateY
171
- },
172
- // Apply translation from center
173
- {
174
- scale: _reactNative.Animated.multiply(scale, motion.progressScale)
175
- }]
176
- };
177
-
178
- // Check if this is an empty spot (no icon and no iconComponent)
179
- const isEmpty = icon.icon === null && !icon.iconComponent;
180
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
181
- style: [styles.view, animatedStyle, !active && styles.hidden],
182
- children: isEmpty ?
183
- /*#__PURE__*/
184
- // Empty spot - just show a subtle circle
185
- (0, _jsxRuntime.jsx)(_reactNative.View, {
186
- style: styles.emptySpot,
187
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
188
- style: styles.emptyDot
189
- })
190
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
191
- onPress: () => onPress(icon),
192
- onPressIn: handlePressIn,
193
- onPressOut: handlePressOut,
194
- style: styles.pressable,
195
- testID: icon.id ? `buoy-dial-${icon.id}` : undefined,
196
- accessibilityLabel: dialAccessibilityLabel(icon.id, icon.name),
197
- accessibilityRole: "button",
198
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
199
- style: [styles.iconGradientBg, {
200
- backgroundColor: "rgba(0, 0, 0, 0.2)"
201
- }]
202
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
203
- style: [styles.iconInnerGlow, {
204
- backgroundColor: "rgba(255, 255, 255, 0.02)"
205
- }]
206
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
207
- style: styles.iconWrapper,
208
- children: icon.iconComponent ? (() => {
209
- const IconComp = icon.iconComponent;
210
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComp, {
211
- slot: "dial",
212
- size: _floatingToolsCore.DIAL_ICON_GLYPH_SIZE
213
- });
214
- })() : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
215
- style: styles.iconClamp,
216
- children: icon.icon
217
- })
218
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
219
- style: styles.label,
220
- numberOfLines: 1,
221
- adjustsFontSizeToFit: true,
222
- minimumFontScale: 0.7,
223
- children: icon.name.toUpperCase()
224
- })]
225
- })
226
- });
227
- };
228
- exports.DialIcon = DialIcon;
229
- const styles = _reactNative.StyleSheet.create({
230
- view: {
231
- width: VIEW_SIZE,
232
- height: VIEW_SIZE,
233
- justifyContent: "center",
234
- alignItems: "center"
235
- },
236
- hidden: {
237
- display: "none"
238
- },
239
- pressable: {
240
- width: "100%",
241
- height: "100%",
242
- justifyContent: "center",
243
- alignItems: "center",
244
- padding: 4,
245
- backgroundColor: "transparent"
246
- },
247
- iconGradientBg: {
248
- position: "absolute",
249
- width: "85%",
250
- height: "85%",
251
- borderRadius: 12,
252
- opacity: 0.3
253
- },
254
- iconInnerGlow: {
255
- position: "absolute",
256
- width: "70%",
257
- height: "70%",
258
- borderRadius: 10,
259
- opacity: 0.5
260
- },
261
- iconWrapper: {
262
- marginBottom: 4,
263
- alignItems: "center",
264
- justifyContent: "center"
265
- },
266
- /**
267
- * Hard clamp for PRE-RENDERED icon nodes (icon.icon) — the path where the
268
- * glyph's size is baked in by whoever created the node (consumer custom
269
- * tools) rather than controlled here. The
270
- * fixed overflow-hidden box guarantees an oversized node can never blow past
271
- * its slot and dwarf neighboring icons — worst case it center-crops. The
272
- * iconComponent path stays unclipped: we render it at DIAL_ICON_GLYPH_SIZE
273
- * ourselves, and clipping would shave off the icons' glow shadows.
274
- */
275
- iconClamp: {
276
- width: _floatingToolsCore.DIAL_ICON_GLYPH_SIZE,
277
- height: _floatingToolsCore.DIAL_ICON_GLYPH_SIZE,
278
- alignItems: "center",
279
- justifyContent: "center",
280
- overflow: "hidden"
281
- },
282
- label: {
283
- fontSize: _floatingToolsCore.dialStyles.icon.label.fontSize,
284
- fontWeight: _floatingToolsCore.dialStyles.icon.label.fontWeight,
285
- letterSpacing: _floatingToolsCore.dialStyles.icon.label.letterSpacing,
286
- fontFamily: _floatingToolsCore.dialStyles.icon.label.fontFamily,
287
- marginTop: _floatingToolsCore.dialStyles.icon.label.marginTop,
288
- color: _floatingToolsCore.dialColors.iconLabel
289
- },
290
- emptySpot: {
291
- width: "100%",
292
- height: "100%",
293
- justifyContent: "center",
294
- alignItems: "center"
295
- },
296
- emptyDot: {
297
- width: _floatingToolsCore.dialStyles.emptySlot.dotSize,
298
- height: _floatingToolsCore.dialStyles.emptySlot.dotSize,
299
- borderRadius: _floatingToolsCore.dialStyles.emptySlot.dotSize / 2,
300
- backgroundColor: _floatingToolsCore.dialColors.emptyDotBackground,
301
- borderWidth: _floatingToolsCore.dialStyles.emptySlot.borderWidth,
302
- borderColor: _floatingToolsCore.dialColors.emptyDotBorder
303
- }
304
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialIcon=void 0;var _react=require("react");var _reactNative=require("react-native");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _jsxRuntime=require("react/jsx-runtime");const DIAL_A11Y={network:"Network",images:"Images","image-overlay":"Image Overlay",assets:"Assets",query:"React Query",storage:"Storage",env:"Env",console:"Console",events:"Events",redux:"Redux",zustand:"Zustand",jotai:"Jotai","route-events":"Routes","time-machine":"Time Machine",clock:"Clock","highlight-updates":"Highlight Updates","debug-borders":"Debug Borders","perf-monitor":"Bench HUD","js-top":"JS Top","js-top-modal":"JS Top",impersonate:"Impersonate","perf-monitor-modal":"Bench"};function dialAccessibilityLabel(t,e){if(t&&DIAL_A11Y[t])return DIAL_A11Y[t];return e}const VIEW_SIZE=_floatingToolsCore.DIAL_ICON_SIZE;const DialIcon=({index:t,icon:e,iconsProgress:p,onPress:y,totalIcons:s,active:I})=>{const r=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current;const{width:g}=(0,_reactNative.useWindowDimensions)();const a=(0,_react.useMemo)(()=>(0,_floatingToolsCore.getDialLayout)({screenWidth:g}),[g]);const f=_floatingToolsCore.dialAnimationConfig?.icons??{pressIn:{scale:.95,damping:15,stiffness:400},pressOut:{scale:1,damping:15,stiffness:400}};const{pressIn:l,pressOut:c}=f;const b=()=>{_reactNative.Animated.spring(r,{toValue:l.scale,damping:l.damping,stiffness:l.stiffness,useNativeDriver:true}).start()};const S=()=>{_reactNative.Animated.spring(r,{toValue:c.scale,damping:c.damping,stiffness:c.stiffness,useNativeDriver:true}).start()};const o=(0,_react.useMemo)(()=>{const d=(0,_floatingToolsCore.getIconPosition)(t,s,a.iconRadius,_floatingToolsCore.DIAL_START_ANGLE);const{x:w,y:j,angle:n}=d;const u=a.iconRadius;const v=(0,_floatingToolsCore.getIconStaggerInputRange)(t,s);const i=p.interpolate({inputRange:v,outputRange:[0,0,1,1],extrapolate:"clamp"});const m=i.interpolate({inputRange:[0,1],outputRange:[Math.PI*2,0]});const h=i.interpolate({inputRange:[0,1],outputRange:[0,u]});const A=_reactNative.Animated.add(_reactNative.Animated.multiply(h,m.interpolate({inputRange:[0,Math.PI*2],outputRange:[Math.cos(n),Math.cos(n+Math.PI*2)]})),i.interpolate({inputRange:[0,1],outputRange:[0,w-u*Math.cos(n+Math.PI*2)]}));const _=_reactNative.Animated.add(_reactNative.Animated.multiply(h,m.interpolate({inputRange:[0,Math.PI*2],outputRange:[Math.sin(n),Math.sin(n+Math.PI*2)]})),i.interpolate({inputRange:[0,1],outputRange:[0,j-u*Math.sin(n+Math.PI*2)]}));const D=i.interpolate({inputRange:[0,.3,1],outputRange:[0,.3,1]});return{translateX:A,translateY:_,itemOpacity:D,progressScale:i}},[t,s,p,a]);const R={position:"absolute",left:a.circleRadius-VIEW_SIZE/2,top:a.circleRadius-VIEW_SIZE/2,opacity:o.itemOpacity,transform:[{translateX:o.translateX},{translateY:o.translateY},{scale:_reactNative.Animated.multiply(r,o.progressScale)}]};const C=e.icon===null&&!e.iconComponent;return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.view,R,!I&&styles.hidden],children:C?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.emptySpot,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.emptyDot})}):(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>y(e),onPressIn:b,onPressOut:S,style:styles.pressable,testID:e.id?`buoy-dial-${e.id}`:void 0,accessibilityLabel:dialAccessibilityLabel(e.id,e.name),accessibilityRole:"button",children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.iconGradientBg,{backgroundColor:"rgba(0, 0, 0, 0.2)"}]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.iconInnerGlow,{backgroundColor:"rgba(255, 255, 255, 0.02)"}]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.iconWrapper,children:e.iconComponent?(()=>{const d=e.iconComponent;return(0,_jsxRuntime.jsx)(d,{slot:"dial",size:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE})})():(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.iconClamp,children:e.icon})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.label,numberOfLines:1,adjustsFontSizeToFit:true,minimumFontScale:.7,children:e.name.toUpperCase()})]})})};exports.DialIcon=DialIcon;const styles=_reactNative.StyleSheet.create({view:{width:VIEW_SIZE,height:VIEW_SIZE,justifyContent:"center",alignItems:"center"},hidden:{display:"none"},pressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center",padding:4,backgroundColor:"transparent"},iconGradientBg:{position:"absolute",width:"85%",height:"85%",borderRadius:12,opacity:.3},iconInnerGlow:{position:"absolute",width:"70%",height:"70%",borderRadius:10,opacity:.5},iconWrapper:{marginBottom:4,alignItems:"center",justifyContent:"center"},iconClamp:{width:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE,height:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE,alignItems:"center",justifyContent:"center",overflow:"hidden"},label:{fontSize:_floatingToolsCore.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsCore.dialStyles.icon.label.fontWeight,letterSpacing:_floatingToolsCore.dialStyles.icon.label.letterSpacing,fontFamily:_floatingToolsCore.dialStyles.icon.label.fontFamily,marginTop:_floatingToolsCore.dialStyles.icon.label.marginTop,color:_floatingToolsCore.dialColors.iconLabel},emptySpot:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},emptyDot:{width:_floatingToolsCore.dialStyles.emptySlot.dotSize,height:_floatingToolsCore.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsCore.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsCore.dialColors.emptyDotBackground,borderWidth:_floatingToolsCore.dialStyles.emptySlot.borderWidth,borderColor:_floatingToolsCore.dialColors.emptyDotBorder}});
@@ -1,165 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.DialPagination = void 0;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _floatingToolsCore = require("@buoy-gg/floating-tools-core");
11
- var _jsxRuntime = require("react/jsx-runtime");
12
- /** Pad a 1-based page number to two digits, e.g. 3 -> "03". */
13
- const pad = n => String(n).padStart(2, "0");
14
- /**
15
- * A single pager button. Press feedback is driven by a native-driver
16
- * `Animated` value via `onPressIn`/`onPressOut` — so the scale reacts
17
- * instantly on the UI thread, with no JS re-render in the press path.
18
- */
19
- const PagerButton = ({
20
- side,
21
- label,
22
- disabled,
23
- onPress
24
- }) => {
25
- const scale = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
26
- const springTo = toValue => {
27
- _reactNative.Animated.spring(scale, {
28
- toValue,
29
- damping: 15,
30
- stiffness: 400,
31
- useNativeDriver: true
32
- }).start();
33
- };
34
- const accent = disabled ? _floatingToolsCore.dialColors.emptyDotBorder : _floatingToolsCore.dialColors.accent;
35
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
36
- style: {
37
- transform: [{
38
- scale
39
- }]
40
- },
41
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
42
- testID: `buoy-dial-${side}`,
43
- accessibilityRole: "button",
44
- accessibilityLabel: `${side === "prev" ? "Previous" : "Next"} dial page`,
45
- accessibilityState: {
46
- disabled
47
- },
48
- disabled: disabled,
49
- onPress: onPress,
50
- onPressIn: () => !disabled && springTo(0.92),
51
- onPressOut: () => springTo(1),
52
- style: [styles.button, disabled && styles.buttonDisabled],
53
- children: [side === "prev" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronLeft, {
54
- size: 18,
55
- color: accent
56
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
57
- style: [styles.buttonText, disabled && styles.buttonTextDisabled],
58
- children: label
59
- }), side === "next" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
60
- size: 18,
61
- color: accent
62
- })]
63
- })
64
- });
65
- };
66
-
67
- /**
68
- * Prev/Next pager shown below the dial when there are more dial tools than
69
- * fit on a single page. Tools are ranked by usage, so paging walks from the
70
- * most-used tools toward the least-used.
71
- */
72
- const DialPagination = ({
73
- page,
74
- pageCount,
75
- onPrev,
76
- onNext,
77
- animatedStyle
78
- }) => {
79
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
80
- style: [styles.container, animatedStyle],
81
- pointerEvents: "box-none",
82
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(PagerButton, {
83
- side: "prev",
84
- label: "PREV",
85
- disabled: page <= 0,
86
- onPress: onPrev
87
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
88
- style: styles.indicator,
89
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
90
- style: styles.indicatorText,
91
- testID: "buoy-dial-page",
92
- children: [pad(page + 1), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
93
- style: styles.indicatorTextDim,
94
- children: [" / ", pad(pageCount)]
95
- })]
96
- })
97
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(PagerButton, {
98
- side: "next",
99
- label: "NEXT",
100
- disabled: page >= pageCount - 1,
101
- onPress: onNext
102
- })]
103
- });
104
- };
105
- exports.DialPagination = DialPagination;
106
- const styles = _reactNative.StyleSheet.create({
107
- container: {
108
- flexDirection: "row",
109
- alignItems: "center",
110
- justifyContent: "space-between"
111
- },
112
- button: {
113
- flexDirection: "row",
114
- alignItems: "center",
115
- gap: 4,
116
- paddingHorizontal: 16,
117
- paddingVertical: 10,
118
- borderRadius: 10,
119
- borderWidth: 1,
120
- borderColor: _floatingToolsCore.dialColors.dialBorder,
121
- backgroundColor: _floatingToolsCore.dialColors.dialBackground,
122
- shadowColor: _floatingToolsCore.dialColors.dialShadow,
123
- shadowOffset: {
124
- width: 0,
125
- height: 0
126
- },
127
- shadowOpacity: 0.4,
128
- shadowRadius: 8,
129
- elevation: 6
130
- },
131
- buttonDisabled: {
132
- opacity: 0.4
133
- },
134
- buttonText: {
135
- color: _floatingToolsCore.dialColors.centerText,
136
- fontSize: 12,
137
- fontWeight: "900",
138
- fontFamily: _sharedUi.monoFont,
139
- letterSpacing: 1.5
140
- },
141
- buttonTextDisabled: {
142
- color: _floatingToolsCore.dialColors.iconLabelMuted
143
- },
144
- indicator: {
145
- paddingHorizontal: 12,
146
- paddingVertical: 6
147
- },
148
- indicatorText: {
149
- color: _floatingToolsCore.dialColors.centerText,
150
- fontSize: 13,
151
- fontWeight: "900",
152
- fontFamily: _sharedUi.monoFont,
153
- letterSpacing: 2,
154
- textShadowColor: _floatingToolsCore.dialColors.centerTextGlow,
155
- textShadowOffset: {
156
- width: 0,
157
- height: 0
158
- },
159
- textShadowRadius: 6
160
- },
161
- indicatorTextDim: {
162
- color: _floatingToolsCore.dialColors.iconLabelMuted,
163
- textShadowRadius: 0
164
- }
165
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialPagination=void 0;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _jsxRuntime=require("react/jsx-runtime");const pad=e=>String(e).padStart(2,"0");const PagerButton=({side:e,label:o,disabled:t,onPress:r})=>{const i=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current;const a=s=>{_reactNative.Animated.spring(i,{toValue:s,damping:15,stiffness:400,useNativeDriver:true}).start()};const n=t?_floatingToolsCore.dialColors.emptyDotBorder:_floatingToolsCore.dialColors.accent;return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{transform:[{scale:i}]},children:(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:`buoy-dial-${e}`,accessibilityRole:"button",accessibilityLabel:`${e==="prev"?"Previous":"Next"} dial page`,accessibilityState:{disabled:t},disabled:t,onPress:r,onPressIn:()=>!t&&a(.92),onPressOut:()=>a(1),style:[styles.button,t&&styles.buttonDisabled],children:[e==="prev"&&(0,_jsxRuntime.jsx)(_sharedUi.ChevronLeft,{size:18,color:n}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.buttonText,t&&styles.buttonTextDisabled],children:o}),e==="next"&&(0,_jsxRuntime.jsx)(_sharedUi.ChevronRight,{size:18,color:n})]})})};const DialPagination=({page:e,pageCount:o,onPrev:t,onNext:r,animatedStyle:i})=>{return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[styles.container,i],pointerEvents:"box-none",children:[(0,_jsxRuntime.jsx)(PagerButton,{side:"prev",label:"PREV",disabled:e<=0,onPress:t}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.indicator,children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.indicatorText,testID:"buoy-dial-page",children:[pad(e+1),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.indicatorTextDim,children:[" / ",pad(o)]})]})}),(0,_jsxRuntime.jsx)(PagerButton,{side:"next",label:"NEXT",disabled:e>=o-1,onPress:r})]})};exports.DialPagination=DialPagination;const styles=_reactNative.StyleSheet.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},button:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:16,paddingVertical:10,borderRadius:10,borderWidth:1,borderColor:_floatingToolsCore.dialColors.dialBorder,backgroundColor:_floatingToolsCore.dialColors.dialBackground,shadowColor:_floatingToolsCore.dialColors.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.4,shadowRadius:8,elevation:6},buttonDisabled:{opacity:.4},buttonText:{color:_floatingToolsCore.dialColors.centerText,fontSize:12,fontWeight:"900",fontFamily:_sharedUi.monoFont,letterSpacing:1.5},buttonTextDisabled:{color:_floatingToolsCore.dialColors.iconLabelMuted},indicator:{paddingHorizontal:12,paddingVertical:6},indicatorText:{color:_floatingToolsCore.dialColors.centerText,fontSize:13,fontWeight:"900",fontFamily:_sharedUi.monoFont,letterSpacing:2,textShadowColor:_floatingToolsCore.dialColors.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:6},indicatorTextDim:{color:_floatingToolsCore.dialColors.iconLabelMuted,textShadowRadius:0}});