@buoy-gg/core 7.0.56 → 7.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/lib/commonjs/browserRegister.js +1 -1
  2. package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
  3. package/lib/commonjs/floatingMenu/BrowserToolRuntime.js +1 -1
  4. package/lib/commonjs/floatingMenu/BuoyCodeSignIn.js +1 -0
  5. package/lib/commonjs/floatingMenu/BuoySignIn.js +1 -1
  6. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.shared.js +1 -1
  7. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
  8. package/lib/commonjs/floatingMenu/MinimizedToolsStack.web.js +1 -1
  9. package/lib/commonjs/floatingMenu/capacitorBackButton.js +1 -0
  10. package/lib/commonjs/floatingMenu/capacitorHostInfo.js +1 -0
  11. package/lib/commonjs/floatingMenu/deviceIdentity.js +1 -1
  12. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -1
  13. package/lib/commonjs/floatingMenu/dial/DialIcon.js +1 -1
  14. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.web.js +1 -1
  15. package/lib/commonjs/floatingMenu/dial/dialA11y.js +1 -0
  16. package/lib/commonjs/index.web.js +1 -1
  17. package/lib/commonjs/version.js +1 -1
  18. package/lib/module/browserRegister.js +1 -1
  19. package/lib/module/floatingMenu/AppHost.web.js +1 -1
  20. package/lib/module/floatingMenu/BrowserToolRuntime.js +1 -1
  21. package/lib/module/floatingMenu/BuoyCodeSignIn.js +1 -0
  22. package/lib/module/floatingMenu/BuoySignIn.js +1 -1
  23. package/lib/module/floatingMenu/DevToolsSettingsModal.shared.js +1 -1
  24. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
  25. package/lib/module/floatingMenu/MinimizedToolsStack.web.js +1 -1
  26. package/lib/module/floatingMenu/capacitorBackButton.js +1 -0
  27. package/lib/module/floatingMenu/capacitorHostInfo.js +1 -0
  28. package/lib/module/floatingMenu/deviceIdentity.js +1 -1
  29. package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -1
  30. package/lib/module/floatingMenu/dial/DialIcon.js +1 -1
  31. package/lib/module/floatingMenu/dial/OnboardingTooltip.web.js +1 -1
  32. package/lib/module/floatingMenu/dial/dialA11y.js +1 -0
  33. package/lib/module/index.web.js +1 -1
  34. package/lib/module/version.js +1 -1
  35. package/lib/typescript/commonjs/floatingMenu/BuoyCodeSignIn.d.ts +4 -0
  36. package/lib/typescript/commonjs/floatingMenu/BuoySignIn.d.ts +1 -3
  37. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts +27 -2
  38. package/lib/typescript/commonjs/floatingMenu/capacitorBackButton.d.ts +17 -0
  39. package/lib/typescript/commonjs/floatingMenu/capacitorHostInfo.d.ts +75 -0
  40. package/lib/typescript/commonjs/floatingMenu/dial/dialA11y.d.ts +2 -0
  41. package/lib/typescript/commonjs/index.web.d.ts +2 -0
  42. package/lib/typescript/commonjs/version.d.ts +1 -1
  43. package/lib/typescript/module/floatingMenu/BuoyCodeSignIn.d.ts +4 -0
  44. package/lib/typescript/module/floatingMenu/BuoySignIn.d.ts +1 -3
  45. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts +27 -2
  46. package/lib/typescript/module/floatingMenu/capacitorBackButton.d.ts +17 -0
  47. package/lib/typescript/module/floatingMenu/capacitorHostInfo.d.ts +75 -0
  48. package/lib/typescript/module/floatingMenu/dial/dialA11y.d.ts +2 -0
  49. package/lib/typescript/module/index.web.d.ts +2 -0
  50. package/lib/typescript/module/version.d.ts +1 -1
  51. package/lib/web/chunks/chunk-CLXYMJTS.mjs +1 -0
  52. package/lib/web/chunks/{chunk-QZDVCMCT.mjs → chunk-GLXZCY6W.mjs} +1 -1
  53. package/lib/web/index.mjs +2 -2
  54. package/lib/web/register-server.mjs +1 -1
  55. package/lib/web/register.mjs +1 -1
  56. package/lib/web/toolkit.mjs +1 -1
  57. package/package.json +5 -5
  58. package/lib/web/chunks/chunk-R7RGRTY5.mjs +0 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"earlyHookScript",{enumerable:true,get:function(){return _earlyHookScript.earlyHookScript}});exports.registerBrowserDevTools=registerBrowserDevTools;var ReactDevtools=_interopRequireWildcard(require("react-devtools-core"));var _earlyNetwork=require("./earlyNetwork.js");var _releaseOptIn=require("./releaseOptIn.js");var _earlyHookScript=require("./earlyHookScript.js");function _interopRequireWildcard(u,O){if("function"==typeof WeakMap)var _=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,l){if(!l&&e&&e.__esModule)return e;var t,c,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(t=l?r:_){if(t.has(e))return t.get(e);t.set(e,i)}for(const n in e)"default"!==n&&{}.hasOwnProperty.call(e,n)&&((c=(t=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,n))&&(c.get||c.set)?t(i,n,c):i[n]=e[n]);return i})(u,O)}const HOOK_CALLBACKS=["onScheduleFiberRoot","onCommitFiberRoot","onPostCommitFiberRoot","onCommitFiberUnmount","setStrictMode"];function registerBrowserDevTools(u={}){if(typeof window==="undefined"||typeof document==="undefined")return false;const O=typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production";if(!O&&!u.enableInRelease&&!(0,_releaseOptIn.hasReleaseOptIn)())return false;(0,_earlyNetwork.installEarlyNetworkRecorder)();const _=window;const r=_.__REACT_DEVTOOLS_GLOBAL_HOOK__;const e=r&&r.supportsFiber&&!r.getFiberRoots&&!r.sub&&Object.getOwnPropertyDescriptor(_,"__REACT_DEVTOOLS_GLOBAL_HOOK__")?.configurable;if(e)delete _.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!_.__REACT_DEVTOOLS_GLOBAL_HOOK__){const l=ReactDevtools.initialize??ReactDevtools.default?.initialize;l({appendComponentStack:false,breakOnConsoleErrors:false,showInlineWarningsAndErrors:false,hideConsoleLogsInStrictMode:false});if(e){const t=_.__REACT_DEVTOOLS_GLOBAL_HOOK__;const c=t.inject;const i=new Map;t.inject=o=>{const s=c(o);i.set(s,r.inject(o));return s};for(const o of HOOK_CALLBACKS){const s=t[o];if(typeof s!=="function")continue;t[o]=(a,...f)=>{if(i.has(a))r[o]?.(i.get(a),...f);return s(a,...f)}}const n=new Map;r.renderers?.forEach?.((o,s)=>n.set(s,c(o)));if(n.size){for(const o of HOOK_CALLBACKS){const s=r[o];r[o]=function(a,...f){const d=s?.call(this,a,...f);const p=n.get(a);if(p!==void 0)t[o]?.(p,...f);return d}}}}}return Boolean(_.__REACT_DEVTOOLS_GLOBAL_HOOK__)}registerBrowserDevTools();
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"earlyHookScript",{enumerable:true,get:function(){return _earlyHookScript.earlyHookScript}});exports.registerBrowserDevTools=registerBrowserDevTools;var ReactDevtools=_interopRequireWildcard(require("react-devtools-core"));var _earlyNetwork=require("./earlyNetwork.js");var _releaseOptIn=require("./releaseOptIn.js");var _capacitor=require("@buoy-gg/license/capacitor");var _earlyHookScript=require("./earlyHookScript.js");function _interopRequireWildcard(p,l){if("function"==typeof WeakMap)var u=new WeakMap,f=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,a,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(n=t?f:u){if(n.has(e))return n.get(e);n.set(e,o)}for(const i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((a=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(a.get||a.set)?n(o,i,a):o[i]=e[i]);return o})(p,l)}const HOOK_CALLBACKS=["onScheduleFiberRoot","onCommitFiberRoot","onPostCommitFiberRoot","onCommitFiberUnmount","setStrictMode"];function registerBrowserDevTools(p={}){if(typeof window==="undefined"||typeof document==="undefined")return false;const l=window.Capacitor;const u=(()=>{try{return l?.isNativePlatform?.()===true}catch{return false}})();const f=u?l?.DEBUG===true:typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production";if(!f&&!p.enableInRelease&&!(0,_releaseOptIn.hasReleaseOptIn)())return false;(0,_earlyNetwork.installEarlyNetworkRecorder)();if(u)(0,_capacitor.installCapacitorBridge)({release:!f});const e=window;const t=e.__REACT_DEVTOOLS_GLOBAL_HOOK__;const n=t&&t.supportsFiber&&!t.getFiberRoots&&!t.sub&&Object.getOwnPropertyDescriptor(e,"__REACT_DEVTOOLS_GLOBAL_HOOK__")?.configurable;if(n)delete e.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!e.__REACT_DEVTOOLS_GLOBAL_HOOK__){const a=ReactDevtools.initialize??ReactDevtools.default?.initialize;a({appendComponentStack:false,breakOnConsoleErrors:false,showInlineWarningsAndErrors:false,hideConsoleLogsInStrictMode:false});if(n){const o=e.__REACT_DEVTOOLS_GLOBAL_HOOK__;const i=o.inject;const O=new Map;o.inject=r=>{const s=i(r);O.set(s,t.inject(r));return s};for(const r of HOOK_CALLBACKS){const s=o[r];if(typeof s!=="function")continue;o[r]=(c,..._)=>{if(O.has(c))t[r]?.(O.get(c),..._);return s(c,..._)}}const d=new Map;t.renderers?.forEach?.((r,s)=>d.set(s,i(r)));if(d.size){for(const r of HOOK_CALLBACKS){const s=t[r];t[r]=function(c,..._){const E=s?.call(this,c,..._);const y=d.get(c);if(y!==void 0)o[r]?.(y,..._);return E}}}}}return Boolean(e.__REACT_DEVTOOLS_GLOBAL_HOOK__)}registerBrowserDevTools();
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useAppHost=exports.AppOverlay=exports.AppHostProvider=void 0;var _sharedUi=require("@buoy-gg/shared-ui");var _react=require("react");var _AppHostLogic=require("./AppHostLogic.js");var _AppIcon=require("./AppIcon");var _ToolHost=require("./ToolHost.js");var _DevToolsSettingsModalShared=require("./DevToolsSettingsModal.shared.js");var _floatingToolsWeb=require("./floatingTools.web.js");var _jsxRuntime=require("react/jsx-runtime");const AppHostContext=(0,_react.createContext)(null);const STORAGE_KEY_OPEN_APPS="@react_buoy_open_apps";const ICON_SIZE=44;const ICON_GAP=12;const BOTTOM_OFFSET=100;const RIGHT_OFFSET=16;const dockIconPosition=t=>({x:window.innerWidth-ICON_SIZE-RIGHT_OFFSET,y:window.innerHeight-BOTTOM_OFFSET-ICON_SIZE-t*(ICON_SIZE+ICON_GAP)});const AppHostProvider=({children:t})=>{const[r,l]=(0,_react.useState)([]);const[d,c]=(0,_react.useState)(false);const f=(0,_react.useRef)([]);const u=(0,_react.useRef)(null);const i=(0,_react.useRef)(false);const p=(0,_react.useRef)(false);const g=(0,_react.useRef)(false);const h=(0,_react.useCallback)(n=>{let s="";l(o=>{const{apps:e,instanceId:a}=(0,_AppHostLogic.resolveOpenAppsState)(o,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);s=a;return e});return s},[]);const v=(0,_react.useCallback)(()=>{if(i.current||!p.current||!g.current)return;i.current=true;const n=u.current;if(!n||n.length===0){c(true);return}u.current=null;n.forEach(({id:s,minimized:o})=>{const e=f.current.find(a=>a.id===s);if(e&&e.component){const a=(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color});h({id:e.id,title:e.name,component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:a,color:e.color,minimized:o})}});c(true)},[h]);(0,_react.useEffect)(()=>{let n=false;const s=async()=>{try{const o=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);if(n)return;if(o){const e=JSON.parse(o);let a;if(Array.isArray(e)&&e.length>0){if(typeof e[0]==="string"){a=e.map(m=>({id:m,minimized:false}))}else{a=e.filter(m=>typeof m==="object"&&m!==null&&typeof m.id==="string")}if(a.length){u.current=a}}}}catch{}if(n)return;p.current=true;v()};void s();return()=>{n=true}},[v]);(0,_react.useEffect)(()=>{if(!d)return;const n=r.map(s=>({id:s.id,minimized:s.minimized??false}));void _sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS,JSON.stringify(n))},[r,d]);const b=(0,_react.useCallback)(n=>{f.current=n;g.current=true;v()},[v]);const A=(0,_react.useCallback)(n=>{l(s=>{if(!s.length)return s;if(!n)return s.slice(0,-1);return s.filter(o=>o.instanceId!==n)})},[]);const S=(0,_react.useCallback)(()=>l([]),[]);const x=(0,_react.useCallback)((n,s)=>{l(o=>o.map(e=>e.instanceId===n?{...e,minimized:true,restoreState:s}:e))},[]);const I=(0,_react.useCallback)((n,s)=>{l(o=>o.map(e=>e.instanceId===n?{...e,minimized:false,restoreState:s??e.restoreState}:e))},[]);const M=(0,_react.useCallback)(n=>{const s=r.find(o=>o.instanceId===n);return s?.minimized??false},[r]);const y=r.some(n=>n.launchMode!=="toggle-only"&&!n.minimized);(0,_react.useEffect)(()=>{if(!y)return;const n=s=>{if(s.key!=="Escape")return;if(s.defaultPrevented)return;const o=[...r].reverse().find(e=>e.launchMode!=="toggle-only"&&!e.minimized);if(o)A(o.instanceId)};window.addEventListener("keydown",n);return()=>window.removeEventListener("keydown",n)},[y,A,r]);const z=(0,_react.useMemo)(()=>({openApps:r,isAnyOpen:y,open:h,close:A,closeAll:S,registerApps:b,minimize:x,restore:I,isMinimized:M}),[r,y,h,A,S,b,x,I,M]);return(0,_jsxRuntime.jsx)(AppHostContext.Provider,{value:z,children:t})};exports.AppHostProvider=AppHostProvider;const useAppHost=()=>{const t=(0,_react.useContext)(AppHostContext);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},registerApps:()=>{},minimize:()=>{},restore:()=>{},isMinimized:()=>false}}return t};exports.useAppHost=useAppHost;const BASE_ZINDEX=9e3;const backdropStyle={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"};const cardStyle={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"};const AppRenderer=({app:t,zIndex:r,onClose:l,onMinimize:d,minimizeTargetPosition:c,enableSharedModalDimensions:f})=>{const u=t.component;const i=!t.minimized;const p={...t.props??{},...f?{enableSharedModalDimensions:true}:{}};if(t.modal&&(!t.launchMode||t.launchMode==="self-modal")){return(0,_jsxRuntime.jsx)(_ToolHost.ToolModalShell,{app:t,config:t.modal,visible:i,zIndex:r,onClose:l,onMinimize:d,initialModalState:t.restoreState,enableSharedModalDimensions:f,bodyProps:p})}if(t.launchMode==="self-modal"){return(0,_jsxRuntime.jsx)(u,{...p,visible:i,onClose:l,onRequestClose:l,onMinimize:d,minimizeTargetPosition:c,instanceId:t.instanceId,zIndex:r,initialModalState:t.restoreState})}if(t.launchMode==="inline"){if(!i)return null;return(0,_jsxRuntime.jsx)("div",{style:{position:"fixed",inset:0,zIndex:r,pointerEvents:"none"},children:(0,_jsxRuntime.jsx)(u,{...p,onClose:l,onMinimize:d,minimizeTargetPosition:c,instanceId:t.instanceId})})}return(0,_jsxRuntime.jsx)("div",{style:{...backdropStyle,zIndex:r,display:i?"flex":"none"},children:(0,_jsxRuntime.jsx)("div",{style:cardStyle,children:(0,_jsxRuntime.jsx)(u,{...p,onClose:l,onMinimize:d,minimizeTargetPosition:c,instanceId:t.instanceId})})})};const AppOverlay=()=>{const{openApps:t,close:r,minimize:l}=useAppHost();const{settings:d}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();const c=t.filter(i=>i.launchMode!=="toggle-only");if(c.length===0)return null;const f=c.filter(i=>i.minimized).length;const u=(0,_floatingToolsWeb.getBubbleAnchorPosition)()??dockIconPosition(f);return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:c.map((i,p)=>(0,_jsxRuntime.jsx)(AppRenderer,{app:i,zIndex:BASE_ZINDEX+p,onClose:()=>r(i.instanceId),onMinimize:g=>l(i.instanceId,g),enableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:u},i.instanceId))})};exports.AppOverlay=AppOverlay;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useAppHost=exports.AppOverlay=exports.AppHostProvider=void 0;var _sharedUi=require("@buoy-gg/shared-ui");var _react=require("react");var _AppHostLogic=require("./AppHostLogic.js");var _AppIcon=require("./AppIcon");var _ToolHost=require("./ToolHost.js");var _DevToolsSettingsModalShared=require("./DevToolsSettingsModal.shared.js");var _floatingToolsWeb=require("./floatingTools.web.js");var _capacitorBackButton=require("./capacitorBackButton.js");var _jsxRuntime=require("react/jsx-runtime");const AppHostContext=(0,_react.createContext)(null);const STORAGE_KEY_OPEN_APPS="@react_buoy_open_apps";const ICON_SIZE=44;const ICON_GAP=12;const BOTTOM_OFFSET=100;const RIGHT_OFFSET=16;const dockIconPosition=t=>({x:window.innerWidth-ICON_SIZE-RIGHT_OFFSET,y:window.innerHeight-BOTTOM_OFFSET-ICON_SIZE-t*(ICON_SIZE+ICON_GAP)});const AppHostProvider=({children:t})=>{const[s,l]=(0,_react.useState)([]);const[a,c]=(0,_react.useState)(false);const p=(0,_react.useRef)([]);const u=(0,_react.useRef)(null);const r=(0,_react.useRef)(false);const f=(0,_react.useRef)(false);const v=(0,_react.useRef)(false);const h=(0,_react.useCallback)(n=>{let o="";l(i=>{const{apps:e,instanceId:d}=(0,_AppHostLogic.resolveOpenAppsState)(i,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=d;return e});return o},[]);const b=(0,_react.useCallback)(()=>{if(r.current||!f.current||!v.current)return;r.current=true;const n=u.current;if(!n||n.length===0){c(true);return}u.current=null;n.forEach(({id:o,minimized:i})=>{const e=p.current.find(d=>d.id===o);if(e&&e.component){const d=(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color});h({id:e.id,title:e.name,component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:d,color:e.color,minimized:i})}});c(true)},[h]);(0,_react.useEffect)(()=>{let n=false;const o=async()=>{try{const i=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);if(n)return;if(i){const e=JSON.parse(i);let d;if(Array.isArray(e)&&e.length>0){if(typeof e[0]==="string"){d=e.map(g=>({id:g,minimized:false}))}else{d=e.filter(g=>typeof g==="object"&&g!==null&&typeof g.id==="string")}if(d.length){u.current=d}}}}catch{}if(n)return;f.current=true;b()};void o();return()=>{n=true}},[b]);(0,_react.useEffect)(()=>{if(!a)return;const n=s.map(o=>({id:o.id,minimized:o.minimized??false}));void _sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS,JSON.stringify(n))},[s,a]);const A=(0,_react.useCallback)(n=>{p.current=n;v.current=true;b()},[b]);const m=(0,_react.useCallback)(n=>{l(o=>{if(!o.length)return o;if(!n)return o.slice(0,-1);return o.filter(i=>i.instanceId!==n)})},[]);const S=(0,_react.useCallback)(()=>l([]),[]);const x=(0,_react.useCallback)((n,o)=>{l(i=>i.map(e=>e.instanceId===n?{...e,minimized:true,restoreState:o}:e))},[]);const I=(0,_react.useCallback)((n,o)=>{l(i=>i.map(e=>e.instanceId===n?{...e,minimized:false,restoreState:o??e.restoreState}:e))},[]);const M=(0,_react.useCallback)(n=>{const o=s.find(i=>i.instanceId===n);return o?.minimized??false},[s]);const y=s.some(n=>n.launchMode!=="toggle-only"&&!n.minimized);(0,_react.useEffect)(()=>{if(!y)return;const n=o=>{if(o.key!=="Escape")return;if(o.defaultPrevented)return;const i=[...s].reverse().find(e=>e.launchMode!=="toggle-only"&&!e.minimized);if(i)m(i.instanceId)};window.addEventListener("keydown",n);return()=>window.removeEventListener("keydown",n)},[y,m,s]);(0,_capacitorBackButton.useCapacitorBackButton)(s.length>0,()=>m());const C=(0,_react.useMemo)(()=>({openApps:s,isAnyOpen:y,open:h,close:m,closeAll:S,registerApps:A,minimize:x,restore:I,isMinimized:M}),[s,y,h,m,S,A,x,I,M]);return(0,_jsxRuntime.jsx)(AppHostContext.Provider,{value:C,children:t})};exports.AppHostProvider=AppHostProvider;const useAppHost=()=>{const t=(0,_react.useContext)(AppHostContext);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},registerApps:()=>{},minimize:()=>{},restore:()=>{},isMinimized:()=>false}}return t};exports.useAppHost=useAppHost;const BASE_ZINDEX=9e3;const backdropStyle={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"};const cardStyle={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"};const AppRenderer=({app:t,zIndex:s,onClose:l,onMinimize:a,minimizeTargetPosition:c,enableSharedModalDimensions:p})=>{const u=t.component;const r=!t.minimized;const f={...t.props??{},...p?{enableSharedModalDimensions:true}:{}};if(t.modal&&(!t.launchMode||t.launchMode==="self-modal")){return(0,_jsxRuntime.jsx)("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:s,pointerEvents:"none"},children:(0,_jsxRuntime.jsx)(_ToolHost.ToolModalShell,{app:t,config:t.modal,visible:r,zIndex:s,onClose:l,onMinimize:a,initialModalState:t.restoreState,enableSharedModalDimensions:p,bodyProps:f})})}if(t.launchMode==="self-modal"){return(0,_jsxRuntime.jsx)("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:s,pointerEvents:"none"},children:(0,_jsxRuntime.jsx)(u,{...f,visible:r,onClose:l,onRequestClose:l,onMinimize:a,minimizeTargetPosition:c,instanceId:t.instanceId,zIndex:s,initialModalState:t.restoreState})})}if(t.launchMode==="inline"){if(!r)return null;return(0,_jsxRuntime.jsx)("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:s,pointerEvents:"none"},children:(0,_jsxRuntime.jsx)(u,{...f,onClose:l,onMinimize:a,minimizeTargetPosition:c,initialModalState:t.restoreState,instanceId:t.instanceId})})}return(0,_jsxRuntime.jsx)("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{...backdropStyle,zIndex:s,display:r?"flex":"none"},children:(0,_jsxRuntime.jsx)("div",{style:cardStyle,children:(0,_jsxRuntime.jsx)(u,{...f,onClose:l,onMinimize:a,minimizeTargetPosition:c,initialModalState:t.restoreState,instanceId:t.instanceId})})})};const AppOverlay=()=>{const{openApps:t,close:s,minimize:l}=useAppHost();const{settings:a}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();(0,_react.useEffect)(()=>{(0,_sharedUi.setExpandableWindowControls)(a.globalSettings?.expandableWindowControls!==false)},[a.globalSettings?.expandableWindowControls]);const c=t.filter(r=>r.launchMode!=="toggle-only");if(c.length===0)return null;const p=c.filter(r=>r.minimized).length;const u=(0,_floatingToolsWeb.getBubbleAnchorPosition)()??dockIconPosition(p);return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:c.map((r,f)=>(0,_jsxRuntime.jsx)(AppRenderer,{app:r,zIndex:BASE_ZINDEX+f,onClose:()=>s(r.instanceId),onMinimize:v=>l(r.instanceId,v),enableSharedModalDimensions:a.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:u},r.instanceId))})};exports.AppOverlay=AppOverlay;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BrowserToolRuntime=BrowserToolRuntime;var _react=require("react");var _license=require("@buoy-gg/license");var _sharedUi=require("@buoy-gg/shared-ui");var _externalSyncGate=require("./externalSyncGate.js");var _deviceIdentity=require("./deviceIdentity.js");var _appSyncAdapter=require("./sync/appSyncAdapter.js");var _jsxRuntime=require("react/jsx-runtime");const roots=["ConsoleRoot","RouteTracker","ReactQueryTracker","ReduxAutoInstrument","PerfMonitorRoot","AutomationResumer","ImagesRoot"];const overlays=["DebugBordersStandaloneOverlay","HighlightUpdatesOverlay","ImageOverlayStandalone","PerfMonitorOverlay","JsTopHudOverlay","ImpersonateOverlay","ScenariosOverlay"];function BrowserToolRuntime(e){const s=(0,_react.useMemo)(()=>Object.fromEntries(Object.entries(e.modules).map(([i,l])=>[i.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),l])),[e.modules]);const o=s["react-query"];return o?.useReactQuerySyncAdapter?(0,_jsxRuntime.jsx)(QueryRuntime,{...e,modules:s,query:o}):(0,_jsxRuntime.jsx)(ToolRuntime,{...e,modules:s})}function QueryRuntime(e){const s=e.query.useReactQuerySyncAdapter();return(0,_jsxRuntime.jsx)(ToolRuntime,{...e,queryAdapter:s})}function ToolRuntime({modules:e,apps:s,requiredEnvVars:o,externalSync:i,headless:l,sentryGetClient:f,queryAdapter:u}){const{isPro:c,tier:p}=(0,_license.useLicense)();const d=(0,_react.useMemo)(()=>{const n={app:_appSyncAdapter.appSyncAdapter};for(const[t,r]of Object.entries(e)){for(const[a,b]of Object.entries(r)){if(a.endsWith("SyncAdapter")&&b&&typeof b==="object")n[t]=b}}if(u)n.query=u;if(e.env?.createEnvSyncAdapter)n.env=e.env.createEnvSyncAdapter(o??[]);for(const t of s??[])if(t.sync)n[`custom:${t.id}`]=t.sync;return n},[e,s,o,u]);const y=(0,_react.useRef)(d);y.current=d;(0,_react.useEffect)(()=>(0,_sharedUi.registerToolAdapters)(()=>y.current),[]);(0,_react.useEffect)(()=>{const n=[];const t=r=>{const a=r?.();if(typeof a==="function")n.push(a)};t(e.network?.startNetworkCapture);t(e.storage?.startBrowserStorageCapture);t(e.assets?.startBrowserAssetCapture);if(e.storage?.storageSyncAdapter?.subscribe)t(()=>e.storage.storageSyncAdapter.subscribe(()=>{}));if(e["focus-inspector"]?.focusInspectorSyncAdapter?.subscribe)t(()=>e["focus-inspector"].focusInspectorSyncAdapter.subscribe(()=>{}));return()=>{for(const r of n.reverse())r()}},[e]);const g=e["external-sync"];const S=typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production";const A=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:S,isLicensed:c,externalSync:i,isAvailable:Boolean(g)});const v=(0,_externalSyncGate.externalSyncOptions)(i);if(!S&&v?.enableInRelease)warnOnce((0,_externalSyncGate.releaseTransportProblem)(v.socketURL,v));const R=e.sentry?.SentryRoot;return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[Object.entries(e).flatMap(([n,t])=>roots.map(r=>{const a=t[r];return a?(0,_jsxRuntime.jsx)(a,{},`${n}:${r}`):null})),R&&(0,_jsxRuntime.jsx)(R,{getClient:f}),Object.entries(e).flatMap(([n,t])=>overlays.map(r=>{const a=t[r];return a&&(!l||r==="ScenariosOverlay"||r==="ImpersonateOverlay")?(0,_jsxRuntime.jsx)(a,{},`${n}:${r}`):null})),A&&(0,_jsxRuntime.jsx)(BrowserExternalSync,{module:g,tools:d,options:v,isPro:c,tier:p,dev:S})]})}let warned=null;function warnOnce(e){if(!e||e===warned)return;warned=e;console.warn(e)}function BrowserExternalSync({module:e,tools:s,options:o,isPro:i,tier:l,dev:f}){const u=(0,_deviceIdentity.useDeviceIdentity)(o,{appName:typeof document==="undefined"?null:document.title||location.hostname,hardwareName:"Browser",platform:"web"});const{socket:c}=e.useExternalSyncSocket({deviceName:u?.deviceName??"Buoy Browser",socketURL:o?.socketURL??(f?e.getDefaultSocketURL():_externalSyncGate.RELEASE_DEFAULT_SOCKET_URL),persistentDeviceId:u?.deviceId??null,platform:"web",enableLogs:o?.enableLogs});(0,_react.useEffect)(()=>{if(!c)return;const y=()=>{if(c.connected&&_license.LicenseManager.hasAccountAccess())c.emit("device-license",{isPro:i?"1":"0",tier:l})};y();c.on("connect",y);return()=>{c.off("connect",y)}},[c,i,l]);const p=o?.releaseActions?.join(",")??"";const d=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(s,f,p?p.split(","):void 0),[s,f,p]);e.useExternalSync({tools:d,socket:c,deviceId:u?.deviceId??null,enableLogs:o?.enableLogs});return null}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BrowserToolRuntime=BrowserToolRuntime;var _react=require("react");var _license=require("@buoy-gg/license");var _sharedUi=require("@buoy-gg/shared-ui");var _externalSyncGate=require("./externalSyncGate.js");var _deviceIdentity=require("./deviceIdentity.js");var _capacitorHostInfo=require("./capacitorHostInfo.js");var _appSyncAdapter=require("./sync/appSyncAdapter.js");var _jsxRuntime=require("react/jsx-runtime");const roots=["ConsoleRoot","RouteTracker","ReactQueryTracker","ReduxAutoInstrument","PerfMonitorRoot","AutomationResumer","ImagesRoot"];const overlays=["DebugBordersStandaloneOverlay","HighlightUpdatesOverlay","ImageOverlayStandalone","PerfMonitorOverlay","JsTopHudOverlay","ImpersonateOverlay","ScenariosOverlay"];function BrowserToolRuntime(e){const a=(0,_react.useMemo)(()=>Object.fromEntries(Object.entries(e.modules).map(([l,f])=>[l.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),f])),[e.modules]);const o=a["react-query"];return o?.useReactQuerySyncAdapter?(0,_jsxRuntime.jsx)(QueryRuntime,{...e,modules:a,query:o}):(0,_jsxRuntime.jsx)(ToolRuntime,{...e,modules:a})}function QueryRuntime(e){const a=e.query.useReactQuerySyncAdapter();return(0,_jsxRuntime.jsx)(ToolRuntime,{...e,queryAdapter:a})}function ToolRuntime({modules:e,apps:a,requiredEnvVars:o,externalSync:l,headless:f,sentryGetClient:p,queryAdapter:r}){const{isPro:y,tier:v}=(0,_license.useLicense)();const n=(0,_react.useMemo)(()=>{const c={app:_appSyncAdapter.appSyncAdapter};for(const[t,s]of Object.entries(e)){for(const[u,b]of Object.entries(s)){if(u.endsWith("SyncAdapter")&&b&&typeof b==="object")c[t]=b}}if(r)c.query=r;if(e.env?.createEnvSyncAdapter)c.env=e.env.createEnvSyncAdapter(o??[]);for(const t of a??[])if(t.sync)c[`custom:${t.id}`]=t.sync;return c},[e,a,o,r]);const d=(0,_react.useRef)(n);d.current=n;(0,_react.useEffect)(()=>(0,_sharedUi.registerToolAdapters)(()=>d.current),[]);(0,_react.useEffect)(()=>{const c=[];const t=s=>{const u=s?.();if(typeof u==="function")c.push(u)};t(e.network?.startNetworkCapture);t(e.storage?.startBrowserStorageCapture);t(e.assets?.startBrowserAssetCapture);if((0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production")){t(e["time-machine"]?.startTimeMachineFloatingToolPersistence)}if(e.storage?.storageSyncAdapter?.subscribe)t(()=>e.storage.storageSyncAdapter.subscribe(()=>{}));if(e["focus-inspector"]?.focusInspectorSyncAdapter?.subscribe)t(()=>e["focus-inspector"].focusInspectorSyncAdapter.subscribe(()=>{}));return()=>{for(const s of c.reverse())s()}},[e]);const R=e["external-sync"];const i=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const S=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:i,isLicensed:y,externalSync:l,isAvailable:Boolean(R)});const _=(0,_externalSyncGate.externalSyncOptions)(l);(0,_license.installCapacitorBridge)({release:!i&&Boolean(_?.enableInRelease)});if(!i&&_?.enableInRelease)warnOnce((0,_externalSyncGate.releaseTransportProblem)(_.socketURL,_));const g=e.sentry?.SentryRoot;return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[Object.entries(e).flatMap(([c,t])=>roots.map(s=>{const u=t[s];return u?(0,_jsxRuntime.jsx)(u,{},`${c}:${s}`):null})),g&&(0,_jsxRuntime.jsx)(g,{getClient:p}),Object.entries(e).flatMap(([c,t])=>overlays.map(s=>{const u=t[s];return u&&(!f||s==="ScenariosOverlay"||s==="ImpersonateOverlay")?(0,_jsxRuntime.jsx)(u,{},`${c}:${s}`):null})),S&&(0,_jsxRuntime.jsx)(BrowserExternalSync,{module:R,tools:n,options:_,isPro:y,tier:v,dev:i})]})}let warned=null;function warnOnce(e){if(!e||e===warned)return;warned=e;console.warn(e)}function BrowserExternalSync({module:e,tools:a,options:o,isPro:l,tier:f,dev:p}){const r=(0,_capacitorHostInfo.useHostInfo)();const y=(0,_deviceIdentity.useDeviceIdentity)(o,{appName:r.appName,hardwareName:r.hardwareName,platform:r.platform});const v=(0,_react.useMemo)(()=>(0,_capacitorHostInfo.capacitorBrokerURL)(o?.socketURL??(p?e.getDefaultSocketURL():_externalSyncGate.RELEASE_DEFAULT_SOCKET_URL),Boolean(o?.socketURL),r.platform),[o?.socketURL,p,e,r.platform]);const{socket:n}=e.useExternalSyncSocket({deviceName:y?.deviceName??"Buoy Browser",socketURL:v,persistentDeviceId:r.ready?y?.deviceId??null:null,platform:r.platform,extraDeviceInfo:r.extraDeviceInfo,enableLogs:o?.enableLogs});(0,_react.useEffect)(()=>{const i=(0,_capacitorHostInfo.capacitorTransportProblem)(v,r.platform);if(!n||!i)return;const S=()=>warnOnce(i);n.on("connect_error",S);return()=>{n.off("connect_error",S)}},[n,v,r.platform]);(0,_react.useEffect)(()=>{if(!n)return;const i=()=>{if(n.connected&&_license.LicenseManager.hasAccountAccess())n.emit("device-license",{isPro:l?"1":"0",tier:f})};i();n.on("connect",i);return()=>{n.off("connect",i)}},[n,l,f]);const d=o?.releaseActions?.join(",")??"";const R=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(a,p,d?d.split(","):void 0),[a,p,d]);e.useExternalSync({tools:R,socket:n,deviceId:r.ready?y?.deviceId??null:null,enableLogs:o?.enableLogs});return null}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BuoySignIn=BuoySignIn;var _react=require("react");var _reactNative=require("react-native");var license=_interopRequireWildcard(require("@buoy-gg/license"));var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(r,t){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(e,a){if(!a&&e&&e.__esModule)return e;var i,s,c={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return c;if(i=a?o:n){if(i.has(e))return i.get(e);i.set(e,c)}for(const l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((s=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(s.get||s.set)?i(c,l,s):c[l]=e[l]);return c})(r,t)}function getSession(){try{return license.SessionManager}catch{return void 0}}const shortUrl=r=>r.replace(/^https?:\/\//,"");function useSessionState(){const[r,t]=(0,_react.useState)(()=>getSession()?.getStatus().state??"signed_out");(0,_react.useEffect)(()=>{const n=getSession();if(!n)return;const o=()=>t(n.getStatus().state);o();return n.subscribe(o)},[]);return r}function BuoySignIn({needsPlan:r=false}){const[t,n]=(0,_react.useState)(false);const o=useSessionState();return(0,_jsxRuntime.jsxs)(_reactNative.View,{pointerEvents:"box-none",style:styles.root,children:[(0,_jsxRuntime.jsx)(_sharedUi.AccountSetupButton,{expanded:t,onPress:()=>n(true)}),t?(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:true,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.overlay,accessibilityViewIsModal:true,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:()=>n(false),accessible:false}),r&&o==="active"?(0,_jsxRuntime.jsx)(NeedsPlanCard,{onClose:()=>n(false)}):(0,_jsxRuntime.jsx)(CodeCard,{onClose:()=>n(false)})]})}):null]})}function Header({onClose:r}){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.header,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.brand,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.brandDot}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.wordmark,children:"BUOY"})]}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:"Close sign-in",onPress:r,style:styles.close,testID:"buoy-signin-close",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.closeText,children:"\u2715"})})]})}function CodeCard({onClose:r}){const[t,n]=(0,_react.useState)({kind:"starting"});const o=(0,_react.useRef)(null);const e=(0,_react.useCallback)(()=>{o.current?.abort();const a=getSession();if(!a?.signInWithCode){n({kind:"error",message:"This version of @buoy-gg/license can't sign in with a code. Update it."});return}const i=new AbortController;o.current=i;n({kind:"starting"});a.signInWithCode(s=>n({kind:"waiting",prompt:s}),{signal:i.signal}).then(()=>{if(!i.signal.aborted)r()}).catch(s=>{if(i.signal.aborted)return;n({kind:"error",message:s instanceof Error?s.message:"Sign-in did not work. Try again."})})},[r]);(0,_react.useEffect)(()=>{e();return()=>o.current?.abort()},[e]);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.card,testID:"buoy-code-signin",children:[(0,_jsxRuntime.jsx)(Header,{onClose:r}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Sign in to Buoy"}),t.kind==="starting"?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.center,children:(0,_jsxRuntime.jsx)(_reactNative.ActivityIndicator,{color:_sharedUi.night.color.accent})}):null,t.kind==="waiting"?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.body,children:"Scan this with your phone's camera."}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.qr,testID:"buoy-signin-qr",children:(0,_jsxRuntime.jsx)(_sharedUi.QrCodeView,{value:t.prompt.verificationUriComplete,size:196})}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.body,children:["Or go to ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.strong,children:shortUrl(t.prompt.verificationUri)})," and type:"]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,selectable:true,testID:"buoy-signin-code",children:t.prompt.userCode}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.waiting,children:[(0,_jsxRuntime.jsx)(_reactNative.ActivityIndicator,{size:"small",color:_sharedUi.night.color.textSecondary}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.muted,children:"Waiting for you to allow it\u2026"})]})]}):null,t.kind==="error"?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.body,testID:"buoy-signin-error",children:t.message}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",onPress:e,style:({pressed:a})=>[styles.primary,a&&styles.primaryPressed],testID:"buoy-signin-retry",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.primaryText,children:"Get a new code"})})]}):null]})}function NeedsPlanCard({onClose:r}){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.card,testID:"buoy-signin-needs-plan",children:[(0,_jsxRuntime.jsx)(Header,{onClose:r}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"You're signed in"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.body,children:"Buoy in this build needs a Pro or Business plan."}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",onPress:()=>void getSession()?.signOut(),style:({pressed:t})=>[styles.primary,t&&styles.primaryPressed],testID:"buoy-signout",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.primaryText,children:"Sign out"})})]})}const styles=_reactNative.StyleSheet.create({root:{position:"absolute",bottom:30,right:16,zIndex:99999},overlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.65)",alignItems:"center",justifyContent:"center",padding:20},card:{width:"100%",maxWidth:368,backgroundColor:"#111315",borderColor:"#303437",borderWidth:1,borderRadius:20,paddingHorizontal:24,paddingTop:18,paddingBottom:24},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:16},brand:{flexDirection:"row",alignItems:"center",gap:8},brandDot:{width:6,height:6,borderRadius:3,backgroundColor:_sharedUi.night.color.accent},wordmark:{color:_sharedUi.night.color.text,fontSize:11,fontWeight:"800",letterSpacing:1.4,lineHeight:16},close:{width:28,height:28,borderRadius:8,alignItems:"center",justifyContent:"center"},closeText:{color:_sharedUi.night.color.textSecondary,fontSize:14},title:{color:_sharedUi.night.color.text,fontSize:20,fontWeight:"700",marginBottom:8},body:{color:_sharedUi.night.color.textSecondary,fontSize:14,lineHeight:20,marginTop:8},strong:{color:_sharedUi.night.color.text,fontWeight:"600"},muted:{color:_sharedUi.night.color.textSecondary,fontSize:13},center:{paddingVertical:32,alignItems:"center"},qr:{alignSelf:"center",marginTop:16,marginBottom:8,borderRadius:12,overflow:"hidden"},code:{color:_sharedUi.night.color.text,fontFamily:_sharedUi.monoFont,fontSize:30,fontWeight:"700",letterSpacing:4,textAlign:"center",marginTop:12},waiting:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:8,marginTop:16},primary:{marginTop:20,minHeight:44,borderRadius:12,backgroundColor:_sharedUi.night.color.accent,alignItems:"center",justifyContent:"center"},primaryPressed:{backgroundColor:_sharedUi.night.color.accentPressed},primaryText:{color:_sharedUi.night.color.onAccent,fontSize:15,fontWeight:"600"}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BuoySignIn=BuoySignIn;var _react=require("react");var _reactNative=require("react-native");var license=_interopRequireWildcard(require("@buoy-gg/license"));var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(r,t){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(e,a){if(!a&&e&&e.__esModule)return e;var i,s,c={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return c;if(i=a?o:n){if(i.has(e))return i.get(e);i.set(e,c)}for(const l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((s=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(s.get||s.set)?i(c,l,s):c[l]=e[l]);return c})(r,t)}function getSession(){try{return license.SessionManager}catch{return void 0}}const shortUrl=r=>r.replace(/^https?:\/\//,"");function useSessionState(){const[r,t]=(0,_react.useState)(()=>getSession()?.getStatus().state??"signed_out");(0,_react.useEffect)(()=>{const n=getSession();if(!n)return;const o=()=>t(n.getStatus().state);o();return n.subscribe(o)},[]);return r}function BuoySignIn({needsPlan:r=false}){const[t,n]=(0,_react.useState)(false);const o=useSessionState();return(0,_jsxRuntime.jsxs)(_reactNative.View,{pointerEvents:"box-none",style:styles.root,children:[(0,_jsxRuntime.jsx)(_sharedUi.AccountSetupButton,{expanded:t,onPress:()=>n(true)}),t?(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:true,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.overlay,accessibilityViewIsModal:true,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:()=>n(false),accessible:false}),r&&o==="active"?(0,_jsxRuntime.jsx)(NeedsPlanCard,{onClose:()=>n(false)}):(0,_jsxRuntime.jsx)(CodeCard,{onClose:()=>n(false)})]})}):null]})}function Header({onClose:r}){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.header,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.brand,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.brandDot}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.wordmark,children:"BUOY"})]}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:"Close sign-in",onPress:r,style:styles.close,testID:"buoy-signin-close",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.closeText,children:"\u2715"})})]})}function CodeCard({onClose:r}){const[t,n]=(0,_react.useState)({kind:"starting"});const o=(0,_react.useRef)(null);const e=(0,_react.useCallback)(()=>{o.current?.abort();const a=getSession();if(!a?.signInWithCode){n({kind:"error",message:"This version of @buoy-gg/license can't sign in with a code. Update it."});return}const i=new AbortController;o.current=i;n({kind:"starting"});a.signInWithCode(s=>n({kind:"waiting",prompt:s}),{signal:i.signal}).then(()=>{if(!i.signal.aborted)r()}).catch(s=>{if(i.signal.aborted)return;n({kind:"error",message:s instanceof Error?s.message:"Sign-in did not work. Try again."})})},[r]);(0,_react.useEffect)(()=>{e();return()=>o.current?.abort()},[e]);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.card,testID:"buoy-code-signin",children:[(0,_jsxRuntime.jsx)(Header,{onClose:r}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Sign in to Buoy"}),t.kind==="starting"?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.center,children:(0,_jsxRuntime.jsx)(_reactNative.ActivityIndicator,{color:_sharedUi.night.color.accent})}):null,t.kind==="waiting"?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.body,children:"Scan this with your phone's camera."}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.qr,testID:"buoy-signin-qr",children:(0,_jsxRuntime.jsx)(_sharedUi.QrCodeView,{value:t.prompt.verificationUriComplete,size:196})}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.body,children:["Or go to ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.strong,children:shortUrl(t.prompt.verificationUri)})," and type:"]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,selectable:true,testID:"buoy-signin-code",children:t.prompt.userCode}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.waiting,children:[(0,_jsxRuntime.jsx)(_reactNative.ActivityIndicator,{size:"small",color:_sharedUi.night.color.textSecondary}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.muted,children:"Waiting for you to allow it\u2026"})]})]}):null,t.kind==="error"?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.body,testID:"buoy-signin-error",children:t.message}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",onPress:e,style:({pressed:a})=>[styles.primary,a&&styles.primaryPressed],testID:"buoy-signin-retry",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.primaryText,children:"Get a new code"})})]}):null]})}function NeedsPlanCard({onClose:r}){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.card,testID:"buoy-signin-needs-plan",children:[(0,_jsxRuntime.jsx)(Header,{onClose:r}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"You're signed in"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.body,children:"Buoy in this build needs a Pro or Business plan."}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",onPress:()=>void getSession()?.signOut(),style:({pressed:t})=>[styles.primary,t&&styles.primaryPressed],testID:"buoy-signout",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.primaryText,children:"Sign out"})})]})}const styles=_reactNative.StyleSheet.create({root:{position:"absolute",bottom:30,right:16,zIndex:99999},overlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.65)",alignItems:"center",justifyContent:"center",padding:20},card:{width:"100%",maxWidth:368,backgroundColor:"#111315",borderColor:"#303437",borderWidth:1,borderRadius:20,paddingHorizontal:24,paddingTop:18,paddingBottom:24},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:16},brand:{flexDirection:"row",alignItems:"center",gap:8},brandDot:{width:6,height:6,borderRadius:3,backgroundColor:_sharedUi.night.color.accent},wordmark:{color:_sharedUi.night.color.text,fontSize:11,fontWeight:"800",letterSpacing:1.4,lineHeight:16},close:{width:28,height:28,borderRadius:8,alignItems:"center",justifyContent:"center"},closeText:{color:_sharedUi.night.color.textSecondary,fontSize:14},title:{color:_sharedUi.night.color.text,fontSize:20,fontWeight:"700",marginBottom:8},body:{color:_sharedUi.night.color.textSecondary,fontSize:14,lineHeight:20,marginTop:8},strong:{color:_sharedUi.night.color.text,fontWeight:"600"},muted:{color:_sharedUi.night.color.textSecondary,fontSize:13},center:{paddingVertical:32,alignItems:"center"},qr:{alignSelf:"center",marginTop:16,marginBottom:8,borderRadius:12,overflow:"hidden"},code:{color:_sharedUi.night.color.text,fontFamily:_sharedUi.monoFont,fontSize:30,fontWeight:"700",letterSpacing:4,textAlign:"center",marginTop:12},waiting:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:8,marginTop:16},primary:{marginTop:20,minHeight:44,borderRadius:12,backgroundColor:_sharedUi.night.color.accent,alignItems:"center",justifyContent:"center"},primaryPressed:{backgroundColor:_sharedUi.night.color.accentPressed},primaryText:{color:_sharedUi.night.color.onAccent,fontSize:15,fontWeight:"600"}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"BuoySignIn",{enumerable:true,get:function(){return _BuoyCodeSignIn.BuoySignIn}});var _BuoyCodeSignIn=require("./BuoyCodeSignIn.js");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useDevToolsSettings=exports.DevToolsSettingsModal=void 0;var _react=require("react");var _reactNative=require("react-native");var _settingsBus=require("./settingsBus.js");var _useDesktopSyncStatus=require("./useDesktopSyncStatus");var _sharedUi=require("@buoy-gg/shared-ui");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _DefaultConfigContext=require("./DefaultConfigContext.js");var _AppIcon=require("./AppIcon");var _jsxRuntime=require("react/jsx-runtime");const STORAGE_KEY="@react_buoy_dev_tools_settings";const MAX_DIAL_SLOTS=6;const enforceDialLimit=r=>{let a=MAX_DIAL_SLOTS;const n={};for(const[c,s]of Object.entries(r)){if(s&&a>0){n[c]=true;a-=1}else{n[c]=false}}return n};const sanitizeFloating=(r,a)=>{const{userStatus:n,environment:c,...s}=r;const l=a?Object.entries(s).filter(([d])=>a.includes(d)):Object.entries(s);return{...Object.fromEntries(l),environment:c??false}};const mergeWithDefaults=(r,a,n)=>{if(!a)return r;const c={...r.dialTools,...a.dialTools??{}};const s=n?.allowedDialKeys?Object.entries(c).filter(([d])=>n.allowedDialKeys?.includes(d)):Object.entries(c);const l=enforceDialLimit(Object.fromEntries(s));return{dialTools:l,floatingTools:sanitizeFloating({...r.floatingTools,...a.floatingTools??{}},n?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true,...a.globalSettings??{}}}};const generateDefaultSettings=(r=[],a,n)=>{const c={};const s={};const l=new Set(a??[]);const d=new Set(n??[]);const g=!n||n.length===0;for(const x of r){const{id:i,slot:S="both"}=x;if(S==="dial"||S==="both"){c[i]=g?true:d.has(i)}if(S==="row"||S==="both"){s[i]=l.has(i)}}return{dialTools:enforceDialLimit(c),floatingTools:{...s,environment:l.has("environment")},globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true}}};const DevToolsSettingsModal=({visible:r,onClose:a,onSettingsChange:n,initialSettings:c,availableApps:s=[],storage:l=_sharedUi.persistentStorage,zIndex:d})=>{const{defaultFloatingTools:g,defaultDialTools:x}=(0,_DefaultConfigContext.useDefaultConfig)();const i=(0,_react.useMemo)(()=>generateDefaultSettings(s,g,x),[s,g,x]);const S=(0,_react.useMemo)(()=>Object.keys(i.dialTools),[i]);const R=(0,_react.useMemo)(()=>Object.keys(i.floatingTools).filter(e=>e!=="environment"),[i]);const[f,b]=(0,_react.useState)(c||cachedSettings||i);const[w,F]=(0,_react.useState)(cachedActiveTab??"floating");const[N,G]=(0,_react.useState)(cachedActiveTab!==null);const[C,Y]=(0,_react.useState)(new Set);const[$,I]=(0,_react.useState)(false);const[Q,X]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{const e=requestAnimationFrame(()=>X(true));return()=>cancelAnimationFrame(e)},[]);const h=(0,_useDesktopSyncStatus.useDesktopSyncStatus)();(0,_react.useEffect)(()=>{const e=async()=>{try{const t=await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.activeTab());if(t&&["floating","settings","pro"].includes(t)){const o=t;cachedActiveTab=o;F(y=>y===o?y:o)}}catch(t){}finally{G(true)}};e()},[]);(0,_react.useEffect)(()=>{if(!N)return;_sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.activeTab(),w).catch(e=>{console.warn("Failed to save settings active tab:",e)})},[w,N]);const Z=(0,_sharedUi.getUseLicense)();const m=Z?.();const j=m?.isPro??false;const z=!j&&m?.licenseKey?m.error:null;const ee=m?.errorKind==="transport";const[u,te]=(0,_react.useState)(cachedStorageBackend);const[B,O]=(0,_react.useState)(false);const[D,L]=(0,_react.useState)(false);const[T,oe]=(0,_react.useState)(false);const[E,k]=(0,_react.useState)([]);const[V,P]=(0,_react.useState)(false);const M=(0,_sharedUi.useSafeAreaInsets)();const H=_reactNative.Dimensions.get("window").height;const K=_reactNative.Dimensions.get("window").width;const ne=Math.floor(H*.33);const se=Math.min(K-32,400);const _=(0,_react.useCallback)(async()=>{try{const e=await l.getItem(STORAGE_KEY);if(e){const t=JSON.parse(e);const o=mergeWithDefaults(i,t,{allowedDialKeys:S,allowedFloatingKeys:R});cachedSettings=o;b(y=>sameSettings(y,o)?y:o);return}cachedSettings=i;b(t=>sameSettings(t,i)?t:i)}catch(e){console.error("Failed to load dev tools settings:",e);b(i)}},[i,S,R,l]);(0,_react.useEffect)(()=>{_()},[_]);(0,_react.useEffect)(()=>{(0,_sharedUi.getStorageBackendType)().then(e=>{cachedStorageBackend=e;te(t=>t===e?t:e)})},[]);(0,_react.useEffect)(()=>{if(T){P(true);_sharedUi.persistentStorage.getAllKeys().then(e=>{k(e.sort())}).catch(()=>{k([])}).finally(()=>{P(false)})}},[T]);const A=async e=>{try{const t={...e,dialTools:enforceDialLimit(e.dialTools)};await l.setItem(STORAGE_KEY,JSON.stringify(t));cachedSettings=t;b(t);n?.(t);_settingsBus.settingsBus.emit(t)}catch(t){console.error("Failed to save dev tools settings:",t)}};const ie=e=>{const t={...f,floatingTools:{...f.floatingTools,[e]:!f.floatingTools[e]}};A(t)};const re=e=>{const t={...f,globalSettings:{...f.globalSettings,[e]:!f.globalSettings?.[e]}};A(t)};const ae=async()=>{O(true);L(false);try{await _sharedUi.persistentStorage.clear();L(true);b(i);if(l!==_sharedUi.persistentStorage)await l.setItem(STORAGE_KEY,JSON.stringify(i));n?.(i);_settingsBus.settingsBus.emit(i);setTimeout(()=>L(false),2e3)}catch(e){console.error("Failed to clear storage:",e)}finally{O(false)}};const le=(0,_react.useCallback)(e=>{},[]);const ce=e=>{const t=s.find(o=>o.id===e);if(t?.description){return t.description}if(e==="environment"){return"Environment badge."}return""};const W=e=>{if(e==="environment"){return"Env Badge"}const t=s.find(o=>o.id===e);return t?.name??e.toUpperCase().replace(/_/g," ")};const de=e=>{if(!Q)return null;switch(e){case"query":return(0,_jsxRuntime.jsx)(_floatingToolsCore.QueryIcon,{size:18});case"env":return(0,_jsxRuntime.jsx)(_floatingToolsCore.EnvIcon,{size:18});case"sentry":return(0,_jsxRuntime.jsx)(_sharedUi.SentryIcon,{size:18,color:"#9945FF"});case"storage":return(0,_jsxRuntime.jsx)(_floatingToolsCore.StorageIcon,{size:18,bgColor:_sharedUi.night.color.surface});case"wifi":case"query-wifi-toggle":return(0,_jsxRuntime.jsx)(_sharedUi.WifiCircuitIcon,{size:18,colorPreset:"green",strength:4,noBackground:true});case"route-events":return(0,_jsxRuntime.jsx)(_floatingToolsCore.RoutesIcon,{size:18,bgColor:_sharedUi.night.color.surface});case"network":return(0,_jsxRuntime.jsx)(_floatingToolsCore.NetworkIcon,{size:18});case"environment":return(0,_jsxRuntime.jsx)(_floatingToolsCore.EnvIcon,{size:18});case"debug-borders":return(0,_jsxRuntime.jsx)(_sharedUi.Layers,{size:18,color:_sharedUi.night.color.accent});case"highlight-updates":return(0,_jsxRuntime.jsx)(_sharedUi.RenderCountIcon,{size:18,color:_sharedUi.night.color.accent});case"highlight-updates-modal":return(0,_jsxRuntime.jsx)(_floatingToolsCore.HighlighterIcon,{size:18});case"redux":return(0,_jsxRuntime.jsx)(_floatingToolsCore.ReduxIcon,{size:18});case"image-overlay":return(0,_jsxRuntime.jsx)(_sharedUi.ImageOverlayIcon,{size:18});case"events":return(0,_jsxRuntime.jsx)(_floatingToolsCore.EventsIcon,{size:18});case"zustand":try{const{ZustandIcon:t}=require("@buoy-gg/zustand");return(0,_jsxRuntime.jsx)(t,{size:18})}catch{return(0,_jsxRuntime.jsx)(_sharedUi.Info,{size:18,color:_sharedUi.night.color.textSecondary})}case"jotai":try{const{JotaiIcon:t}=require("@buoy-gg/jotai");return(0,_jsxRuntime.jsx)(t,{size:18})}catch{return(0,_jsxRuntime.jsx)(_sharedUi.Info,{size:18,color:_sharedUi.night.color.textSecondary})}default:{const t=s.find(o=>o.id===e);if(t?.icon!=null){return(0,_AppIcon.renderAppIcon)(t.icon,{slot:"row",size:18,color:t.color})}return(0,_jsxRuntime.jsx)(_sharedUi.Info,{size:18,color:_sharedUi.night.color.textSecondary})}}};const ge=(e,t,o,y)=>{const v=ce(e);return(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:o?1:.7,onPress:()=>!o&&y(),accessibilityLabel:W(e),accessibilityRole:"button",style:[styles.toolRow,o&&styles.rowDisabled],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.toolIconSlot,children:de(e)}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.rowInfo,children:[(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.rowLabel,children:[W(e),o?" \xB7 max 6":""]}),v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowCaption,numberOfLines:1,children:v}):null]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSwitch,{value:t,disabled:o,onValueChange:()=>y()})]},e)};const q=e=>{Y(t=>{const o=new Set(t);if(o.has(e)){o.delete(e)}else{o.add(e)}return o})};const J=(e,t,o,y,v)=>{const ye=f.globalSettings?.[e]??false;const U=C.has(e);return(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:.7,onPress:()=>q(e),accessibilityLabel:t,style:styles.settingRow,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.rowInfo,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:t}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowCaption,numberOfLines:U?0:1,children:o})]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSwitch,{value:ye,onValueChange:()=>re(e)})]}),U&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRowBody,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingRowBodyText,children:y}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingRowBodyHint,children:v})]})]},e)};const p=(e,t,o)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{children:e}),t,o]});const he=u==="filesystem"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"File System",tone:"accent"}):u==="asyncstorage"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Async Storage",tone:"warning"}):u==="localstorage"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Local Storage",tone:"accent"}):u==="memory"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Memory",tone:"danger"}):(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Loading\u2026",tone:"neutral"});const ue=()=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.container,children:[(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.scrollContent,showsVerticalScrollIndicator:false,contentContainerStyle:styles.scrollContainer,children:[w==="floating"&&(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:p("Floating Tools",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,children:(0,_jsxRuntime.jsx)(_sharedUi.NightRows,{children:Object.entries(f.floatingTools).map(([e,t])=>ge(e,t,false,()=>ie(e)))})}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{children:"Tools switched on here appear in the floating bubble row."}))}),w==="settings"&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[p("Background",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,padded:true,children:(0,_jsxRuntime.jsx)(_sharedUi.BackgroundSwitcher,{embedded:true})})),p("Storage",(0,_jsxRuntime.jsxs)(_sharedUi.NightCard,{glass:true,children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:.7,onPress:()=>oe(!T),accessibilityLabel:"Storage Type",style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"Storage Type"})}),he,T?(0,_jsxRuntime.jsx)(_sharedUi.ChevronDown,{size:16,color:_sharedUi.night.color.textTertiary}):(0,_jsxRuntime.jsx)(_sharedUi.ChevronRightIcon,{size:16,color:_sharedUi.night.color.textTertiary})]}),T&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRowBody,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingRowBodyText,children:u==="filesystem"?"Settings persist independently and survive AsyncStorage.clear() calls during logout.":u==="asyncstorage"?"Settings may be lost if AsyncStorage is cleared during logout.":u==="localstorage"?"Settings are saved in this browser. Clearing site data removes them.":u==="memory"?"Settings are stored in memory only and will be lost on app restart.":"Checking storage backend\u2026"}),u==="asyncstorage"&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingRowBodyText,styles.bodyWarning],children:"Install expo-file-system to persist settings through logout flows."}),u==="memory"&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingRowBodyText,styles.bodyDanger],children:"No persistent storage available \u2014 install expo-file-system (best) or @react-native-async-storage/async-storage."})]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSeparator,{}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.storageExpanded,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.storageExpandedHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageExpandedTitle,children:"SAVED SETTINGS"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageExpandedCount,children:V?"\u2026":`${E.length} keys`})]}),V?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageKeyEmpty,children:"Loading\u2026"}):E.length===0?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageKeyEmpty,children:"No settings saved yet"}):(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:styles.storageKeysList,nestedScrollEnabled:true,showsVerticalScrollIndicator:true,children:E.map(e=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.storageKeyItem,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageKeyText,numberOfLines:1,children:e.replace("@react_buoy_","")})},e))})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.cardButtonWrap,children:(0,_jsxRuntime.jsx)(_sharedUi.NightButton,{label:D?"Cleared":B?"Clearing\u2026":"Clear All Settings",variant:D?"secondary":"destructive",size:"md",disabled:B,onPress:ae,icon:D?(0,_jsxRuntime.jsx)(_sharedUi.CheckCircle2,{size:15,color:_sharedUi.night.color.accent}):(0,_jsxRuntime.jsx)(_sharedUi.Trash2,{size:15,color:B?_sharedUi.night.color.textTertiary:_sharedUi.night.color.danger})})})]})]})),h&&h.state!=="idle"&&p("Desktop Sync",(0,_jsxRuntime.jsxs)(_sharedUi.NightCard,{glass:true,children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:.7,onPress:()=>q("desktopSync"),accessibilityLabel:"Buoy Desktop",style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"Buoy Desktop"})}),h.state==="connected"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Connected",tone:"accent"}):h.state==="connecting"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Connecting\u2026",tone:"neutral"}):(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Retrying",tone:"warning"}),C.has("desktopSync")?(0,_jsxRuntime.jsx)(_sharedUi.ChevronDown,{size:16,color:_sharedUi.night.color.textTertiary}):(0,_jsxRuntime.jsx)(_sharedUi.ChevronRightIcon,{size:16,color:_sharedUi.night.color.textTertiary})]}),C.has("desktopSync")&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRowBody,children:[(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingRowBodyText,children:[h.state==="connected"?"Streaming tool data to Buoy Desktop at ":"Trying to reach Buoy Desktop at ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.footnoteMono,children:h.targetURL??"(unknown URL)"}),h.state!=="connected"&&" \u2014 is the desktop app running? Override with the externalSync socketURL option if it runs elsewhere."]}),h.state==="retrying"&&h.lastError&&(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[styles.settingRowBodyText,styles.bodyWarning],children:["Last error: ",h.lastError]})]})]})),p("Modal Behavior",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,children:(0,_jsxRuntime.jsxs)(_sharedUi.NightRows,{children:[J("enableSharedModalDimensions","Shared Modal Size","Sync dimensions across all tools","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.","Keep OFF for the best experience. This allows you to customize each tool's modal size separately."),_reactNative.Platform.OS!=="web"?J("expandableWindowControls","Expand Controls","iPad-style expandable window buttons","When enabled, the window control buttons (minimize, toggle mode, close) start as small dots and expand into larger, easy-to-tap buttons when pressed. When disabled, buttons are directly tappable at their small size.","Keep ON for touch devices where the small buttons are hard to press. Turn OFF if you prefer direct single-tap access."):null]})}))]}),w==="pro"&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[p("License",(0,_jsxRuntime.jsxs)(_sharedUi.NightCard,{glass:true,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"License Status"})}),(0,_jsxRuntime.jsx)(_reactNative.View,{testID:"buoy-settings-license-status",accessibilityLabel:j?"License: Active":"License: Free",children:j?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Active",tone:"accent"}):(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Free",tone:"neutral"})})]}),m?.tierSource==="session"?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"Signed in with Buoy"})}),(0,_jsxRuntime.jsx)(_sharedUi.NightButton,{label:"Sign out",variant:"secondary",size:"md",onPress:()=>void(0,_sharedUi.signOutOfBuoy)(),testID:"buoy-settings-signout"})]}):null]}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{children:j?"You have full access to all Buoy DevTools features.":z?ee?`Couldn't reach the license server (${z}). A VPN or corporate proxy can block buoy.gg \u2014 turn it off and reload. Your key hasn't been rejected.`:`License check failed: ${z}.`:"Upgrade to Pro to unlock all features and support development."})),!j&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[p("Pro Features",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,children:(0,_jsxRuntime.jsx)(_sharedUi.NightRows,{children:["Advanced Settings","Priority Support"].map(e=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.featureRow,children:[(0,_jsxRuntime.jsx)(_sharedUi.CheckCircle2,{size:16,color:_sharedUi.night.color.accent}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:e})]},e))})})),(0,_jsxRuntime.jsx)(_sharedUi.NightButton,{label:"Upgrade to Pro",variant:"primary",size:"lg",onPress:()=>I(true)})]})]})]}),(0,_jsxRuntime.jsx)(_sharedUi.LicenseEntryModal,{visible:$,onClose:()=>I(false),onSuccess:()=>I(false)})]});return(0,_jsxRuntime.jsx)(_sharedUi.JsModal,{visible:r,onClose:a,zIndex:d,variant:"night",header:{showToggleButton:false,customContent:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.headerRow,children:(0,_jsxRuntime.jsx)(_sharedUi.NightSegmented,{glass:true,tabs:[{key:"floating",label:"Floating"},{key:"settings",label:"Settings"},{key:"pro",label:"Pro"}],activeKey:w,onChange:e=>F(e)})})},initialMode:"bottomSheet",onModeChange:le,persistenceKey:_sharedUi.devToolsStorageKeys.settings.root(),enablePersistence:true,maxHeight:H-M.top,initialHeight:ne,initialFloatingPosition:{x:(K-se)/2,y:M.top+20},enableGlitchEffects:true,children:ue()})};exports.DevToolsSettingsModal=DevToolsSettingsModal;const basicDefaultSettings={dialTools:{},floatingTools:{environment:false},globalSettings:{enableSharedModalDimensions:false}};const createDefaultsFromConfig=(r,a)=>{const n=new Set(r??[]);const c=new Set(a??[]);const s={};for(const d of c){s[d]=true}const l={environment:n.has("environment")};for(const d of n){if(d!=="environment"){l[d]=true}}return{dialTools:enforceDialLimit(s),floatingTools:l,globalSettings:{enableSharedModalDimensions:false}}};let cachedSettings=null;let cachedActiveTab=null;let cachedStorageBackend=null;const sameSettings=(r,a)=>JSON.stringify(r)===JSON.stringify(a);_settingsBus.settingsBus.addListener(r=>{if(r)cachedSettings=r});const useDevToolsSettings=()=>{const{defaultFloatingTools:r,defaultDialTools:a}=(0,_DefaultConfigContext.useDefaultConfig)();const n=(0,_react.useMemo)(()=>{if(!r&&!a){return basicDefaultSettings}return createDefaultsFromConfig(r,a)},[r,a]);const[c,s]=(0,_react.useState)(n);const l=(0,_react.useCallback)(async()=>{try{const g=await _sharedUi.persistentStorage.getItem(STORAGE_KEY);if(g){const x=JSON.parse(g);const i=mergeWithDefaults(n,x);s(i);return}s(n)}catch(g){console.error("Failed to load dev tools settings:",g);s(n)}},[n]);(0,_react.useEffect)(()=>(0,_sharedUi.onSettingsApplied)(g=>{if(g.includes(STORAGE_KEY))void l()}),[l]);(0,_react.useEffect)(()=>{l();const g=_settingsBus.settingsBus.addListener(x=>{try{if(x){s(x)}}catch(i){}});return()=>{g()}},[l]);const d=(0,_react.useCallback)(()=>{l()},[l]);return{settings:c,refreshSettings:d}};exports.useDevToolsSettings=useDevToolsSettings;const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},headerRow:{flexDirection:"row",alignItems:"center",paddingLeft:_sharedUi.night.gutter,paddingRight:_sharedUi.night.gutter,paddingBottom:8},scrollContent:{flex:1},scrollContainer:{paddingHorizontal:_sharedUi.night.gutter,paddingTop:8,paddingBottom:24,gap:_sharedUi.night.groupGap},toolRow:{flexDirection:"row",alignItems:"center",gap:12,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:12},settingRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:_sharedUi.night.rowPadV,minHeight:52},featureRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:12},rowDisabled:{opacity:.4},toolIconSlot:{width:24,alignItems:"center"},rowInfo:{flex:1,gap:2},rowLabel:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.row,fontWeight:"500"},rowCaption:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.label},settingRowBody:{paddingHorizontal:_sharedUi.night.rowPadH,paddingBottom:_sharedUi.night.rowPadV,gap:6},settingRowBodyText:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.caption,lineHeight:_sharedUi.night.font.caption*1.45},settingRowBodyHint:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.caption,lineHeight:_sharedUi.night.font.caption*1.45},bodyWarning:{color:_sharedUi.night.color.warning},bodyDanger:{color:_sharedUi.night.color.danger},cardButtonWrap:{paddingHorizontal:_sharedUi.night.cardPad,paddingTop:10,paddingBottom:_sharedUi.night.cardPad},storageExpanded:{paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:12,gap:8},storageExpandedHeader:{flexDirection:"row",alignItems:"center"},storageExpandedTitle:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,fontWeight:"600",letterSpacing:.5},storageExpandedCount:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},storageKeysList:{maxHeight:150},storageKeyItem:{backgroundColor:_sharedUi.night.color.glassElevated,borderRadius:_sharedUi.night.radius.segment,paddingHorizontal:10,paddingVertical:7,marginBottom:4},storageKeyText:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,fontFamily:_sharedUi.monoFont},storageKeyEmpty:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.caption,fontStyle:"italic"},footnoteMono:{fontFamily:_sharedUi.monoFont,fontSize:_sharedUi.night.font.label,color:_sharedUi.night.color.textSecondary}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useDevToolsSettings=exports.DevToolsSettingsModal=void 0;var _react=require("react");var _reactNative=require("react-native");var _settingsBus=require("./settingsBus.js");var _useDesktopSyncStatus=require("./useDesktopSyncStatus");var _sharedUi=require("@buoy-gg/shared-ui");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _DefaultConfigContext=require("./DefaultConfigContext.js");var _AppIcon=require("./AppIcon");var _jsxRuntime=require("react/jsx-runtime");const STORAGE_KEY="@react_buoy_dev_tools_settings";const MAX_DIAL_SLOTS=6;const enforceDialLimit=r=>{let a=MAX_DIAL_SLOTS;const n={};for(const[c,s]of Object.entries(r)){if(s&&a>0){n[c]=true;a-=1}else{n[c]=false}}return n};const sanitizeFloating=(r,a)=>{const{userStatus:n,environment:c,...s}=r;const l=a?Object.entries(s).filter(([d])=>a.includes(d)):Object.entries(s);return{...Object.fromEntries(l),environment:c??false}};const mergeWithDefaults=(r,a,n)=>{if(!a)return r;const c={...r.dialTools,...a.dialTools??{}};const s=n?.allowedDialKeys?Object.entries(c).filter(([d])=>n.allowedDialKeys?.includes(d)):Object.entries(c);const l=enforceDialLimit(Object.fromEntries(s));return{dialTools:l,floatingTools:sanitizeFloating({...r.floatingTools,...a.floatingTools??{}},n?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true,...a.globalSettings??{}}}};const generateDefaultSettings=(r=[],a,n)=>{const c={};const s={};const l=new Set(a??[]);const d=new Set(n??[]);const g=!n||n.length===0;for(const x of r){const{id:i,slot:S="both"}=x;if(S==="dial"||S==="both"){c[i]=g?true:d.has(i)}if(S==="row"||S==="both"){s[i]=l.has(i)}}return{dialTools:enforceDialLimit(c),floatingTools:{...s,environment:l.has("environment")},globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true}}};const DevToolsSettingsModal=({visible:r,onClose:a,onSettingsChange:n,initialSettings:c,availableApps:s=[],storage:l=_sharedUi.persistentStorage,zIndex:d})=>{const{defaultFloatingTools:g,defaultDialTools:x}=(0,_DefaultConfigContext.useDefaultConfig)();const i=(0,_react.useMemo)(()=>generateDefaultSettings(s,g,x),[s,g,x]);const S=(0,_react.useMemo)(()=>Object.keys(i.dialTools),[i]);const R=(0,_react.useMemo)(()=>Object.keys(i.floatingTools).filter(e=>e!=="environment"),[i]);const[f,b]=(0,_react.useState)(c||cachedSettings||i);const[w,F]=(0,_react.useState)(cachedActiveTab??"floating");const[N,G]=(0,_react.useState)(cachedActiveTab!==null);const[C,Y]=(0,_react.useState)(new Set);const[$,I]=(0,_react.useState)(false);const[Q,X]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{const e=requestAnimationFrame(()=>X(true));return()=>cancelAnimationFrame(e)},[]);const h=(0,_useDesktopSyncStatus.useDesktopSyncStatus)();(0,_react.useEffect)(()=>{const e=async()=>{try{const t=await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.activeTab());if(t&&["floating","settings","pro"].includes(t)){const o=t;cachedActiveTab=o;F(y=>y===o?y:o)}}catch(t){}finally{G(true)}};e()},[]);(0,_react.useEffect)(()=>{if(!N)return;_sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.activeTab(),w).catch(e=>{console.warn("Failed to save settings active tab:",e)})},[w,N]);const Z=(0,_sharedUi.getUseLicense)();const m=Z?.();const j=m?.isPro??false;const z=!j&&m?.licenseKey?m.error:null;const ee=m?.errorKind==="transport";const[u,te]=(0,_react.useState)(cachedStorageBackend);const[B,O]=(0,_react.useState)(false);const[D,L]=(0,_react.useState)(false);const[T,oe]=(0,_react.useState)(false);const[E,k]=(0,_react.useState)([]);const[V,P]=(0,_react.useState)(false);const M=(0,_sharedUi.useSafeAreaInsets)();const H=_reactNative.Dimensions.get("window").height;const K=_reactNative.Dimensions.get("window").width;const ne=Math.floor(H*.33);const se=Math.min(K-32,400);const _=(0,_react.useCallback)(async()=>{try{const e=await l.getItem(STORAGE_KEY);if(e){const t=JSON.parse(e);const o=mergeWithDefaults(i,t,{allowedDialKeys:S,allowedFloatingKeys:R});cachedSettings=o;b(y=>sameSettings(y,o)?y:o);return}cachedSettings=i;b(t=>sameSettings(t,i)?t:i)}catch(e){console.error("Failed to load dev tools settings:",e);b(i)}},[i,S,R,l]);(0,_react.useEffect)(()=>{_()},[_]);(0,_react.useEffect)(()=>{(0,_sharedUi.getStorageBackendType)().then(e=>{cachedStorageBackend=e;te(t=>t===e?t:e)})},[]);(0,_react.useEffect)(()=>{if(T){P(true);_sharedUi.persistentStorage.getAllKeys().then(e=>{k(e.sort())}).catch(()=>{k([])}).finally(()=>{P(false)})}},[T]);const A=async e=>{try{const t={...e,dialTools:enforceDialLimit(e.dialTools)};await l.setItem(STORAGE_KEY,JSON.stringify(t));cachedSettings=t;b(t);n?.(t);_settingsBus.settingsBus.emit(t)}catch(t){console.error("Failed to save dev tools settings:",t)}};const ie=e=>{const t={...f,floatingTools:{...f.floatingTools,[e]:!f.floatingTools[e]}};A(t)};const re=e=>{const t={...f,globalSettings:{...f.globalSettings,[e]:!f.globalSettings?.[e]}};A(t)};const ae=async()=>{O(true);L(false);try{await _sharedUi.persistentStorage.clear();L(true);b(i);if(l!==_sharedUi.persistentStorage)await l.setItem(STORAGE_KEY,JSON.stringify(i));n?.(i);_settingsBus.settingsBus.emit(i);setTimeout(()=>L(false),2e3)}catch(e){console.error("Failed to clear storage:",e)}finally{O(false)}};const le=(0,_react.useCallback)(e=>{},[]);const ce=e=>{const t=s.find(o=>o.id===e);if(t?.description){return t.description}if(e==="environment"){return"Environment badge."}return""};const W=e=>{if(e==="environment"){return"Env Badge"}const t=s.find(o=>o.id===e);return t?.name??e.toUpperCase().replace(/_/g," ")};const de=e=>{if(!Q)return null;switch(e){case"query":return(0,_jsxRuntime.jsx)(_floatingToolsCore.QueryIcon,{size:18});case"env":return(0,_jsxRuntime.jsx)(_floatingToolsCore.EnvIcon,{size:18});case"sentry":return(0,_jsxRuntime.jsx)(_sharedUi.SentryIcon,{size:18,color:"#9945FF"});case"storage":return(0,_jsxRuntime.jsx)(_floatingToolsCore.StorageIcon,{size:18,bgColor:_sharedUi.night.color.surface});case"wifi":case"query-wifi-toggle":return(0,_jsxRuntime.jsx)(_sharedUi.WifiCircuitIcon,{size:18,colorPreset:"green",strength:4,noBackground:true});case"route-events":return(0,_jsxRuntime.jsx)(_floatingToolsCore.RoutesIcon,{size:18,bgColor:_sharedUi.night.color.surface});case"network":return(0,_jsxRuntime.jsx)(_floatingToolsCore.NetworkIcon,{size:18});case"environment":return(0,_jsxRuntime.jsx)(_floatingToolsCore.EnvIcon,{size:18});case"debug-borders":return(0,_jsxRuntime.jsx)(_sharedUi.Layers,{size:18,color:_sharedUi.night.color.accent});case"highlight-updates":return(0,_jsxRuntime.jsx)(_sharedUi.RenderCountIcon,{size:18,color:_sharedUi.night.color.accent});case"highlight-updates-modal":return(0,_jsxRuntime.jsx)(_floatingToolsCore.HighlighterIcon,{size:18});case"redux":return(0,_jsxRuntime.jsx)(_floatingToolsCore.ReduxIcon,{size:18});case"image-overlay":return(0,_jsxRuntime.jsx)(_sharedUi.ImageOverlayIcon,{size:18});case"events":return(0,_jsxRuntime.jsx)(_floatingToolsCore.EventsIcon,{size:18});case"zustand":try{const{ZustandIcon:t}=require("@buoy-gg/zustand");return(0,_jsxRuntime.jsx)(t,{size:18})}catch{return(0,_jsxRuntime.jsx)(_sharedUi.Info,{size:18,color:_sharedUi.night.color.textSecondary})}case"jotai":try{const{JotaiIcon:t}=require("@buoy-gg/jotai");return(0,_jsxRuntime.jsx)(t,{size:18})}catch{return(0,_jsxRuntime.jsx)(_sharedUi.Info,{size:18,color:_sharedUi.night.color.textSecondary})}default:{const t=s.find(o=>o.id===e);if(t?.icon!=null){return(0,_AppIcon.renderAppIcon)(t.icon,{slot:"row",size:18,color:t.color})}return(0,_jsxRuntime.jsx)(_sharedUi.Info,{size:18,color:_sharedUi.night.color.textSecondary})}}};const ge=(e,t,o,y)=>{const v=ce(e);return(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:o?1:.7,onPress:()=>!o&&y(),accessibilityLabel:W(e),accessibilityRole:"button",style:[styles.toolRow,o&&styles.rowDisabled],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.toolIconSlot,children:de(e)}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.rowInfo,children:[(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.rowLabel,children:[W(e),o?" \xB7 max 6":""]}),v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowCaption,numberOfLines:1,children:v}):null]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSwitch,{value:t,disabled:o,onValueChange:()=>y()})]},e)};const q=e=>{Y(t=>{const o=new Set(t);if(o.has(e)){o.delete(e)}else{o.add(e)}return o})};const J=(e,t,o,y,v)=>{const ye=f.globalSettings?.[e]??false;const U=C.has(e);return(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:.7,onPress:()=>q(e),accessibilityLabel:t,style:styles.settingRow,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.rowInfo,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:t}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowCaption,numberOfLines:U?0:1,children:o})]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSwitch,{value:ye,onValueChange:()=>re(e)})]}),U&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRowBody,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingRowBodyText,children:y}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingRowBodyHint,children:v})]})]},e)};const p=(e,t,o)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{children:e}),t,o]});const he=u==="filesystem"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"File System",tone:"accent"}):u==="asyncstorage"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Async Storage",tone:"warning"}):u==="localstorage"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Local Storage",tone:"accent"}):u==="memory"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Memory",tone:"danger"}):(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Loading\u2026",tone:"neutral"});const ue=()=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.container,children:[(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.scrollContent,showsVerticalScrollIndicator:false,contentContainerStyle:styles.scrollContainer,children:[w==="floating"&&(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:p("Floating Tools",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,children:(0,_jsxRuntime.jsx)(_sharedUi.NightRows,{children:Object.entries(f.floatingTools).map(([e,t])=>ge(e,t,false,()=>ie(e)))})}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{children:"Tools switched on here appear in the floating bubble row."}))}),w==="settings"&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[p("Background",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,padded:true,children:(0,_jsxRuntime.jsx)(_sharedUi.BackgroundSwitcher,{embedded:true})})),p("Storage",(0,_jsxRuntime.jsxs)(_sharedUi.NightCard,{glass:true,children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:.7,onPress:()=>oe(!T),accessibilityLabel:"Storage Type",style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"Storage Type"})}),he,T?(0,_jsxRuntime.jsx)(_sharedUi.ChevronDown,{size:16,color:_sharedUi.night.color.textTertiary}):(0,_jsxRuntime.jsx)(_sharedUi.ChevronRightIcon,{size:16,color:_sharedUi.night.color.textTertiary})]}),T&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRowBody,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingRowBodyText,children:u==="filesystem"?"Settings persist independently and survive AsyncStorage.clear() calls during logout.":u==="asyncstorage"?"Settings may be lost if AsyncStorage is cleared during logout.":u==="localstorage"?"Settings are saved in this browser. Clearing site data removes them.":u==="memory"?"Settings are stored in memory only and will be lost on app restart.":"Checking storage backend\u2026"}),u==="asyncstorage"&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingRowBodyText,styles.bodyWarning],children:"Install expo-file-system to persist settings through logout flows."}),u==="memory"&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingRowBodyText,styles.bodyDanger],children:"No persistent storage available \u2014 install expo-file-system (best) or @react-native-async-storage/async-storage."})]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSeparator,{}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.storageExpanded,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.storageExpandedHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageExpandedTitle,children:"SAVED SETTINGS"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageExpandedCount,children:V?"\u2026":`${E.length} keys`})]}),V?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageKeyEmpty,children:"Loading\u2026"}):E.length===0?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageKeyEmpty,children:"No settings saved yet"}):(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:styles.storageKeysList,nestedScrollEnabled:true,showsVerticalScrollIndicator:true,children:E.map(e=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.storageKeyItem,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.storageKeyText,numberOfLines:1,children:e.replace("@react_buoy_","")})},e))})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.cardButtonWrap,children:(0,_jsxRuntime.jsx)(_sharedUi.NightButton,{label:D?"Cleared":B?"Clearing\u2026":"Clear All Settings",variant:D?"secondary":"destructive",size:"md",disabled:B,onPress:ae,icon:D?(0,_jsxRuntime.jsx)(_sharedUi.CheckCircle2,{size:15,color:_sharedUi.night.color.accent}):(0,_jsxRuntime.jsx)(_sharedUi.Trash2,{size:15,color:B?_sharedUi.night.color.textTertiary:_sharedUi.night.color.danger})})})]})]})),h&&h.state!=="idle"&&p("Desktop Sync",(0,_jsxRuntime.jsxs)(_sharedUi.NightCard,{glass:true,children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{activeOpacity:.7,onPress:()=>q("desktopSync"),accessibilityLabel:"Buoy Desktop",style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"Buoy Desktop"})}),h.state==="connected"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Connected",tone:"accent"}):h.state==="connecting"?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Connecting\u2026",tone:"neutral"}):(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Retrying",tone:"warning"}),C.has("desktopSync")?(0,_jsxRuntime.jsx)(_sharedUi.ChevronDown,{size:16,color:_sharedUi.night.color.textTertiary}):(0,_jsxRuntime.jsx)(_sharedUi.ChevronRightIcon,{size:16,color:_sharedUi.night.color.textTertiary})]}),C.has("desktopSync")&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRowBody,children:[(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingRowBodyText,children:[h.state==="connected"?"Streaming tool data to Buoy Desktop at ":"Trying to reach Buoy Desktop at ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.footnoteMono,children:h.targetURL??"(unknown URL)"}),h.state!=="connected"&&" \u2014 is the desktop app running? Override with the externalSync socketURL option if it runs elsewhere."]}),h.state==="retrying"&&h.lastError&&(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[styles.settingRowBodyText,styles.bodyWarning],children:["Last error: ",h.lastError]})]})]})),p("Modal Behavior",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,children:(0,_jsxRuntime.jsxs)(_sharedUi.NightRows,{children:[J("enableSharedModalDimensions","Shared Modal Size","Sync dimensions across all tools","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.","Keep OFF for the best experience. This allows you to customize each tool's modal size separately."),(0,_sharedUi.expandableWindowControlsSupported)(_reactNative.Platform.OS==="web")?J("expandableWindowControls","Expand Controls","iPad-style expandable window buttons","When enabled, the window control buttons (minimize, toggle mode, close) start as small dots and expand into larger, easy-to-tap buttons when pressed. When disabled, buttons are directly tappable at their small size.","Keep ON for touch devices where the small buttons are hard to press. Turn OFF if you prefer direct single-tap access."):null]})}))]}),w==="pro"&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[p("License",(0,_jsxRuntime.jsxs)(_sharedUi.NightCard,{glass:true,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"License Status"})}),(0,_jsxRuntime.jsx)(_reactNative.View,{testID:"buoy-settings-license-status",accessibilityLabel:j?"License: Active":"License: Free",children:j?(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Active",tone:"accent"}):(0,_jsxRuntime.jsx)(_sharedUi.NightBadge,{label:"Free",tone:"neutral"})})]}),m?.tierSource==="session"?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingRow,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.rowInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:"Signed in with Buoy"})}),(0,_jsxRuntime.jsx)(_sharedUi.NightButton,{label:"Sign out",variant:"secondary",size:"md",onPress:()=>void(0,_sharedUi.signOutOfBuoy)(),testID:"buoy-settings-signout"})]}):null]}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{children:j?"You have full access to all Buoy DevTools features.":z?ee?`Couldn't reach the license server (${z}). A VPN or corporate proxy can block buoy.gg \u2014 turn it off and reload. Your key hasn't been rejected.`:`License check failed: ${z}.`:"Upgrade to Pro to unlock all features and support development."})),!j&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[p("Pro Features",(0,_jsxRuntime.jsx)(_sharedUi.NightCard,{glass:true,children:(0,_jsxRuntime.jsx)(_sharedUi.NightRows,{children:["Advanced Settings","Priority Support"].map(e=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.featureRow,children:[(0,_jsxRuntime.jsx)(_sharedUi.CheckCircle2,{size:16,color:_sharedUi.night.color.accent}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.rowLabel,children:e})]},e))})})),(0,_jsxRuntime.jsx)(_sharedUi.NightButton,{label:"Upgrade to Pro",variant:"primary",size:"lg",onPress:()=>I(true)})]})]})]}),(0,_jsxRuntime.jsx)(_sharedUi.LicenseEntryModal,{visible:$,onClose:()=>I(false),onSuccess:()=>I(false)})]});return(0,_jsxRuntime.jsx)(_sharedUi.JsModal,{visible:r,onClose:a,zIndex:d,variant:"night",header:{showToggleButton:false,customContent:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.headerRow,children:(0,_jsxRuntime.jsx)(_sharedUi.NightSegmented,{glass:true,tabs:[{key:"floating",label:"Floating"},{key:"settings",label:"Settings"},{key:"pro",label:"Pro"}],activeKey:w,onChange:e=>F(e)})})},initialMode:"bottomSheet",onModeChange:le,persistenceKey:_sharedUi.devToolsStorageKeys.settings.root(),enablePersistence:true,maxHeight:H-M.top,initialHeight:ne,initialFloatingPosition:{x:(K-se)/2,y:M.top+20},enableGlitchEffects:true,children:ue()})};exports.DevToolsSettingsModal=DevToolsSettingsModal;const basicDefaultSettings={dialTools:{},floatingTools:{environment:false},globalSettings:{enableSharedModalDimensions:false}};const createDefaultsFromConfig=(r,a)=>{const n=new Set(r??[]);const c=new Set(a??[]);const s={};for(const d of c){s[d]=true}const l={environment:n.has("environment")};for(const d of n){if(d!=="environment"){l[d]=true}}return{dialTools:enforceDialLimit(s),floatingTools:l,globalSettings:{enableSharedModalDimensions:false}}};let cachedSettings=null;let cachedActiveTab=null;let cachedStorageBackend=null;const sameSettings=(r,a)=>JSON.stringify(r)===JSON.stringify(a);_settingsBus.settingsBus.addListener(r=>{if(r)cachedSettings=r});const useDevToolsSettings=()=>{const{defaultFloatingTools:r,defaultDialTools:a}=(0,_DefaultConfigContext.useDefaultConfig)();const n=(0,_react.useMemo)(()=>{if(!r&&!a){return basicDefaultSettings}return createDefaultsFromConfig(r,a)},[r,a]);const[c,s]=(0,_react.useState)(n);const l=(0,_react.useCallback)(async()=>{try{const g=await _sharedUi.persistentStorage.getItem(STORAGE_KEY);if(g){const x=JSON.parse(g);const i=mergeWithDefaults(n,x);s(i);return}s(n)}catch(g){console.error("Failed to load dev tools settings:",g);s(n)}},[n]);(0,_react.useEffect)(()=>(0,_sharedUi.onSettingsApplied)(g=>{if(g.includes(STORAGE_KEY))void l()}),[l]);(0,_react.useEffect)(()=>{l();const g=_settingsBus.settingsBus.addListener(x=>{try{if(x){s(x)}}catch(i){}});return()=>{g()}},[l]);const d=(0,_react.useCallback)(()=>{l()},[l]);return{settings:c,refreshSettings:d}};exports.useDevToolsSettings=useDevToolsSettings;const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},headerRow:{flexDirection:"row",alignItems:"center",paddingLeft:_sharedUi.night.gutter,paddingRight:_sharedUi.night.gutter,paddingBottom:8},scrollContent:{flex:1},scrollContainer:{paddingHorizontal:_sharedUi.night.gutter,paddingTop:8,paddingBottom:24,gap:_sharedUi.night.groupGap},toolRow:{flexDirection:"row",alignItems:"center",gap:12,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:12},settingRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:_sharedUi.night.rowPadV,minHeight:52},featureRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:12},rowDisabled:{opacity:.4},toolIconSlot:{width:24,alignItems:"center"},rowInfo:{flex:1,gap:2},rowLabel:{color:_sharedUi.night.color.text,fontSize:_sharedUi.night.font.row,fontWeight:"500"},rowCaption:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.label},settingRowBody:{paddingHorizontal:_sharedUi.night.rowPadH,paddingBottom:_sharedUi.night.rowPadV,gap:6},settingRowBodyText:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.caption,lineHeight:_sharedUi.night.font.caption*1.45},settingRowBodyHint:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.caption,lineHeight:_sharedUi.night.font.caption*1.45},bodyWarning:{color:_sharedUi.night.color.warning},bodyDanger:{color:_sharedUi.night.color.danger},cardButtonWrap:{paddingHorizontal:_sharedUi.night.cardPad,paddingTop:10,paddingBottom:_sharedUi.night.cardPad},storageExpanded:{paddingHorizontal:_sharedUi.night.rowPadH,paddingVertical:12,gap:8},storageExpandedHeader:{flexDirection:"row",alignItems:"center"},storageExpandedTitle:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,fontWeight:"600",letterSpacing:.5},storageExpandedCount:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},storageKeysList:{maxHeight:150},storageKeyItem:{backgroundColor:_sharedUi.night.color.glassElevated,borderRadius:_sharedUi.night.radius.segment,paddingHorizontal:10,paddingVertical:7,marginBottom:4},storageKeyText:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,fontFamily:_sharedUi.monoFont},storageKeyEmpty:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.caption,fontStyle:"italic"},footnoteMono:{fontFamily:_sharedUi.monoFont,fontSize:_sharedUi.night.font.label,color:_sharedUi.night.color.textSecondary}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FloatingDevTools=FloatingDevTools;var _floating=require("@buoy-gg/shared-ui/floating");var _license=require("@buoy-gg/license");var _sharedUi=require("@buoy-gg/shared-ui");var _react=require("react");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _autoDiscoverPresetsWeb=require("../utils/autoDiscoverPresets.web.js");var _floatingToolsWeb=require("./floatingTools.web.js");var _DialDevToolsWeb=require("./dial/DialDevTools.web.js");var _dialUsageStore=require("./dial/dialUsageStore.js");var _OnboardingTooltipWeb=require("./dial/OnboardingTooltip.web.js");var _DevToolsSettingsModalWeb=require("./DevToolsSettingsModal.web.js");var _AppHostWeb=require("./AppHost.web.js");var _MinimizedToolsStackWeb=require("./MinimizedToolsStack.web.js");var _createWebTools=require("../utils/createWebTools.js");var _BrowserToolRuntime=require("./BrowserToolRuntime.js");var _releaseOptIn=require("../releaseOptIn.js");var _BuoySignInWeb=require("./BuoySignIn.web.js");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.js");var _jsxRuntime=require("react/jsx-runtime");const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:t=14,color:l="#20C997"}){const o=Math.max(2,t/4);const u=Math.max(1,t/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${o}px)`,gap:u,width:t,height:t,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((d,a)=>(0,_jsxRuntime.jsx)("div",{style:{width:o,height:o,borderRadius:o/2,backgroundColor:l}},a))})}function AdmittedFloatingDevTools(t){return(0,_jsxRuntime.jsx)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:(0,_jsxRuntime.jsx)(_AppHostWeb.AppHostProvider,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsInner,{...t})})})}function FloatingDevToolsInner({environment:t,userRole:l,availableEnvironments:o,onEnvironmentSwitch:u,apps:d,modules:a=EMPTY_MODULES,externalSync:c,requiredEnvVars:W,sentryGetClient:L,disableHints:h=false,headless:D=false}){const[i,b]=(0,_react.useState)(false);const[g,T]=(0,_react.useState)(false);const j=(0,_react.useRef)(false);const p=(0,_AppHostWeb.useAppHost)();const r=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(a),...d??[]]),[d,a]);const y=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();const O=p.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{y.setDialOpen(i)},[i,y.setDialOpen]);(0,_react.useEffect)(()=>{y.setToolOpen(O||g)},[O,g,y.setToolOpen]);const{registerApps:w}=p;(0,_react.useEffect)(()=>{w(r.map(e=>{const n=e.icon;return{...e,icon:typeof n==="function"?({size:s})=>n(s):n}}))},[w,r]);const A=(0,_react.useMemo)(()=>r.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[r]);const{settings:x}=(0,_floatingToolsReact.useSettings)({availableTools:A,storage:webSettingsStorage});(0,_react.useEffect)(()=>{let e=false;const n=async()=>{const[s,v]=await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()),_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);if(e)return;if(s==="true")b(true);if(v==="true"){b(true);T(true)}j.current=true};void n();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!j.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(),i?"true":"false")},[i]);(0,_react.useEffect)(()=>{if(!j.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),g?"true":"false")},[g]);const _=(0,_react.useCallback)(e=>{void(0,_dialUsageStore.recordToolUsage)(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const n=typeof e.icon==="function"?e.icon(20):e.icon;p.open({id:e.id,title:e.name||(0,_floatingToolsReact.getToolLabel)(e.id),component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:n,color:e.color||(0,_floatingToolsReact.getToolColor)(e.id)})}else{e.onPress?.()}},[p]);const S=(0,_react.useMemo)(()=>{const e=(0,_autoDiscoverPresetsWeb.getToolsBySlot)(r,"dial");return e.map(n=>{const s=n.color||(0,_floatingToolsReact.getToolColor)(n.id);let v;if(typeof n.icon==="string"){v=n.icon}else if(typeof n.icon==="function"){v=n.icon(32)}else{v=null}return{id:n.id,name:n.name||(0,_floatingToolsReact.getToolLabel)(n.id),icon:v,unavailable:!n.component&&!n.onPress,color:s,onPress:()=>{_(n);b(false)}}})},[r,_]);const R=(0,_react.useMemo)(()=>{if(!i)return S;const e=new Map(S.map(n=>[n.id,n]));return(0,_dialUsageStore.getRankedToolIds)(S.map(n=>n.id)).map(n=>e.get(n)).filter(n=>Boolean(n))},[i,S]);const B=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(r,"row").filter(e=>x.floatingTools[e.id]===true&&(e.component||e.onPress)),[r,x.floatingTools]);const K=(0,_react.useMemo)(()=>r.map(e=>({id:e.id,name:e.name||(0,_floatingToolsReact.getToolLabel)(e.id),description:e.description||(0,_floatingToolsReact.getToolDescription)(e.id),slot:e.slot,icon:e.icon,color:e.color})),[r]);const[V,E]=(0,_react.useState)(false);const C=p.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{if(h)return;let e=false;const n=setTimeout(async()=>{const s=await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);if(!e&&!s)E(true)},1e3);return()=>{e=true;clearTimeout(n)}},[h]);const f=(0,_react.useCallback)(()=>{E(false);void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY,"true")},[]);const I=(0,_react.useCallback)(()=>{f();b(true)},[f]);const z=(0,_react.useCallback)(()=>{b(false);T(false)},[]);const U=(0,_react.useCallback)(()=>{T(e=>!e)},[]);const F=(0,_react.useCallback)(()=>T(false),[]);const M=Boolean(o?.length&&u);const k=x.floatingTools.environment!==false;const m=V&&!i&&!C;(0,_react.useEffect)(()=>{if(!m)return;const e=s=>{if(!(s.target instanceof Element)||!s.target.closest("[data-buoy-root]"))f()};const n=s=>{if(s.key==="Escape")f()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",n);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",n)}},[m,f]);const P=p.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const q=(0,_jsxRuntime.jsx)(_BrowserToolRuntime.BrowserToolRuntime,{modules:a,apps:d,requiredEnvVars:W,externalSync:c,headless:D,sentryGetClient:L});if(D)return q;return(0,_jsxRuntime.jsxs)("div",{"data-buoy-root":"",style:{display:"contents"},children:[q,m&&(0,_jsxRuntime.jsx)("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),(0,_jsxRuntime.jsxs)(_floatingToolsWeb.FloatingTools,{enablePositionPersistence:!m,pushToSide:i||C,suspendPointerEvents:i,centerOnboarding:m,minimizedStack:P?(0,_jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack,{}):void 0,hasMinimizedStack:P,children:[t&&k&&!M&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:t}),M&&k&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:t??"local",availableEnvironments:o,onSelect:u}),l?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:l,onPress:I}):(0,_jsxRuntime.jsx)("button",{"aria-label":"Open dev tools",onClick:I,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:(0,_jsxRuntime.jsx)(MenuLauncherIcon,{})}),B.map(e=>(0,_jsxRuntime.jsx)("button",{"aria-label":e.name||(0,_floatingToolsReact.getToolLabel)(e.id),title:e.description,onClick:()=>_(e),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof e.icon==="function"?e.icon(16):e.icon},e.id))]}),m&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:f}),i&&(0,_jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu,{icons:R,onClose:z,centerLabel:"BUOY",onCenterPress:U,settingsOpen:g,hintsDisabled:h}),(0,_jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal,{visible:g,onClose:F,availableTools:K,onSettingsChange:e=>{}}),(0,_jsxRuntime.jsx)(_AppHostWeb.AppOverlay,{}),(0,_jsxRuntime.jsx)(_floating.FloatingToolHost,{})]})}function FloatingDevTools(t){const{access:l,isPro:o,licenseKey:u}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(t.licenseKey)},[t.licenseKey]);const d=t.licenseKey===void 0||(0,_license.sameLicenseKey)(t.licenseKey,u);const a=typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production";const c=d&&l.status==="admitted";(0,_react.useEffect)(()=>{if(c)(0,_sharedUi.startSettingsSync)()},[c]);(0,_react.useEffect)(()=>{if(a||l.status==="initializing")return;if(o&&c)(0,_releaseOptIn.markReleaseOptIn)();else(0,_releaseOptIn.clearReleaseOptIn)()},[a,o,c,l.status]);if(!a&&!o)return t.signIn&&!t.headless?(0,_jsxRuntime.jsx)(_BuoySignInWeb.BuoySignIn,{}):null;if(!c)return t.headless?null:(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{});return(0,_jsxRuntime.jsx)(AdmittedFloatingDevTools,{...t})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FloatingDevTools=FloatingDevTools;var _floating=require("@buoy-gg/shared-ui/floating");var _license=_interopRequireWildcard(require("@buoy-gg/license"));var licenseModule=_license;var _sharedUi=require("@buoy-gg/shared-ui");var _react=require("react");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _autoDiscoverPresetsWeb=require("../utils/autoDiscoverPresets.web.js");var _floatingToolsWeb=require("./floatingTools.web.js");var _DialDevToolsWeb=require("./dial/DialDevTools.web.js");var _dialUsageStore=require("./dial/dialUsageStore.js");var _OnboardingTooltipWeb=require("./dial/OnboardingTooltip.web.js");var _DevToolsSettingsModalWeb=require("./DevToolsSettingsModal.web.js");var _AppHostWeb=require("./AppHost.web.js");var _MinimizedToolsStackWeb=require("./MinimizedToolsStack.web.js");var _createWebTools=require("../utils/createWebTools.js");var _BrowserToolRuntime=require("./BrowserToolRuntime.js");var _releaseOptIn=require("../releaseOptIn.js");var _BuoySignInWeb=require("./BuoySignIn.web.js");var _BuoyCodeSignIn=require("./BuoyCodeSignIn.js");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.js");var _createWebTool=require("../utils/createWebTool.js");var _DefaultConfigContext=require("./DefaultConfigContext.js");var _DevToolsSettingsModalShared=require("./DevToolsSettingsModal.shared.js");var _defaultConfig=require("./defaultConfig.js");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(n,i){if("function"==typeof WeakMap)var s=new WeakMap,l=new WeakMap;return(_interopRequireWildcard=function(t,r){if(!r&&t&&t.__esModule)return t;var a,c,f={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return f;if(a=r?l:s){if(a.has(t))return a.get(t);a.set(t,f)}for(const u in t)"default"!==u&&{}.hasOwnProperty.call(t,u)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,u))&&(c.get||c.set)?a(f,u,c):f[u]=t[u]);return f})(n,i)}const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:n=14,color:i="#20C997"}){const s=Math.max(2,n/4);const l=Math.max(1,n/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${s}px)`,gap:l,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((t,r)=>(0,_jsxRuntime.jsx)("div",{style:{width:s,height:s,borderRadius:s/2,backgroundColor:i}},r))})}function AdmittedFloatingDevTools(n){const{defaultFloatingTools:i,defaultDialTools:s,disableHints:l=false,children:t}=n;const r=(0,_react.useMemo)(()=>s?(0,_defaultConfig.validateDialConfig)(s):s,[s]);return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:i,defaultDialTools:r,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:l,children:(0,_jsxRuntime.jsxs)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppHostProvider,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsInner,{...n})}),t]})})})}const STARTUP_ROOTS=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function StartupCapture({modules:n=EMPTY_MODULES}){return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:Object.entries(n).flatMap(([i,s])=>STARTUP_ROOTS.map(l=>{const t=s[l];return t?(0,_jsxRuntime.jsx)(t,{},`${i}:${l}`):null}))})}function WebToolOpenerBridge(){const{openApps:n,restore:i}=(0,_AppHostWeb.useAppHost)();(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(s=>{const l=n.find(t=>t.id===s);if(!l)return false;i(l.instanceId);return true}),[n,i]);return null}function defaultEnvironment(){const n=(0,_license.capacitorDebug)();const i=n===null?process.env.NODE_ENV:n?"development":"production";return(0,_sharedUi.normalizeEnvironment)(i??"dev")}function configOverrides(n,i,s,l){const t=u=>Object.entries(n).find(([S])=>S.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===u)?.[1];const r=[];const a=t("env");if(i?.length&&a?.createEnvTool&&a.createEnvVarConfig){r.push((0,_createWebTool.createWebTool)(a.createEnvTool({requiredEnvVars:a.createEnvVarConfig(i)})))}const c=t("storage");if(s?.length&&c?.createStorageTool){r.push((0,_createWebTool.createWebTool)(c.createStorageTool({requiredStorageKeys:s})))}const f=t("ask-buoy");if(l&&f?.createAskBuoyTool)r.push((0,_createWebTool.createWebTool)(f.createAskBuoyTool(l)));return r}function FloatingDevToolsInner({environment:n,userRole:i="admin",availableEnvironments:s,onEnvironmentSwitch:l,apps:t,modules:r=EMPTY_MODULES,externalSync:a,requiredEnvVars:c,sentryGetClient:f,disableHints:u=false,headless:S=false,hidden:v=false,defaultFloatingTools:U,defaultDialTools:C,zustandStores:O,requiredStorageKeys:P,askBuoy:W}){const E=n??defaultEnvironment();const N=(0,_react.useMemo)(()=>C?(0,_defaultConfig.validateDialConfig)(C):void 0,[C]);const[g,h]=(0,_react.useState)(false);const[m,x]=(0,_react.useState)(false);const M=(0,_react.useRef)(false);const b=(0,_AppHostWeb.useAppHost)();const q=(0,_react.useMemo)(()=>configOverrides(r,c,P,W),[r,c,P,W]);const p=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(r),...t??[],...q]),[t,r,q]);const w=(0,_react.useMemo)(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);(0,_react.useEffect)(()=>{if(!O||typeof w?.watchStores!=="function")return;const e=w.watchStores(O);return typeof e==="function"?e:void 0},[O,w]);const _=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();const A=b.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{_.setDialOpen(g)},[g,_.setDialOpen]);(0,_react.useEffect)(()=>{_.setToolOpen(A||m)},[A,m,_.setToolOpen]);const{registerApps:R}=b;(0,_react.useEffect)(()=>{R(p.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:d})=>o(d):o}}))},[R,p]);const $=(0,_react.useMemo)(()=>p.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[p]);(0,_floatingToolsReact.useSettings)({availableTools:$,storage:webSettingsStorage});(0,_react.useEffect)(()=>{let e=false;const o=async()=>{const[d,j]=await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()),_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);if(e)return;if(d==="true")h(true);if(j==="true"){h(true);x(true)}M.current=true};void o();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!M.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(),g?"true":"false")},[g]);(0,_react.useEffect)(()=>{if(!M.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),m?"true":"false")},[m]);const I=(0,_react.useCallback)(e=>{void(0,_dialUsageStore.recordToolUsage)(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const o=typeof e.icon==="function"?e.icon(20):e.icon;b.open({id:e.id,title:e.name||(0,_floatingToolsReact.getToolLabel)(e.id),component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:o,color:e.color||(0,_floatingToolsReact.getToolColor)(e.id)})}else{e.onPress?.()}},[b]);const D=(0,_react.useMemo)(()=>{const e=(0,_autoDiscoverPresetsWeb.getToolsBySlot)(p,"dial");return e.map(o=>{const d=o.color||(0,_floatingToolsReact.getToolColor)(o.id);let j;if(typeof o.icon==="string"){j=o.icon}else if(typeof o.icon==="function"){j=o.icon(32)}else{j=null}return{id:o.id,name:o.name||(0,_floatingToolsReact.getToolLabel)(o.id),icon:j,unavailable:!o.component&&!o.onPress,color:d,onPress:()=>{I(o);h(false)}}})},[p,I]);const Y=(0,_react.useMemo)(()=>{if(!g)return D;const e=new Map(D.map(o=>[o.id,o]));return(0,_dialUsageStore.getRankedToolIds)(D.map(o=>o.id)).map(o=>e.get(o)).filter(o=>Boolean(o))},[g,D]);const{settings:k}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();const G=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(p,"row").filter(e=>(k.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[p,k.floatingTools]);const Q=(0,_react.useMemo)(()=>p.map(e=>({id:e.id,name:e.name||(0,_floatingToolsReact.getToolLabel)(e.id),description:e.description||(0,_floatingToolsReact.getToolDescription)(e.id),slot:e.slot,icon:e.icon,color:e.color})),[p]);const[J,B]=(0,_react.useState)(false);const L=b.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{if(u)return;let e=false;const o=setTimeout(async()=>{const d=await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);if(!e&&!d)B(true)},1e3);return()=>{e=true;clearTimeout(o)}},[u]);const T=(0,_react.useCallback)(()=>{B(false);void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY,"true")},[]);const F=(0,_react.useCallback)(()=>{T();h(true)},[T]);const X=(0,_react.useCallback)(()=>{h(false);x(false)},[]);const Z=(0,_react.useCallback)(()=>{x(e=>!e)},[]);const ee=(0,_react.useCallback)(()=>x(false),[]);const z=Boolean(s?.length&&l);const K=k.floatingTools.environment!==false;const y=J&&!g&&!L&&!v;(0,_react.useEffect)(()=>{if(!y)return;const e=d=>{if(!(d.target instanceof Element)||!d.target.closest("[data-buoy-root]"))T()};const o=d=>{if(d.key==="Escape")T()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[y,T]);const V=b.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const H=(0,_jsxRuntime.jsx)(_BrowserToolRuntime.BrowserToolRuntime,{modules:r,apps:t,requiredEnvVars:c,externalSync:a,headless:S,sentryGetClient:f});if(S)return H;return(0,_jsxRuntime.jsxs)("div",{"data-buoy-root":"",style:{display:"contents"},children:[H,(0,_jsxRuntime.jsx)(WebToolOpenerBridge,{}),y&&(0,_jsxRuntime.jsx)("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),(0,_jsxRuntime.jsx)("div",{style:v?{visibility:"hidden"}:{display:"contents"},"aria-hidden":v||void 0,children:(0,_jsxRuntime.jsxs)(_floatingToolsWeb.FloatingTools,{enablePositionPersistence:!y,pushToSide:g||L,suspendPointerEvents:g,centerOnboarding:y,minimizedStack:V?(0,_jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack,{}):void 0,hasMinimizedStack:V,children:[E&&K&&!z&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:E}),z&&K&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:E??"local",availableEnvironments:s,onSelect:l}),i?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:i,onPress:F}):(0,_jsxRuntime.jsx)("button",{"aria-label":"Open dev tools",onClick:F,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:(0,_jsxRuntime.jsx)(MenuLauncherIcon,{})}),G.map(e=>(0,_jsxRuntime.jsx)("button",{"aria-label":e.name||(0,_floatingToolsReact.getToolLabel)(e.id),title:e.description,onClick:()=>I(e),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof e.icon==="function"?e.icon(16):e.icon},e.id))]})}),y&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:T}),g&&!v&&(0,_jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu,{icons:Y,onClose:X,centerLabel:"BUOY",onCenterPress:Z,settingsOpen:m,hintsDisabled:u}),m&&!v&&(0,_jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal,{visible:true,onClose:ee,availableTools:Q,defaultFloatingTools:U,defaultDialTools:N,onSettingsChange:e=>{}}),!v&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppOverlay,{}),(0,_jsxRuntime.jsx)(_floating.FloatingToolHost,{})]})]})}function useCapacitorSignInAudience(n){const i=n&&typeof n==="object"?n.appId:void 0;const s=!!n;(0,_react.useEffect)(()=>{if(!s)return;let l=false;const t=licenseModule.SessionManager;if(!t)return;const r=a=>{if(l||!a)return;t.configure({audience:`app:${a}`});void t.load().catch(()=>{})};if(i)r(i);else void(0,_license.loadCapacitorAppHost)().then(a=>r(a?.bundleId)).catch(()=>{});return()=>{l=true}},[s,i])}function FloatingDevTools(n){const{access:i,isPro:s,licenseKey:l}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(n.licenseKey)},[n.licenseKey]);const t=n.licenseKey===void 0||(0,_license.sameLicenseKey)(n.licenseKey,l);const r=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const a=t&&i.status==="admitted";(0,_react.useEffect)(()=>{if(a)(0,_sharedUi.startSettingsSync)()},[a]);(0,_react.useEffect)(()=>{if(r||i.status==="initializing")return;if(s&&a)(0,_releaseOptIn.markReleaseOptIn)();else(0,_releaseOptIn.clearReleaseOptIn)()},[r,s,a,i.status]);const c=(0,_license.isCapacitorNative)();useCapacitorSignInAudience(c?n.signIn:void 0);if(!r&&!s){if(!n.signIn||n.headless)return null;return c?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{needsPlan:true}):(0,_jsxRuntime.jsx)(_BuoySignInWeb.BuoySignIn,{})}if(!a){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[i.status==="initializing"&&(0,_jsxRuntime.jsx)(StartupCapture,{modules:n.modules}),n.headless?null:n.signIn&&c?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{}):(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{})]})}return(0,_jsxRuntime.jsx)(AdmittedFloatingDevTools,{...n})}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MinimizedToolsStack=MinimizedToolsStack;var _react=require("react");var _sharedUi=require("@buoy-gg/shared-ui");var _AppHostWeb=require("./AppHost.web.js");var _jsxRuntime=require("react/jsx-runtime");function useToolAttention(t){return(0,_react.useSyncExternalStore)(_sharedUi.subscribeToolAttention,()=>(0,_sharedUi.getToolAttention)(t),()=>(0,_sharedUi.getToolAttention)(t))}const ATTENTION_COLORS={needsInput:"#FF8329",done:"#20C997",failed:"#FF3B30"};const ATTENTION_RANK={needsInput:3,failed:2,done:1};const strongestCache=new Map;function strongest(t){let n=null;for(const i of t?t.split("|"):[]){const o=(0,_sharedUi.getToolAttention)(i);if(o&&(!n||ATTENTION_RANK[o.kind]>ATTENTION_RANK[n.kind]))n=o}const s=strongestCache.get(t);if(s&&n&&s.kind===n.kind&&s.label===n.label)return s;if(!s&&!n)return null;strongestCache.set(t,n);return n}function useStrongestAttention(t){const n=t.join("|");return(0,_react.useSyncExternalStore)(_sharedUi.subscribeToolAttention,()=>strongest(n),()=>strongest(n))}const PEEK_HEIGHT=28;const TOOL_ITEM_SIZE=32;const ICON_GAP=6;const TOOLBAR_PADDING=8;const COLLAPSE_BUTTON_SIZE=24;const STORAGE_KEY_EXPANDED="@react_buoy_minimized_stack_expanded";const GLITCH_DURATION_MS=80;const MIN_GLITCH_DELAY=2e3;const MAX_GLITCH_DELAY=6e3;const CARD="#1A1A1A";const TEXT_MUTED="#888888";function ChevronGlyph({down:t=false}){return(0,_jsxRuntime.jsx)("svg",{width:12,height:12,viewBox:"0 0 24 24","aria-hidden":"true",style:{transform:t?"rotate(180deg)":void 0},children:(0,_jsxRuntime.jsx)("path",{d:"M18 15l-6-6-6 6",fill:"none",stroke:TEXT_MUTED,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function GlitchToolButton({id:t,title:n,icon:s,index:i,onPress:o}){const r=useToolAttention(t);const l=(0,_react.useRef)(null);(0,_react.useEffect)(()=>{let c=true;let a;const f=()=>{l.current?.animate([{transform:"translateX(0) scale(1)",opacity:1,offset:0},{transform:"translateX(3px) scale(1.05)",opacity:.4,offset:.2},{transform:"translateX(-3px) scale(1.1)",opacity:1,offset:.4},{transform:"translateX(2px) scale(1.0)",opacity:.6,offset:.6},{transform:"translateX(-1px) scale(0.95)",opacity:1,offset:.8},{transform:"translateX(0) scale(1)",opacity:1,offset:1}],{duration:GLITCH_DURATION_MS,easing:"linear"})};const d=u=>{const e=u?500+Math.random()*1500+i*200:MIN_GLITCH_DELAY+Math.random()*(MAX_GLITCH_DELAY-MIN_GLITCH_DELAY)+i*300;a=setTimeout(()=>{if(!c)return;f();d(false)},e)};d(true);return()=>{c=false;clearTimeout(a)}},[i]);return(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":r?`${n} \u2014 ${r.label}. Restore`:`Restore ${n}`,onClick:o,style:{width:TOOL_ITEM_SIZE,height:TOOL_ITEM_SIZE,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",padding:0,cursor:"pointer",position:"relative"},children:[(0,_jsxRuntime.jsx)("div",{ref:l,style:{display:"flex",alignItems:"center",justifyContent:"center"},children:s}),r?(0,_jsxRuntime.jsx)("span",{"aria-hidden":true,"data-testid":`buoy-dock-badge-${t}-${r.kind}`,style:{position:"absolute",top:0,right:0,minWidth:12,height:12,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:ATTENTION_COLORS[r.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:r.kind==="needsInput"?"!":""}):null]})}function MinimizedToolsStack({containerWidth:t=32}){const{openApps:n,restore:s}=(0,_AppHostWeb.useAppHost)();const i=n.filter(e=>e.minimized&&e.launchMode!=="toggle-only");const[o,r]=(0,_react.useState)(false);const[l,c]=(0,_react.useState)(false);const a=useStrongestAttention(i.map(e=>e.id));(0,_react.useEffect)(()=>{let e=false;const p=async()=>{const h=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_EXPANDED);if(!e&&h==="true")r(true);if(!e)c(true)};void p();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!l)return;void _sharedUi.persistentStorage.setItem(STORAGE_KEY_EXPANDED,o?"true":"false")},[o,l]);const f=(0,_react.useCallback)(e=>{s(e)},[s]);if(i.length===0)return null;const d=TOOLBAR_PADDING+i.length*TOOL_ITEM_SIZE+(i.length-1)*ICON_GAP+ICON_GAP+COLLAPSE_BUTTON_SIZE+4;const u={backgroundColor:CARD,borderTopLeftRadius:6,borderTopRightRadius:6,borderTop:`1px solid ${TEXT_MUTED}66`,borderLeft:`1px solid ${TEXT_MUTED}66`,borderRight:`1px solid ${TEXT_MUTED}66`,borderBottom:"none",boxSizing:"border-box"};return(0,_jsxRuntime.jsxs)("div",{style:{height:PEEK_HEIGHT,overflow:"visible",position:"relative"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",bottom:"var(--buoy-stack-bottom, 0px)",top:"var(--buoy-stack-top, auto)",left:0,width:t,maxHeight:"var(--buoy-stack-space, calc(100vh - 48px))",visibility:o?"visible":"hidden",height:o?d:0,opacity:o?1:0,overflowY:"auto",overflowX:"hidden",transition:"height 200ms ease, opacity 200ms ease",pointerEvents:o?"auto":"none",...u},children:(0,_jsxRuntime.jsxs)("div",{style:{height:d,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:TOOLBAR_PADDING,gap:ICON_GAP,boxSizing:"border-box"},children:[[...i].reverse().map((e,p)=>(0,_jsxRuntime.jsx)(GlitchToolButton,{id:e.id,title:e.title||e.id,icon:e.icon??(0,_jsxRuntime.jsx)("span",{style:{color:"#fff",fontSize:13},children:(e.title||e.id).slice(0,1).toUpperCase()}),index:p,onPress:()=>f(e.instanceId)},e.instanceId)),(0,_jsxRuntime.jsx)("button",{type:"button","aria-label":"Collapse",onClick:()=>r(false),style:{width:"100%",height:COLLAPSE_BUTTON_SIZE,marginTop:3,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",cursor:"pointer",padding:0},children:(0,_jsxRuntime.jsx)(ChevronGlyph,{down:true})})]})}),(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":`Show ${i.length} minimized tools`,tabIndex:o?-1:0,"aria-hidden":o,onClick:()=>r(true),style:{position:"absolute",bottom:0,left:0,width:t,height:PEEK_HEIGHT,display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"center",gap:2,cursor:"pointer",padding:0,opacity:o?0:1,transform:o?"scale(0.9)":"scale(1)",transition:"opacity 200ms ease, transform 200ms ease",pointerEvents:o?"none":"auto",...u},children:[(0,_jsxRuntime.jsx)(ChevronGlyph,{}),a?(0,_jsxRuntime.jsx)("span",{"aria-hidden":true,"data-testid":`buoy-dock-peek-attention`,style:{position:"absolute",top:2,right:2,minWidth:11,height:11,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:ATTENTION_COLORS[a.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:a.kind==="needsInput"?"!":""}):null,i.length>1&&(0,_jsxRuntime.jsx)("span",{style:{fontSize:9,fontWeight:600,color:TEXT_MUTED,marginLeft:1},children:i.length})]})]})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MinimizedToolsStack=MinimizedToolsStack;var _react=require("react");var _sharedUi=require("@buoy-gg/shared-ui");var _AppHostWeb=require("./AppHost.web.js");var _jsxRuntime=require("react/jsx-runtime");function useToolAttention(t){return(0,_react.useSyncExternalStore)(_sharedUi.subscribeToolAttention,()=>(0,_sharedUi.getToolAttention)(t),()=>(0,_sharedUi.getToolAttention)(t))}const ATTENTION_COLORS={needsInput:"#FF8329",done:"#20C997",failed:"#FF3B30"};const ATTENTION_RANK={needsInput:3,failed:2,done:1};const strongestCache=new Map;function strongest(t){let o=null;for(const i of t?t.split("|"):[]){const n=(0,_sharedUi.getToolAttention)(i);if(n&&(!o||ATTENTION_RANK[n.kind]>ATTENTION_RANK[o.kind]))o=n}const s=strongestCache.get(t);if(s&&o&&s.kind===o.kind&&s.label===o.label)return s;if(!s&&!o)return null;strongestCache.set(t,o);return o}function useStrongestAttention(t){const o=t.join("|");return(0,_react.useSyncExternalStore)(_sharedUi.subscribeToolAttention,()=>strongest(o),()=>strongest(o))}const PEEK_HEIGHT=28;const TOOL_ITEM_SIZE=32;const ICON_GAP=6;const TOOLBAR_PADDING=8;const COLLAPSE_BUTTON_SIZE=24;const STORAGE_KEY_EXPANDED="@react_buoy_minimized_stack_expanded";const GLITCH_DURATION_MS=80;const MIN_GLITCH_DELAY=2e3;const MAX_GLITCH_DELAY=6e3;const CARD="#1A1A1A";const TEXT_MUTED="#888888";function ChevronGlyph({down:t=false}){return(0,_jsxRuntime.jsx)("svg",{width:12,height:12,viewBox:"0 0 24 24","aria-hidden":"true",style:{transform:t?"rotate(180deg)":void 0},children:(0,_jsxRuntime.jsx)("path",{d:"M18 15l-6-6-6 6",fill:"none",stroke:TEXT_MUTED,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function GlitchToolButton({id:t,title:o,icon:s,index:i,onPress:n}){const r=useToolAttention(t);const l=(0,_react.useRef)(null);(0,_react.useEffect)(()=>{let c=true;let a;const f=()=>{l.current?.animate([{transform:"translateX(0) scale(1)",opacity:1,offset:0},{transform:"translateX(3px) scale(1.05)",opacity:.4,offset:.2},{transform:"translateX(-3px) scale(1.1)",opacity:1,offset:.4},{transform:"translateX(2px) scale(1.0)",opacity:.6,offset:.6},{transform:"translateX(-1px) scale(0.95)",opacity:1,offset:.8},{transform:"translateX(0) scale(1)",opacity:1,offset:1}],{duration:GLITCH_DURATION_MS,easing:"linear"})};const d=u=>{const e=u?500+Math.random()*1500+i*200:MIN_GLITCH_DELAY+Math.random()*(MAX_GLITCH_DELAY-MIN_GLITCH_DELAY)+i*300;a=setTimeout(()=>{if(!c)return;f();d(false)},e)};d(true);return()=>{c=false;clearTimeout(a)}},[i]);return(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":r?`${o} \u2014 ${r.label}. Restore`:`Restore ${o}`,"data-testid":`buoy-dock-restore-${t}`,onClick:n,style:{width:TOOL_ITEM_SIZE,height:TOOL_ITEM_SIZE,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",padding:0,cursor:"pointer",position:"relative"},children:[(0,_jsxRuntime.jsx)("div",{ref:l,style:{display:"flex",alignItems:"center",justifyContent:"center"},children:s}),r?(0,_jsxRuntime.jsx)("span",{"aria-hidden":true,"data-testid":`buoy-dock-badge-${t}-${r.kind}`,style:{position:"absolute",top:0,right:0,minWidth:12,height:12,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:ATTENTION_COLORS[r.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:r.kind==="needsInput"?"!":""}):null]})}function MinimizedToolsStack({containerWidth:t=32}){const{openApps:o,restore:s}=(0,_AppHostWeb.useAppHost)();const i=o.filter(e=>e.minimized&&e.launchMode!=="toggle-only");const[n,r]=(0,_react.useState)(false);const[l,c]=(0,_react.useState)(false);const a=useStrongestAttention(i.map(e=>e.id));(0,_react.useEffect)(()=>{let e=false;const p=async()=>{const h=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_EXPANDED);if(!e&&h==="true")r(true);if(!e)c(true)};void p();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!l)return;void _sharedUi.persistentStorage.setItem(STORAGE_KEY_EXPANDED,n?"true":"false")},[n,l]);const f=(0,_react.useCallback)(e=>{s(e)},[s]);if(i.length===0)return null;const d=TOOLBAR_PADDING+i.length*TOOL_ITEM_SIZE+(i.length-1)*ICON_GAP+ICON_GAP+COLLAPSE_BUTTON_SIZE+4;const u={backgroundColor:CARD,borderTopLeftRadius:6,borderTopRightRadius:6,borderTop:`1px solid ${TEXT_MUTED}66`,borderLeft:`1px solid ${TEXT_MUTED}66`,borderRight:`1px solid ${TEXT_MUTED}66`,borderBottom:"none",boxSizing:"border-box"};return(0,_jsxRuntime.jsxs)("div",{style:{height:PEEK_HEIGHT,overflow:"visible",position:"relative"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",bottom:"var(--buoy-stack-bottom, 0px)",top:"var(--buoy-stack-top, auto)",left:0,width:t,maxHeight:"var(--buoy-stack-space, calc(100vh - 48px))",visibility:n?"visible":"hidden",height:n?d:0,opacity:n?1:0,overflowY:"auto",overflowX:"hidden",transition:"height 200ms ease, opacity 200ms ease",pointerEvents:n?"auto":"none",...u},children:(0,_jsxRuntime.jsxs)("div",{style:{height:d,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:TOOLBAR_PADDING,gap:ICON_GAP,boxSizing:"border-box"},children:[n&&[...i].reverse().map((e,p)=>(0,_jsxRuntime.jsx)(GlitchToolButton,{id:e.id,title:e.title||e.id,icon:e.icon??(0,_jsxRuntime.jsx)("span",{style:{color:"#fff",fontSize:13},children:(e.title||e.id).slice(0,1).toUpperCase()}),index:p,onPress:()=>f(e.instanceId)},e.instanceId)),(0,_jsxRuntime.jsx)("button",{type:"button","aria-label":"Collapse","data-testid":"buoy-dock-collapse",onClick:()=>r(false),style:{width:"100%",height:COLLAPSE_BUTTON_SIZE,marginTop:3,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",cursor:"pointer",padding:0},children:(0,_jsxRuntime.jsx)(ChevronGlyph,{down:true})})]})}),(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":`Show ${i.length} minimized tools`,"data-testid":"buoy-dock-peek",tabIndex:n?-1:0,"aria-hidden":n,onClick:()=>r(true),style:{position:"absolute",bottom:0,left:0,width:t,height:PEEK_HEIGHT,display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"center",gap:2,cursor:"pointer",padding:0,opacity:n?0:1,transform:n?"scale(0.9)":"scale(1)",transition:"opacity 200ms ease, transform 200ms ease",pointerEvents:n?"none":"auto",...u},children:[(0,_jsxRuntime.jsx)(ChevronGlyph,{}),a?(0,_jsxRuntime.jsx)("span",{"aria-hidden":true,"data-testid":`buoy-dock-peek-attention`,style:{position:"absolute",top:2,right:2,minWidth:11,height:11,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:ATTENTION_COLORS[a.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:a.kind==="needsInput"?"!":""}):null,i.length>1&&(0,_jsxRuntime.jsx)("span",{style:{fontSize:9,fontWeight:600,color:TEXT_MUTED,marginLeft:1},children:i.length})]})]})}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BUOY_BACK_PRIORITY=void 0;exports.ionicHandlesBack=ionicHandlesBack;exports.isBuoyHoldingBackButton=isBuoyHoldingBackButton;exports.useCapacitorBackButton=useCapacitorBackButton;var _react=require("react");var _license=require("@buoy-gg/license");function isBuoyHoldingBackButton(){return globalThis.__BUOY_HOLDS_BACK__===true}const BUOY_BACK_PRIORITY=exports.BUOY_BACK_PRIORITY=99.5;function ionicHandlesBack(){if(typeof document==="undefined")return false;const e=globalThis.Ionic;if(!e&&!document.querySelector("ion-app"))return false;try{return e?.config?.get?.("hardwareBackButton",true)!==false}catch{return true}}function useCapacitorBackButton(e,u){const n=(0,_react.useRef)(u);n.current=u;(0,_react.useEffect)(()=>{if(!e||(0,_license.capacitorPlatform)()!=="android")return;const o=globalThis;o.__BUOY_HOLDS_BACK__=true;let i;if(ionicHandlesBack()){const t=r=>{r.detail?.register?.(BUOY_BACK_PRIORITY,()=>{n.current()})};document.addEventListener("ionBackButton",t);i=()=>document.removeEventListener("ionBackButton",t)}else{const t=(0,_license.capacitorPlugin)("App");if(!t?.addListener){o.__BUOY_HOLDS_BACK__=false;return}let r=false;let c=null;void Promise.resolve(t.addListener("backButton",()=>n.current())).then(a=>{if(r)void a.remove();else c=a}).catch(()=>{});i=()=>{r=true;if(c)void c.remove()}}return()=>{i();o.__BUOY_HOLDS_BACK__=false}},[e])}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CAPACITOR_APP_NAME_KEY=void 0;exports.capacitorBrokerURL=capacitorBrokerURL;exports.capacitorTransportProblem=capacitorTransportProblem;exports.hardwareFromUserAgent=hardwareFromUserAgent;exports.initialHostInfo=initialHostInfo;exports.isAndroidEmulatorUserAgent=isAndroidEmulatorUserAgent;exports.isBundledPage=isBundledPage;exports.persistedAppName=persistedAppName;exports.useHostInfo=useHostInfo;var _react=require("react");var _license=require("@buoy-gg/license");function hardwareFromUserAgent(e,t){if(t==="ios"){if(/iPad/.test(e))return"iPad";if(/iPhone/.test(e))return"iPhone";return null}const r=/Android [\d.]+;\s*([^;)]+?)(?:\s+Build\/|\))/.exec(e);const n=r?.[1]?.trim();if(!n||n==="K")return null;return n}function isAndroidEmulatorUserAgent(e){return/sdk_gphone|Android SDK built for|google_sdk|Emulator|generic_/i.test(e)}function userAgent(){return typeof navigator==="undefined"?"":navigator.userAgent??""}function firstPageTitle(){if(typeof document==="undefined")return null;return document.title||(typeof location==="undefined"?null:location.hostname)||null}const CAPACITOR_APP_NAME_KEY=exports.CAPACITOR_APP_NAME_KEY="@react_buoy_capacitor_app_name";function persistedAppName(e){try{const t=globalThis.localStorage;if(!t)return e;const r=t.getItem(CAPACITOR_APP_NAME_KEY);if(r)return r;if(e)t.setItem(CAPACITOR_APP_NAME_KEY,e)}catch{}return e}function initialHostInfo(){const e=(0,_license.capacitorPlatform)();if(!e){return{platform:"web",appName:firstPageTitle(),hardwareName:"Browser",ready:true}}const t=Boolean((0,_license.capacitorPlugin)("App"));return{platform:e,appName:t?firstPageTitle():persistedAppName(firstPageTitle()),hardwareName:hardwareFromUserAgent(userAgent(),e)??e,extraDeviceInfo:{runtime:"capacitor"},ready:!t&&!(0,_license.capacitorPlugin)("Device")}}function useHostInfo(){const[e,t]=(0,_react.useState)(initialHostInfo);(0,_react.useEffect)(()=>{if(!(0,_license.isCapacitorNative)())return;let r=false;const n=(0,_license.capacitorPlugin)("App");const o=(0,_license.capacitorPlugin)("Device");void Promise.all([n?.getInfo?.().catch(()=>null)??null,o?.getInfo?.().catch(()=>null)??null]).then(([a,s])=>{if(r)return;const c=a?.name?.trim();const u=s?.name?.trim()||s?.model?.trim();t(i=>({...i,appName:c||i.appName,hardwareName:u||i.hardwareName,ready:true}))});return()=>{r=true}},[]);return e}function pageInfo(){if(typeof location==="undefined")return null;const e=globalThis.WEBVIEW_SERVER_URL;return{protocol:location.protocol,hostname:location.hostname,origin:`${location.protocol}//${location.host}`,userAgent:userAgent(),serverUrl:typeof e==="string"?e:null}}function schemeHost(e){if(!e)return null;try{const t=new URL(e);return`${t.protocol}//${t.host}`}catch{return null}}function isBundledPage(e,t){if(e==="ios"){const r=schemeHost(t.serverUrl);return r?r===schemeHost(t.origin):t.protocol==="capacitor:"}return LOOPBACK.has(t.hostname)}const LOOPBACK=new Set(["localhost","127.0.0.1","[::1]","::1"]);function capacitorBrokerURL(e,t,r,n=pageInfo()){if(r==="web"||!n)return e;let o;try{o=new URL(e)}catch{return e}const a=isBundledPage(r,n);if(!t&&a&&o.hostname===n.hostname)o.hostname="localhost";if(r==="android"&&LOOPBACK.has(o.hostname)&&isAndroidEmulatorUserAgent(n.userAgent)){o.hostname="10.0.2.2"}return o.toString().replace(/\/$/,"")}function capacitorTransportProblem(e,t,r=pageInfo()){if(t!=="android"||!r||r.protocol!=="https:")return null;if(!/^(http|ws):/i.test(e))return null;return`[Buoy] Can't reach Buoy Desktop at ${e}. This Android WebView serves the app from https://${r.hostname} and blocks plain http/ws by default. For debug builds, set android.allowMixedContent: true and server.cleartext: true in capacitor.config, then run cap sync.`}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.INSTALL_ID_LENGTH=void 0;exports.buildDeviceIdentity=buildDeviceIdentity;exports.generateInstallId=generateInstallId;exports.getInstallId=getInstallId;exports.loadInstallId=loadInstallId;exports.resetInstallIdForTests=resetInstallIdForTests;exports.useDeviceIdentity=useDeviceIdentity;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");const INSTALL_ID_LENGTH=exports.INSTALL_ID_LENGTH=8;function generateInstallId(){let e="";while(e.length<INSTALL_ID_LENGTH){e+=(Math.random()*16|0).toString(16)}return e}function slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}function buildDeviceIdentity({appName:e,hardwareName:r,platform:t,installId:n,deviceId:a}){const l=slugify(e??"buoy")||"buoy";const s=e??"Buoy Device";const o=r?.trim()||t;if(a){return{deviceId:a,deviceName:`${s} (${o})`}}const i=`${l}-${t}-${n}`;return{deviceId:i,deviceName:`${s} (${o} \xB7 ${n.slice(-4)})`}}function sessionStore(){const e=globalThis;try{return e.sessionStorage??null}catch{return null}}async function loadInstallId({platform:e=_reactNative.Platform.OS,store:r,mint:t=generateInstallId}={}){const n=_sharedUi.devToolsStorageKeys.sync.deviceId();const a=r===void 0?e==="web"?sessionStore():_sharedUi.persistentStorage:r;if(!a)return t();try{const l=await a.getItem(n);if(l&&l.length>0)return l;const s=t();await a.setItem(n,s);return s}catch{return t()}}let installIdPromise=null;function getInstallId(){if(!installIdPromise)installIdPromise=loadInstallId();return installIdPromise}function resetInstallIdForTests(){installIdPromise=null}function useDeviceIdentity(e,r){const t=e?.deviceId;const n=e?.deviceName;const a=r.loadId??getInstallId;const l=r.platform??_reactNative.Platform.OS;const[s,o]=(0,_react.useState)(null);(0,_react.useEffect)(()=>{if(t)return;let i=false;a().then(c=>{if(!i)o(c)});return()=>{i=true}},[t,a]);return(0,_react.useMemo)(()=>{if(!t&&!s)return null;const i=buildDeviceIdentity({appName:r.appName,hardwareName:r.hardwareName,platform:l,installId:s??"",deviceId:t});return n?{...i,deviceName:n}:i},[t,n,s,r.appName,r.hardwareName,l])}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.INSTALL_ID_LENGTH=void 0;exports.buildDeviceIdentity=buildDeviceIdentity;exports.generateInstallId=generateInstallId;exports.getInstallId=getInstallId;exports.loadInstallId=loadInstallId;exports.resetInstallIdForTests=resetInstallIdForTests;exports.useDeviceIdentity=useDeviceIdentity;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _license=require("@buoy-gg/license");const INSTALL_ID_LENGTH=exports.INSTALL_ID_LENGTH=8;function generateInstallId(){let e="";while(e.length<INSTALL_ID_LENGTH){e+=(Math.random()*16|0).toString(16)}return e}function slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}function buildDeviceIdentity({appName:e,hardwareName:r,platform:t,installId:n,deviceId:a}){const l=slugify(e??"buoy")||"buoy";const s=e??"Buoy Device";const i=r?.trim()||t;if(a){return{deviceId:a,deviceName:`${s} (${i})`}}const o=`${l}-${t}-${n}`;return{deviceId:o,deviceName:`${s} (${i} \xB7 ${n.slice(-4)})`}}function sessionStore(){const e=globalThis;try{return e.sessionStorage??null}catch{return null}}function localStore(){const e=globalThis;try{return e.localStorage??null}catch{return null}}async function loadInstallId({platform:e=_reactNative.Platform.OS,store:r,mint:t=generateInstallId}={}){const n=_sharedUi.devToolsStorageKeys.sync.deviceId();const a=r===void 0?(0,_license.isCapacitorNative)()?localStore():e==="web"?sessionStore():_sharedUi.persistentStorage:r;if(!a)return t();try{const l=await a.getItem(n);if(l&&l.length>0)return l;const s=t();await a.setItem(n,s);return s}catch{return t()}}let installIdPromise=null;function getInstallId(){if(!installIdPromise)installIdPromise=loadInstallId();return installIdPromise}function resetInstallIdForTests(){installIdPromise=null}function useDeviceIdentity(e,r){const t=e?.deviceId;const n=e?.deviceName;const a=r.loadId??getInstallId;const l=r.platform??_reactNative.Platform.OS;const[s,i]=(0,_react.useState)(null);(0,_react.useEffect)(()=>{if(t)return;let o=false;a().then(c=>{if(!o)i(c)});return()=>{o=true}},[t,a]);return(0,_react.useMemo)(()=>{if(!t&&!s)return null;const o=buildDeviceIdentity({appName:r.appName,hardwareName:r.hardwareName,platform:l,installId:s??"",deviceId:t});return n?{...o,deviceName:n}:o},[t,n,s,r.appName,r.hardwareName,l])}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialMenu=DialMenu;var _react=require("react");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _sharedUi=require("@buoy-gg/shared-ui");var _DialHyperspace=require("./DialHyperspace.js");var _OnboardingTooltipWeb=require("./OnboardingTooltip.web.js");var _jsxRuntime=require("react/jsx-runtime");const DIAL_BACKGROUND_FOCUS={x:.5,y:.5};const SETTINGS_TOOLTIP_KEY="@react_buoy_settings_tooltip_shown";let keyframesInjected=false;function injectKeyframes(){if(keyframesInjected||typeof document==="undefined")return;const o=document.createElement("style");o.textContent=(0,_floatingToolsReact.getDialCSSKeyframesString)();document.head.appendChild(o);keyframesInjected=true}const easeOutCubic=o=>1-Math.pow(1-o,3);const easeInCubic=o=>o*o*o;function DialIconItem({icon:o,index:l,totalIcons:k,position:f,progress:s,onPress:y}){const[w,D]=(0,_react.useState)(false);const[M,v]=(0,_react.useState)(false);const S=!o.icon&&o.id.startsWith("empty-");const $=!S&&o.unavailable===true;const h=!S&&!$;const{icons:F}=_floatingToolsReact.dialAnimationConfig;const m=(0,_floatingToolsReact.getIconStaggerInputRange)(l,k);let c=0;if(s<=m[1]){c=0}else if(s<=m[2]){c=(s-m[1])/(m[2]-m[1])}else{c=1}c=Math.max(0,Math.min(1,c));const b=_floatingToolsReact.DIAL_ICON_SIZE;const q=F.pressIn.scale;const B=1.1;const W=c*(M?q:w?B:1);let T=0;if(c<=0){T=0}else if(c<=.3){T=c}else{T=.3+(c-.3)*(.7/.7)}const H=f.x*c;const U=f.y*c;return(0,_jsxRuntime.jsx)("button",{role:"menuitem","aria-label":S?"Empty slot":o.name,"aria-disabled":!h,tabIndex:h?0:-1,onClick:h?y:void 0,onMouseEnter:()=>h&&D(true),onMouseLeave:()=>{D(false);v(false)},onMouseDown:()=>h&&v(true),onMouseUp:()=>v(false),style:{position:"absolute",left:"50%",top:"50%",width:b,height:b,marginLeft:-b/2,marginTop:-b/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:h?"pointer":"default",transform:`translate(${H}px, ${U}px) scale(${W})`,opacity:T,transition:w||M?"transform 100ms ease":"none",background:"none",border:"none",padding:0},children:S?(0,_jsxRuntime.jsx)("div",{style:{width:_floatingToolsReact.dialStyles.emptySlot.dotSize,height:_floatingToolsReact.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsReact.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsReact.dialColors.emptyDotBackground,border:`${_floatingToolsReact.dialStyles.emptySlot.borderWidth}px solid ${_floatingToolsReact.dialColors.emptyDotBorder}`}}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:_floatingToolsReact.dialStyles.icon.gradientBgOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:_floatingToolsReact.dialStyles.icon.innerGlowOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{marginBottom:_floatingToolsReact.dialStyles.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:w?"brightness(1.2)":"none"},children:o.icon}),(0,_jsxRuntime.jsx)("span",{style:{fontSize:o.name.length>8?Math.max(_floatingToolsReact.dialStyles.icon.label.fontSize*.7,_floatingToolsReact.dialStyles.icon.label.fontSize*8/o.name.length):_floatingToolsReact.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,color:_floatingToolsReact.dialColors.iconLabel,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,marginTop:_floatingToolsReact.dialStyles.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:o.name}),$&&(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.icon.label.fontSize-1,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,color:_floatingToolsReact.floatingToolsColors.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})}function PagerChevron({side:o,color:l}){const k=o==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]];return(0,_jsxRuntime.jsx)("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:k.map(([f,s,y,w],D)=>(0,_jsxRuntime.jsx)("line",{x1:f,y1:s,x2:y,y2:w,stroke:l,strokeWidth:2},D))})}function PagerButton({side:o,disabled:l,onClick:k}){const[f,s]=(0,_react.useState)(false);const y=l?_floatingToolsReact.dialColors.emptyDotBorder:_floatingToolsReact.dialColors.accent;return(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":`${o==="prev"?"Previous":"Next"} dial page`,disabled:l,onClick:k,onMouseDown:()=>!l&&s(true),onMouseUp:()=>s(false),onMouseLeave:()=>s(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${_floatingToolsReact.dialColors.dialBorder}`,backgroundColor:_floatingToolsReact.dialColors.dialBackground,color:l?_floatingToolsReact.dialColors.iconLabelMuted:_floatingToolsReact.dialColors.centerText,fontSize:12,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:1.5,textTransform:"uppercase",cursor:l?"default":"pointer",opacity:l?.4:1,boxShadow:l?"none":`0 0 8px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.4)}`,transform:f?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[o==="prev"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"prev",color:y}),o==="prev"?"PREV":"NEXT",o==="next"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"next",color:y})]})}function DialMenu({icons:o,onClose:l,centerLabel:k="MENU",onCenterPress:f,settingsOpen:s=false,hintsDisabled:y=false}){const{id:w}=(0,_sharedUi.useToolBackground)();const[D,M]=(0,_react.useState)(0);const[v,S]=(0,_react.useState)(0);const[$,h]=(0,_react.useState)(0);const[F,m]=(0,_react.useState)(0);const[c,b]=(0,_react.useState)(0);const[q,B]=(0,_react.useState)(1);const[W,T]=(0,_react.useState)(false);const[H,U]=(0,_react.useState)(false);const[ne,ie]=(0,_react.useState)(false);const K=(0,_react.useRef)(null);const J=(0,_react.useRef)(null);const g=(0,_react.useRef)(null);const O=(0,_react.useRef)(false);const{entrance:E,exit:L,interaction:P}=_floatingToolsReact.dialAnimationConfig;const ae=(0,_floatingToolsReact.getDialCSSAnimationStyles)();const[N,se]=(0,_react.useState)(()=>({width:window.innerWidth,height:window.innerHeight}));(0,_react.useEffect)(()=>{const t=()=>se({width:window.innerWidth,height:window.innerHeight});window.addEventListener("resize",t);return()=>window.removeEventListener("resize",t)},[]);const i=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getDialLayout)({screenWidth:N.width,maxCircleSize:Math.max(120,Math.min(320,N.height-96))}),[N]);const re=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getGridLineRotations)(),[]);const le=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getAllIconPositions)(_floatingToolsReact.MAX_DIAL_SLOTS,i.iconRadius),[i.iconRadius]);const[ce,de]=(0,_react.useState)(0);const A=Math.max(1,Math.ceil(o.length/_floatingToolsReact.MAX_DIAL_SLOTS));const x=Math.min(ce,A-1);const Q=(0,_react.useMemo)(()=>{const t=x*_floatingToolsReact.MAX_DIAL_SLOTS;const e=[...o.slice(t,t+_floatingToolsReact.MAX_DIAL_SLOTS)];while(e.length<_floatingToolsReact.MAX_DIAL_SLOTS){e.push({id:`empty-${e.length}`,name:"",icon:null,onPress:()=>{}})}return e},[o,x]);(0,_react.useEffect)(()=>{injectKeyframes()},[]);(0,_react.useEffect)(()=>{const t=E.backdrop.duration;const e=E.dial.rotation.duration;const d=E.centerButton.delay;const a=E.icons.delay;const r=E.icons.duration;const u=performance.now();const p=j=>{const n=j-u;M(Math.min(1,n/t));const C=Math.min(1,n/400);let I=easeOutCubic(C)*1.1;if(C>.7){I-=(C-.7)*.33}if(C>=1)I=1;S(Math.max(0,Math.min(1.05,I)));const z=Math.min(1,n/e);h(easeOutCubic(z)*360);if(n>=d){const R=Math.min(1,(n-d)/300);let Z=easeOutCubic(R)*1.15;if(R>.6){Z-=(R-.6)*.375}if(R>=1)Z=1;m(Math.max(0,Math.min(1.05,Z)))}if(n>=a){const R=Math.min(1,(n-a)/r);b(easeOutCubic(R))}const Y=a+r;if(n<Y){g.current=requestAnimationFrame(p)}else{M(1);S(1);h(360);m(1);b(1);ie(true)}};g.current=requestAnimationFrame(p);return()=>{if(g.current)cancelAnimationFrame(g.current)}},[]);const _=(0,_react.useCallback)(()=>{if(O.current)return;O.current=true;U(true);if(g.current){cancelAnimationFrame(g.current)}const t=performance.now();const e=L.icons.duration;const d=L.centerButton.duration;const a=L.dialScale.duration;const r=Math.max(d,a);const u=L.backdrop.duration;const p=j=>{const n=j-t;if(n<e){const z=easeInCubic(n/e);b(1-z);g.current=requestAnimationFrame(p);return}const C=e;if(n<C+r){b(0);const z=Math.min(1,(n-C)/d);const Y=Math.min(1,(n-C)/a);m(1-easeInCubic(z));S(1-easeInCubic(Y));g.current=requestAnimationFrame(p);return}const I=C+r;if(n<I+u){S(0);m(0);const z=(n-I)/u;M(1-z);g.current=requestAnimationFrame(p);return}M(0);l()};g.current=requestAnimationFrame(p)},[L,l]);(0,_react.useEffect)(()=>{const t=document.activeElement;const e=K.current;return()=>{if(t?.isConnected&&(document.activeElement===document.body||e?.contains(document.activeElement))){t.focus()}}},[]);(0,_react.useEffect)(()=>{if(s)return;J.current?.focus();const t=e=>{const d=K.current;if(!d)return;if(e.key==="Escape"){e.preventDefault();_()}else if(e.key==="Tab"){const a=Array.from(d.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(p=>p.getClientRects().length>0);const r=a[0];const u=a[a.length-1];if(!d.contains(document.activeElement)||(e.shiftKey?document.activeElement===r:document.activeElement===u)){e.preventDefault();(e.shiftKey?u:r)?.focus()}}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(e.key)){const a=Array.from(d.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])'));const r=a.indexOf(document.activeElement);if(r<0||!a.length)return;e.preventDefault();const u=e.key==="Home"?0:e.key==="End"?a.length-1:(r+(e.key==="ArrowRight"||e.key==="ArrowDown"?1:-1)+a.length)%a.length;a[u].focus()}};document.addEventListener("keydown",t);return()=>document.removeEventListener("keydown",t)},[_,s]);const[X,ee]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{if(y)return;let t=false;const e=setTimeout(async()=>{const d=await _sharedUi.persistentStorage.getItem(SETTINGS_TOOLTIP_KEY);if(!t&&!d)ee(true)},1200);return()=>{t=true;clearTimeout(e)}},[y]);const V=(0,_react.useCallback)(()=>{ee(false);void _sharedUi.persistentStorage.setItem(SETTINGS_TOOLTIP_KEY,"true")},[]);(0,_react.useEffect)(()=>{if(s&&X){V()}},[s,X,V]);const ue=(0,_react.useCallback)(t=>{if(t.id.startsWith("empty-")||O.current)return;const[e,d]=P.iconSelect.pulse;const a=performance.now();const r=150;const u=p=>{const j=p-a;if(j<r){const n=easeOutCubic(j/r);B(1-(1-e.scale)*n);requestAnimationFrame(u)}else if(j<r*2){const n=easeOutCubic((j-r)/r);B(e.scale+(d.scale-e.scale)*n);requestAnimationFrame(u)}else{B(1)}};requestAnimationFrame(u);setTimeout(()=>{t.onPress();_()},P.iconSelect.actionDelay)},[P.iconSelect,_]);const te=(0,_react.useCallback)(t=>{if(O.current)return;const e=Math.max(0,Math.min(t,A-1));if(e!==x)de(e)},[A,x]);const G=i.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio;const oe=i.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRatio;const pe=i.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio/2+6;const fe=ne&&!H;return(0,_jsxRuntime.jsxs)("div",{ref:K,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[(0,_jsxRuntime.jsx)("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:_,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:_floatingToolsReact.dialColors.dialBackdrop,opacity:D}}),(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-i.circleSize/2,bottom:80,width:i.circleSize,height:i.circleSize,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialBackground,border:`${_floatingToolsReact.dialStyles.circle.borderWidth}px solid ${_floatingToolsReact.dialColors.dialBorder}`,boxShadow:`0 0 ${_floatingToolsReact.dialStyles.circle.shadowRadius}px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,_floatingToolsReact.dialStyles.circle.shadowOpacity)}`,transform:`scale(${v}) rotate(${$}deg)`,opacity:v>.01?1:0,overflow:"hidden"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:_floatingToolsReact.dialStyles.gradientLayers[0].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:_floatingToolsReact.dialStyles.gradientLayers[1].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:_floatingToolsReact.dialStyles.gradientLayers[2].opacity}}),re.map(t=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:_floatingToolsReact.dialStyles.grid.lineHeight,transform:`rotate(${t}deg)`,transformOrigin:"center"},children:["left","right"].map(e=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:0,[e]:0,width:`calc(50% - ${pe}px)`,height:_floatingToolsReact.dialStyles.grid.lineHeight,backgroundColor:_floatingToolsReact.dialColors.dialGridLine}},e))},t)),(0,_jsxRuntime.jsx)("div",{"data-testid":"dial-background","data-background":w,style:{position:"absolute",inset:0,pointerEvents:"none"},children:w==="hyperspace"?(0,_jsxRuntime.jsx)(_DialHyperspace.DialHyperspace,{size:i.circleSize}):(0,_jsxRuntime.jsx)(_sharedUi.ToolBackground,{focus:DIAL_BACKGROUND_FOCUS})}),Q.map((t,e)=>(0,_jsxRuntime.jsx)(DialIconItem,{icon:t,index:e,totalIcons:Q.length,position:le[e],progress:c,onPress:()=>ue(t)},e)),(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",top:"50%",width:G,height:G,marginLeft:-G/2,marginTop:-G/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:_floatingToolsReact.dialColors.hubHalo,borderRadius:i.buttonSize,overflow:"hidden",transform:`scale(${F*q})`,opacity:F>.01?1:0},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:.5,borderRadius:i.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:.3,borderRadius:i.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:.2,borderRadius:i.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{width:oe,height:oe,borderRadius:i.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRadiusRatio,backgroundColor:_floatingToolsReact.dialColors.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:(0,_jsxRuntime.jsx)("button",{ref:J,type:"button","aria-label":s?"Close settings":"Open settings",disabled:!f,onClick:f,onMouseEnter:()=>T(true),onMouseLeave:()=>T(false),style:{border:0,padding:0,background:"transparent",width:i.buttonSize,height:i.buttonSize,borderRadius:i.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:f?"pointer":"default",transform:W?`scale(${P.centerHover.scale})`:"scale(1)",transition:`transform ${P.centerHover.duration}ms ease`,animation:fe&&!W?ae.pulse:"none"},children:s?(0,_jsxRuntime.jsxs)("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize-2,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[(0,_jsxRuntime.jsx)("span",{style:{marginBottom:-2},children:"CLOSE"}),(0,_jsxRuntime.jsx)("span",{style:{marginTop:-2},children:"SETTINGS"})]}):(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase"},children:k})})})]})]}),A>1&&(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-i.circleSize/2,top:"calc(100% - 64px)",width:i.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,v),transform:`scale(${Math.min(1,v)})`},children:[(0,_jsxRuntime.jsx)(PagerButton,{side:"prev",disabled:x<=0,onClick:()=>te(x-1)}),(0,_jsxRuntime.jsxs)("span",{style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:2,color:_floatingToolsReact.dialColors.centerText,textShadow:`0 0 6px ${_floatingToolsReact.dialColors.centerTextGlow}`},children:[String(x+1).padStart(2,"0"),(0,_jsxRuntime.jsxs)("span",{style:{color:_floatingToolsReact.dialColors.iconLabelMuted,textShadow:"none"},children:[" / ",String(A).padStart(2,"0")]})]}),(0,_jsxRuntime.jsx)(PagerButton,{side:"next",disabled:x>=A-1,onClick:()=>te(x+1)})]}),X&&!s&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:V,showArrow:false})]})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialMenu=DialMenu;var _react=require("react");var _dialA11y=require("./dialA11y.js");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _sharedUi=require("@buoy-gg/shared-ui");var _DialHyperspace=require("./DialHyperspace.js");var _OnboardingTooltipWeb=require("./OnboardingTooltip.web.js");var _jsxRuntime=require("react/jsx-runtime");const DIAL_BACKGROUND_FOCUS={x:.5,y:.5};const SETTINGS_TOOLTIP_KEY="@react_buoy_settings_tooltip_shown";let keyframesInjected=false;function injectKeyframes(){if(keyframesInjected||typeof document==="undefined")return;const t=document.createElement("style");t.textContent=(0,_floatingToolsReact.getDialCSSKeyframesString)();document.head.appendChild(t);keyframesInjected=true}const easeOutCubic=t=>1-Math.pow(1-t,3);const easeInCubic=t=>t*t*t;function DialIconItem({icon:t,index:l,totalIcons:k,position:f,progress:r,onPress:y}){const[v,z]=(0,_react.useState)(false);const[T,S]=(0,_react.useState)(false);const h=!t.icon&&t.id.startsWith("empty-");const _=!h&&t.unavailable===true;const b=!h&&!_;const{icons:F}=_floatingToolsReact.dialAnimationConfig;const m=(0,_floatingToolsReact.getIconStaggerInputRange)(l,k);let c=0;if(r<=m[1]){c=0}else if(r<=m[2]){c=(r-m[1])/(m[2]-m[1])}else{c=1}c=Math.max(0,Math.min(1,c));const x=_floatingToolsReact.DIAL_ICON_SIZE;const G=F.pressIn.scale;const B=1.1;const W=c*(T?G:v?B:1);let A=0;if(c<=0){A=0}else if(c<=.3){A=c}else{A=.3+(c-.3)*(.7/.7)}const H=f.x*c;const U=f.y*c;return(0,_jsxRuntime.jsx)("button",{role:"menuitem","aria-label":h?"Empty slot":(0,_dialA11y.dialAccessibilityLabel)(t.id,t.name),"data-testid":t.id?`buoy-dial-${t.id}`:void 0,"aria-disabled":!b,tabIndex:b?0:-1,onClick:b?y:void 0,onPointerEnter:K=>b&&K.pointerType==="mouse"&&z(true),onPointerLeave:()=>{z(false);S(false)},onPointerDown:()=>b&&S(true),onPointerUp:()=>S(false),onPointerCancel:()=>S(false),style:{position:"absolute",left:"50%",top:"50%",width:x,height:x,marginLeft:-x/2,marginTop:-x/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:b?"pointer":"default",transform:`translate(${H}px, ${U}px) scale(${W})`,opacity:A,transition:v||T?"transform 100ms ease":"none",background:"none",border:"none",padding:0},children:h?(0,_jsxRuntime.jsx)("div",{style:{width:_floatingToolsReact.dialStyles.emptySlot.dotSize,height:_floatingToolsReact.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsReact.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsReact.dialColors.emptyDotBackground,border:`${_floatingToolsReact.dialStyles.emptySlot.borderWidth}px solid ${_floatingToolsReact.dialColors.emptyDotBorder}`}}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:_floatingToolsReact.dialStyles.icon.gradientBgOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:_floatingToolsReact.dialStyles.icon.innerGlowOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{marginBottom:_floatingToolsReact.dialStyles.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:v?"brightness(1.2)":"none"},children:t.icon}),(0,_jsxRuntime.jsx)("span",{style:{fontSize:t.name.length>8?Math.max(_floatingToolsReact.dialStyles.icon.label.fontSize*.7,_floatingToolsReact.dialStyles.icon.label.fontSize*8/t.name.length):_floatingToolsReact.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,color:_floatingToolsReact.dialColors.iconLabel,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,marginTop:_floatingToolsReact.dialStyles.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:t.name}),_&&(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.icon.label.fontSize-1,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,color:_floatingToolsReact.floatingToolsColors.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})}function PagerChevron({side:t,color:l}){const k=t==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]];return(0,_jsxRuntime.jsx)("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:k.map(([f,r,y,v],z)=>(0,_jsxRuntime.jsx)("line",{x1:f,y1:r,x2:y,y2:v,stroke:l,strokeWidth:2},z))})}function PagerButton({side:t,disabled:l,onClick:k}){const[f,r]=(0,_react.useState)(false);const y=l?_floatingToolsReact.dialColors.emptyDotBorder:_floatingToolsReact.dialColors.accent;return(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":`${t==="prev"?"Previous":"Next"} dial page`,"data-testid":`buoy-dial-${t}`,disabled:l,onClick:k,onPointerDown:()=>!l&&r(true),onPointerUp:()=>r(false),onPointerLeave:()=>r(false),onPointerCancel:()=>r(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${_floatingToolsReact.dialColors.dialBorder}`,backgroundColor:_floatingToolsReact.dialColors.dialBackground,color:l?_floatingToolsReact.dialColors.iconLabelMuted:_floatingToolsReact.dialColors.centerText,fontSize:12,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:1.5,textTransform:"uppercase",cursor:l?"default":"pointer",opacity:l?.4:1,boxShadow:l?"none":`0 0 8px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.4)}`,transform:f?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[t==="prev"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"prev",color:y}),t==="prev"?"PREV":"NEXT",t==="next"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"next",color:y})]})}function DialMenu({icons:t,onClose:l,centerLabel:k="MENU",onCenterPress:f,settingsOpen:r=false,hintsDisabled:y=false}){const{id:v}=(0,_sharedUi.useToolBackground)();const[z,T]=(0,_react.useState)(0);const[S,h]=(0,_react.useState)(0);const[_,b]=(0,_react.useState)(0);const[F,m]=(0,_react.useState)(0);const[c,x]=(0,_react.useState)(0);const[G,B]=(0,_react.useState)(1);const[W,A]=(0,_react.useState)(false);const[H,U]=(0,_react.useState)(false);const[K,ie]=(0,_react.useState)(false);const N=(0,_react.useRef)(null);const Q=(0,_react.useRef)(null);const g=(0,_react.useRef)(null);const O=(0,_react.useRef)(false);const{entrance:M,exit:E,interaction:L}=_floatingToolsReact.dialAnimationConfig;const ae=(0,_floatingToolsReact.getDialCSSAnimationStyles)();const[X,re]=(0,_react.useState)(()=>({width:window.innerWidth,height:window.innerHeight}));(0,_react.useEffect)(()=>{const o=()=>re({width:window.innerWidth,height:window.innerHeight});window.addEventListener("resize",o);return()=>window.removeEventListener("resize",o)},[]);const i=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getDialLayout)({screenWidth:X.width,maxCircleSize:Math.max(120,Math.min(320,X.height-96))}),[X]);const se=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getGridLineRotations)(),[]);const le=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getAllIconPositions)(_floatingToolsReact.MAX_DIAL_SLOTS,i.iconRadius),[i.iconRadius]);const[ce,de]=(0,_react.useState)(0);const I=Math.max(1,Math.ceil(t.length/_floatingToolsReact.MAX_DIAL_SLOTS));const C=Math.min(ce,I-1);const ee=(0,_react.useMemo)(()=>{const o=C*_floatingToolsReact.MAX_DIAL_SLOTS;const e=[...t.slice(o,o+_floatingToolsReact.MAX_DIAL_SLOTS)];while(e.length<_floatingToolsReact.MAX_DIAL_SLOTS){e.push({id:`empty-${e.length}`,name:"",icon:null,onPress:()=>{}})}return e},[t,C]);(0,_react.useEffect)(()=>{injectKeyframes()},[]);(0,_react.useEffect)(()=>{const o=M.backdrop.duration;const e=M.dial.rotation.duration;const d=M.centerButton.delay;const a=M.icons.delay;const s=M.icons.duration;const u=performance.now();const p=j=>{const n=j-u;T(Math.min(1,n/o));const w=Math.min(1,n/400);let R=easeOutCubic(w)*1.1;if(w>.7){R-=(w-.7)*.33}if(w>=1)R=1;h(Math.max(0,Math.min(1.05,R)));const D=Math.min(1,n/e);b(easeOutCubic(D)*360);if(n>=d){const P=Math.min(1,(n-d)/300);let J=easeOutCubic(P)*1.15;if(P>.6){J-=(P-.6)*.375}if(P>=1)J=1;m(Math.max(0,Math.min(1.05,J)))}if(n>=a){const P=Math.min(1,(n-a)/s);x(easeOutCubic(P))}const Z=a+s;if(n<Z){g.current=requestAnimationFrame(p)}else{T(1);h(1);b(360);m(1);x(1);ie(true)}};g.current=requestAnimationFrame(p);return()=>{if(g.current)cancelAnimationFrame(g.current)}},[]);const $=(0,_react.useCallback)(()=>{if(O.current)return;O.current=true;U(true);if(g.current){cancelAnimationFrame(g.current)}const o=performance.now();const e=E.icons.duration;const d=E.centerButton.duration;const a=E.dialScale.duration;const s=Math.max(d,a);const u=E.backdrop.duration;const p=j=>{const n=j-o;if(n<e){const D=easeInCubic(n/e);x(1-D);g.current=requestAnimationFrame(p);return}const w=e;if(n<w+s){x(0);const D=Math.min(1,(n-w)/d);const Z=Math.min(1,(n-w)/a);m(1-easeInCubic(D));h(1-easeInCubic(Z));g.current=requestAnimationFrame(p);return}const R=w+s;if(n<R+u){h(0);m(0);const D=(n-R)/u;T(1-D);g.current=requestAnimationFrame(p);return}T(0);l()};g.current=requestAnimationFrame(p)},[E,l]);(0,_react.useEffect)(()=>{const o=document.activeElement;const e=N.current;return()=>{if(o?.isConnected&&(document.activeElement===document.body||e?.contains(document.activeElement))){o.focus()}}},[]);(0,_react.useEffect)(()=>{if(r)return;Q.current?.focus();const o=e=>{const d=N.current;if(!d)return;if(e.key==="Escape"){e.preventDefault();$()}else if(e.key==="Tab"){const a=Array.from(d.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(p=>p.getClientRects().length>0);const s=a[0];const u=a[a.length-1];if(!d.contains(document.activeElement)||(e.shiftKey?document.activeElement===s:document.activeElement===u)){e.preventDefault();(e.shiftKey?u:s)?.focus()}}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(e.key)){const a=Array.from(d.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])'));const s=a.indexOf(document.activeElement);if(s<0||!a.length)return;e.preventDefault();const u=e.key==="Home"?0:e.key==="End"?a.length-1:(s+(e.key==="ArrowRight"||e.key==="ArrowDown"?1:-1)+a.length)%a.length;a[u].focus()}};document.addEventListener("keydown",o);return()=>document.removeEventListener("keydown",o)},[$,r]);const[V,te]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{if(y)return;let o=false;const e=setTimeout(async()=>{const d=await _sharedUi.persistentStorage.getItem(SETTINGS_TOOLTIP_KEY);if(!o&&!d)te(true)},1200);return()=>{o=true;clearTimeout(e)}},[y]);const Y=(0,_react.useCallback)(()=>{te(false);void _sharedUi.persistentStorage.setItem(SETTINGS_TOOLTIP_KEY,"true")},[]);(0,_react.useEffect)(()=>{if(r&&V){Y()}},[r,V,Y]);const ue=(0,_react.useCallback)(o=>{if(o.id.startsWith("empty-")||O.current)return;const[e,d]=L.iconSelect.pulse;const a=performance.now();const s=150;const u=p=>{const j=p-a;if(j<s){const n=easeOutCubic(j/s);B(1-(1-e.scale)*n);requestAnimationFrame(u)}else if(j<s*2){const n=easeOutCubic((j-s)/s);B(e.scale+(d.scale-e.scale)*n);requestAnimationFrame(u)}else{B(1)}};requestAnimationFrame(u);setTimeout(()=>{o.onPress();$()},L.iconSelect.actionDelay)},[L.iconSelect,$]);const oe=(0,_react.useCallback)(o=>{if(O.current)return;const e=Math.max(0,Math.min(o,I-1));if(e!==C)de(e)},[I,C]);const q=i.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio;const ne=i.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRatio;const pe=i.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio/2+6;const fe=K&&!H;return(0,_jsxRuntime.jsxs)("div",{ref:N,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[(0,_jsxRuntime.jsx)("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:$,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:_floatingToolsReact.dialColors.dialBackdrop,opacity:z}}),(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-i.circleSize/2,bottom:80,width:i.circleSize,height:i.circleSize,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialBackground,border:`${_floatingToolsReact.dialStyles.circle.borderWidth}px solid ${_floatingToolsReact.dialColors.dialBorder}`,boxShadow:`0 0 ${_floatingToolsReact.dialStyles.circle.shadowRadius}px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,_floatingToolsReact.dialStyles.circle.shadowOpacity)}`,transform:`scale(${S}) rotate(${_}deg)`,opacity:S>.01?1:0,overflow:"hidden"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:_floatingToolsReact.dialStyles.gradientLayers[0].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:_floatingToolsReact.dialStyles.gradientLayers[1].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:_floatingToolsReact.dialStyles.gradientLayers[2].opacity}}),se.map(o=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:_floatingToolsReact.dialStyles.grid.lineHeight,transform:`rotate(${o}deg)`,transformOrigin:"center"},children:["left","right"].map(e=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:0,[e]:0,width:`calc(50% - ${pe}px)`,height:_floatingToolsReact.dialStyles.grid.lineHeight,backgroundColor:_floatingToolsReact.dialColors.dialGridLine}},e))},o)),(0,_jsxRuntime.jsx)("div",{"data-testid":"dial-background","data-background":v,style:{position:"absolute",inset:0,pointerEvents:"none"},children:v==="hyperspace"?(0,_jsxRuntime.jsx)(_DialHyperspace.DialHyperspace,{size:i.circleSize}):(0,_jsxRuntime.jsx)(_sharedUi.ToolBackground,{focus:DIAL_BACKGROUND_FOCUS})}),ee.map((o,e)=>(0,_jsxRuntime.jsx)(DialIconItem,{icon:o,index:e,totalIcons:ee.length,position:le[e],progress:c,onPress:()=>ue(o)},e)),(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",top:"50%",width:q,height:q,marginLeft:-q/2,marginTop:-q/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:_floatingToolsReact.dialColors.hubHalo,borderRadius:i.buttonSize,overflow:"hidden",transform:`scale(${F*G})`,opacity:F>.01?1:0},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:.5,borderRadius:i.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:.3,borderRadius:i.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:.2,borderRadius:i.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{width:ne,height:ne,borderRadius:i.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRadiusRatio,backgroundColor:_floatingToolsReact.dialColors.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:(0,_jsxRuntime.jsx)("button",{ref:Q,type:"button","aria-label":r?"Close Settings":"Open Dev Tools Settings",disabled:!f,onClick:f,onPointerEnter:o=>o.pointerType==="mouse"&&A(true),onPointerLeave:()=>A(false),style:{border:0,padding:0,background:"transparent",width:i.buttonSize,height:i.buttonSize,borderRadius:i.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:f?"pointer":"default",transform:W?`scale(${L.centerHover.scale})`:"scale(1)",transition:`transform ${L.centerHover.duration}ms ease`,animation:fe&&!W?ae.pulse:"none"},children:r?(0,_jsxRuntime.jsxs)("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize-2,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[(0,_jsxRuntime.jsx)("span",{style:{marginBottom:-2},children:"CLOSE"}),(0,_jsxRuntime.jsx)("span",{style:{marginTop:-2},children:"SETTINGS"})]}):(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase"},children:k})})})]})]}),I>1&&(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-i.circleSize/2,top:"calc(100% - 64px)",width:i.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,S),transform:`scale(${Math.min(1,S)})`},children:[(0,_jsxRuntime.jsx)(PagerButton,{side:"prev",disabled:C<=0,onClick:()=>oe(C-1)}),(0,_jsxRuntime.jsxs)("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:2,color:_floatingToolsReact.dialColors.centerText,textShadow:`0 0 6px ${_floatingToolsReact.dialColors.centerTextGlow}`},children:[String(C+1).padStart(2,"0"),(0,_jsxRuntime.jsxs)("span",{style:{color:_floatingToolsReact.dialColors.iconLabelMuted,textShadow:"none"},children:[" / ",String(I).padStart(2,"0")]})]}),(0,_jsxRuntime.jsx)(PagerButton,{side:"next",disabled:C>=I-1,onClick:()=>oe(C+1)})]}),V&&!r&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:Y,showArrow:false})]})}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialIcon=void 0;var _react=require("react");var _reactNative=require("react-native");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _jsxRuntime=require("react/jsx-runtime");const DIAL_A11Y={network:"Network",images:"Images","image-overlay":"Image Overlay",assets:"Assets",query:"React Query",storage:"Storage",env:"Env",console:"Console",events:"Events",redux:"Redux",zustand:"Zustand",jotai:"Jotai","route-events":"Routes","time-machine":"Time Machine",clock:"Clock",permissions:"Permissions","highlight-updates":"Highlight Updates","debug-borders":"Debug Borders","perf-monitor":"Bench HUD","js-top":"JS Top","js-top-modal":"JS Top",impersonate:"Impersonate","perf-monitor-modal":"Bench"};function dialAccessibilityLabel(t,e){if(t&&DIAL_A11Y[t])return DIAL_A11Y[t];return e}const VIEW_SIZE=_floatingToolsCore.DIAL_ICON_SIZE;const DialIcon=({index:t,icon:e,iconsProgress:u,onPress:y,totalIcons:s,active:I})=>{const r=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current;const{width:g}=(0,_reactNative.useWindowDimensions)();const a=(0,_react.useMemo)(()=>(0,_floatingToolsCore.getDialLayout)({screenWidth:g}),[g]);const f=_floatingToolsCore.dialAnimationConfig?.icons??{pressIn:{scale:.95,damping:15,stiffness:400},pressOut:{scale:1,damping:15,stiffness:400}};const{pressIn:l,pressOut:c}=f;const b=()=>{_reactNative.Animated.spring(r,{toValue:l.scale,damping:l.damping,stiffness:l.stiffness,useNativeDriver:true}).start()};const S=()=>{_reactNative.Animated.spring(r,{toValue:c.scale,damping:c.damping,stiffness:c.stiffness,useNativeDriver:true}).start()};const o=(0,_react.useMemo)(()=>{const d=(0,_floatingToolsCore.getIconPosition)(t,s,a.iconRadius,_floatingToolsCore.DIAL_START_ANGLE);const{x:w,y:j,angle:n}=d;const p=a.iconRadius;const v=(0,_floatingToolsCore.getIconStaggerInputRange)(t,s);const i=u.interpolate({inputRange:v,outputRange:[0,0,1,1],extrapolate:"clamp"});const m=i.interpolate({inputRange:[0,1],outputRange:[Math.PI*2,0]});const h=i.interpolate({inputRange:[0,1],outputRange:[0,p]});const A=_reactNative.Animated.add(_reactNative.Animated.multiply(h,m.interpolate({inputRange:[0,Math.PI*2],outputRange:[Math.cos(n),Math.cos(n+Math.PI*2)]})),i.interpolate({inputRange:[0,1],outputRange:[0,w-p*Math.cos(n+Math.PI*2)]}));const _=_reactNative.Animated.add(_reactNative.Animated.multiply(h,m.interpolate({inputRange:[0,Math.PI*2],outputRange:[Math.sin(n),Math.sin(n+Math.PI*2)]})),i.interpolate({inputRange:[0,1],outputRange:[0,j-p*Math.sin(n+Math.PI*2)]}));const D=i.interpolate({inputRange:[0,.3,1],outputRange:[0,.3,1]});return{translateX:A,translateY:_,itemOpacity:D,progressScale:i}},[t,s,u,a]);const R={position:"absolute",left:a.circleRadius-VIEW_SIZE/2,top:a.circleRadius-VIEW_SIZE/2,opacity:o.itemOpacity,transform:[{translateX:o.translateX},{translateY:o.translateY},{scale:_reactNative.Animated.multiply(r,o.progressScale)}]};const C=e.icon===null&&!e.iconComponent;return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.view,R,!I&&styles.hidden],children:C?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.emptySpot,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.emptyDot})}):(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>y(e),onPressIn:b,onPressOut:S,style:styles.pressable,testID:e.id?`buoy-dial-${e.id}`:void 0,accessibilityLabel:dialAccessibilityLabel(e.id,e.name),accessibilityRole:"button",children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.iconGradientBg,{backgroundColor:"rgba(0, 0, 0, 0.2)"}]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.iconInnerGlow,{backgroundColor:"rgba(255, 255, 255, 0.02)"}]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.iconWrapper,children:e.iconComponent?(()=>{const d=e.iconComponent;return(0,_jsxRuntime.jsx)(d,{slot:"dial",size:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE})})():(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.iconClamp,children:e.icon})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.label,numberOfLines:1,adjustsFontSizeToFit:true,minimumFontScale:.7,children:e.name.toUpperCase()})]})})};exports.DialIcon=DialIcon;const styles=_reactNative.StyleSheet.create({view:{width:VIEW_SIZE,height:VIEW_SIZE,justifyContent:"center",alignItems:"center"},hidden:{display:"none"},pressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center",padding:4,backgroundColor:"transparent"},iconGradientBg:{position:"absolute",width:"85%",height:"85%",borderRadius:12,opacity:.3},iconInnerGlow:{position:"absolute",width:"70%",height:"70%",borderRadius:10,opacity:.5},iconWrapper:{marginBottom:4,alignItems:"center",justifyContent:"center"},iconClamp:{width:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE,height:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE,alignItems:"center",justifyContent:"center",overflow:"hidden"},label:{fontSize:_floatingToolsCore.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsCore.dialStyles.icon.label.fontWeight,letterSpacing:_floatingToolsCore.dialStyles.icon.label.letterSpacing,fontFamily:_floatingToolsCore.dialStyles.icon.label.fontFamily,marginTop:_floatingToolsCore.dialStyles.icon.label.marginTop,color:_floatingToolsCore.dialColors.iconLabel},emptySpot:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},emptyDot:{width:_floatingToolsCore.dialStyles.emptySlot.dotSize,height:_floatingToolsCore.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsCore.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsCore.dialColors.emptyDotBackground,borderWidth:_floatingToolsCore.dialStyles.emptySlot.borderWidth,borderColor:_floatingToolsCore.dialColors.emptyDotBorder}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialIcon=void 0;var _react=require("react");var _reactNative=require("react-native");var _dialA11y=require("./dialA11y.js");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _jsxRuntime=require("react/jsx-runtime");const VIEW_SIZE=_floatingToolsCore.DIAL_ICON_SIZE;const DialIcon=({index:s,icon:t,iconsProgress:u,onPress:h,totalIcons:o,active:I})=>{const l=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current;const{width:g}=(0,_reactNative.useWindowDimensions)();const i=(0,_react.useMemo)(()=>(0,_floatingToolsCore.getDialLayout)({screenWidth:g}),[g]);const b=_floatingToolsCore.dialAnimationConfig?.icons??{pressIn:{scale:.95,damping:15,stiffness:400},pressOut:{scale:1,damping:15,stiffness:400}};const{pressIn:r,pressOut:c}=b;const f=()=>{_reactNative.Animated.spring(l,{toValue:r.scale,damping:r.damping,stiffness:r.stiffness,useNativeDriver:true}).start()};const S=()=>{_reactNative.Animated.spring(l,{toValue:c.scale,damping:c.damping,stiffness:c.stiffness,useNativeDriver:true}).start()};const a=(0,_react.useMemo)(()=>{const d=(0,_floatingToolsCore.getIconPosition)(s,o,i.iconRadius,_floatingToolsCore.DIAL_START_ANGLE);const{x:w,y:A,angle:e}=d;const p=i.iconRadius;const _=(0,_floatingToolsCore.getIconStaggerInputRange)(s,o);const n=u.interpolate({inputRange:_,outputRange:[0,0,1,1],extrapolate:"clamp"});const m=n.interpolate({inputRange:[0,1],outputRange:[Math.PI*2,0]});const y=n.interpolate({inputRange:[0,1],outputRange:[0,p]});const j=_reactNative.Animated.add(_reactNative.Animated.multiply(y,m.interpolate({inputRange:[0,Math.PI*2],outputRange:[Math.cos(e),Math.cos(e+Math.PI*2)]})),n.interpolate({inputRange:[0,1],outputRange:[0,w-p*Math.cos(e+Math.PI*2)]}));const P=_reactNative.Animated.add(_reactNative.Animated.multiply(y,m.interpolate({inputRange:[0,Math.PI*2],outputRange:[Math.sin(e),Math.sin(e+Math.PI*2)]})),n.interpolate({inputRange:[0,1],outputRange:[0,A-p*Math.sin(e+Math.PI*2)]}));const D=n.interpolate({inputRange:[0,.3,1],outputRange:[0,.3,1]});return{translateX:j,translateY:P,itemOpacity:D,progressScale:n}},[s,o,u,i]);const R={position:"absolute",left:i.circleRadius-VIEW_SIZE/2,top:i.circleRadius-VIEW_SIZE/2,opacity:a.itemOpacity,transform:[{translateX:a.translateX},{translateY:a.translateY},{scale:_reactNative.Animated.multiply(l,a.progressScale)}]};const C=t.icon===null&&!t.iconComponent;return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.view,R,!I&&styles.hidden],children:C?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.emptySpot,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.emptyDot})}):(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>h(t),onPressIn:f,onPressOut:S,style:styles.pressable,testID:t.id?`buoy-dial-${t.id}`:void 0,accessibilityLabel:(0,_dialA11y.dialAccessibilityLabel)(t.id,t.name),accessibilityRole:"button",children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.iconGradientBg,{backgroundColor:"rgba(0, 0, 0, 0.2)"}]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.iconInnerGlow,{backgroundColor:"rgba(255, 255, 255, 0.02)"}]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.iconWrapper,children:t.iconComponent?(()=>{const d=t.iconComponent;return(0,_jsxRuntime.jsx)(d,{slot:"dial",size:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE})})():(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.iconClamp,children:t.icon})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.label,numberOfLines:1,adjustsFontSizeToFit:true,minimumFontScale:.7,children:t.name.toUpperCase()})]})})};exports.DialIcon=DialIcon;const styles=_reactNative.StyleSheet.create({view:{width:VIEW_SIZE,height:VIEW_SIZE,justifyContent:"center",alignItems:"center"},hidden:{display:"none"},pressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center",padding:4,backgroundColor:"transparent"},iconGradientBg:{position:"absolute",width:"85%",height:"85%",borderRadius:12,opacity:.3},iconInnerGlow:{position:"absolute",width:"70%",height:"70%",borderRadius:10,opacity:.5},iconWrapper:{marginBottom:4,alignItems:"center",justifyContent:"center"},iconClamp:{width:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE,height:_floatingToolsCore.DIAL_ICON_GLYPH_SIZE,alignItems:"center",justifyContent:"center",overflow:"hidden"},label:{fontSize:_floatingToolsCore.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsCore.dialStyles.icon.label.fontWeight,letterSpacing:_floatingToolsCore.dialStyles.icon.label.letterSpacing,fontFamily:_floatingToolsCore.dialStyles.icon.label.fontFamily,marginTop:_floatingToolsCore.dialStyles.icon.label.marginTop,color:_floatingToolsCore.dialColors.iconLabel},emptySpot:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},emptyDot:{width:_floatingToolsCore.dialStyles.emptySlot.dotSize,height:_floatingToolsCore.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsCore.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsCore.dialColors.emptyDotBackground,borderWidth:_floatingToolsCore.dialStyles.emptySlot.borderWidth,borderColor:_floatingToolsCore.dialColors.emptyDotBorder}});
@@ -7,4 +7,4 @@
7
7
  0%, 100% { transform: translateY(0); }
8
8
  50% { transform: translateY(-8px); }
9
9
  }
10
- `;document.head.appendChild(e);onboardingKeyframesInjected=true}const PRIMARY=_floatingToolsReact.dialColors.accent;function OnboardingTooltip({title:e,message:a,onDismiss:i,showArrow:s=true}){const[o,l]=(0,_react.useState)(false);const[n,t]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{injectOnboardingKeyframes();const d=requestAnimationFrame(()=>l(true));return()=>cancelAnimationFrame(d)},[]);const r={fontFamily:_sharedUi.monoFont,textTransform:"uppercase"};return(0,_jsxRuntime.jsx)("div",{style:{position:"fixed",left:"50%",bottom:(0,_onboardingConstantsWeb.calculateTooltipPosition)(),transform:`translateX(-50%) scale(${o?1:.8})`,opacity:o?1:0,transition:"transform 300ms cubic-bezier(0.34, 1.3, 0.64, 1), opacity 300ms ease",zIndex:10002,pointerEvents:"auto"},children:(0,_jsxRuntime.jsxs)("div",{style:{position:"relative",animation:o?"buoyOnboardPulse 3s ease-in-out infinite":"none"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:-4,borderRadius:18,backgroundColor:"#FFFFFF",opacity:.06}}),(0,_jsxRuntime.jsxs)("div",{style:{position:"relative",maxWidth:280,backgroundColor:_floatingToolsReact.dialColors.dialBackground,borderRadius:16,border:`1px solid ${_floatingToolsReact.dialColors.dialBorder}`,padding:20,boxShadow:`0 0 20px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.6)}`,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[(0,_jsxRuntime.jsx)("span",{style:{...r,fontSize:16,fontWeight:900,letterSpacing:1,color:PRIMARY,textAlign:"center"},children:e}),(0,_jsxRuntime.jsx)("span",{style:{fontFamily:_sharedUi.monoFont,fontSize:13,lineHeight:"20px",color:_floatingToolsReact.dialColors.centerText,textAlign:"center"},children:a}),(0,_jsxRuntime.jsx)("button",{onClick:i,onMouseDown:()=>t(true),onMouseUp:()=>t(false),onMouseLeave:()=>t(false),style:{...r,marginTop:8,borderRadius:8,border:"none",backgroundColor:PRIMARY,padding:"10px 24px",fontSize:14,fontWeight:900,letterSpacing:1.5,color:"#000000",cursor:"pointer",opacity:n?.7:1,transform:n?"scale(0.96)":"scale(1)",transition:"transform 100ms ease, opacity 100ms ease"},children:"Got it!"})]}),s&&(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",left:"50%",bottom:_onboardingConstantsWeb.ARROW_BOTTOM_OFFSET,marginLeft:-12,width:0,height:0,borderLeft:"12px solid transparent",borderRight:"12px solid transparent",borderTop:`${_onboardingConstantsWeb.ARROW_HEIGHT}px solid ${PRIMARY}`,filter:`drop-shadow(0 0 10px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.5)})`,animation:o?"buoyOnboardArrowBounce 1.6s ease-in-out infinite":"none"}})]})})}
10
+ `;document.head.appendChild(e);onboardingKeyframesInjected=true}const PRIMARY=_floatingToolsReact.dialColors.accent;function OnboardingTooltip({title:e,message:a,onDismiss:i,showArrow:s=true}){const[o,l]=(0,_react.useState)(false);const[n,t]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{injectOnboardingKeyframes();const d=requestAnimationFrame(()=>l(true));return()=>cancelAnimationFrame(d)},[]);const r={fontFamily:_sharedUi.monoFont,textTransform:"uppercase"};return(0,_jsxRuntime.jsx)("div",{style:{position:"fixed",left:"50%",bottom:(0,_onboardingConstantsWeb.calculateTooltipPosition)(),transform:`translateX(-50%) scale(${o?1:.8})`,opacity:o?1:0,transition:"transform 300ms cubic-bezier(0.34, 1.3, 0.64, 1), opacity 300ms ease",zIndex:10002,pointerEvents:"auto"},children:(0,_jsxRuntime.jsxs)("div",{style:{position:"relative",animation:o?"buoyOnboardPulse 3s ease-in-out infinite":"none"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:-4,borderRadius:18,backgroundColor:"#FFFFFF",opacity:.06}}),(0,_jsxRuntime.jsxs)("div",{style:{position:"relative",maxWidth:280,backgroundColor:_floatingToolsReact.dialColors.dialBackground,borderRadius:16,border:`1px solid ${_floatingToolsReact.dialColors.dialBorder}`,padding:20,boxShadow:`0 0 20px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.6)}`,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[(0,_jsxRuntime.jsx)("span",{style:{...r,fontSize:16,fontWeight:900,letterSpacing:1,color:PRIMARY,textAlign:"center"},children:e}),(0,_jsxRuntime.jsx)("span",{style:{fontFamily:_sharedUi.monoFont,fontSize:13,lineHeight:"20px",color:_floatingToolsReact.dialColors.centerText,textAlign:"center"},children:a}),(0,_jsxRuntime.jsx)("button",{onClick:i,onPointerDown:()=>t(true),onPointerUp:()=>t(false),onPointerLeave:()=>t(false),onPointerCancel:()=>t(false),style:{...r,marginTop:8,borderRadius:8,border:"none",backgroundColor:PRIMARY,padding:"10px 24px",fontSize:14,fontWeight:900,letterSpacing:1.5,color:"#000000",cursor:"pointer",opacity:n?.7:1,transform:n?"scale(0.96)":"scale(1)",transition:"transform 100ms ease, opacity 100ms ease"},children:"Got it!"})]}),s&&(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",left:"50%",bottom:_onboardingConstantsWeb.ARROW_BOTTOM_OFFSET,marginLeft:-12,width:0,height:0,borderLeft:"12px solid transparent",borderRight:"12px solid transparent",borderTop:`${_onboardingConstantsWeb.ARROW_HEIGHT}px solid ${PRIMARY}`,filter:`drop-shadow(0 0 10px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.5)})`,animation:o?"buoyOnboardArrowBounce 1.6s ease-in-out infinite":"none"}})]})})}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.dialAccessibilityLabel=dialAccessibilityLabel;const DIAL_A11Y={network:"Network",images:"Images","image-overlay":"Image Overlay",assets:"Assets",query:"React Query",storage:"Storage",env:"Env",console:"Console",events:"Events",redux:"Redux",zustand:"Zustand",jotai:"Jotai","route-events":"Routes","time-machine":"Time Machine",clock:"Clock",permissions:"Permissions","highlight-updates":"Highlight Updates","debug-borders":"Debug Borders","perf-monitor":"Bench HUD","js-top":"JS Top","js-top-modal":"JS Top",impersonate:"Impersonate","perf-monitor-modal":"Bench"};function dialAccessibilityLabel(e,s){if(e&&DIAL_A11Y[e])return DIAL_A11Y[e];return s}