@buoy-gg/floating-tools-core 2.1.15 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/devToolsState.js +1 -1
- package/lib/commonjs/dialUsage.js +1 -0
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/settings.js +1 -1
- package/lib/module/devToolsState.js +1 -1
- package/lib/module/dialUsage.js +1 -0
- package/lib/module/index.js +1 -1
- package/lib/module/settings.js +1 -1
- package/lib/typescript/commonjs/dialUsage.d.ts +74 -0
- package/lib/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/settings.d.ts +7 -2
- package/lib/typescript/module/dialUsage.d.ts +74 -0
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/settings.d.ts +7 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DevToolsStateManager=void 0,exports.devToolsReducer=devToolsReducer,exports.devToolsStateManager=void 0;const initialState={isDialOpen:!1,isSettingsOpen:!1,activeSettingsTab:"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DevToolsStateManager=void 0,exports.devToolsReducer=devToolsReducer,exports.devToolsStateManager=void 0;const initialState={isDialOpen:!1,isSettingsOpen:!1,activeSettingsTab:"floating",isInitialized:!1};function devToolsReducer(t,e){switch(e.type){case"OPEN_DIAL":return{...t,isDialOpen:!0};case"CLOSE_DIAL":return{...t,isDialOpen:!1};case"TOGGLE_DIAL":return{...t,isDialOpen:!t.isDialOpen};case"OPEN_SETTINGS":return{...t,isSettingsOpen:!0,isDialOpen:!1};case"CLOSE_SETTINGS":return{...t,isSettingsOpen:!1};case"SET_SETTINGS_TAB":return{...t,activeSettingsTab:e.tab};case"INITIALIZE":return{...t,isInitialized:!0};default:return t}}class DevToolsStateManager{listeners=new Set;constructor(t){this.state={...initialState,...t}}getState=()=>this.state;getServerState=()=>initialState;isDialOpen(){return this.state.isDialOpen}isSettingsOpen(){return this.state.isSettingsOpen}isInitialized(){return this.state.isInitialized}getActiveSettingsTab(){return this.state.activeSettingsTab}dispatch(t){const e=devToolsReducer(this.state,t);e!==this.state&&(this.state=e,this.notifyListeners())}openDial(){this.dispatch({type:"OPEN_DIAL"})}closeDial(){this.dispatch({type:"CLOSE_DIAL"})}toggleDial(){this.dispatch({type:"TOGGLE_DIAL"})}openSettings(){this.dispatch({type:"OPEN_SETTINGS"})}closeSettings(){this.dispatch({type:"CLOSE_SETTINGS"})}setSettingsTab(t){this.dispatch({type:"SET_SETTINGS_TAB",tab:t})}initialize(){this.dispatch({type:"INITIALIZE"})}subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});notifyListeners(){this.listeners.forEach(t=>{try{t()}catch(t){console.error("Error in DevToolsStateManager listener:",t)}})}get listenerCount(){return this.listeners.size}reset(){this.state={...initialState},this.notifyListeners()}}exports.DevToolsStateManager=DevToolsStateManager;const devToolsStateManager=exports.devToolsStateManager=new DevToolsStateManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.USAGE_MIN_SCORE=exports.USAGE_HALF_LIFE_MS=void 0,exports.decayScore=decayScore,exports.pruneUsage=pruneUsage,exports.rankToolIds=rankToolIds,exports.recordUsage=recordUsage;const USAGE_HALF_LIFE_MS=exports.USAGE_HALF_LIFE_MS=2592e5,USAGE_MIN_SCORE=exports.USAGE_MIN_SCORE=.01;function decayScore(e,r){if(!e||e.score<=0)return 0;const o=r-e.lastUsed;return o<=0?e.score:e.score*Math.pow(.5,o/USAGE_HALF_LIFE_MS)}function recordUsage(e,r,o){const s=decayScore(e[r],o);return{...e,[r]:{score:s+1,lastUsed:o}}}function rankToolIds(e,r,o){const s=e.map((e,s)=>({id:e,index:s,score:decayScore(r[e],o)}));return s.sort((e,r)=>r.score!==e.score?r.score-e.score:e.index-r.index),s.map(e=>e.id)}function pruneUsage(e,r){const o={};for(const[s,c]of Object.entries(e))decayScore(c,r)>USAGE_MIN_SCORE&&(o[s]=c);return o}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ANIMATION_DURATION",{enumerable:!0,get:function(){return _constants.ANIMATION_DURATION}}),Object.defineProperty(exports,"BENCHMARK_ICON_COLOR",{enumerable:!0,get:function(){return _benchmarkIcon.BENCHMARK_ICON_COLOR}}),Object.defineProperty(exports,"BenchmarkIcon",{enumerable:!0,get:function(){return _benchmarkIcon.BenchmarkIcon}}),Object.defineProperty(exports,"CurveTestA",{enumerable:!0,get:function(){return _routesIcon.CurveTestA}}),Object.defineProperty(exports,"CurveTestB",{enumerable:!0,get:function(){return _routesIcon.CurveTestB}}),Object.defineProperty(exports,"CurveTestC",{enumerable:!0,get:function(){return _routesIcon.CurveTestC}}),Object.defineProperty(exports,"CurveTestD",{enumerable:!0,get:function(){return _routesIcon.CurveTestD}}),Object.defineProperty(exports,"CurveTestE",{enumerable:!0,get:function(){return _routesIcon.CurveTestE}}),Object.defineProperty(exports,"CurveTestF",{enumerable:!0,get:function(){return _routesIcon.CurveTestF}}),Object.defineProperty(exports,"CurveTestG",{enumerable:!0,get:function(){return _routesIcon.CurveTestG}}),Object.defineProperty(exports,"CurveTestH",{enumerable:!0,get:function(){return _routesIcon.CurveTestH}}),Object.defineProperty(exports,"CurveTestI",{enumerable:!0,get:function(){return _routesIcon.CurveTestI}}),Object.defineProperty(exports,"CurveTestJ",{enumerable:!0,get:function(){return _routesIcon.CurveTestJ}}),Object.defineProperty(exports,"CurveTestK",{enumerable:!0,get:function(){return _routesIcon.CurveTestK}}),Object.defineProperty(exports,"CurveTestL",{enumerable:!0,get:function(){return _routesIcon.CurveTestL}}),Object.defineProperty(exports,"CurveTestM",{enumerable:!0,get:function(){return _routesIcon.CurveTestM}}),Object.defineProperty(exports,"CurveTestN",{enumerable:!0,get:function(){return _routesIcon.CurveTestN}}),Object.defineProperty(exports,"CurveTestO",{enumerable:!0,get:function(){return _routesIcon.CurveTestO}}),Object.defineProperty(exports,"CurveTestP",{enumerable:!0,get:function(){return _routesIcon.CurveTestP}}),Object.defineProperty(exports,"DIAL_BUTTON_SIZE",{enumerable:!0,get:function(){return _dial.DIAL_BUTTON_SIZE}}),Object.defineProperty(exports,"DIAL_GRID_LINE_COUNT",{enumerable:!0,get:function(){return _dial.DIAL_GRID_LINE_COUNT}}),Object.defineProperty(exports,"DIAL_ICON_PADDING",{enumerable:!0,get:function(){return _dial.DIAL_ICON_PADDING}}),Object.defineProperty(exports,"DIAL_ICON_SIZE",{enumerable:!0,get:function(){return _dial.DIAL_ICON_SIZE}}),Object.defineProperty(exports,"DIAL_START_ANGLE",{enumerable:!0,get:function(){return _dial.DIAL_START_ANGLE}}),Object.defineProperty(exports,"DRAG_THRESHOLD",{enumerable:!0,get:function(){return _constants.DRAG_THRESHOLD}}),Object.defineProperty(exports,"DevToolsStateManager",{enumerable:!0,get:function(){return _devToolsState.DevToolsStateManager}}),Object.defineProperty(exports,"EDGE_PADDING",{enumerable:!0,get:function(){return _constants.EDGE_PADDING}}),Object.defineProperty(exports,"ENV_ICON_COLOR",{enumerable:!0,get:function(){return _envIcon.ENV_ICON_COLOR}}),Object.defineProperty(exports,"EVENTS_ICON_COLOR",{enumerable:!0,get:function(){return _eventsIcon.EVENTS_ICON_COLOR}}),Object.defineProperty(exports,"EnvIcon",{enumerable:!0,get:function(){return _envIcon.EnvIcon}}),Object.defineProperty(exports,"EventsIcon",{enumerable:!0,get:function(){return _eventsIcon.EventsIcon}}),Object.defineProperty(exports,"FloatingToolsStore",{enumerable:!0,get:function(){return _FloatingToolsStore.FloatingToolsStore}}),Object.defineProperty(exports,"HIGHLIGHTER_ICON_COLOR",{enumerable:!0,get:function(){return _rendersIcon.HIGHLIGHTER_ICON_COLOR}}),Object.defineProperty(exports,"HIGHLIGHT_ICON_COLOR",{enumerable:!0,get:function(){return _highlightIcon.HIGHLIGHT_ICON_COLOR}}),Object.defineProperty(exports,"HighlightIcon",{enumerable:!0,get:function(){return _highlightIcon.HighlightIcon}}),Object.defineProperty(exports,"HighlighterIcon",{enumerable:!0,get:function(){return _rendersIcon.HighlighterIcon}}),Object.defineProperty(exports,"MAX_DIAL_SLOTS",{enumerable:!0,get:function(){return _dial.MAX_DIAL_SLOTS}}),Object.defineProperty(exports,"MAX_SETTINGS_DIAL_SLOTS",{enumerable:!0,get:function(){return _settings.MAX_SETTINGS_DIAL_SLOTS}}),Object.defineProperty(exports,"NETWORK_ICON_COLOR",{enumerable:!0,get:function(){return _networkIcon.NETWORK_ICON_COLOR}}),Object.defineProperty(exports,"NetworkIcon",{enumerable:!0,get:function(){return _networkIcon.NetworkIcon}}),Object.defineProperty(exports,"QUERY_ICON_COLOR",{enumerable:!0,get:function(){return _queryIcon.QUERY_ICON_COLOR}}),Object.defineProperty(exports,"QueryIcon",{enumerable:!0,get:function(){return _queryIcon.QueryIcon}}),Object.defineProperty(exports,"REDUX_ICON_COLOR",{enumerable:!0,get:function(){return _reduxIcon.REDUX_ICON_COLOR}}),Object.defineProperty(exports,"RENDERS_ICON_COLOR",{enumerable:!0,get:function(){return _rendersIcon.RENDERS_ICON_COLOR}}),Object.defineProperty(exports,"ROUTES_ICON_COLOR",{enumerable:!0,get:function(){return _routesIcon.ROUTES_ICON_COLOR}}),Object.defineProperty(exports,"ReduxIcon",{enumerable:!0,get:function(){return _reduxIcon.ReduxIcon}}),Object.defineProperty(exports,"RendersIcon",{enumerable:!0,get:function(){return _rendersIcon.RendersIcon}}),Object.defineProperty(exports,"RouteDotIcon",{enumerable:!0,get:function(){return _routesIcon.RouteDotIcon}}),Object.defineProperty(exports,"RoutePathIcon",{enumerable:!0,get:function(){return _routesIcon.RoutePathIcon}}),Object.defineProperty(exports,"RoutePinIcon",{enumerable:!0,get:function(){return _routesIcon.RoutePinIcon}}),Object.defineProperty(exports,"RouteTwoPinsIcon",{enumerable:!0,get:function(){return _routesIcon.RouteTwoPinsIcon}}),Object.defineProperty(exports,"RoutesIcon",{enumerable:!0,get:function(){return _routesIcon.RoutesIcon}}),Object.defineProperty(exports,"SAVE_DEBOUNCE_MS",{enumerable:!0,get:function(){return _constants.SAVE_DEBOUNCE_MS}}),Object.defineProperty(exports,"SENTRY_ICON_COLOR",{enumerable:!0,get:function(){return _sentryIcon.SENTRY_ICON_COLOR}}),Object.defineProperty(exports,"SETTINGS_STORAGE_KEY",{enumerable:!0,get:function(){return _settings.SETTINGS_STORAGE_KEY}}),Object.defineProperty(exports,"STORAGE_ICON_COLOR",{enumerable:!0,get:function(){return _storageIcon.STORAGE_ICON_COLOR}}),Object.defineProperty(exports,"STORAGE_KEYS",{enumerable:!0,get:function(){return _constants.STORAGE_KEYS}}),Object.defineProperty(exports,"SentryIcon",{enumerable:!0,get:function(){return _sentryIcon.SentryIcon}}),Object.defineProperty(exports,"SettingsEventBus",{enumerable:!0,get:function(){return _settings.SettingsEventBus}}),Object.defineProperty(exports,"StorageIcon",{enumerable:!0,get:function(){return _storageIcon.StorageIcon}}),Object.defineProperty(exports,"VISIBLE_HANDLE_WIDTH",{enumerable:!0,get:function(){return _constants.VISIBLE_HANDLE_WIDTH}}),Object.defineProperty(exports,"WIFI_ICON_COLOR",{enumerable:!0,get:function(){return _wifiIcon.WIFI_ICON_COLOR}}),Object.defineProperty(exports,"WifiIcon",{enumerable:!0,get:function(){return _wifiIcon.WifiIcon}}),Object.defineProperty(exports,"canEnableDialTool",{enumerable:!0,get:function(){return _settings.canEnableDialTool}}),Object.defineProperty(exports,"countEnabledTools",{enumerable:!0,get:function(){return _settings.countEnabledTools}}),Object.defineProperty(exports,"createArrow",{enumerable:!0,get:function(){return _iconFactories.createArrow}}),Object.defineProperty(exports,"createBar",{enumerable:!0,get:function(){return _iconFactories.createBar}}),Object.defineProperty(exports,"createDot",{enumerable:!0,get:function(){return _iconFactories.createDot}}),Object.defineProperty(exports,"createGlow",{enumerable:!0,get:function(){return _iconFactories.createGlow}}),Object.defineProperty(exports,"createIcon",{enumerable:!0,get:function(){return _iconRenderer.createIcon}}),Object.defineProperty(exports,"createLine",{enumerable:!0,get:function(){return _iconFactories.createLine}}),Object.defineProperty(exports,"createNode",{enumerable:!0,get:function(){return _iconFactories.createNode}}),Object.defineProperty(exports,"createRing",{enumerable:!0,get:function(){return _iconFactories.createRing}}),Object.defineProperty(exports,"devToolsReducer",{enumerable:!0,get:function(){return _devToolsState.devToolsReducer}}),Object.defineProperty(exports,"devToolsStateManager",{enumerable:!0,get:function(){return _devToolsState.devToolsStateManager}}),Object.defineProperty(exports,"dialAnimationConfig",{enumerable:!0,get:function(){return _dial.dialAnimationConfig}}),Object.defineProperty(exports,"dialCSSBeziers",{enumerable:!0,get:function(){return _dial.dialCSSBeziers}}),Object.defineProperty(exports,"dialColors",{enumerable:!0,get:function(){return _dial.dialColors}}),Object.defineProperty(exports,"dialStyles",{enumerable:!0,get:function(){return _dial.dialStyles}}),Object.defineProperty(exports,"easing",{enumerable:!0,get:function(){return _easing.easing}}),Object.defineProperty(exports,"enforceDialLimit",{enumerable:!0,get:function(){return _settings.enforceDialLimit}}),Object.defineProperty(exports,"filterValidChildren",{enumerable:!0,get:function(){return _utils.filterValidChildren}}),Object.defineProperty(exports,"floatingToolsColors",{enumerable:!0,get:function(){return _colors.floatingToolsColors}}),Object.defineProperty(exports,"generateDefaultSettings",{enumerable:!0,get:function(){return _settings.generateDefaultSettings}}),Object.defineProperty(exports,"generateDialCSSKeyframes",{enumerable:!0,get:function(){return _dial.generateDialCSSKeyframes}}),Object.defineProperty(exports,"getAllIconPositions",{enumerable:!0,get:function(){return _dial.getAllIconPositions}}),Object.defineProperty(exports,"getDialCSSAnimationStyles",{enumerable:!0,get:function(){return _dial.getDialCSSAnimationStyles}}),Object.defineProperty(exports,"getDialCSSKeyframesString",{enumerable:!0,get:function(){return _dial.getDialCSSKeyframesString}}),Object.defineProperty(exports,"getDialLayout",{enumerable:!0,get:function(){return _dial.getDialLayout}}),Object.defineProperty(exports,"getEasing",{enumerable:!0,get:function(){return _easing.getEasing}}),Object.defineProperty(exports,"getEnabledToolIds",{enumerable:!0,get:function(){return _settings.getEnabledToolIds}}),Object.defineProperty(exports,"getGridLineRotations",{enumerable:!0,get:function(){return _dial.getGridLineRotations}}),Object.defineProperty(exports,"getGripIconLayout",{enumerable:!0,get:function(){return _utils.getGripIconLayout}}),Object.defineProperty(exports,"getIconAngle",{enumerable:!0,get:function(){return _dial.getIconAngle}}),Object.defineProperty(exports,"getIconPosition",{enumerable:!0,get:function(){return _dial.getIconPosition}}),Object.defineProperty(exports,"getIconStaggerInputRange",{enumerable:!0,get:function(){return _dial.getIconStaggerInputRange}}),Object.defineProperty(exports,"getSpiralAnimationPosition",{enumerable:!0,get:function(){return _dial.getSpiralAnimationPosition}}),Object.defineProperty(exports,"getStaggeredIconProgress",{enumerable:!0,get:function(){return _dial.getStaggeredIconProgress}}),Object.defineProperty(exports,"getToolColor",{enumerable:!0,get:function(){return _settings.getToolColor}}),Object.defineProperty(exports,"getToolDescription",{enumerable:!0,get:function(){return _settings.getToolDescription}}),Object.defineProperty(exports,"getToolLabel",{enumerable:!0,get:function(){return _settings.getToolLabel}}),Object.defineProperty(exports,"getUserStatusConfig",{enumerable:!0,get:function(){return _utils.getUserStatusConfig}}),Object.defineProperty(exports,"globalSettingsConfig",{enumerable:!0,get:function(){return _settings.globalSettingsConfig}}),Object.defineProperty(exports,"interpolate",{enumerable:!0,get:function(){return _easing.interpolate}}),Object.defineProperty(exports,"interpolatePosition",{enumerable:!0,get:function(){return _easing.interpolatePosition}}),Object.defineProperty(exports,"mergeSettingsWithDefaults",{enumerable:!0,get:function(){return _settings.mergeSettingsWithDefaults}}),Object.defineProperty(exports,"renderIconData",{enumerable:!0,get:function(){return _iconRenderer.renderIconData}}),Object.defineProperty(exports,"sanitizeFloatingSettings",{enumerable:!0,get:function(){return _settings.sanitizeFloatingSettings}}),Object.defineProperty(exports,"settingsColors",{enumerable:!0,get:function(){return _settings.settingsColors}}),Object.defineProperty(exports,"settingsEventBus",{enumerable:!0,get:function(){return _settings.settingsEventBus}}),Object.defineProperty(exports,"settingsStyles",{enumerable:!0,get:function(){return _settings.settingsStyles}}),Object.defineProperty(exports,"settingsTabs",{enumerable:!0,get:function(){return _settings.settingsTabs}}),Object.defineProperty(exports,"toolColors",{enumerable:!0,get:function(){return _settings.toolColors}}),Object.defineProperty(exports,"toolDescriptions",{enumerable:!0,get:function(){return _settings.toolDescriptions}}),Object.defineProperty(exports,"toolLabels",{enumerable:!0,get:function(){return _settings.toolLabels}}),Object.defineProperty(exports,"withAlpha",{enumerable:!0,get:function(){return _colors.withAlpha}});var _FloatingToolsStore=require("./FloatingToolsStore.js"),_constants=require("./constants.js"),_devToolsState=require("./devToolsState.js"),_utils=require("./utils.js"),_easing=require("./easing.js"),_colors=require("./colors.js"),_dial=require("./dial.js"),_settings=require("./settings.js"),_networkIcon=require("./icons/network-icon.js"),_envIcon=require("./icons/env-icon.js"),_storageIcon=require("./icons/storage-icon.js"),_routesIcon=require("./icons/routes-icon.js"),_queryIcon=require("./icons/query-icon.js"),_rendersIcon=require("./icons/renders-icon.js"),_benchmarkIcon=require("./icons/benchmark-icon.js"),_sentryIcon=require("./icons/sentry-icon.js"),_wifiIcon=require("./icons/wifi-icon.js"),_highlightIcon=require("./icons/highlight-icon.js"),_reduxIcon=require("./icons/redux-icon.js"),_eventsIcon=require("./icons/events-icon.js"),_iconFactories=require("./icons/icon-factories.js"),_iconRenderer=require("./icons/icon-renderer.js");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ANIMATION_DURATION",{enumerable:!0,get:function(){return _constants.ANIMATION_DURATION}}),Object.defineProperty(exports,"BENCHMARK_ICON_COLOR",{enumerable:!0,get:function(){return _benchmarkIcon.BENCHMARK_ICON_COLOR}}),Object.defineProperty(exports,"BenchmarkIcon",{enumerable:!0,get:function(){return _benchmarkIcon.BenchmarkIcon}}),Object.defineProperty(exports,"CurveTestA",{enumerable:!0,get:function(){return _routesIcon.CurveTestA}}),Object.defineProperty(exports,"CurveTestB",{enumerable:!0,get:function(){return _routesIcon.CurveTestB}}),Object.defineProperty(exports,"CurveTestC",{enumerable:!0,get:function(){return _routesIcon.CurveTestC}}),Object.defineProperty(exports,"CurveTestD",{enumerable:!0,get:function(){return _routesIcon.CurveTestD}}),Object.defineProperty(exports,"CurveTestE",{enumerable:!0,get:function(){return _routesIcon.CurveTestE}}),Object.defineProperty(exports,"CurveTestF",{enumerable:!0,get:function(){return _routesIcon.CurveTestF}}),Object.defineProperty(exports,"CurveTestG",{enumerable:!0,get:function(){return _routesIcon.CurveTestG}}),Object.defineProperty(exports,"CurveTestH",{enumerable:!0,get:function(){return _routesIcon.CurveTestH}}),Object.defineProperty(exports,"CurveTestI",{enumerable:!0,get:function(){return _routesIcon.CurveTestI}}),Object.defineProperty(exports,"CurveTestJ",{enumerable:!0,get:function(){return _routesIcon.CurveTestJ}}),Object.defineProperty(exports,"CurveTestK",{enumerable:!0,get:function(){return _routesIcon.CurveTestK}}),Object.defineProperty(exports,"CurveTestL",{enumerable:!0,get:function(){return _routesIcon.CurveTestL}}),Object.defineProperty(exports,"CurveTestM",{enumerable:!0,get:function(){return _routesIcon.CurveTestM}}),Object.defineProperty(exports,"CurveTestN",{enumerable:!0,get:function(){return _routesIcon.CurveTestN}}),Object.defineProperty(exports,"CurveTestO",{enumerable:!0,get:function(){return _routesIcon.CurveTestO}}),Object.defineProperty(exports,"CurveTestP",{enumerable:!0,get:function(){return _routesIcon.CurveTestP}}),Object.defineProperty(exports,"DIAL_BUTTON_SIZE",{enumerable:!0,get:function(){return _dial.DIAL_BUTTON_SIZE}}),Object.defineProperty(exports,"DIAL_GRID_LINE_COUNT",{enumerable:!0,get:function(){return _dial.DIAL_GRID_LINE_COUNT}}),Object.defineProperty(exports,"DIAL_ICON_PADDING",{enumerable:!0,get:function(){return _dial.DIAL_ICON_PADDING}}),Object.defineProperty(exports,"DIAL_ICON_SIZE",{enumerable:!0,get:function(){return _dial.DIAL_ICON_SIZE}}),Object.defineProperty(exports,"DIAL_START_ANGLE",{enumerable:!0,get:function(){return _dial.DIAL_START_ANGLE}}),Object.defineProperty(exports,"DRAG_THRESHOLD",{enumerable:!0,get:function(){return _constants.DRAG_THRESHOLD}}),Object.defineProperty(exports,"DevToolsStateManager",{enumerable:!0,get:function(){return _devToolsState.DevToolsStateManager}}),Object.defineProperty(exports,"EDGE_PADDING",{enumerable:!0,get:function(){return _constants.EDGE_PADDING}}),Object.defineProperty(exports,"ENV_ICON_COLOR",{enumerable:!0,get:function(){return _envIcon.ENV_ICON_COLOR}}),Object.defineProperty(exports,"EVENTS_ICON_COLOR",{enumerable:!0,get:function(){return _eventsIcon.EVENTS_ICON_COLOR}}),Object.defineProperty(exports,"EnvIcon",{enumerable:!0,get:function(){return _envIcon.EnvIcon}}),Object.defineProperty(exports,"EventsIcon",{enumerable:!0,get:function(){return _eventsIcon.EventsIcon}}),Object.defineProperty(exports,"FloatingToolsStore",{enumerable:!0,get:function(){return _FloatingToolsStore.FloatingToolsStore}}),Object.defineProperty(exports,"HIGHLIGHTER_ICON_COLOR",{enumerable:!0,get:function(){return _rendersIcon.HIGHLIGHTER_ICON_COLOR}}),Object.defineProperty(exports,"HIGHLIGHT_ICON_COLOR",{enumerable:!0,get:function(){return _highlightIcon.HIGHLIGHT_ICON_COLOR}}),Object.defineProperty(exports,"HighlightIcon",{enumerable:!0,get:function(){return _highlightIcon.HighlightIcon}}),Object.defineProperty(exports,"HighlighterIcon",{enumerable:!0,get:function(){return _rendersIcon.HighlighterIcon}}),Object.defineProperty(exports,"MAX_DIAL_SLOTS",{enumerable:!0,get:function(){return _dial.MAX_DIAL_SLOTS}}),Object.defineProperty(exports,"MAX_SETTINGS_DIAL_SLOTS",{enumerable:!0,get:function(){return _settings.MAX_SETTINGS_DIAL_SLOTS}}),Object.defineProperty(exports,"NETWORK_ICON_COLOR",{enumerable:!0,get:function(){return _networkIcon.NETWORK_ICON_COLOR}}),Object.defineProperty(exports,"NetworkIcon",{enumerable:!0,get:function(){return _networkIcon.NetworkIcon}}),Object.defineProperty(exports,"QUERY_ICON_COLOR",{enumerable:!0,get:function(){return _queryIcon.QUERY_ICON_COLOR}}),Object.defineProperty(exports,"QueryIcon",{enumerable:!0,get:function(){return _queryIcon.QueryIcon}}),Object.defineProperty(exports,"REDUX_ICON_COLOR",{enumerable:!0,get:function(){return _reduxIcon.REDUX_ICON_COLOR}}),Object.defineProperty(exports,"RENDERS_ICON_COLOR",{enumerable:!0,get:function(){return _rendersIcon.RENDERS_ICON_COLOR}}),Object.defineProperty(exports,"ROUTES_ICON_COLOR",{enumerable:!0,get:function(){return _routesIcon.ROUTES_ICON_COLOR}}),Object.defineProperty(exports,"ReduxIcon",{enumerable:!0,get:function(){return _reduxIcon.ReduxIcon}}),Object.defineProperty(exports,"RendersIcon",{enumerable:!0,get:function(){return _rendersIcon.RendersIcon}}),Object.defineProperty(exports,"RouteDotIcon",{enumerable:!0,get:function(){return _routesIcon.RouteDotIcon}}),Object.defineProperty(exports,"RoutePathIcon",{enumerable:!0,get:function(){return _routesIcon.RoutePathIcon}}),Object.defineProperty(exports,"RoutePinIcon",{enumerable:!0,get:function(){return _routesIcon.RoutePinIcon}}),Object.defineProperty(exports,"RouteTwoPinsIcon",{enumerable:!0,get:function(){return _routesIcon.RouteTwoPinsIcon}}),Object.defineProperty(exports,"RoutesIcon",{enumerable:!0,get:function(){return _routesIcon.RoutesIcon}}),Object.defineProperty(exports,"SAVE_DEBOUNCE_MS",{enumerable:!0,get:function(){return _constants.SAVE_DEBOUNCE_MS}}),Object.defineProperty(exports,"SENTRY_ICON_COLOR",{enumerable:!0,get:function(){return _sentryIcon.SENTRY_ICON_COLOR}}),Object.defineProperty(exports,"SETTINGS_STORAGE_KEY",{enumerable:!0,get:function(){return _settings.SETTINGS_STORAGE_KEY}}),Object.defineProperty(exports,"STORAGE_ICON_COLOR",{enumerable:!0,get:function(){return _storageIcon.STORAGE_ICON_COLOR}}),Object.defineProperty(exports,"STORAGE_KEYS",{enumerable:!0,get:function(){return _constants.STORAGE_KEYS}}),Object.defineProperty(exports,"SentryIcon",{enumerable:!0,get:function(){return _sentryIcon.SentryIcon}}),Object.defineProperty(exports,"SettingsEventBus",{enumerable:!0,get:function(){return _settings.SettingsEventBus}}),Object.defineProperty(exports,"StorageIcon",{enumerable:!0,get:function(){return _storageIcon.StorageIcon}}),Object.defineProperty(exports,"USAGE_HALF_LIFE_MS",{enumerable:!0,get:function(){return _dialUsage.USAGE_HALF_LIFE_MS}}),Object.defineProperty(exports,"USAGE_MIN_SCORE",{enumerable:!0,get:function(){return _dialUsage.USAGE_MIN_SCORE}}),Object.defineProperty(exports,"VISIBLE_HANDLE_WIDTH",{enumerable:!0,get:function(){return _constants.VISIBLE_HANDLE_WIDTH}}),Object.defineProperty(exports,"WIFI_ICON_COLOR",{enumerable:!0,get:function(){return _wifiIcon.WIFI_ICON_COLOR}}),Object.defineProperty(exports,"WifiIcon",{enumerable:!0,get:function(){return _wifiIcon.WifiIcon}}),Object.defineProperty(exports,"canEnableDialTool",{enumerable:!0,get:function(){return _settings.canEnableDialTool}}),Object.defineProperty(exports,"countEnabledTools",{enumerable:!0,get:function(){return _settings.countEnabledTools}}),Object.defineProperty(exports,"createArrow",{enumerable:!0,get:function(){return _iconFactories.createArrow}}),Object.defineProperty(exports,"createBar",{enumerable:!0,get:function(){return _iconFactories.createBar}}),Object.defineProperty(exports,"createDot",{enumerable:!0,get:function(){return _iconFactories.createDot}}),Object.defineProperty(exports,"createGlow",{enumerable:!0,get:function(){return _iconFactories.createGlow}}),Object.defineProperty(exports,"createIcon",{enumerable:!0,get:function(){return _iconRenderer.createIcon}}),Object.defineProperty(exports,"createLine",{enumerable:!0,get:function(){return _iconFactories.createLine}}),Object.defineProperty(exports,"createNode",{enumerable:!0,get:function(){return _iconFactories.createNode}}),Object.defineProperty(exports,"createRing",{enumerable:!0,get:function(){return _iconFactories.createRing}}),Object.defineProperty(exports,"decayScore",{enumerable:!0,get:function(){return _dialUsage.decayScore}}),Object.defineProperty(exports,"devToolsReducer",{enumerable:!0,get:function(){return _devToolsState.devToolsReducer}}),Object.defineProperty(exports,"devToolsStateManager",{enumerable:!0,get:function(){return _devToolsState.devToolsStateManager}}),Object.defineProperty(exports,"dialAnimationConfig",{enumerable:!0,get:function(){return _dial.dialAnimationConfig}}),Object.defineProperty(exports,"dialCSSBeziers",{enumerable:!0,get:function(){return _dial.dialCSSBeziers}}),Object.defineProperty(exports,"dialColors",{enumerable:!0,get:function(){return _dial.dialColors}}),Object.defineProperty(exports,"dialStyles",{enumerable:!0,get:function(){return _dial.dialStyles}}),Object.defineProperty(exports,"easing",{enumerable:!0,get:function(){return _easing.easing}}),Object.defineProperty(exports,"enforceDialLimit",{enumerable:!0,get:function(){return _settings.enforceDialLimit}}),Object.defineProperty(exports,"filterValidChildren",{enumerable:!0,get:function(){return _utils.filterValidChildren}}),Object.defineProperty(exports,"floatingToolsColors",{enumerable:!0,get:function(){return _colors.floatingToolsColors}}),Object.defineProperty(exports,"generateDefaultSettings",{enumerable:!0,get:function(){return _settings.generateDefaultSettings}}),Object.defineProperty(exports,"generateDialCSSKeyframes",{enumerable:!0,get:function(){return _dial.generateDialCSSKeyframes}}),Object.defineProperty(exports,"getAllIconPositions",{enumerable:!0,get:function(){return _dial.getAllIconPositions}}),Object.defineProperty(exports,"getDialCSSAnimationStyles",{enumerable:!0,get:function(){return _dial.getDialCSSAnimationStyles}}),Object.defineProperty(exports,"getDialCSSKeyframesString",{enumerable:!0,get:function(){return _dial.getDialCSSKeyframesString}}),Object.defineProperty(exports,"getDialLayout",{enumerable:!0,get:function(){return _dial.getDialLayout}}),Object.defineProperty(exports,"getEasing",{enumerable:!0,get:function(){return _easing.getEasing}}),Object.defineProperty(exports,"getEnabledToolIds",{enumerable:!0,get:function(){return _settings.getEnabledToolIds}}),Object.defineProperty(exports,"getGridLineRotations",{enumerable:!0,get:function(){return _dial.getGridLineRotations}}),Object.defineProperty(exports,"getGripIconLayout",{enumerable:!0,get:function(){return _utils.getGripIconLayout}}),Object.defineProperty(exports,"getIconAngle",{enumerable:!0,get:function(){return _dial.getIconAngle}}),Object.defineProperty(exports,"getIconPosition",{enumerable:!0,get:function(){return _dial.getIconPosition}}),Object.defineProperty(exports,"getIconStaggerInputRange",{enumerable:!0,get:function(){return _dial.getIconStaggerInputRange}}),Object.defineProperty(exports,"getSpiralAnimationPosition",{enumerable:!0,get:function(){return _dial.getSpiralAnimationPosition}}),Object.defineProperty(exports,"getStaggeredIconProgress",{enumerable:!0,get:function(){return _dial.getStaggeredIconProgress}}),Object.defineProperty(exports,"getToolColor",{enumerable:!0,get:function(){return _settings.getToolColor}}),Object.defineProperty(exports,"getToolDescription",{enumerable:!0,get:function(){return _settings.getToolDescription}}),Object.defineProperty(exports,"getToolLabel",{enumerable:!0,get:function(){return _settings.getToolLabel}}),Object.defineProperty(exports,"getUserStatusConfig",{enumerable:!0,get:function(){return _utils.getUserStatusConfig}}),Object.defineProperty(exports,"globalSettingsConfig",{enumerable:!0,get:function(){return _settings.globalSettingsConfig}}),Object.defineProperty(exports,"interpolate",{enumerable:!0,get:function(){return _easing.interpolate}}),Object.defineProperty(exports,"interpolatePosition",{enumerable:!0,get:function(){return _easing.interpolatePosition}}),Object.defineProperty(exports,"mergeSettingsWithDefaults",{enumerable:!0,get:function(){return _settings.mergeSettingsWithDefaults}}),Object.defineProperty(exports,"pruneUsage",{enumerable:!0,get:function(){return _dialUsage.pruneUsage}}),Object.defineProperty(exports,"rankToolIds",{enumerable:!0,get:function(){return _dialUsage.rankToolIds}}),Object.defineProperty(exports,"recordUsage",{enumerable:!0,get:function(){return _dialUsage.recordUsage}}),Object.defineProperty(exports,"renderIconData",{enumerable:!0,get:function(){return _iconRenderer.renderIconData}}),Object.defineProperty(exports,"sanitizeFloatingSettings",{enumerable:!0,get:function(){return _settings.sanitizeFloatingSettings}}),Object.defineProperty(exports,"settingsColors",{enumerable:!0,get:function(){return _settings.settingsColors}}),Object.defineProperty(exports,"settingsEventBus",{enumerable:!0,get:function(){return _settings.settingsEventBus}}),Object.defineProperty(exports,"settingsStyles",{enumerable:!0,get:function(){return _settings.settingsStyles}}),Object.defineProperty(exports,"settingsTabs",{enumerable:!0,get:function(){return _settings.settingsTabs}}),Object.defineProperty(exports,"toolColors",{enumerable:!0,get:function(){return _settings.toolColors}}),Object.defineProperty(exports,"toolDescriptions",{enumerable:!0,get:function(){return _settings.toolDescriptions}}),Object.defineProperty(exports,"toolLabels",{enumerable:!0,get:function(){return _settings.toolLabels}}),Object.defineProperty(exports,"withAlpha",{enumerable:!0,get:function(){return _colors.withAlpha}});var _FloatingToolsStore=require("./FloatingToolsStore.js"),_constants=require("./constants.js"),_devToolsState=require("./devToolsState.js"),_utils=require("./utils.js"),_easing=require("./easing.js"),_colors=require("./colors.js"),_dial=require("./dial.js"),_dialUsage=require("./dialUsage.js"),_settings=require("./settings.js"),_networkIcon=require("./icons/network-icon.js"),_envIcon=require("./icons/env-icon.js"),_storageIcon=require("./icons/storage-icon.js"),_routesIcon=require("./icons/routes-icon.js"),_queryIcon=require("./icons/query-icon.js"),_rendersIcon=require("./icons/renders-icon.js"),_benchmarkIcon=require("./icons/benchmark-icon.js"),_sentryIcon=require("./icons/sentry-icon.js"),_wifiIcon=require("./icons/wifi-icon.js"),_highlightIcon=require("./icons/highlight-icon.js"),_reduxIcon=require("./icons/redux-icon.js"),_eventsIcon=require("./icons/events-icon.js"),_iconFactories=require("./icons/icon-factories.js"),_iconRenderer=require("./icons/icon-renderer.js");
|
package/lib/commonjs/settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.toolLabels=exports.toolDescriptions=exports.toolColors=exports.settingsTabs=exports.settingsStyles=exports.settingsEventBus=exports.settingsColors=exports.sanitizeFloatingSettings=exports.mergeSettingsWithDefaults=exports.globalSettingsConfig=exports.getToolLabel=exports.getToolDescription=exports.getToolColor=exports.getEnabledToolIds=exports.generateDefaultSettings=exports.enforceDialLimit=exports.countEnabledTools=exports.canEnableDialTool=exports.SettingsEventBus=exports.SETTINGS_STORAGE_KEY=exports.MAX_SETTINGS_DIAL_SLOTS=void 0;var _colors=require("./colors.js");const SETTINGS_STORAGE_KEY=exports.SETTINGS_STORAGE_KEY="@react_buoy_dev_tools_settings",MAX_SETTINGS_DIAL_SLOTS=exports.MAX_SETTINGS_DIAL_SLOTS=6,settingsTabs=exports.settingsTabs=[{key:"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.toolLabels=exports.toolDescriptions=exports.toolColors=exports.settingsTabs=exports.settingsStyles=exports.settingsEventBus=exports.settingsColors=exports.sanitizeFloatingSettings=exports.mergeSettingsWithDefaults=exports.globalSettingsConfig=exports.getToolLabel=exports.getToolDescription=exports.getToolColor=exports.getEnabledToolIds=exports.generateDefaultSettings=exports.enforceDialLimit=exports.countEnabledTools=exports.canEnableDialTool=exports.SettingsEventBus=exports.SETTINGS_STORAGE_KEY=exports.MAX_SETTINGS_DIAL_SLOTS=void 0;var _colors=require("./colors.js");const SETTINGS_STORAGE_KEY=exports.SETTINGS_STORAGE_KEY="@react_buoy_dev_tools_settings",MAX_SETTINGS_DIAL_SLOTS=exports.MAX_SETTINGS_DIAL_SLOTS=6,settingsTabs=exports.settingsTabs=[{key:"floating",label:"FLOATING"},{key:"settings",label:"SETTINGS"},{key:"pro",label:"PRO"}],settingsColors=exports.settingsColors={background:"rgba(8, 12, 21, 0.98)",panel:"rgba(16, 22, 35, 0.98)",backdrop:"rgba(0, 0, 0, 0.85)",cardBackground:"#0F172A",cardBorder:"#25324A",cardBorderHover:"#3b4c6b",text:"#E6EEFF",textSecondary:"#B8BFC9",textMuted:"#7F91B2",textDim:"#7A8599",success:"#4AFF9F",warning:"#FFEB3B",error:"#FF5252",info:"#00B8E6",toggleOnBg:e=>(0,_colors.withAlpha)(e,"33"),toggleOnBorder:e=>(0,_colors.withAlpha)(e,"88"),toggleOffBg:"#1b2334",toggleOffBorder:"#2a3550",toggleOffText:"#8CA2C8",tabActiveBg:"rgba(0, 184, 230, 0.13)",tabActiveBorder:"#00B8E6",tabInactiveBg:"transparent",tabInactiveText:"#7A8599"},toolColors=exports.toolColors={query:"#FF4154",env:"#4AFF9F",sentry:"#FF5252",storage:"#BA68C8",network:"#4AFF9F",wifi:"#4AFF9F",environment:"#4AFF9F","debug-borders":"#10b981","highlight-updates":"#10b981","highlight-updates-modal":"#10b981",benchmark:"#F59E0B","route-events":"#FF9F1C",routes:"#FF9F1C",renders:"#10b981"},getToolColor=e=>toolColors[e]||settingsColors.info;exports.getToolColor=getToolColor;const toolLabels=exports.toolLabels={query:"QUERY",env:"ENV",sentry:"SENTRY",storage:"STORAGE",network:"NET",wifi:"WIFI",environment:"ENV BADGE","debug-borders":"DEBUG BORDERS","highlight-updates":"HIGHLIGHT","highlight-updates-modal":"HIGHLIGHT MODAL",benchmark:"BENCHMARK","route-events":"ROUTES",routes:"ROUTES",renders:"HIGHLIGHT"},getToolLabel=(e,t)=>{if(t){const o=t.find(t=>t.id===e);if(o?.name)return o.name}return toolLabels[e]||e.toUpperCase().replace(/_/g," ").replace(/-/g," ")};exports.getToolLabel=getToolLabel;const toolDescriptions=exports.toolDescriptions={query:"React Query inspector",env:"Environment variables debugger",sentry:"Error tracking & monitoring",storage:"AsyncStorage browser",network:"Network request logger",wifi:"Network status toggle",environment:"Environment badge indicator","debug-borders":"Component layout borders","highlight-updates":"View component render tracking","highlight-updates-modal":"Render count inspector",benchmark:"Performance benchmarks","route-events":"Route tracking & navigation inspector",routes:"Route tracking & navigation inspector",renders:"View component render tracking modal"},getToolDescription=(e,t)=>{if(t){const o=t.find(t=>t.id===e);if(o?.description)return o.description}return toolDescriptions[e]||""};exports.getToolDescription=getToolDescription;const settingsStyles=exports.settingsStyles={card:{borderRadius:999,paddingVertical:10,paddingHorizontal:14,marginBottom:10,borderWidth:1},cardInner:{gap:10},iconContainer:{width:28,height:28},toolName:{fontSize:13,fontWeight:"800"},toolDescription:{fontSize:11},toggle:{paddingHorizontal:12,paddingVertical:6,borderRadius:999,borderWidth:1,fontSize:11,fontWeight:"700"},tab:{paddingHorizontal:8,paddingVertical:5,borderRadius:4,fontSize:12,fontWeight:"600",letterSpacing:.5},sectionHeader:{marginBottom:12,paddingHorizontal:4},sectionTitle:{fontSize:10,fontWeight:"700",letterSpacing:1,textTransform:"uppercase"},scrollContent:{paddingTop:16,paddingBottom:24},section:{marginHorizontal:16,marginBottom:24}},globalSettingsConfig=exports.globalSettingsConfig=[{key:"enableSharedModalDimensions",label:"SHARED MODAL SIZE",category:"MODAL",shortDescription:"Sync dimensions across all tools",fullDescription:"When enabled, all tool modals will share the same size and position. Resizing one modal will affect all others. When disabled, each tool remembers its own size and position independently.",recommendation:"Keep OFF for the best experience. This allows you to customize each tool's modal size separately. Enable only if you prefer uniform modal sizes across all dev tools."},{key:"expandableWindowControls",label:"EXPAND CONTROLS",category:"MODAL",shortDescription:"iPad-style expandable window buttons",fullDescription:"When enabled, the window control buttons (minimize, toggle mode, close) start as small dots and expand into larger, easy-to-tap buttons when pressed — similar to iPad window controls. When disabled, buttons are directly tappable at their small size.",recommendation:"Keep ON for touch devices where the small buttons are hard to press. Turn OFF if you prefer direct single-tap access (e.g. when using a mouse or simulator)."}],enforceDialLimit=(e,t=MAX_SETTINGS_DIAL_SLOTS)=>{let o=t;const n={};for(const[t,s]of Object.entries(e))s&&o>0?(n[t]=!0,o-=1):n[t]=!1;return n};exports.enforceDialLimit=enforceDialLimit;const sanitizeFloatingSettings=(e,t)=>{const{userStatus:o,environment:n,...s}=e,r=t?Object.entries(s).filter(([e])=>t.includes(e)):Object.entries(s);return{...Object.fromEntries(r),environment:n??!1}};exports.sanitizeFloatingSettings=sanitizeFloatingSettings;const mergeSettingsWithDefaults=(e,t,o)=>{if(!t)return e;const n={...e.dialTools,...t.dialTools??{}},s=o?.allowedDialKeys?Object.entries(n).filter(([e])=>o.allowedDialKeys?.includes(e)):Object.entries(n);return{dialTools:enforceDialLimit(Object.fromEntries(s)),floatingTools:sanitizeFloatingSettings({...e.floatingTools,...t.floatingTools??{}},o?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:!1,expandableWindowControls:!0,...t.globalSettings??{}}}};exports.mergeSettingsWithDefaults=mergeSettingsWithDefaults;const generateDefaultSettings=(e=[],t,o)=>{const n={},s={},r=new Set(t??[]),i=new Set(o??[]);for(const t of e){const{id:e,slot:o="both"}=t;"dial"!==o&&"both"!==o||(n[e]=i.has(e)),"row"!==o&&"both"!==o||(s[e]=r.has(e))}return{dialTools:enforceDialLimit(n),floatingTools:{...s,environment:r.has("environment")},globalSettings:{enableSharedModalDimensions:!1,expandableWindowControls:!0}}};exports.generateDefaultSettings=generateDefaultSettings;const countEnabledTools=e=>Object.values(e).filter(Boolean).length;exports.countEnabledTools=countEnabledTools;const canEnableDialTool=(e,t,o=MAX_SETTINGS_DIAL_SLOTS)=>{const n=countEnabledTools(e);return!!e[t]||n<o};exports.canEnableDialTool=canEnableDialTool;const getEnabledToolIds=e=>({floating:Object.entries(e.floatingTools).filter(([e,t])=>t).map(([e])=>e),dial:Object.entries(e.dialTools).filter(([e,t])=>t).map(([e])=>e)});exports.getEnabledToolIds=getEnabledToolIds;class SettingsEventBus{listeners=new Set;emit(e){this.listeners.forEach(t=>{try{t(e)}catch(e){console.error("Error emitting settings event:",e)}})}addListener(e){return this.listeners.add(e),()=>this.listeners.delete(e)}clear(){this.listeners.clear()}get listenerCount(){return this.listeners.size}}exports.SettingsEventBus=SettingsEventBus;const settingsEventBus=exports.settingsEventBus=new SettingsEventBus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const initialState={isDialOpen:!1,isSettingsOpen:!1,activeSettingsTab:"
|
|
1
|
+
"use strict";const initialState={isDialOpen:!1,isSettingsOpen:!1,activeSettingsTab:"floating",isInitialized:!1};export function devToolsReducer(t,e){switch(e.type){case"OPEN_DIAL":return{...t,isDialOpen:!0};case"CLOSE_DIAL":return{...t,isDialOpen:!1};case"TOGGLE_DIAL":return{...t,isDialOpen:!t.isDialOpen};case"OPEN_SETTINGS":return{...t,isSettingsOpen:!0,isDialOpen:!1};case"CLOSE_SETTINGS":return{...t,isSettingsOpen:!1};case"SET_SETTINGS_TAB":return{...t,activeSettingsTab:e.tab};case"INITIALIZE":return{...t,isInitialized:!0};default:return t}}export class DevToolsStateManager{listeners=new Set;constructor(t){this.state={...initialState,...t}}getState=()=>this.state;getServerState=()=>initialState;isDialOpen(){return this.state.isDialOpen}isSettingsOpen(){return this.state.isSettingsOpen}isInitialized(){return this.state.isInitialized}getActiveSettingsTab(){return this.state.activeSettingsTab}dispatch(t){const e=devToolsReducer(this.state,t);e!==this.state&&(this.state=e,this.notifyListeners())}openDial(){this.dispatch({type:"OPEN_DIAL"})}closeDial(){this.dispatch({type:"CLOSE_DIAL"})}toggleDial(){this.dispatch({type:"TOGGLE_DIAL"})}openSettings(){this.dispatch({type:"OPEN_SETTINGS"})}closeSettings(){this.dispatch({type:"CLOSE_SETTINGS"})}setSettingsTab(t){this.dispatch({type:"SET_SETTINGS_TAB",tab:t})}initialize(){this.dispatch({type:"INITIALIZE"})}subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});notifyListeners(){this.listeners.forEach(t=>{try{t()}catch(t){console.error("Error in DevToolsStateManager listener:",t)}})}get listenerCount(){return this.listeners.size}reset(){this.state={...initialState},this.notifyListeners()}}export const devToolsStateManager=new DevToolsStateManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";export const USAGE_HALF_LIFE_MS=2592e5;export const USAGE_MIN_SCORE=.01;export function decayScore(e,o){if(!e||e.score<=0)return 0;const r=o-e.lastUsed;return r<=0?e.score:e.score*Math.pow(.5,r/2592e5)}export function recordUsage(e,o,r){const c=decayScore(e[o],r);return{...e,[o]:{score:c+1,lastUsed:r}}}export function rankToolIds(e,o,r){const c=e.map((e,c)=>({id:e,index:c,score:decayScore(o[e],r)}));return c.sort((e,o)=>o.score!==e.score?o.score-e.score:e.index-o.index),c.map(e=>e.id)}export function pruneUsage(e,o){const r={};for(const[c,t]of Object.entries(e))decayScore(t,o)>.01&&(r[c]=t);return r}
|
package/lib/module/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export{FloatingToolsStore}from"./FloatingToolsStore.js";export{VISIBLE_HANDLE_WIDTH,DRAG_THRESHOLD,ANIMATION_DURATION,EDGE_PADDING,SAVE_DEBOUNCE_MS,STORAGE_KEYS}from"./constants.js";export{DevToolsStateManager,devToolsStateManager,devToolsReducer}from"./devToolsState.js";export{getUserStatusConfig,getGripIconLayout,filterValidChildren}from"./utils.js";export{easing,getEasing,interpolate,interpolatePosition}from"./easing.js";export{floatingToolsColors,withAlpha}from"./colors.js";export{MAX_DIAL_SLOTS,DIAL_START_ANGLE,DIAL_BUTTON_SIZE,DIAL_ICON_SIZE,DIAL_ICON_PADDING,DIAL_GRID_LINE_COUNT,dialColors,dialStyles,getGridLineRotations,getDialLayout,getIconAngle,getIconPosition,getAllIconPositions,dialAnimationConfig,getIconStaggerInputRange,dialCSSBeziers,generateDialCSSKeyframes,getDialCSSAnimationStyles,getDialCSSKeyframesString,getSpiralAnimationPosition,getStaggeredIconProgress}from"./dial.js";export{SETTINGS_STORAGE_KEY,MAX_SETTINGS_DIAL_SLOTS,settingsTabs,settingsColors,toolColors,getToolColor,settingsStyles,toolLabels,getToolLabel,toolDescriptions,getToolDescription,globalSettingsConfig,enforceDialLimit,sanitizeFloatingSettings,mergeSettingsWithDefaults,generateDefaultSettings,countEnabledTools,canEnableDialTool,getEnabledToolIds,SettingsEventBus,settingsEventBus}from"./settings.js";export{NetworkIcon,NETWORK_ICON_COLOR}from"./icons/network-icon.js";export{EnvIcon,ENV_ICON_COLOR}from"./icons/env-icon.js";export{StorageIcon,STORAGE_ICON_COLOR}from"./icons/storage-icon.js";export{RoutesIcon,RoutePinIcon,RoutePathIcon,RouteDotIcon,RouteTwoPinsIcon,CurveTestA,CurveTestB,CurveTestC,CurveTestD,CurveTestE,CurveTestF,CurveTestG,CurveTestH,CurveTestI,CurveTestJ,CurveTestK,CurveTestL,CurveTestM,CurveTestN,CurveTestO,CurveTestP,ROUTES_ICON_COLOR}from"./icons/routes-icon.js";export{QueryIcon,QUERY_ICON_COLOR}from"./icons/query-icon.js";export{HighlighterIcon,HIGHLIGHTER_ICON_COLOR,RendersIcon,RENDERS_ICON_COLOR}from"./icons/renders-icon.js";export{BenchmarkIcon,BENCHMARK_ICON_COLOR}from"./icons/benchmark-icon.js";export{SentryIcon,SENTRY_ICON_COLOR}from"./icons/sentry-icon.js";export{WifiIcon,WIFI_ICON_COLOR}from"./icons/wifi-icon.js";export{HighlightIcon,HIGHLIGHT_ICON_COLOR}from"./icons/highlight-icon.js";export{ReduxIcon,REDUX_ICON_COLOR}from"./icons/redux-icon.js";export{EventsIcon,EVENTS_ICON_COLOR}from"./icons/events-icon.js";export{createNode,createLine,createRing,createDot,createGlow,createArrow,createBar}from"./icons/icon-factories.js";export{renderIconData,createIcon}from"./icons/icon-renderer.js";
|
|
1
|
+
"use strict";export{FloatingToolsStore}from"./FloatingToolsStore.js";export{VISIBLE_HANDLE_WIDTH,DRAG_THRESHOLD,ANIMATION_DURATION,EDGE_PADDING,SAVE_DEBOUNCE_MS,STORAGE_KEYS}from"./constants.js";export{DevToolsStateManager,devToolsStateManager,devToolsReducer}from"./devToolsState.js";export{getUserStatusConfig,getGripIconLayout,filterValidChildren}from"./utils.js";export{easing,getEasing,interpolate,interpolatePosition}from"./easing.js";export{floatingToolsColors,withAlpha}from"./colors.js";export{MAX_DIAL_SLOTS,DIAL_START_ANGLE,DIAL_BUTTON_SIZE,DIAL_ICON_SIZE,DIAL_ICON_PADDING,DIAL_GRID_LINE_COUNT,dialColors,dialStyles,getGridLineRotations,getDialLayout,getIconAngle,getIconPosition,getAllIconPositions,dialAnimationConfig,getIconStaggerInputRange,dialCSSBeziers,generateDialCSSKeyframes,getDialCSSAnimationStyles,getDialCSSKeyframesString,getSpiralAnimationPosition,getStaggeredIconProgress}from"./dial.js";export{USAGE_HALF_LIFE_MS,USAGE_MIN_SCORE,decayScore,recordUsage,rankToolIds,pruneUsage}from"./dialUsage.js";export{SETTINGS_STORAGE_KEY,MAX_SETTINGS_DIAL_SLOTS,settingsTabs,settingsColors,toolColors,getToolColor,settingsStyles,toolLabels,getToolLabel,toolDescriptions,getToolDescription,globalSettingsConfig,enforceDialLimit,sanitizeFloatingSettings,mergeSettingsWithDefaults,generateDefaultSettings,countEnabledTools,canEnableDialTool,getEnabledToolIds,SettingsEventBus,settingsEventBus}from"./settings.js";export{NetworkIcon,NETWORK_ICON_COLOR}from"./icons/network-icon.js";export{EnvIcon,ENV_ICON_COLOR}from"./icons/env-icon.js";export{StorageIcon,STORAGE_ICON_COLOR}from"./icons/storage-icon.js";export{RoutesIcon,RoutePinIcon,RoutePathIcon,RouteDotIcon,RouteTwoPinsIcon,CurveTestA,CurveTestB,CurveTestC,CurveTestD,CurveTestE,CurveTestF,CurveTestG,CurveTestH,CurveTestI,CurveTestJ,CurveTestK,CurveTestL,CurveTestM,CurveTestN,CurveTestO,CurveTestP,ROUTES_ICON_COLOR}from"./icons/routes-icon.js";export{QueryIcon,QUERY_ICON_COLOR}from"./icons/query-icon.js";export{HighlighterIcon,HIGHLIGHTER_ICON_COLOR,RendersIcon,RENDERS_ICON_COLOR}from"./icons/renders-icon.js";export{BenchmarkIcon,BENCHMARK_ICON_COLOR}from"./icons/benchmark-icon.js";export{SentryIcon,SENTRY_ICON_COLOR}from"./icons/sentry-icon.js";export{WifiIcon,WIFI_ICON_COLOR}from"./icons/wifi-icon.js";export{HighlightIcon,HIGHLIGHT_ICON_COLOR}from"./icons/highlight-icon.js";export{ReduxIcon,REDUX_ICON_COLOR}from"./icons/redux-icon.js";export{EventsIcon,EVENTS_ICON_COLOR}from"./icons/events-icon.js";export{createNode,createLine,createRing,createDot,createGlow,createArrow,createBar}from"./icons/icon-factories.js";export{renderIconData,createIcon}from"./icons/icon-renderer.js";
|
package/lib/module/settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{withAlpha}from"./colors.js";export const SETTINGS_STORAGE_KEY="@react_buoy_dev_tools_settings";export const MAX_SETTINGS_DIAL_SLOTS=6;export const settingsTabs=[{key:"
|
|
1
|
+
"use strict";import{withAlpha}from"./colors.js";export const SETTINGS_STORAGE_KEY="@react_buoy_dev_tools_settings";export const MAX_SETTINGS_DIAL_SLOTS=6;export const settingsTabs=[{key:"floating",label:"FLOATING"},{key:"settings",label:"SETTINGS"},{key:"pro",label:"PRO"}];export const settingsColors={background:"rgba(8, 12, 21, 0.98)",panel:"rgba(16, 22, 35, 0.98)",backdrop:"rgba(0, 0, 0, 0.85)",cardBackground:"#0F172A",cardBorder:"#25324A",cardBorderHover:"#3b4c6b",text:"#E6EEFF",textSecondary:"#B8BFC9",textMuted:"#7F91B2",textDim:"#7A8599",success:"#4AFF9F",warning:"#FFEB3B",error:"#FF5252",info:"#00B8E6",toggleOnBg:e=>withAlpha(e,"33"),toggleOnBorder:e=>withAlpha(e,"88"),toggleOffBg:"#1b2334",toggleOffBorder:"#2a3550",toggleOffText:"#8CA2C8",tabActiveBg:"rgba(0, 184, 230, 0.13)",tabActiveBorder:"#00B8E6",tabInactiveBg:"transparent",tabInactiveText:"#7A8599"};export const toolColors={query:"#FF4154",env:"#4AFF9F",sentry:"#FF5252",storage:"#BA68C8",network:"#4AFF9F",wifi:"#4AFF9F",environment:"#4AFF9F","debug-borders":"#10b981","highlight-updates":"#10b981","highlight-updates-modal":"#10b981",benchmark:"#F59E0B","route-events":"#FF9F1C",routes:"#FF9F1C",renders:"#10b981"};export const getToolColor=e=>toolColors[e]||settingsColors.info;export const toolLabels={query:"QUERY",env:"ENV",sentry:"SENTRY",storage:"STORAGE",network:"NET",wifi:"WIFI",environment:"ENV BADGE","debug-borders":"DEBUG BORDERS","highlight-updates":"HIGHLIGHT","highlight-updates-modal":"HIGHLIGHT MODAL",benchmark:"BENCHMARK","route-events":"ROUTES",routes:"ROUTES",renders:"HIGHLIGHT"};export const getToolLabel=(e,t)=>{if(t){const o=t.find(t=>t.id===e);if(o?.name)return o.name}return toolLabels[e]||e.toUpperCase().replace(/_/g," ").replace(/-/g," ")};export const toolDescriptions={query:"React Query inspector",env:"Environment variables debugger",sentry:"Error tracking & monitoring",storage:"AsyncStorage browser",network:"Network request logger",wifi:"Network status toggle",environment:"Environment badge indicator","debug-borders":"Component layout borders","highlight-updates":"View component render tracking","highlight-updates-modal":"Render count inspector",benchmark:"Performance benchmarks","route-events":"Route tracking & navigation inspector",routes:"Route tracking & navigation inspector",renders:"View component render tracking modal"};export const getToolDescription=(e,t)=>{if(t){const o=t.find(t=>t.id===e);if(o?.description)return o.description}return toolDescriptions[e]||""};export const settingsStyles={card:{borderRadius:999,paddingVertical:10,paddingHorizontal:14,marginBottom:10,borderWidth:1},cardInner:{gap:10},iconContainer:{width:28,height:28},toolName:{fontSize:13,fontWeight:"800"},toolDescription:{fontSize:11},toggle:{paddingHorizontal:12,paddingVertical:6,borderRadius:999,borderWidth:1,fontSize:11,fontWeight:"700"},tab:{paddingHorizontal:8,paddingVertical:5,borderRadius:4,fontSize:12,fontWeight:"600",letterSpacing:.5},sectionHeader:{marginBottom:12,paddingHorizontal:4},sectionTitle:{fontSize:10,fontWeight:"700",letterSpacing:1,textTransform:"uppercase"},scrollContent:{paddingTop:16,paddingBottom:24},section:{marginHorizontal:16,marginBottom:24}};export const globalSettingsConfig=[{key:"enableSharedModalDimensions",label:"SHARED MODAL SIZE",category:"MODAL",shortDescription:"Sync dimensions across all tools",fullDescription:"When enabled, all tool modals will share the same size and position. Resizing one modal will affect all others. When disabled, each tool remembers its own size and position independently.",recommendation:"Keep OFF for the best experience. This allows you to customize each tool's modal size separately. Enable only if you prefer uniform modal sizes across all dev tools."},{key:"expandableWindowControls",label:"EXPAND CONTROLS",category:"MODAL",shortDescription:"iPad-style expandable window buttons",fullDescription:"When enabled, the window control buttons (minimize, toggle mode, close) start as small dots and expand into larger, easy-to-tap buttons when pressed — similar to iPad window controls. When disabled, buttons are directly tappable at their small size.",recommendation:"Keep ON for touch devices where the small buttons are hard to press. Turn OFF if you prefer direct single-tap access (e.g. when using a mouse or simulator)."}];export const enforceDialLimit=(e,t=6)=>{let o=t;const n={};for(const[t,r]of Object.entries(e))r&&o>0?(n[t]=!0,o-=1):n[t]=!1;return n};export const sanitizeFloatingSettings=(e,t)=>{const{userStatus:o,environment:n,...r}=e,i=t?Object.entries(r).filter(([e])=>t.includes(e)):Object.entries(r);return{...Object.fromEntries(i),environment:n??!1}};export const mergeSettingsWithDefaults=(e,t,o)=>{if(!t)return e;const n={...e.dialTools,...t.dialTools??{}},r=o?.allowedDialKeys?Object.entries(n).filter(([e])=>o.allowedDialKeys?.includes(e)):Object.entries(n);return{dialTools:enforceDialLimit(Object.fromEntries(r)),floatingTools:sanitizeFloatingSettings({...e.floatingTools,...t.floatingTools??{}},o?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:!1,expandableWindowControls:!0,...t.globalSettings??{}}}};export const generateDefaultSettings=(e=[],t,o)=>{const n={},r={},i=new Set(t??[]),s=new Set(o??[]);for(const t of e){const{id:e,slot:o="both"}=t;"dial"!==o&&"both"!==o||(n[e]=s.has(e)),"row"!==o&&"both"!==o||(r[e]=i.has(e))}return{dialTools:enforceDialLimit(n),floatingTools:{...r,environment:i.has("environment")},globalSettings:{enableSharedModalDimensions:!1,expandableWindowControls:!0}}};export const countEnabledTools=e=>Object.values(e).filter(Boolean).length;export const canEnableDialTool=(e,t,o=6)=>{const n=countEnabledTools(e);return!!e[t]||n<o};export const getEnabledToolIds=e=>({floating:Object.entries(e.floatingTools).filter(([e,t])=>t).map(([e])=>e),dial:Object.entries(e.dialTools).filter(([e,t])=>t).map(([e])=>e)});export class SettingsEventBus{listeners=new Set;emit(e){this.listeners.forEach(t=>{try{t(e)}catch(e){console.error("Error emitting settings event:",e)}})}addListener(e){return this.listeners.add(e),()=>this.listeners.delete(e)}clear(){this.listeners.clear()}get listenerCount(){return this.listeners.size}}export const settingsEventBus=new SettingsEventBus;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dial Usage - Recency-weighted usage tracking for the dial menu.
|
|
3
|
+
*
|
|
4
|
+
* Pure scoring/ranking logic. No React or platform-specific code.
|
|
5
|
+
*
|
|
6
|
+
* The dial menu ranks tools by how recently and frequently they are used.
|
|
7
|
+
* Each press adds 1 point to a tool's score; that score decays exponentially
|
|
8
|
+
* over time (half-life ~3 days) so the ordering reflects "what I'm using most
|
|
9
|
+
* lately" rather than all-time totals.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Half-life of a usage score, in milliseconds (~3 days).
|
|
13
|
+
* After this much time, an untouched tool's score halves.
|
|
14
|
+
*/
|
|
15
|
+
export declare const USAGE_HALF_LIFE_MS: number;
|
|
16
|
+
/**
|
|
17
|
+
* Scores at or below this value are treated as zero. Entries that decay
|
|
18
|
+
* below it can be safely pruned from storage.
|
|
19
|
+
*/
|
|
20
|
+
export declare const USAGE_MIN_SCORE = 0.01;
|
|
21
|
+
/**
|
|
22
|
+
* A single tool's usage record.
|
|
23
|
+
*/
|
|
24
|
+
export interface UsageEntry {
|
|
25
|
+
/** Decayed usage score as of `lastUsed`. */
|
|
26
|
+
score: number;
|
|
27
|
+
/** Epoch ms timestamp of the most recent press. */
|
|
28
|
+
lastUsed: number;
|
|
29
|
+
}
|
|
30
|
+
/** Map of tool id to its usage record. */
|
|
31
|
+
export type UsageMap = Record<string, UsageEntry>;
|
|
32
|
+
/**
|
|
33
|
+
* Decay a stored score forward to `now`.
|
|
34
|
+
*
|
|
35
|
+
* @param entry - The usage entry to evaluate
|
|
36
|
+
* @param now - Current epoch ms
|
|
37
|
+
* @returns The score decayed to `now` (never negative)
|
|
38
|
+
*/
|
|
39
|
+
export declare function decayScore(entry: UsageEntry | undefined, now: number): number;
|
|
40
|
+
/**
|
|
41
|
+
* Record a single press of a tool, returning a new usage map.
|
|
42
|
+
*
|
|
43
|
+
* The existing score is decayed forward to `now` before adding 1, so a
|
|
44
|
+
* burst of presses accumulates while stale scores naturally fade.
|
|
45
|
+
*
|
|
46
|
+
* @param map - Current usage map
|
|
47
|
+
* @param id - Tool id that was pressed
|
|
48
|
+
* @param now - Current epoch ms
|
|
49
|
+
* @returns A new usage map (input is not mutated)
|
|
50
|
+
*/
|
|
51
|
+
export declare function recordUsage(map: UsageMap, id: string, now: number): UsageMap;
|
|
52
|
+
/**
|
|
53
|
+
* Rank tool ids by decayed usage score, highest first.
|
|
54
|
+
*
|
|
55
|
+
* The sort is stable: tools with equal scores (including never-used tools,
|
|
56
|
+
* which score 0) keep their original order in `orderedIds`. This preserves
|
|
57
|
+
* registration order as the tie-breaker.
|
|
58
|
+
*
|
|
59
|
+
* @param orderedIds - Tool ids in their default/registration order
|
|
60
|
+
* @param map - Current usage map
|
|
61
|
+
* @param now - Current epoch ms
|
|
62
|
+
* @returns A new array of ids sorted by usage
|
|
63
|
+
*/
|
|
64
|
+
export declare function rankToolIds(orderedIds: string[], map: UsageMap, now: number): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Drop entries whose decayed score has fallen below `USAGE_MIN_SCORE`,
|
|
67
|
+
* keeping the persisted map from growing unbounded.
|
|
68
|
+
*
|
|
69
|
+
* @param map - Current usage map
|
|
70
|
+
* @param now - Current epoch ms
|
|
71
|
+
* @returns A new, pruned usage map
|
|
72
|
+
*/
|
|
73
|
+
export declare function pruneUsage(map: UsageMap, now: number): UsageMap;
|
|
74
|
+
//# sourceMappingURL=dialUsage.d.ts.map
|
|
@@ -24,6 +24,7 @@ export { getUserStatusConfig, getGripIconLayout, filterValidChildren, type UserR
|
|
|
24
24
|
export { easing, getEasing, interpolate, interpolatePosition, type EasingFunction, type EasingName, } from './easing';
|
|
25
25
|
export { floatingToolsColors, withAlpha, type FloatingToolsColorKey, } from './colors';
|
|
26
26
|
export { MAX_DIAL_SLOTS, DIAL_START_ANGLE, DIAL_BUTTON_SIZE, DIAL_ICON_SIZE, DIAL_ICON_PADDING, DIAL_GRID_LINE_COUNT, dialColors, dialStyles, getGridLineRotations, getDialLayout, getIconAngle, getIconPosition, getAllIconPositions, dialAnimationConfig, getIconStaggerInputRange, dialCSSBeziers, generateDialCSSKeyframes, getDialCSSAnimationStyles, getDialCSSKeyframesString, getSpiralAnimationPosition, getStaggeredIconProgress, type DialColorKey, type DialLayoutConfig, type DialLayout, type IconPosition, type DialEasingName, type SpringConfig, type DialAnimationConfigType, type DialCSSBezierKey, type SpiralPosition, } from './dial';
|
|
27
|
+
export { USAGE_HALF_LIFE_MS, USAGE_MIN_SCORE, decayScore, recordUsage, rankToolIds, pruneUsage, type UsageEntry, type UsageMap, } from './dialUsage';
|
|
27
28
|
export { SETTINGS_STORAGE_KEY, MAX_SETTINGS_DIAL_SLOTS, settingsTabs, settingsColors, toolColors, getToolColor, settingsStyles, toolLabels, getToolLabel, toolDescriptions, getToolDescription, globalSettingsConfig, enforceDialLimit, sanitizeFloatingSettings, mergeSettingsWithDefaults, generateDefaultSettings, countEnabledTools, canEnableDialTool, getEnabledToolIds, SettingsEventBus, settingsEventBus, type SettingsTabKey, type SettingsTab, type SettingsColorKey, type GlobalSettingConfig, type GlobalDevToolsSettings, type DevToolsSettings, type AvailableToolConfig, type ToolMetadata, type MergeSettingsOptions, } from './settings';
|
|
28
29
|
export { NetworkIcon, NETWORK_ICON_COLOR } from './icons/network-icon';
|
|
29
30
|
export { EnvIcon, ENV_ICON_COLOR } from './icons/env-icon';
|
|
@@ -16,12 +16,17 @@
|
|
|
16
16
|
export declare const SETTINGS_STORAGE_KEY = "@react_buoy_dev_tools_settings";
|
|
17
17
|
/** Maximum number of tools in the dial menu */
|
|
18
18
|
export declare const MAX_SETTINGS_DIAL_SLOTS = 6;
|
|
19
|
-
export type SettingsTabKey = '
|
|
19
|
+
export type SettingsTabKey = 'floating' | 'settings' | 'pro';
|
|
20
20
|
export interface SettingsTab {
|
|
21
21
|
key: SettingsTabKey;
|
|
22
22
|
label: string;
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Tab configuration - shared across mobile and web.
|
|
26
|
+
*
|
|
27
|
+
* Note: the dial no longer has a show/hide tab — dial tools are shown
|
|
28
|
+
* automatically, paginated and ranked by usage.
|
|
29
|
+
*/
|
|
25
30
|
export declare const settingsTabs: SettingsTab[];
|
|
26
31
|
/**
|
|
27
32
|
* Color palette for the settings modal.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dial Usage - Recency-weighted usage tracking for the dial menu.
|
|
3
|
+
*
|
|
4
|
+
* Pure scoring/ranking logic. No React or platform-specific code.
|
|
5
|
+
*
|
|
6
|
+
* The dial menu ranks tools by how recently and frequently they are used.
|
|
7
|
+
* Each press adds 1 point to a tool's score; that score decays exponentially
|
|
8
|
+
* over time (half-life ~3 days) so the ordering reflects "what I'm using most
|
|
9
|
+
* lately" rather than all-time totals.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Half-life of a usage score, in milliseconds (~3 days).
|
|
13
|
+
* After this much time, an untouched tool's score halves.
|
|
14
|
+
*/
|
|
15
|
+
export declare const USAGE_HALF_LIFE_MS: number;
|
|
16
|
+
/**
|
|
17
|
+
* Scores at or below this value are treated as zero. Entries that decay
|
|
18
|
+
* below it can be safely pruned from storage.
|
|
19
|
+
*/
|
|
20
|
+
export declare const USAGE_MIN_SCORE = 0.01;
|
|
21
|
+
/**
|
|
22
|
+
* A single tool's usage record.
|
|
23
|
+
*/
|
|
24
|
+
export interface UsageEntry {
|
|
25
|
+
/** Decayed usage score as of `lastUsed`. */
|
|
26
|
+
score: number;
|
|
27
|
+
/** Epoch ms timestamp of the most recent press. */
|
|
28
|
+
lastUsed: number;
|
|
29
|
+
}
|
|
30
|
+
/** Map of tool id to its usage record. */
|
|
31
|
+
export type UsageMap = Record<string, UsageEntry>;
|
|
32
|
+
/**
|
|
33
|
+
* Decay a stored score forward to `now`.
|
|
34
|
+
*
|
|
35
|
+
* @param entry - The usage entry to evaluate
|
|
36
|
+
* @param now - Current epoch ms
|
|
37
|
+
* @returns The score decayed to `now` (never negative)
|
|
38
|
+
*/
|
|
39
|
+
export declare function decayScore(entry: UsageEntry | undefined, now: number): number;
|
|
40
|
+
/**
|
|
41
|
+
* Record a single press of a tool, returning a new usage map.
|
|
42
|
+
*
|
|
43
|
+
* The existing score is decayed forward to `now` before adding 1, so a
|
|
44
|
+
* burst of presses accumulates while stale scores naturally fade.
|
|
45
|
+
*
|
|
46
|
+
* @param map - Current usage map
|
|
47
|
+
* @param id - Tool id that was pressed
|
|
48
|
+
* @param now - Current epoch ms
|
|
49
|
+
* @returns A new usage map (input is not mutated)
|
|
50
|
+
*/
|
|
51
|
+
export declare function recordUsage(map: UsageMap, id: string, now: number): UsageMap;
|
|
52
|
+
/**
|
|
53
|
+
* Rank tool ids by decayed usage score, highest first.
|
|
54
|
+
*
|
|
55
|
+
* The sort is stable: tools with equal scores (including never-used tools,
|
|
56
|
+
* which score 0) keep their original order in `orderedIds`. This preserves
|
|
57
|
+
* registration order as the tie-breaker.
|
|
58
|
+
*
|
|
59
|
+
* @param orderedIds - Tool ids in their default/registration order
|
|
60
|
+
* @param map - Current usage map
|
|
61
|
+
* @param now - Current epoch ms
|
|
62
|
+
* @returns A new array of ids sorted by usage
|
|
63
|
+
*/
|
|
64
|
+
export declare function rankToolIds(orderedIds: string[], map: UsageMap, now: number): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Drop entries whose decayed score has fallen below `USAGE_MIN_SCORE`,
|
|
67
|
+
* keeping the persisted map from growing unbounded.
|
|
68
|
+
*
|
|
69
|
+
* @param map - Current usage map
|
|
70
|
+
* @param now - Current epoch ms
|
|
71
|
+
* @returns A new, pruned usage map
|
|
72
|
+
*/
|
|
73
|
+
export declare function pruneUsage(map: UsageMap, now: number): UsageMap;
|
|
74
|
+
//# sourceMappingURL=dialUsage.d.ts.map
|
|
@@ -24,6 +24,7 @@ export { getUserStatusConfig, getGripIconLayout, filterValidChildren, type UserR
|
|
|
24
24
|
export { easing, getEasing, interpolate, interpolatePosition, type EasingFunction, type EasingName, } from './easing';
|
|
25
25
|
export { floatingToolsColors, withAlpha, type FloatingToolsColorKey, } from './colors';
|
|
26
26
|
export { MAX_DIAL_SLOTS, DIAL_START_ANGLE, DIAL_BUTTON_SIZE, DIAL_ICON_SIZE, DIAL_ICON_PADDING, DIAL_GRID_LINE_COUNT, dialColors, dialStyles, getGridLineRotations, getDialLayout, getIconAngle, getIconPosition, getAllIconPositions, dialAnimationConfig, getIconStaggerInputRange, dialCSSBeziers, generateDialCSSKeyframes, getDialCSSAnimationStyles, getDialCSSKeyframesString, getSpiralAnimationPosition, getStaggeredIconProgress, type DialColorKey, type DialLayoutConfig, type DialLayout, type IconPosition, type DialEasingName, type SpringConfig, type DialAnimationConfigType, type DialCSSBezierKey, type SpiralPosition, } from './dial';
|
|
27
|
+
export { USAGE_HALF_LIFE_MS, USAGE_MIN_SCORE, decayScore, recordUsage, rankToolIds, pruneUsage, type UsageEntry, type UsageMap, } from './dialUsage';
|
|
27
28
|
export { SETTINGS_STORAGE_KEY, MAX_SETTINGS_DIAL_SLOTS, settingsTabs, settingsColors, toolColors, getToolColor, settingsStyles, toolLabels, getToolLabel, toolDescriptions, getToolDescription, globalSettingsConfig, enforceDialLimit, sanitizeFloatingSettings, mergeSettingsWithDefaults, generateDefaultSettings, countEnabledTools, canEnableDialTool, getEnabledToolIds, SettingsEventBus, settingsEventBus, type SettingsTabKey, type SettingsTab, type SettingsColorKey, type GlobalSettingConfig, type GlobalDevToolsSettings, type DevToolsSettings, type AvailableToolConfig, type ToolMetadata, type MergeSettingsOptions, } from './settings';
|
|
28
29
|
export { NetworkIcon, NETWORK_ICON_COLOR } from './icons/network-icon';
|
|
29
30
|
export { EnvIcon, ENV_ICON_COLOR } from './icons/env-icon';
|
|
@@ -16,12 +16,17 @@
|
|
|
16
16
|
export declare const SETTINGS_STORAGE_KEY = "@react_buoy_dev_tools_settings";
|
|
17
17
|
/** Maximum number of tools in the dial menu */
|
|
18
18
|
export declare const MAX_SETTINGS_DIAL_SLOTS = 6;
|
|
19
|
-
export type SettingsTabKey = '
|
|
19
|
+
export type SettingsTabKey = 'floating' | 'settings' | 'pro';
|
|
20
20
|
export interface SettingsTab {
|
|
21
21
|
key: SettingsTabKey;
|
|
22
22
|
label: string;
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Tab configuration - shared across mobile and web.
|
|
26
|
+
*
|
|
27
|
+
* Note: the dial no longer has a show/hide tab — dial tools are shown
|
|
28
|
+
* automatically, paginated and ranked by usage.
|
|
29
|
+
*/
|
|
25
30
|
export declare const settingsTabs: SettingsTab[];
|
|
26
31
|
/**
|
|
27
32
|
* Color palette for the settings modal.
|
package/package.json
CHANGED