@buoy-gg/floating-tools-core 7.0.43 → 7.0.45

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 (29) hide show
  1. package/lib/commonjs/FloatingToolsStore.js +1 -1
  2. package/lib/commonjs/icons/generated/icon-data.g.js +1 -1
  3. package/lib/commonjs/icons/lifecycle-tool-icon.js +1 -0
  4. package/lib/commonjs/icons/location-tool-icon.js +1 -0
  5. package/lib/commonjs/icons/permissions-icon.js +1 -0
  6. package/lib/commonjs/index.js +1 -1
  7. package/lib/module/FloatingToolsStore.js +1 -1
  8. package/lib/module/icons/generated/icon-data.g.js +1 -1
  9. package/lib/module/icons/lifecycle-tool-icon.js +1 -0
  10. package/lib/module/icons/location-tool-icon.js +1 -0
  11. package/lib/module/icons/permissions-icon.js +1 -0
  12. package/lib/module/index.js +1 -1
  13. package/lib/typescript/commonjs/icons/generated/icon-data.g.d.ts +6 -0
  14. package/lib/typescript/commonjs/icons/lifecycle-tool-icon.d.ts +3 -0
  15. package/lib/typescript/commonjs/icons/location-tool-icon.d.ts +3 -0
  16. package/lib/typescript/commonjs/icons/permissions-icon.d.ts +3 -0
  17. package/lib/typescript/commonjs/index.d.ts +3 -0
  18. package/lib/typescript/module/icons/generated/icon-data.g.d.ts +6 -0
  19. package/lib/typescript/module/icons/lifecycle-tool-icon.d.ts +3 -0
  20. package/lib/typescript/module/icons/location-tool-icon.d.ts +3 -0
  21. package/lib/typescript/module/icons/permissions-icon.d.ts +3 -0
  22. package/lib/typescript/module/index.d.ts +3 -0
  23. package/lib/web/chunks/chunk-2K2AYORW.mjs +1 -0
  24. package/lib/web/chunks/chunk-C6BJ4WIF.mjs +1 -0
  25. package/lib/web/chunks/chunk-G4F6TBFE.mjs +1 -0
  26. package/lib/web/chunks/chunk-PUCCT3HF.mjs +1 -1
  27. package/lib/web/floating.mjs +1 -1
  28. package/lib/web/index.mjs +3 -3
  29. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ "use strict";import{createIcon as o}from"./icon-renderer.js";import{lifecycleToolIconData as c}from"./generated/icon-data.g.js";export{LIFECYCLE_TOOL_ICON_COLOR}from"./generated/icon-data.g.js";export const LifecycleToolIcon=o(c);
@@ -0,0 +1 @@
1
+ "use strict";import{createIcon as o}from"./icon-renderer.js";import{locationToolIconData as t}from"./generated/icon-data.g.js";export{LOCATION_TOOL_ICON_COLOR}from"./generated/icon-data.g.js";export const LocationToolIcon=o(t);
@@ -0,0 +1 @@
1
+ "use strict";import{createIcon as o}from"./icon-renderer.js";import{permissionsIconData as r}from"./generated/icon-data.g.js";export{PERMISSIONS_ICON_COLOR}from"./generated/icon-data.g.js";export const PermissionsIcon=o(r);
@@ -1 +1 @@
1
- "use strict";export{FloatingToolsStore}from"./FloatingToolsStore.js";export{monoFont}from"./fonts";export*from"./icons/generated/glyph-icons.g.js";export{VISIBLE_HANDLE_WIDTH,DRAG_THRESHOLD,ANIMATION_DURATION,EDGE_PADDING,SAVE_DEBOUNCE_MS,STORAGE_KEYS}from"./constants.js";export{DevToolsStateManager,devToolsStateManager,devToolsReducer}from"./devToolsState.js";export{getUserStatusConfig,getGripIconLayout,filterValidChildren}from"./utils.js";export{easing,getEasing,interpolate,interpolatePosition}from"./easing.js";export{floatingToolsColors,withAlpha}from"./colors.js";export{MAX_DIAL_SLOTS,DIAL_START_ANGLE,DIAL_BUTTON_SIZE,DIAL_ICON_SIZE,DIAL_ICON_GLYPH_SIZE,DIAL_ICON_PADDING,DIAL_GRID_LINE_COUNT,dialColors,dialStyles,getGridLineRotations,getDialLayout,getIconAngle,getIconPosition,getAllIconPositions,dialAnimationConfig,getIconStaggerInputRange,dialCSSBeziers,generateDialCSSKeyframes,getDialCSSAnimationStyles,getDialCSSKeyframesString,getSpiralAnimationPosition,getStaggeredIconProgress}from"./dial.js";export{USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE,decayScore,recordUsage,rankToolIds,pruneUsage}from"./dialUsage.js";export{SETTINGS_STORAGE_KEY,MAX_SETTINGS_DIAL_SLOTS,settingsTabs,settingsColors,toolColors,getToolColor,settingsStyles,toolLabels,getToolLabel,toolDescriptions,getToolDescription,globalSettingsConfig,enforceDialLimit,sanitizeFloatingSettings,mergeSettingsWithDefaults,generateDefaultSettings,countEnabledTools,canEnableDialTool,getEnabledToolIds,SettingsEventBus,settingsEventBus}from"./settings.js";export{NetworkIcon,NETWORK_ICON_COLOR}from"./icons/network-icon";export{EnvIcon,ENV_ICON_COLOR}from"./icons/env-icon";export{StorageIcon,STORAGE_ICON_COLOR}from"./icons/storage-icon";export{RoutesIcon,RoutePinIcon,RoutePathIcon,RouteDotIcon,RouteTwoPinsIcon,CurveTestA,CurveTestB,CurveTestC,CurveTestD,CurveTestE,CurveTestF,CurveTestG,CurveTestH,CurveTestI,CurveTestJ,CurveTestK,CurveTestL,CurveTestM,CurveTestN,CurveTestO,CurveTestP,ROUTES_ICON_COLOR}from"./icons/routes-icon";export{QueryIcon,QUERY_ICON_COLOR}from"./icons/query-icon";export{HighlighterIcon,HIGHLIGHTER_ICON_COLOR,RendersIcon,RENDERS_ICON_COLOR}from"./icons/renders-icon";export{BenchmarkIcon,BENCHMARK_ICON_COLOR}from"./icons/benchmark-icon";export{SentryIcon,SENTRY_ICON_COLOR}from"./icons/sentry-icon";export{SettingsSolidIcon}from"./icons/settings-icon";export{WifiIcon,WIFI_ICON_COLOR}from"./icons/wifi-icon";export{HighlightIcon,HIGHLIGHT_ICON_COLOR}from"./icons/highlight-icon";export{ReduxIcon,REDUX_ICON_COLOR}from"./icons/redux-icon";export{EventsIcon,EVENTS_ICON_COLOR}from"./icons/events-icon";export{ConsoleIcon,CONSOLE_ICON_COLOR}from"./icons/console-icon";export{TimeMachineIcon,TIME_MACHINE_ICON_COLOR}from"./icons/time-machine-icon";export{ScenariosIcon,SCENARIOS_ICON_COLOR}from"./icons/scenarios-icon";export{AskBuoyIcon,ASK_BUOY_ICON_COLOR}from"./icons/ask-buoy-icon";export{ImagesIcon,IMAGES_ICON_COLOR}from"./icons/images-icon";export{CameraIcon,CAMERA_ICON_COLOR}from"./icons/camera-icon";export{AssetsIcon,ASSETS_ICON_COLOR}from"./icons/assets-icon";export{ImpersonateIcon,IMPERSONATE_ICON_COLOR}from"./icons/impersonate-icon";export{ImageOverlayIcon,IMAGE_OVERLAY_ICON_COLOR}from"./icons/image-overlay-icon";export{ZustandIcon,ZUSTAND_ICON_COLOR}from"./icons/zustand-icon";export{JotaiIcon,JOTAI_ICON_COLOR}from"./icons/jotai-icon";export{RiverpodIcon,RIVERPOD_ICON_COLOR}from"./icons/riverpod-icon";export{createNode,createLine,createRing,createDot,createGlow,createArrow,createBar}from"./icons/icon-factories.js";export{renderIconData,createIcon}from"./icons/icon-renderer.js";export{NotificationsIcon,NOTIFICATIONS_ICON_COLOR}from"./icons/notifications-icon.js";export{ClockToolIcon,CLOCK_TOOL_ICON_COLOR}from"./icons/clock-tool-icon.js";
1
+ "use strict";export{FloatingToolsStore}from"./FloatingToolsStore.js";export{monoFont}from"./fonts";export*from"./icons/generated/glyph-icons.g.js";export{VISIBLE_HANDLE_WIDTH,DRAG_THRESHOLD,ANIMATION_DURATION,EDGE_PADDING,SAVE_DEBOUNCE_MS,STORAGE_KEYS}from"./constants.js";export{DevToolsStateManager,devToolsStateManager,devToolsReducer}from"./devToolsState.js";export{getUserStatusConfig,getGripIconLayout,filterValidChildren}from"./utils.js";export{easing,getEasing,interpolate,interpolatePosition}from"./easing.js";export{floatingToolsColors,withAlpha}from"./colors.js";export{MAX_DIAL_SLOTS,DIAL_START_ANGLE,DIAL_BUTTON_SIZE,DIAL_ICON_SIZE,DIAL_ICON_GLYPH_SIZE,DIAL_ICON_PADDING,DIAL_GRID_LINE_COUNT,dialColors,dialStyles,getGridLineRotations,getDialLayout,getIconAngle,getIconPosition,getAllIconPositions,dialAnimationConfig,getIconStaggerInputRange,dialCSSBeziers,generateDialCSSKeyframes,getDialCSSAnimationStyles,getDialCSSKeyframesString,getSpiralAnimationPosition,getStaggeredIconProgress}from"./dial.js";export{USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE,decayScore,recordUsage,rankToolIds,pruneUsage}from"./dialUsage.js";export{SETTINGS_STORAGE_KEY,MAX_SETTINGS_DIAL_SLOTS,settingsTabs,settingsColors,toolColors,getToolColor,settingsStyles,toolLabels,getToolLabel,toolDescriptions,getToolDescription,globalSettingsConfig,enforceDialLimit,sanitizeFloatingSettings,mergeSettingsWithDefaults,generateDefaultSettings,countEnabledTools,canEnableDialTool,getEnabledToolIds,SettingsEventBus,settingsEventBus}from"./settings.js";export{NetworkIcon,NETWORK_ICON_COLOR}from"./icons/network-icon";export{EnvIcon,ENV_ICON_COLOR}from"./icons/env-icon";export{StorageIcon,STORAGE_ICON_COLOR}from"./icons/storage-icon";export{RoutesIcon,RoutePinIcon,RoutePathIcon,RouteDotIcon,RouteTwoPinsIcon,CurveTestA,CurveTestB,CurveTestC,CurveTestD,CurveTestE,CurveTestF,CurveTestG,CurveTestH,CurveTestI,CurveTestJ,CurveTestK,CurveTestL,CurveTestM,CurveTestN,CurveTestO,CurveTestP,ROUTES_ICON_COLOR}from"./icons/routes-icon";export{QueryIcon,QUERY_ICON_COLOR}from"./icons/query-icon";export{HighlighterIcon,HIGHLIGHTER_ICON_COLOR,RendersIcon,RENDERS_ICON_COLOR}from"./icons/renders-icon";export{BenchmarkIcon,BENCHMARK_ICON_COLOR}from"./icons/benchmark-icon";export{SentryIcon,SENTRY_ICON_COLOR}from"./icons/sentry-icon";export{SettingsSolidIcon}from"./icons/settings-icon";export{WifiIcon,WIFI_ICON_COLOR}from"./icons/wifi-icon";export{HighlightIcon,HIGHLIGHT_ICON_COLOR}from"./icons/highlight-icon";export{ReduxIcon,REDUX_ICON_COLOR}from"./icons/redux-icon";export{EventsIcon,EVENTS_ICON_COLOR}from"./icons/events-icon";export{ConsoleIcon,CONSOLE_ICON_COLOR}from"./icons/console-icon";export{TimeMachineIcon,TIME_MACHINE_ICON_COLOR}from"./icons/time-machine-icon";export{ScenariosIcon,SCENARIOS_ICON_COLOR}from"./icons/scenarios-icon";export{AskBuoyIcon,ASK_BUOY_ICON_COLOR}from"./icons/ask-buoy-icon";export{ImagesIcon,IMAGES_ICON_COLOR}from"./icons/images-icon";export{CameraIcon,CAMERA_ICON_COLOR}from"./icons/camera-icon";export{AssetsIcon,ASSETS_ICON_COLOR}from"./icons/assets-icon";export{ImpersonateIcon,IMPERSONATE_ICON_COLOR}from"./icons/impersonate-icon";export{ImageOverlayIcon,IMAGE_OVERLAY_ICON_COLOR}from"./icons/image-overlay-icon";export{ZustandIcon,ZUSTAND_ICON_COLOR}from"./icons/zustand-icon";export{JotaiIcon,JOTAI_ICON_COLOR}from"./icons/jotai-icon";export{RiverpodIcon,RIVERPOD_ICON_COLOR}from"./icons/riverpod-icon";export{createNode,createLine,createRing,createDot,createGlow,createArrow,createBar}from"./icons/icon-factories.js";export{renderIconData,createIcon}from"./icons/icon-renderer.js";export{NotificationsIcon,NOTIFICATIONS_ICON_COLOR}from"./icons/notifications-icon.js";export{ClockToolIcon,CLOCK_TOOL_ICON_COLOR}from"./icons/clock-tool-icon.js";export{PermissionsIcon,PERMISSIONS_ICON_COLOR}from"./icons/permissions-icon.js";export{LifecycleToolIcon,LIFECYCLE_TOOL_ICON_COLOR}from"./icons/lifecycle-tool-icon.js";export{LocationToolIcon,LOCATION_TOOL_ICON_COLOR}from"./icons/location-tool-icon.js";
@@ -46,6 +46,10 @@ export declare const IMPERSONATE_ICON_COLOR = "#F59E0B";
46
46
  export declare const impersonateIconData: IconData;
