@buoy-gg/core 7.0.36 → 7.0.38

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 (103) hide show
  1. package/README.md +57 -69
  2. package/bin/buoy.js +71 -20
  3. package/lib/commonjs/Buoy.js +3 -16
  4. package/lib/commonjs/floatingMenu/AppHost.js +1 -1
  5. package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
  6. package/lib/commonjs/floatingMenu/AppIcon.web.js +53 -0
  7. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +12 -5
  8. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +14 -34
  9. package/lib/commonjs/floatingMenu/FloatingDevTools.js +32 -48
  10. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +24 -4
  11. package/lib/commonjs/floatingMenu/FloatingMenu.js +1 -1
  12. package/lib/commonjs/floatingMenu/ToolHost.js +1 -0
  13. package/lib/commonjs/floatingMenu/autoExternalSync.js +3 -2
  14. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +43 -10
  15. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +18 -5
  16. package/lib/commonjs/floatingMenu/dial/dialUsageStore.js +13 -17
  17. package/lib/commonjs/floatingMenu/dial/onboardingConstants.js +37 -65
  18. package/lib/commonjs/floatingMenu/dial/onboardingConstants.web.js +37 -29
  19. package/lib/commonjs/floatingMenu/floatingTools.js +23 -889
  20. package/lib/commonjs/floatingMenu/floatingTools.web.js +24 -514
  21. package/lib/commonjs/floatingMenu/optionalRequire.js +4 -0
  22. package/lib/commonjs/telemetry/installPing.js +7 -0
  23. package/lib/commonjs/version.js +1 -1
  24. package/lib/module/Buoy.js +3 -16
  25. package/lib/module/floatingMenu/AppHost.js +1 -1
  26. package/lib/module/floatingMenu/AppHost.web.js +1 -1
  27. package/lib/module/floatingMenu/AppIcon.web.js +47 -0
  28. package/lib/module/floatingMenu/DevToolsSettingsModal.js +13 -6
  29. package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +15 -35
  30. package/lib/module/floatingMenu/FloatingDevTools.js +35 -49
  31. package/lib/module/floatingMenu/FloatingDevTools.web.js +24 -3
  32. package/lib/module/floatingMenu/FloatingMenu.js +1 -1
  33. package/lib/module/floatingMenu/ToolHost.js +1 -0
  34. package/lib/module/floatingMenu/autoExternalSync.js +3 -2
  35. package/lib/module/floatingMenu/dial/DialDevTools.js +43 -10
  36. package/lib/module/floatingMenu/dial/DialDevTools.web.js +18 -5
  37. package/lib/module/floatingMenu/dial/dialUsageStore.js +14 -18
  38. package/lib/module/floatingMenu/dial/onboardingConstants.js +1 -62
  39. package/lib/module/floatingMenu/dial/onboardingConstants.web.js +1 -25
  40. package/lib/module/floatingMenu/floatingTools.js +15 -890
  41. package/lib/module/floatingMenu/floatingTools.web.js +1 -517
  42. package/lib/module/floatingMenu/optionalRequire.js +4 -0
  43. package/lib/module/telemetry/installPing.js +7 -0
  44. package/lib/module/version.js +1 -1
  45. package/lib/typescript/commonjs/Buoy.d.ts +14 -3
  46. package/lib/typescript/commonjs/Buoy.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/floatingMenu/AppIcon.web.d.ts +14 -0
  48. package/lib/typescript/commonjs/floatingMenu/AppIcon.web.d.ts.map +1 -0
  49. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
  50. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts.map +1 -1
  51. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts +4 -14
  52. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +1 -1
  53. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts +4 -19
  54. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +1 -1
  55. package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts +3 -4
  57. package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
  59. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/floatingMenu/dial/dialUsageStore.d.ts +3 -15
  61. package/lib/typescript/commonjs/floatingMenu/dial/dialUsageStore.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.d.ts +1 -29
  63. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts +1 -12
  65. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts +6 -55
  67. package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts +3 -53
  69. package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts.map +1 -1
  70. package/lib/typescript/commonjs/floatingMenu/optionalRequire.d.ts.map +1 -1
  71. package/lib/typescript/commonjs/telemetry/installPing.d.ts +8 -1
  72. package/lib/typescript/commonjs/telemetry/installPing.d.ts.map +1 -1
  73. package/lib/typescript/commonjs/version.d.ts +1 -1
  74. package/lib/typescript/module/Buoy.d.ts +14 -3
  75. package/lib/typescript/module/Buoy.d.ts.map +1 -1
  76. package/lib/typescript/module/floatingMenu/AppIcon.web.d.ts +14 -0
  77. package/lib/typescript/module/floatingMenu/AppIcon.web.d.ts.map +1 -0
  78. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
  79. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts.map +1 -1
  80. package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts +4 -14
  81. package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +1 -1
  82. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts +4 -19
  83. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +1 -1
  84. package/lib/typescript/module/floatingMenu/ToolHost.d.ts.map +1 -1
  85. package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts +3 -4
  86. package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +1 -1
  87. package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
  88. package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts.map +1 -1
  89. package/lib/typescript/module/floatingMenu/dial/dialUsageStore.d.ts +3 -15
  90. package/lib/typescript/module/floatingMenu/dial/dialUsageStore.d.ts.map +1 -1
  91. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.d.ts +1 -29
  92. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.d.ts.map +1 -1
  93. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts +1 -12
  94. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts.map +1 -1
  95. package/lib/typescript/module/floatingMenu/floatingTools.d.ts +6 -55
  96. package/lib/typescript/module/floatingMenu/floatingTools.d.ts.map +1 -1
  97. package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts +3 -53
  98. package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts.map +1 -1
  99. package/lib/typescript/module/floatingMenu/optionalRequire.d.ts.map +1 -1
  100. package/lib/typescript/module/telemetry/installPing.d.ts +8 -1
  101. package/lib/typescript/module/telemetry/installPing.d.ts.map +1 -1
  102. package/lib/typescript/module/version.d.ts +1 -1
  103. package/package.json +6 -6
