@buoy-gg/core 1.7.8 → 2.1.1

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 (31) hide show
  1. package/lib/commonjs/floatingMenu/AppHost.js +2 -2
  2. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +5 -5
  3. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -2
  4. package/lib/commonjs/floatingMenu/FloatingMenu.js +4 -4
  5. package/lib/commonjs/floatingMenu/MinimizedToolsContext.js +2 -2
  6. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +15 -0
  7. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +4 -4
  8. package/lib/commonjs/floatingMenu/floatingTools.js +218 -38
  9. package/lib/module/floatingMenu/AppHost.js +3 -3
  10. package/lib/module/floatingMenu/DevToolsSettingsModal.js +7 -7
  11. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -2
  12. package/lib/module/floatingMenu/FloatingMenu.js +5 -5
  13. package/lib/module/floatingMenu/MinimizedToolsContext.js +3 -3
  14. package/lib/module/floatingMenu/autoDiscoverPresets.js +15 -0
  15. package/lib/module/floatingMenu/dial/DialDevTools.js +5 -5
  16. package/lib/module/floatingMenu/floatingTools.js +219 -39
  17. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
  18. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +1 -1
  19. package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +1 -1
  20. package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
  21. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
  22. package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts +1 -1
  23. package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts.map +1 -1
  24. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
  25. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +1 -1
  26. package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +1 -1
  27. package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
  28. package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
  29. package/lib/typescript/module/floatingMenu/floatingTools.d.ts +1 -1
  30. package/lib/typescript/module/floatingMenu/floatingTools.d.ts.map +1 -1
  31. package/package.json +5 -5
@@ -4,7 +4,7 @@ import React, { useEffect, useMemo, useRef, useState } from "react";
4
4
  import { TouchableOpacity, StyleSheet, View, Dimensions } from "react-native";
5
5
  import { FloatingTools, UserStatus } from "./floatingTools";
6
6
  import { DialDevTools } from "./dial/DialDevTools";
7
- import { EnvironmentIndicator, safeGetItem, safeSetItem, useHintsDisabled, devToolsStorageKeys, buoyColors } from "@buoy-gg/shared-ui";
7
+ import { EnvironmentIndicator, persistentStorage, useHintsDisabled, devToolsStorageKeys, buoyColors } from "@buoy-gg/shared-ui";
8
8
  import { useDevToolsSettings } from "./DevToolsSettingsModal";
9
9
  import { useAppHost } from "./AppHost.js";
10
10
  import { useDevToolsVisibility } from "./DevToolsVisibilityContext.js";
