@buoy-gg/floating-tools-react 7.0.15 → 7.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -54,6 +54,14 @@ interface UseFloatingToolsReturn {
54
54
  setScreenSize: (width: number, height: number) => void;
55
55
  /** Update min position (for safe area insets) */
56
56
  setMinPosition: (minPos: Position) => void;
57
+ /** Force hide to the screen edge (pushToSide behavior) */
58
+ forceHide: () => {
59
+ targetPosition: Position;
60
+ };
61
+ /** Restore from a forced hide (pushToSide release) */
62
+ forceShow: () => {
63
+ targetPosition: Position;
64
+ };
57
65
  };
58
66
  }
59
67
  /**
package/dist/index.d.ts CHANGED
@@ -54,6 +54,14 @@ interface UseFloatingToolsReturn {
54
54
  setScreenSize: (width: number, height: number) => void;
55
55
  /** Update min position (for safe area insets) */
56
56
  setMinPosition: (minPos: Position) => void;
57
+ /** Force hide to the screen edge (pushToSide behavior) */
58
+ forceHide: () => {
59
+ targetPosition: Position;
60
+ };
61
+ /** Restore from a forced hide (pushToSide release) */
62
+ forceShow: () => {
63
+ targetPosition: Position;
64
+ };
57
65
  };
58
66
  }