@@ -1,519 +1,3 @@
1
1
  "use strict";
2
2
 
3
- /**
4
- * FloatingTools - Web renderer using shared React bindings.
5
- *
6
- * This file contains ONLY web-specific code (React DOM):
7
- * - Pointer event handling (mouse + touch — WKWebView/Capacitor included)
8
- * - requestAnimationFrame animation
9
- * - Web JSX (div, span)
10
- * - localStorage adapter
11
- *
12
- * All logic is shared via @buoy-gg/floating-tools-react
13
- *
14
- * @platform React DOM Web (Vite, CRA, Next.js, Electron)
15
- */
16
-
17
- import { useState, useRef, useCallback, useEffect, useMemo, Children } from 'react';
18
- import { calculateTargetPosition } from "./dial/onboardingConstants.web.js";
19
- import {
20
- // Hook and context
21
- useFloatingTools, FloatingToolsProvider, useFloatingToolsContext, interleaveWithDividers,
22
- // Utils from core (re-exported)
23
- floatingToolsColors, withAlpha, getUserStatusConfig, getGripIconLayout, interpolatePosition, easing, VISIBLE_HANDLE_WIDTH, ANIMATION_DURATION
24
- // Types
25
- } from '@buoy-gg/floating-tools-react';
26
-
27
- // Re-export for consumers
28
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
29
- // =============================
30
- // Web Storage Adapter
31
- // =============================
32
- const webStorageAdapter = {
33
- getItem: key => localStorage.getItem(key),
34
- setItem: (key, value) => localStorage.setItem(key, value)
35
- };
36
-
37
- // =============================
38
- // Native color values not present in floatingToolsColors
39
- // (core's `secondary` is #E0E0E0 = buoyColors.text; the native bubble uses
40
- // buoyColors.textSecondary #A0A0A0 for grip dots and "User" label text.
41
- // Inlined here rather than changed in core because dial.ts also consumes
42
- // floatingToolsColors.secondary for other surfaces.)
43
- // =============================
44
- // native shared-ui gameUIColors.ts: buoyColors.textSecondary = "#A0A0A0"
45
- const NATIVE_TEXT_SECONDARY = '#A0A0A0';
46
-
47
- // =============================
48
- // GripVerticalIcon (web JSX)
49
- // =============================
50
- function GripVerticalIcon({
51
- size = 24,
52
- // native shared-ui GripVerticalIcon.tsx: buoyColors.textSecondary + "CC"
53
- color = withAlpha(NATIVE_TEXT_SECONDARY, 'CC')
54
- }) {
55
- const layout = getGripIconLayout(size);
56
- return /*#__PURE__*/_jsx("div", {
57
- style: {
58
- width: size,
59
- height: size,
60
- display: 'flex',
61
- flexDirection: 'row',
62
- alignItems: 'center',
63
- justifyContent: 'center'
64
- },
65
- children: [0, 1].map(col => /*#__PURE__*/_jsx("div", {
66
- style: {
67
- display: 'flex',
68
- flexDirection: 'column',
69
- alignItems: 'center',
70
- justifyContent: 'center',
71
- // native GripVerticalIcon.tsx: marginHorizontal columnGap / 2
72
- marginLeft: layout.columnGap / 2,
73
- marginRight: layout.columnGap / 2
74
- },
75
- children: [0, 1, 2].map(row => /*#__PURE__*/_jsx("div", {
76
- style: {
77
- width: layout.dotSize,
78
- height: layout.dotSize,
79
- borderRadius: layout.dotSize / 2,
80
- backgroundColor: color,
81
- // native GripVerticalIcon.tsx: marginVertical rowGap / 2
82
- marginTop: layout.rowGap / 2,
83
- marginBottom: layout.rowGap / 2
84
- }
85
- }, row))
86
- }, col))
87
- });
88
- }
89
-
90
- // =============================
91
- // Divider (web JSX)
92
- // =============================
93
- export function Divider() {
94
- return /*#__PURE__*/_jsx("div", {
95
- style: {
96
- width: 1,
97
- height: 12,
98
- backgroundColor: withAlpha(floatingToolsColors.muted, '66'),
99
- flexShrink: 0
100
- }
101
- });
102
- }
103
-
104
- // =============================
105
- // UserStatus (web JSX)
106
- // =============================
107
- // Mirrors the native gameUIColorsCompat mapping in floatingTools.tsx:
108
- // success/optional/muted come from the shared palette, but `secondary`
109
- // (the "User" label text) is buoyColors.textSecondary, not core's secondary.
110
- const userStatusColors = {
111
- success: floatingToolsColors.success,
112
- optional: floatingToolsColors.optional,
113
- muted: floatingToolsColors.muted,
114
- // native floatingTools.tsx: gameUIColorsCompat.secondary = buoyColors.textSecondary
115
- secondary: NATIVE_TEXT_SECONDARY
116
- };
117
- export function UserStatus({
118
- userRole,
119
- onPress
120
- }) {
121
- const {
122
- isDragging
123
- } = useFloatingToolsContext();
124
- const config = getUserStatusConfig(userRole, userStatusColors);
125
- const handleClick = e => {
126
- if (!isDragging && onPress) {
127
- e.stopPropagation();
128
- onPress();
129
- }
130
- };
131
- return /*#__PURE__*/_jsxs("button", {
132
- role: "button",
133
- "aria-label": `User status: ${config.label}`,
134
- onClick: handleClick,
135
- style: {
136
- display: 'flex',
137
- flexDirection: 'row',
138
- alignItems: 'center',
139
- paddingTop: 6,
140
- paddingBottom: 6,
141
- paddingLeft: 8,
142
- paddingRight: 8,
143
- flexShrink: 0,
144
- cursor: onPress && !isDragging ? 'pointer' : 'default',
145
- background: 'none',
146
- border: 'none',
147
- margin: 0 // neutralize UA button margin (native View/Touchable has none)
148
- },
149
- children: [/*#__PURE__*/_jsx("div", {
150
- style: {
151
- width: 6,
152
- height: 6,
153
- borderRadius: 3,
154
- backgroundColor: config.dotColor,
155
- marginRight: 4
156
- }
157
- }), /*#__PURE__*/_jsx("span", {
158
- style: {
159
- fontSize: 10,
160
- fontWeight: 500,
161
- color: config.textColor,
162
- letterSpacing: 0.3,
163
- // native RN <Text> renders in the platform system font; buttons
164
- // otherwise use the UA font on web
165
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
166
- lineHeight: 'normal'
167
- },
168
- children: config.label
169
- })]
170
- });
171
- }
172
-
173
- // =============================
174
- // Web Animation Hook
175
- // =============================
176
- function useWebAnimation() {
177
- const animationRef = useRef(null);
178
- const [position, setPosition] = useState({
179
- x: 0,
180
- y: 0
181
- });
182
- const animateTo = useCallback((from, to, onComplete) => {
183
- if (animationRef.current) {
184
- cancelAnimationFrame(animationRef.current);
185
- }
186
- const startTime = performance.now();
187
- const animate = currentTime => {
188
- const elapsed = currentTime - startTime;
189
- const progress = Math.min(elapsed / ANIMATION_DURATION, 1);
190
- const newPosition = interpolatePosition(from, to, progress, easing.easeOutCubic);
191
- setPosition(newPosition);
192
- if (progress < 1) {
193
- animationRef.current = requestAnimationFrame(animate);
194
- } else {
195
- setPosition(to);
196
- onComplete?.();
197
- }
198
- };
199
- animationRef.current = requestAnimationFrame(animate);
200
- }, []);
201
- useEffect(() => {
202
- return () => {
203
- if (animationRef.current) {
204
- cancelAnimationFrame(animationRef.current);
205
- }
206
- };
207
- }, []);
208
- return {
209
- position,
210
- setPosition,
211
- animateTo
212
- };
213
- }
214
-
215
- // =============================
216
- // Main FloatingTools Component
217
- // =============================
218
-
219
- // Last known bubble position — the AppHost minimize animation targets this so
220
- // tools shrink toward the stack instead of the old bottom-right dock.
221
- let lastBubbleAnchor = null;
222
- export function getBubbleAnchorPosition() {
223
- return lastBubbleAnchor;
224
- }
225
- export function FloatingTools({
226
- enablePositionPersistence = true,
227
- children,
228
- pushToSide = false,
229
- suspendPointerEvents = false,
230
- centerOnboarding = false,
231
- minimizedStack,
232
- hasMinimizedStack = false
233
- }) {
234
- const bubbleRef = useRef(null);
235
-
236
- // Use shared hook
237
- const {
238
- state,
239
- actions,
240
- isInitialized
241
- } = useFloatingTools({
242
- screenSize: {
243
- width: window.innerWidth,
244
- height: window.innerHeight
245
- },
246
- enablePositionPersistence,
247
- storage: webStorageAdapter
248
- });
249
-
250
- // Web-specific animation
251
- const {
252
- position: animatedPosition,
253
- setPosition: setAnimatedPosition,
254
- animateTo
255
- } = useWebAnimation();
256
-
257
- // Sync position when initialized
258
- useEffect(() => {
259
- if (isInitialized) {
260
- setAnimatedPosition(state.position);
261
- }
262
- }, [isInitialized, state.position, setAnimatedPosition]);
263
-
264
- // Publish the bubble anchor for the AppHost minimize-target (stack lives
265
- // fused to the bubble now, not in a fixed dock).
266
- useEffect(() => {
267
- lastBubbleAnchor = {
268
- x: animatedPosition.x,
269
- y: animatedPosition.y
270
- };
271
- }, [animatedPosition]);
272
-
273
- // Handle window resize
274
- useEffect(() => {
275
- const handleResize = () => {
276
- actions.setScreenSize(window.innerWidth, window.innerHeight);
277
- };
278
- window.addEventListener('resize', handleResize);
279
- return () => window.removeEventListener('resize', handleResize);
280
- }, [actions]);
281
-
282
- // Update bubble size on layout
283
- const [bubbleMeasured, setBubbleMeasured] = useState(false);
284
- useEffect(() => {
285
- if (!bubbleMeasured && bubbleRef.current) {
286
- const rect = bubbleRef.current.getBoundingClientRect();
287
- if (rect.width > 0 && rect.height > 0) {
288
- actions.setBubbleSize({
289
- width: rect.width,
290
- height: rect.height
291
- });
292
- setBubbleMeasured(true);
293
- }
294
- }
295
- }, [bubbleMeasured, actions]);
296
-
297
- // Keep the bubble below notches/status bars (WKWebView with viewport-fit=cover).
298
- useEffect(() => {
299
- const probe = document.createElement('div');
300
- probe.style.cssText = 'position:fixed;top:env(safe-area-inset-top);left:env(safe-area-inset-left);' + 'visibility:hidden;pointer-events:none';
301
- document.body.appendChild(probe);
302
- const rect = probe.getBoundingClientRect();
303
- document.body.removeChild(probe);
304
- if (rect.top > 0 || rect.left > 0) {
305
- actions.setMinPosition({
306
- x: Math.max(rect.left, 10),
307
- y: Math.max(rect.top, 10)
308
- });
309
- }
310
- }, [actions]);
311
-
312
- // Web-specific: pointer event handling (mouse + touch).
313
- // preventDefault on pointerdown suppresses the compatibility mouse events,
314
- // and touchAction: 'none' on the bubble stops touch-drags from scrolling.
315
- const [isPointerDown, setIsPointerDown] = useState(false);
316
- const handlePointerDown = useCallback(e => {
317
- e.preventDefault();
318
- setIsPointerDown(true);
319
- actions.handleDragStart({
320
- clientX: e.clientX,
321
- clientY: e.clientY
322
- });
323
- }, [actions]);
324
- const handlePointerMove = useCallback(e => {
325
- const result = actions.handleDragMove({
326
- clientX: e.clientX,
327
- clientY: e.clientY
328
- });
329
- if (result.isDragging) {
330
- setAnimatedPosition(result.position);
331
- }
332
- }, [actions, setAnimatedPosition]);
333
- const handlePointerUp = useCallback(e => {
334
- setIsPointerDown(false);
335
- const result = actions.handleDragEnd({
336
- clientX: e.clientX,
337
- clientY: e.clientY
338
- });
339
- if (result.wasTap) {
340
- const toggleResult = actions.toggleHideShow();
341
- animateTo(state.position, toggleResult.targetPosition, () => {
342
- actions.commitPosition(toggleResult.targetPosition);
343
- });
344
- } else if (result.shouldHide) {
345
- animateTo(state.position, result.position, () => {
346
- actions.commitPosition(result.position);
347
- });
348
- }
349
- }, [actions, animateTo, state.position]);
350
- useEffect(() => {
351
- if (isPointerDown) {
352
- window.addEventListener('pointermove', handlePointerMove);
353
- window.addEventListener('pointerup', handlePointerUp);
354
- window.addEventListener('pointercancel', handlePointerUp);
355
- return () => {
356
- window.removeEventListener('pointermove', handlePointerMove);
357
- window.removeEventListener('pointerup', handlePointerUp);
358
- window.removeEventListener('pointercancel', handlePointerUp);
359
- };
360
- }
361
- }, [isPointerDown, handlePointerMove, handlePointerUp]);
362
-
363
- // Live refs so the pushToSide effect never animates from a stale closure
364
- // (the from-position jump read as a "pop" when restoring).
365
- const statePositionRef = useRef(state.position);
366
- statePositionRef.current = state.position;
367
- const isHiddenRef = useRef(state.isHidden);
368
- isHiddenRef.current = state.isHidden;
369
-
370
- // pushToSide: forceHide to the edge while a dial/tool is open; forceShow
371
- // restores the saved position when it closes (200ms, native parity).
372
- // Native semantics ported exactly (floatingTools.tsx:537-603):
373
- // - push only when the bubble isn't already hidden (a user-hidden bubble
374
- // is left alone, and we don't claim it as OUR push)
375
- // - restore only when the bubble is STILL hidden from OUR push — if the
376
- // user tapped/dragged it back out while a tool was open
377
- // (userWantsVisibleRef), it stays exactly where they put it
378
- const pushedRef = useRef(false);
379
- useEffect(() => {
380
- if (!isInitialized) return;
381
- if (pushToSide && !pushedRef.current) {
382
- if (isHiddenRef.current) return; // user hid it themselves — not our push
383
- pushedRef.current = true;
384
- const {
385
- targetPosition
386
- } = actions.forceHide();
387
- animateTo(statePositionRef.current, targetPosition, () => {});
388
- } else if (!pushToSide && pushedRef.current) {
389
- pushedRef.current = false;
390
- // User already showed it manually while the tool was open — leave it.
391
- if (!isHiddenRef.current) return;
392
- const {
393
- targetPosition
394
- } = actions.forceShow();
395
- // The bubble may have grown while hidden (row tools/env badge toggled
396
- // on) — clamp the restored position so it stays fully on-screen
397
- // (native handles this via its width-change auto-reposition).
398
- const width = bubbleRef.current?.getBoundingClientRect().width ?? 100;
399
- const clamped = {
400
- x: Math.max(10, Math.min(targetPosition.x, window.innerWidth - width - 10)),
401
- y: targetPosition.y
402
- };
403
- animateTo(statePositionRef.current, clamped, () => {
404
- actions.commitPosition(clamped);
405
- });
406
- }
407
- // eslint-disable-next-line react-hooks/exhaustive-deps
408
- }, [pushToSide, isInitialized]);
409
-
410
- // centerOnboarding: park the bubble under the tooltip arrow while the
411
- // welcome tooltip is up (native calculateTargetPosition math).
412
- useEffect(() => {
413
- if (!centerOnboarding || !isInitialized) return;
414
- const bubbleWidth = bubbleRef.current?.getBoundingClientRect().width ?? 100;
415
- const bubbleHeight = bubbleRef.current?.getBoundingClientRect().height ?? 32;
416
- const fromBottom = calculateTargetPosition();
417
- const target = {
418
- x: (window.innerWidth - bubbleWidth) / 2,
419
- y: window.innerHeight - fromBottom - bubbleHeight
420
- };
421
- animateTo(statePositionRef.current, target, () => {});
422
- // eslint-disable-next-line react-hooks/exhaustive-deps
423
- }, [centerOnboarding, isInitialized]);
424
-
425
- // Interleave children with dividers
426
- const actionsContent = useMemo(() => interleaveWithDividers(Children.toArray(children), key => /*#__PURE__*/_jsx(Divider, {}, key)), [children]);
427
-
428
- // Suppress the first paint until the persisted position has loaded so the
429
- // bubble doesn't flash at 0,0 (native floatingTools.tsx:935-937).
430
- if (!isInitialized) {
431
- return null;
432
- }
433
- return /*#__PURE__*/_jsxs("div", {
434
- ref: bubbleRef,
435
- role: "toolbar",
436
- "aria-label": "Floating Tools",
437
- style: {
438
- position: 'fixed',
439
- left: animatedPosition.x,
440
- top: animatedPosition.y,
441
- zIndex: 9999,
442
- display: 'flex',
443
- flexDirection: 'row',
444
- alignItems: 'center',
445
- backgroundColor: floatingToolsColors.panel,
446
- // native: top-left corner + top border flatten when the minimized
447
- // stack is fused above (floatingTools.tsx containerStyle)
448
- borderTopLeftRadius: hasMinimizedStack ? 0 : 6,
449
- borderTopRightRadius: 6,
450
- borderBottomLeftRadius: 6,
451
- borderBottomRightRadius: 6,
452
- borderWidth: state.isDragging ? 2 : 1,
453
- borderTopWidth: state.isDragging ? 2 : hasMinimizedStack ? 0 : 1,
454
- borderStyle: 'solid',
455
- borderColor: state.isDragging ? floatingToolsColors.dragActive : withAlpha(floatingToolsColors.muted, '66'),
456
- // native floatingTools.tsx: shadowOffset {0, 6|4}, shadowRadius 12|8,
457
- // shadowOpacity 0.6|0.3, shadowColor dragActive+"99"|"#000".
458
- // Dragging color = 0x99 (0.6) alpha x 0.6 shadowOpacity = ~0.36 effective.
459
- boxShadow: state.isDragging ? `0 6px 12px ${withAlpha(floatingToolsColors.dragActive, 0.36)}` : '0 4px 8px rgba(0, 0, 0, 0.3)',
460
- userSelect: 'none',
461
- touchAction: 'none',
462
- pointerEvents: suspendPointerEvents ? 'none' : 'auto'
463
- },
464
- children: [minimizedStack && /*#__PURE__*/_jsx("div", {
465
- style: {
466
- position: 'absolute',
467
- bottom: '100%',
468
- left: -1,
469
- // align with the bubble border edge
470
- width: VISIBLE_HANDLE_WIDTH,
471
- overflow: 'visible',
472
- zIndex: 1001
473
- },
474
- children: minimizedStack
475
- }), /*#__PURE__*/_jsx("div", {
476
- role: "slider",
477
- "aria-label": "Drag handle",
478
- "aria-valuetext": `Position: ${Math.round(animatedPosition.x)}, ${Math.round(animatedPosition.y)}`,
479
- tabIndex: 0,
480
- onPointerDown: handlePointerDown,
481
- style: {
482
- touchAction: 'none',
483
- paddingLeft: 6,
484
- paddingRight: 6,
485
- paddingTop: 6,
486
- paddingBottom: 6,
487
- backgroundColor: withAlpha(floatingToolsColors.muted, '1A'),
488
- display: 'flex',
489
- alignItems: 'center',
490
- justifyContent: 'center',
491
- width: VISIBLE_HANDLE_WIDTH,
492
- boxSizing: 'border-box',
493
- // RN width includes padding/border
494
- borderRight: `1px solid ${withAlpha(floatingToolsColors.muted, '66')}`,
495
- // native dragHandleStyle sets NO corner radius (container overflow is
496
- // visible); the 10%-alpha bg square corner matches native rendering
497
- cursor: state.isDragging ? 'grabbing' : 'grab'
498
- },
499
- children: /*#__PURE__*/_jsx(GripVerticalIcon, {
500
- size: 12
501
- })
502
- }), /*#__PURE__*/_jsx(FloatingToolsProvider, {
503
- value: {
504
- isDragging: state.isDragging,
505
- isHidden: state.isHidden
506
- },
507
- children: /*#__PURE__*/_jsx("div", {
508
- style: {
509
- display: 'flex',
510
- flexDirection: 'row',
511
- alignItems: 'center',
512
- gap: 6,
513
- paddingRight: 8
514
- },
515
- children: actionsContent
516
- })
517
- })]
518
- });
519
- }
3
+ export { FloatingTool as FloatingTools, FloatingToolDivider as Divider, FloatingToolUserStatus as UserStatus, getBubbleAnchorPosition } from "@buoy-gg/shared-ui/floating";
@@ -16,6 +16,10 @@ const MODULE_NOT_FOUND_RE = /could not be found within the project|Cannot find m
16
16
  */