@@ -48,7 +48,7 @@ export const FloatingMenu = ({
48
48
  useEffect(() => {
49
49
  const loadDialState = async () => {
50
50
  try {
51
- const savedDialOpen = await safeGetItem(devToolsStorageKeys.dial.isOpen());
51
+ const savedDialOpen = await persistentStorage.getItem(devToolsStorageKeys.dial.isOpen());
52
52
  if (savedDialOpen === "true") {
53
53
  setShowDial(true);
54
54
  }
@@ -65,7 +65,7 @@ export const FloatingMenu = ({
65
65
  useEffect(() => {
66
66
  // Only persist after initial state is loaded to avoid overwriting with default
67
67
  if (!dialStateLoaded) return;
68
- safeSetItem(devToolsStorageKeys.dial.isOpen(), showDial ? "true" : "false").catch(error => {
68
+ persistentStorage.setItem(devToolsStorageKeys.dial.isOpen(), showDial ? "true" : "false").catch(error => {
69
69
  // Failed to save dial state - continue without persistence
70
70
  console.warn("Failed to save dial state:", error);
71
71
  });
@@ -92,7 +92,7 @@ export const FloatingMenu = ({
92
92
  }
93
93
  const checkOnboarding = async () => {
94
94
  try {
95
- const hasSeenOnboarding = await safeGetItem(FLOATING_MENU_ONBOARDING_KEY);
95
+ const hasSeenOnboarding = await persistentStorage.getItem(FLOATING_MENU_ONBOARDING_KEY);
96
96
  if (!hasSeenOnboarding) {
97
97
  // Small delay to let the UI settle before showing tooltip
98
98
  setTimeout(() => {
@@ -197,7 +197,7 @@ export const FloatingMenu = ({
197
197
  setOnboardingStep(null);
198
198
 
199
199
  // Save to storage asynchronously in the background
200
- safeSetItem(FLOATING_MENU_ONBOARDING_KEY, "true").catch(error => {
200
+ persistentStorage.setItem(FLOATING_MENU_ONBOARDING_KEY, "true").catch(error => {
201
201
  // Silently fail - user already saw onboarding, just won't persist
202
202
  console.warn("Failed to save onboarding state:", error);
203
203
  });
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React, { createContext, useContext, useState, useCallback, useEffect, useRef, useMemo } from "react";
4
4
  import { Dimensions } from "react-native";
5
- import { safeGetItem, safeSetItem, getSafeAreaInsets } from "@buoy-gg/shared-ui";
5
+ import { persistentStorage, getSafeAreaInsets } from "@buoy-gg/shared-ui";
6
6
 
7
7
  // ============================================================================
8
8
  // Types
@@ -107,7 +107,7 @@ export function MinimizedToolsProvider({
107
107
  useEffect(() => {
108
108
  const restoreMinimizedTools = async () => {
109
109
  try {
110
- const saved = await safeGetItem(STORAGE_KEY);
110
+ const saved = await persistentStorage.getItem(STORAGE_KEY);
111
111
  if (saved) {
112
112
  const serialized = JSON.parse(saved);
113
113
  // Reconstruct tools with icons
@@ -137,7 +137,7 @@ export function MinimizedToolsProvider({
137
137
  icon,
138
138
  ...rest
139
139
  }) => rest);
140
- safeSetItem(STORAGE_KEY, JSON.stringify(serialized));
140
+ persistentStorage.setItem(STORAGE_KEY, JSON.stringify(serialized));
141
141
  }, PERSISTENCE_DELAY);
142
142
  return () => {
143
143
  if (persistenceTimeoutRef.current) {
@@ -189,6 +189,21 @@ export function autoDiscoverPresets() {
189
189
  return null;
190
190
  }
191
191
  }
192
+ },
193
+ // Events Timeline
194
+ {
195
+ name: "@buoy-gg/events",
196
+ loader: () => {
197
+ try {
198
+ // @ts-ignore - Dynamic import that may not exist
199
+ const {
200
+ eventsToolPreset
201
+ } = require("@buoy-gg/events");
202
+ return eventsToolPreset;
203
+ } catch {
204
+ return null;
205
+ }
206
+ }
192
207
  }];
193
208
 
194
209
  // Attempt to load each preset
@@ -4,7 +4,7 @@ import { useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Pressable, StyleSheet, View, Dimensions, Text, Animated, Easing } from "react-native";
5
5
  // Icons are provided by installedApps; no direct icon imports here.
6
6
  import { DialIcon } from "./DialIcon.js";
7
- import { safeGetItem, safeSetItem, useHintsDisabled, devToolsStorageKeys, buoyColors } from "@buoy-gg/shared-ui";
7
+ import { persistentStorage, useHintsDisabled, devToolsStorageKeys, buoyColors } from "@buoy-gg/shared-ui";
8
8
  import { DevToolsSettingsModal, useDevToolsSettings } from "../DevToolsSettingsModal";
9
9
  import { useIsPro } from "@buoy-gg/license";
10
10
  import { useAppHost } from "../AppHost.js";
@@ -55,7 +55,7 @@ export const DialDevTools = ({
55
55
  useEffect(() => {
56
56
  const loadSettingsModalState = async () => {
57
57
  try {
58
- const savedModalOpen = await safeGetItem(devToolsStorageKeys.settings.modalOpen());
58
+ const savedModalOpen = await persistentStorage.getItem(devToolsStorageKeys.settings.modalOpen());
59
59
  if (savedModalOpen === "true") {
60
60
  setIsSettingsModalOpen(true);
61
61
  }
@@ -72,7 +72,7 @@ export const DialDevTools = ({
72
72
  useEffect(() => {
73
73
  // Only persist after initial state is loaded to avoid overwriting with default
74
74
  if (!settingsModalStateLoaded) return;
75
- safeSetItem(devToolsStorageKeys.settings.modalOpen(), isSettingsModalOpen ? "true" : "false").catch(error => {
75
+ persistentStorage.setItem(devToolsStorageKeys.settings.modalOpen(), isSettingsModalOpen ? "true" : "false").catch(error => {
76
76
  // Failed to save settings modal state - continue without persistence
77
77
  console.warn("Failed to save settings modal state:", error);
78
78
  });
@@ -107,7 +107,7 @@ export const DialDevTools = ({
107
107
  }
108
108
  const checkOnboarding = async () => {
109
109
  try {
110
- const hasSeenTooltip = await safeGetItem(ONBOARDING_STORAGE_KEY);
110
+ const hasSeenTooltip = await persistentStorage.getItem(ONBOARDING_STORAGE_KEY);
111
111
  if (!hasSeenTooltip) {
112
112
  // Small delay to let the entrance animations play first
113
113
  setTimeout(() => {
@@ -406,7 +406,7 @@ export const DialDevTools = ({
406
406
  setShowOnboardingTooltip(false);
407
407
 
408
408
  // Save to storage asynchronously in the background
409
- safeSetItem(ONBOARDING_STORAGE_KEY, "true").catch(error => {
409
+ persistentStorage.setItem(ONBOARDING_STORAGE_KEY, "true").catch(error => {
410
410
  // Silently fail - user already saw onboarding, just won't persist
411
411
  console.warn("Failed to save dial onboarding state:", error);
412
412
  });
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useEffect, useMemo, useRef, useState, useContext, createContext, useCallback, Children } from "react";
4
4
  import { Animated, Dimensions, View, Text, TouchableOpacity } from "react-native";
5
- import { getSafeAreaInsets, safeGetItem, safeSetItem, buoyColors } from "@buoy-gg/shared-ui";
5
+ import { getSafeAreaInsets, persistentStorage, buoyColors } from "@buoy-gg/shared-ui";
6
6
  import { DraggableHeader } from "./DraggableHeader.js";
7
7
  import { useSafeAreaInsets } from "@buoy-gg/shared-ui";
8
8
  import { calculateTargetPosition } from "./dial/onboardingConstants.js";
@@ -100,8 +100,9 @@ const STORAGE_KEYS = {
100
100
  * @param props.enabled - Whether position persistence is enabled
101
101
  * @param props.visibleHandleWidth - Width of visible handle when bubble is hidden
102
102
  * @param props.listenersSuspended - Pause automatic listeners without disabling manual saves
103
+ * @param props.onPositionLoaded - Callback fired once position is loaded and set
103
104
  *
104
- * @returns Object containing position management functions
105
+ * @returns Object containing position management functions and loading state
105
106
  *
106
107
  * @performance Uses debounced saving to avoid excessive storage operations
107
108
  * @performance Validates positions against screen boundaries and safe areas
@@ -112,26 +113,57 @@ function useFloatingToolsPosition({
112
113
  bubbleHeight = 32,
113
114
  enabled = true,
114
115
  visibleHandleWidth = 32,
115
- listenersSuspended = false
116
+ listenersSuspended = false,
117
+ onPositionLoaded
116
118
  }) {
117
- const isInitialized = useRef(false);
119
+ // Use state instead of ref so we can react to changes and prevent races
120
+ const [isInitialized, setIsInitialized] = useState(false);
118
121
  const saveTimeoutRef = useRef(undefined);
122
+ // Track if component is mounted to prevent state updates after unmount
123
+ const isMountedRef = useRef(true);
124
+
125
+ // Cleanup on unmount - cancel any pending saves
126
+ useEffect(() => {
127
+ isMountedRef.current = true;
128
+ return () => {
129
+ isMountedRef.current = false;
130
+ // Clear any pending debounced saves on unmount to prevent saving stale/invalid positions
131
+ if (saveTimeoutRef.current) {
132
+ clearTimeout(saveTimeoutRef.current);
133
+ saveTimeoutRef.current = undefined;
134
+ }
135
+ };
136
+ }, []);
119
137
  const savePosition = useCallback(async (x, y) => {
120
138
  if (!enabled) return;
139
+ // Don't save if component unmounted or position is clearly invalid
140
+ if (!isMountedRef.current) return;
141
+ // Guard against saving invalid positions (e.g., during HMR with stale dimensions)
142
+ const {
143
+ width: screenWidth
144
+ } = Dimensions.get("window");
145
+ if (screenWidth <= 0 || x < 0 || y < 0) return;
121
146
  try {
122
- await Promise.all([safeSetItem(STORAGE_KEYS.BUBBLE_POSITION_X, x.toString()), safeSetItem(STORAGE_KEYS.BUBBLE_POSITION_Y, y.toString())]);
147
+ await Promise.all([persistentStorage.setItem(STORAGE_KEYS.BUBBLE_POSITION_X, x.toString()), persistentStorage.setItem(STORAGE_KEYS.BUBBLE_POSITION_Y, y.toString())]);
123
148
  } catch (error) {
124
149
  // Failed to save position - continue without persistence
125
150
  }
126
151
  }, [enabled]);
127
152
  const debouncedSavePosition = useCallback((x, y) => {
153
+ // Don't schedule saves if unmounted
154
+ if (!isMountedRef.current) return;
128
155
  if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
129
- saveTimeoutRef.current = setTimeout(() => savePosition(x, y), 500);
156
+ saveTimeoutRef.current = setTimeout(() => {
157
+ // Double-check mount status before saving
158
+ if (isMountedRef.current) {
159
+ savePosition(x, y);
160
+ }
161
+ }, 500);
130
162
  }, [savePosition]);
131
163
  const loadPosition = useCallback(async () => {
132
164
  if (!enabled) return null;
133
165
  try {
134
- const [xStr, yStr] = await Promise.all([safeGetItem(STORAGE_KEYS.BUBBLE_POSITION_X), safeGetItem(STORAGE_KEYS.BUBBLE_POSITION_Y)]);
166
+ const [xStr, yStr] = await Promise.all([persistentStorage.getItem(STORAGE_KEYS.BUBBLE_POSITION_X), persistentStorage.getItem(STORAGE_KEYS.BUBBLE_POSITION_Y)]);
135
167
  if (xStr !== null && yStr !== null) {
136
168
  const x = parseFloat(xStr);
137
169
  const y = parseFloat(yStr);
@@ -151,6 +183,16 @@ function useFloatingToolsPosition({
151
183
  height: screenHeight
152
184
  } = Dimensions.get("window");
153
185
  const safeArea = getSafeAreaInsets();
186
+
187
+ // Guard against invalid screen dimensions (can happen during HMR)
188
+ // Return the position as-is but mark as invalid so caller knows not to trust it
189
+ if (screenWidth <= 0 || screenHeight <= 0) {
190
+ return {
191
+ ...position,
192
+ isValid: false
193
+ };
194
+ }
195
+
154
196
  // Prevent going off left, top, and bottom edges with safe area
155
197
  // Allow pushing off-screen to the right so only the grab handle remains visible
156
198
  const minX = safeArea.left; // Respect safe area left
@@ -160,53 +202,103 @@ function useFloatingToolsPosition({
160
202
  const maxY = screenHeight - bubbleHeight - safeArea.bottom; // Respect safe area bottom
161
203
  const clamped = {
162
204
  x: Math.max(minX, Math.min(position.x, maxX)),
163
- y: Math.max(minY, Math.min(position.y, maxY))
205
+ y: Math.max(minY, Math.min(position.y, maxY)),
206
+ isValid: true
164
207
  };
165
208
  return clamped;
166
209
  }, [visibleHandleWidth, bubbleHeight]);
167
210
  useEffect(() => {
168
- if (!enabled || isInitialized.current) return;
211
+ if (!enabled || isInitialized) return;
212
+ let cancelled = false;
169
213
  const restore = async () => {
170
214
  const saved = await loadPosition();
215
+
216
+ // Check if cancelled or unmounted before updating state
217
+ if (cancelled || !isMountedRef.current) return;
218
+ const {
219
+ width: screenWidth,
220
+ height: screenHeight
221
+ } = Dimensions.get("window");
222
+ const safeArea = getSafeAreaInsets();
223
+
224
+ // If dimensions are invalid (HMR scenario), wait and retry
225
+ if (screenWidth <= 0 || screenHeight <= 0) {
226
+ // Schedule a retry after a short delay
227
+ setTimeout(() => {
228
+ if (isMountedRef.current && !cancelled) {
229
+ restore();
230
+ }
231
+ }, 100);
232
+ return;
233
+ }
234
+ let finalPosition;
235
+ let wasHidden = false;
171
236
  if (saved) {
172
237
  const validated = validatePosition(saved);
238
+
239
+ // If validation returned invalid, retry later
240
+ if (!validated.isValid) {
241
+ setTimeout(() => {
242
+ if (isMountedRef.current && !cancelled) {
243
+ restore();
244
+ }
245
+ }, 100);
246
+ return;
247
+ }
248
+
173
249
  // Check if the saved position is out of bounds
174
250
  const wasOutOfBounds = Math.abs(saved.x - validated.x) > 5 || Math.abs(saved.y - validated.y) > 5;
175
251
  if (wasOutOfBounds) {
176
252
  // Save the corrected position
177
253
  await savePosition(validated.x, validated.y);
178
254
  }
179
- animatedPosition.setValue(validated);
255
+ finalPosition = {
256
+ x: validated.x,
257
+ y: validated.y
258
+ };
259
+
260
+ // Check if loaded in hidden state (bubble pushed to right edge)
261
+ wasHidden = validated.x >= screenWidth - visibleHandleWidth - 5;
180
262
  } else {
181
- const {
182
- width: screenWidth,
183
- height: screenHeight
184
- } = Dimensions.get("window");
185
- const safeArea = getSafeAreaInsets();
186
263
  const defaultY = Math.max(safeArea.top + 20, Math.min(100, screenHeight - bubbleHeight - safeArea.bottom));
187
- animatedPosition.setValue({
264
+ finalPosition = {
188
265
  x: screenWidth - bubbleWidth - 20,
189
- y: defaultY // Ensure it's within safe area bounds
190
- });
266
+ y: defaultY
267
+ };
191
268
  }
192
- isInitialized.current = true;
269
+
270
+ // Final mount check before updating
271
+ if (cancelled || !isMountedRef.current) return;
272
+ animatedPosition.setValue(finalPosition);
273
+ setIsInitialized(true);
274
+ onPositionLoaded?.(finalPosition, wasHidden);
193
275
  };
194
276
  restore();
195
- }, [enabled, animatedPosition, loadPosition, validatePosition, savePosition, bubbleWidth, bubbleHeight]);
277
+ return () => {
278
+ cancelled = true;
279
+ };
280
+ }, [enabled, isInitialized, animatedPosition, loadPosition, validatePosition, savePosition, bubbleWidth, bubbleHeight, visibleHandleWidth, onPositionLoaded]);
281
+
282
+ // Listener effect - now properly depends on isInitialized state
196
283
  useEffect(() => {
197
- if (!enabled || !isInitialized.current || listenersSuspended) return;
284
+ // Don't attach listener until position is loaded
285
+ if (!enabled || !isInitialized || listenersSuspended) return;
198
286
  const listener = animatedPosition.addListener(value => {
199
287
  debouncedSavePosition(value.x, value.y);
200
288
  });
201
289
  return () => {
202
290
  animatedPosition.removeListener(listener);
203
- if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
291
+ // Clear debounce timer when listener is removed
292
+ if (saveTimeoutRef.current) {
293
+ clearTimeout(saveTimeoutRef.current);
294
+ saveTimeoutRef.current = undefined;
295
+ }
204
296
  };
205
- }, [enabled, listenersSuspended, animatedPosition, debouncedSavePosition]);
297
+ }, [enabled, isInitialized, listenersSuspended, animatedPosition, debouncedSavePosition]);
206
298
  return {
207
299
  savePosition,
208
300
  loadPosition,
209
- isInitialized: isInitialized.current
301
+ isInitialized
210
302
  };
211
303
  }
212
304
 
@@ -387,26 +479,41 @@ export function FloatingTools({
387
479
 
388
480
  // Track previous pushToSide value to detect transitions
389
481
  const prevPushToSideRef = useRef(pushToSide);
482
+
483
+ // Track previous bubble width for auto-adjustment when tools are added/removed
484
+ const prevBubbleWidthRef = useRef(null);
390
485
  const safeAreaInsets = useSafeAreaInsets();
391
486
  const {
392
487
  width: screenWidth,
393
488
  height: screenHeight
394
489
  } = Dimensions.get("window");
395
490
 
491
+ // Callback when position is loaded - sets hidden state properly without racing
492
+ const handlePositionLoaded = useCallback((position, wasHidden) => {
493
+ if (wasHidden) {
494
+ setIsHidden(true);
495
+ }
496
+ }, []);
497
+
396
498
  // Position persistence (state/IO extracted to hook)
397
499
  const {
398
- savePosition
500
+ savePosition,
501
+ isInitialized: isPositionInitialized
399
502
  } = useFloatingToolsPosition({
400
503
  animatedPosition,
401
504
  bubbleWidth: bubbleSize.width,
402
505
  bubbleHeight: bubbleSize.height,
403
506
  enabled: enablePositionPersistence,
404
507
  visibleHandleWidth: 32,
405
- listenersSuspended: isDragging
508
+ listenersSuspended: isDragging,
509
+ onPositionLoaded: handlePositionLoaded
406
510
  });
407
511
 
408
512
  // Effect to handle pushToSide prop changes
409
513
  useEffect(() => {
514
+ // Don't process pushToSide until position is initialized (when persistence enabled)
515
+ if (enablePositionPersistence && !isPositionInitialized) return;
516
+
410
517
  // Reset user override when pushToSide becomes true (dial/modal opens)
411
518
  // This allows auto-hide to work after user manually showed the menu
412
519
  if (!prevPushToSideRef.current && pushToSide) {
@@ -464,22 +571,77 @@ export function FloatingTools({
464
571
  });
465
572
  }
466
573
  }
467
- }, [pushToSide, isHidden, isDragging, screenWidth, animatedPosition, savePosition]);
574
+ }, [enablePositionPersistence, isPositionInitialized, pushToSide, isHidden, isDragging, screenWidth, animatedPosition, savePosition]);
575
+
576
+ // Hidden state is now set via onPositionLoaded callback - no racing effect needed
468
577
 
469
- // Check if bubble is in hidden position on load
578
+ // Auto-adjust position when bubble width changes (tools added/removed)
579
+ // This keeps the bubble's right edge in the same relative position
470
580
  useEffect(() => {
471
- if (!enablePositionPersistence) return;
472
- const checkHiddenState = () => {
473
- const currentX = animatedPosition.x.__getValue();
474
- // Check if bubble is at the hidden position (showing only grabber)
475
- if (currentX >= screenWidth - 32 - 5) {
476
- setIsHidden(true);
581
+ // Skip if not initialized or first measurement
582
+ if (!isPositionInitialized || prevBubbleWidthRef.current === null) {
583
+ prevBubbleWidthRef.current = bubbleSize.width;
584
+ return;
585
+ }
586
+
587
+ // Skip if currently dragging - let drag handle position
588
+ if (isDragging) {
589
+ prevBubbleWidthRef.current = bubbleSize.width;
590
+ return;
591
+ }
592
+ const prevWidth = prevBubbleWidthRef.current;
593
+ const newWidth = bubbleSize.width;
594
+ const widthDelta = newWidth - prevWidth;
595
+
596
+ // Skip if no significant change (avoid jitter)
597
+ if (Math.abs(widthDelta) < 2) {
598
+ return;
599
+ }
600
+
601
+ // Update ref first
602
+ prevBubbleWidthRef.current = newWidth;
603
+
604
+ // If hidden, only adjust the saved position (not the current animated position)
605
+ if (isHidden) {
606
+ if (savedPositionRef.current) {
607
+ const adjustedX = savedPositionRef.current.x - widthDelta;
608
+ // Clamp to valid bounds
609
+ savedPositionRef.current.x = Math.max(safeAreaInsets.left, Math.min(adjustedX, screenWidth - newWidth - 20));
477
610
  }
478
- };
479
- // Delay check to ensure position is loaded
480
- const timer = setTimeout(checkHiddenState, 100);
481
- return () => clearTimeout(timer);
482
- }, [enablePositionPersistence, animatedPosition, screenWidth]);
611
+ return;
612
+ }
613
+
614
+ // Get current position
615
+ const currentX = animatedPosition.x.__getValue();
616
+ const currentY = animatedPosition.y.__getValue();
617
+
618
+ // Calculate new X position
619
+ // If bubble grew (positive delta), move left (decrease X)
620
+ // If bubble shrunk (negative delta), move right (increase X)
621
+ const newX = currentX - widthDelta;
622
+
623
+ // Validate new position is within bounds
624
+ const clampedX = Math.max(safeAreaInsets.left, Math.min(newX, screenWidth - 32) // Ensure handle still visible
625
+ );
626
+
627
+ // Only animate if position actually changed
628
+ if (Math.abs(clampedX - currentX) > 1) {
629
+ Animated.timing(animatedPosition, {
630
+ toValue: {
631
+ x: clampedX,
632
+ y: currentY
633
+ },
634
+ duration: 150,
635
+ useNativeDriver: false
636
+ }).start(() => {
637
+ savePosition(clampedX, currentY);
638
+ // Update savedPositionRef so show/hide works correctly
639
+ if (savedPositionRef.current) {
640
+ savedPositionRef.current.x = clampedX;
641
+ }
642
+ });
643
+ }
644
+ }, [bubbleSize.width, isPositionInitialized, isDragging, isHidden, animatedPosition, screenWidth, safeAreaInsets.left, savePosition]);
483
645
 
484
646
  // Default position when persistence disabled or during onboarding
485
647
  useEffect(() => {
@@ -590,6 +752,18 @@ export function FloatingTools({
590
752
  // Animate to hidden position (only grabber visible)
591
753
  const hiddenX = screenWidth - 32; // Only show the 32px grabber
592
754
  setIsHidden(true);
755
+
756
+ // Update savedPositionRef to preserve the Y position when dragging while hidden
757
+ // This ensures that when showing, the bubble restores to the new Y position
758
+ if (savedPositionRef.current) {
759
+ savedPositionRef.current.y = currentY;
760
+ } else {
761
+ // If no saved position exists, create one with default visible X
762
+ savedPositionRef.current = {
763
+ x: screenWidth - bubbleSize.width - 20,
764
+ y: currentY
765
+ };
766
+ }
593
767
  Animated.timing(animatedPosition, {
594
768
  toValue: {
595
769
  x: hiddenX,
@@ -690,6 +864,12 @@ export function FloatingTools({
690
864
 
691
865
  // Width for the minimized tools stack - match the drag handle width
692
866
  const minimizedStackWidth = 32;
867
+
868
+ // Don't render until position is initialized (when persistence enabled)
869
+ // This prevents the bubble from appearing at {0,0} before position loads
870
+ if (enablePositionPersistence && !isPositionInitialized) {
871
+ return null;
872
+ }
693
873
  return /*#__PURE__*/_jsx(Animated.View, {
694
874
  style: bubbleStyle,
695
875
  children: /*#__PURE__*/_jsxs(View, {
@@ -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;AA8MtE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;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;AA0DD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAkrChE,CAAC;AAwDF;;;;;;GAMG;AACH,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,EAAE,MAAM,OAAO,CAAC;AA4MtE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;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;AA0DD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAkrChE,CAAC;AAwDF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EAId,MAAM,+BAA+B,CAAC;AAUvC,MAAM,WAAW,qBAAqB;IAEpC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IAGjD,gEAAgE;IAChE,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IAGvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EAAE,YAAY,EACzB,QAAQ,EACR,qBAAqB,EAAE,sBAAsB,EAC7C,mBAAmB,EAAE,oBAAoB,EACzC,IAAI,EACJ,YAAY,EAAE,aAAa,GAC5B,EAAE,qBAAqB,+BA+GvB;AAMD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"FloatingDevTools.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EAId,MAAM,+BAA+B,CAAC;AAUvC,MAAM,WAAW,qBAAqB;IAEpC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IAGjD,gEAAgE;IAChE,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IAGvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EAAE,YAAY,EACzB,QAAQ,EACR,qBAAqB,EAAE,sBAAsB,EAC7C,mBAAmB,EAAE,oBAAoB,EACzC,IAAI,EACJ,YAAY,EAAE,aAAa,GAC5B,EAAE,qBAAqB,+BA8GvB;AAMD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,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;AAetD;;;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;AAYD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAqU9C,CAAC"}
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;AAYD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAqU9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAuJpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
1
+ {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAoKpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DialDevTools.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/DialDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAmB5E,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAqBlB,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAA;KAAE,KAAK,SAAS,CAAC;IAC/H,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAupB9C,CAAC"}
1
+ {"version":3,"file":"DialDevTools.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/DialDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAkB5E,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAqBlB,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAA;KAAE,KAAK,SAAS,CAAC;IAC/H,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAupB9C,CAAC"}
@@ -52,5 +52,5 @@ export type FloatingToolsProps = {
52
52
  * @performance Implements efficient boundary checking and position validation
53
53
  * @performance Includes debounced position saving for optimal storage performance
54
54
  */
55
- export declare function FloatingTools({ enablePositionPersistence, pushToSide, centerOnboarding, children, environment, availableEnvironments, onEnvironmentSwitch, showEnvironmentSelector, }: FloatingToolsProps): import("react").JSX.Element;
55
+ export declare function FloatingTools({ enablePositionPersistence, pushToSide, centerOnboarding, children, environment, availableEnvironments, onEnvironmentSwitch, showEnvironmentSelector, }: FloatingToolsProps): import("react").JSX.Element | null;
56
56
  //# sourceMappingURL=floatingTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floatingTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/floatingTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,SAAS,EACV,MAAM,OAAO,CAAC;AAsBf,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,QAAQ,EAAE,CAAC;AAiPzB,wBAAgB,OAAO,gCAQtB;AAuBD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA8CA;AAmBD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,yBAAgC,EAChC,UAAkB,EAClB,gBAAwB,EACxB,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,uBAA+B,GAChC,EAAE,kBAAkB,+BA+ZpB"}
1
+ {"version":3,"file":"floatingTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/floatingTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,SAAS,EACV,MAAM,OAAO,CAAC;AAqBf,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,QAAQ,EAAE,CAAC;AAkVzB,wBAAgB,OAAO,gCAQtB;AAuBD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA8CA;AAmBD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,yBAAgC,EAChC,UAAkB,EAClB,gBAAwB,EACxB,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,uBAA+B,GAChC,EAAE,kBAAkB,sCAsgBpB"}
@@ -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;AA8MtE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;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;AA0DD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAkrChE,CAAC;AAwDF;;;;;;GAMG;AACH,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,EAAE,MAAM,OAAO,CAAC;AA4MtE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;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;AA0DD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAkrChE,CAAC;AAwDF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EAId,MAAM,+BAA+B,CAAC;AAUvC,MAAM,WAAW,qBAAqB;IAEpC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IAGjD,gEAAgE;IAChE,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IAGvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EAAE,YAAY,EACzB,QAAQ,EACR,qBAAqB,EAAE,sBAAsB,EAC7C,mBAAmB,EAAE,oBAAoB,EACzC,IAAI,EACJ,YAAY,EAAE,aAAa,GAC5B,EAAE,qBAAqB,+BA+GvB;AAMD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"FloatingDevTools.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EAId,MAAM,+BAA+B,CAAC;AAUvC,MAAM,WAAW,qBAAqB;IAEpC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IAGjD,gEAAgE;IAChE,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IAGvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EAAE,YAAY,EACzB,QAAQ,EACR,qBAAqB,EAAE,sBAAsB,EAC7C,mBAAmB,EAAE,oBAAoB,EACzC,IAAI,EACJ,YAAY,EAAE,aAAa,GAC5B,EAAE,qBAAqB,+BA8GvB;AAMD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,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;AAetD;;;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;AAYD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAqU9C,CAAC"}
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;AAYD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAqU9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAuJpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
1
+ {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAoKpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DialDevTools.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/DialDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAmB5E,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAqBlB,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAA;KAAE,KAAK,SAAS,CAAC;IAC/H,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAupB9C,CAAC"}
1
+ {"version":3,"file":"DialDevTools.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/DialDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAkB5E,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAqBlB,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAA;KAAE,KAAK,SAAS,CAAC;IAC/H,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAupB9C,CAAC"}
@@ -52,5 +52,5 @@ export type FloatingToolsProps = {
52
52
  * @performance Implements efficient boundary checking and position validation
53
53
  * @performance Includes debounced position saving for optimal storage performance
54
54
  */
55
- export declare function FloatingTools({ enablePositionPersistence, pushToSide, centerOnboarding, children, environment, availableEnvironments, onEnvironmentSwitch, showEnvironmentSelector, }: FloatingToolsProps): import("react").JSX.Element;
55
+ export declare function FloatingTools({ enablePositionPersistence, pushToSide, centerOnboarding, children, environment, availableEnvironments, onEnvironmentSwitch, showEnvironmentSelector, }: FloatingToolsProps): import("react").JSX.Element | null;
56
56
  //# sourceMappingURL=floatingTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floatingTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/floatingTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,SAAS,EACV,MAAM,OAAO,CAAC;AAsBf,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,QAAQ,EAAE,CAAC;AAiPzB,wBAAgB,OAAO,gCAQtB;AAuBD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA8CA;AAmBD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,yBAAgC,EAChC,UAAkB,EAClB,gBAAwB,EACxB,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,uBAA+B,GAChC,EAAE,kBAAkB,+BA+ZpB"}
1
+ {"version":3,"file":"floatingTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/floatingTools.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,SAAS,EACV,MAAM,OAAO,CAAC;AAqBf,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EAAE,QAAQ,EAAE,CAAC;AAkVzB,wBAAgB,OAAO,gCAQtB;AAuBD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA8CA;AAmBD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,yBAAgC,EAChC,UAAkB,EAClB,gBAAwB,EACxB,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,uBAA+B,GAChC,EAAE,kBAAkB,sCAsgBpB"}