@buoy-gg/core 7.0.60 → 7.0.62

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 (33) hide show
  1. package/README.md +3 -0
  2. package/bundlers/vite.d.ts +36 -0
  3. package/bundlers/vite.mjs +6 -0
  4. package/lib/commonjs/auto.web.js +1 -0
  5. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
  6. package/lib/commonjs/installedTools.js +1 -0
  7. package/lib/commonjs/version.js +1 -1
  8. package/lib/module/auto.web.js +1 -0
  9. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
  10. package/lib/module/installedTools.js +1 -0
  11. package/lib/module/version.js +1 -1
  12. package/lib/typescript/commonjs/auto.web.d.ts +21 -0
  13. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts +11 -4
  14. package/lib/typescript/commonjs/installedTools.d.ts +14 -0
  15. package/lib/typescript/commonjs/version.d.ts +1 -1
  16. package/lib/typescript/module/auto.web.d.ts +21 -0
  17. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts +11 -4
  18. package/lib/typescript/module/installedTools.d.ts +14 -0
  19. package/lib/typescript/module/version.d.ts +1 -1
  20. package/lib/web/auto.mjs +1 -0
  21. package/lib/web/chunks/FloatingDevTools.web-M3ASH5EV.mjs +1 -0
  22. package/lib/web/chunks/FloatingDevTools.web-OQERI2YM.mjs +1 -0
  23. package/lib/web/chunks/chunk-3YORPV22.mjs +10 -0
  24. package/lib/web/chunks/chunk-7G3P7Z7K.mjs +1 -0
  25. package/lib/web/chunks/chunk-JGFWBADO.mjs +10 -0
  26. package/lib/web/chunks/chunk-T6BXEQLL.mjs +1 -1
  27. package/lib/web/chunks/chunk-ZD6O2YPD.mjs +1 -0
  28. package/lib/web/index.mjs +1 -10
  29. package/lib/web/installed-tools.mjs +1 -0
  30. package/lib/web/register.mjs +1 -1
  31. package/lib/web/toolkit.mjs +1 -1
  32. package/package.json +19 -6
  33. package/lib/web/chunks/chunk-GLXZCY6W.mjs +0 -1
package/README.md CHANGED
@@ -12,6 +12,9 @@ The floating developer-tools menu for your React Native app. Add the tool packag
12
12
 
13
13
  </div>
14
14
 
