@buoy-gg/core 3.0.1 → 3.0.2
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.
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +6 -1
- package/lib/commonjs/floatingMenu/FloatingMenu.js +3 -7
- package/lib/commonjs/floatingMenu/autoExternalSync.js +215 -0
- package/lib/commonjs/floatingMenu/defaultConfig.js +1 -1
- package/lib/commonjs/floatingMenu/dial/DialDevTools.js +59 -47
- package/lib/commonjs/floatingMenu/dial/DialIcon.js +12 -13
- package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.js +1 -1
- package/lib/module/floatingMenu/DevToolsSettingsModal.js +2 -2
- package/lib/module/floatingMenu/FloatingDevTools.js +6 -1
- package/lib/module/floatingMenu/FloatingMenu.js +4 -7
- package/lib/module/floatingMenu/autoExternalSync.js +209 -0
- package/lib/module/floatingMenu/defaultConfig.js +1 -1
- package/lib/module/floatingMenu/dial/DialDevTools.js +62 -48
- package/lib/module/floatingMenu/dial/DialIcon.js +15 -15
- package/lib/module/floatingMenu/dial/OnboardingTooltip.js +2 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts +19 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts +21 -0
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +1 -0
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialIcon.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts +19 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts +21 -0
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +1 -0
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/dial/DialIcon.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
-
import { TouchableOpacity, StyleSheet, View
|
|
4
|
+
import { TouchableOpacity, StyleSheet, View } from "react-native";
|
|
5
|
+
import { absoluteFill } from "@buoy-gg/shared-ui";
|
|
5
6
|
import { FloatingTools, UserStatus } from "./floatingTools";
|
|
6
7
|
import { DialDevTools } from "./dial/DialDevTools";
|
|
7
8
|
import { EnvironmentIndicator, persistentStorage, useHintsDisabled, devToolsStorageKeys, buoyColors } from "@buoy-gg/shared-ui";
|
|
@@ -22,10 +23,6 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
22
23
|
*/
|
|
23
24
|
const FLOATING_MENU_ONBOARDING_KEY = "@react_buoy_floating_menu_tooltip_shown";
|
|
24
25
|
const ONBOARDING_STEP_KEY = "@react_buoy_onboarding_step";
|
|
25
|
-
const {
|
|
26
|
-
width: SCREEN_WIDTH,
|
|
27
|
-
height: SCREEN_HEIGHT
|
|
28
|
-
} = Dimensions.get("window");
|
|
29
26
|
export const FloatingMenu = ({
|
|
30
27
|
apps,
|
|
31
28
|
state,
|
|
@@ -322,11 +319,11 @@ const styles = StyleSheet.create({
|
|
|
322
319
|
fontWeight: "900"
|
|
323
320
|
},
|
|
324
321
|
onboardingContainer: {
|
|
325
|
-
...
|
|
322
|
+
...absoluteFill,
|
|
326
323
|
zIndex: 10000
|
|
327
324
|
},
|
|
328
325
|
onboardingBackdrop: {
|
|
329
|
-
...
|
|
326
|
+
...absoluteFill,
|
|
330
327
|
backgroundColor: "rgba(0, 0, 0, 0.85)"
|
|
331
328
|
}
|
|
332
329
|
});
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zero-config device→desktop sync for FloatingDevTools.
|
|
5
|
+
*
|
|
6
|
+
* When @buoy-gg/external-sync is installed, FloatingDevTools renders
|
|
7
|
+
* <AutoExternalSync /> in dev builds: it connects to the Buoy Desktop broker
|
|
8
|
+
* (localhost:42831 — a silent no-op when the desktop app isn't running) and
|
|
9
|
+
* registers a sync adapter for every installed tool package, discovered with
|
|
10
|
+
* the same guarded-require pattern as autoDiscoverPresets. No <DevToolsSync>
|
|
11
|
+
* wiring needed in the app.
|
|
12
|
+
*
|
|
13
|
+
* Identity defaults come from expo-constants when available (app name →
|
|
14
|
+
* "MyApp (ios)" / "myapp-ios"), overridable via the `externalSync` prop.
|
|
15
|
+
*/
|
|
16
|
+
import { useMemo } from "react";
|
|
17
|
+
import { Platform } from "react-native";
|
|
18
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
19
|
+
|
|
20
|
+
// Module-level guarded requires: presence is constant for the app lifetime,
|
|
21
|
+
// so hooks pulled from these modules keep a stable call order.
|
|
22
|
+
//
|
|
23
|
+
// IMPORTANT: each require() must sit LEXICALLY inside its own try block
|
|
24
|
+
// (same pattern as autoDiscoverPresets) — Metro only marks a dependency as
|
|
25
|
+
// optional when the require is directly inside a try statement. Wrapping it
|
|
26
|
+
// in a helper/arrow makes Metro hard-fail the bundle for apps that don't
|
|
27
|
+
// install that package.
|
|
28
|
+
let externalSyncModule = null;
|
|
29
|
+
let storageModule = null;
|
|
30
|
+
let networkModule = null;
|
|
31
|
+
let reactQueryModule = null;
|
|
32
|
+
let routeEventsModule = null;
|
|
33
|
+
let reduxModule = null;
|
|
34
|
+
let zustandModule = null;
|
|
35
|
+
let jotaiModule = null;
|
|
36
|
+
let eventsModule = null;
|
|
37
|
+
let envModule = null;
|
|
38
|
+
let highlightUpdatesModule = null;
|
|
39
|
+
let debugBordersModule = null;
|
|
40
|
+
let impersonateModule = null;
|
|
41
|
+
let perfMonitorModule = null;
|
|
42
|
+
let expoConstantsModule = null;
|
|
43
|
+
try {
|
|
44
|
+
externalSyncModule = require("@buoy-gg/external-sync");
|
|
45
|
+
} catch {
|
|
46
|
+
// not installed
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
storageModule = require("@buoy-gg/storage");
|
|
50
|
+
} catch {
|
|
51
|
+
// not installed
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
networkModule = require("@buoy-gg/network");
|
|
55
|
+
} catch {
|
|
56
|
+
// not installed
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
reactQueryModule = require("@buoy-gg/react-query");
|
|
60
|
+
} catch {
|
|
61
|
+
// not installed
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
routeEventsModule = require("@buoy-gg/route-events");
|
|
65
|
+
} catch {
|
|
66
|
+
// not installed
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
reduxModule = require("@buoy-gg/redux");
|
|
70
|
+
} catch {
|
|
71
|
+
// not installed
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
zustandModule = require("@buoy-gg/zustand");
|
|
75
|
+
} catch {
|
|
76
|
+
// not installed
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
jotaiModule = require("@buoy-gg/jotai");
|
|
80
|
+
} catch {
|
|
81
|
+
// not installed
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
eventsModule = require("@buoy-gg/events");
|
|
85
|
+
} catch {
|
|
86
|
+
// not installed
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
envModule = require("@buoy-gg/env");
|
|
90
|
+
} catch {
|
|
91
|
+
// not installed
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
highlightUpdatesModule = require("@buoy-gg/highlight-updates");
|
|
95
|
+
} catch {
|
|
96
|
+
// not installed
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
debugBordersModule = require("@buoy-gg/debug-borders");
|
|
100
|
+
} catch {
|
|
101
|
+
// not installed
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
impersonateModule = require("@buoy-gg/impersonate");
|
|
105
|
+
} catch {
|
|
106
|
+
// not installed
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
perfMonitorModule = require("@buoy-gg/perf-monitor");
|
|
110
|
+
} catch {
|
|
111
|
+
// not installed
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
expoConstantsModule = require("expo-constants");
|
|
115
|
+
} catch {
|
|
116
|
+
// not installed (RN CLI apps)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Whether zero-config sync can run (the external-sync package is installed). */
|
|
120
|
+
export function isExternalSyncAvailable() {
|
|
121
|
+
return !!externalSyncModule?.useExternalSyncSocket;
|
|
122
|
+
}
|
|
123
|
+
function getAppName() {
|
|
124
|
+
const constants = expoConstantsModule?.default ?? expoConstantsModule;
|
|
125
|
+
return constants?.expoConfig?.name ?? constants?.manifest2?.extra?.expoClient?.name ?? null;
|
|
126
|
+
}
|
|
127
|
+
function defaultIdentity() {
|
|
128
|
+
const appName = getAppName();
|
|
129
|
+
const slug = (appName ?? "buoy").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "");
|
|
130
|
+
return {
|
|
131
|
+
deviceName: `${appName ?? "Buoy Device"} (${Platform.OS})`,
|
|
132
|
+
deviceId: `${slug || "buoy"}-${Platform.OS}`
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function AutoExternalSync({
|
|
136
|
+
options,
|
|
137
|
+
requiredEnvVars
|
|
138
|
+
}) {
|
|
139
|
+
const {
|
|
140
|
+
useExternalSyncSocket,
|
|
141
|
+
useExternalSync
|
|
142
|
+
} = externalSyncModule;
|
|
143
|
+
|
|
144
|
+
// Context-based query adapter; null when there is no QueryClientProvider
|
|
145
|
+
// above FloatingDevTools (or the installed @buoy-gg/react-query predates
|
|
146
|
+
// the hook).
|
|
147
|
+
const queryAdapter = reactQueryModule?.useReactQuerySyncAdapter ? reactQueryModule.useReactQuerySyncAdapter() : null;
|
|
148
|
+
const identity = useMemo(defaultIdentity, []);
|
|
149
|
+
const deviceId = options?.deviceId ?? identity.deviceId;
|
|
150
|
+
const {
|
|
151
|
+
socket
|
|
152
|
+
} = useExternalSyncSocket({
|
|
153
|
+
deviceName: options?.deviceName ?? identity.deviceName,
|
|
154
|
+
socketURL: options?.socketURL ?? "http://localhost:42831",
|
|
155
|
+
persistentDeviceId: deviceId,
|
|
156
|
+
platform: Platform.OS,
|
|
157
|
+
enableLogs: options?.enableLogs
|
|
158
|
+
});
|
|
159
|
+
const tools = useMemo(() => {
|
|
160
|
+
const map = {};
|
|
161
|
+
if (storageModule?.storageSyncAdapter) {
|
|
162
|
+
map.storage = storageModule.storageSyncAdapter;
|
|
163
|
+
}
|
|
164
|
+
if (networkModule?.networkSyncAdapter) {
|
|
165
|
+
map.network = networkModule.networkSyncAdapter;
|
|
166
|
+
}
|
|
167
|
+
if (queryAdapter) {
|
|
168
|
+
map.query = queryAdapter;
|
|
169
|
+
}
|
|
170
|
+
if (routeEventsModule?.routeEventsSyncAdapter) {
|
|
171
|
+
map["route-events"] = routeEventsModule.routeEventsSyncAdapter;
|
|
172
|
+
}
|
|
173
|
+
if (reduxModule?.reduxSyncAdapter) {
|
|
174
|
+
map.redux = reduxModule.reduxSyncAdapter;
|
|
175
|
+
}
|
|
176
|
+
if (zustandModule?.zustandSyncAdapter) {
|
|
177
|
+
map.zustand = zustandModule.zustandSyncAdapter;
|
|
178
|
+
}
|
|
179
|
+
if (jotaiModule?.jotaiSyncAdapter) {
|
|
180
|
+
map.jotai = jotaiModule.jotaiSyncAdapter;
|
|
181
|
+
}
|
|
182
|
+
if (eventsModule?.eventsSyncAdapter) {
|
|
183
|
+
map.events = eventsModule.eventsSyncAdapter;
|
|
184
|
+
}
|
|
185
|
+
if (envModule?.createEnvSyncAdapter) {
|
|
186
|
+
map.env = envModule.createEnvSyncAdapter(requiredEnvVars ?? []);
|
|
187
|
+
}
|
|
188
|
+
if (highlightUpdatesModule?.highlightUpdatesSyncAdapter) {
|
|
189
|
+
map["highlight-updates"] = highlightUpdatesModule.highlightUpdatesSyncAdapter;
|
|
190
|
+
}
|
|
191
|
+
if (debugBordersModule?.debugBordersSyncAdapter) {
|
|
192
|
+
map["debug-borders"] = debugBordersModule.debugBordersSyncAdapter;
|
|
193
|
+
}
|
|
194
|
+
if (impersonateModule?.impersonateSyncAdapter) {
|
|
195
|
+
map.impersonate = impersonateModule.impersonateSyncAdapter;
|
|
196
|
+
}
|
|
197
|
+
if (perfMonitorModule?.perfMonitorSyncAdapter) {
|
|
198
|
+
map["perf-monitor"] = perfMonitorModule.perfMonitorSyncAdapter;
|
|
199
|
+
}
|
|
200
|
+
return map;
|
|
201
|
+
}, [queryAdapter, requiredEnvVars]);
|
|
202
|
+
useExternalSync({
|
|
203
|
+
tools,
|
|
204
|
+
socket,
|
|
205
|
+
deviceId,
|
|
206
|
+
enableLogs: options?.enableLogs
|
|
207
|
+
});
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* This is a union type of all auto-discovered tool IDs.
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
//
|
|
26
|
+
// Benchmark recording modal (@buoy-gg/perf-monitor)
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Special floating-only tool IDs that only appear in the floating bubble row.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
-
import { Pressable, StyleSheet, View,
|
|
4
|
+
import { Pressable, StyleSheet, View, useWindowDimensions, Text, Animated, Easing } from "react-native";
|
|
5
|
+
import { absoluteFill } from "@buoy-gg/shared-ui";
|
|
5
6
|
// Icons are provided by installedApps; no direct icon imports here.
|
|
6
7
|
import { DialIcon } from "./DialIcon.js";
|
|
7
8
|
import { DialPagination } from "./DialPagination.js";
|
|
@@ -11,19 +12,13 @@ import { DevToolsSettingsModal, useDevToolsSettings } from "../DevToolsSettingsM
|
|
|
11
12
|
import { useIsPro } from "@buoy-gg/license";
|
|
12
13
|
import { useAppHost } from "../AppHost.js";
|
|
13
14
|
import { OnboardingTooltip } from "./OnboardingTooltip.js";
|
|
14
|
-
import { getDialLayout, MAX_DIAL_SLOTS, dialAnimationConfig, dialColors } from "@buoy-gg/floating-tools-core";
|
|
15
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
16
|
-
const {
|
|
17
|
-
width: SCREEN_WIDTH,
|
|
18
|
-
height: SCREEN_HEIGHT
|
|
19
|
-
} = Dimensions.get("window");
|
|
15
|
+
import { getDialLayout, MAX_DIAL_SLOTS, DIAL_BUTTON_SIZE, dialAnimationConfig, dialColors } from "@buoy-gg/floating-tools-core";
|
|
20
16
|
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
const
|
|
26
|
-
const BUTTON_SIZE = layout.buttonSize;
|
|
17
|
+
// The circle size depends on the live window width, so it's computed inside
|
|
18
|
+
// the component via useWindowDimensions — a module-scope Dimensions.get
|
|
19
|
+
// snapshot goes stale when the window resizes after load (web/desktop).
|
|
20
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
21
|
+
const BUTTON_SIZE = DIAL_BUTTON_SIZE;
|
|
27
22
|
const ONBOARDING_STORAGE_KEY = "@react_buoy_settings_tooltip_shown";
|
|
28
23
|
/** A non-interactive placeholder used to fill out the last dial page. */
|
|
29
24
|
const createEmptySlot = slotIndex => ({
|
|
@@ -55,6 +50,33 @@ export const DialDevTools = ({
|
|
|
55
50
|
} = useAppHost();
|
|
56
51
|
const isPro = useIsPro();
|
|
57
52
|
|
|
53
|
+
// Live window size — keeps the dial centered and sized correctly when the
|
|
54
|
+
// window resizes (Electron/web) or the device rotates.
|
|
55
|
+
const {
|
|
56
|
+
width: screenWidth,
|
|
57
|
+
height: screenHeight
|
|
58
|
+
} = useWindowDimensions();
|
|
59
|
+
const circleSize = getDialLayout({
|
|
60
|
+
screenWidth
|
|
61
|
+
}).circleSize;
|
|
62
|
+
const sizeStyles = useMemo(() => ({
|
|
63
|
+
parent: {
|
|
64
|
+
width: circleSize,
|
|
65
|
+
height: circleSize
|
|
66
|
+
},
|
|
67
|
+
circle: {
|
|
68
|
+
width: circleSize,
|
|
69
|
+
height: circleSize,
|
|
70
|
+
borderRadius: circleSize / 2
|
|
71
|
+
},
|
|
72
|
+
rounded: {
|
|
73
|
+
borderRadius: circleSize / 2
|
|
74
|
+
},
|
|
75
|
+
gridLine: {
|
|
76
|
+
width: circleSize
|
|
77
|
+
}
|
|
78
|
+
}), [circleSize]);
|
|
79
|
+
|
|
58
80
|
// Load persisted settings modal state on mount
|
|
59
81
|
useEffect(() => {
|
|
60
82
|
const loadSettingsModalState = async () => {
|
|
@@ -480,13 +502,13 @@ export const DialDevTools = ({
|
|
|
480
502
|
children: [/*#__PURE__*/_jsx(Animated.View, {
|
|
481
503
|
style: [styles.backdrop, backdropAnimatedStyle],
|
|
482
504
|
children: /*#__PURE__*/_jsx(Pressable, {
|
|
483
|
-
style:
|
|
505
|
+
style: absoluteFill,
|
|
484
506
|
onPress: handleClose
|
|
485
507
|
})
|
|
486
508
|
}), /*#__PURE__*/_jsxs(Animated.View, {
|
|
487
|
-
style: [styles.parent, {
|
|
509
|
+
style: [styles.parent, sizeStyles.parent, {
|
|
488
510
|
position: "absolute",
|
|
489
|
-
left: (
|
|
511
|
+
left: (screenWidth - circleSize) / 2,
|
|
490
512
|
bottom: 80,
|
|
491
513
|
transform: [{
|
|
492
514
|
scale: dialScale
|
|
@@ -498,21 +520,21 @@ export const DialDevTools = ({
|
|
|
498
520
|
}]
|
|
499
521
|
}],
|
|
500
522
|
children: [/*#__PURE__*/_jsxs(Animated.View, {
|
|
501
|
-
style: styles.circle,
|
|
523
|
+
style: [styles.circle, sizeStyles.circle],
|
|
502
524
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
503
|
-
style: styles.gradientBackground,
|
|
525
|
+
style: [styles.gradientBackground, sizeStyles.rounded],
|
|
504
526
|
children: [/*#__PURE__*/_jsx(View, {
|
|
505
|
-
style: styles.gradientLayer1
|
|
527
|
+
style: [styles.gradientLayer1, sizeStyles.rounded]
|
|
506
528
|
}), /*#__PURE__*/_jsx(View, {
|
|
507
|
-
style: styles.gradientLayer2
|
|
529
|
+
style: [styles.gradientLayer2, sizeStyles.rounded]
|
|
508
530
|
}), /*#__PURE__*/_jsx(View, {
|
|
509
|
-
style: styles.gradientLayer3
|
|
531
|
+
style: [styles.gradientLayer3, sizeStyles.rounded]
|
|
510
532
|
}), /*#__PURE__*/_jsx(View, {
|
|
511
533
|
style: styles.gridPattern,
|
|
512
534
|
children: Array.from({
|
|
513
535
|
length: 6
|
|
514
536
|
}).map((_, i) => /*#__PURE__*/_jsx(View, {
|
|
515
|
-
style: [styles.gridLine, {
|
|
537
|
+
style: [styles.gridLine, sizeStyles.gridLine, {
|
|
516
538
|
transform: [{
|
|
517
539
|
rotate: `${i * 60}deg`
|
|
518
540
|
}]
|
|
@@ -603,11 +625,11 @@ export const DialDevTools = ({
|
|
|
603
625
|
onNext: () => handlePageChange(safePage + 1),
|
|
604
626
|
animatedStyle: {
|
|
605
627
|
position: "absolute",
|
|
606
|
-
left: (
|
|
607
|
-
// Circle's bottom edge sits at bottom: 80 ->
|
|
628
|
+
left: (screenWidth - circleSize) / 2,
|
|
629
|
+
// Circle's bottom edge sits at bottom: 80 -> screenHeight - 80
|
|
608
630
|
// from the top. Place the pager 16px below that edge.
|
|
609
|
-
top:
|
|
610
|
-
width:
|
|
631
|
+
top: screenHeight - 80 + 16,
|
|
632
|
+
width: circleSize,
|
|
611
633
|
opacity: dialScale,
|
|
612
634
|
transform: [{
|
|
613
635
|
scale: dialScale
|
|
@@ -628,23 +650,20 @@ export const DialDevTools = ({
|
|
|
628
650
|
};
|
|
629
651
|
const styles = StyleSheet.create({
|
|
630
652
|
container: {
|
|
631
|
-
...
|
|
653
|
+
...absoluteFill,
|
|
632
654
|
zIndex: 9999
|
|
633
655
|
},
|
|
634
656
|
backdrop: {
|
|
635
|
-
...
|
|
657
|
+
...absoluteFill,
|
|
636
658
|
backgroundColor: dialColors.dialBackdrop
|
|
637
659
|
},
|
|
660
|
+
// width/height/borderRadius for the circle pieces come from sizeStyles —
|
|
661
|
+
// they track the live window width.
|
|
638
662
|
parent: {
|
|
639
|
-
width: CIRCLE_SIZE,
|
|
640
|
-
height: CIRCLE_SIZE,
|
|
641
663
|
alignItems: "center",
|
|
642
664
|
justifyContent: "center"
|
|
643
665
|
},
|
|
644
666
|
circle: {
|
|
645
|
-
width: CIRCLE_SIZE,
|
|
646
|
-
height: CIRCLE_SIZE,
|
|
647
|
-
borderRadius: CIRCLE_SIZE / 2,
|
|
648
667
|
position: "absolute",
|
|
649
668
|
backgroundColor: "transparent",
|
|
650
669
|
borderWidth: 1,
|
|
@@ -661,41 +680,36 @@ const styles = StyleSheet.create({
|
|
|
661
680
|
gradientBackground: {
|
|
662
681
|
width: "100%",
|
|
663
682
|
height: "100%",
|
|
664
|
-
borderRadius: CIRCLE_SIZE / 2,
|
|
665
683
|
position: "relative",
|
|
666
684
|
backgroundColor: dialColors.dialBackground,
|
|
667
685
|
overflow: "hidden"
|
|
668
686
|
},
|
|
669
687
|
gradientLayer1: {
|
|
670
|
-
...
|
|
688
|
+
...absoluteFill,
|
|
671
689
|
backgroundColor: dialColors.dialGradient1,
|
|
672
|
-
opacity: 0.6
|
|
673
|
-
borderRadius: CIRCLE_SIZE / 2
|
|
690
|
+
opacity: 0.6
|
|
674
691
|
},
|
|
675
692
|
gradientLayer2: {
|
|
676
|
-
...
|
|
693
|
+
...absoluteFill,
|
|
677
694
|
backgroundColor: dialColors.dialGradient2,
|
|
678
695
|
opacity: 0.4,
|
|
679
696
|
top: "30%",
|
|
680
|
-
left: "30%"
|
|
681
|
-
borderRadius: CIRCLE_SIZE / 2
|
|
697
|
+
left: "30%"
|
|
682
698
|
},
|
|
683
699
|
gradientLayer3: {
|
|
684
|
-
...
|
|
700
|
+
...absoluteFill,
|
|
685
701
|
backgroundColor: dialColors.dialGradient3,
|
|
686
702
|
opacity: 0.3,
|
|
687
703
|
top: "50%",
|
|
688
|
-
left: "50%"
|
|
689
|
-
borderRadius: CIRCLE_SIZE / 2
|
|
704
|
+
left: "50%"
|
|
690
705
|
},
|
|
691
706
|
gridPattern: {
|
|
692
|
-
...
|
|
707
|
+
...absoluteFill,
|
|
693
708
|
alignItems: "center",
|
|
694
709
|
justifyContent: "center"
|
|
695
710
|
},
|
|
696
711
|
gridLine: {
|
|
697
712
|
position: "absolute",
|
|
698
|
-
width: CIRCLE_SIZE,
|
|
699
713
|
height: 1,
|
|
700
714
|
backgroundColor: dialColors.dialGridLine
|
|
701
715
|
},
|
|
@@ -721,13 +735,13 @@ const styles = StyleSheet.create({
|
|
|
721
735
|
overflow: "hidden"
|
|
722
736
|
},
|
|
723
737
|
buttonGradientLayer1: {
|
|
724
|
-
...
|
|
738
|
+
...absoluteFill,
|
|
725
739
|
backgroundColor: dialColors.dialGradient1,
|
|
726
740
|
opacity: 0.5,
|
|
727
741
|
borderRadius: BUTTON_SIZE
|
|
728
742
|
},
|
|
729
743
|
buttonGradientLayer2: {
|
|
730
|
-
...
|
|
744
|
+
...absoluteFill,
|
|
731
745
|
backgroundColor: dialColors.dialGradient2,
|
|
732
746
|
opacity: 0.3,
|
|
733
747
|
top: "20%",
|
|
@@ -735,7 +749,7 @@ const styles = StyleSheet.create({
|
|
|
735
749
|
borderRadius: BUTTON_SIZE
|
|
736
750
|
},
|
|
737
751
|
buttonGradientLayer3: {
|
|
738
|
-
...
|
|
752
|
+
...absoluteFill,
|
|
739
753
|
backgroundColor: dialColors.dialGradient3,
|
|
740
754
|
opacity: 0.2,
|
|
741
755
|
top: "40%",
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useMemo, useRef } from "react";
|
|
4
|
-
import { StyleSheet, Pressable, View, Text,
|
|
5
|
-
import { getDialLayout, getIconPosition, getIconStaggerInputRange, DIAL_START_ANGLE, dialColors, dialStyles, dialAnimationConfig } from "@buoy-gg/floating-tools-core";
|
|
6
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
-
const {
|
|
8
|
-
width: SCREEN_WIDTH
|
|
9
|
-
} = Dimensions.get("window");
|
|
4
|
+
import { StyleSheet, Pressable, View, Text, useWindowDimensions, Animated } from "react-native";
|
|
5
|
+
import { getDialLayout, getIconPosition, getIconStaggerInputRange, DIAL_START_ANGLE, DIAL_ICON_SIZE, dialColors, dialStyles, dialAnimationConfig } from "@buoy-gg/floating-tools-core";
|
|
10
6
|
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const VIEW_SIZE = layout.iconSize;
|
|
16
|
-
const CIRCLE_RADIUS = layout.circleRadius;
|
|
7
|
+
// The circle radius depends on the live window width and is computed inside
|
|
8
|
+
// the component (must match DialDevTools' circle, which does the same).
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
const VIEW_SIZE = DIAL_ICON_SIZE;
|
|
17
11
|
export const DialIcon = ({
|
|
18
12
|
index,
|
|
19
13
|
icon,
|
|
@@ -24,6 +18,12 @@ export const DialIcon = ({
|
|
|
24
18
|
}) => {
|
|
25
19
|
// Animation values - using interpolation for better performance
|
|
26
20
|
const scale = useRef(new Animated.Value(1)).current;
|
|
21
|
+
const {
|
|
22
|
+
width: screenWidth
|
|
23
|
+
} = useWindowDimensions();
|
|
24
|
+
const layout = useMemo(() => getDialLayout({
|
|
25
|
+
screenWidth
|
|
26
|
+
}), [screenWidth]);
|
|
27
27
|
|
|
28
28
|
// Hover animation on press in/out - using shared config
|
|
29
29
|
// Fallback values in case dialAnimationConfig hasn't loaded yet
|
|
@@ -119,14 +119,14 @@ export const DialIcon = ({
|
|
|
119
119
|
itemOpacity,
|
|
120
120
|
progressScale: staggeredProgress
|
|
121
121
|
};
|
|
122
|
-
}, [index, totalIcons, iconsProgress]);
|
|
122
|
+
}, [index, totalIcons, iconsProgress, layout]);
|
|
123
123
|
|
|
124
124
|
// Main animated style for position and appearance
|
|
125
125
|
const animatedStyle = {
|
|
126
126
|
position: "absolute",
|
|
127
|
-
left:
|
|
127
|
+
left: layout.circleRadius - VIEW_SIZE / 2,
|
|
128
128
|
// Center position
|
|
129
|
-
top:
|
|
129
|
+
top: layout.circleRadius - VIEW_SIZE / 2,
|
|
130
130
|
// Center position
|
|
131
131
|
opacity: motion.itemOpacity,
|
|
132
132
|
transform: [{
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef } from "react";
|
|
4
4
|
import { Animated, Pressable, StyleSheet, Text, View, Easing } from "react-native";
|
|
5
|
+
import { absoluteFill } from "@buoy-gg/shared-ui";
|
|
5
6
|
import { dialColors, buoyColors } from "@buoy-gg/shared-ui";
|
|
6
7
|
import { calculateTooltipPosition, ARROW_BOTTOM_OFFSET, ARROW_HEIGHT } from "./onboardingConstants.js";
|
|
7
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -128,7 +129,7 @@ export const OnboardingTooltip = ({
|
|
|
128
129
|
};
|
|
129
130
|
const styles = StyleSheet.create({
|
|
130
131
|
container: {
|
|
131
|
-
...
|
|
132
|
+
...absoluteFill,
|
|
132
133
|
alignItems: "center",
|
|
133
134
|
justifyContent: "center",
|
|
134
135
|
pointerEvents: "box-none"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAE,MAAM,OAAO,CAAC;AAsJtE;;;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,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;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;KAChC,EAAE,CAAC;CACL;AA2DD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CA+8BhE,CAAC;AAwDF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { type FloatingMenuProps } from "./FloatingMenu";
|
|
3
3
|
import type { InstalledApp } from "./types";
|
|
4
4
|
import { type DefaultFloatingConfig, type DefaultDialConfig } from "./defaultConfig";
|
|
5
|
+
import { type ExternalSyncOptions } from "./autoExternalSync";
|
|
5
6
|
/**
|
|
6
7
|
* Environment variable configuration
|
|
7
8
|
*
|
|
@@ -229,6 +230,23 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
|
|
|
229
230
|
* ```
|
|
230
231
|
*/
|
|
231
232
|
zustandStores?: Record<string, any>;
|
|
233
|
+
/**
|
|
234
|
+
* Zero-config sync to the Buoy Desktop dashboard.
|
|
235
|
+
*
|
|
236
|
+
* Enabled by default in dev builds whenever @buoy-gg/external-sync is
|
|
237
|
+
* installed: connects to the desktop broker (localhost:42831 — a silent
|
|
238
|
+
* no-op when the desktop app isn't running) and registers a sync adapter
|
|
239
|
+
* for every installed tool automatically. Nothing else to render.
|
|
240
|
+
*
|
|
241
|
+
* Pass `false` to disable, or options to customize the device identity /
|
|
242
|
+
* broker URL:
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```tsx
|
|
246
|
+
* <FloatingDevTools externalSync={{ deviceName: "My App (ios)" }} />
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
externalSync?: boolean | ExternalSyncOptions;
|
|
232
250
|
}
|
|
233
251
|
/**
|
|
234
252
|
* Unified floating development tools component with automatic preset discovery.
|
|
@@ -284,5 +302,5 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
|
|
|
284
302
|
*
|
|
285
303
|
* @param props - FloatingDevTools props
|
|
286
304
|
*/
|
|
287
|
-
export declare const FloatingDevTools: ({ apps, requiredEnvVars, requiredStorageKeys, children, disableHints, defaultFloatingTools, defaultDialTools, requireLicense, licenseKey: licenseKeyProp, zustandStores, environment, ...props }: FloatingDevToolsProps) => React.JSX.Element | null;
|
|
305
|
+
export declare const FloatingDevTools: ({ apps, requiredEnvVars, requiredStorageKeys, children, disableHints, defaultFloatingTools, defaultDialTools, requireLicense, licenseKey: licenseKeyProp, zustandStores, environment, externalSync, ...props }: FloatingDevToolsProps) => React.JSX.Element | null;
|
|
288
306
|
//# sourceMappingURL=FloatingDevTools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,gNAc9B,qBAAqB,6BAqPvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAqD,MAAM,OAAO,CAAC;AASrF,OAAO,EAAiB,QAAQ,EAAc,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;
|
|
1
|
+
{"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAqD,MAAM,OAAO,CAAC;AASrF,OAAO,EAAiB,QAAQ,EAAc,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;AAWD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAwU9C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EnvVarConfig } from "./FloatingDevTools";
|
|
2
|
+
/** Whether zero-config sync can run (the external-sync package is installed). */
|
|
3
|
+
export declare function isExternalSyncAvailable(): boolean;
|
|
4
|
+
export interface ExternalSyncOptions {
|
|
5
|
+
/** Broker URL. @default "http://localhost:42831" (the Buoy Desktop app) */
|
|
6
|
+
socketURL?: string;
|
|
7
|
+
/** Shown in the desktop device list. @default "<app name> (<platform>)" */
|
|
8
|
+
deviceName?: string;
|
|
9
|
+
/** Stable device identity across restarts. @default "<app-slug>-<platform>" */
|
|
10
|
+
deviceId?: string;
|
|
11
|
+
/** @default false */
|
|
12
|
+
enableLogs?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface AutoExternalSyncProps {
|
|
15
|
+
options?: ExternalSyncOptions;
|
|
16
|
+
/** FloatingDevTools' requiredEnvVars — reused for the env tool's adapter. */
|
|
17
|
+
requiredEnvVars?: EnvVarConfig[];
|
|
18
|
+
}
|
|
19
|
+
export declare function AutoExternalSync({ options, requiredEnvVars, }: AutoExternalSyncProps): null;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=autoExternalSync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAwGvD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,GAChB,EAAE,qBAAqB,QA4EvB"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* All known tool IDs that can appear in the floating menu or dial menu.
|
|
20
20
|
* This is a union type of all auto-discovered tool IDs.
|
|
21
21
|
*/
|
|
22
|
-
export type BuiltInToolId = 'env' | 'network' | 'storage' | 'query' | 'query-wifi-toggle' | 'route-events' | 'debug-borders' | 'highlight-updates' | 'highlight-updates-modal';
|
|
22
|
+
export type BuiltInToolId = 'env' | 'network' | 'storage' | 'query' | 'query-wifi-toggle' | 'route-events' | 'debug-borders' | 'highlight-updates' | 'highlight-updates-modal' | 'redux' | 'zustand' | 'jotai' | 'events' | 'image-overlay' | 'perf-monitor' | 'perf-monitor-modal';
|
|
23
23
|
/**
|
|
24
24
|
* Special floating-only tool IDs that only appear in the floating bubble row.
|
|
25
25
|
*/
|