59
67
  /**
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var X=Object.defineProperty;var Ee=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var Pe=Object.prototype.hasOwnProperty;var Ae=(t,o)=>{for(var s in o)X(t,s,{get:o[s],enumerable:!0})},Fe=(t,o,s,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of he(o))!Pe.call(t,a)&&a!==s&&X(t,a,{get:()=>o[a],enumerable:!(n=Ee(o,a))||n.enumerable});return t};var Ie=t=>Fe(X({},"__esModule",{value:!0}),t);var Oe={};Ae(Oe,{ANIMATION_DURATION:()=>e.ANIMATION_DURATION,DIAL_BUTTON_SIZE:()=>e.DIAL_BUTTON_SIZE,DIAL_GRID_LINE_COUNT:()=>e.DIAL_GRID_LINE_COUNT,DIAL_ICON_PADDING:()=>e.DIAL_ICON_PADDING,DIAL_ICON_SIZE:()=>e.DIAL_ICON_SIZE,DIAL_START_ANGLE:()=>e.DIAL_START_ANGLE,DRAG_THRESHOLD:()=>e.DRAG_THRESHOLD,DevToolsContext:()=>O,DevToolsProvider:()=>ae,DevToolsStateManager:()=>L.DevToolsStateManager,EDGE_PADDING:()=>e.EDGE_PADDING,FloatingToolsContext:()=>V,FloatingToolsProvider:()=>q,FloatingToolsStore:()=>e.FloatingToolsStore,MAX_DIAL_SLOTS:()=>e.MAX_DIAL_SLOTS,MAX_SETTINGS_DIAL_SLOTS:()=>H.MAX_SETTINGS_DIAL_SLOTS,SETTINGS_STORAGE_KEY:()=>H.SETTINGS_STORAGE_KEY,SettingsContext:()=>N,SettingsEventBus:()=>K.SettingsEventBus,SettingsProvider:()=>j,USAGE_HALF_LIFE_MS:()=>v.USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE:()=>v.USAGE_MIN_SCORE,VISIBLE_HANDLE_WIDTH:()=>e.VISIBLE_HANDLE_WIDTH,canEnableDialTool:()=>c.canEnableDialTool,countEnabledTools:()=>c.countEnabledTools,decayScore:()=>v.decayScore,devToolsReducer:()=>L.devToolsReducer,devToolsStateManager:()=>L.devToolsStateManager,dialAnimationConfig:()=>e.dialAnimationConfig,dialCSSBeziers:()=>e.dialCSSBeziers,dialColors:()=>e.dialColors,dialStyles:()=>e.dialStyles,easing:()=>e.easing,enforceDialLimit:()=>c.enforceDialLimit,floatingToolsColors:()=>e.floatingToolsColors,generateDefaultSettings:()=>c.generateDefaultSettings,generateDialCSSKeyframes:()=>e.generateDialCSSKeyframes,getAllIconPositions:()=>e.getAllIconPositions,getDialCSSAnimationStyles:()=>e.getDialCSSAnimationStyles,getDialCSSKeyframesString:()=>e.getDialCSSKeyframesString,getDialLayout:()=>e.getDialLayout,getEnabledToolIds:()=>c.getEnabledToolIds,getGridLineRotations:()=>e.getGridLineRotations,getGripIconLayout:()=>e.getGripIconLayout,getIconAngle:()=>e.getIconAngle,getIconPosition:()=>e.getIconPosition,getIconStaggerInputRange:()=>e.getIconStaggerInputRange,getSpiralAnimationPosition:()=>e.getSpiralAnimationPosition,getStaggeredIconProgress:()=>e.getStaggeredIconProgress,getToolColor:()=>y.getToolColor,getToolDescription:()=>E.getToolDescription,getToolLabel:()=>E.getToolLabel,getUserStatusConfig:()=>e.getUserStatusConfig,globalSettingsConfig:()=>De.globalSettingsConfig,interleaveWithDividers:()=>de,interpolate:()=>e.interpolate,interpolatePosition:()=>e.interpolatePosition,mergeSettingsWithDefaults:()=>c.mergeSettingsWithDefaults,pruneUsage:()=>v.pruneUsage,rankToolIds:()=>v.rankToolIds,recordUsage:()=>v.recordUsage,sanitizeFloatingSettings:()=>c.sanitizeFloatingSettings,settingsColors:()=>y.settingsColors,settingsEventBus:()=>K.settingsEventBus,settingsStyles:()=>y.settingsStyles,settingsTabs:()=>pe.settingsTabs,toolColors:()=>y.toolColors,toolDescriptions:()=>E.toolDescriptions,toolLabels:()=>E.toolLabels,useDevTools:()=>Se,useDevToolsContext:()=>U,useDevToolsDial:()=>Te,useDevToolsEnvironment:()=>ge,useDevToolsSettings:()=>ue,useDevToolsState:()=>R,useDialState:()=>se,useFloatingTools:()=>Y,useFloatingToolsContext:()=>$,useOptionalDevToolsContext:()=>re,useOptionalSettingsContext:()=>te,useSettings:()=>I,useSettingsContext:()=>ee,useSettingsModalState:()=>ie,withAlpha:()=>e.withAlpha});module.exports=Ie(Oe);var f=require("react"),J=require("@buoy-gg/floating-tools-core"),Z=require("react");function Y(t){let{screenSize:o,...s}=t,n=(0,f.useMemo)(()=>new J.FloatingToolsStore({...s,screenWidth:o.width,screenHeight:o.height}),[s.enablePositionPersistence,s.storage,s.visibleHandleWidth,s.dragThreshold,s.edgePadding]),a=(0,f.useRef)(!1),[d,m]=(0,Z.useState)(!1);(0,f.useEffect)(()=>(a.current||(a.current=!0,n.initialize().then(()=>{m(!0)})),()=>{n.destroy()}),[n]),(0,f.useEffect)(()=>{n.setScreenSize(o.width,o.height)},[n,o.width,o.height]);let D=(0,f.useSyncExternalStore)(n.subscribe,n.getSnapshot),T=(0,f.useMemo)(()=>({handleDragStart:S=>n.handleDragStart(S),handleDragMove:S=>n.handleDragMove(S),handleDragEnd:S=>n.handleDragEnd(S),toggleHideShow:()=>n.toggleHideShow(),commitPosition:S=>n.commitPosition(S),setBubbleSize:S=>n.setBubbleSize(S),setScreenSize:(S,h)=>n.setScreenSize(S,h),setMinPosition:S=>n.setMinPosition(S)}),[n]);return{state:D,store:n,isInitialized:d,actions:T}}var z=require("react"),Q=require("react/jsx-runtime"),Re={isDragging:!1,isHidden:!1},V=(0,z.createContext)(Re);function $(){return(0,z.useContext)(V)}function q({value:t,children:o}){return(0,Q.jsx)(V.Provider,{value:t,children:o})}var r=require("react"),g=require("@buoy-gg/floating-tools-core");function I(t={}){let{availableTools:o=[],defaultFloatingTools:s,defaultDialTools:n,storage:a,initialSettings:d,onSettingsChange:m,subscribeToEventBus:D=!0}=t,T=(0,r.useMemo)(()=>(0,g.generateDefaultSettings)(o,s,n),[o,s,n]),S=(0,r.useMemo)(()=>Object.keys(T.dialTools),[T]),h=(0,r.useMemo)(()=>Object.keys(T.floatingTools).filter(i=>i!=="environment"),[T]),[l,x]=(0,r.useState)(d??T),[_,A]=(0,r.useState)(!0),[w,M]=(0,r.useState)(!1),[F,W]=(0,r.useState)(null),B=(0,r.useCallback)(async()=>{if(!a){A(!1),M(!0);return}try{A(!0),W(null);let i=await a.getItem(g.SETTINGS_STORAGE_KEY);if(i){let u=JSON.parse(i),b=(0,g.mergeSettingsWithDefaults)(T,u,{allowedDialKeys:S,allowedFloatingKeys:h});x(b)}else x(T)}catch(i){console.error("Failed to load dev tools settings:",i),W(i instanceof Error?i.message:"Failed to load settings"),x(T)}finally{A(!1),M(!0)}},[a,T,S,h]),p=(0,r.useCallback)(async i=>{let u={...i,dialTools:(0,g.enforceDialLimit)(i.dialTools)};try{a&&await a.setItem(g.SETTINGS_STORAGE_KEY,JSON.stringify(u)),x(u),m?.(u),g.settingsEventBus.emit(u)}catch(b){throw console.error("Failed to save dev tools settings:",b),W(b instanceof Error?b.message:"Failed to save settings"),b}},[a,m]),fe=(0,r.useCallback)(i=>{let u=(0,g.countEnabledTools)(l.dialTools);if(!l.dialTools[i]&&u>=g.MAX_SETTINGS_DIAL_SLOTS)return;let k={...l,dialTools:{...l.dialTools,[i]:!l.dialTools[i]}};p(k)},[l,p]),me=(0,r.useCallback)(i=>{let u={...l,floatingTools:{...l.floatingTools,[i]:!l.floatingTools[i]}};p(u)},[l,p]),be=(0,r.useCallback)(()=>{let i={...l,floatingTools:{...l.floatingTools,environment:!l.floatingTools.environment}};p(i)},[l,p]),xe=(0,r.useCallback)(i=>{let u={...l,globalSettings:{...l.globalSettings,[i]:!l.globalSettings?.[i]}};p(u)},[l,p]),Ce=(0,r.useCallback)(async()=>{await p(T)},[T,p]);(0,r.useEffect)(()=>{B()},[B]),(0,r.useEffect)(()=>D?g.settingsEventBus.addListener(u=>{x(u)}):void 0,[D]);let ye=(0,r.useMemo)(()=>{let i=(0,g.countEnabledTools)(l.dialTools),{dial:u,floating:b}=(0,g.getEnabledToolIds)(l);return{dialToolCount:i,isDialFull:i>=g.MAX_SETTINGS_DIAL_SLOTS,enabledDialTools:u,enabledFloatingTools:b,canEnableDialTool:k=>l.dialTools[k]?!0:i<g.MAX_SETTINGS_DIAL_SLOTS}},[l]);return{settings:l,isLoading:_,isInitialized:w,error:F,actions:{toggleDialTool:fe,toggleFloatingTool:me,toggleEnvironment:be,toggleGlobalSetting:xe,saveSettings:p,resetToDefaults:Ce,reloadSettings:B},helpers:ye}}var P=require("react");var oe=require("react/jsx-runtime"),N=(0,P.createContext)(null);function j({children:t,availableTools:o=[],defaultFloatingTools:s,defaultDialTools:n,storage:a,initialSettings:d,onSettingsChange:m}){let D=I({availableTools:o,defaultFloatingTools:s,defaultDialTools:n,storage:a,initialSettings:d,onSettingsChange:m}),T=(0,P.useMemo)(()=>({...D,availableTools:o}),[D,o]);return(0,oe.jsx)(N.Provider,{value:T,children:t})}function ee(){let t=(0,P.useContext)(N);if(!t)throw new Error("useSettingsContext must be used within a SettingsProvider");return t}function te(){return(0,P.useContext)(N)}var G=require("react"),ne=require("@buoy-gg/floating-tools-core");function R(t={}){let{manager:o=ne.devToolsStateManager}=t,s=(0,G.useSyncExternalStore)(o.subscribe,o.getState,o.getServerState),n=(0,G.useMemo)(()=>({openDial:()=>o.openDial(),closeDial:()=>o.closeDial(),toggleDial:()=>o.toggleDial(),openSettings:()=>o.openSettings(),closeSettings:()=>o.closeSettings(),setSettingsTab:a=>o.setSettingsTab(a),initialize:()=>o.initialize(),reset:()=>o.reset()}),[o]);return{state:s,actions:n,manager:o}}function se(t={}){let{state:o,actions:s}=R(t);return{isOpen:o.isDialOpen,open:s.openDial,close:s.closeDial,toggle:s.toggleDial}}function ie(t={}){let{state:o,actions:s}=R(t);return{isOpen:o.isSettingsOpen,activeTab:o.activeSettingsTab,open:s.openSettings,close:s.closeSettings,setTab:s.setSettingsTab}}var C=require("react"),le=require("@buoy-gg/floating-tools-core");var ce=require("react/jsx-runtime"),O=(0,C.createContext)(null);O.displayName="DevToolsContext";function ae({children:t,tools:o=[],defaultFloatingTools:s,defaultDialTools:n,environment:a,userRole:d,availableEnvironments:m,onEnvironmentSwitch:D,stateManager:T=le.devToolsStateManager}){let{state:S,actions:h}=R({manager:T}),l=(0,C.useMemo)(()=>o.map(F=>({id:F.id,name:F.name,description:F.description,slot:F.slot})),[o]),{settings:x,isLoading:_,actions:A,helpers:w}=I({availableTools:l,defaultFloatingTools:s,defaultDialTools:n}),M=(0,C.useMemo)(()=>({devToolsState:S,devToolsActions:h,settings:x,isSettingsLoading:_,settingsActions:A,settingsHelpers:w,tools:o,environment:a,userRole:d,availableEnvironments:m,onEnvironmentSwitch:D}),[S,h,x,_,A,w,o,a,d,m,D]);return(0,ce.jsx)(O.Provider,{value:M,children:t})}function U(){let t=(0,C.useContext)(O);if(!t)throw new Error("useDevToolsContext must be used within a DevToolsProvider. Wrap your app with <DevToolsProvider> or <FloatingDevTools>.");return t}function re(){return(0,C.useContext)(O)}function ge(){let t=U();return{environment:t.environment,userRole:t.userRole,availableEnvironments:t.availableEnvironments,onEnvironmentSwitch:t.onEnvironmentSwitch}}function Se(){let t=U();return{tools:t.tools,settings:t.settings,isLoading:t.isSettingsLoading}}function Te(){let t=U();return{isOpen:t.devToolsState.isDialOpen,open:t.devToolsActions.openDial,close:t.devToolsActions.closeDial,toggle:t.devToolsActions.toggleDial}}function ue(){let t=U();return{isOpen:t.devToolsState.isSettingsOpen,activeTab:t.devToolsState.activeSettingsTab,open:t.devToolsActions.openSettings,close:t.devToolsActions.closeSettings,setTab:t.devToolsActions.setSettingsTab,settings:t.settings,actions:t.settingsActions,helpers:t.settingsHelpers}}var ve=require("@buoy-gg/floating-tools-core");function de(t,o){let s=(0,ve.filterValidChildren)(t),n=[];return s.forEach((a,d)=>{n.push(a),d<s.length-1&&n.push(o(`divider-${d}`))}),n}var L=require("@buoy-gg/floating-tools-core"),e=require("@buoy-gg/floating-tools-core"),v=require("@buoy-gg/floating-tools-core"),H=require("@buoy-gg/floating-tools-core"),pe=require("@buoy-gg/floating-tools-core"),y=require("@buoy-gg/floating-tools-core"),E=require("@buoy-gg/floating-tools-core"),De=require("@buoy-gg/floating-tools-core"),c=require("@buoy-gg/floating-tools-core"),K=require("@buoy-gg/floating-tools-core");0&&(module.exports={ANIMATION_DURATION,DIAL_BUTTON_SIZE,DIAL_GRID_LINE_COUNT,DIAL_ICON_PADDING,DIAL_ICON_SIZE,DIAL_START_ANGLE,DRAG_THRESHOLD,DevToolsContext,DevToolsProvider,DevToolsStateManager,EDGE_PADDING,FloatingToolsContext,FloatingToolsProvider,FloatingToolsStore,MAX_DIAL_SLOTS,MAX_SETTINGS_DIAL_SLOTS,SETTINGS_STORAGE_KEY,SettingsContext,SettingsEventBus,SettingsProvider,USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE,VISIBLE_HANDLE_WIDTH,canEnableDialTool,countEnabledTools,decayScore,devToolsReducer,devToolsStateManager,dialAnimationConfig,dialCSSBeziers,dialColors,dialStyles,easing,enforceDialLimit,floatingToolsColors,generateDefaultSettings,generateDialCSSKeyframes,getAllIconPositions,getDialCSSAnimationStyles,getDialCSSKeyframesString,getDialLayout,getEnabledToolIds,getGridLineRotations,getGripIconLayout,getIconAngle,getIconPosition,getIconStaggerInputRange,getSpiralAnimationPosition,getStaggeredIconProgress,getToolColor,getToolDescription,getToolLabel,getUserStatusConfig,globalSettingsConfig,interleaveWithDividers,interpolate,interpolatePosition,mergeSettingsWithDefaults,pruneUsage,rankToolIds,recordUsage,sanitizeFloatingSettings,settingsColors,settingsEventBus,settingsStyles,settingsTabs,toolColors,toolDescriptions,toolLabels,useDevTools,useDevToolsContext,useDevToolsDial,useDevToolsEnvironment,useDevToolsSettings,useDevToolsState,useDialState,useFloatingTools,useFloatingToolsContext,useOptionalDevToolsContext,useOptionalSettingsContext,useSettings,useSettingsContext,useSettingsModalState,withAlpha});
1
+ "use strict";var X=Object.defineProperty;var Ee=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var Pe=Object.prototype.hasOwnProperty;var Ae=(t,o)=>{for(var s in o)X(t,s,{get:o[s],enumerable:!0})},Fe=(t,o,s,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of he(o))!Pe.call(t,a)&&a!==s&&X(t,a,{get:()=>o[a],enumerable:!(n=Ee(o,a))||n.enumerable});return t};var Ie=t=>Fe(X({},"__esModule",{value:!0}),t);var Oe={};Ae(Oe,{ANIMATION_DURATION:()=>e.ANIMATION_DURATION,DIAL_BUTTON_SIZE:()=>e.DIAL_BUTTON_SIZE,DIAL_GRID_LINE_COUNT:()=>e.DIAL_GRID_LINE_COUNT,DIAL_ICON_PADDING:()=>e.DIAL_ICON_PADDING,DIAL_ICON_SIZE:()=>e.DIAL_ICON_SIZE,DIAL_START_ANGLE:()=>e.DIAL_START_ANGLE,DRAG_THRESHOLD:()=>e.DRAG_THRESHOLD,DevToolsContext:()=>O,DevToolsProvider:()=>ae,DevToolsStateManager:()=>L.DevToolsStateManager,EDGE_PADDING:()=>e.EDGE_PADDING,FloatingToolsContext:()=>V,FloatingToolsProvider:()=>q,FloatingToolsStore:()=>e.FloatingToolsStore,MAX_DIAL_SLOTS:()=>e.MAX_DIAL_SLOTS,MAX_SETTINGS_DIAL_SLOTS:()=>H.MAX_SETTINGS_DIAL_SLOTS,SETTINGS_STORAGE_KEY:()=>H.SETTINGS_STORAGE_KEY,SettingsContext:()=>w,SettingsEventBus:()=>K.SettingsEventBus,SettingsProvider:()=>j,USAGE_HALF_LIFE_MS:()=>v.USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE:()=>v.USAGE_MIN_SCORE,VISIBLE_HANDLE_WIDTH:()=>e.VISIBLE_HANDLE_WIDTH,canEnableDialTool:()=>u.canEnableDialTool,countEnabledTools:()=>u.countEnabledTools,decayScore:()=>v.decayScore,devToolsReducer:()=>L.devToolsReducer,devToolsStateManager:()=>L.devToolsStateManager,dialAnimationConfig:()=>e.dialAnimationConfig,dialCSSBeziers:()=>e.dialCSSBeziers,dialColors:()=>e.dialColors,dialStyles:()=>e.dialStyles,easing:()=>e.easing,enforceDialLimit:()=>u.enforceDialLimit,floatingToolsColors:()=>e.floatingToolsColors,generateDefaultSettings:()=>u.generateDefaultSettings,generateDialCSSKeyframes:()=>e.generateDialCSSKeyframes,getAllIconPositions:()=>e.getAllIconPositions,getDialCSSAnimationStyles:()=>e.getDialCSSAnimationStyles,getDialCSSKeyframesString:()=>e.getDialCSSKeyframesString,getDialLayout:()=>e.getDialLayout,getEnabledToolIds:()=>u.getEnabledToolIds,getGridLineRotations:()=>e.getGridLineRotations,getGripIconLayout:()=>e.getGripIconLayout,getIconAngle:()=>e.getIconAngle,getIconPosition:()=>e.getIconPosition,getIconStaggerInputRange:()=>e.getIconStaggerInputRange,getSpiralAnimationPosition:()=>e.getSpiralAnimationPosition,getStaggeredIconProgress:()=>e.getStaggeredIconProgress,getToolColor:()=>y.getToolColor,getToolDescription:()=>E.getToolDescription,getToolLabel:()=>E.getToolLabel,getUserStatusConfig:()=>e.getUserStatusConfig,globalSettingsConfig:()=>De.globalSettingsConfig,interleaveWithDividers:()=>de,interpolate:()=>e.interpolate,interpolatePosition:()=>e.interpolatePosition,mergeSettingsWithDefaults:()=>u.mergeSettingsWithDefaults,pruneUsage:()=>v.pruneUsage,rankToolIds:()=>v.rankToolIds,recordUsage:()=>v.recordUsage,sanitizeFloatingSettings:()=>u.sanitizeFloatingSettings,settingsColors:()=>y.settingsColors,settingsEventBus:()=>K.settingsEventBus,settingsStyles:()=>y.settingsStyles,settingsTabs:()=>pe.settingsTabs,toolColors:()=>y.toolColors,toolDescriptions:()=>E.toolDescriptions,toolLabels:()=>E.toolLabels,useDevTools:()=>Se,useDevToolsContext:()=>U,useDevToolsDial:()=>Te,useDevToolsEnvironment:()=>ge,useDevToolsSettings:()=>ce,useDevToolsState:()=>R,useDialState:()=>se,useFloatingTools:()=>Y,useFloatingToolsContext:()=>$,useOptionalDevToolsContext:()=>re,useOptionalSettingsContext:()=>te,useSettings:()=>I,useSettingsContext:()=>ee,useSettingsModalState:()=>ie,withAlpha:()=>e.withAlpha});module.exports=Ie(Oe);var f=require("react"),J=require("@buoy-gg/floating-tools-core"),Z=require("react");function Y(t){let{screenSize:o,...s}=t,n=(0,f.useMemo)(()=>new J.FloatingToolsStore({...s,screenWidth:o.width,screenHeight:o.height}),[s.enablePositionPersistence,s.storage,s.visibleHandleWidth,s.dragThreshold,s.edgePadding]),a=(0,f.useRef)(!1),[d,m]=(0,Z.useState)(!1);(0,f.useEffect)(()=>(a.current||(a.current=!0,n.initialize().then(()=>{m(!0)})),()=>{n.destroy()}),[n]),(0,f.useEffect)(()=>{n.setScreenSize(o.width,o.height)},[n,o.width,o.height]);let D=(0,f.useSyncExternalStore)(n.subscribe,n.getSnapshot),T=(0,f.useMemo)(()=>({handleDragStart:S=>n.handleDragStart(S),handleDragMove:S=>n.handleDragMove(S),handleDragEnd:S=>n.handleDragEnd(S),toggleHideShow:()=>n.toggleHideShow(),commitPosition:S=>n.commitPosition(S),setBubbleSize:S=>n.setBubbleSize(S),setScreenSize:(S,h)=>n.setScreenSize(S,h),setMinPosition:S=>n.setMinPosition(S),forceHide:()=>n.forceHide(),forceShow:()=>n.forceShow()}),[n]);return{state:D,store:n,isInitialized:d,actions:T}}var z=require("react"),Q=require("react/jsx-runtime"),Re={isDragging:!1,isHidden:!1},V=(0,z.createContext)(Re);function $(){return(0,z.useContext)(V)}function q({value:t,children:o}){return(0,Q.jsx)(V.Provider,{value:t,children:o})}var r=require("react"),g=require("@buoy-gg/floating-tools-core");function I(t={}){let{availableTools:o=[],defaultFloatingTools:s,defaultDialTools:n,storage:a,initialSettings:d,onSettingsChange:m,subscribeToEventBus:D=!0}=t,T=(0,r.useMemo)(()=>(0,g.generateDefaultSettings)(o,s,n),[o,s,n]),S=(0,r.useMemo)(()=>Object.keys(T.dialTools),[T]),h=(0,r.useMemo)(()=>Object.keys(T.floatingTools).filter(i=>i!=="environment"),[T]),[l,x]=(0,r.useState)(d??T),[N,A]=(0,r.useState)(!0),[_,M]=(0,r.useState)(!1),[F,W]=(0,r.useState)(null),B=(0,r.useCallback)(async()=>{if(!a){A(!1),M(!0);return}try{A(!0),W(null);let i=await a.getItem(g.SETTINGS_STORAGE_KEY);if(i){let c=JSON.parse(i),b=(0,g.mergeSettingsWithDefaults)(T,c,{allowedDialKeys:S,allowedFloatingKeys:h});x(b)}else x(T)}catch(i){console.error("Failed to load dev tools settings:",i),W(i instanceof Error?i.message:"Failed to load settings"),x(T)}finally{A(!1),M(!0)}},[a,T,S,h]),p=(0,r.useCallback)(async i=>{let c={...i,dialTools:(0,g.enforceDialLimit)(i.dialTools)};try{a&&await a.setItem(g.SETTINGS_STORAGE_KEY,JSON.stringify(c)),x(c),m?.(c),g.settingsEventBus.emit(c)}catch(b){throw console.error("Failed to save dev tools settings:",b),W(b instanceof Error?b.message:"Failed to save settings"),b}},[a,m]),fe=(0,r.useCallback)(i=>{let c=(0,g.countEnabledTools)(l.dialTools);if(!l.dialTools[i]&&c>=g.MAX_SETTINGS_DIAL_SLOTS)return;let k={...l,dialTools:{...l.dialTools,[i]:!l.dialTools[i]}};p(k)},[l,p]),me=(0,r.useCallback)(i=>{let c={...l,floatingTools:{...l.floatingTools,[i]:!l.floatingTools[i]}};p(c)},[l,p]),be=(0,r.useCallback)(()=>{let i={...l,floatingTools:{...l.floatingTools,environment:!l.floatingTools.environment}};p(i)},[l,p]),xe=(0,r.useCallback)(i=>{let c={...l,globalSettings:{...l.globalSettings,[i]:!l.globalSettings?.[i]}};p(c)},[l,p]),Ce=(0,r.useCallback)(async()=>{await p(T)},[T,p]);(0,r.useEffect)(()=>{B()},[B]),(0,r.useEffect)(()=>D?g.settingsEventBus.addListener(c=>{x(c)}):void 0,[D]);let ye=(0,r.useMemo)(()=>{let i=(0,g.countEnabledTools)(l.dialTools),{dial:c,floating:b}=(0,g.getEnabledToolIds)(l);return{dialToolCount:i,isDialFull:i>=g.MAX_SETTINGS_DIAL_SLOTS,enabledDialTools:c,enabledFloatingTools:b,canEnableDialTool:k=>l.dialTools[k]?!0:i<g.MAX_SETTINGS_DIAL_SLOTS}},[l]);return{settings:l,isLoading:N,isInitialized:_,error:F,actions:{toggleDialTool:fe,toggleFloatingTool:me,toggleEnvironment:be,toggleGlobalSetting:xe,saveSettings:p,resetToDefaults:Ce,reloadSettings:B},helpers:ye}}var P=require("react");var oe=require("react/jsx-runtime"),w=(0,P.createContext)(null);function j({children:t,availableTools:o=[],defaultFloatingTools:s,defaultDialTools:n,storage:a,initialSettings:d,onSettingsChange:m}){let D=I({availableTools:o,defaultFloatingTools:s,defaultDialTools:n,storage:a,initialSettings:d,onSettingsChange:m}),T=(0,P.useMemo)(()=>({...D,availableTools:o}),[D,o]);return(0,oe.jsx)(w.Provider,{value:T,children:t})}function ee(){let t=(0,P.useContext)(w);if(!t)throw new Error("useSettingsContext must be used within a SettingsProvider");return t}function te(){return(0,P.useContext)(w)}var G=require("react"),ne=require("@buoy-gg/floating-tools-core");function R(t={}){let{manager:o=ne.devToolsStateManager}=t,s=(0,G.useSyncExternalStore)(o.subscribe,o.getState,o.getServerState),n=(0,G.useMemo)(()=>({openDial:()=>o.openDial(),closeDial:()=>o.closeDial(),toggleDial:()=>o.toggleDial(),openSettings:()=>o.openSettings(),closeSettings:()=>o.closeSettings(),setSettingsTab:a=>o.setSettingsTab(a),initialize:()=>o.initialize(),reset:()=>o.reset()}),[o]);return{state:s,actions:n,manager:o}}function se(t={}){let{state:o,actions:s}=R(t);return{isOpen:o.isDialOpen,open:s.openDial,close:s.closeDial,toggle:s.toggleDial}}function ie(t={}){let{state:o,actions:s}=R(t);return{isOpen:o.isSettingsOpen,activeTab:o.activeSettingsTab,open:s.openSettings,close:s.closeSettings,setTab:s.setSettingsTab}}var C=require("react"),le=require("@buoy-gg/floating-tools-core");var ue=require("react/jsx-runtime"),O=(0,C.createContext)(null);O.displayName="DevToolsContext";function ae({children:t,tools:o=[],defaultFloatingTools:s,defaultDialTools:n,environment:a,userRole:d,availableEnvironments:m,onEnvironmentSwitch:D,stateManager:T=le.devToolsStateManager}){let{state:S,actions:h}=R({manager:T}),l=(0,C.useMemo)(()=>o.map(F=>({id:F.id,name:F.name,description:F.description,slot:F.slot})),[o]),{settings:x,isLoading:N,actions:A,helpers:_}=I({availableTools:l,defaultFloatingTools:s,defaultDialTools:n}),M=(0,C.useMemo)(()=>({devToolsState:S,devToolsActions:h,settings:x,isSettingsLoading:N,settingsActions:A,settingsHelpers:_,tools:o,environment:a,userRole:d,availableEnvironments:m,onEnvironmentSwitch:D}),[S,h,x,N,A,_,o,a,d,m,D]);return(0,ue.jsx)(O.Provider,{value:M,children:t})}function U(){let t=(0,C.useContext)(O);if(!t)throw new Error("useDevToolsContext must be used within a DevToolsProvider. Wrap your app with <DevToolsProvider> or <FloatingDevTools>.");return t}function re(){return(0,C.useContext)(O)}function ge(){let t=U();return{environment:t.environment,userRole:t.userRole,availableEnvironments:t.availableEnvironments,onEnvironmentSwitch:t.onEnvironmentSwitch}}function Se(){let t=U();return{tools:t.tools,settings:t.settings,isLoading:t.isSettingsLoading}}function Te(){let t=U();return{isOpen:t.devToolsState.isDialOpen,open:t.devToolsActions.openDial,close:t.devToolsActions.closeDial,toggle:t.devToolsActions.toggleDial}}function ce(){let t=U();return{isOpen:t.devToolsState.isSettingsOpen,activeTab:t.devToolsState.activeSettingsTab,open:t.devToolsActions.openSettings,close:t.devToolsActions.closeSettings,setTab:t.devToolsActions.setSettingsTab,settings:t.settings,actions:t.settingsActions,helpers:t.settingsHelpers}}var ve=require("@buoy-gg/floating-tools-core");function de(t,o){let s=(0,ve.filterValidChildren)(t),n=[];return s.forEach((a,d)=>{n.push(a),d<s.length-1&&n.push(o(`divider-${d}`))}),n}var L=require("@buoy-gg/floating-tools-core"),e=require("@buoy-gg/floating-tools-core"),v=require("@buoy-gg/floating-tools-core"),H=require("@buoy-gg/floating-tools-core"),pe=require("@buoy-gg/floating-tools-core"),y=require("@buoy-gg/floating-tools-core"),E=require("@buoy-gg/floating-tools-core"),De=require("@buoy-gg/floating-tools-core"),u=require("@buoy-gg/floating-tools-core"),K=require("@buoy-gg/floating-tools-core");0&&(module.exports={ANIMATION_DURATION,DIAL_BUTTON_SIZE,DIAL_GRID_LINE_COUNT,DIAL_ICON_PADDING,DIAL_ICON_SIZE,DIAL_START_ANGLE,DRAG_THRESHOLD,DevToolsContext,DevToolsProvider,DevToolsStateManager,EDGE_PADDING,FloatingToolsContext,FloatingToolsProvider,FloatingToolsStore,MAX_DIAL_SLOTS,MAX_SETTINGS_DIAL_SLOTS,SETTINGS_STORAGE_KEY,SettingsContext,SettingsEventBus,SettingsProvider,USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE,VISIBLE_HANDLE_WIDTH,canEnableDialTool,countEnabledTools,decayScore,devToolsReducer,devToolsStateManager,dialAnimationConfig,dialCSSBeziers,dialColors,dialStyles,easing,enforceDialLimit,floatingToolsColors,generateDefaultSettings,generateDialCSSKeyframes,getAllIconPositions,getDialCSSAnimationStyles,getDialCSSKeyframesString,getDialLayout,getEnabledToolIds,getGridLineRotations,getGripIconLayout,getIconAngle,getIconPosition,getIconStaggerInputRange,getSpiralAnimationPosition,getStaggeredIconProgress,getToolColor,getToolDescription,getToolLabel,getUserStatusConfig,globalSettingsConfig,interleaveWithDividers,interpolate,interpolatePosition,mergeSettingsWithDefaults,pruneUsage,rankToolIds,recordUsage,sanitizeFloatingSettings,settingsColors,settingsEventBus,settingsStyles,settingsTabs,toolColors,toolDescriptions,toolLabels,useDevTools,useDevToolsContext,useDevToolsDial,useDevToolsEnvironment,useDevToolsSettings,useDevToolsState,useDialState,useFloatingTools,useFloatingToolsContext,useOptionalDevToolsContext,useOptionalSettingsContext,useSettings,useSettingsContext,useSettingsModalState,withAlpha});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{useMemo as _,useSyncExternalStore as $,useEffect as w,useRef as q}from"react";import{FloatingToolsStore as Q}from"@buoy-gg/floating-tools-core";import{useState as ee}from"react";function j(e){let{screenSize:t,...s}=e,o=_(()=>new Q({...s,screenWidth:t.width,screenHeight:t.height}),[s.enablePositionPersistence,s.storage,s.visibleHandleWidth,s.dragThreshold,s.edgePadding]),a=q(!1),[S,c]=ee(!1);w(()=>(a.current||(a.current=!0,o.initialize().then(()=>{c(!0)})),()=>{o.destroy()}),[o]),w(()=>{o.setScreenSize(t.width,t.height)},[o,t.width,t.height]);let u=$(o.subscribe,o.getSnapshot),r=_(()=>({handleDragStart:l=>o.handleDragStart(l),handleDragMove:l=>o.handleDragMove(l),handleDragEnd:l=>o.handleDragEnd(l),toggleHideShow:()=>o.toggleHideShow(),commitPosition:l=>o.commitPosition(l),setBubbleSize:l=>o.setBubbleSize(l),setScreenSize:(l,p)=>o.setScreenSize(l,p),setMinPosition:l=>o.setMinPosition(l)}),[o]);return{state:u,store:o,isInitialized:S,actions:r}}import{createContext as te,useContext as oe}from"react";import{jsx as le}from"react/jsx-runtime";var ne={isDragging:!1,isHidden:!1},L=te(ne);function se(){return oe(L)}function ie({value:e,children:t}){return le(L.Provider,{value:e,children:t})}import{useState as A,useEffect as M,useCallback as D,useMemo as F}from"react";import{settingsEventBus as z,SETTINGS_STORAGE_KEY as V,MAX_SETTINGS_DIAL_SLOTS as N,enforceDialLimit as ae,mergeSettingsWithDefaults as re,generateDefaultSettings as ge,countEnabledTools as G,getEnabledToolIds as Se}from"@buoy-gg/floating-tools-core";function b(e={}){let{availableTools:t=[],defaultFloatingTools:s,defaultDialTools:o,storage:a,initialSettings:S,onSettingsChange:c,subscribeToEventBus:u=!0}=e,r=F(()=>ge(t,s,o),[t,s,o]),l=F(()=>Object.keys(r.dialTools),[r]),p=F(()=>Object.keys(r.floatingTools).filter(n=>n!=="environment"),[r]),[i,d]=A(S??r),[E,f]=A(!0),[h,P]=A(!1),[m,R]=A(null),O=D(async()=>{if(!a){f(!1),P(!0);return}try{f(!0),R(null);let n=await a.getItem(V);if(n){let g=JSON.parse(n),v=re(r,g,{allowedDialKeys:l,allowedFloatingKeys:p});d(v)}else d(r)}catch(n){console.error("Failed to load dev tools settings:",n),R(n instanceof Error?n.message:"Failed to load settings"),d(r)}finally{f(!1),P(!0)}},[a,r,l,p]),T=D(async n=>{let g={...n,dialTools:ae(n.dialTools)};try{a&&await a.setItem(V,JSON.stringify(g)),d(g),c?.(g),z.emit(g)}catch(v){throw console.error("Failed to save dev tools settings:",v),R(v instanceof Error?v.message:"Failed to save settings"),v}},[a,c]),B=D(n=>{let g=G(i.dialTools);if(!i.dialTools[n]&&g>=N)return;let U={...i,dialTools:{...i.dialTools,[n]:!i.dialTools[n]}};T(U)},[i,T]),k=D(n=>{let g={...i,floatingTools:{...i.floatingTools,[n]:!i.floatingTools[n]}};T(g)},[i,T]),X=D(()=>{let n={...i,floatingTools:{...i.floatingTools,environment:!i.floatingTools.environment}};T(n)},[i,T]),J=D(n=>{let g={...i,globalSettings:{...i.globalSettings,[n]:!i.globalSettings?.[n]}};T(g)},[i,T]),Y=D(async()=>{await T(r)},[r,T]);M(()=>{O()},[O]),M(()=>u?z.addListener(g=>{d(g)}):void 0,[u]);let Z=F(()=>{let n=G(i.dialTools),{dial:g,floating:v}=Se(i);return{dialToolCount:n,isDialFull:n>=N,enabledDialTools:g,enabledFloatingTools:v,canEnableDialTool:U=>i.dialTools[U]?!0:n<N}},[i]);return{settings:i,isLoading:E,isInitialized:h,error:m,actions:{toggleDialTool:B,toggleFloatingTool:k,toggleEnvironment:X,toggleGlobalSetting:J,saveSettings:T,resetToDefaults:Y,reloadSettings:O},helpers:Z}}import{createContext as Te,useContext as H,useMemo as ue}from"react";import{jsx as pe}from"react/jsx-runtime";var I=Te(null);function ce({children:e,availableTools:t=[],defaultFloatingTools:s,defaultDialTools:o,storage:a,initialSettings:S,onSettingsChange:c}){let u=b({availableTools:t,defaultFloatingTools:s,defaultDialTools:o,storage:a,initialSettings:S,onSettingsChange:c}),r=ue(()=>({...u,availableTools:t}),[u,t]);return pe(I.Provider,{value:r,children:e})}function ve(){let e=H(I);if(!e)throw new Error("useSettingsContext must be used within a SettingsProvider");return e}function de(){return H(I)}import{useSyncExternalStore as De,useMemo as fe}from"react";import{devToolsStateManager as me}from"@buoy-gg/floating-tools-core";function x(e={}){let{manager:t=me}=e,s=De(t.subscribe,t.getState,t.getServerState),o=fe(()=>({openDial:()=>t.openDial(),closeDial:()=>t.closeDial(),toggleDial:()=>t.toggleDial(),openSettings:()=>t.openSettings(),closeSettings:()=>t.closeSettings(),setSettingsTab:a=>t.setSettingsTab(a),initialize:()=>t.initialize(),reset:()=>t.reset()}),[t]);return{state:s,actions:o,manager:t}}function be(e={}){let{state:t,actions:s}=x(e);return{isOpen:t.isDialOpen,open:s.openDial,close:s.closeDial,toggle:s.toggleDial}}function xe(e={}){let{state:t,actions:s}=x(e);return{isOpen:t.isSettingsOpen,activeTab:t.activeSettingsTab,open:s.openSettings,close:s.closeSettings,setTab:s.setSettingsTab}}import{createContext as Ce,useContext as W,useMemo as K}from"react";import{devToolsStateManager as ye}from"@buoy-gg/floating-tools-core";import{jsx as Re}from"react/jsx-runtime";var C=Ce(null);C.displayName="DevToolsContext";function Ee({children:e,tools:t=[],defaultFloatingTools:s,defaultDialTools:o,environment:a,userRole:S,availableEnvironments:c,onEnvironmentSwitch:u,stateManager:r=ye}){let{state:l,actions:p}=x({manager:r}),i=K(()=>t.map(m=>({id:m.id,name:m.name,description:m.description,slot:m.slot})),[t]),{settings:d,isLoading:E,actions:f,helpers:h}=b({availableTools:i,defaultFloatingTools:s,defaultDialTools:o}),P=K(()=>({devToolsState:l,devToolsActions:p,settings:d,isSettingsLoading:E,settingsActions:f,settingsHelpers:h,tools:t,environment:a,userRole:S,availableEnvironments:c,onEnvironmentSwitch:u}),[l,p,d,E,f,h,t,a,S,c,u]);return Re(C.Provider,{value:P,children:e})}function y(){let e=W(C);if(!e)throw new Error("useDevToolsContext must be used within a DevToolsProvider. Wrap your app with <DevToolsProvider> or <FloatingDevTools>.");return e}function he(){return W(C)}function Pe(){let e=y();return{environment:e.environment,userRole:e.userRole,availableEnvironments:e.availableEnvironments,onEnvironmentSwitch:e.onEnvironmentSwitch}}function Ae(){let e=y();return{tools:e.tools,settings:e.settings,isLoading:e.isSettingsLoading}}function Fe(){let e=y();return{isOpen:e.devToolsState.isDialOpen,open:e.devToolsActions.openDial,close:e.devToolsActions.closeDial,toggle:e.devToolsActions.toggleDial}}function Ie(){let e=y();return{isOpen:e.devToolsState.isSettingsOpen,activeTab:e.devToolsState.activeSettingsTab,open:e.devToolsActions.openSettings,close:e.devToolsActions.closeSettings,setTab:e.devToolsActions.setSettingsTab,settings:e.settings,actions:e.settingsActions,helpers:e.settingsHelpers}}import{filterValidChildren as Oe}from"@buoy-gg/floating-tools-core";function Ue(e,t){let s=Oe(e),o=[];return s.forEach((a,S)=>{o.push(a),S<s.length-1&&o.push(t(`divider-${S}`))}),o}import{DevToolsStateManager as bt,devToolsStateManager as xt,devToolsReducer as Ct}from"@buoy-gg/floating-tools-core";import{FloatingToolsStore as Et,floatingToolsColors as ht,withAlpha as Pt,getUserStatusConfig as At,getGripIconLayout as Ft,easing as It,interpolate as Rt,interpolatePosition as Ot,VISIBLE_HANDLE_WIDTH as Ut,ANIMATION_DURATION as Lt,DRAG_THRESHOLD as Nt,EDGE_PADDING as _t,MAX_DIAL_SLOTS as wt,DIAL_START_ANGLE as Mt,DIAL_BUTTON_SIZE as zt,DIAL_ICON_SIZE as Vt,DIAL_ICON_PADDING as Gt,DIAL_GRID_LINE_COUNT as Ht,dialColors as Kt,dialStyles as Wt,getGridLineRotations as Bt,getDialLayout as kt,getIconAngle as Xt,getIconPosition as Jt,getAllIconPositions as Yt,dialAnimationConfig as Zt,getIconStaggerInputRange as $t,dialCSSBeziers as qt,generateDialCSSKeyframes as Qt,getDialCSSAnimationStyles as jt,getDialCSSKeyframesString as eo,getSpiralAnimationPosition as to,getStaggeredIconProgress as oo}from"@buoy-gg/floating-tools-core";import{USAGE_HALF_LIFE_MS as so,USAGE_MIN_SCORE as io,decayScore as lo,recordUsage as ao,rankToolIds as ro,pruneUsage as go}from"@buoy-gg/floating-tools-core";import{SETTINGS_STORAGE_KEY as To,MAX_SETTINGS_DIAL_SLOTS as uo}from"@buoy-gg/floating-tools-core";import{settingsTabs as vo}from"@buoy-gg/floating-tools-core";import{settingsColors as Do,toolColors as fo,getToolColor as mo,settingsStyles as bo}from"@buoy-gg/floating-tools-core";import{toolLabels as Co,getToolLabel as yo,toolDescriptions as Eo,getToolDescription as ho}from"@buoy-gg/floating-tools-core";import{globalSettingsConfig as Ao}from"@buoy-gg/floating-tools-core";import{enforceDialLimit as Io,sanitizeFloatingSettings as Ro,mergeSettingsWithDefaults as Oo,generateDefaultSettings as Uo,countEnabledTools as Lo,canEnableDialTool as No,getEnabledToolIds as _o}from"@buoy-gg/floating-tools-core";import{SettingsEventBus as Mo,settingsEventBus as zo}from"@buoy-gg/floating-tools-core";export{Lt as ANIMATION_DURATION,zt as DIAL_BUTTON_SIZE,Ht as DIAL_GRID_LINE_COUNT,Gt as DIAL_ICON_PADDING,Vt as DIAL_ICON_SIZE,Mt as DIAL_START_ANGLE,Nt as DRAG_THRESHOLD,C as DevToolsContext,Ee as DevToolsProvider,bt as DevToolsStateManager,_t as EDGE_PADDING,L as FloatingToolsContext,ie as FloatingToolsProvider,Et as FloatingToolsStore,wt as MAX_DIAL_SLOTS,uo as MAX_SETTINGS_DIAL_SLOTS,To as SETTINGS_STORAGE_KEY,I as SettingsContext,Mo as SettingsEventBus,ce as SettingsProvider,so as USAGE_HALF_LIFE_MS,io as USAGE_MIN_SCORE,Ut as VISIBLE_HANDLE_WIDTH,No as canEnableDialTool,Lo as countEnabledTools,lo as decayScore,Ct as devToolsReducer,xt as devToolsStateManager,Zt as dialAnimationConfig,qt as dialCSSBeziers,Kt as dialColors,Wt as dialStyles,It as easing,Io as enforceDialLimit,ht as floatingToolsColors,Uo as generateDefaultSettings,Qt as generateDialCSSKeyframes,Yt as getAllIconPositions,jt as getDialCSSAnimationStyles,eo as getDialCSSKeyframesString,kt as getDialLayout,_o as getEnabledToolIds,Bt as getGridLineRotations,Ft as getGripIconLayout,Xt as getIconAngle,Jt as getIconPosition,$t as getIconStaggerInputRange,to as getSpiralAnimationPosition,oo as getStaggeredIconProgress,mo as getToolColor,ho as getToolDescription,yo as getToolLabel,At as getUserStatusConfig,Ao as globalSettingsConfig,Ue as interleaveWithDividers,Rt as interpolate,Ot as interpolatePosition,Oo as mergeSettingsWithDefaults,go as pruneUsage,ro as rankToolIds,ao as recordUsage,Ro as sanitizeFloatingSettings,Do as settingsColors,zo as settingsEventBus,bo as settingsStyles,vo as settingsTabs,fo as toolColors,Eo as toolDescriptions,Co as toolLabels,Ae as useDevTools,y as useDevToolsContext,Fe as useDevToolsDial,Pe as useDevToolsEnvironment,Ie as useDevToolsSettings,x as useDevToolsState,be as useDialState,j as useFloatingTools,se as useFloatingToolsContext,he as useOptionalDevToolsContext,de as useOptionalSettingsContext,b as useSettings,ve as useSettingsContext,xe as useSettingsModalState,Pt as withAlpha};
1
+ import{useMemo as N,useSyncExternalStore as $,useEffect as _,useRef as q}from"react";import{FloatingToolsStore as Q}from"@buoy-gg/floating-tools-core";import{useState as ee}from"react";function j(e){let{screenSize:t,...s}=e,o=N(()=>new Q({...s,screenWidth:t.width,screenHeight:t.height}),[s.enablePositionPersistence,s.storage,s.visibleHandleWidth,s.dragThreshold,s.edgePadding]),a=q(!1),[S,u]=ee(!1);_(()=>(a.current||(a.current=!0,o.initialize().then(()=>{u(!0)})),()=>{o.destroy()}),[o]),_(()=>{o.setScreenSize(t.width,t.height)},[o,t.width,t.height]);let c=$(o.subscribe,o.getSnapshot),r=N(()=>({handleDragStart:l=>o.handleDragStart(l),handleDragMove:l=>o.handleDragMove(l),handleDragEnd:l=>o.handleDragEnd(l),toggleHideShow:()=>o.toggleHideShow(),commitPosition:l=>o.commitPosition(l),setBubbleSize:l=>o.setBubbleSize(l),setScreenSize:(l,p)=>o.setScreenSize(l,p),setMinPosition:l=>o.setMinPosition(l),forceHide:()=>o.forceHide(),forceShow:()=>o.forceShow()}),[o]);return{state:c,store:o,isInitialized:S,actions:r}}import{createContext as te,useContext as oe}from"react";import{jsx as le}from"react/jsx-runtime";var ne={isDragging:!1,isHidden:!1},L=te(ne);function se(){return oe(L)}function ie({value:e,children:t}){return le(L.Provider,{value:e,children:t})}import{useState as A,useEffect as M,useCallback as D,useMemo as F}from"react";import{settingsEventBus as z,SETTINGS_STORAGE_KEY as V,MAX_SETTINGS_DIAL_SLOTS as w,enforceDialLimit as ae,mergeSettingsWithDefaults as re,generateDefaultSettings as ge,countEnabledTools as G,getEnabledToolIds as Se}from"@buoy-gg/floating-tools-core";function b(e={}){let{availableTools:t=[],defaultFloatingTools:s,defaultDialTools:o,storage:a,initialSettings:S,onSettingsChange:u,subscribeToEventBus:c=!0}=e,r=F(()=>ge(t,s,o),[t,s,o]),l=F(()=>Object.keys(r.dialTools),[r]),p=F(()=>Object.keys(r.floatingTools).filter(n=>n!=="environment"),[r]),[i,d]=A(S??r),[E,f]=A(!0),[h,P]=A(!1),[m,R]=A(null),O=D(async()=>{if(!a){f(!1),P(!0);return}try{f(!0),R(null);let n=await a.getItem(V);if(n){let g=JSON.parse(n),v=re(r,g,{allowedDialKeys:l,allowedFloatingKeys:p});d(v)}else d(r)}catch(n){console.error("Failed to load dev tools settings:",n),R(n instanceof Error?n.message:"Failed to load settings"),d(r)}finally{f(!1),P(!0)}},[a,r,l,p]),T=D(async n=>{let g={...n,dialTools:ae(n.dialTools)};try{a&&await a.setItem(V,JSON.stringify(g)),d(g),u?.(g),z.emit(g)}catch(v){throw console.error("Failed to save dev tools settings:",v),R(v instanceof Error?v.message:"Failed to save settings"),v}},[a,u]),B=D(n=>{let g=G(i.dialTools);if(!i.dialTools[n]&&g>=w)return;let U={...i,dialTools:{...i.dialTools,[n]:!i.dialTools[n]}};T(U)},[i,T]),k=D(n=>{let g={...i,floatingTools:{...i.floatingTools,[n]:!i.floatingTools[n]}};T(g)},[i,T]),X=D(()=>{let n={...i,floatingTools:{...i.floatingTools,environment:!i.floatingTools.environment}};T(n)},[i,T]),J=D(n=>{let g={...i,globalSettings:{...i.globalSettings,[n]:!i.globalSettings?.[n]}};T(g)},[i,T]),Y=D(async()=>{await T(r)},[r,T]);M(()=>{O()},[O]),M(()=>c?z.addListener(g=>{d(g)}):void 0,[c]);let Z=F(()=>{let n=G(i.dialTools),{dial:g,floating:v}=Se(i);return{dialToolCount:n,isDialFull:n>=w,enabledDialTools:g,enabledFloatingTools:v,canEnableDialTool:U=>i.dialTools[U]?!0:n<w}},[i]);return{settings:i,isLoading:E,isInitialized:h,error:m,actions:{toggleDialTool:B,toggleFloatingTool:k,toggleEnvironment:X,toggleGlobalSetting:J,saveSettings:T,resetToDefaults:Y,reloadSettings:O},helpers:Z}}import{createContext as Te,useContext as H,useMemo as ce}from"react";import{jsx as pe}from"react/jsx-runtime";var I=Te(null);function ue({children:e,availableTools:t=[],defaultFloatingTools:s,defaultDialTools:o,storage:a,initialSettings:S,onSettingsChange:u}){let c=b({availableTools:t,defaultFloatingTools:s,defaultDialTools:o,storage:a,initialSettings:S,onSettingsChange:u}),r=ce(()=>({...c,availableTools:t}),[c,t]);return pe(I.Provider,{value:r,children:e})}function ve(){let e=H(I);if(!e)throw new Error("useSettingsContext must be used within a SettingsProvider");return e}function de(){return H(I)}import{useSyncExternalStore as De,useMemo as fe}from"react";import{devToolsStateManager as me}from"@buoy-gg/floating-tools-core";function x(e={}){let{manager:t=me}=e,s=De(t.subscribe,t.getState,t.getServerState),o=fe(()=>({openDial:()=>t.openDial(),closeDial:()=>t.closeDial(),toggleDial:()=>t.toggleDial(),openSettings:()=>t.openSettings(),closeSettings:()=>t.closeSettings(),setSettingsTab:a=>t.setSettingsTab(a),initialize:()=>t.initialize(),reset:()=>t.reset()}),[t]);return{state:s,actions:o,manager:t}}function be(e={}){let{state:t,actions:s}=x(e);return{isOpen:t.isDialOpen,open:s.openDial,close:s.closeDial,toggle:s.toggleDial}}function xe(e={}){let{state:t,actions:s}=x(e);return{isOpen:t.isSettingsOpen,activeTab:t.activeSettingsTab,open:s.openSettings,close:s.closeSettings,setTab:s.setSettingsTab}}import{createContext as Ce,useContext as W,useMemo as K}from"react";import{devToolsStateManager as ye}from"@buoy-gg/floating-tools-core";import{jsx as Re}from"react/jsx-runtime";var C=Ce(null);C.displayName="DevToolsContext";function Ee({children:e,tools:t=[],defaultFloatingTools:s,defaultDialTools:o,environment:a,userRole:S,availableEnvironments:u,onEnvironmentSwitch:c,stateManager:r=ye}){let{state:l,actions:p}=x({manager:r}),i=K(()=>t.map(m=>({id:m.id,name:m.name,description:m.description,slot:m.slot})),[t]),{settings:d,isLoading:E,actions:f,helpers:h}=b({availableTools:i,defaultFloatingTools:s,defaultDialTools:o}),P=K(()=>({devToolsState:l,devToolsActions:p,settings:d,isSettingsLoading:E,settingsActions:f,settingsHelpers:h,tools:t,environment:a,userRole:S,availableEnvironments:u,onEnvironmentSwitch:c}),[l,p,d,E,f,h,t,a,S,u,c]);return Re(C.Provider,{value:P,children:e})}function y(){let e=W(C);if(!e)throw new Error("useDevToolsContext must be used within a DevToolsProvider. Wrap your app with <DevToolsProvider> or <FloatingDevTools>.");return e}function he(){return W(C)}function Pe(){let e=y();return{environment:e.environment,userRole:e.userRole,availableEnvironments:e.availableEnvironments,onEnvironmentSwitch:e.onEnvironmentSwitch}}function Ae(){let e=y();return{tools:e.tools,settings:e.settings,isLoading:e.isSettingsLoading}}function Fe(){let e=y();return{isOpen:e.devToolsState.isDialOpen,open:e.devToolsActions.openDial,close:e.devToolsActions.closeDial,toggle:e.devToolsActions.toggleDial}}function Ie(){let e=y();return{isOpen:e.devToolsState.isSettingsOpen,activeTab:e.devToolsState.activeSettingsTab,open:e.devToolsActions.openSettings,close:e.devToolsActions.closeSettings,setTab:e.devToolsActions.setSettingsTab,settings:e.settings,actions:e.settingsActions,helpers:e.settingsHelpers}}import{filterValidChildren as Oe}from"@buoy-gg/floating-tools-core";function Ue(e,t){let s=Oe(e),o=[];return s.forEach((a,S)=>{o.push(a),S<s.length-1&&o.push(t(`divider-${S}`))}),o}import{DevToolsStateManager as ft,devToolsStateManager as mt,devToolsReducer as bt}from"@buoy-gg/floating-tools-core";import{FloatingToolsStore as Ct,floatingToolsColors as yt,withAlpha as Et,getUserStatusConfig as ht,getGripIconLayout as Pt,easing as At,interpolate as Ft,interpolatePosition as It,VISIBLE_HANDLE_WIDTH as Rt,ANIMATION_DURATION as Ot,DRAG_THRESHOLD as Ut,EDGE_PADDING as Lt,MAX_DIAL_SLOTS as wt,DIAL_START_ANGLE as Nt,DIAL_BUTTON_SIZE as _t,DIAL_ICON_SIZE as Mt,DIAL_ICON_PADDING as zt,DIAL_GRID_LINE_COUNT as Vt,dialColors as Gt,dialStyles as Ht,getGridLineRotations as Kt,getDialLayout as Wt,getIconAngle as Bt,getIconPosition as kt,getAllIconPositions as Xt,dialAnimationConfig as Jt,getIconStaggerInputRange as Yt,dialCSSBeziers as Zt,generateDialCSSKeyframes as $t,getDialCSSAnimationStyles as qt,getDialCSSKeyframesString as Qt,getSpiralAnimationPosition as jt,getStaggeredIconProgress as eo}from"@buoy-gg/floating-tools-core";import{USAGE_HALF_LIFE_MS as oo,USAGE_MIN_SCORE as no,decayScore as so,recordUsage as io,rankToolIds as lo,pruneUsage as ao}from"@buoy-gg/floating-tools-core";import{SETTINGS_STORAGE_KEY as go,MAX_SETTINGS_DIAL_SLOTS as So}from"@buoy-gg/floating-tools-core";import{settingsTabs as co}from"@buoy-gg/floating-tools-core";import{settingsColors as vo,toolColors as po,getToolColor as Do,settingsStyles as fo}from"@buoy-gg/floating-tools-core";import{toolLabels as bo,getToolLabel as xo,toolDescriptions as Co,getToolDescription as yo}from"@buoy-gg/floating-tools-core";import{globalSettingsConfig as ho}from"@buoy-gg/floating-tools-core";import{enforceDialLimit as Ao,sanitizeFloatingSettings as Fo,mergeSettingsWithDefaults as Io,generateDefaultSettings as Ro,countEnabledTools as Oo,canEnableDialTool as Uo,getEnabledToolIds as Lo}from"@buoy-gg/floating-tools-core";import{SettingsEventBus as No,settingsEventBus as _o}from"@buoy-gg/floating-tools-core";export{Ot as ANIMATION_DURATION,_t as DIAL_BUTTON_SIZE,Vt as DIAL_GRID_LINE_COUNT,zt as DIAL_ICON_PADDING,Mt as DIAL_ICON_SIZE,Nt as DIAL_START_ANGLE,Ut as DRAG_THRESHOLD,C as DevToolsContext,Ee as DevToolsProvider,ft as DevToolsStateManager,Lt as EDGE_PADDING,L as FloatingToolsContext,ie as FloatingToolsProvider,Ct as FloatingToolsStore,wt as MAX_DIAL_SLOTS,So as MAX_SETTINGS_DIAL_SLOTS,go as SETTINGS_STORAGE_KEY,I as SettingsContext,No as SettingsEventBus,ue as SettingsProvider,oo as USAGE_HALF_LIFE_MS,no as USAGE_MIN_SCORE,Rt as VISIBLE_HANDLE_WIDTH,Uo as canEnableDialTool,Oo as countEnabledTools,so as decayScore,bt as devToolsReducer,mt as devToolsStateManager,Jt as dialAnimationConfig,Zt as dialCSSBeziers,Gt as dialColors,Ht as dialStyles,At as easing,Ao as enforceDialLimit,yt as floatingToolsColors,Ro as generateDefaultSettings,$t as generateDialCSSKeyframes,Xt as getAllIconPositions,qt as getDialCSSAnimationStyles,Qt as getDialCSSKeyframesString,Wt as getDialLayout,Lo as getEnabledToolIds,Kt as getGridLineRotations,Pt as getGripIconLayout,Bt as getIconAngle,kt as getIconPosition,Yt as getIconStaggerInputRange,jt as getSpiralAnimationPosition,eo as getStaggeredIconProgress,Do as getToolColor,yo as getToolDescription,xo as getToolLabel,ht as getUserStatusConfig,ho as globalSettingsConfig,Ue as interleaveWithDividers,Ft as interpolate,It as interpolatePosition,Io as mergeSettingsWithDefaults,ao as pruneUsage,lo as rankToolIds,io as recordUsage,Fo as sanitizeFloatingSettings,vo as settingsColors,_o as settingsEventBus,fo as settingsStyles,co as settingsTabs,po as toolColors,Co as toolDescriptions,bo as toolLabels,Ae as useDevTools,y as useDevToolsContext,Fe as useDevToolsDial,Pe as useDevToolsEnvironment,Ie as useDevToolsSettings,x as useDevToolsState,be as useDialState,j as useFloatingTools,se as useFloatingToolsContext,he as useOptionalDevToolsContext,de as useOptionalSettingsContext,b as useSettings,ve as useSettingsContext,xe as useSettingsModalState,Et as withAlpha};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/floating-tools-react",
3
- "version": "7.0.15",
3
+ "version": "7.0.16",
4
4
  "description": "React bindings for floating tools - shared hooks and context for web and React Native",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -16,7 +16,7 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "@buoy-gg/floating-tools-core": "^7.0.15"
19
+ "@buoy-gg/floating-tools-core": "^7.0.16"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "react": ">=17.0.0"