15
+ Capacitor / Ionic (Beta) uses this package through `/web`.
16
+ See the [setup guide](https://buoy.gg/buoy/latest/docs/capacitor) for steps and limits.
17
+
15
18
  ## Install
16
19
 
17
20
  ```bash
@@ -0,0 +1,36 @@
1
+ export interface BuoyVitePluginOptions {
2
+ /** Installed tools to leave out, by package name, such as `['tv-remote']`. */
3
+ exclude?: string[];
4
+ /**
5
+ * Add `import '@buoy-gg/core/web/register'` ahead of index.html's first
6
+ * module script. Defaults to true. Turn it off if you import it yourself in
7
+ * a page with no index.html.
8
+ */
9
+ register?: boolean;
10
+ }
11
+
12
+ /**
13
+ * Buoy for Vite: loads every installed tool into FloatingDevTools and
14
+ * BuoyDevTools when they get no `modules`, and adds the early hook to
15
+ * index.html. Vite accepts it without a runtime dependency on Vite.
16
+ */
17
+ export declare function buoy(options?: BuoyVitePluginOptions): {
18
+ name: string;
19
+ enforce: 'pre';
20
+ config(config: any): any;
21
+ configResolved(config: any): void;
22
+ configureServer(server: any): void;
23
+ closeBundle(): void;
24
+ resolveId(source: string): string | undefined;
25
+ load(id: string): string | undefined;
26
+ transformIndexHtml: { order: 'pre'; handler(html: string): string };
27
+ };
28
+ export default buoy;
29
+
30
+ export declare function findInstalledTools(root: string, options?: { exclude?: string[] }): {
31
+ found: { id: string; key: string }[];
32
+ missingWeb: string[];
33
+ };
34
+ export declare function installedToolsModule(found: { id: string; key: string }[], options?: { assetList?: string }): string;
35
+ export declare function injectRegister(html: string): string | undefined;
36
+ export declare function assetListUrl(base: string, filename: string, command: 'serve' | 'build'): string | undefined;
@@ -0,0 +1,6 @@
1
+ import{existsSync as h,readFileSync as m}from"node:fs";import l from"node:path";const $=[["network","network"],["storage","storage"],["events","events"],["console","console"],["env","env"],["redux","redux"],["zustand","zustand"],["jotai","jotai"],["react-query","react-query"],["route-events","route-events"],["time-machine","time-machine"],["clock","clock"],["lifecycle","lifecycle"],["location","location"],["permissions","permissions"],["notifications","push-notifications"],["scenarios","scenarios"],["sentry","sentry"],["ask-buoy","ask-buoy"],["impersonate","impersonate"],["perf-monitor","perf-monitor"],["js-top","js-top"],["highlight-updates","highlight-updates"],["debug-borders","debug-borders"],["images","images"],["assets","assets"],["image-overlay","image-overlay"],["tv-remote","tv-remote"],["focus-inspector","focus-inspector"],["external-sync","external-sync"]];const w="@buoy-gg/core/web/installed-tools";const g="@buoy-gg/core/web/register";const v="\0buoy:installed-tools";function y(t){for(let s=t;;s=l.dirname(s)){const e=l.join(s,"package.json");if(h(e))return e;if(l.dirname(s)===s)return void 0}}function x(t,s){for(let e=t;;e=l.dirname(e)){const o=l.join(e,"node_modules",s,"package.json");if(h(o)){try{return JSON.parse(m(o,"utf8"))}catch{return void 0}}if(l.dirname(e)===e)return void 0}}export function findInstalledTools(t,{exclude:s=[]}={}){const e=y(t);let o;try{const r=e?JSON.parse(m(e,"utf8")):{};const n={...r.dependencies,...r.devDependencies,...r.optionalDependencies,...r.peerDependencies};if(n["@buoy-gg/core"])o=new Set(Object.keys(n))}catch{}const i=new Set(s.map(r=>r.replace(/^@buoy-gg\//,"")));const d=[];const c=[];for(const[r,n]of $){const a=`@buoy-gg/${r}`;if(i.has(r)||i.has(n)||o&&!o.has(a))continue;const u=x(t,a);if(!u)continue;if(u.exports&&typeof u.exports==="object"&&u.exports["./web"])d.push({id:a,key:n});else c.push(a)}return{found:d,missingWeb:c}}export function installedToolsModule(t,{assetList:s}={}){const e=t.map(({id:c},r)=>`import * as t${r} from ${JSON.stringify(`${c}/web`)};`);const o=t.map(({key:c},r)=>`${JSON.stringify(c)}: t${r}`);const i=t.findIndex(({key:c})=>c==="assets");const d=s&&i!==-1?`t${i}.loadBrowserAssetManifest?.(${JSON.stringify(s)})?.catch?.(() => {});
2
+ `:"";return`${e.join("\n")}
3
+ ${d}export const installedTools = { ${o.join(", ")} };
4
+ export const installedToolsFound = true;
5
+ `}function j(t){return t.replace(/<!--[\s\S]*?(?:-->|$)/g,s=>" ".repeat(s.length))}export function injectRegister(t){const s=`<script type="module">import ${JSON.stringify(g)};<\/script>`;const e=j(t).search(/<script\b[^>]*\btype\s*=\s*["']?module["']?[^>]*>/i);return e===-1?void 0:`${t.slice(0,e)}${s}
6
+ ${t.slice(e)}`}function S(t,s){const e=y(t);const o=new Set(s.map(i=>i.replace(/^@buoy-gg\//,"")));try{const i=e?JSON.parse(m(e,"utf8")):{};const d={...i.dependencies,...i.devDependencies,...i.optionalDependencies,...i.peerDependencies};return $.filter(([c,r])=>d[`@buoy-gg/${c}`]&&!o.has(c)&&!o.has(r)).map(([c])=>`@buoy-gg/${c}`).join()}catch{return""}}export function assetListUrl(t,s,e){const o=e==="serve"&&!/^(?:\/|[a-z]+:)/i.test(t)?"/":t;return/^(?:\/|[a-z]+:)/i.test(o)?`${o.endsWith("/")?o:`${o}/`}${s}`:void 0}export function buoy({exclude:t=[],register:s=true}={}){let e={found:[],missingWeb:[]};let o=process.cwd();let i;let d;let c;const r=()=>{clearInterval(c);c=void 0};return{name:"buoy",enforce:"pre",config(n){o=l.resolve(n.root??process.cwd());e=findInstalledTools(o,{exclude:t});const a=e.found.map(({id:u})=>`${u}/web`);if(s)a.unshift(g);return{optimizeDeps:{exclude:[w],include:a}}},configResolved(n){i=n.logger;const a=n.plugins.find(f=>f.name==="buoy-asset-manifest");d=a?assetListUrl(n.base,a.api?.filename??"buoy-assets.json",n.command):void 0;if(a&&!d)i.warn(`[buoy] base '${n.base}' is relative, so load the asset list yourself with loadBrowserAssetManifest().`);if(n.command!=="serve")return;const u=e.found.map(({key:f})=>f).join(", ")||"none";i.info(`[buoy] tools: ${u}`);if(e.missingWeb.length)i.warn(`[buoy] these have no browser build; update them to the same release as @buoy-gg/core: ${e.missingWeb.join(", ")}`)},configureServer(n){const a=y(o);if(!a)return;const u=p=>p.map(({id:k})=>k).join();const f=()=>{if(u(findInstalledTools(o,{exclude:t}).found)===u(e.found))return false;r();void n.restart();return true};const b=()=>{r();if(S(o,t)===u(e.found))return;let p=0;c=setInterval(()=>{if(!f()&&++p>=120)r()},1e3)};n.watcher.add(a);n.watcher.on("change",p=>{if(l.resolve(p)===l.resolve(a)&&!f())b()});b()},closeBundle(){r()},resolveId(n){if(n===w)return v;return void 0},load(n){if(n===v)return installedToolsModule(e.found,{assetList:d});return void 0},transformIndexHtml:{order:"pre",handler(n){if(!s)return n;const a=injectRegister(n);if(a===void 0)i?.warn(`[buoy] index.html has no module script, so the early hook wasn't added. Import '${g}' first in your entry file.`);return a??n}}}}export default buoy;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BuoyDevTools=BuoyDevTools;exports.shouldShowBuoy=shouldShowBuoy;var _react=require("react");function _interopRequireWildcard(t,o){if("function"==typeof WeakMap)var i=new WeakMap,l=new WeakMap;return(_interopRequireWildcard=function(e,f){if(!f&&e&&e.__esModule)return e;var r,a,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(r=f?l:i){if(r.has(e))return r.get(e);r.set(e,u)}for(const n in e)"default"!==n&&{}.hasOwnProperty.call(e,n)&&((a=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,n))&&(a.get||a.set)?r(u,n,a):u[n]=e[n]);return u})(t,o)}function shouldShowBuoy(){if(typeof window==="undefined")return false;const t=window.Capacitor;let o=false;try{o=t?.isNativePlatform?.()===true}catch{o=false}if(o)return t?.DEBUG===true;return typeof __DEV__!=="undefined"?Boolean(__DEV__):process.env.NODE_ENV!=="production"}let host;function loadHost(){host??=(0,_react.lazy)(()=>Promise.resolve().then(()=>_interopRequireWildcard(require("./floatingMenu/FloatingDevTools.web"))).then(t=>({default:t.FloatingDevTools})));return host}function BuoyDevTools({enabled:t,...o}){const[i,l]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{l(t??shouldShowBuoy())},[t]);if(!i)return null;return(0,_react.createElement)(_react.Suspense,{fallback:null},(0,_react.createElement)(loadHost(),o))}
@@ -1 +1 @@
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
+ "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 _installedTools=require("../installedTools.js");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(s,t){if("function"==typeof WeakMap)var i=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(n,a){if(!a&&n&&n.__esModule)return n;var l,c,u={__proto__:null,default:n};if(null===n||"object"!=typeof n&&"function"!=typeof n)return u;if(l=a?r:i){if(l.has(n))return l.get(n);l.set(n,u)}for(const d in n)"default"!==d&&{}.hasOwnProperty.call(n,d)&&((c=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(n,d))&&(c.get||c.set)?l(u,d,c):u[d]=n[d]);return u})(s,t)}const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:s=14,color:t="#20C997"}){const i=Math.max(2,s/4);const r=Math.max(1,s/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${i}px)`,gap:r,width:s,height:s,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((n,a)=>(0,_jsxRuntime.jsx)("div",{style:{width:i,height:i,borderRadius:i/2,backgroundColor:t}},a))})}function AdmittedFloatingDevTools(s){const{defaultFloatingTools:t,defaultDialTools:i,disableHints:r=false,children:n}=s;const a=(0,_react.useMemo)(()=>i?(0,_defaultConfig.validateDialConfig)(i):i,[i]);return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:t,defaultDialTools:a,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:r,children:(0,_jsxRuntime.jsxs)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppHostProvider,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsInner,{...s})}),n]})})})}const STARTUP_ROOTS=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function StartupCapture({modules:s=EMPTY_MODULES}){return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:Object.entries(s).flatMap(([t,i])=>STARTUP_ROOTS.map(r=>{const n=i[r];return n?(0,_jsxRuntime.jsx)(n,{},`${t}:${r}`):null}))})}function WebToolOpenerBridge(){const{openApps:s,restore:t}=(0,_AppHostWeb.useAppHost)();(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(i=>{const r=s.find(n=>n.id===i);if(!r)return false;t(r.instanceId);return true}),[s,t]);return null}function defaultEnvironment(){const s=(0,_license.capacitorDebug)();const t=s===null?process.env.NODE_ENV:s?"development":"production";return(0,_sharedUi.normalizeEnvironment)(t??"dev")}function configOverrides(s,t,i,r){const n=S=>Object.entries(s).find(([m])=>m.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===S)?.[1];const a=[];const l=n("env");if(t?.length&&l?.createEnvTool&&l.createEnvVarConfig){a.push((0,_createWebTool.createWebTool)(l.createEnvTool({requiredEnvVars:l.createEnvVarConfig(t)})))}const c=n("storage");if(i?.length&&c?.createStorageTool){a.push((0,_createWebTool.createWebTool)(c.createStorageTool({requiredStorageKeys:i})))}const u=n("ask-buoy");const d=r==="hosted"?u?.hostedAskBuoy?.():r;if(d&&u?.createAskBuoyTool)a.push((0,_createWebTool.createWebTool)(u.createAskBuoyTool(d)));return a}function FloatingDevToolsInner({environment:s,userRole:t="admin",availableEnvironments:i,onEnvironmentSwitch:r,apps:n,modules:a=EMPTY_MODULES,externalSync:l,requiredEnvVars:c,sentryGetClient:u,disableHints:d=false,headless:S=false,hidden:m=false,defaultFloatingTools:U,defaultDialTools:C,zustandStores:O,requiredStorageKeys:P,askBuoy:W}){const w=s??defaultEnvironment();const N=(0,_react.useMemo)(()=>C?(0,_defaultConfig.validateDialConfig)(C):void 0,[C]);const[p,h]=(0,_react.useState)(false);const[v,x]=(0,_react.useState)(false);const E=(0,_react.useRef)(false);const T=(0,_AppHostWeb.useAppHost)();const A=(0,_react.useMemo)(()=>configOverrides(a,c,P,W),[a,c,P,W]);const g=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(a),...n??[],...A]),[n,a,A]);const M=(0,_react.useMemo)(()=>Object.entries(a).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[a]);(0,_react.useEffect)(()=>{if(!O||typeof M?.watchStores!=="function")return;const e=M.watchStores(O);return typeof e==="function"?e:void 0},[O,M]);const _=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();const q=T.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{_.setDialOpen(p)},[p,_.setDialOpen]);(0,_react.useEffect)(()=>{_.setToolOpen(q||v)},[q,v,_.setToolOpen]);const{registerApps:R}=T;(0,_react.useEffect)(()=>{R(g.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:f})=>o(f):o}}))},[R,g]);const $=(0,_react.useMemo)(()=>g.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[g]);(0,_floatingToolsReact.useSettings)({availableTools:$,storage:webSettingsStorage});(0,_react.useEffect)(()=>{let e=false;const o=async()=>{const[f,j]=await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()),_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);if(e)return;if(f==="true")h(true);if(j==="true"){h(true);x(true)}E.current=true};void o();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!E.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(),p?"true":"false")},[p]);(0,_react.useEffect)(()=>{if(!E.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),v?"true":"false")},[v]);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;T.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?.()}},[T]);const D=(0,_react.useMemo)(()=>{const e=(0,_autoDiscoverPresetsWeb.getToolsBySlot)(g,"dial");return e.map(o=>{const f=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:f,onPress:()=>{I(o);h(false)}}})},[g,I]);const Y=(0,_react.useMemo)(()=>{if(!p)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))},[p,D]);const{settings:k}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();const G=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(g,"row").filter(e=>(k.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[g,k.floatingTools]);const Q=(0,_react.useMemo)(()=>g.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})),[g]);const[J,B]=(0,_react.useState)(false);const L=T.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{if(d)return;let e=false;const o=setTimeout(async()=>{const f=await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);if(!e&&!f)B(true)},1e3);return()=>{e=true;clearTimeout(o)}},[d]);const b=(0,_react.useCallback)(()=>{B(false);void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY,"true")},[]);const F=(0,_react.useCallback)(()=>{b();h(true)},[b]);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 V=Boolean(i?.length&&r);const z=k.floatingTools.environment!==false;const y=J&&!p&&!L&&!m;(0,_react.useEffect)(()=>{if(!y)return;const e=f=>{if(!(f.target instanceof Element)||!f.target.closest("[data-buoy-root]"))b()};const o=f=>{if(f.key==="Escape")b()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[y,b]);const K=T.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const H=(0,_jsxRuntime.jsx)(_BrowserToolRuntime.BrowserToolRuntime,{modules:a,apps:n,requiredEnvVars:c,externalSync:l,headless:S,sentryGetClient:u});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:m?{visibility:"hidden"}:{display:"contents"},"aria-hidden":m||void 0,children:(0,_jsxRuntime.jsxs)(_floatingToolsWeb.FloatingTools,{enablePositionPersistence:!y,pushToSide:p||L,suspendPointerEvents:p,centerOnboarding:y,minimizedStack:K?(0,_jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack,{}):void 0,hasMinimizedStack:K,children:[w&&z&&!V&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:w}),V&&z&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:w??"local",availableEnvironments:i,onSelect:r}),t?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:t,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:b}),p&&!m&&(0,_jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu,{icons:Y,onClose:X,centerLabel:"BUOY",onCenterPress:Z,settingsOpen:v,hintsDisabled:d}),v&&!m&&(0,_jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal,{visible:true,onClose:ee,availableTools:Q,defaultFloatingTools:U,defaultDialTools:N,onSettingsChange:e=>{}}),!m&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppOverlay,{}),(0,_jsxRuntime.jsx)(_floating.FloatingToolHost,{})]})]})}function useCapacitorSignInAudience(s){const t=s&&typeof s==="object"?s.appId:void 0;const i=!!s;(0,_react.useEffect)(()=>{if(!i)return;let r=false;const n=licenseModule.SessionManager;if(!n)return;const a=l=>{if(r||!l)return;n.configure({audience:`app:${l}`});void n.load().catch(()=>{})};if(t)a(t);else void(0,_license.loadCapacitorAppHost)().then(l=>a(l?.bundleId)).catch(()=>{});return()=>{r=true}},[i,t])}let warnedNoTools=false;function withInstalledTools(s){if(s.modules)return s;if(!_installedTools.installedToolsFound&&!warnedNoTools&&typeof console!=="undefined"){warnedNoTools=true;console.info("[Buoy] No tools loaded. Add buoy() from '@buoy-gg/core/vite' to your Vite plugins, or pass modules to FloatingDevTools.")}return{...s,modules:_installedTools.installedTools}}function FloatingDevTools(s){const t=withInstalledTools(s);const{access:i,isPro:r,licenseKey:n}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(t.licenseKey)},[t.licenseKey]);const a=t.licenseKey===void 0||(0,_license.sameLicenseKey)(t.licenseKey,n);const l=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const c=a&&i.status==="admitted";(0,_react.useEffect)(()=>{if(c)(0,_sharedUi.startSettingsSync)()},[c]);(0,_react.useEffect)(()=>{if(l||i.status==="initializing")return;if(r&&c)(0,_releaseOptIn.markReleaseOptIn)();else(0,_releaseOptIn.clearReleaseOptIn)()},[l,r,c,i.status]);const u=(0,_license.isCapacitorNative)();useCapacitorSignInAudience(u?t.signIn:void 0);if(!l&&!r){if(!t.signIn||t.headless)return null;return u?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{needsPlan:true}):(0,_jsxRuntime.jsx)(_BuoySignInWeb.BuoySignIn,{})}if(!c){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[i.status==="initializing"&&(0,_jsxRuntime.jsx)(StartupCapture,{modules:t.modules}),t.headless?null:t.signIn&&u?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{}):(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{})]})}return(0,_jsxRuntime.jsx)(AdmittedFloatingDevTools,{...t})}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.installedToolsFound=exports.installedTools=void 0;const installedTools=exports.installedTools={};const installedToolsFound=exports.installedToolsFound=false;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.60";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.62";
@@ -0,0 +1 @@
1
+ "use strict";import{createElement as o,lazy as s,Suspense as l,useEffect as a,useState as f}from"react";export function shouldShowBuoy(){if(typeof window==="undefined")return false;const t=window.Capacitor;let e=false;try{e=t?.isNativePlatform?.()===true}catch{e=false}if(e)return t?.DEBUG===true;return typeof __DEV__!=="undefined"?Boolean(__DEV__):process.env.NODE_ENV!=="production"}let n;function i(){n??=s(()=>import("./floatingMenu/FloatingDevTools.web").then(t=>({default:t.FloatingDevTools})));return n}export function BuoyDevTools({enabled:t,...e}){const[r,u]=f(false);a(()=>{u(t??shouldShowBuoy())},[t]);if(!r)return null;return o(l,{fallback:null},o(i(),e))}
@@ -1 +1 @@
1
- "use strict";import{FloatingToolHost as he}from"@buoy-gg/shared-ui/floating";import*as be from"@buoy-gg/license";import{LicenseManager as Oe,useLicense as Se,sameLicenseKey as Ce,resolveDevBuild as De,capacitorDebug as Ie,isCapacitorNative as Ee,loadCapacitorAppHost as we}from"@buoy-gg/license";import{AccountSetup as _e,HintsProvider as Me,normalizeEnvironment as Pe,registerToolOpener as ke,startSettingsSync as Ae}from"@buoy-gg/shared-ui";import{useState as W,useMemo as g,useCallback as C,useEffect as d,useRef as xe}from"react";import{useSettings as Re,getToolLabel as A,getToolDescription as Le,getToolColor as te}from"@buoy-gg/floating-tools-react";import{persistentStorage as v,devToolsStorageKeys as x,EnvironmentIndicator as je,EnvironmentSelectorInline as Be}from"@buoy-gg/shared-ui";import{autoDiscoverWithCustom as Fe,getToolsBySlot as oe}from"../utils/autoDiscoverPresets.web.js";import{FloatingTools as ze,UserStatus as Ve}from"./floatingTools.web.js";import{DialMenu as We}from"./dial/DialDevTools.web.js";import{getRankedToolIds as Ke,recordToolUsage as He}from"./dial/dialUsageStore.js";import{OnboardingTooltip as Ne}from"./dial/OnboardingTooltip.web.js";import{SettingsModal as Ue}from"./DevToolsSettingsModal.web.js";import{AppHostProvider as $e,AppOverlay as Ye,useAppHost as ie}from"./AppHost.web.js";import{MinimizedToolsStack as Ge}from"./MinimizedToolsStack.web.js";import{createWebTools as Qe}from"../utils/createWebTools.js";import{BrowserToolRuntime as Je}from"./BrowserToolRuntime.js";import{clearReleaseOptIn as Xe,markReleaseOptIn as Ze}from"../releaseOptIn.js";import{BuoySignIn as qe}from"./BuoySignIn.web.js";import{BuoySignIn as se}from"./BuoyCodeSignIn.js";import{DevToolsVisibilityProvider as en,useDevToolsVisibility as nn}from"./DevToolsVisibilityContext.js";import{createWebTool as K}from"../utils/createWebTool.js";import{DefaultConfigProvider as tn}from"./DefaultConfigContext.js";import{useDevToolsSettings as on}from"./DevToolsSettingsModal.shared.js";import{validateDialConfig as re}from"./defaultConfig.js";import{jsx as o,jsxs as E,Fragment as H}from"react/jsx-runtime";const ae={};const ce="@react_buoy_floating_menu_tooltip_shown";const sn=v;function rn({size:n=14,color:s="#20C997"}){const i=Math.max(2,n/4);const c=Math.max(1,n/16);return o("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${i}px)`,gap:c,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((a,r)=>o("div",{style:{width:i,height:i,borderRadius:i/2,backgroundColor:s}},r))})}function an(n){const{defaultFloatingTools:s,defaultDialTools:i,disableHints:c=false,children:a}=n;const r=g(()=>i?re(i):i,[i]);return o(tn,{defaultFloatingTools:s,defaultDialTools:r,children:o(Me,{disableHints:c,children:E(en,{children:[o($e,{children:o(mn,{...n})}),a]})})})}const cn=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function ln({modules:n=ae}){return o(H,{children:Object.entries(n).flatMap(([s,i])=>cn.map(c=>{const a=i[c];return a?o(a,{},`${s}:${c}`):null}))})}function dn(){const{openApps:n,restore:s}=ie();d(()=>ke(i=>{const c=n.find(a=>a.id===i);if(!c)return false;s(c.instanceId);return true}),[n,s]);return null}function un(){const n=Ie();const s=n===null?process.env.NODE_ENV:n?"development":"production";return Pe(s??"dev")}function fn(n,s,i,c){const a=D=>Object.entries(n).find(([_])=>_.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===D)?.[1];const r=[];const l=a("env");if(s?.length&&l?.createEnvTool&&l.createEnvVarConfig){r.push(K(l.createEnvTool({requiredEnvVars:l.createEnvVarConfig(s)})))}const f=a("storage");if(i?.length&&f?.createStorageTool){r.push(K(f.createStorageTool({requiredStorageKeys:i})))}const w=a("ask-buoy");if(c&&w?.createAskBuoyTool)r.push(K(w.createAskBuoyTool(c)));return r}function mn({environment:n,userRole:s="admin",availableEnvironments:i,onEnvironmentSwitch:c,apps:a,modules:r=ae,externalSync:l,requiredEnvVars:f,sentryGetClient:w,disableHints:D=false,headless:_=false,hidden:y=false,defaultFloatingTools:le,defaultDialTools:R,zustandStores:L,requiredStorageKeys:N,askBuoy:U}){const j=n??un();const de=g(()=>R?re(R):void 0,[R]);const[m,I]=W(false);const[T,M]=W(false);const B=xe(false);const h=ie();const $=g(()=>fn(r,f,N,U),[r,f,N,U]);const p=g(()=>Fe([...Qe(r),...a??[],...$]),[a,r,$]);const F=g(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);d(()=>{if(!L||typeof F?.watchStores!=="function")return;const e=F.watchStores(L);return typeof e==="function"?e:void 0},[L,F]);const P=nn();const Y=h.openApps.some(e=>!e.minimized);d(()=>{P.setDialOpen(m)},[m,P.setDialOpen]);d(()=>{P.setToolOpen(Y||T)},[Y,T,P.setToolOpen]);const{registerApps:G}=h;d(()=>{G(p.map(e=>{const t=e.icon;return{...e,icon:typeof t==="function"?({size:u})=>t(u):t}}))},[G,p]);const ue=g(()=>p.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[p]);Re({availableTools:ue,storage:sn});d(()=>{let e=false;const t=async()=>{const[u,S]=await Promise.all([v.getItem(x.dial.isOpen()),v.getItem(x.settings.modalOpen())]);if(e)return;if(u==="true")I(true);if(S==="true"){I(true);M(true)}B.current=true};void t();return()=>{e=true}},[]);d(()=>{if(!B.current)return;void v.setItem(x.dial.isOpen(),m?"true":"false")},[m]);d(()=>{if(!B.current)return;void v.setItem(x.settings.modalOpen(),T?"true":"false")},[T]);const z=C(e=>{void He(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const t=typeof e.icon==="function"?e.icon(20):e.icon;h.open({id:e.id,title:e.name||A(e.id),component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:t,color:e.color||te(e.id)})}else{e.onPress?.()}},[h]);const k=g(()=>{const e=oe(p,"dial");return e.map(t=>{const u=t.color||te(t.id);let S;if(typeof t.icon==="string"){S=t.icon}else if(typeof t.icon==="function"){S=t.icon(32)}else{S=null}return{id:t.id,name:t.name||A(t.id),icon:S,unavailable:!t.component&&!t.onPress,color:u,onPress:()=>{z(t);I(false)}}})},[p,z]);const fe=g(()=>{if(!m)return k;const e=new Map(k.map(t=>[t.id,t]));return Ke(k.map(t=>t.id)).map(t=>e.get(t)).filter(t=>Boolean(t))},[m,k]);const{settings:V}=on();const me=g(()=>oe(p,"row").filter(e=>(V.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[p,V.floatingTools]);const pe=g(()=>p.map(e=>({id:e.id,name:e.name||A(e.id),description:e.description||Le(e.id),slot:e.slot,icon:e.icon,color:e.color})),[p]);const[ge,Q]=W(false);const J=h.openApps.some(e=>!e.minimized);d(()=>{if(D)return;let e=false;const t=setTimeout(async()=>{const u=await v.getItem(ce);if(!e&&!u)Q(true)},1e3);return()=>{e=true;clearTimeout(t)}},[D]);const b=C(()=>{Q(false);void v.setItem(ce,"true")},[]);const X=C(()=>{b();I(true)},[b]);const ve=C(()=>{I(false);M(false)},[]);const ye=C(()=>{M(e=>!e)},[]);const Te=C(()=>M(false),[]);const Z=Boolean(i?.length&&c);const q=V.floatingTools.environment!==false;const O=ge&&!m&&!J&&!y;d(()=>{if(!O)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))b()};const t=u=>{if(u.key==="Escape")b()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",t);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",t)}},[O,b]);const ee=h.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const ne=o(Je,{modules:r,apps:a,requiredEnvVars:f,externalSync:l,headless:_,sentryGetClient:w});if(_)return ne;return E("div",{"data-buoy-root":"",style:{display:"contents"},children:[ne,o(dn,{}),O&&o("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),o("div",{style:y?{visibility:"hidden"}:{display:"contents"},"aria-hidden":y||void 0,children:E(ze,{enablePositionPersistence:!O,pushToSide:m||J,suspendPointerEvents:m,centerOnboarding:O,minimizedStack:ee?o(Ge,{}):void 0,hasMinimizedStack:ee,children:[j&&q&&!Z&&o(je,{environment:j}),Z&&q&&o(Be,{currentEnvironment:j??"local",availableEnvironments:i,onSelect:c}),s?o(Ve,{userRole:s,onPress:X}):o("button",{"aria-label":"Open dev tools",onClick:X,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:o(rn,{})}),me.map(e=>o("button",{"aria-label":e.name||A(e.id),title:e.description,onClick:()=>z(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))]})}),O&&o(Ne,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:b}),m&&!y&&o(We,{icons:fe,onClose:ve,centerLabel:"BUOY",onCenterPress:ye,settingsOpen:T,hintsDisabled:D}),T&&!y&&o(Ue,{visible:true,onClose:Te,availableTools:pe,defaultFloatingTools:le,defaultDialTools:de,onSettingsChange:e=>{}}),!y&&E(H,{children:[o(Ye,{}),o(he,{})]})]})}function pn(n){const s=n&&typeof n==="object"?n.appId:void 0;const i=!!n;d(()=>{if(!i)return;let c=false;const a=be.SessionManager;if(!a)return;const r=l=>{if(c||!l)return;a.configure({audience:`app:${l}`});void a.load().catch(()=>{})};if(s)r(s);else void we().then(l=>r(l?.bundleId)).catch(()=>{});return()=>{c=true}},[i,s])}export function FloatingDevTools(n){const{access:s,isPro:i,licenseKey:c}=Se();d(()=>{void Oe.configure(n.licenseKey)},[n.licenseKey]);const a=n.licenseKey===void 0||Ce(n.licenseKey,c);const r=De(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const l=a&&s.status==="admitted";d(()=>{if(l)Ae()},[l]);d(()=>{if(r||s.status==="initializing")return;if(i&&l)Ze();else Xe()},[r,i,l,s.status]);const f=Ee();pn(f?n.signIn:void 0);if(!r&&!i){if(!n.signIn||n.headless)return null;return f?o(se,{needsPlan:true}):o(qe,{})}if(!l){return E(H,{children:[s.status==="initializing"&&o(ln,{modules:n.modules}),n.headless?null:n.signIn&&f?o(se,{}):o(_e,{})]})}return o(an,{...n})}
1
+ "use strict";import{FloatingToolHost as be}from"@buoy-gg/shared-ui/floating";import*as Oe from"@buoy-gg/license";import{LicenseManager as Se,useLicense as Ce,sameLicenseKey as De,resolveDevBuild as Ie,capacitorDebug as Ee,isCapacitorNative as we,loadCapacitorAppHost as _e}from"@buoy-gg/license";import{AccountSetup as ke,HintsProvider as Me,normalizeEnvironment as Pe,registerToolOpener as Ae,startSettingsSync as xe}from"@buoy-gg/shared-ui";import{useState as N,useMemo as g,useCallback as I,useEffect as d,useRef as Re}from"react";import{useSettings as Be,getToolLabel as A,getToolDescription as Fe,getToolColor as te}from"@buoy-gg/floating-tools-react";import{persistentStorage as T,devToolsStorageKeys as x,EnvironmentIndicator as Le,EnvironmentSelectorInline as je}from"@buoy-gg/shared-ui";import{autoDiscoverWithCustom as Ve,getToolsBySlot as oe}from"../utils/autoDiscoverPresets.web.js";import{FloatingTools as ze,UserStatus as Ne}from"./floatingTools.web.js";import{DialMenu as We}from"./dial/DialDevTools.web.js";import{getRankedToolIds as Ke,recordToolUsage as He}from"./dial/dialUsageStore.js";import{OnboardingTooltip as Ue}from"./dial/OnboardingTooltip.web.js";import{SettingsModal as $e}from"./DevToolsSettingsModal.web.js";import{AppHostProvider as Ye,AppOverlay as Ge,useAppHost as ie}from"./AppHost.web.js";import{MinimizedToolsStack as Qe}from"./MinimizedToolsStack.web.js";import{createWebTools as Je}from"../utils/createWebTools.js";import{BrowserToolRuntime as Xe}from"./BrowserToolRuntime.js";import{clearReleaseOptIn as Ze,markReleaseOptIn as qe}from"../releaseOptIn.js";import{BuoySignIn as en}from"./BuoySignIn.web.js";import{BuoySignIn as se}from"./BuoyCodeSignIn.js";import{DevToolsVisibilityProvider as nn,useDevToolsVisibility as tn}from"./DevToolsVisibilityContext.js";import{createWebTool as W}from"../utils/createWebTool.js";import{DefaultConfigProvider as on}from"./DefaultConfigContext.js";import{useDevToolsSettings as sn}from"./DevToolsSettingsModal.shared.js";import{validateDialConfig as re}from"./defaultConfig.js";import{installedTools as rn,installedToolsFound as an}from"../installedTools.js";import{jsx as i,jsxs as w,Fragment as K}from"react/jsx-runtime";const ae={};const le="@react_buoy_floating_menu_tooltip_shown";const ln=T;function cn({size:o=14,color:t="#20C997"}){const s=Math.max(2,o/4);const r=Math.max(1,o/16);return i("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${s}px)`,gap:r,width:o,height:o,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((a,l)=>i("div",{style:{width:s,height:s,borderRadius:s/2,backgroundColor:t}},l))})}function dn(o){const{defaultFloatingTools:t,defaultDialTools:s,disableHints:r=false,children:a}=o;const l=g(()=>s?re(s):s,[s]);return i(on,{defaultFloatingTools:t,defaultDialTools:l,children:i(Me,{disableHints:r,children:w(nn,{children:[i(Ye,{children:i(vn,{...o})}),a]})})})}const un=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function pn({modules:o=ae}){return i(K,{children:Object.entries(o).flatMap(([t,s])=>un.map(r=>{const a=s[r];return a?i(a,{},`${t}:${r}`):null}))})}function fn(){const{openApps:o,restore:t}=ie();d(()=>Ae(s=>{const r=o.find(a=>a.id===s);if(!r)return false;t(r.instanceId);return true}),[o,t]);return null}function mn(){const o=Ee();const t=o===null?process.env.NODE_ENV:o?"development":"production";return Pe(t??"dev")}function gn(o,t,s,r){const a=_=>Object.entries(o).find(([y])=>y.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===_)?.[1];const l=[];const c=a("env");if(t?.length&&c?.createEnvTool&&c.createEnvVarConfig){l.push(W(c.createEnvTool({requiredEnvVars:c.createEnvVarConfig(t)})))}const u=a("storage");if(s?.length&&u?.createStorageTool){l.push(W(u.createStorageTool({requiredStorageKeys:s})))}const v=a("ask-buoy");const h=r==="hosted"?v?.hostedAskBuoy?.():r;if(h&&v?.createAskBuoyTool)l.push(W(v.createAskBuoyTool(h)));return l}function vn({environment:o,userRole:t="admin",availableEnvironments:s,onEnvironmentSwitch:r,apps:a,modules:l=ae,externalSync:c,requiredEnvVars:u,sentryGetClient:v,disableHints:h=false,headless:_=false,hidden:y=false,defaultFloatingTools:de,defaultDialTools:R,zustandStores:B,requiredStorageKeys:H,askBuoy:U}){const F=o??mn();const ue=g(()=>R?re(R):void 0,[R]);const[f,E]=N(false);const[b,k]=N(false);const L=Re(false);const O=ie();const $=g(()=>gn(l,u,H,U),[l,u,H,U]);const m=g(()=>Ve([...Je(l),...a??[],...$]),[a,l,$]);const j=g(()=>Object.entries(l).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[l]);d(()=>{if(!B||typeof j?.watchStores!=="function")return;const e=j.watchStores(B);return typeof e==="function"?e:void 0},[B,j]);const M=tn();const Y=O.openApps.some(e=>!e.minimized);d(()=>{M.setDialOpen(f)},[f,M.setDialOpen]);d(()=>{M.setToolOpen(Y||b)},[Y,b,M.setToolOpen]);const{registerApps:G}=O;d(()=>{G(m.map(e=>{const n=e.icon;return{...e,icon:typeof n==="function"?({size:p})=>n(p):n}}))},[G,m]);const pe=g(()=>m.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[m]);Be({availableTools:pe,storage:ln});d(()=>{let e=false;const n=async()=>{const[p,D]=await Promise.all([T.getItem(x.dial.isOpen()),T.getItem(x.settings.modalOpen())]);if(e)return;if(p==="true")E(true);if(D==="true"){E(true);k(true)}L.current=true};void n();return()=>{e=true}},[]);d(()=>{if(!L.current)return;void T.setItem(x.dial.isOpen(),f?"true":"false")},[f]);d(()=>{if(!L.current)return;void T.setItem(x.settings.modalOpen(),b?"true":"false")},[b]);const V=I(e=>{void He(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const n=typeof e.icon==="function"?e.icon(20):e.icon;O.open({id:e.id,title:e.name||A(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||te(e.id)})}else{e.onPress?.()}},[O]);const P=g(()=>{const e=oe(m,"dial");return e.map(n=>{const p=n.color||te(n.id);let D;if(typeof n.icon==="string"){D=n.icon}else if(typeof n.icon==="function"){D=n.icon(32)}else{D=null}return{id:n.id,name:n.name||A(n.id),icon:D,unavailable:!n.component&&!n.onPress,color:p,onPress:()=>{V(n);E(false)}}})},[m,V]);const fe=g(()=>{if(!f)return P;const e=new Map(P.map(n=>[n.id,n]));return Ke(P.map(n=>n.id)).map(n=>e.get(n)).filter(n=>Boolean(n))},[f,P]);const{settings:z}=sn();const me=g(()=>oe(m,"row").filter(e=>(z.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[m,z.floatingTools]);const ge=g(()=>m.map(e=>({id:e.id,name:e.name||A(e.id),description:e.description||Fe(e.id),slot:e.slot,icon:e.icon,color:e.color})),[m]);const[ve,Q]=N(false);const J=O.openApps.some(e=>!e.minimized);d(()=>{if(h)return;let e=false;const n=setTimeout(async()=>{const p=await T.getItem(le);if(!e&&!p)Q(true)},1e3);return()=>{e=true;clearTimeout(n)}},[h]);const S=I(()=>{Q(false);void T.setItem(le,"true")},[]);const X=I(()=>{S();E(true)},[S]);const ye=I(()=>{E(false);k(false)},[]);const Te=I(()=>{k(e=>!e)},[]);const he=I(()=>k(false),[]);const Z=Boolean(s?.length&&r);const q=z.floatingTools.environment!==false;const C=ve&&!f&&!J&&!y;d(()=>{if(!C)return;const e=p=>{if(!(p.target instanceof Element)||!p.target.closest("[data-buoy-root]"))S()};const n=p=>{if(p.key==="Escape")S()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",n);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",n)}},[C,S]);const ee=O.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const ne=i(Xe,{modules:l,apps:a,requiredEnvVars:u,externalSync:c,headless:_,sentryGetClient:v});if(_)return ne;return w("div",{"data-buoy-root":"",style:{display:"contents"},children:[ne,i(fn,{}),C&&i("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),i("div",{style:y?{visibility:"hidden"}:{display:"contents"},"aria-hidden":y||void 0,children:w(ze,{enablePositionPersistence:!C,pushToSide:f||J,suspendPointerEvents:f,centerOnboarding:C,minimizedStack:ee?i(Qe,{}):void 0,hasMinimizedStack:ee,children:[F&&q&&!Z&&i(Le,{environment:F}),Z&&q&&i(je,{currentEnvironment:F??"local",availableEnvironments:s,onSelect:r}),t?i(Ne,{userRole:t,onPress:X}):i("button",{"aria-label":"Open dev tools",onClick:X,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:i(cn,{})}),me.map(e=>i("button",{"aria-label":e.name||A(e.id),title:e.description,onClick:()=>V(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))]})}),C&&i(Ue,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:S}),f&&!y&&i(We,{icons:fe,onClose:ye,centerLabel:"BUOY",onCenterPress:Te,settingsOpen:b,hintsDisabled:h}),b&&!y&&i($e,{visible:true,onClose:he,availableTools:ge,defaultFloatingTools:de,defaultDialTools:ue,onSettingsChange:e=>{}}),!y&&w(K,{children:[i(Ge,{}),i(be,{})]})]})}function yn(o){const t=o&&typeof o==="object"?o.appId:void 0;const s=!!o;d(()=>{if(!s)return;let r=false;const a=Oe.SessionManager;if(!a)return;const l=c=>{if(r||!c)return;a.configure({audience:`app:${c}`});void a.load().catch(()=>{})};if(t)l(t);else void _e().then(c=>l(c?.bundleId)).catch(()=>{});return()=>{r=true}},[s,t])}let ce=false;function Tn(o){if(o.modules)return o;if(!an&&!ce&&typeof console!=="undefined"){ce=true;console.info("[Buoy] No tools loaded. Add buoy() from '@buoy-gg/core/vite' to your Vite plugins, or pass modules to FloatingDevTools.")}return{...o,modules:rn}}export function FloatingDevTools(o){const t=Tn(o);const{access:s,isPro:r,licenseKey:a}=Ce();d(()=>{void Se.configure(t.licenseKey)},[t.licenseKey]);const l=t.licenseKey===void 0||De(t.licenseKey,a);const c=Ie(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const u=l&&s.status==="admitted";d(()=>{if(u)xe()},[u]);d(()=>{if(c||s.status==="initializing")return;if(r&&u)qe();else Ze()},[c,r,u,s.status]);const v=we();yn(v?t.signIn:void 0);if(!c&&!r){if(!t.signIn||t.headless)return null;return v?i(se,{needsPlan:true}):i(en,{})}if(!u){return w(K,{children:[s.status==="initializing"&&i(pn,{modules:t.modules}),t.headless?null:t.signIn&&v?i(se,{}):i(ke,{})]})}return i(dn,{...t})}
@@ -0,0 +1 @@
1
+ "use strict";export const installedTools={};export const installedToolsFound=false;
@@ -1 +1 @@
1
- "use strict";export const SDK_VERSION="7.0.60";
1
+ "use strict";export const SDK_VERSION="7.0.62";
@@ -0,0 +1,21 @@
1
+ import type { FloatingDevToolsProps } from './floatingMenu/FloatingDevTools.web';
2
+ export interface BuoyDevToolsProps extends FloatingDevToolsProps {
3
+ /**
4
+ * Show Buoy. Defaults to `shouldShowBuoy()`: the phone app's debug flag in a
5
+ * Capacitor shell, otherwise a development build.
6
+ */
7
+ enabled?: boolean;
8
+ }
9
+ /**
10
+ * Whether Buoy shows by default. In a Capacitor shell this is the phone app's
11
+ * debug flag, because phone debug runs often use a production web bundle. In a
12
+ * browser it's a development build.
13
+ */
14
+ export declare function shouldShowBuoy(): boolean;
15
+ /**
16
+ * Buoy with no setup: shows in debug and development builds, loads every
17
+ * installed tool (with the `buoy()` plugin from `@buoy-gg/core/vite`), and
18
+ * stays out of other builds. Takes every `FloatingDevTools` prop.
19
+ */
20
+ export declare function BuoyDevTools({ enabled, ...props }: BuoyDevToolsProps): import("react").FunctionComponentElement<import("react").SuspenseProps> | null;
21
+ //# sourceMappingURL=auto.web.d.ts.map
@@ -16,7 +16,11 @@ export interface FloatingDevToolsProps {
16
16
  onEnvironmentSwitch?: (env: Environment) => void;
17
17
  /** Custom tools to add to the registered packages. */
18
18
  apps?: BrowserToolConfig[];
19
- /** Imported tool packages, keyed by package name. */
19
+ /**
20
+ * Imported tool packages, keyed by package name. Leave it out to use every
21
+ * installed tool (needs the `buoy()` plugin from `@buoy-gg/core/vite`).
22
+ * Pass `{}` for no tools.
23
+ */
20
24
  modules?: BrowserToolModules;
21
25
  externalSync?: boolean | ExternalSyncOptions;
22
26
  requiredEnvVars?: EnvVarConfig[];
@@ -38,8 +42,11 @@ export interface FloatingDevToolsProps {
38
42
  zustandStores?: Record<string, any>;
39
43
  /** Storage keys the Storage tool should check (needs the storage module). */
40
44
  requiredStorageKeys?: StorageKeyConfig[];
41
- /** One-prop Ask Buoy setup (needs the ask-buoy module). */
42
- askBuoy?: FloatingAskBuoyConfig;
45
+ /**
46
+ * One-prop Ask Buoy setup (needs the ask-buoy module). `'hosted'` uses
47
+ * Buoy's hosted AI, the same as passing `hostedAskBuoy()`.
48
+ */
49
+ askBuoy?: FloatingAskBuoyConfig | 'hosted';
43
50
  /** Keep capture and desktop sync running without the floating menu. */
44
51
  headless?: boolean;
45
52
  licenseKey?: string;
@@ -60,5 +67,5 @@ export interface FloatingDevToolsProps {
60
67
  requireLicense?: boolean;
61
68
  }
62
69
  export type { WebToolConfig, Environment, UserRole };
63
- export declare function FloatingDevTools(props: FloatingDevToolsProps): import("react").JSX.Element | null;
70
+ export declare function FloatingDevTools(input: FloatingDevToolsProps): import("react").JSX.Element | null;
64
71
  //# sourceMappingURL=FloatingDevTools.web.d.ts.map
@@ -0,0 +1,14 @@
1
+ import type { BrowserToolModules } from './utils/createWebTools';
2
+ /**
3
+ * The Buoy tools the app has installed, for a host given no `modules`.
4
+ *
5
+ * This file is the stand-in: an empty map. The `buoy()` bundler plugin
6
+ * (`@buoy-gg/core/vite`) replaces `@buoy-gg/core/web/installed-tools` with a
7
+ * generated module that imports every installed tool's `/web` entry and exports
8
+ * the same two names. The browser build keeps the import of this file as that
9
+ * bare specifier so the plugin can swap it (scripts/build-web.mjs).
10
+ */
11
+ export declare const installedTools: BrowserToolModules;
12
+ /** False here; true in the plugin's generated module, even when it found no tools. */
13
+ export declare const installedToolsFound: boolean;
14
+ //# sourceMappingURL=installedTools.d.ts.map
@@ -9,5 +9,5 @@
9
9
  * Drift is prevented by a test that fails when this disagrees with
10
10
  * package.json, so a version bump that forgets this file cannot ship.
11
11
  */
12
- export declare const SDK_VERSION = "7.0.60";
12
+ export declare const SDK_VERSION = "7.0.62";
13
13
  //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1,21 @@
1
+ import type { FloatingDevToolsProps } from './floatingMenu/FloatingDevTools.web';
2
+ export interface BuoyDevToolsProps extends FloatingDevToolsProps {
3
+ /**
4
+ * Show Buoy. Defaults to `shouldShowBuoy()`: the phone app's debug flag in a
5
+ * Capacitor shell, otherwise a development build.
6
+ */
7
+ enabled?: boolean;
8
+ }
9
+ /**
10
+ * Whether Buoy shows by default. In a Capacitor shell this is the phone app's
11
+ * debug flag, because phone debug runs often use a production web bundle. In a
12
+ * browser it's a development build.
13
+ */
14
+ export declare function shouldShowBuoy(): boolean;
15
+ /**
16
+ * Buoy with no setup: shows in debug and development builds, loads every
17
+ * installed tool (with the `buoy()` plugin from `@buoy-gg/core/vite`), and
18
+ * stays out of other builds. Takes every `FloatingDevTools` prop.
19
+ */
20
+ export declare function BuoyDevTools({ enabled, ...props }: BuoyDevToolsProps): import("react").FunctionComponentElement<import("react").SuspenseProps> | null;
21
+ //# sourceMappingURL=auto.web.d.ts.map
@@ -16,7 +16,11 @@ export interface FloatingDevToolsProps {
16
16
  onEnvironmentSwitch?: (env: Environment) => void;
17
17
  /** Custom tools to add to the registered packages. */
18
18
  apps?: BrowserToolConfig[];
19
- /** Imported tool packages, keyed by package name. */
19
+ /**
20
+ * Imported tool packages, keyed by package name. Leave it out to use every
21
+ * installed tool (needs the `buoy()` plugin from `@buoy-gg/core/vite`).
22
+ * Pass `{}` for no tools.
23
+ */
20
24
  modules?: BrowserToolModules;
21
25
  externalSync?: boolean | ExternalSyncOptions;
22
26
  requiredEnvVars?: EnvVarConfig[];
@@ -38,8 +42,11 @@ export interface FloatingDevToolsProps {
38
42
  zustandStores?: Record<string, any>;
39
43
  /** Storage keys the Storage tool should check (needs the storage module). */
40
44
  requiredStorageKeys?: StorageKeyConfig[];
41
- /** One-prop Ask Buoy setup (needs the ask-buoy module). */
42
- askBuoy?: FloatingAskBuoyConfig;
45
+ /**
46
+ * One-prop Ask Buoy setup (needs the ask-buoy module). `'hosted'` uses
47
+ * Buoy's hosted AI, the same as passing `hostedAskBuoy()`.
48
+ */
49
+ askBuoy?: FloatingAskBuoyConfig | 'hosted';
43
50
  /** Keep capture and desktop sync running without the floating menu. */
44
51
  headless?: boolean;
45
52
  licenseKey?: string;
@@ -60,5 +67,5 @@ export interface FloatingDevToolsProps {
60
67
  requireLicense?: boolean;
61
68
  }
62
69
  export type { WebToolConfig, Environment, UserRole };
63
- export declare function FloatingDevTools(props: FloatingDevToolsProps): import("react").JSX.Element | null;
70
+ export declare function FloatingDevTools(input: FloatingDevToolsProps): import("react").JSX.Element | null;
64
71
  //# sourceMappingURL=FloatingDevTools.web.d.ts.map
@@ -0,0 +1,14 @@
1
+ import type { BrowserToolModules } from './utils/createWebTools';
2
+ /**
3
+ * The Buoy tools the app has installed, for a host given no `modules`.
4
+ *
5
+ * This file is the stand-in: an empty map. The `buoy()` bundler plugin
6
+ * (`@buoy-gg/core/vite`) replaces `@buoy-gg/core/web/installed-tools` with a
7
+ * generated module that imports every installed tool's `/web` entry and exports
8
+ * the same two names. The browser build keeps the import of this file as that
9
+ * bare specifier so the plugin can swap it (scripts/build-web.mjs).
10
+ */
11
+ export declare const installedTools: BrowserToolModules;
12
+ /** False here; true in the plugin's generated module, even when it found no tools. */
13
+ export declare const installedToolsFound: boolean;
14
+ //# sourceMappingURL=installedTools.d.ts.map
@@ -9,5 +9,5 @@
9
9
  * Drift is prevented by a test that fails when this disagrees with
10
10
  * package.json, so a version bump that forgets this file cannot ship.
11
11
  */
12
- export declare const SDK_VERSION = "7.0.60";
12
+ export declare const SDK_VERSION = "7.0.62";
13
13
  //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ "use client";import{d as a}from"./chunks/chunk-CLXYMJTS.mjs";import{createElement as n,lazy as l,Suspense as i,useEffect as f,useState as c}from"react";function r(){if(typeof window>"u")return false;let e=window.Capacitor,t=false;try{t=e?.isNativePlatform?.()===true}catch{t=false}return t?e?.DEBUG===true:typeof a<"u"?!!a:process.env.NODE_ENV!=="production"}var o;function p(){return o??(o=l(()=>import("./chunks/FloatingDevTools.web-M3ASH5EV.mjs").then(e=>({default:e.FloatingDevTools})))),o}function d({enabled:e,...t}){let[u,s]=c(false);return f(()=>{s(e??r())},[e]),u?n(i,{fallback:null},n(p(),t)):null}export{d as BuoyDevTools,r as shouldShowBuoy};
@@ -0,0 +1 @@
1
+ "use client";import{v as o}from"./chunk-3YORPV22.mjs";import"./chunk-7G3P7Z7K.mjs";import"./chunk-5SGL6QL4.mjs";import"./chunk-CLXYMJTS.mjs";export{o as FloatingDevTools};
@@ -0,0 +1 @@
1
+ "use client";import{v as o}from"./chunk-JGFWBADO.mjs";import"./chunk-7G3P7Z7K.mjs";import"./chunk-5SGL6QL4.mjs";import"./chunk-CLXYMJTS.mjs";export{o as FloatingDevTools};