@buoy-gg/floating-tools-react 7.0.36 → 7.0.39
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/README.md +35 -0
- package/dist/chunk-2OZZBOHY.mjs +1 -0
- package/dist/floating.d.mts +130 -0
- package/dist/floating.d.ts +130 -0
- package/dist/floating.js +1 -0
- package/dist/floating.mjs +1 -0
- package/dist/index.d.mts +5 -126
- package/dist/index.d.ts +5 -126
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +15 -3
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# @buoy-gg/floating-tools-react
|
|
2
|
+
|
|
3
|
+
React hooks and context providers for a custom floating-tool interface. The package connects components to the state and layout primitives in `@buoy-gg/floating-tools-core`. It does not render the complete Buoy menu.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @buoy-gg/floating-tools-react
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
The hooks use React's built-in `useSyncExternalStore`, introduced in React 18. The manifest still declares React >=17; that peer range does not match the implementation.
|
|
12
|
+
|
|
13
|
+
## Read position state
|
|
14
|
+
|
|
15
|
+
This React Native example reports position state. Your shell still needs to connect input handlers and render the draggable surface:
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { Text, useWindowDimensions } from "react-native";
|
|
19
|
+
import { useFloatingTools } from "@buoy-gg/floating-tools-react";
|
|
20
|
+
|
|
21
|
+
export function PositionReadout() {
|
|
22
|
+
const screenSize = useWindowDimensions();
|
|
23
|
+
const { state } = useFloatingTools({
|
|
24
|
+
screenSize,
|
|
25
|
+
enablePositionPersistence: false,
|
|
26
|
+
});
|
|
27
|
+
return <Text>{state.position.x}, {state.position.y}</Text>;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`useFloatingTools` returns state, initialization status, the store, and actions. Use its drag and position actions to connect your platform's events and animation completion. For web, supply the current viewport dimensions and a DOM event integration. For persistence, supply a stable storage adapter.
|
|
32
|
+
|
|
33
|
+
Other exports include FloatingToolsProvider, SettingsProvider, DevToolsProvider, and their related hooks. Required-context hooks must run under the matching provider; use the optional variants only where absence is expected.
|
|
34
|
+
|
|
35
|
+
Check that position changes rerender the component and that resize/orientation changes update boundaries. For the ready-made menu and account setup, follow the [Buoy Quick Start](https://buoy.gg/buoy/latest/docs/quick-start).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useMemo as a,useSyncExternalStore as p,useEffect as l,useRef as f}from"react";import{FloatingToolsStore as m}from"@buoy-gg/floating-tools-core/floating";import{useState as v}from"react";function E(n){let{screenSize:o,...i}=n,e=a(()=>new m({...i,screenWidth:o.width,screenHeight:o.height}),[i.enablePositionPersistence,i.storage,i.visibleHandleWidth,i.dragThreshold,i.edgePadding]),r=f(!1),[s,d]=v(!1);l(()=>(r.current||(r.current=!0,e.initialize().then(()=>{d(!0)})),()=>{e.destroy()}),[e]),l(()=>{e.setScreenSize(o.width,o.height)},[e,o.width,o.height]);let c=p(e.subscribe,e.getSnapshot),h=a(()=>({handleDragStart:t=>e.handleDragStart(t),handleDragMove:t=>e.handleDragMove(t),handleDragEnd:t=>e.handleDragEnd(t),toggleHideShow:()=>e.toggleHideShow(),commitPosition:t=>e.commitPosition(t),setBubbleSize:t=>e.setBubbleSize(t),setScreenSize:(t,u)=>e.setScreenSize(t,u),setMinPosition:t=>e.setMinPosition(t),forceHide:()=>e.forceHide(),forceShow:()=>e.forceShow()}),[e]);return{state:c,store:e,isInitialized:s,actions:h}}import{createContext as S,useContext as D}from"react";import{jsx as b}from"react/jsx-runtime";var P={isDragging:!1,isHidden:!1},g=S(P);function C(){return D(g)}function H({value:n,children:o}){return b(g.Provider,{value:n,children:o})}import{filterValidChildren as T}from"@buoy-gg/floating-tools-core/floating";function N(n,o){let i=T(n),e=[];return i.forEach((r,s)=>{e.push(r),s<i.length-1&&e.push(o(`divider-${s}`))}),e}export{E as a,g as b,C as c,H as d,N as e};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { FloatingToolsOptions, FloatingToolsState, FloatingToolsStore, DragEventData, Position, DragEndResult } from '@buoy-gg/floating-tools-core/floating';
|
|
2
|
+
export * from '@buoy-gg/floating-tools-core/floating';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import * as react from 'react';
|
|
5
|
+
import { ReactNode, ReactElement } from 'react';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* useFloatingTools - React hook for floating tools state management.
|
|
9
|
+
* Works with both web and React Native.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface UseFloatingToolsOptions extends Omit<FloatingToolsOptions, 'screenWidth' | 'screenHeight'> {
|
|
13
|
+
/**
|
|
14
|
+
* Screen dimensions. Required for boundary calculations.
|
|
15
|
+
* On web: { width: window.innerWidth, height: window.innerHeight }
|
|
16
|
+
* On RN: Dimensions.get('window')
|
|
17
|
+
*/
|
|
18
|
+
screenSize: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
interface UseFloatingToolsReturn {
|
|
24
|
+
/** Current state (position, isDragging, isHidden, bubbleSize) */
|
|
25
|
+
state: FloatingToolsState;
|
|
26
|
+
/** The underlying store instance */
|
|
27
|
+
store: FloatingToolsStore;
|
|
28
|
+
/** Whether the store has been initialized (position loaded from storage) */
|
|
29
|
+
isInitialized: boolean;
|
|
30
|
+
/** Actions */
|
|
31
|
+
actions: {
|
|
32
|
+
/** Start a drag operation */
|
|
33
|
+
handleDragStart: (event: DragEventData) => void;
|
|
34
|
+
/** Process drag movement */
|
|
35
|
+
handleDragMove: (event: DragEventData) => {
|
|
36
|
+
position: Position;
|
|
37
|
+
isDragging: boolean;
|
|
38
|
+
};
|
|
39
|
+
/** End a drag operation */
|
|
40
|
+
handleDragEnd: (event: DragEventData) => DragEndResult;
|
|
41
|
+
/** Toggle between hidden and visible states */
|
|
42
|
+
toggleHideShow: () => {
|
|
43
|
+
targetPosition: Position;
|
|
44
|
+
isHiding: boolean;
|
|
45
|
+
};
|
|
46
|
+
/** Commit position after animation completes */
|
|
47
|
+
commitPosition: (position: Position) => void;
|
|
48
|
+
/** Update bubble size (call on layout) */
|
|
49
|
+
setBubbleSize: (size: {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
}) => void;
|
|
53
|
+
/** Update screen size (call on resize/orientation change) */
|
|
54
|
+
setScreenSize: (width: number, height: number) => void;
|
|
55
|
+
/** Update min position (for safe area insets) */
|
|
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
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* React hook for managing floating tools state.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* // Web
|
|
73
|
+
* const { state, actions } = useFloatingTools({
|
|
74
|
+
* screenSize: { width: window.innerWidth, height: window.innerHeight },
|
|
75
|
+
* storage: webStorageAdapter,
|
|
76
|
+
* });
|
|
77
|
+
*
|
|
78
|
+
* // React Native
|
|
79
|
+
* const { state, actions } = useFloatingTools({
|
|
80
|
+
* screenSize: Dimensions.get('window'),
|
|
81
|
+
* storage: asyncStorageAdapter,
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
declare function useFloatingTools(options: UseFloatingToolsOptions): UseFloatingToolsReturn;
|
|
86
|
+
|
|
87
|
+
interface FloatingToolsContextValue {
|
|
88
|
+
/** Whether the user is currently dragging */
|
|
89
|
+
isDragging: boolean;
|
|
90
|
+
/** Whether the floating tools are hidden */
|
|
91
|
+
isHidden: boolean;
|
|
92
|
+
}
|
|
93
|
+
declare const FloatingToolsContext: react.Context<FloatingToolsContextValue>;
|
|
94
|
+
/**
|
|
95
|
+
* Hook to access floating tools context.
|
|
96
|
+
* Must be used within a FloatingToolsProvider.
|
|
97
|
+
*/
|
|
98
|
+
declare function useFloatingToolsContext(): FloatingToolsContextValue;
|
|
99
|
+
/**
|
|
100
|
+
* Provider component for floating tools context.
|
|
101
|
+
*/
|
|
102
|
+
interface FloatingToolsProviderProps {
|
|
103
|
+
value: FloatingToolsContextValue;
|
|
104
|
+
children: ReactNode;
|
|
105
|
+
}
|
|
106
|
+
declare function FloatingToolsProvider({ value, children, }: FloatingToolsProviderProps): react_jsx_runtime.JSX.Element;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* React-specific utility functions for floating tools.
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Interleave children with divider elements.
|
|
114
|
+
* Used to add separators between tool items.
|
|
115
|
+
*
|
|
116
|
+
* @param children - Array of React children
|
|
117
|
+
* @param renderDivider - Function to render a divider element with a unique key
|
|
118
|
+
* @returns Array of children interleaved with dividers
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```tsx
|
|
122
|
+
* const items = interleaveWithDividers(
|
|
123
|
+
* Children.toArray(children),
|
|
124
|
+
* (key) => <Divider key={key} />
|
|
125
|
+
* );
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
declare function interleaveWithDividers(children: ReactNode[], renderDivider: (key: string) => ReactElement): ReactNode[];
|
|
129
|
+
|
|
130
|
+
export { FloatingToolsContext, type FloatingToolsContextValue, FloatingToolsProvider, type FloatingToolsProviderProps, type UseFloatingToolsOptions, type UseFloatingToolsReturn, interleaveWithDividers, useFloatingTools, useFloatingToolsContext };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { FloatingToolsOptions, FloatingToolsState, FloatingToolsStore, DragEventData, Position, DragEndResult } from '@buoy-gg/floating-tools-core/floating';
|
|
2
|
+
export * from '@buoy-gg/floating-tools-core/floating';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import * as react from 'react';
|
|
5
|
+
import { ReactNode, ReactElement } from 'react';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* useFloatingTools - React hook for floating tools state management.
|
|
9
|
+
* Works with both web and React Native.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
interface UseFloatingToolsOptions extends Omit<FloatingToolsOptions, 'screenWidth' | 'screenHeight'> {
|
|
13
|
+
/**
|
|
14
|
+
* Screen dimensions. Required for boundary calculations.
|
|
15
|
+
* On web: { width: window.innerWidth, height: window.innerHeight }
|
|
16
|
+
* On RN: Dimensions.get('window')
|
|
17
|
+
*/
|
|
18
|
+
screenSize: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
interface UseFloatingToolsReturn {
|
|
24
|
+
/** Current state (position, isDragging, isHidden, bubbleSize) */
|
|
25
|
+
state: FloatingToolsState;
|
|
26
|
+
/** The underlying store instance */
|
|
27
|
+
store: FloatingToolsStore;
|
|
28
|
+
/** Whether the store has been initialized (position loaded from storage) */
|
|
29
|
+
isInitialized: boolean;
|
|
30
|
+
/** Actions */
|
|
31
|
+
actions: {
|
|
32
|
+
/** Start a drag operation */
|
|
33
|
+
handleDragStart: (event: DragEventData) => void;
|
|
34
|
+
/** Process drag movement */
|
|
35
|
+
handleDragMove: (event: DragEventData) => {
|
|
36
|
+
position: Position;
|
|
37
|
+
isDragging: boolean;
|
|
38
|
+
};
|
|
39
|
+
/** End a drag operation */
|
|
40
|
+
handleDragEnd: (event: DragEventData) => DragEndResult;
|
|
41
|
+
/** Toggle between hidden and visible states */
|
|
42
|
+
toggleHideShow: () => {
|
|
43
|
+
targetPosition: Position;
|
|
44
|
+
isHiding: boolean;
|
|
45
|
+
};
|
|
46
|
+
/** Commit position after animation completes */
|
|
47
|
+
commitPosition: (position: Position) => void;
|
|
48
|
+
/** Update bubble size (call on layout) */
|
|
49
|
+
setBubbleSize: (size: {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
}) => void;
|
|
53
|
+
/** Update screen size (call on resize/orientation change) */
|
|
54
|
+
setScreenSize: (width: number, height: number) => void;
|
|
55
|
+
/** Update min position (for safe area insets) */
|
|
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
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* React hook for managing floating tools state.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* // Web
|
|
73
|
+
* const { state, actions } = useFloatingTools({
|
|
74
|
+
* screenSize: { width: window.innerWidth, height: window.innerHeight },
|
|
75
|
+
* storage: webStorageAdapter,
|
|
76
|
+
* });
|
|
77
|
+
*
|
|
78
|
+
* // React Native
|
|
79
|
+
* const { state, actions } = useFloatingTools({
|
|
80
|
+
* screenSize: Dimensions.get('window'),
|
|
81
|
+
* storage: asyncStorageAdapter,
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
declare function useFloatingTools(options: UseFloatingToolsOptions): UseFloatingToolsReturn;
|
|
86
|
+
|
|
87
|
+
interface FloatingToolsContextValue {
|
|
88
|
+
/** Whether the user is currently dragging */
|
|
89
|
+
isDragging: boolean;
|
|
90
|
+
/** Whether the floating tools are hidden */
|
|
91
|
+
isHidden: boolean;
|
|
92
|
+
}
|
|
93
|
+
declare const FloatingToolsContext: react.Context<FloatingToolsContextValue>;
|
|
94
|
+
/**
|
|
95
|
+
* Hook to access floating tools context.
|
|
96
|
+
* Must be used within a FloatingToolsProvider.
|
|
97
|
+
*/
|
|
98
|
+
declare function useFloatingToolsContext(): FloatingToolsContextValue;
|
|
99
|
+
/**
|
|
100
|
+
* Provider component for floating tools context.
|
|
101
|
+
*/
|
|
102
|
+
interface FloatingToolsProviderProps {
|
|
103
|
+
value: FloatingToolsContextValue;
|
|
104
|
+
children: ReactNode;
|
|
105
|
+
}
|
|
106
|
+
declare function FloatingToolsProvider({ value, children, }: FloatingToolsProviderProps): react_jsx_runtime.JSX.Element;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* React-specific utility functions for floating tools.
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Interleave children with divider elements.
|
|
114
|
+
* Used to add separators between tool items.
|
|
115
|
+
*
|
|
116
|
+
* @param children - Array of React children
|
|
117
|
+
* @param renderDivider - Function to render a divider element with a unique key
|
|
118
|
+
* @returns Array of children interleaved with dividers
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```tsx
|
|
122
|
+
* const items = interleaveWithDividers(
|
|
123
|
+
* Children.toArray(children),
|
|
124
|
+
* (key) => <Divider key={key} />
|
|
125
|
+
* );
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
declare function interleaveWithDividers(children: ReactNode[], renderDivider: (key: string) => ReactElement): ReactNode[];
|
|
129
|
+
|
|
130
|
+
export { FloatingToolsContext, type FloatingToolsContextValue, FloatingToolsProvider, type FloatingToolsProviderProps, type UseFloatingToolsOptions, type UseFloatingToolsReturn, interleaveWithDividers, useFloatingTools, useFloatingToolsContext };
|
package/dist/floating.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var h=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var z=(i,t)=>{for(var o in t)h(i,o,{get:t[o],enumerable:!0})},c=(i,t,o,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of F(t))!E.call(i,r)&&r!==o&&h(i,r,{get:()=>t[r],enumerable:!(e=T(t,r))||e.enumerable});return i},l=(i,t,o)=>(c(i,t,"default"),o&&c(o,t,"default"));var w=i=>c(h({},"__esModule",{value:!0}),i);var a={};z(a,{FloatingToolsContext:()=>u,FloatingToolsProvider:()=>y,interleaveWithDividers:()=>D,useFloatingTools:()=>R,useFloatingToolsContext:()=>H});module.exports=w(a);var s=require("react"),p=require("@buoy-gg/floating-tools-core/floating"),f=require("react");function R(i){let{screenSize:t,...o}=i,e=(0,s.useMemo)(()=>new p.FloatingToolsStore({...o,screenWidth:t.width,screenHeight:t.height}),[o.enablePositionPersistence,o.storage,o.visibleHandleWidth,o.dragThreshold,o.edgePadding]),r=(0,s.useRef)(!1),[g,S]=(0,f.useState)(!1);(0,s.useEffect)(()=>(r.current||(r.current=!0,e.initialize().then(()=>{S(!0)})),()=>{e.destroy()}),[e]),(0,s.useEffect)(()=>{e.setScreenSize(t.width,t.height)},[e,t.width,t.height]);let P=(0,s.useSyncExternalStore)(e.subscribe,e.getSnapshot),b=(0,s.useMemo)(()=>({handleDragStart:n=>e.handleDragStart(n),handleDragMove:n=>e.handleDragMove(n),handleDragEnd:n=>e.handleDragEnd(n),toggleHideShow:()=>e.toggleHideShow(),commitPosition:n=>e.commitPosition(n),setBubbleSize:n=>e.setBubbleSize(n),setScreenSize:(n,x)=>e.setScreenSize(n,x),setMinPosition:n=>e.setMinPosition(n),forceHide:()=>e.forceHide(),forceShow:()=>e.forceShow()}),[e]);return{state:P,store:e,isInitialized:g,actions:b}}var d=require("react"),m=require("react/jsx-runtime"),C={isDragging:!1,isHidden:!1},u=(0,d.createContext)(C);function H(){return(0,d.useContext)(u)}function y({value:i,children:t}){return(0,m.jsx)(u.Provider,{value:i,children:t})}var v=require("@buoy-gg/floating-tools-core/floating");function D(i,t){let o=(0,v.filterValidChildren)(i),e=[];return o.forEach((r,g)=>{e.push(r),g<o.length-1&&e.push(t(`divider-${g}`))}),e}l(a,require("@buoy-gg/floating-tools-core/floating"),module.exports);0&&(module.exports={FloatingToolsContext,FloatingToolsProvider,interleaveWithDividers,useFloatingTools,useFloatingToolsContext,...require("@buoy-gg/floating-tools-core/floating")});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,b as o,c as t,d as f,e as r}from"./chunk-2OZZBOHY.mjs";export*from"@buoy-gg/floating-tools-core/floating";export{o as FloatingToolsContext,f as FloatingToolsProvider,r as interleaveWithDividers,e as useFloatingTools,t as useFloatingToolsContext};
|
package/dist/index.d.mts
CHANGED
|
@@ -1,109 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
export { FloatingToolsContext, FloatingToolsContextValue, FloatingToolsProvider, FloatingToolsProviderProps, UseFloatingToolsOptions, UseFloatingToolsReturn, interleaveWithDividers, useFloatingTools, useFloatingToolsContext } from './floating.mjs';
|
|
2
|
+
import { AvailableToolConfig, StorageAdapter, DevToolsSettings, DevToolsStateManager, DevToolsState, SettingsTabKey, WebToolConfig, Environment, UserRole } from '@buoy-gg/floating-tools-core';
|
|
2
3
|
export { ANIMATION_DURATION, AvailableToolConfig, BaseToolConfig, DIAL_BUTTON_SIZE, DIAL_GRID_LINE_COUNT, DIAL_ICON_PADDING, DIAL_ICON_SIZE, DIAL_START_ANGLE, DRAG_THRESHOLD, DevToolsAction, DevToolsSettings, DevToolsState, DevToolsStateManager, DialAnimationConfigType, DialCSSBezierKey, DialColorKey, DialEasingName, DialLayout, DialLayoutConfig, DragEndResult, DragEventData, EDGE_PADDING, EasingFunction, Environment, FloatingToolsState, FloatingToolsStore, GlobalDevToolsSettings, GlobalSettingConfig, GripIconLayout, IconPosition, MAX_DIAL_SLOTS, MAX_SETTINGS_DIAL_SLOTS, MergeSettingsOptions, Position, SETTINGS_STORAGE_KEY, SettingsColorKey, SettingsEventBus, SettingsTab, SettingsTabKey, Size, SpiralPosition, SpringConfig, StorageAdapter, ToolMetadata, ToolSlot, USAGE_HALF_LIFE_MS, USAGE_MIN_SCORE, UsageEntry, UsageMap, UserRole, UserStatusConfig, VISIBLE_HANDLE_WIDTH, WebToolConfig, 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, interpolate, interpolatePosition, mergeSettingsWithDefaults, pruneUsage, rankToolIds, recordUsage, sanitizeFloatingSettings, settingsColors, settingsEventBus, settingsStyles, settingsTabs, toolColors, toolDescriptions, toolLabels, withAlpha } from '@buoy-gg/floating-tools-core';
|
|
3
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
5
|
import * as react from 'react';
|
|
5
|
-
import { ReactNode
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* useFloatingTools - React hook for floating tools state management.
|
|
9
|
-
* Works with both web and React Native.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
interface UseFloatingToolsOptions extends Omit<FloatingToolsOptions, 'screenWidth' | 'screenHeight'> {
|
|
13
|
-
/**
|
|
14
|
-
* Screen dimensions. Required for boundary calculations.
|
|
15
|
-
* On web: { width: window.innerWidth, height: window.innerHeight }
|
|
16
|
-
* On RN: Dimensions.get('window')
|
|
17
|
-
*/
|
|
18
|
-
screenSize: {
|
|
19
|
-
width: number;
|
|
20
|
-
height: number;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
interface UseFloatingToolsReturn {
|
|
24
|
-
/** Current state (position, isDragging, isHidden, bubbleSize) */
|
|
25
|
-
state: FloatingToolsState;
|
|
26
|
-
/** The underlying store instance */
|
|
27
|
-
store: FloatingToolsStore;
|
|
28
|
-
/** Whether the store has been initialized (position loaded from storage) */
|
|
29
|
-
isInitialized: boolean;
|
|
30
|
-
/** Actions */
|
|
31
|
-
actions: {
|
|
32
|
-
/** Start a drag operation */
|
|
33
|
-
handleDragStart: (event: DragEventData) => void;
|
|
34
|
-
/** Process drag movement */
|
|
35
|
-
handleDragMove: (event: DragEventData) => {
|
|
36
|
-
position: Position;
|
|
37
|
-
isDragging: boolean;
|
|
38
|
-
};
|
|
39
|
-
/** End a drag operation */
|
|
40
|
-
handleDragEnd: (event: DragEventData) => DragEndResult;
|
|
41
|
-
/** Toggle between hidden and visible states */
|
|
42
|
-
toggleHideShow: () => {
|
|
43
|
-
targetPosition: Position;
|
|
44
|
-
isHiding: boolean;
|
|
45
|
-
};
|
|
46
|
-
/** Commit position after animation completes */
|
|
47
|
-
commitPosition: (position: Position) => void;
|
|
48
|
-
/** Update bubble size (call on layout) */
|
|
49
|
-
setBubbleSize: (size: {
|
|
50
|
-
width: number;
|
|
51
|
-
height: number;
|
|
52
|
-
}) => void;
|
|
53
|
-
/** Update screen size (call on resize/orientation change) */
|
|
54
|
-
setScreenSize: (width: number, height: number) => void;
|
|
55
|
-
/** Update min position (for safe area insets) */
|
|
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
|
-
};
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* React hook for managing floating tools state.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```tsx
|
|
72
|
-
* // Web
|
|
73
|
-
* const { state, actions } = useFloatingTools({
|
|
74
|
-
* screenSize: { width: window.innerWidth, height: window.innerHeight },
|
|
75
|
-
* storage: webStorageAdapter,
|
|
76
|
-
* });
|
|
77
|
-
*
|
|
78
|
-
* // React Native
|
|
79
|
-
* const { state, actions } = useFloatingTools({
|
|
80
|
-
* screenSize: Dimensions.get('window'),
|
|
81
|
-
* storage: asyncStorageAdapter,
|
|
82
|
-
* });
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
declare function useFloatingTools(options: UseFloatingToolsOptions): UseFloatingToolsReturn;
|
|
86
|
-
|
|
87
|
-
interface FloatingToolsContextValue {
|
|
88
|
-
/** Whether the user is currently dragging */
|
|
89
|
-
isDragging: boolean;
|
|
90
|
-
/** Whether the floating tools are hidden */
|
|
91
|
-
isHidden: boolean;
|
|
92
|
-
}
|
|
93
|
-
declare const FloatingToolsContext: react.Context<FloatingToolsContextValue>;
|
|
94
|
-
/**
|
|
95
|
-
* Hook to access floating tools context.
|
|
96
|
-
* Must be used within a FloatingToolsProvider.
|
|
97
|
-
*/
|
|
98
|
-
declare function useFloatingToolsContext(): FloatingToolsContextValue;
|
|
99
|
-
/**
|
|
100
|
-
* Provider component for floating tools context.
|
|
101
|
-
*/
|
|
102
|
-
interface FloatingToolsProviderProps {
|
|
103
|
-
value: FloatingToolsContextValue;
|
|
104
|
-
children: ReactNode;
|
|
105
|
-
}
|
|
106
|
-
declare function FloatingToolsProvider({ value, children, }: FloatingToolsProviderProps): react_jsx_runtime.JSX.Element;
|
|
6
|
+
import { ReactNode } from 'react';
|
|
7
|
+
import '@buoy-gg/floating-tools-core/floating';
|
|
107
8
|
|
|
108
9
|
/**
|
|
109
10
|
* useSettings - React hook for managing dev tools settings.
|
|
@@ -512,26 +413,4 @@ declare function useDevToolsSettings(): {
|
|
|
512
413
|
};
|
|
513
414
|
};
|
|
514
415
|
|
|
515
|
-
|
|
516
|
-
* React-specific utility functions for floating tools.
|
|
517
|
-
*/
|
|
518
|
-
|
|
519
|
-
/**
|
|
520
|
-
* Interleave children with divider elements.
|
|
521
|
-
* Used to add separators between tool items.
|
|
522
|
-
*
|
|
523
|
-
* @param children - Array of React children
|
|
524
|
-
* @param renderDivider - Function to render a divider element with a unique key
|
|
525
|
-
* @returns Array of children interleaved with dividers
|
|
526
|
-
*
|
|
527
|
-
* @example
|
|
528
|
-
* ```tsx
|
|
529
|
-
* const items = interleaveWithDividers(
|
|
530
|
-
* Children.toArray(children),
|
|
531
|
-
* (key) => <Divider key={key} />
|
|
532
|
-
* );
|
|
533
|
-
* ```
|
|
534
|
-
*/
|
|
535
|
-
declare function interleaveWithDividers(children: ReactNode[], renderDivider: (key: string) => ReactElement): ReactNode[];
|
|
536
|
-
|
|
537
|
-
export { type DevToolsActions, DevToolsContext, type DevToolsContextValue, DevToolsProvider, type DevToolsProviderProps, FloatingToolsContext, type FloatingToolsContextValue, FloatingToolsProvider, type FloatingToolsProviderProps, SettingsContext, type SettingsContextValue, SettingsProvider, type SettingsProviderProps, type UseDevToolsStateOptions, type UseDevToolsStateReturn, type UseFloatingToolsOptions, type UseFloatingToolsReturn, type UseSettingsOptions, type UseSettingsReturn, interleaveWithDividers, useDevTools, useDevToolsContext, useDevToolsDial, useDevToolsEnvironment, useDevToolsSettings, useDevToolsState, useDialState, useFloatingTools, useFloatingToolsContext, useOptionalDevToolsContext, useOptionalSettingsContext, useSettings, useSettingsContext, useSettingsModalState };
|
|
416
|
+
export { type DevToolsActions, DevToolsContext, type DevToolsContextValue, DevToolsProvider, type DevToolsProviderProps, SettingsContext, type SettingsContextValue, SettingsProvider, type SettingsProviderProps, type UseDevToolsStateOptions, type UseDevToolsStateReturn, type UseSettingsOptions, type UseSettingsReturn, useDevTools, useDevToolsContext, useDevToolsDial, useDevToolsEnvironment, useDevToolsSettings, useDevToolsState, useDialState, useOptionalDevToolsContext, useOptionalSettingsContext, useSettings, useSettingsContext, useSettingsModalState };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,109 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
export { FloatingToolsContext, FloatingToolsContextValue, FloatingToolsProvider, FloatingToolsProviderProps, UseFloatingToolsOptions, UseFloatingToolsReturn, interleaveWithDividers, useFloatingTools, useFloatingToolsContext } from './floating.js';
|
|
2
|
+
import { AvailableToolConfig, StorageAdapter, DevToolsSettings, DevToolsStateManager, DevToolsState, SettingsTabKey, WebToolConfig, Environment, UserRole } from '@buoy-gg/floating-tools-core';
|
|
2
3
|
export { ANIMATION_DURATION, AvailableToolConfig, BaseToolConfig, DIAL_BUTTON_SIZE, DIAL_GRID_LINE_COUNT, DIAL_ICON_PADDING, DIAL_ICON_SIZE, DIAL_START_ANGLE, DRAG_THRESHOLD, DevToolsAction, DevToolsSettings, DevToolsState, DevToolsStateManager, DialAnimationConfigType, DialCSSBezierKey, DialColorKey, DialEasingName, DialLayout, DialLayoutConfig, DragEndResult, DragEventData, EDGE_PADDING, EasingFunction, Environment, FloatingToolsState, FloatingToolsStore, GlobalDevToolsSettings, GlobalSettingConfig, GripIconLayout, IconPosition, MAX_DIAL_SLOTS, MAX_SETTINGS_DIAL_SLOTS, MergeSettingsOptions, Position, SETTINGS_STORAGE_KEY, SettingsColorKey, SettingsEventBus, SettingsTab, SettingsTabKey, Size, SpiralPosition, SpringConfig, StorageAdapter, ToolMetadata, ToolSlot, USAGE_HALF_LIFE_MS, USAGE_MIN_SCORE, UsageEntry, UsageMap, UserRole, UserStatusConfig, VISIBLE_HANDLE_WIDTH, WebToolConfig, 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, interpolate, interpolatePosition, mergeSettingsWithDefaults, pruneUsage, rankToolIds, recordUsage, sanitizeFloatingSettings, settingsColors, settingsEventBus, settingsStyles, settingsTabs, toolColors, toolDescriptions, toolLabels, withAlpha } from '@buoy-gg/floating-tools-core';
|
|
3
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
5
|
import * as react from 'react';
|
|
5
|
-
import { ReactNode
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* useFloatingTools - React hook for floating tools state management.
|
|
9
|
-
* Works with both web and React Native.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
interface UseFloatingToolsOptions extends Omit<FloatingToolsOptions, 'screenWidth' | 'screenHeight'> {
|
|
13
|
-
/**
|
|
14
|
-
* Screen dimensions. Required for boundary calculations.
|
|
15
|
-
* On web: { width: window.innerWidth, height: window.innerHeight }
|
|
16
|
-
* On RN: Dimensions.get('window')
|
|
17
|
-
*/
|
|
18
|
-
screenSize: {
|
|
19
|
-
width: number;
|
|
20
|
-
height: number;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
interface UseFloatingToolsReturn {
|
|
24
|
-
/** Current state (position, isDragging, isHidden, bubbleSize) */
|
|
25
|
-
state: FloatingToolsState;
|
|
26
|
-
/** The underlying store instance */
|
|
27
|
-
store: FloatingToolsStore;
|
|
28
|
-
/** Whether the store has been initialized (position loaded from storage) */
|
|
29
|
-
isInitialized: boolean;
|
|
30
|
-
/** Actions */
|
|
31
|
-
actions: {
|
|
32
|
-
/** Start a drag operation */
|
|
33
|
-
handleDragStart: (event: DragEventData) => void;
|
|
34
|
-
/** Process drag movement */
|
|
35
|
-
handleDragMove: (event: DragEventData) => {
|
|
36
|
-
position: Position;
|
|
37
|
-
isDragging: boolean;
|
|
38
|
-
};
|
|
39
|
-
/** End a drag operation */
|
|
40
|
-
handleDragEnd: (event: DragEventData) => DragEndResult;
|
|
41
|
-
/** Toggle between hidden and visible states */
|
|
42
|
-
toggleHideShow: () => {
|
|
43
|
-
targetPosition: Position;
|
|
44
|
-
isHiding: boolean;
|
|
45
|
-
};
|
|
46
|
-
/** Commit position after animation completes */
|
|
47
|
-
commitPosition: (position: Position) => void;
|
|
48
|
-
/** Update bubble size (call on layout) */
|
|
49
|
-
setBubbleSize: (size: {
|
|
50
|
-
width: number;
|
|
51
|
-
height: number;
|
|
52
|
-
}) => void;
|
|
53
|
-
/** Update screen size (call on resize/orientation change) */
|
|
54
|
-
setScreenSize: (width: number, height: number) => void;
|
|
55
|
-
/** Update min position (for safe area insets) */
|
|
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
|
-
};
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* React hook for managing floating tools state.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```tsx
|
|
72
|
-
* // Web
|
|
73
|
-
* const { state, actions } = useFloatingTools({
|
|
74
|
-
* screenSize: { width: window.innerWidth, height: window.innerHeight },
|
|
75
|
-
* storage: webStorageAdapter,
|
|
76
|
-
* });
|
|
77
|
-
*
|
|
78
|
-
* // React Native
|
|
79
|
-
* const { state, actions } = useFloatingTools({
|
|
80
|
-
* screenSize: Dimensions.get('window'),
|
|
81
|
-
* storage: asyncStorageAdapter,
|
|
82
|
-
* });
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
declare function useFloatingTools(options: UseFloatingToolsOptions): UseFloatingToolsReturn;
|
|
86
|
-
|
|
87
|
-
interface FloatingToolsContextValue {
|
|
88
|
-
/** Whether the user is currently dragging */
|
|
89
|
-
isDragging: boolean;
|
|
90
|
-
/** Whether the floating tools are hidden */
|
|
91
|
-
isHidden: boolean;
|
|
92
|
-
}
|
|
93
|
-
declare const FloatingToolsContext: react.Context<FloatingToolsContextValue>;
|
|
94
|
-
/**
|
|
95
|
-
* Hook to access floating tools context.
|
|
96
|
-
* Must be used within a FloatingToolsProvider.
|
|
97
|
-
*/
|
|
98
|
-
declare function useFloatingToolsContext(): FloatingToolsContextValue;
|
|
99
|
-
/**
|
|
100
|
-
* Provider component for floating tools context.
|
|
101
|
-
*/
|
|
102
|
-
interface FloatingToolsProviderProps {
|
|
103
|
-
value: FloatingToolsContextValue;
|
|
104
|
-
children: ReactNode;
|
|
105
|
-
}
|
|
106
|
-
declare function FloatingToolsProvider({ value, children, }: FloatingToolsProviderProps): react_jsx_runtime.JSX.Element;
|
|
6
|
+
import { ReactNode } from 'react';
|
|
7
|
+
import '@buoy-gg/floating-tools-core/floating';
|
|
107
8
|
|
|
108
9
|
/**
|
|
109
10
|
* useSettings - React hook for managing dev tools settings.
|
|
@@ -512,26 +413,4 @@ declare function useDevToolsSettings(): {
|
|
|
512
413
|
};
|
|
513
414
|
};
|
|
514
415
|
|
|
515
|
-
|
|
516
|
-
* React-specific utility functions for floating tools.
|
|
517
|
-
*/
|
|
518
|
-
|
|
519
|
-
/**
|
|
520
|
-
* Interleave children with divider elements.
|
|
521
|
-
* Used to add separators between tool items.
|
|
522
|
-
*
|
|
523
|
-
* @param children - Array of React children
|
|
524
|
-
* @param renderDivider - Function to render a divider element with a unique key
|
|
525
|
-
* @returns Array of children interleaved with dividers
|
|
526
|
-
*
|
|
527
|
-
* @example
|
|
528
|
-
* ```tsx
|
|
529
|
-
* const items = interleaveWithDividers(
|
|
530
|
-
* Children.toArray(children),
|
|
531
|
-
* (key) => <Divider key={key} />
|
|
532
|
-
* );
|
|
533
|
-
* ```
|
|
534
|
-
*/
|
|
535
|
-
declare function interleaveWithDividers(children: ReactNode[], renderDivider: (key: string) => ReactElement): ReactNode[];
|
|
536
|
-
|
|
537
|
-
export { type DevToolsActions, DevToolsContext, type DevToolsContextValue, DevToolsProvider, type DevToolsProviderProps, FloatingToolsContext, type FloatingToolsContextValue, FloatingToolsProvider, type FloatingToolsProviderProps, SettingsContext, type SettingsContextValue, SettingsProvider, type SettingsProviderProps, type UseDevToolsStateOptions, type UseDevToolsStateReturn, type UseFloatingToolsOptions, type UseFloatingToolsReturn, type UseSettingsOptions, type UseSettingsReturn, interleaveWithDividers, useDevTools, useDevToolsContext, useDevToolsDial, useDevToolsEnvironment, useDevToolsSettings, useDevToolsState, useDialState, useFloatingTools, useFloatingToolsContext, useOptionalDevToolsContext, useOptionalSettingsContext, useSettings, useSettingsContext, useSettingsModalState };
|
|
416
|
+
export { type DevToolsActions, DevToolsContext, type DevToolsContextValue, DevToolsProvider, type DevToolsProviderProps, SettingsContext, type SettingsContextValue, SettingsProvider, type SettingsProviderProps, type UseDevToolsStateOptions, type UseDevToolsStateReturn, type UseSettingsOptions, type UseSettingsReturn, useDevTools, useDevToolsContext, useDevToolsDial, useDevToolsEnvironment, useDevToolsSettings, useDevToolsState, useDialState, useOptionalDevToolsContext, useOptionalSettingsContext, useSettings, useSettingsContext, useSettingsModalState };
|
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:()=>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});
|
|
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/floating"),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/floating");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 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};
|
|
1
|
+
import{a as J,b as Y,c as Z,d as j,e as q}from"./chunk-2OZZBOHY.mjs";import{useState as O,useEffect as N,useCallback as u,useMemo as P}from"react";import{settingsEventBus as h,SETTINGS_STORAGE_KEY as M,MAX_SETTINGS_DIAL_SLOTS as F,enforceDialLimit as Q,mergeSettingsWithDefaults as $,generateDefaultSettings as ee,countEnabledTools as w,getEnabledToolIds as te}from"@buoy-gg/floating-tools-core";function b(e={}){let{availableTools:t=[],defaultFloatingTools:s,defaultDialTools:S,storage:a,initialSettings:p,onSettingsChange:c,subscribeToEventBus:T=!0}=e,l=P(()=>ee(t,s,S),[t,s,S]),f=P(()=>Object.keys(l.dialTools),[l]),m=P(()=>Object.keys(l.floatingTools).filter(o=>o!=="environment"),[l]),[n,v]=O(p??l),[E,D]=O(!0),[A,I]=O(!1),[d,U]=O(null),R=u(async()=>{if(!a){D(!1),I(!0);return}try{D(!0),U(null);let o=await a.getItem(M);if(o){let i=JSON.parse(o),g=$(l,i,{allowedDialKeys:f,allowedFloatingKeys:m});v(g)}else v(l)}catch(o){console.error("Failed to load dev tools settings:",o),U(o instanceof Error?o.message:"Failed to load settings"),v(l)}finally{D(!1),I(!0)}},[a,l,f,m]),r=u(async o=>{let i={...o,dialTools:Q(o.dialTools)};try{a&&await a.setItem(M,JSON.stringify(i)),v(i),c?.(i),h.emit(i)}catch(g){throw console.error("Failed to save dev tools settings:",g),U(g instanceof Error?g.message:"Failed to save settings"),g}},[a,c]),z=u(o=>{let i=w(n.dialTools);if(!n.dialTools[o]&&i>=F)return;let _={...n,dialTools:{...n.dialTools,[o]:!n.dialTools[o]}};r(_)},[n,r]),B=u(o=>{let i={...n,floatingTools:{...n.floatingTools,[o]:!n.floatingTools[o]}};r(i)},[n,r]),W=u(()=>{let o={...n,floatingTools:{...n.floatingTools,environment:!n.floatingTools.environment}};r(o)},[n,r]),H=u(o=>{let i={...n,globalSettings:{...n.globalSettings,[o]:!n.globalSettings?.[o]}};r(i)},[n,r]),k=u(async()=>{await r(l)},[l,r]);N(()=>{R()},[R]),N(()=>T?h.addListener(i=>{v(i)}):void 0,[T]);let X=P(()=>{let o=w(n.dialTools),{dial:i,floating:g}=te(n);return{dialToolCount:o,isDialFull:o>=F,enabledDialTools:i,enabledFloatingTools:g,canEnableDialTool:_=>n.dialTools[_]?!0:o<F}},[n]);return{settings:n,isLoading:E,isInitialized:A,error:d,actions:{toggleDialTool:z,toggleFloatingTool:B,toggleEnvironment:W,toggleGlobalSetting:H,saveSettings:r,resetToDefaults:k,reloadSettings:R},helpers:X}}import{createContext as oe,useContext as G,useMemo as ne}from"react";import{jsx as ae}from"react/jsx-runtime";var L=oe(null);function se({children:e,availableTools:t=[],defaultFloatingTools:s,defaultDialTools:S,storage:a,initialSettings:p,onSettingsChange:c}){let T=b({availableTools:t,defaultFloatingTools:s,defaultDialTools:S,storage:a,initialSettings:p,onSettingsChange:c}),l=ne(()=>({...T,availableTools:t}),[T,t]);return ae(L.Provider,{value:l,children:e})}function ie(){let e=G(L);if(!e)throw new Error("useSettingsContext must be used within a SettingsProvider");return e}function le(){return G(L)}import{useSyncExternalStore as re,useMemo as ge}from"react";import{devToolsStateManager as Se}from"@buoy-gg/floating-tools-core";function x(e={}){let{manager:t=Se}=e,s=re(t.subscribe,t.getState,t.getServerState),S=ge(()=>({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:S,manager:t}}function Te(e={}){let{state:t,actions:s}=x(e);return{isOpen:t.isDialOpen,open:s.openDial,close:s.closeDial,toggle:s.toggleDial}}function ve(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 V,useMemo as K}from"react";import{devToolsStateManager as ue}from"@buoy-gg/floating-tools-core";import{jsx as xe}from"react/jsx-runtime";var C=ce(null);C.displayName="DevToolsContext";function pe({children:e,tools:t=[],defaultFloatingTools:s,defaultDialTools:S,environment:a,userRole:p,availableEnvironments:c,onEnvironmentSwitch:T,stateManager:l=ue}){let{state:f,actions:m}=x({manager:l}),n=K(()=>t.map(d=>({id:d.id,name:d.name,description:d.description,slot:d.slot})),[t]),{settings:v,isLoading:E,actions:D,helpers:A}=b({availableTools:n,defaultFloatingTools:s,defaultDialTools:S}),I=K(()=>({devToolsState:f,devToolsActions:m,settings:v,isSettingsLoading:E,settingsActions:D,settingsHelpers:A,tools:t,environment:a,userRole:p,availableEnvironments:c,onEnvironmentSwitch:T}),[f,m,v,E,D,A,t,a,p,c,T]);return xe(C.Provider,{value:I,children:e})}function y(){let e=V(C);if(!e)throw new Error("useDevToolsContext must be used within a DevToolsProvider. Wrap your app with <DevToolsProvider> or <FloatingDevTools>.");return e}function De(){return V(C)}function de(){let e=y();return{environment:e.environment,userRole:e.userRole,availableEnvironments:e.availableEnvironments,onEnvironmentSwitch:e.onEnvironmentSwitch}}function fe(){let e=y();return{tools:e.tools,settings:e.settings,isLoading:e.isSettingsLoading}}function me(){let e=y();return{isOpen:e.devToolsState.isDialOpen,open:e.devToolsActions.openDial,close:e.devToolsActions.closeDial,toggle:e.devToolsActions.toggleDial}}function be(){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{DevToolsStateManager as Qe,devToolsStateManager as $e,devToolsReducer as et}from"@buoy-gg/floating-tools-core";import{FloatingToolsStore as ot,floatingToolsColors as nt,withAlpha as st,getUserStatusConfig as it,getGripIconLayout as lt,easing as at,interpolate as rt,interpolatePosition as gt,VISIBLE_HANDLE_WIDTH as St,ANIMATION_DURATION as Tt,DRAG_THRESHOLD as vt,EDGE_PADDING as ct,MAX_DIAL_SLOTS as ut,DIAL_START_ANGLE as pt,DIAL_BUTTON_SIZE as Dt,DIAL_ICON_SIZE as dt,DIAL_ICON_PADDING as ft,DIAL_GRID_LINE_COUNT as mt,dialColors as bt,dialStyles as xt,getGridLineRotations as Ct,getDialLayout as yt,getIconAngle as Et,getIconPosition as At,getAllIconPositions as It,dialAnimationConfig as Ot,getIconStaggerInputRange as Pt,dialCSSBeziers as Lt,generateDialCSSKeyframes as Ut,getDialCSSAnimationStyles as Rt,getDialCSSKeyframesString as _t,getSpiralAnimationPosition as Ft,getStaggeredIconProgress as Nt}from"@buoy-gg/floating-tools-core";import{USAGE_HALF_LIFE_MS as Mt,USAGE_MIN_SCORE as wt,decayScore as Gt,recordUsage as Kt,rankToolIds as Vt,pruneUsage as zt}from"@buoy-gg/floating-tools-core";import{SETTINGS_STORAGE_KEY as Wt,MAX_SETTINGS_DIAL_SLOTS as Ht}from"@buoy-gg/floating-tools-core";import{settingsTabs as Xt}from"@buoy-gg/floating-tools-core";import{settingsColors as Yt,toolColors as Zt,getToolColor as jt,settingsStyles as qt}from"@buoy-gg/floating-tools-core";import{toolLabels as $t,getToolLabel as eo,toolDescriptions as to,getToolDescription as oo}from"@buoy-gg/floating-tools-core";import{globalSettingsConfig as so}from"@buoy-gg/floating-tools-core";import{enforceDialLimit as lo,sanitizeFloatingSettings as ao,mergeSettingsWithDefaults as ro,generateDefaultSettings as go,countEnabledTools as So,canEnableDialTool as To,getEnabledToolIds as vo}from"@buoy-gg/floating-tools-core";import{SettingsEventBus as uo,settingsEventBus as po}from"@buoy-gg/floating-tools-core";export{Tt as ANIMATION_DURATION,Dt as DIAL_BUTTON_SIZE,mt as DIAL_GRID_LINE_COUNT,ft as DIAL_ICON_PADDING,dt as DIAL_ICON_SIZE,pt as DIAL_START_ANGLE,vt as DRAG_THRESHOLD,C as DevToolsContext,pe as DevToolsProvider,Qe as DevToolsStateManager,ct as EDGE_PADDING,Y as FloatingToolsContext,j as FloatingToolsProvider,ot as FloatingToolsStore,ut as MAX_DIAL_SLOTS,Ht as MAX_SETTINGS_DIAL_SLOTS,Wt as SETTINGS_STORAGE_KEY,L as SettingsContext,uo as SettingsEventBus,se as SettingsProvider,Mt as USAGE_HALF_LIFE_MS,wt as USAGE_MIN_SCORE,St as VISIBLE_HANDLE_WIDTH,To as canEnableDialTool,So as countEnabledTools,Gt as decayScore,et as devToolsReducer,$e as devToolsStateManager,Ot as dialAnimationConfig,Lt as dialCSSBeziers,bt as dialColors,xt as dialStyles,at as easing,lo as enforceDialLimit,nt as floatingToolsColors,go as generateDefaultSettings,Ut as generateDialCSSKeyframes,It as getAllIconPositions,Rt as getDialCSSAnimationStyles,_t as getDialCSSKeyframesString,yt as getDialLayout,vo as getEnabledToolIds,Ct as getGridLineRotations,lt as getGripIconLayout,Et as getIconAngle,At as getIconPosition,Pt as getIconStaggerInputRange,Ft as getSpiralAnimationPosition,Nt as getStaggeredIconProgress,jt as getToolColor,oo as getToolDescription,eo as getToolLabel,it as getUserStatusConfig,so as globalSettingsConfig,q as interleaveWithDividers,rt as interpolate,gt as interpolatePosition,ro as mergeSettingsWithDefaults,zt as pruneUsage,Vt as rankToolIds,Kt as recordUsage,ao as sanitizeFloatingSettings,Yt as settingsColors,po as settingsEventBus,qt as settingsStyles,Xt as settingsTabs,Zt as toolColors,to as toolDescriptions,$t as toolLabels,fe as useDevTools,y as useDevToolsContext,me as useDevToolsDial,de as useDevToolsEnvironment,be as useDevToolsSettings,x as useDevToolsState,Te as useDialState,J as useFloatingTools,Z as useFloatingToolsContext,De as useOptionalDevToolsContext,le as useOptionalSettingsContext,b as useSettings,ie as useSettingsContext,ve as useSettingsModalState,st as withAlpha};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/floating-tools-react",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.39",
|
|
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",
|
|
@@ -10,13 +10,18 @@
|
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"import": "./dist/index.mjs",
|
|
12
12
|
"require": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./floating": {
|
|
15
|
+
"types": "./dist/floating.d.ts",
|
|
16
|
+
"import": "./dist/floating.mjs",
|
|
17
|
+
"require": "./dist/floating.js"
|
|
13
18
|
}
|
|
14
19
|
},
|
|
15
20
|
"files": [
|
|
16
21
|
"dist"
|
|
17
22
|
],
|
|
18
23
|
"dependencies": {
|
|
19
|
-
"@buoy-gg/floating-tools-core": "^7.0.
|
|
24
|
+
"@buoy-gg/floating-tools-core": "^7.0.39"
|
|
20
25
|
},
|
|
21
26
|
"peerDependencies": {
|
|
22
27
|
"react": ">=17.0.0"
|
|
@@ -36,8 +41,15 @@
|
|
|
36
41
|
"type": "git",
|
|
37
42
|
"url": "https://github.com/Buoy-gg/buoy.git"
|
|
38
43
|
},
|
|
44
|
+
"typesVersions": {
|
|
45
|
+
"*": {
|
|
46
|
+
"floating": [
|
|
47
|
+
"dist/floating.d.ts"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
},
|
|
39
51
|
"scripts": {
|
|
40
|
-
"build": "tsup src/index.ts --format cjs,esm --dts --clean --no-sourcemap --minify",
|
|
52
|
+
"build": "tsup src/index.ts src/floating.ts --format cjs,esm --dts --clean --no-sourcemap --minify",
|
|
41
53
|
"dev": "tsup src/index.ts --format cjs,esm --dts --watch",
|
|
42
54
|
"typecheck": "tsc --noEmit"
|
|
43
55
|
}
|