47
47
  export declare const JOTAI_ICON_COLOR = "#6C47FF";
48
48
  export declare const jotaiIconData: IconData;
49
+ export declare const LIFECYCLE_TOOL_ICON_COLOR = "#A3E635";
50
+ export declare const lifecycleToolIconData: IconData;
51
+ export declare const LOCATION_TOOL_ICON_COLOR = "#F87171";
52
+ export declare const locationToolIconData: IconData;
49
53
  export declare const NETWORK_ICON_COLOR = "#00D4FF";
50
54
  export declare const networkIconData: IconData;
51
55
  export declare const NOTIFICATIONS_ICON_COLOR = "#38BDF8";
@@ -75,6 +79,8 @@ export declare const ottoStorageIconData: IconData;
75
79
  export declare const ottoTimeMachineIconData: IconData;
76
80
  export declare const ottoTvRemoteIconData: IconData;
77
81
  export declare const ottoZustandIconData: IconData;
82
+ export declare const PERMISSIONS_ICON_COLOR = "#34D399";
83
+ export declare const permissionsIconData: IconData;
78
84
  export declare const policeBoxIconData: IconData;
79
85
  export declare const QUERY_ICON_COLOR = "#02CEE2";
80
86
  export declare const queryIconData: IconData;
@@ -0,0 +1,3 @@
1
+ export { LIFECYCLE_TOOL_ICON_COLOR } from './generated/icon-data.g';
2
+ export declare const LifecycleToolIcon: import("./icon-renderer").BuoyIconComponent;
3
+ //# sourceMappingURL=lifecycle-tool-icon.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { LOCATION_TOOL_ICON_COLOR } from './generated/icon-data.g';
2
+ export declare const LocationToolIcon: import("./icon-renderer").BuoyIconComponent;
3
+ //# sourceMappingURL=location-tool-icon.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { PERMISSIONS_ICON_COLOR } from './generated/icon-data.g';
2
+ export declare const PermissionsIcon: import("./icon-renderer").BuoyIconComponent;
3
+ //# sourceMappingURL=permissions-icon.d.ts.map
@@ -57,4 +57,7 @@ export { createNode, createLine, createRing, createDot, createGlow, createArrow,
57
57
  export { renderIconData, createIcon, type IconData, type IconProps } from './icons/icon-renderer';
58
58
  export { NotificationsIcon, NOTIFICATIONS_ICON_COLOR } from './icons/notifications-icon';
59
59
  export { ClockToolIcon, CLOCK_TOOL_ICON_COLOR } from './icons/clock-tool-icon';
60
+ export { PermissionsIcon, PERMISSIONS_ICON_COLOR } from './icons/permissions-icon';
61
+ export { LifecycleToolIcon, LIFECYCLE_TOOL_ICON_COLOR } from './icons/lifecycle-tool-icon';
62
+ export { LocationToolIcon, LOCATION_TOOL_ICON_COLOR } from './icons/location-tool-icon';
60
63
  //# sourceMappingURL=index.d.ts.map
@@ -46,6 +46,10 @@ export declare const IMPERSONATE_ICON_COLOR = "#F59E0B";
46
46
  export declare const impersonateIconData: IconData;
47
47
  export declare const JOTAI_ICON_COLOR = "#6C47FF";
48
48
  export declare const jotaiIconData: IconData;
49
+ export declare const LIFECYCLE_TOOL_ICON_COLOR = "#A3E635";
50
+ export declare const lifecycleToolIconData: IconData;
51
+ export declare const LOCATION_TOOL_ICON_COLOR = "#F87171";
52
+ export declare const locationToolIconData: IconData;
49
53
  export declare const NETWORK_ICON_COLOR = "#00D4FF";
50
54
  export declare const networkIconData: IconData;
51
55
  export declare const NOTIFICATIONS_ICON_COLOR = "#38BDF8";
@@ -75,6 +79,8 @@ export declare const ottoStorageIconData: IconData;
75
79
  export declare const ottoTimeMachineIconData: IconData;
76
80
  export declare const ottoTvRemoteIconData: IconData;
77
81
  export declare const ottoZustandIconData: IconData;
82
+ export declare const PERMISSIONS_ICON_COLOR = "#34D399";
83
+ export declare const permissionsIconData: IconData;
78
84
  export declare const policeBoxIconData: IconData;
79
85
  export declare const QUERY_ICON_COLOR = "#02CEE2";
80
86
  export declare const queryIconData: IconData;
@@ -0,0 +1,3 @@
1
+ export { LIFECYCLE_TOOL_ICON_COLOR } from './generated/icon-data.g';
2
+ export declare const LifecycleToolIcon: import("./icon-renderer").BuoyIconComponent;
3
+ //# sourceMappingURL=lifecycle-tool-icon.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { LOCATION_TOOL_ICON_COLOR } from './generated/icon-data.g';
2
+ export declare const LocationToolIcon: import("./icon-renderer").BuoyIconComponent;
3
+ //# sourceMappingURL=location-tool-icon.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { PERMISSIONS_ICON_COLOR } from './generated/icon-data.g';
2
+ export declare const PermissionsIcon: import("./icon-renderer").BuoyIconComponent;
3
+ //# sourceMappingURL=permissions-icon.d.ts.map
@@ -57,4 +57,7 @@ export { createNode, createLine, createRing, createDot, createGlow, createArrow,
57
57
  export { renderIconData, createIcon, type IconData, type IconProps } from './icons/icon-renderer';
58
58
  export { NotificationsIcon, NOTIFICATIONS_ICON_COLOR } from './icons/notifications-icon';
59
59
  export { ClockToolIcon, CLOCK_TOOL_ICON_COLOR } from './icons/clock-tool-icon';
60
+ export { PermissionsIcon, PERMISSIONS_ICON_COLOR } from './icons/permissions-icon';
61
+ export { LifecycleToolIcon, LIFECYCLE_TOOL_ICON_COLOR } from './icons/lifecycle-tool-icon';
62
+ export { LocationToolIcon, LOCATION_TOOL_ICON_COLOR } from './icons/location-tool-icon';
60
63
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ "use client";if(typeof window!=="undefined"&&typeof globalThis.global==="undefined"){globalThis.global=globalThis}var f=32;var m=5;var y=200;var g=10;var P=500;var l={POSITION_X:"@react_buoy_bubble_position_x",POSITION_Y:"@react_buoy_bubble_position_y"};var S=class{constructor(i){this.isDragging=false;this.isHidden=false;this.dragStartPos={x:0,y:0};this.dragStartMouse={x:0,y:0};this.hasMoved=false;this.savedPosition=null;this.saveTimeout=null;this.isInitialized=false;this.listeners=new Set;this.subscribe=t=>{this.listeners.add(t);return()=>this.listeners.delete(t)};this.getSnapshot=()=>{return this.stateSnapshot};this.screenWidth=i.screenWidth;this.screenHeight=i.screenHeight;this.bubbleSize=i.initialBubbleSize??{width:100,height:32};this.minPosition=i.minPosition??{x:g,y:g};this.visibleHandleWidth=i.visibleHandleWidth??f;this.dragThreshold=i.dragThreshold??m;this.edgePadding=i.edgePadding??g;this.enablePositionPersistence=i.enablePositionPersistence??true;this.storage=i.storage;this.onPositionChange=i.onPositionChange;this.onHiddenChange=i.onHiddenChange;this.onDraggingChange=i.onDraggingChange;this.position=i.initialPosition??{x:this.screenWidth-this.bubbleSize.width-20,y:Math.max(this.minPosition.y,Math.min(100,this.screenHeight-this.bubbleSize.height-this.edgePadding))};this.stateSnapshot=this.createSnapshot()}createSnapshot(){return{position:{...this.position},isDragging:this.isDragging,isHidden:this.isHidden,bubbleSize:{...this.bubbleSize}}}notify(){this.stateSnapshot=this.createSnapshot();this.listeners.forEach(i=>i())}async initialize(){if(this.isInitialized||!this.enablePositionPersistence||!this.storage){this.isInitialized=true;return}try{const[i,t]=await Promise.all([this.storage.getItem(l.POSITION_X),this.storage.getItem(l.POSITION_Y)]);if(i!==null&&t!==null){const s=parseFloat(i);const e=parseFloat(t);if(!Number.isNaN(s)&&!Number.isNaN(e)){const n={x:s,y:e};const o=this.validatePosition(n);if(Math.abs(n.x-o.x)>5||Math.abs(n.y-o.y)>5){this.savePosition(o.x,o.y)}this.position=o;if(o.x>=this.screenWidth-this.visibleHandleWidth-5){this.isHidden=true}this.notify()}}}catch{}this.isInitialized=true}getBounds(){return{minX:this.minPosition.x,maxX:this.screenWidth-this.visibleHandleWidth,minY:this.minPosition.y,maxY:this.screenHeight-this.bubbleSize.height-this.edgePadding}}validatePosition(i){const t=this.getBounds();return{x:Math.max(t.minX,Math.min(i.x,t.maxX)),y:Math.max(t.minY,Math.min(i.y,t.maxY))}}setPosition(i){this.position=i;this.onPositionChange?.(i);this.notify()}setBubbleSize(i){if(this.bubbleSize.width===i.width&&this.bubbleSize.height===i.height){return}this.bubbleSize=i;if(!this.isDragging)this.reconcileBounds();this.notify()}setScreenSize(i,t){this.screenWidth=i;this.screenHeight=t;this.reconcileBounds();this.notify()}reconcileBounds(){const i=s=>({x:Math.max(this.minPosition.x,Math.min(s.x,this.screenWidth-this.bubbleSize.width-this.edgePadding)),y:Math.max(this.minPosition.y,Math.min(s.y,this.screenHeight-this.bubbleSize.height-this.edgePadding))});const t=i(this.position);this.position=this.isHidden?{...t,x:this.screenWidth-this.visibleHandleWidth}:t;if(this.savedPosition)this.savedPosition=i(this.savedPosition)}setMinPosition(i){this.minPosition=i}async savePosition(i,t){if(!this.enablePositionPersistence||!this.storage)return;try{await Promise.all([this.storage.setItem(l.POSITION_X,i.toString()),this.storage.setItem(l.POSITION_Y,t.toString())])}catch{}}debouncedSavePosition(i,t){if(this.saveTimeout)clearTimeout(this.saveTimeout);this.saveTimeout=setTimeout(()=>this.savePosition(i,t),P)}toggleHideShow(){const i=this.position.x>this.screenWidth-this.bubbleSize.width/2;if(this.isHidden||i){let t;let s;if(this.savedPosition&&this.savedPosition.x<this.screenWidth-this.bubbleSize.width/2){t=this.savedPosition.x;s=this.savedPosition.y}else{t=this.screenWidth-this.bubbleSize.width-20;s=this.position.y}this.isHidden=false;this.onHiddenChange?.(false);this.notify();return{targetPosition:{x:t,y:s},isHiding:false}}else{this.savedPosition={...this.position};const t=this.screenWidth-this.visibleHandleWidth;this.isHidden=true;this.onHiddenChange?.(true);this.notify();return{targetPosition:{x:t,y:this.position.y},isHiding:true}}}forceHide(){if(this.isHidden){return{targetPosition:this.position}}this.savedPosition={...this.position};const i=this.screenWidth-this.visibleHandleWidth;this.isHidden=true;this.onHiddenChange?.(true);this.notify();return{targetPosition:{x:i,y:this.position.y}}}forceShow(){if(!this.isHidden){return{targetPosition:this.position}}let i;let t;if(this.savedPosition){i=this.savedPosition.x;t=this.savedPosition.y}else{i=this.screenWidth-this.bubbleSize.width-20;t=this.position.y}this.isHidden=false;this.onHiddenChange?.(false);this.notify();return{targetPosition:{x:i,y:t}}}handleDragStart(i){this.hasMoved=false;this.dragStartPos={...this.position};this.dragStartMouse={x:i.clientX,y:i.clientY}}handleDragMove(i){const t=i.clientX-this.dragStartMouse.x;const s=i.clientY-this.dragStartMouse.y;const e=Math.abs(t)+Math.abs(s);if(!this.hasMoved&&e>this.dragThreshold){this.hasMoved=true;this.isDragging=true;this.onDraggingChange?.(true);this.notify()}if(this.hasMoved){const n=this.dragStartPos.x+t;const o=this.dragStartPos.y+s;const d=this.getBounds();const c=Math.max(d.minX,Math.min(n,this.screenWidth-this.visibleHandleWidth+this.bubbleSize.width));const h=Math.max(d.minY,Math.min(o,d.maxY));this.position={x:c,y:h};this.onPositionChange?.(this.position);this.notify();return{position:this.position,isDragging:true}}return{position:this.position,isDragging:false}}handleDragEnd(i){const t=!this.hasMoved;if(t){this.isDragging=false;this.onDraggingChange?.(false);this.notify();return{position:this.position,shouldHide:false,wasTap:true}}const s=i.clientX-this.dragStartMouse.x;const e=i.clientY-this.dragStartMouse.y;const n=this.dragStartPos.x+s;const o=this.dragStartPos.y+e;const d=n+this.bubbleSize.width/2;const c=d>this.screenWidth;const h=this.getBounds();if(c){const a=this.screenWidth-this.visibleHandleWidth;const r=Math.max(h.minY,Math.min(o,h.maxY));this.isHidden=true;this.onHiddenChange?.(true);this.isDragging=false;this.onDraggingChange?.(false);this.notify();return{position:{x:a,y:r},shouldHide:true,wasTap:false}}else{if(this.isHidden&&n<this.screenWidth-this.visibleHandleWidth-10){this.isHidden=false;this.onHiddenChange?.(false)}const a=Math.max(h.minX,Math.min(n,this.screenWidth-this.bubbleSize.width-this.edgePadding));const r=Math.max(h.minY,Math.min(o,h.maxY));if(a<this.screenWidth-this.bubbleSize.width/2){this.savedPosition={x:a,y:r}}this.position={x:a,y:r};this.isDragging=false;this.onDraggingChange?.(false);this.debouncedSavePosition(a,r);this.notify();return{position:{x:a,y:r},shouldHide:false,wasTap:false}}}commitPosition(i){this.position=i;this.savePosition(i.x,i.y);this.notify()}destroy(){if(this.saveTimeout){clearTimeout(this.saveTimeout);this.saveTimeout=null}this.listeners.clear()}};function x(i,t){switch(i){case"admin":return{label:"Admin",dotColor:t.success,textColor:t.success};case"internal":return{label:"Internal",dotColor:t.optional,textColor:t.optional};case"user":default:return{label:"User",dotColor:t.muted,textColor:t.secondary}}}function p(i){return{dotSize:Math.max(2,Math.round(i/6)),columnGap:Math.max(2,Math.round(i/12)),rowGap:Math.max(2,Math.round(i/12))}}function v(i){return i.filter(t=>t!=null&&t!==false)}var u={linear:i=>i,easeOutCubic:i=>1-Math.pow(1-i,3),easeInCubic:i=>i*i*i,easeInOutCubic:i=>i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2,easeOutQuad:i=>1-(1-i)*(1-i),easeOutExpo:i=>i===1?1:1-Math.pow(2,-10*i)};function M(i){return u[i]}function b(i,t,s,e=u.easeOutCubic){const n=e(Math.max(0,Math.min(1,s)));return i+(t-i)*n}function H(i,t,s,e=u.easeOutCubic){return{x:b(i.x,t.x,s,e),y:b(i.y,t.y,s,e)}}var C={panel:"#1A1A1A",muted:"#888888",secondary:"#E0E0E0",info:"#20C997",success:"#20C997",optional:"#FFA94D",error:"#EF4444",primary:"#20C997",dragActive:"#20C997"};function T(i,t){if(typeof t==="number"){const s=Math.round(t*255).toString(16).padStart(2,"0");return`${i}${s}`}return`${i}${t}`}export{f as VISIBLE_HANDLE_WIDTH,m as DRAG_THRESHOLD,y as ANIMATION_DURATION,g as EDGE_PADDING,P as SAVE_DEBOUNCE_MS,l as STORAGE_KEYS,S as FloatingToolsStore,x as getUserStatusConfig,p as getGripIconLayout,v as filterValidChildren,u as easing,M as getEasing,b as interpolate,H as interpolatePosition,C as floatingToolsColors,T as withAlpha};
@@ -0,0 +1 @@
1
+ "use client";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);var u=32,b=5,c=200,P=10,m=500,r={POSITION_X:"@react_buoy_bubble_position_x",POSITION_Y:"@react_buoy_bubble_position_y"};var x=12,y=class{constructor(i){this.isDragging=false;this.isHidden=false;this.dragStartPos={x:0,y:0};this.dragStartMouse={x:0,y:0};this.hasMoved=false;this.savedPosition=null;this.saveTimeout=null;this.isInitialized=false;this.listeners=new Set;this.subscribe=t=>(this.listeners.add(t),()=>this.listeners.delete(t));this.getSnapshot=()=>this.stateSnapshot;this.screenWidth=i.screenWidth,this.screenHeight=i.screenHeight,this.bubbleSize=i.initialBubbleSize??{width:100,height:32},this.minPosition=i.minPosition??{x:10,y:10},this.visibleHandleWidth=i.visibleHandleWidth??32,this.dragThreshold=i.dragThreshold??5,this.edgePadding=i.edgePadding??10,this.enablePositionPersistence=i.enablePositionPersistence??true,this.storage=i.storage,this.onPositionChange=i.onPositionChange,this.onHiddenChange=i.onHiddenChange,this.onDraggingChange=i.onDraggingChange,this.position=i.initialPosition??{x:this.screenWidth-this.bubbleSize.width-20,y:Math.max(this.minPosition.y,Math.min(100,this.screenHeight-this.bubbleSize.height-this.edgePadding))},this.stateSnapshot=this.createSnapshot()}createSnapshot(){return{position:{...this.position},isDragging:this.isDragging,isHidden:this.isHidden,bubbleSize:{...this.bubbleSize}}}notify(){this.stateSnapshot=this.createSnapshot(),this.listeners.forEach(i=>i())}async initialize(){if(this.isInitialized||!this.enablePositionPersistence||!this.storage){this.isInitialized=true;return}try{let[i,t]=await Promise.all([this.storage.getItem(r.POSITION_X),this.storage.getItem(r.POSITION_Y)]);if(i!==null&&t!==null){let s=parseFloat(i),e=parseFloat(t);if(!Number.isNaN(s)&&!Number.isNaN(e)){let n=s>=this.screenWidth?{x:this.screenWidth-this.bubbleSize.width-this.edgePadding,y:e}:{x:s,y:e},o=this.validatePosition(n);(Math.abs(n.x-o.x)>5||Math.abs(n.y-o.y)>5)&&this.savePosition(o.x,o.y),this.position=o,o.x>=this.screenWidth-this.visibleHandleWidth-5&&(this.isHidden=true),this.notify()}}}catch{}this.isInitialized=true}getBounds(){return{minX:this.minPosition.x,maxX:this.screenWidth-this.visibleHandleWidth,minY:this.minPosition.y,maxY:this.screenHeight-this.bubbleSize.height-this.edgePadding}}validatePosition(i){let t=this.getBounds();return{x:Math.max(t.minX,Math.min(i.x,t.maxX)),y:Math.max(t.minY,Math.min(i.y,t.maxY))}}setPosition(i){this.position=i,this.onPositionChange?.(i),this.notify()}setBubbleSize(i){this.bubbleSize.width===i.width&&this.bubbleSize.height===i.height||(this.bubbleSize=i,this.isDragging||this.reconcileBounds(),this.notify())}setScreenSize(i,t){let s=h=>!!h&&this.screenWidth>0&&h.x+this.bubbleSize.width>=this.screenWidth-this.edgePadding-x,e=!this.isHidden&&s(this.position),n=s(this.savedPosition),o=i!==this.screenWidth;if(this.screenWidth=i,this.screenHeight=t,o){let h=i-this.bubbleSize.width-this.edgePadding;e&&(this.position={...this.position,x:h},this.isInitialized&&this.debouncedSavePosition(h,this.position.y)),n&&this.savedPosition&&(this.savedPosition={...this.savedPosition,x:h})}this.reconcileBounds(),this.notify()}reconcileBounds(){let i=s=>({x:Math.max(this.minPosition.x,Math.min(s.x,this.screenWidth-this.bubbleSize.width-this.edgePadding)),y:Math.max(this.minPosition.y,Math.min(s.y,this.screenHeight-this.bubbleSize.height-this.edgePadding))}),t=i(this.position);this.position=this.isHidden?{...t,x:this.screenWidth-this.visibleHandleWidth}:t,this.savedPosition&&(this.savedPosition=i(this.savedPosition))}setMinPosition(i){this.minPosition=i}async savePosition(i,t){if(!(!this.enablePositionPersistence||!this.storage))try{await Promise.all([this.storage.setItem(r.POSITION_X,i.toString()),this.storage.setItem(r.POSITION_Y,t.toString())])}catch{}}debouncedSavePosition(i,t){this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>this.savePosition(i,t),500)}toggleHideShow(){let i=this.position.x>this.screenWidth-this.bubbleSize.width/2;if(this.isHidden||i){let t,s;return this.savedPosition&&this.savedPosition.x<this.screenWidth-this.bubbleSize.width/2?(t=this.savedPosition.x,s=this.savedPosition.y):(t=this.screenWidth-this.bubbleSize.width-20,s=this.position.y),this.isHidden=false,this.onHiddenChange?.(false),this.notify(),{targetPosition:{x:t,y:s},isHiding:false}}else{this.savedPosition={...this.position};let t=this.screenWidth-this.visibleHandleWidth;return this.isHidden=true,this.onHiddenChange?.(true),this.notify(),{targetPosition:{x:t,y:this.position.y},isHiding:true}}}forceHide(){if(this.isHidden)return{targetPosition:this.position};this.savedPosition={...this.position};let i=this.screenWidth-this.visibleHandleWidth;return this.isHidden=true,this.onHiddenChange?.(true),this.notify(),{targetPosition:{x:i,y:this.position.y}}}forceShow(){if(!this.isHidden)return{targetPosition:this.position};let i,t;return this.savedPosition?(i=this.savedPosition.x,t=this.savedPosition.y):(i=this.screenWidth-this.bubbleSize.width-20,t=this.position.y),this.isHidden=false,this.onHiddenChange?.(false),this.notify(),{targetPosition:{x:i,y:t}}}handleDragStart(i){this.hasMoved=false,this.dragStartPos={...this.position},this.dragStartMouse={x:i.clientX,y:i.clientY}}handleDragMove(i){let t=i.clientX-this.dragStartMouse.x,s=i.clientY-this.dragStartMouse.y,e=Math.abs(t)+Math.abs(s);if(!this.hasMoved&&e>this.dragThreshold&&(this.hasMoved=true,this.isDragging=true,this.onDraggingChange?.(true),this.notify()),this.hasMoved){let n=this.dragStartPos.x+t,o=this.dragStartPos.y+s,h=this.getBounds(),a=Math.max(h.minX,Math.min(n,this.screenWidth-this.visibleHandleWidth+this.bubbleSize.width)),d=Math.max(h.minY,Math.min(o,h.maxY));return this.position={x:a,y:d},this.onPositionChange?.(this.position),this.notify(),{position:this.position,isDragging:true}}return{position:this.position,isDragging:false}}handleDragEnd(i){if(!this.hasMoved)return this.isDragging=false,this.onDraggingChange?.(false),this.notify(),{position:this.position,shouldHide:false,wasTap:true};let t=i.clientX-this.dragStartMouse.x,s=i.clientY-this.dragStartMouse.y,e=this.dragStartPos.x+t,n=this.dragStartPos.y+s,o=e+this.bubbleSize.width/2>this.screenWidth,h=this.getBounds();if(o){let a=this.screenWidth-this.visibleHandleWidth,d=Math.max(h.minY,Math.min(n,h.maxY));return this.isHidden=true,this.onHiddenChange?.(true),this.isDragging=false,this.onDraggingChange?.(false),this.notify(),{position:{x:a,y:d},shouldHide:true,wasTap:false}}else{this.isHidden&&e<this.screenWidth-this.visibleHandleWidth-10&&(this.isHidden=false,this.onHiddenChange?.(false));let a=Math.max(h.minX,Math.min(e,this.screenWidth-this.bubbleSize.width-this.edgePadding)),d=Math.max(h.minY,Math.min(n,h.maxY));return a<this.screenWidth-this.bubbleSize.width/2&&(this.savedPosition={x:a,y:d}),this.position={x:a,y:d},this.isDragging=false,this.onDraggingChange?.(false),this.debouncedSavePosition(a,d),this.notify(),{position:{x:a,y:d},shouldHide:false,wasTap:false}}}commitPosition(i){this.position=i,this.savePosition(i.x,i.y),this.notify()}destroy(){this.saveTimeout&&(clearTimeout(this.saveTimeout),this.saveTimeout=null),this.listeners.clear()}};function p(i,t){switch(i){case"admin":return{label:"Admin",dotColor:t.success,textColor:t.success};case"internal":return{label:"Internal",dotColor:t.optional,textColor:t.optional};case"user":default:return{label:"User",dotColor:t.muted,textColor:t.secondary}}}function S(i){return{dotSize:Math.max(2,Math.round(i/6)),columnGap:Math.max(2,Math.round(i/12)),rowGap:Math.max(2,Math.round(i/12))}}function v(i){return i.filter(t=>t!=null&&t!==false)}var l={linear:i=>i,easeOutCubic:i=>1-Math.pow(1-i,3),easeInCubic:i=>i*i*i,easeInOutCubic:i=>i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2,easeOutQuad:i=>1-(1-i)*(1-i),easeOutExpo:i=>i===1?1:1-Math.pow(2,-10*i)};function M(i){return l[i]}function g(i,t,s,e=l.easeOutCubic){let n=e(Math.max(0,Math.min(1,s)));return i+(t-i)*n}function H(i,t,s,e=l.easeOutCubic){return{x:g(i.x,t.x,s,e),y:g(i.y,t.y,s,e)}}var f={panel:"#1A1A1A",muted:"#888888",secondary:"#E0E0E0",info:"#20C997",success:"#20C997",optional:"#FFA94D",error:"#EF4444",primary:"#20C997",dragActive:"#20C997"};function W(i,t){if(typeof t=="number"){let s=Math.round(t*255).toString(16).padStart(2,"0");return`${i}${s}`}return`${i}${t}`}export{u as a,b,c,P as d,m as e,r as f,y as g,p as h,S as i,v as j,l as k,M as l,g as m,H as n,f as o,W as p};
@@ -0,0 +1 @@
1
+ "use client";var f=32;var m=5;var y=200;var g=10;var P=500;var l={POSITION_X:"@react_buoy_bubble_position_x",POSITION_Y:"@react_buoy_bubble_position_y"};var S=class{constructor(i){this.isDragging=false;this.isHidden=false;this.dragStartPos={x:0,y:0};this.dragStartMouse={x:0,y:0};this.hasMoved=false;this.savedPosition=null;this.saveTimeout=null;this.isInitialized=false;this.listeners=new Set;this.subscribe=t=>{this.listeners.add(t);return()=>this.listeners.delete(t)};this.getSnapshot=()=>{return this.stateSnapshot};this.screenWidth=i.screenWidth;this.screenHeight=i.screenHeight;this.bubbleSize=i.initialBubbleSize??{width:100,height:32};this.minPosition=i.minPosition??{x:g,y:g};this.visibleHandleWidth=i.visibleHandleWidth??f;this.dragThreshold=i.dragThreshold??m;this.edgePadding=i.edgePadding??g;this.enablePositionPersistence=i.enablePositionPersistence??true;this.storage=i.storage;this.onPositionChange=i.onPositionChange;this.onHiddenChange=i.onHiddenChange;this.onDraggingChange=i.onDraggingChange;this.position=i.initialPosition??{x:this.screenWidth-this.bubbleSize.width-20,y:Math.max(this.minPosition.y,Math.min(100,this.screenHeight-this.bubbleSize.height-this.edgePadding))};this.stateSnapshot=this.createSnapshot()}createSnapshot(){return{position:{...this.position},isDragging:this.isDragging,isHidden:this.isHidden,bubbleSize:{...this.bubbleSize}}}notify(){this.stateSnapshot=this.createSnapshot();this.listeners.forEach(i=>i())}async initialize(){if(this.isInitialized||!this.enablePositionPersistence||!this.storage){this.isInitialized=true;return}try{const[i,t]=await Promise.all([this.storage.getItem(l.POSITION_X),this.storage.getItem(l.POSITION_Y)]);if(i!==null&&t!==null){const s=parseFloat(i);const e=parseFloat(t);if(!Number.isNaN(s)&&!Number.isNaN(e)){const n={x:s,y:e};const o=this.validatePosition(n);if(Math.abs(n.x-o.x)>5||Math.abs(n.y-o.y)>5){this.savePosition(o.x,o.y)}this.position=o;if(o.x>=this.screenWidth-this.visibleHandleWidth-5){this.isHidden=true}this.notify()}}}catch{}this.isInitialized=true}getBounds(){return{minX:this.minPosition.x,maxX:this.screenWidth-this.visibleHandleWidth,minY:this.minPosition.y,maxY:this.screenHeight-this.bubbleSize.height-this.edgePadding}}validatePosition(i){const t=this.getBounds();return{x:Math.max(t.minX,Math.min(i.x,t.maxX)),y:Math.max(t.minY,Math.min(i.y,t.maxY))}}setPosition(i){this.position=i;this.onPositionChange?.(i);this.notify()}setBubbleSize(i){if(this.bubbleSize.width===i.width&&this.bubbleSize.height===i.height){return}this.bubbleSize=i;if(!this.isDragging)this.reconcileBounds();this.notify()}setScreenSize(i,t){this.screenWidth=i;this.screenHeight=t;this.reconcileBounds();this.notify()}reconcileBounds(){const i=s=>({x:Math.max(this.minPosition.x,Math.min(s.x,this.screenWidth-this.bubbleSize.width-this.edgePadding)),y:Math.max(this.minPosition.y,Math.min(s.y,this.screenHeight-this.bubbleSize.height-this.edgePadding))});const t=i(this.position);this.position=this.isHidden?{...t,x:this.screenWidth-this.visibleHandleWidth}:t;if(this.savedPosition)this.savedPosition=i(this.savedPosition)}setMinPosition(i){this.minPosition=i}async savePosition(i,t){if(!this.enablePositionPersistence||!this.storage)return;try{await Promise.all([this.storage.setItem(l.POSITION_X,i.toString()),this.storage.setItem(l.POSITION_Y,t.toString())])}catch{}}debouncedSavePosition(i,t){if(this.saveTimeout)clearTimeout(this.saveTimeout);this.saveTimeout=setTimeout(()=>this.savePosition(i,t),P)}toggleHideShow(){const i=this.position.x>this.screenWidth-this.bubbleSize.width/2;if(this.isHidden||i){let t;let s;if(this.savedPosition&&this.savedPosition.x<this.screenWidth-this.bubbleSize.width/2){t=this.savedPosition.x;s=this.savedPosition.y}else{t=this.screenWidth-this.bubbleSize.width-20;s=this.position.y}this.isHidden=false;this.onHiddenChange?.(false);this.notify();return{targetPosition:{x:t,y:s},isHiding:false}}else{this.savedPosition={...this.position};const t=this.screenWidth-this.visibleHandleWidth;this.isHidden=true;this.onHiddenChange?.(true);this.notify();return{targetPosition:{x:t,y:this.position.y},isHiding:true}}}forceHide(){if(this.isHidden){return{targetPosition:this.position}}this.savedPosition={...this.position};const i=this.screenWidth-this.visibleHandleWidth;this.isHidden=true;this.onHiddenChange?.(true);this.notify();return{targetPosition:{x:i,y:this.position.y}}}forceShow(){if(!this.isHidden){return{targetPosition:this.position}}let i;let t;if(this.savedPosition){i=this.savedPosition.x;t=this.savedPosition.y}else{i=this.screenWidth-this.bubbleSize.width-20;t=this.position.y}this.isHidden=false;this.onHiddenChange?.(false);this.notify();return{targetPosition:{x:i,y:t}}}handleDragStart(i){this.hasMoved=false;this.dragStartPos={...this.position};this.dragStartMouse={x:i.clientX,y:i.clientY}}handleDragMove(i){const t=i.clientX-this.dragStartMouse.x;const s=i.clientY-this.dragStartMouse.y;const e=Math.abs(t)+Math.abs(s);if(!this.hasMoved&&e>this.dragThreshold){this.hasMoved=true;this.isDragging=true;this.onDraggingChange?.(true);this.notify()}if(this.hasMoved){const n=this.dragStartPos.x+t;const o=this.dragStartPos.y+s;const d=this.getBounds();const c=Math.max(d.minX,Math.min(n,this.screenWidth-this.visibleHandleWidth+this.bubbleSize.width));const h=Math.max(d.minY,Math.min(o,d.maxY));this.position={x:c,y:h};this.onPositionChange?.(this.position);this.notify();return{position:this.position,isDragging:true}}return{position:this.position,isDragging:false}}handleDragEnd(i){const t=!this.hasMoved;if(t){this.isDragging=false;this.onDraggingChange?.(false);this.notify();return{position:this.position,shouldHide:false,wasTap:true}}const s=i.clientX-this.dragStartMouse.x;const e=i.clientY-this.dragStartMouse.y;const n=this.dragStartPos.x+s;const o=this.dragStartPos.y+e;const d=n+this.bubbleSize.width/2;const c=d>this.screenWidth;const h=this.getBounds();if(c){const a=this.screenWidth-this.visibleHandleWidth;const r=Math.max(h.minY,Math.min(o,h.maxY));this.isHidden=true;this.onHiddenChange?.(true);this.isDragging=false;this.onDraggingChange?.(false);this.notify();return{position:{x:a,y:r},shouldHide:true,wasTap:false}}else{if(this.isHidden&&n<this.screenWidth-this.visibleHandleWidth-10){this.isHidden=false;this.onHiddenChange?.(false)}const a=Math.max(h.minX,Math.min(n,this.screenWidth-this.bubbleSize.width-this.edgePadding));const r=Math.max(h.minY,Math.min(o,h.maxY));if(a<this.screenWidth-this.bubbleSize.width/2){this.savedPosition={x:a,y:r}}this.position={x:a,y:r};this.isDragging=false;this.onDraggingChange?.(false);this.debouncedSavePosition(a,r);this.notify();return{position:{x:a,y:r},shouldHide:false,wasTap:false}}}commitPosition(i){this.position=i;this.savePosition(i.x,i.y);this.notify()}destroy(){if(this.saveTimeout){clearTimeout(this.saveTimeout);this.saveTimeout=null}this.listeners.clear()}};function x(i,t){switch(i){case"admin":return{label:"Admin",dotColor:t.success,textColor:t.success};case"internal":return{label:"Internal",dotColor:t.optional,textColor:t.optional};case"user":default:return{label:"User",dotColor:t.muted,textColor:t.secondary}}}function p(i){return{dotSize:Math.max(2,Math.round(i/6)),columnGap:Math.max(2,Math.round(i/12)),rowGap:Math.max(2,Math.round(i/12))}}function v(i){return i.filter(t=>t!=null&&t!==false)}var u={linear:i=>i,easeOutCubic:i=>1-Math.pow(1-i,3),easeInCubic:i=>i*i*i,easeInOutCubic:i=>i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2,easeOutQuad:i=>1-(1-i)*(1-i),easeOutExpo:i=>i===1?1:1-Math.pow(2,-10*i)};function M(i){return u[i]}function b(i,t,s,e=u.easeOutCubic){const n=e(Math.max(0,Math.min(1,s)));return i+(t-i)*n}function H(i,t,s,e=u.easeOutCubic){return{x:b(i.x,t.x,s,e),y:b(i.y,t.y,s,e)}}var C={panel:"#1A1A1A",muted:"#888888",secondary:"#E0E0E0",info:"#20C997",success:"#20C997",optional:"#FFA94D",error:"#EF4444",primary:"#20C997",dragActive:"#20C997"};function I(i,t){if(typeof t==="number"){const s=Math.round(t*255).toString(16).padStart(2,"0");return`${i}${s}`}return`${i}${t}`}export{f as VISIBLE_HANDLE_WIDTH,m as DRAG_THRESHOLD,y as ANIMATION_DURATION,g as EDGE_PADDING,P as SAVE_DEBOUNCE_MS,l as STORAGE_KEYS,S as FloatingToolsStore,x as getUserStatusConfig,p as getGripIconLayout,v as filterValidChildren,u as easing,M as getEasing,b as interpolate,H as interpolatePosition,C as floatingToolsColors,I as withAlpha};
@@ -1 +1 @@
1
- "use client";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);var u=32,b=5,c=200,m=10,P=500,r={POSITION_X:"@react_buoy_bubble_position_x",POSITION_Y:"@react_buoy_bubble_position_y"};var y=class{constructor(i){this.isDragging=false;this.isHidden=false;this.dragStartPos={x:0,y:0};this.dragStartMouse={x:0,y:0};this.hasMoved=false;this.savedPosition=null;this.saveTimeout=null;this.isInitialized=false;this.listeners=new Set;this.subscribe=t=>(this.listeners.add(t),()=>this.listeners.delete(t));this.getSnapshot=()=>this.stateSnapshot;this.screenWidth=i.screenWidth,this.screenHeight=i.screenHeight,this.bubbleSize=i.initialBubbleSize??{width:100,height:32},this.minPosition=i.minPosition??{x:10,y:10},this.visibleHandleWidth=i.visibleHandleWidth??32,this.dragThreshold=i.dragThreshold??5,this.edgePadding=i.edgePadding??10,this.enablePositionPersistence=i.enablePositionPersistence??true,this.storage=i.storage,this.onPositionChange=i.onPositionChange,this.onHiddenChange=i.onHiddenChange,this.onDraggingChange=i.onDraggingChange,this.position=i.initialPosition??{x:this.screenWidth-this.bubbleSize.width-20,y:Math.max(this.minPosition.y,Math.min(100,this.screenHeight-this.bubbleSize.height-this.edgePadding))},this.stateSnapshot=this.createSnapshot()}createSnapshot(){return{position:{...this.position},isDragging:this.isDragging,isHidden:this.isHidden,bubbleSize:{...this.bubbleSize}}}notify(){this.stateSnapshot=this.createSnapshot(),this.listeners.forEach(i=>i())}async initialize(){if(this.isInitialized||!this.enablePositionPersistence||!this.storage){this.isInitialized=true;return}try{let[i,t]=await Promise.all([this.storage.getItem(r.POSITION_X),this.storage.getItem(r.POSITION_Y)]);if(i!==null&&t!==null){let s=parseFloat(i),e=parseFloat(t);if(!Number.isNaN(s)&&!Number.isNaN(e)){let n={x:s,y:e},h=this.validatePosition(n);(Math.abs(n.x-h.x)>5||Math.abs(n.y-h.y)>5)&&this.savePosition(h.x,h.y),this.position=h,h.x>=this.screenWidth-this.visibleHandleWidth-5&&(this.isHidden=true),this.notify()}}}catch{}this.isInitialized=true}getBounds(){return{minX:this.minPosition.x,maxX:this.screenWidth-this.visibleHandleWidth,minY:this.minPosition.y,maxY:this.screenHeight-this.bubbleSize.height-this.edgePadding}}validatePosition(i){let t=this.getBounds();return{x:Math.max(t.minX,Math.min(i.x,t.maxX)),y:Math.max(t.minY,Math.min(i.y,t.maxY))}}setPosition(i){this.position=i,this.onPositionChange?.(i),this.notify()}setBubbleSize(i){this.bubbleSize.width===i.width&&this.bubbleSize.height===i.height||(this.bubbleSize=i,this.isDragging||this.reconcileBounds(),this.notify())}setScreenSize(i,t){this.screenWidth=i,this.screenHeight=t,this.reconcileBounds(),this.notify()}reconcileBounds(){let i=s=>({x:Math.max(this.minPosition.x,Math.min(s.x,this.screenWidth-this.bubbleSize.width-this.edgePadding)),y:Math.max(this.minPosition.y,Math.min(s.y,this.screenHeight-this.bubbleSize.height-this.edgePadding))}),t=i(this.position);this.position=this.isHidden?{...t,x:this.screenWidth-this.visibleHandleWidth}:t,this.savedPosition&&(this.savedPosition=i(this.savedPosition))}setMinPosition(i){this.minPosition=i}async savePosition(i,t){if(!(!this.enablePositionPersistence||!this.storage))try{await Promise.all([this.storage.setItem(r.POSITION_X,i.toString()),this.storage.setItem(r.POSITION_Y,t.toString())])}catch{}}debouncedSavePosition(i,t){this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>this.savePosition(i,t),500)}toggleHideShow(){let i=this.position.x>this.screenWidth-this.bubbleSize.width/2;if(this.isHidden||i){let t,s;return this.savedPosition&&this.savedPosition.x<this.screenWidth-this.bubbleSize.width/2?(t=this.savedPosition.x,s=this.savedPosition.y):(t=this.screenWidth-this.bubbleSize.width-20,s=this.position.y),this.isHidden=false,this.onHiddenChange?.(false),this.notify(),{targetPosition:{x:t,y:s},isHiding:false}}else{this.savedPosition={...this.position};let t=this.screenWidth-this.visibleHandleWidth;return this.isHidden=true,this.onHiddenChange?.(true),this.notify(),{targetPosition:{x:t,y:this.position.y},isHiding:true}}}forceHide(){if(this.isHidden)return{targetPosition:this.position};this.savedPosition={...this.position};let i=this.screenWidth-this.visibleHandleWidth;return this.isHidden=true,this.onHiddenChange?.(true),this.notify(),{targetPosition:{x:i,y:this.position.y}}}forceShow(){if(!this.isHidden)return{targetPosition:this.position};let i,t;return this.savedPosition?(i=this.savedPosition.x,t=this.savedPosition.y):(i=this.screenWidth-this.bubbleSize.width-20,t=this.position.y),this.isHidden=false,this.onHiddenChange?.(false),this.notify(),{targetPosition:{x:i,y:t}}}handleDragStart(i){this.hasMoved=false,this.dragStartPos={...this.position},this.dragStartMouse={x:i.clientX,y:i.clientY}}handleDragMove(i){let t=i.clientX-this.dragStartMouse.x,s=i.clientY-this.dragStartMouse.y,e=Math.abs(t)+Math.abs(s);if(!this.hasMoved&&e>this.dragThreshold&&(this.hasMoved=true,this.isDragging=true,this.onDraggingChange?.(true),this.notify()),this.hasMoved){let n=this.dragStartPos.x+t,h=this.dragStartPos.y+s,o=this.getBounds(),a=Math.max(o.minX,Math.min(n,this.screenWidth-this.visibleHandleWidth+this.bubbleSize.width)),d=Math.max(o.minY,Math.min(h,o.maxY));return this.position={x:a,y:d},this.onPositionChange?.(this.position),this.notify(),{position:this.position,isDragging:true}}return{position:this.position,isDragging:false}}handleDragEnd(i){if(!this.hasMoved)return this.isDragging=false,this.onDraggingChange?.(false),this.notify(),{position:this.position,shouldHide:false,wasTap:true};let t=i.clientX-this.dragStartMouse.x,s=i.clientY-this.dragStartMouse.y,e=this.dragStartPos.x+t,n=this.dragStartPos.y+s,h=e+this.bubbleSize.width/2>this.screenWidth,o=this.getBounds();if(h){let a=this.screenWidth-this.visibleHandleWidth,d=Math.max(o.minY,Math.min(n,o.maxY));return this.isHidden=true,this.onHiddenChange?.(true),this.isDragging=false,this.onDraggingChange?.(false),this.notify(),{position:{x:a,y:d},shouldHide:true,wasTap:false}}else{this.isHidden&&e<this.screenWidth-this.visibleHandleWidth-10&&(this.isHidden=false,this.onHiddenChange?.(false));let a=Math.max(o.minX,Math.min(e,this.screenWidth-this.bubbleSize.width-this.edgePadding)),d=Math.max(o.minY,Math.min(n,o.maxY));return a<this.screenWidth-this.bubbleSize.width/2&&(this.savedPosition={x:a,y:d}),this.position={x:a,y:d},this.isDragging=false,this.onDraggingChange?.(false),this.debouncedSavePosition(a,d),this.notify(),{position:{x:a,y:d},shouldHide:false,wasTap:false}}}commitPosition(i){this.position=i,this.savePosition(i.x,i.y),this.notify()}destroy(){this.saveTimeout&&(clearTimeout(this.saveTimeout),this.saveTimeout=null),this.listeners.clear()}};function x(i,t){switch(i){case"admin":return{label:"Admin",dotColor:t.success,textColor:t.success};case"internal":return{label:"Internal",dotColor:t.optional,textColor:t.optional};case"user":default:return{label:"User",dotColor:t.muted,textColor:t.secondary}}}function p(i){return{dotSize:Math.max(2,Math.round(i/6)),columnGap:Math.max(2,Math.round(i/12)),rowGap:Math.max(2,Math.round(i/12))}}function S(i){return i.filter(t=>t!=null&&t!==false)}var l={linear:i=>i,easeOutCubic:i=>1-Math.pow(1-i,3),easeInCubic:i=>i*i*i,easeInOutCubic:i=>i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2,easeOutQuad:i=>1-(1-i)*(1-i),easeOutExpo:i=>i===1?1:1-Math.pow(2,-10*i)};function v(i){return l[i]}function g(i,t,s,e=l.easeOutCubic){let n=e(Math.max(0,Math.min(1,s)));return i+(t-i)*n}function M(i,t,s,e=l.easeOutCubic){return{x:g(i.x,t.x,s,e),y:g(i.y,t.y,s,e)}}var H={panel:"#1A1A1A",muted:"#888888",secondary:"#E0E0E0",info:"#20C997",success:"#20C997",optional:"#FFA94D",error:"#EF4444",primary:"#20C997",dragActive:"#20C997"};function f(i,t){if(typeof t=="number"){let s=Math.round(t*255).toString(16).padStart(2,"0");return`${i}${s}`}return`${i}${t}`}export{u as a,b,c,m as d,P as e,r as f,y as g,x as h,p as i,S as j,l as k,v as l,g as m,M as n,H as o,f as p};
1
+ "use client";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);var u=32,b=5,c=200,m=10,P=500,d={POSITION_X:"@react_buoy_bubble_position_x",POSITION_Y:"@react_buoy_bubble_position_y"};var y=class{constructor(i){this.isDragging=false;this.isHidden=false;this.dragStartPos={x:0,y:0};this.dragStartMouse={x:0,y:0};this.hasMoved=false;this.savedPosition=null;this.saveTimeout=null;this.isInitialized=false;this.listeners=new Set;this.subscribe=t=>(this.listeners.add(t),()=>this.listeners.delete(t));this.getSnapshot=()=>this.stateSnapshot;this.screenWidth=i.screenWidth,this.screenHeight=i.screenHeight,this.bubbleSize=i.initialBubbleSize??{width:100,height:32},this.minPosition=i.minPosition??{x:10,y:10},this.visibleHandleWidth=i.visibleHandleWidth??32,this.dragThreshold=i.dragThreshold??5,this.edgePadding=i.edgePadding??10,this.enablePositionPersistence=i.enablePositionPersistence??true,this.storage=i.storage,this.onPositionChange=i.onPositionChange,this.onHiddenChange=i.onHiddenChange,this.onDraggingChange=i.onDraggingChange,this.position=i.initialPosition??{x:this.screenWidth-this.bubbleSize.width-20,y:Math.max(this.minPosition.y,Math.min(100,this.screenHeight-this.bubbleSize.height-this.edgePadding))},this.stateSnapshot=this.createSnapshot()}createSnapshot(){return{position:{...this.position},isDragging:this.isDragging,isHidden:this.isHidden,bubbleSize:{...this.bubbleSize}}}notify(){this.stateSnapshot=this.createSnapshot(),this.listeners.forEach(i=>i())}async initialize(){if(this.isInitialized||!this.enablePositionPersistence||!this.storage){this.isInitialized=true;return}try{let[i,t]=await Promise.all([this.storage.getItem(d.POSITION_X),this.storage.getItem(d.POSITION_Y)]);if(i!==null&&t!==null){let s=parseFloat(i),e=parseFloat(t);if(!Number.isNaN(s)&&!Number.isNaN(e)){let n={x:s,y:e},h=this.validatePosition(n);(Math.abs(n.x-h.x)>5||Math.abs(n.y-h.y)>5)&&this.savePosition(h.x,h.y),this.position=h,h.x>=this.screenWidth-this.visibleHandleWidth-5&&(this.isHidden=true),this.notify()}}}catch{}this.isInitialized=true}getBounds(){return{minX:this.minPosition.x,maxX:this.screenWidth-this.visibleHandleWidth,minY:this.minPosition.y,maxY:this.screenHeight-this.bubbleSize.height-this.edgePadding}}validatePosition(i){let t=this.getBounds();return{x:Math.max(t.minX,Math.min(i.x,t.maxX)),y:Math.max(t.minY,Math.min(i.y,t.maxY))}}setPosition(i){this.position=i,this.onPositionChange?.(i),this.notify()}setBubbleSize(i){this.bubbleSize.width===i.width&&this.bubbleSize.height===i.height||(this.bubbleSize=i,this.isDragging||this.reconcileBounds(),this.notify())}setScreenSize(i,t){this.screenWidth=i,this.screenHeight=t,this.reconcileBounds(),this.notify()}reconcileBounds(){let i=s=>({x:Math.max(this.minPosition.x,Math.min(s.x,this.screenWidth-this.bubbleSize.width-this.edgePadding)),y:Math.max(this.minPosition.y,Math.min(s.y,this.screenHeight-this.bubbleSize.height-this.edgePadding))}),t=i(this.position);this.position=this.isHidden?{...t,x:this.screenWidth-this.visibleHandleWidth}:t,this.savedPosition&&(this.savedPosition=i(this.savedPosition))}setMinPosition(i){this.minPosition=i}async savePosition(i,t){if(!(!this.enablePositionPersistence||!this.storage))try{await Promise.all([this.storage.setItem(d.POSITION_X,i.toString()),this.storage.setItem(d.POSITION_Y,t.toString())])}catch{}}debouncedSavePosition(i,t){this.saveTimeout&&clearTimeout(this.saveTimeout),this.saveTimeout=setTimeout(()=>this.savePosition(i,t),500)}toggleHideShow(){let i=this.position.x>this.screenWidth-this.bubbleSize.width/2;if(this.isHidden||i){let t,s;return this.savedPosition&&this.savedPosition.x<this.screenWidth-this.bubbleSize.width/2?(t=this.savedPosition.x,s=this.savedPosition.y):(t=this.screenWidth-this.bubbleSize.width-20,s=this.position.y),this.isHidden=false,this.onHiddenChange?.(false),this.notify(),{targetPosition:{x:t,y:s},isHiding:false}}else{this.savedPosition={...this.position};let t=this.screenWidth-this.visibleHandleWidth;return this.isHidden=true,this.onHiddenChange?.(true),this.notify(),{targetPosition:{x:t,y:this.position.y},isHiding:true}}}forceHide(){if(this.isHidden)return{targetPosition:this.position};this.savedPosition={...this.position};let i=this.screenWidth-this.visibleHandleWidth;return this.isHidden=true,this.onHiddenChange?.(true),this.notify(),{targetPosition:{x:i,y:this.position.y}}}forceShow(){if(!this.isHidden)return{targetPosition:this.position};let i,t;return this.savedPosition?(i=this.savedPosition.x,t=this.savedPosition.y):(i=this.screenWidth-this.bubbleSize.width-20,t=this.position.y),this.isHidden=false,this.onHiddenChange?.(false),this.notify(),{targetPosition:{x:i,y:t}}}handleDragStart(i){this.hasMoved=false,this.dragStartPos={...this.position},this.dragStartMouse={x:i.clientX,y:i.clientY}}handleDragMove(i){let t=i.clientX-this.dragStartMouse.x,s=i.clientY-this.dragStartMouse.y,e=Math.abs(t)+Math.abs(s);if(!this.hasMoved&&e>this.dragThreshold&&(this.hasMoved=true,this.isDragging=true,this.onDraggingChange?.(true),this.notify()),this.hasMoved){let n=this.dragStartPos.x+t,h=this.dragStartPos.y+s,a=this.getBounds(),o=Math.max(a.minX,Math.min(n,this.screenWidth-this.visibleHandleWidth+this.bubbleSize.width)),r=Math.max(a.minY,Math.min(h,a.maxY));return this.position={x:o,y:r},this.onPositionChange?.(this.position),this.notify(),{position:this.position,isDragging:true}}return{position:this.position,isDragging:false}}handleDragEnd(i){if(!this.hasMoved)return this.isDragging=false,this.onDraggingChange?.(false),this.notify(),{position:this.position,shouldHide:false,wasTap:true};let t=i.clientX-this.dragStartMouse.x,s=i.clientY-this.dragStartMouse.y,e=this.dragStartPos.x+t,n=this.dragStartPos.y+s,h=e+this.bubbleSize.width/2>this.screenWidth,a=this.getBounds();if(h){let o=this.screenWidth-this.visibleHandleWidth,r=Math.max(a.minY,Math.min(n,a.maxY));return this.isHidden=true,this.onHiddenChange?.(true),this.isDragging=false,this.onDraggingChange?.(false),this.notify(),{position:{x:o,y:r},shouldHide:true,wasTap:false}}else{this.isHidden&&e<this.screenWidth-this.visibleHandleWidth-10&&(this.isHidden=false,this.onHiddenChange?.(false));let o=Math.max(a.minX,Math.min(e,this.screenWidth-this.bubbleSize.width-this.edgePadding)),r=Math.max(a.minY,Math.min(n,a.maxY));return o<this.screenWidth-this.bubbleSize.width/2&&(this.savedPosition={x:o,y:r}),this.position={x:o,y:r},this.isDragging=false,this.onDraggingChange?.(false),this.debouncedSavePosition(o,r),this.notify(),{position:{x:o,y:r},shouldHide:false,wasTap:false}}}commitPosition(i){this.position=i,this.savePosition(i.x,i.y),this.notify()}destroy(){this.saveTimeout&&(clearTimeout(this.saveTimeout),this.saveTimeout=null),this.listeners.clear()}};function f(i,t){switch(i){case"admin":return{label:"Admin",dotColor:t.success,textColor:t.success};case"internal":return{label:"Internal",dotColor:t.optional,textColor:t.optional};case"user":default:return{label:"User",dotColor:t.muted,textColor:t.secondary}}}function x(i){return{dotSize:Math.max(2,Math.round(i/6)),columnGap:Math.max(2,Math.round(i/12)),rowGap:Math.max(2,Math.round(i/12))}}function p(i){return i.filter(t=>t!=null&&t!==false)}var l={linear:i=>i,easeOutCubic:i=>1-Math.pow(1-i,3),easeInCubic:i=>i*i*i,easeInOutCubic:i=>i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2,easeOutQuad:i=>1-(1-i)*(1-i),easeOutExpo:i=>i===1?1:1-Math.pow(2,-10*i)};function S(i){return l[i]}function g(i,t,s,e=l.easeOutCubic){let n=e(Math.max(0,Math.min(1,s)));return i+(t-i)*n}function v(i,t,s,e=l.easeOutCubic){return{x:g(i.x,t.x,s,e),y:g(i.y,t.y,s,e)}}var M={panel:"#1A1A1A",muted:"#888888",secondary:"#E0E0E0",info:"#20C997",success:"#20C997",optional:"#FFA94D",error:"#EF4444",primary:"#20C997",dragActive:"#20C997"};function H(i,t){if(typeof t=="number"){let s=Math.round(t*255).toString(16).padStart(2,"0");return`${i}${s}`}return`${i}${t}`}export{u as a,b,c,m as d,P as e,d as f,y as g,f as h,x as i,p as j,l as k,S as l,g as m,v as n,M as o,H as p};
@@ -1 +1 @@
1
- "use client";import{a,b as s,c as o,d as t,e as i,f as e,g as l,h as n,i as r,j as E,k as g,l as A,m as D,n as S,o as p,p as I}from"./chunks/chunk-PUCCT3HF.mjs";export{o as ANIMATION_DURATION,s as DRAG_THRESHOLD,t as EDGE_PADDING,l as FloatingToolsStore,i as SAVE_DEBOUNCE_MS,e as STORAGE_KEYS,a as VISIBLE_HANDLE_WIDTH,g as easing,E as filterValidChildren,p as floatingToolsColors,A as getEasing,r as getGripIconLayout,n as getUserStatusConfig,D as interpolate,S as interpolatePosition,I as withAlpha};
1
+ "use client";import{a,b as s,c as o,d as t,e as i,f as e,g as l,h as n,i as r,j as E,k as g,l as A,m as D,n as S,o as p,p as I}from"./chunks/chunk-C6BJ4WIF.mjs";export{o as ANIMATION_DURATION,s as DRAG_THRESHOLD,t as EDGE_PADDING,l as FloatingToolsStore,i as SAVE_DEBOUNCE_MS,e as STORAGE_KEYS,a as VISIBLE_HANDLE_WIDTH,g as easing,E as filterValidChildren,p as floatingToolsColors,A as getEasing,r as getGripIconLayout,n as getUserStatusConfig,D as interpolate,S as interpolatePosition,I as withAlpha};