17
17
  export function reportOptionalRequireError(moduleName, err) {
18
18
  if (!isDev) return;
19
+ // Under an ESM bundler (the desktop's Vite renderer) `require` itself does
20
+ // not exist, so every guarded require fails the same way. That says nothing
21
+ // about the package, so it is not worth a warning.
22
+ if (typeof require !== "function") return;
19
23
  const message = err instanceof Error ? err.message : String(err);
20
24
  const code = err?.code;
21
25
  const isNotFound = code === "MODULE_NOT_FOUND" || MODULE_NOT_FOUND_RE.test(message);
@@ -70,6 +70,13 @@ function announceOnce() {
70
70
  }
71
71
  let sentThisSession = false;
72
72
 
73
+ /**
74
+ * What the ping reports about the account: the tier of an admitted account,
75
+ * or "locked" for an install that has not been admitted (no key, or a key the
76
+ * license server rejected). "locked" is what gives "how many installs never
77
+ * get an account" its numerator.
78
+ */
79
+
73
80
  /**
74
81
  * Send the ping if it is due. Safe to call on every mount: it is idempotent
75
82
  * within a session, throttled to once a day across sessions, and resolves
@@ -11,4 +11,4 @@
11
11
  * Drift is prevented by a test that fails when this disagrees with
12
12
  * package.json, so a version bump that forgets this file cannot ship.
13
13
  */
14
- export const SDK_VERSION = "7.0.36";
14
+ export const SDK_VERSION = "7.0.38";
@@ -14,9 +14,9 @@
14
14
  */
15
15
  export interface BuoyConfig {
16
16
  /**
17
- * Your Buoy Pro license key
17
+ * Your Free or Pro Buoy account key
18
18
  * Get one at https://buoy.gg/pricing
19
- * Pass empty string or omit to clear cached license and use free mode
19
+ * Omit to preserve activation; pass an empty string to sign out and lock tools
20
20
  */
21
21
  licenseKey?: string;
22
22
  /**
@@ -83,7 +83,18 @@ export declare const Buoy: {
83
83
  /**
84
84
  * Get the current license state
85
85
  */
86
- getState(): Readonly<import("@buoy-gg/license").LicenseState>;
86
+ getState(): {
87
+ tier: import("@buoy-gg/license").BuoyTier;
88
+ isPro: boolean;
89
+ access: import("@buoy-gg/license").AccountAccess;
90
+ isInitialized: boolean;
91
+ isValidating: boolean;
92
+ tierSource: import("@buoy-gg/license").TierSource;
93
+ licenseKey: string | null;
94
+ error: string | null;
95
+ errorKind: "transport" | "verdict" | null;
96
+ expiresAt: Date | null;
97
+ };
87
98
  /**
88
99
  * Force device re-registration (debugging helper)
89
100
  * Clears cached fingerprint so next init will register device again
@@ -1 +1 @@
1
- {"version":3,"file":"Buoy.d.ts","sourceRoot":"","sources":["../../../src/Buoy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAQD,6DAA6D;AAC7D,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;iBACU,UAAU,GAAG,IAAI;IAoB9B;;;;;;;;;;;;OAYG;sBACqB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD;;OAEG;aACM,OAAO;IAIhB;;OAEG;;IAKH;;;OAGG;uBACsB,OAAO,CAAC,IAAI,CAAC;CAGvC,CAAC;AAGF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Buoy.d.ts","sourceRoot":"","sources":["../../../src/Buoy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAQD,6DAA6D;AAC7D,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;iBACU,UAAU,GAAG,IAAI;IAQ9B;;;;;;;;;;;;OAYG;sBACqB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;OAEG;aACM,OAAO;IAIhB;;OAEG;;;;;;;;;;;;;IAKH;;;OAGG;uBACsB,OAAO,CAAC,IAAI,CAAC;CAGvC,CAAC;AAGF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import type { FloatingMenuRenderCtx, InstalledApp } from "./types";
3
+ /** DOM twin of the native icon resolver; importing RN breaks pure web hosts. */
4
+ export declare function AppTextIcon({ label, size, color }: {
5
+ label: string;
6
+ size: number;
7
+ color?: string;
8
+ }): React.JSX.Element;
9
+ export declare function renderAppIcon(icon: InstalledApp["icon"], ctx: Partial<FloatingMenuRenderCtx> & {
10
+ slot: FloatingMenuRenderCtx["slot"];
11
+ size: number;
12
+ color?: string;
13
+ }): React.ReactNode;
14
+ //# sourceMappingURL=AppIcon.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppIcon.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/AppIcon.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnE,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAA6B,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,qBAK1H;AACD,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG;IAAE,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAKtL"}
@@ -1 +1 @@
1
- {"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAa,MAAM,OAAO,CAAC;AA2CjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6G5C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,kDAAkD;IAClD,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAsDD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAwxBhE,CAAC;AA8FF,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
1
+ {"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAa,MAAM,OAAO,CAAC;AA2CjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6G5C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,kDAAkD;IAClD,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAsDD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAqxBhE,CAAC;AA8FF,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DevToolsSettingsModal.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAWL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEpB,MAAM,+BAA+B,CAAC;AAyEvC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACzD;AAshBD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,cAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,OAA2B,EAC3B,gBAAgB,GACjB,EAAE,kBAAkB,sCAkXpB"}
1
+ {"version":3,"file":"DevToolsSettingsModal.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAWL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEpB,MAAM,+BAA+B,CAAC;AA6EvC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACzD;AA8gBD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,OAAO,EACP,cAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,OAA2B,EAC3B,gBAAgB,GACjB,EAAE,kBAAkB,sCAkXpB"}
@@ -225,17 +225,7 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
225
225
  * ```
226
226
  */
227
227
  onEnvironmentSwitch?: (environment: import("@buoy-gg/shared-ui").Environment) => void;
228
- /**
229
- * Require a valid license key to use the DevTools.
230
- * When enabled, users must enter a license key (free or pro) before
231
- * they can access any tools. Great for tracking user signups.
232
- *
233
- * @default false
234
- * @example
235
- * ```tsx
236
- * <FloatingDevTools requireLicense />
237
- * ```
238
- */
228
+ /** @deprecated Account access is always required for Free and Pro users. */
239
229
  requireLicense?: boolean;
240
230
  /**
241
231
  * Your Buoy Pro license key.
@@ -307,8 +297,8 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
307
297
  * overlays. For builds that ship to non-developers (field/associate
308
298
  * builds) where the desktop dashboard is the only debugging surface.
309
299
  *
310
- * `requireLicense` is ignored in headless mode (there is no UI to gate);
311
- * the production free-tier gate still applies. Native only.
300
+ * A verified account is required in headless mode too;
301
+ * production restrictions still apply. Native only.
312
302
  *
313
303
  * @default false
314
304
  */
@@ -368,5 +358,5 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
368
358
  *
369
359
  * @param props - FloatingDevTools props
370
360
  */
371
- export declare const FloatingDevTools: ({ apps, requiredEnvVars, requiredStorageKeys, askBuoy, children, disableHints, defaultFloatingTools, defaultDialTools, requireLicense, licenseKey: licenseKeyProp, zustandStores, environment, externalSync, headless, ...props }: FloatingDevToolsProps) => React.JSX.Element | null;
361
+ export declare const FloatingDevTools: ({ apps, requiredEnvVars, requiredStorageKeys, askBuoy, children, disableHints, defaultFloatingTools, defaultDialTools, requireLicense: _requireLicense, licenseKey: licenseKeyProp, zustandStores, environment, externalSync, headless, ...props }: FloatingDevToolsProps) => React.JSX.Element | null;
372
362
  //# sourceMappingURL=FloatingDevTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"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"}