@buoy-gg/core 7.0.78 → 7.0.80

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 (63) hide show
  1. package/bundlers/vite.d.ts +1 -1
  2. package/bundlers/vite.mjs +3 -3
  3. package/lib/commonjs/earlyNetwork.js +1 -1
  4. package/lib/commonjs/floatingMenu/AppHost.js +1 -1
  5. package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
  6. package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -1
  7. package/lib/commonjs/floatingMenu/BrowserToolRuntime.js +1 -1
  8. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
  9. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
  10. package/lib/commonjs/floatingMenu/ToolHost.js +1 -1
  11. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -1
  12. package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -1
  13. package/lib/commonjs/floatingMenu/backTarget.js +1 -0
  14. package/lib/commonjs/floatingMenu/capacitorBackButton.js +1 -1
  15. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -1
  16. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -1
  17. package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -1
  18. package/lib/commonjs/floatingMenu/hardwareBack.js +1 -0
  19. package/lib/commonjs/version.js +1 -1
  20. package/lib/module/earlyNetwork.js +1 -1
  21. package/lib/module/floatingMenu/AppHost.js +1 -1
  22. package/lib/module/floatingMenu/AppHost.web.js +1 -1
  23. package/lib/module/floatingMenu/AppHostLogic.js +1 -1
  24. package/lib/module/floatingMenu/BrowserToolRuntime.js +1 -1
  25. package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
  26. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
  27. package/lib/module/floatingMenu/ToolHost.js +1 -1
  28. package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -1
  29. package/lib/module/floatingMenu/autoExternalSync.js +1 -1
  30. package/lib/module/floatingMenu/backTarget.js +1 -0
  31. package/lib/module/floatingMenu/capacitorBackButton.js +1 -1
  32. package/lib/module/floatingMenu/dial/DialDevTools.js +1 -1
  33. package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -1
  34. package/lib/module/floatingMenu/externalSyncGate.js +1 -1
  35. package/lib/module/floatingMenu/hardwareBack.js +1 -0
  36. package/lib/module/version.js +1 -1
  37. package/lib/typescript/commonjs/earlyNetwork.d.ts +19 -4
  38. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts +6 -0
  39. package/lib/typescript/commonjs/floatingMenu/backTarget.d.ts +17 -0
  40. package/lib/typescript/commonjs/floatingMenu/capacitorBackButton.d.ts +5 -3
  41. package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
  42. package/lib/typescript/commonjs/floatingMenu/hardwareBack.d.ts +8 -0
  43. package/lib/typescript/commonjs/version.d.ts +1 -1
  44. package/lib/typescript/module/earlyNetwork.d.ts +19 -4
  45. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts +6 -0
  46. package/lib/typescript/module/floatingMenu/backTarget.d.ts +17 -0
  47. package/lib/typescript/module/floatingMenu/capacitorBackButton.d.ts +5 -3
  48. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
  49. package/lib/typescript/module/floatingMenu/hardwareBack.d.ts +8 -0
  50. package/lib/typescript/module/version.d.ts +1 -1
  51. package/lib/web/auto.mjs +1 -1
  52. package/lib/web/chunks/{FloatingDevTools.web-FB3F35HU.mjs → FloatingDevTools.web-ESKLKOSQ.mjs} +1 -1
  53. package/lib/web/chunks/{FloatingDevTools.web-IIOOVSUC.mjs → FloatingDevTools.web-QLTO5FXP.mjs} +1 -1
  54. package/lib/web/chunks/chunk-H4EIRXRJ.mjs +10 -0
  55. package/lib/web/chunks/chunk-JXTHZBMM.mjs +10 -0
  56. package/lib/web/chunks/chunk-OXRZOHYP.mjs +1 -0
  57. package/lib/web/index.mjs +1 -1
  58. package/lib/web/register-network.mjs +1 -1
  59. package/lib/web/register.mjs +1 -1
  60. package/package.json +5 -5
  61. package/lib/web/chunks/chunk-5EUMNDI5.mjs +0 -1
  62. package/lib/web/chunks/chunk-A6DQ5EDK.mjs +0 -10
  63. package/lib/web/chunks/chunk-LAJ3HKAL.mjs +0 -10
@@ -44,7 +44,7 @@ export declare function findInstalledTools(root: string, options?: { exclude?: s
44
44
  missingWeb: string[];
45
45
  };
46
46
  export declare function installedToolsModule(found: { id: string; key: string }[], options?: { assetList?: string }): string;
47
- export declare function injectRegister(html: string, hook?: string): string | undefined;
47
+ export declare function injectRegister(html: string, hook?: string | string[]): string | undefined;
48
48
  export declare function earlyHook(root: string, register?: boolean | 'react' | 'network'): string | undefined;
49
49
  /** True when the app's package.json asks for Solid 2, where Buoy stays off for now. */
50
50
  export declare function wantsSolid2(root: string): boolean;
package/bundlers/vite.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import{existsSync as x,readFileSync as k,realpathSync as _}from"node:fs";import{createRequire as C}from"node:module";import c from"node:path";export function missingReactNativeWeb(e=import.meta.url){try{C(e).resolve("react-native-web");return false}catch{return true}}const L=[["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 O="@buoy-gg/core/web/installed-tools";const D="@buoy-gg/core/web/register";const W="@buoy-gg/core/web/register-network";const N="\0buoy:installed-tools";const U="@buoy-gg/solid";const z="@buoy-gg/solid/register";const B=["solid-js","solid-js/web","solid-js/store"];const H="#buoy-solid-auto";const J="\0buoy:solid-links";const M=["@buoy-gg/solid","@buoy-gg/solid/register","@buoy-gg/solid/router","@buoy-gg/solid/store","@buoy-gg/solid/highlights"];const v="@buoy-gg/vue";const P="@buoy-gg/vue/register";const A=[{name:"solid",pkg:U,register:z,dedupe:()=>B},{name:"vue",pkg:v,register:P,dedupe:e=>["vue",...e["@tanstack/vue-query"]?["@tanstack/query-core"]:[]]}];export function frameworkHost(e){const t=S(e);return A.find(n=>t[n.pkg])}function I(e){for(let t=e;;t=c.dirname(t)){const n=c.join(t,"package.json");if(x(n))return n;if(c.dirname(t)===t)return void 0}}function S(e){const t=I(e);try{const n=t?JSON.parse(k(t,"utf8")):{};return{...n.dependencies,...n.devDependencies,...n.optionalDependencies,...n.peerDependencies}}catch{return{}}}export function wantsSolid2(e){const t=String(S(e)["solid-js"]??"");return t==="next"||/^[\s^~>=v]*2(?:\.|$)/.test(t)}export function earlyHook(e,t=true){if(t===false)return void 0;if(t==="react")return D;if(t==="network")return W;return frameworkHost(e)?.register??D}export function disabledEntry(e,t){const[n,o,...s]=t.split("/");if(n!=="@buoy-gg"||!o)return void 0;const r=c.join(E(e,`${n}/${o}`)??"","package.json");if(!x(r))return void 0;try{const i=JSON.parse(k(r,"utf8")).exports?.[s.length?`./${s.join("/")}`:"."];const a=i&&typeof i==="object"?i["buoy-disabled"]:void 0;return typeof a==="string"?c.join(c.dirname(r),a):void 0}catch{return void 0}}function E(e,t){for(let n=e;;n=c.dirname(n)){const o=c.join(n,"node_modules",t);if(x(c.join(o,"package.json")))return o;if(c.dirname(n)===n)return void 0}}export function solidLinksModule(e,t){const n=S(e);const o=new Set(t.map(({key:i})=>i));const s=Boolean(n["@tanstack/solid-query"])&&o.has("react-query");const r=Boolean(n["@solidjs/router"])&&o.has("route-events");return[s||r?"import { useContext, getOwner } from 'solid-js';":"",s?"import { QueryClientContext } from '@tanstack/solid-query';":"",r?"import { useLocation, useCurrentMatches, useNavigate } from '@solidjs/router';":"","export function useBuoyLinks(options) {"," const links = {};",s?" const client = useContext(QueryClientContext);\n if (client) links.queryClient = client();":"",r?[" try {"," const location = useLocation(), matches = useCurrentMatches(), navigate = useNavigate(), owner = getOwner();"," links.router = () => import('@buoy-gg/solid/router').then((m) => m.connectBuoyRouter({ location, matches, navigate, routes: options.routes, owner }));"," } catch { /* not inside <Router> */ }"].join("\n"):""," return links;","}",""].filter(Boolean).join("\n")}function V(e){const t=new Map;const n=(o,s)=>{for(const r of s){const i=r.startsWith("@buoy-gg/")&&!t.has(r)?E(o,r):void 0;if(!i)continue;const a=_(i);t.set(r,a);let d=[];try{d=Object.keys(JSON.parse(k(c.join(a,"package.json"),"utf8")).dependencies??{})}catch{}n(a,d)}};n(e,[...Object.keys(S(e)),"@buoy-gg/core"]);return[...t.values()]}function G(e,t){const n=(r,i)=>{for(const a of i){const d=E(a,r);if(d)return d}return void 0};const o=n("react-dom",[e,...t]);const s={react:n("react",[...o?[_(o)]:[],e,...t]),"react-dom":o,"react-native-web":n("react-native-web",[e,...t])};return Object.fromEntries(Object.entries(s).filter(([,r])=>r))}function F(e,t){for(let n=e;;n=c.dirname(n)){const o=c.join(n,"node_modules",t,"package.json");if(x(o)){try{return JSON.parse(k(o,"utf8"))}catch{return void 0}}if(c.dirname(n)===n)return void 0}}export function findInstalledTools(e,{exclude:t=[]}={}){const n=I(e);let o;try{const a=n?JSON.parse(k(n,"utf8")):{};const d={...a.dependencies,...a.devDependencies,...a.optionalDependencies,...a.peerDependencies};if(d["@buoy-gg/core"])o=new Set(Object.keys(d))}catch{}const s=new Set(t.map(a=>a.replace(/^@buoy-gg\//,"")));const r=[];const i=[];for(const[a,d]of L){const y=`@buoy-gg/${a}`;if(s.has(a)||s.has(d)||o&&!o.has(y))continue;const m=F(e,y);if(!m)continue;if(m.exports&&typeof m.exports==="object"&&m.exports["./web"])r.push({id:y,key:d});else i.push(y)}return{found:r,missingWeb:i}}export function installedToolsModule(e,{assetList:t}={}){const n=e.map(({id:i},a)=>`import * as t${a} from ${JSON.stringify(`${i}/web`)};`);const o=e.map(({key:i},a)=>`${JSON.stringify(i)}: t${a}`);const s=e.findIndex(({key:i})=>i==="assets");const r=t&&s!==-1?`t${s}.loadBrowserAssetManifest?.(${JSON.stringify(t)})?.catch?.(() => {});
1
+ import{existsSync as $,readFileSync as k,realpathSync as N}from"node:fs";import{createRequire as z}from"node:module";import c from"node:path";export function missingReactNativeWeb(e=import.meta.url){try{z(e).resolve("react-native-web");return false}catch{return true}}const B=[["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"],["bug-links","bug-links"],["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 x="@buoy-gg/core/web/installed-tools";const O="@buoy-gg/core/web/register";const H="@buoy-gg/core/web/register-network";const J="\0buoy:installed-tools";const P="@buoy-gg/solid";const q="@buoy-gg/solid/register";const C=["solid-js","solid-js/web","solid-js/store"];const A="#buoy-solid-auto";const M="\0buoy:solid-links";const V=["@buoy-gg/solid","@buoy-gg/solid/register","@buoy-gg/solid/router","@buoy-gg/solid/store","@buoy-gg/solid/highlights"];const v="@buoy-gg/vue";const W="@buoy-gg/vue/register";const G=[{name:"solid",pkg:P,register:q,dedupe:()=>C},{name:"vue",pkg:v,register:W,dedupe:e=>["vue",...e["@tanstack/vue-query"]?["@tanstack/query-core"]:[]]}];export function frameworkHost(e){const t=j(e);return G.find(n=>t[n.pkg])}function D(e){for(let t=e;;t=c.dirname(t)){const n=c.join(t,"package.json");if($(n))return n;if(c.dirname(t)===t)return void 0}}function j(e){const t=D(e);try{const n=t?JSON.parse(k(t,"utf8")):{};return{...n.dependencies,...n.devDependencies,...n.optionalDependencies,...n.peerDependencies}}catch{return{}}}export function wantsSolid2(e){const t=String(j(e)["solid-js"]??"");return t==="next"||/^[\s^~>=v]*2(?:\.|$)/.test(t)}export function earlyHook(e,t=true){if(t===false)return void 0;if(t==="react")return O;if(t==="network")return H;return frameworkHost(e)?.register??O}export function disabledEntry(e,t){const[n,o,...s]=t.split("/");if(n!=="@buoy-gg"||!o)return void 0;const r=c.join(_(e,`${n}/${o}`)??"","package.json");if(!$(r))return void 0;try{const a=JSON.parse(k(r,"utf8")).exports?.[s.length?`./${s.join("/")}`:"."];const i=a&&typeof a==="object"?a["buoy-disabled"]:void 0;return typeof i==="string"?c.join(c.dirname(r),i):void 0}catch{return void 0}}function _(e,t){for(let n=e;;n=c.dirname(n)){const o=c.join(n,"node_modules",t);if($(c.join(o,"package.json")))return o;if(c.dirname(n)===n)return void 0}}export function solidLinksModule(e,t){const n=j(e);const o=new Set(t.map(({key:a})=>a));const s=Boolean(n["@tanstack/solid-query"])&&o.has("react-query");const r=Boolean(n["@solidjs/router"])&&o.has("route-events");return[s||r?"import { useContext, getOwner } from 'solid-js';":"",s?"import { QueryClientContext, onlineManager } from '@tanstack/solid-query';":"",r?"import { useLocation, useCurrentMatches, useNavigate } from '@solidjs/router';":"","export function useBuoyLinks(options) {"," const links = {};",s?" const client = useContext(QueryClientContext);\n if (client) { links.queryClient = client(); links.onlineManager = onlineManager; }":"",r?[" try {"," const location = useLocation(), matches = useCurrentMatches(), navigate = useNavigate(), owner = getOwner();"," links.router = () => import('@buoy-gg/solid/router').then((m) => m.connectBuoyRouter({ location, matches, navigate, routes: options.routes, owner }));"," } catch { /* not inside <Router> */ }"].join("\n"):""," return links;","}",""].filter(Boolean).join("\n")}function F(e){const t=new Map;const n=(o,s)=>{for(const r of s){const a=r.startsWith("@buoy-gg/")&&!t.has(r)?_(o,r):void 0;if(!a)continue;const i=N(a);t.set(r,i);let d=[];try{d=Object.keys(JSON.parse(k(c.join(i,"package.json"),"utf8")).dependencies??{})}catch{}n(i,d)}};n(e,[...Object.keys(j(e)),"@buoy-gg/core"]);return[...t.values()]}function Q(e,t){const n=(r,a)=>{for(const i of a){const d=_(i,r);if(d)return d}return void 0};const o=n("react-dom",[e,...t]);const s={react:n("react",[...o?[N(o)]:[],e,...t]),"react-dom":o,"react-native-web":n("react-native-web",[e,...t])};return Object.fromEntries(Object.entries(s).filter(([,r])=>r))}function K(e,t){for(let n=e;;n=c.dirname(n)){const o=c.join(n,"node_modules",t,"package.json");if($(o)){try{return JSON.parse(k(o,"utf8"))}catch{return void 0}}if(c.dirname(n)===n)return void 0}}export function findInstalledTools(e,{exclude:t=[]}={}){const n=D(e);let o;try{const i=n?JSON.parse(k(n,"utf8")):{};const d={...i.dependencies,...i.devDependencies,...i.optionalDependencies,...i.peerDependencies};if(d["@buoy-gg/core"])o=new Set(Object.keys(d))}catch{}const s=new Set(t.map(i=>i.replace(/^@buoy-gg\//,"")));const r=[];const a=[];for(const[i,d]of B){const y=`@buoy-gg/${i}`;if(s.has(i)||s.has(d)||o&&!o.has(y))continue;const m=K(e,y);if(!m)continue;if(m.exports&&typeof m.exports==="object"&&m.exports["./web"])r.push({id:y,key:d});else a.push(y)}return{found:r,missingWeb:a}}export function installedToolsModule(e,{assetList:t}={}){const n=e.map(({id:a},i)=>`import * as t${i} from ${JSON.stringify(`${a}/web`)};`);const o=e.map(({key:a},i)=>`${JSON.stringify(a)}: t${i}`);const s=e.findIndex(({key:a})=>a==="assets");const r=t&&s!==-1?`t${s}.loadBrowserAssetManifest?.(${JSON.stringify(t)})?.catch?.(() => {});
2
2
  `:"";return`${n.join("\n")}
3
3
  ${r}export const installedTools = { ${o.join(", ")} };
4
4
  export const installedToolsFound = true;
5
- `}function Q(e){return e.replace(/<!--[\s\S]*?(?:-->|$)/g,t=>" ".repeat(t.length))}export function injectRegister(e,t=D){const n=`<script type="module">import ${JSON.stringify(t)};<\/script>`;const o=Q(e).search(/<script\b[^>]*\btype\s*=\s*["']?module["']?[^>]*>/i);return o===-1?void 0:`${e.slice(0,o)}${n}
6
- ${e.slice(o)}`}function K(e,t){const n=I(e);const o=new Set(t.map(s=>s.replace(/^@buoy-gg\//,"")));try{const s=n?JSON.parse(k(n,"utf8")):{};const r={...s.dependencies,...s.devDependencies,...s.optionalDependencies,...s.peerDependencies};return L.filter(([i,a])=>r[`@buoy-gg/${i}`]&&!o.has(i)&&!o.has(a)).map(([i])=>`@buoy-gg/${i}`).join()}catch{return""}}export function assetListUrl(e,t,n){const o=n==="serve"&&!/^(?:\/|[a-z]+:)/i.test(e)?"/":e;return/^(?:\/|[a-z]+:)/i.test(o)?`${o.endsWith("/")?o:`${o}/`}${t}`:void 0}export function buoy({exclude:e=[],register:t=true,enableInRelease:n=false}={}){let o={found:[],missingWeb:[]};let s=process.cwd();let r=t===false?void 0:D;let i=false;let a=false;let d=[];let y;let m;let T;const $=()=>{clearInterval(T);T=void 0};return{name:"buoy",enforce:"pre",config(u,l){s=c.resolve(u.root??process.cwd());o=findInstalledTools(s,{exclude:e});const f=frameworkHost(s);const b=f?.name==="solid";a=b;const p=b&&wantsSolid2(s);if(p)console.warn("[buoy] This app uses Solid 2, and @buoy-gg/solid supports Solid 1.8 and 1.9 for now. Buoy is off, so your app still runs.");const g=l?.command==="build";i=Boolean(f)&&(p||g&&!n);r=i?void 0:earlyHook(s,t);d=V(s);const j=d.some(w=>!w.split(c.sep).includes("node_modules"))?G(s,d):void 0;const h=o.found.map(({id:w})=>`${w}/web`);if(f?.name==="vue"){if(r)h.unshift(r);const w=new Set(o.found.map(({key:q})=>q));h.push("@buoy-gg/core/web","@buoy-gg/core/web/register-network",`${v}/register`);h.push(v,`${v}/pinia`,...w.has("route-events")?[`${v}/router`]:[],...w.has("highlight-updates")?[`${v}/highlights`]:[]);const R={optimizeDeps:{exclude:[O],include:h},resolve:{dedupe:f.dedupe(S(s)),alias:j}};return g&&!i?{...R,define:{__VUE_PROD_DEVTOOLS__:"true"}}:R}if(!b){if(r)h.unshift(r);return{optimizeDeps:{exclude:[O],include:h},resolve:{alias:j}}}h.unshift("@buoy-gg/core/web","@buoy-gg/core/web/register-network","@buoy-gg/solid > @buoy-gg/shared-ui/web/utils");return{optimizeDeps:{exclude:[O,...M],include:h},resolve:{dedupe:B,alias:j}}},configResolved(u){y=u.logger;if(!i&&missingReactNativeWeb())throw new Error("[buoy] Buoy's menu needs react-native-web, and it isn't installed. Run: npm install react-native-web");const l=u.plugins.find(p=>p.name==="buoy-asset-manifest");m=l?assetListUrl(u.base,l.api?.filename??"buoy-assets.json",u.command):void 0;if(l&&!m)y.warn(`[buoy] base '${u.base}' is relative, so load the asset list yourself with loadBrowserAssetManifest().`);const f=u.server?.fs?.allow;for(const p of f?d.map(g=>g.split(c.sep).join("/")):[]){if(!f.some(g=>`${p}/`.startsWith(`${g.replace(/\/$/,"")}/`)))f.push(p)}if(u.command!=="serve"||i)return;const b=o.found.map(({key:p})=>p).join(", ")||"none";y.info(`[buoy] tools: ${b}`);if(o.missingWeb.length)y.warn(`[buoy] these have no browser build; update them to the same release as @buoy-gg/core: ${o.missingWeb.join(", ")}`)},configureServer(u){const l=I(s);if(!l)return;const f=g=>g.map(({id:j})=>j).join();const b=()=>{if(f(findInstalledTools(s,{exclude:e}).found)===f(o.found))return false;$();void u.restart();return true};const p=()=>{$();if(K(s,e)===f(o.found))return;let g=0;T=setInterval(()=>{if(!b()&&++g>=120)$()},1e3)};u.watcher.add(l);u.watcher.on("change",g=>{if(c.resolve(g)===c.resolve(l)&&!b())p()});p()},closeBundle(){$()},resolveId(u){if(u===O)return N;if(u===H&&a)return J;if(i&&u.startsWith("@buoy-gg/"))return disabledEntry(s,u);return void 0},load(u){if(u===N)return installedToolsModule(o.found,{assetList:m});if(u===J)return solidLinksModule(s,o.found);return void 0},transformIndexHtml:{order:"pre",handler(u){if(!r)return u;const l=injectRegister(u,r);if(l===void 0)y?.warn(`[buoy] index.html has no module script, so the early hook wasn't added. Import '${r}' first in your entry file.`);return l??u}}}}export default buoy;
5
+ `}function X(e){return e.replace(/<!--[\s\S]*?(?:-->|$)/g,t=>" ".repeat(t.length))}export function injectRegister(e,t=O){const n=`<script type="module">${[t].flat().map(s=>`import ${JSON.stringify(s)};`).join(" ")}<\/script>`;const o=X(e).search(/<script\b[^>]*\btype\s*=\s*["']?module["']?[^>]*>/i);return o===-1?void 0:`${e.slice(0,o)}${n}
6
+ ${e.slice(o)}`}function Y(e,t){const n=D(e);const o=new Set(t.map(s=>s.replace(/^@buoy-gg\//,"")));try{const s=n?JSON.parse(k(n,"utf8")):{};const r={...s.dependencies,...s.devDependencies,...s.optionalDependencies,...s.peerDependencies};return B.filter(([a,i])=>r[`@buoy-gg/${a}`]&&!o.has(a)&&!o.has(i)).map(([a])=>`@buoy-gg/${a}`).join()}catch{return""}}export function assetListUrl(e,t,n){const o=n==="serve"&&!/^(?:\/|[a-z]+:)/i.test(e)?"/":e;return/^(?:\/|[a-z]+:)/i.test(o)?`${o.endsWith("/")?o:`${o}/`}${t}`:void 0}export function buoy({exclude:e=[],register:t=true,enableInRelease:n=false}={}){let o={found:[],missingWeb:[]};let s=process.cwd();let r=t===false?void 0:O;let a=[];let i=false;let d=false;let y=[];let m;let I;let T;const S=()=>{clearInterval(T);T=void 0};return{name:"buoy",enforce:"pre",config(u,l){s=c.resolve(u.root??process.cwd());o=findInstalledTools(s,{exclude:e});const f=frameworkHost(s);const b=f?.name==="solid";d=b;const p=b&&wantsSolid2(s);if(p)console.warn("[buoy] This app uses Solid 2, and @buoy-gg/solid supports Solid 1.8 and 1.9 for now. Buoy is off, so your app still runs.");const g=l?.command==="build";i=Boolean(f)&&(p||g&&!n);r=i?void 0:earlyHook(s,t);const E=r===q||r===W;a=E&&o.found.some(({key:w})=>w==="network")?["@buoy-gg/network/web"]:[];y=F(s);const R=y.some(w=>!w.split(c.sep).includes("node_modules"))?Q(s,y):void 0;const h=o.found.map(({id:w})=>`${w}/web`);if(f?.name==="vue"){if(r)h.unshift(r);const w=new Set(o.found.map(({key:U})=>U));h.push("@buoy-gg/core/web","@buoy-gg/core/web/register-network",`${v}/register`);h.push(v,`${v}/pinia`,...w.has("route-events")?[`${v}/router`]:[],...w.has("highlight-updates")?[`${v}/highlights`]:[]);const L={optimizeDeps:{exclude:[x],include:h},resolve:{dedupe:f.dedupe(j(s)),alias:R}};return g&&!i?{...L,define:{__VUE_PROD_DEVTOOLS__:"true"}}:L}if(!b){if(r)h.unshift(r);return{optimizeDeps:{exclude:[x],include:h},resolve:{alias:R}}}h.unshift("@buoy-gg/core/web","@buoy-gg/core/web/register-network","@buoy-gg/solid > @buoy-gg/shared-ui/web/utils");return{optimizeDeps:{exclude:[x,...V],include:h},resolve:{dedupe:C,alias:R}}},configResolved(u){m=u.logger;if(!i&&missingReactNativeWeb())throw new Error("[buoy] Buoy's menu needs react-native-web, and it isn't installed. Run: npm install react-native-web");const l=u.plugins.find(p=>p.name==="buoy-asset-manifest");I=l?assetListUrl(u.base,l.api?.filename??"buoy-assets.json",u.command):void 0;if(l&&!I)m.warn(`[buoy] base '${u.base}' is relative, so load the asset list yourself with loadBrowserAssetManifest().`);const f=u.server?.fs?.allow;for(const p of f?y.map(g=>g.split(c.sep).join("/")):[]){if(!f.some(g=>`${p}/`.startsWith(`${g.replace(/\/$/,"")}/`)))f.push(p)}if(u.command!=="serve"||i)return;const b=o.found.map(({key:p})=>p).join(", ")||"none";m.info(`[buoy] tools: ${b}`);if(o.missingWeb.length)m.warn(`[buoy] these have no browser build; update them to the same release as @buoy-gg/core: ${o.missingWeb.join(", ")}`)},configureServer(u){const l=D(s);if(!l)return;const f=g=>g.map(({id:E})=>E).join();const b=()=>{if(f(findInstalledTools(s,{exclude:e}).found)===f(o.found))return false;S();void u.restart();return true};const p=()=>{S();if(Y(s,e)===f(o.found))return;let g=0;T=setInterval(()=>{if(!b()&&++g>=120)S()},1e3)};u.watcher.add(l);u.watcher.on("change",g=>{if(c.resolve(g)===c.resolve(l)&&!b())p()});p()},closeBundle(){S()},resolveId(u){if(u===x)return J;if(u===A&&d)return M;if(i&&u.startsWith("@buoy-gg/"))return disabledEntry(s,u);return void 0},load(u){if(u===J)return installedToolsModule(o.found,{assetList:I});if(u===M)return solidLinksModule(s,o.found);return void 0},transformIndexHtml:{order:"pre",handler(u){if(!r)return u;const l=injectRegister(u,[r,...a]);if(l===void 0)m?.warn(`[buoy] index.html has no module script, so the early hook wasn't added. Import '${r}' first in your entry file.`);return l??u}}}}export default buoy;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.installEarlyNetworkRecorder=installEarlyNetworkRecorder;const MAX_RECORDS=100;function installEarlyNetworkRecorder(){if(typeof window==="undefined")return;const u=window;if(u.__BUOY_EARLY_NETWORK__)return;const d=Date.now;let f=true;const i=[];const y=c=>{i.push(c);if(i.length>MAX_RECORDS){const e=i.shift();if(e?.kind==="fetch")void e.settled.then(r=>r.clone?.body?.cancel()).catch(()=>{})}};const l=typeof window.fetch==="function"?window.fetch:void 0;if(l){window.fetch=function c(e,r){if(r?.__buoyInternal)return l.call(window,e,r);if(!f)return l.call(window,e,r);let h;try{if(e instanceof Request&&e.body&&!e.bodyUsed&&r?.body===void 0)h=e.clone()}catch{}const a=d();const o=l.call(window,e,r);const n=o.then(t=>{const s=d();const _=/event-stream|ndjson/.test(t.headers.get("content-type")??"");let w;try{if(!_)w=t.clone()}catch{}return{response:t,clone:w,headersAt:s}},t=>({error:t,headersAt:d()}));y({kind:"fetch",input:e,init:r,requestCopy:h,start:a,settled:n});return o}}if(typeof XMLHttpRequest!=="undefined"){const c=XMLHttpRequest.prototype;const{open:e,send:r,setRequestHeader:h}=c;const a=new WeakMap;c.open=function(o,n,...t){if(f)a.set(this,{method:o,url:String(n),headers:{}});return e.call(this,o,n,...t)};c.setRequestHeader=function(o,n){const t=a.get(this);if(t)t.headers[o]=n;return h.call(this,o,n)};c.send=function(o){const n=a.get(this);if(f&&n){a.delete(this);const t=d();const s=this;s.addEventListener("readystatechange",()=>{if(s.readyState===2&&s._buoyTtfb===void 0)s._buoyTtfb=d()-t;if(s.readyState===4)s._buoyEarlyEnd=d()});y({kind:"xhr",xhr:s,method:n.method,url:n.url,headers:n.headers,body:o,start:t})}return r.call(this,o)}}u.__BUOY_EARLY_NETWORK__={version:1,records:i,adopt(){f=false;return i.splice(0)}}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LEGACY_EARLY_NETWORK_KEY=exports.EARLY_NETWORK_KEY=void 0;exports.installEarlyNetworkRecorder=installEarlyNetworkRecorder;const EARLY_NETWORK_KEY=exports.EARLY_NETWORK_KEY=Symbol.for("buoy.earlyNetwork");const LEGACY_EARLY_NETWORK_KEY=exports.LEGACY_EARLY_NETWORK_KEY="__BUOY_EARLY_NETWORK__";const MAX_RECORDS=100;function installEarlyNetworkRecorder(){if(typeof window==="undefined")return;const u=window;if(u[EARLY_NETWORK_KEY]||u[LEGACY_EARLY_NETWORK_KEY])return;const d=Date.now;let i=true;const f=[];const E=s=>{f.push(Object.freeze(s));if(f.length>MAX_RECORDS){const e=f.shift();if(e?.kind==="fetch")void e.settled.then(r=>r.clone?.body?.cancel()).catch(()=>{})}};const l=typeof window.fetch==="function"?window.fetch:void 0;if(l){window.fetch=function s(e,r){if(r?.__buoyInternal)return l.call(window,e,r);if(!i)return l.call(window,e,r);let h;try{if(e instanceof Request&&e.body&&!e.bodyUsed&&r?.body===void 0)h=e.clone()}catch{}const a=d();const o=l.call(window,e,r);const n=o.then(t=>{const c=d();const b=/event-stream|ndjson/.test(t.headers.get("content-type")??"");let w;try{if(!b)w=t.clone()}catch{}return{response:t,clone:w,headersAt:c}},t=>({error:t,headersAt:d()}));E({kind:"fetch",input:e,init:r,requestCopy:h,start:a,settled:n});return o}}if(typeof XMLHttpRequest!=="undefined"){const s=XMLHttpRequest.prototype;const{open:e,send:r,setRequestHeader:h}=s;const a=new WeakMap;s.open=function(o,n,...t){if(i)a.set(this,{method:o,url:String(n),headers:{}});return e.call(this,o,n,...t)};s.setRequestHeader=function(o,n){const t=a.get(this);if(t)t.headers[o]=n;return h.call(this,o,n)};s.send=function(o){const n=a.get(this);if(i&&n){a.delete(this);const t=d();const c=this;c.addEventListener("readystatechange",()=>{if(c.readyState===2&&c._buoyTtfb===void 0)c._buoyTtfb=d()-t;if(c.readyState===4)c._buoyEarlyEnd=d()});E({kind:"xhr",xhr:c,method:n.method,url:n.url,headers:n.headers,body:o,start:t})}return r.call(this,o)}}const y=()=>{i=false;return f.splice(0)};const R=Object.freeze({version:1,get pending(){return f.length},adopt:y});const _=(s,e)=>{try{Object.defineProperty(u,s,{value:e,enumerable:false,writable:false,configurable:false})}catch{}};_(EARLY_NETWORK_KEY,R);_(LEGACY_EARLY_NETWORK_KEY,Object.freeze({version:1,adopt:y}))}
@@ -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=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _AppHostLogic=require("./AppHostLogic.js");var _AppIcon=require("./AppIcon");var _MinimizedToolsContext=require("./MinimizedToolsContext.js");var _ToolHost=require("./ToolHost.js");var _DevToolsSettingsModal=require("./DevToolsSettingsModal");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,l){if("function"==typeof WeakMap)var a=new WeakMap,m=new WeakMap;return(_interopRequireWildcard=function(i,f){if(!f&&i&&i.__esModule)return i;var c,d,u={__proto__:null,default:i};if(null===i||"object"!=typeof i&&"function"!=typeof i)return u;if(c=f?m:a){if(c.has(i))return c.get(i);c.set(i,u)}for(const g in i)"default"!==g&&{}.hasOwnProperty.call(i,g)&&((d=(c=Object.defineProperty)&&Object.getOwnPropertyDescriptor(i,g))&&(d.get||d.set)?c(u,g,d):u[g]=i[g]);return u})(t,l)}const AppHostContext=(0,_react.createContext)(null);const STORAGE_KEY_OPEN_APPS="@react_buoy_open_apps";const PERSISTENCE_DELAY=500;const AppHostProvider=({children:t})=>{const[l,a]=(0,_react.useState)([]);const[m,i]=(0,_react.useState)(false);const f=(0,_react.useRef)(null);const c=(0,_react.useRef)([]);const d=(0,_react.useRef)(null);const{restore:u}=(0,_MinimizedToolsContext.useMinimizedTools)();const g=(0,_react.useCallback)(n=>{let o="";a(s=>{const{apps:r,instanceId:S,wasMinimized:x}=(0,_AppHostLogic.resolveOpenAppsState)(s,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=S;if(x){setTimeout(()=>u(S),0)}return r});return o},[u]);const e=(0,_react.useCallback)(()=>{if(m)return;if(!c.current.length)return;const n=d.current;if(!n||n.length===0){i(true);return}d.current=null;n.forEach(({id:o,minimized:s})=>{const r=c.current.find(S=>S.id===o);if(r){const S=(0,_AppIcon.renderAppIcon)(r.icon,{slot:"dial",size:20,color:r.color});g({id:r.id,title:r.name,component:r.component,props:r.props,launchMode:r.launchMode||"self-modal",singleton:r.singleton,icon:S,color:r.color,modal:r.modal,minimized:s})}});i(true)},[m,g]);(0,_react.useEffect)(()=>{const n=async()=>{try{const o=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);if(o){const s=JSON.parse(o);let r;if(Array.isArray(s)&&s.length>0){if(typeof s[0]==="string"){r=s.map(S=>({id:S,minimized:false}))}else{r=s}if(r.length){d.current=r;e();return}}}}catch(o){}i(true)};n()},[e]);(0,_react.useEffect)(()=>{if(!m)return;if(f.current){clearTimeout(f.current)}f.current=setTimeout(()=>{const n=l.map(o=>({id:o.id,minimized:o.minimized??false}));_sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS,JSON.stringify(n))},PERSISTENCE_DELAY);return()=>{if(f.current){clearTimeout(f.current)}}},[l,m]);const h=(0,_react.useCallback)(n=>{c.current=n;e()},[e]);const p=(0,_react.useCallback)(n=>{a(o=>{if(!o.length)return o;if(!n)return o.slice(0,-1);return o.filter(s=>s.instanceId!==n)})},[]);const v=(0,_react.useCallback)(()=>a([]),[]);const M=(0,_react.useCallback)(n=>{a(o=>o.map(s=>s.instanceId===n?{...s,minimized:true}:s))},[]);const b=(0,_react.useCallback)((n,o)=>{a(s=>s.map(r=>r.instanceId===n?{...r,minimized:false,restoreState:o}:r))},[]);const I=(0,_react.useCallback)(n=>{const o=l.find(s=>s.instanceId===n);return o?.minimized??false},[l]);_react.default.useEffect(()=>{if(l.length===0)return;const n=()=>{p();return true};const o=_reactNative.BackHandler.addEventListener("hardwareBackPress",n);return()=>o.remove()},[l.length,p]);const A=(0,_react.useMemo)(()=>({openApps:l,isAnyOpen:l.filter(n=>n.launchMode!=="toggle-only"&&!n.minimized).length>0,open:g,close:p,closeAll:v,registerApps:h,minimize:M,restore:b,isMinimized:I}),[l,g,p,v,h,M,b,I]);return(0,_jsxRuntime.jsx)(AppHostContext.Provider,{value:A,children:t})};exports.AppHostProvider=AppHostProvider;const useAppHost=()=>{const t=(0,_react.useContext)(AppHostContext);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},minimize:()=>{},restore:(l,a)=>{},isMinimized:()=>false}}return t};exports.useAppHost=useAppHost;const AppRenderer=({app:t,zIndex:l,onClose:a,onMinimize:m,minimizeTargetPosition:i,globalEnableSharedModalDimensions:f})=>{const c=t.component;const d=!t.minimized;const u={...t.props??{},...f===true?{enableSharedModalDimensions:true}:{}};if(t.modal&&(t.launchMode==="self-modal"||!t.launchMode)){return(0,_jsxRuntime.jsx)(_ToolHost.ToolModalShell,{app:t,config:t.modal,visible:d,zIndex:l,onClose:a,onMinimize:m,initialModalState:t.restoreState,enableSharedModalDimensions:f===true,bodyProps:u})}if(t.launchMode==="self-modal"){return(0,_jsxRuntime.jsx)(c,{...u,visible:d,onClose:a,onRequestClose:a,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId,zIndex:l})}if(t.launchMode==="inline"){if(!d)return null;return(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"box-none",style:[_reactNative.StyleSheet.absoluteFill,{zIndex:l}],children:(0,_jsxRuntime.jsx)(c,{...u,onClose:a,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId})})}return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:d,transparent:true,animationType:"slide",onRequestClose:a,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.backdrop,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.card,children:(0,_jsxRuntime.jsx)(c,{...u,onClose:a,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId})})})})};const AppOverlay=()=>{const{openApps:t,close:l,minimize:a}=useAppHost();const{minimize:m,restore:i,getNextIconPosition:f,minimizedTools:c}=(0,_MinimizedToolsContext.useMinimizedTools)();const{settings:d}=(0,_DevToolsSettingsModal.useDevToolsSettings)();(0,_react.useEffect)(()=>{(0,_sharedUi.setExpandableWindowControls)(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);_react.default.useEffect(()=>{t.forEach(e=>{if(e.minimized&&e.launchMode!=="toggle-only"){const h=c.some(p=>p.instanceId===e.instanceId);if(!h){m({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color})}}});c.forEach(e=>{const h=t.find(p=>p.instanceId===e.instanceId);if(!h||!h.minimized){i(e.instanceId)}})},[t,c,m,i]);const u=t.filter(e=>e.launchMode!=="toggle-only");if(u.length===0)return null;const g=9e3;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:u.map((e,h)=>{const p=g+h;const v=f();const M=b=>{a(e.instanceId);m({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color,modalState:b})};return(0,_jsxRuntime.jsx)(AppRenderer,{app:e,zIndex:p,onClose:()=>l(e.instanceId),onMinimize:M,minimizeTargetPosition:v,globalEnableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions},e.instanceId)})})};exports.AppOverlay=AppOverlay;const styles=_reactNative.StyleSheet.create({backdrop:{flex:1,backgroundColor:"rgba(0,0,0,0.28)",alignItems:"center",justifyContent:"center"},card:{maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"}});
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=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _AppHostLogic=require("./AppHostLogic.js");var _AppIcon=require("./AppIcon");var _MinimizedToolsContext=require("./MinimizedToolsContext.js");var _ToolHost=require("./ToolHost.js");var _DevToolsSettingsModal=require("./DevToolsSettingsModal");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.js");var _hardwareBack=require("./hardwareBack.js");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,s){if("function"==typeof WeakMap)var c=new WeakMap,m=new WeakMap;return(_interopRequireWildcard=function(i,f){if(!f&&i&&i.__esModule)return i;var l,d,u={__proto__:null,default:i};if(null===i||"object"!=typeof i&&"function"!=typeof i)return u;if(l=f?m:c){if(l.has(i))return l.get(i);l.set(i,u)}for(const p in i)"default"!==p&&{}.hasOwnProperty.call(i,p)&&((d=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(i,p))&&(d.get||d.set)?l(u,p,d):u[p]=i[p]);return u})(t,s)}const AppHostContext=(0,_react.createContext)(null);const STORAGE_KEY_OPEN_APPS="@react_buoy_open_apps";const PERSISTENCE_DELAY=500;const AppHostProvider=({children:t})=>{const[s,c]=(0,_react.useState)([]);const[m,i]=(0,_react.useState)(false);const f=(0,_react.useRef)(null);const l=(0,_react.useRef)([]);const d=(0,_react.useRef)(null);const{restore:u}=(0,_MinimizedToolsContext.useMinimizedTools)();const p=(0,_react.useCallback)(n=>{let o="";c(r=>{const{apps:a,instanceId:v,wasMinimized:y}=(0,_AppHostLogic.resolveOpenAppsState)(r,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=v;if(y){setTimeout(()=>u(v),0)}return a});return o},[u]);const e=(0,_react.useCallback)(()=>{if(m)return;if(!l.current.length)return;const n=d.current;if(!n||n.length===0){i(true);return}d.current=null;n.forEach(({id:o,minimized:r})=>{const a=l.current.find(v=>v.id===o);if(a){const v=(0,_AppIcon.renderAppIcon)(a.icon,{slot:"dial",size:20,color:a.color});p({id:a.id,title:a.name,component:a.component,props:a.props,launchMode:a.launchMode||"self-modal",singleton:a.singleton,icon:v,color:a.color,modal:a.modal,minimized:r})}});i(true)},[m,p]);(0,_react.useEffect)(()=>{const n=async()=>{try{const o=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);if(o){const r=JSON.parse(o);let a;if(Array.isArray(r)&&r.length>0){if(typeof r[0]==="string"){a=r.map(v=>({id:v,minimized:false}))}else{a=r}if(a.length){d.current=a;e();return}}}}catch(o){}i(true)};n()},[e]);(0,_react.useEffect)(()=>{if(!m)return;if(f.current){clearTimeout(f.current)}f.current=setTimeout(()=>{const n=s.map(o=>({id:o.id,minimized:o.minimized??false}));_sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS,JSON.stringify(n))},PERSISTENCE_DELAY);return()=>{if(f.current){clearTimeout(f.current)}}},[s,m]);const g=(0,_react.useCallback)(n=>{l.current=n;e()},[e]);const h=(0,_react.useCallback)(n=>{c(o=>{if(!o.length)return o;if(!n)return o.slice(0,-1);return o.filter(r=>r.instanceId!==n)})},[]);const S=(0,_react.useCallback)(()=>c([]),[]);const b=(0,_react.useCallback)(n=>{c(o=>o.map(r=>r.instanceId===n?{...r,minimized:true}:r))},[]);const M=(0,_react.useCallback)((n,o)=>{c(r=>(0,_AppHostLogic.restoreOpenApp)(r,n,o))},[]);const I=(0,_react.useCallback)(n=>{const o=s.find(r=>r.instanceId===n);return o?.minimized??false},[s]);const{isDialOpen:A}=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();(0,_hardwareBack.useHardwareBack)(s.length>0,()=>{const n=(0,_hardwareBack.resolveBackTarget)(s,A);if(n?.kind!=="tool")return false;h(n.instanceId);return true});const x=(0,_react.useMemo)(()=>({openApps:s,isAnyOpen:s.filter(n=>n.launchMode!=="toggle-only"&&!n.minimized).length>0,open:p,close:h,closeAll:S,registerApps:g,minimize:b,restore:M,isMinimized:I}),[s,p,h,S,g,b,M,I]);return(0,_jsxRuntime.jsx)(AppHostContext.Provider,{value:x,children:t})};exports.AppHostProvider=AppHostProvider;const useAppHost=()=>{const t=(0,_react.useContext)(AppHostContext);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},minimize:()=>{},restore:(s,c)=>{},isMinimized:()=>false}}return t};exports.useAppHost=useAppHost;const AppRenderer=({app:t,zIndex:s,onClose:c,onMinimize:m,minimizeTargetPosition:i,globalEnableSharedModalDimensions:f})=>{const l=t.component;const d=!t.minimized;const u={...t.props??{},...f===true?{enableSharedModalDimensions:true}:{}};if(t.modal&&(t.launchMode==="self-modal"||!t.launchMode)){return(0,_jsxRuntime.jsx)(_ToolHost.ToolModalShell,{app:t,config:t.modal,visible:d,zIndex:s,onClose:c,onMinimize:m,initialModalState:t.restoreState,enableSharedModalDimensions:f===true,bodyProps:u})}if(t.launchMode==="self-modal"){return(0,_jsxRuntime.jsx)(l,{...u,visible:d,onClose:c,onRequestClose:c,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId,zIndex:s})}if(t.launchMode==="inline"){if(!d)return null;return(0,_jsxRuntime.jsx)(_reactNative.View,{nativeID:"buoy-tool-host",pointerEvents:"box-none",style:[_reactNative.StyleSheet.absoluteFill,{zIndex:s}],children:(0,_jsxRuntime.jsx)(l,{...u,onClose:c,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId})})}return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:d,transparent:true,animationType:"slide",onRequestClose:c,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.backdrop,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.card,children:(0,_jsxRuntime.jsx)(l,{...u,onClose:c,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId})})})})};const AppOverlay=()=>{const{openApps:t,close:s,minimize:c}=useAppHost();const{minimize:m,restore:i,getNextIconPosition:f,minimizedTools:l}=(0,_MinimizedToolsContext.useMinimizedTools)();const{settings:d}=(0,_DevToolsSettingsModal.useDevToolsSettings)();(0,_react.useEffect)(()=>{(0,_sharedUi.setExpandableWindowControls)(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);_react.default.useEffect(()=>{t.forEach(e=>{if(e.minimized&&e.launchMode!=="toggle-only"){const g=l.some(h=>h.instanceId===e.instanceId);if(!g){m({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color})}}});l.forEach(e=>{const g=t.find(h=>h.instanceId===e.instanceId);if(!g||!g.minimized){i(e.instanceId)}})},[t,l,m,i]);const u=t.filter(e=>e.launchMode!=="toggle-only");if(u.length===0)return null;const p=9e3;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:u.map((e,g)=>{const h=p+g;const S=f();const b=M=>{c(e.instanceId);m({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color,modalState:M})};return(0,_jsxRuntime.jsx)(AppRenderer,{app:e,zIndex:h,onClose:()=>s(e.instanceId),onMinimize:b,minimizeTargetPosition:S,globalEnableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions},e.instanceId)})})};exports.AppOverlay=AppOverlay;const styles=_reactNative.StyleSheet.create({backdrop:{flex:1,backgroundColor:"rgba(0,0,0,0.28)",alignItems:"center",justifyContent:"center"},card:{maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useAppHost=exports.AppOverlay=exports.AppHostProvider=void 0;var _floating=require("@buoy-gg/shared-ui/floating");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,a]=(0,_react.useState)([]);const[c,d]=(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 h=(0,_react.useRef)(false);const v=(0,_react.useCallback)(n=>{let o="";a(i=>{const{apps:e,instanceId:l}=(0,_AppHostLogic.resolveOpenAppsState)(i,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=l;return e});return o},[]);const b=(0,_react.useCallback)(()=>{if(r.current||!f.current||!h.current)return;r.current=true;const n=u.current;if(!n||n.length===0){d(true);return}u.current=null;n.forEach(({id:o,minimized:i})=>{const e=p.current.find(l=>l.id===o);if(e&&e.component){const l=(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color});v({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:l,color:e.color,minimized:i})}});d(true)},[v]);(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 l;if(Array.isArray(e)&&e.length>0){if(typeof e[0]==="string"){l=e.map(g=>({id:g,minimized:false}))}else{l=e.filter(g=>typeof g==="object"&&g!==null&&typeof g.id==="string")}if(l.length){u.current=l}}}}catch{}if(n)return;f.current=true;b()};void o();return()=>{n=true}},[b]);(0,_react.useEffect)(()=>{if(!c)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,c]);const A=(0,_react.useCallback)(n=>{p.current=n;h.current=true;b()},[b]);const m=(0,_react.useCallback)(n=>{a(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)(()=>a([]),[]);const x=(0,_react.useCallback)((n,o)=>{a(i=>i.map(e=>e.instanceId===n?{...e,minimized:true,restoreState:o}:e))},[]);const I=(0,_react.useCallback)((n,o)=>{a(i=>{const e=i.find(l=>l.instanceId===n);if(!e)return i;return[...i.filter(l=>l!==e),{...e,minimized:false,restoreState:o??e.restoreState}]})},[]);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)};return(0,_floating.listenBuoyKeydown)(n)},[y,m,s]);(0,_capacitorBackButton.useCapacitorBackButton)(s.length>0,()=>m());const C=(0,_react.useMemo)(()=>({openApps:s,isAnyOpen:y,open:v,close:m,closeAll:S,registerApps:A,minimize:x,restore:I,isMinimized:M}),[s,y,v,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:a,onMinimize:c,minimizeTargetPosition:d,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:a,onMinimize:c,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:a,onRequestClose:a,onMinimize:c,minimizeTargetPosition:d,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:a,onMinimize:c,minimizeTargetPosition:d,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:a,onMinimize:c,minimizeTargetPosition:d,initialModalState:t.restoreState,instanceId:t.instanceId})})})};const AppOverlay=()=>{const{openApps:t,close:s,minimize:a}=useAppHost();const{settings:c}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();(0,_react.useEffect)(()=>{(0,_sharedUi.setExpandableWindowControls)(c.globalSettings?.expandableWindowControls!==false)},[c.globalSettings?.expandableWindowControls]);const d=t.filter(r=>r.launchMode!=="toggle-only");if(d.length===0)return null;const p=d.filter(r=>r.minimized).length;const u=(0,_floatingToolsWeb.getBubbleAnchorPosition)()??dockIconPosition(p);return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:d.map((r,f)=>(0,_jsxRuntime.jsx)(AppRenderer,{app:r,zIndex:BASE_ZINDEX+f,onClose:()=>s(r.instanceId),onMinimize:h=>a(r.instanceId,h),enableSharedModalDimensions:c.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:u},r.instanceId))})};exports.AppOverlay=AppOverlay;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useAppHost=exports.AppOverlay=exports.AppHostProvider=void 0;var _floating=require("@buoy-gg/shared-ui/floating");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 _backTarget=require("./backTarget.js");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.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 f=(0,_react.useRef)([]);const u=(0,_react.useRef)(null);const r=(0,_react.useRef)(false);const p=(0,_react.useRef)(false);const v=(0,_react.useRef)(false);const b=(0,_react.useCallback)(e=>{let o="";l(i=>{const{apps:n,instanceId:d}=(0,_AppHostLogic.resolveOpenAppsState)(i,e,()=>`${e.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=d;return n});return o},[]);const h=(0,_react.useCallback)(()=>{if(r.current||!p.current||!v.current)return;r.current=true;const e=u.current;if(!e||e.length===0){c(true);return}u.current=null;e.forEach(({id:o,minimized:i})=>{const n=f.current.find(d=>d.id===o);if(n&&n.component){const d=(0,_AppIcon.renderAppIcon)(n.icon,{slot:"dial",size:20,color:n.color});b({id:n.id,title:n.name,component:n.component,props:n.props,modal:n.modal,launchMode:n.launchMode||"self-modal",singleton:n.singleton??true,icon:d,color:n.color,minimized:i})}});c(true)},[b]);(0,_react.useEffect)(()=>{let e=false;const o=async()=>{try{const i=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);if(e)return;if(i){const n=JSON.parse(i);let d;if(Array.isArray(n)&&n.length>0){if(typeof n[0]==="string"){d=n.map(m=>({id:m,minimized:false}))}else{d=n.filter(m=>typeof m==="object"&&m!==null&&typeof m.id==="string")}if(d.length){u.current=d}}}}catch{}if(e)return;p.current=true;h()};void o();return()=>{e=true}},[h]);(0,_react.useEffect)(()=>{if(!a)return;const e=s.map(o=>({id:o.id,minimized:o.minimized??false}));void _sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS,JSON.stringify(e))},[s,a]);const A=(0,_react.useCallback)(e=>{f.current=e;v.current=true;h()},[h]);const g=(0,_react.useCallback)(e=>{l(o=>{if(!o.length)return o;if(!e)return o.slice(0,-1);return o.filter(i=>i.instanceId!==e)})},[]);const x=(0,_react.useCallback)(()=>l([]),[]);const S=(0,_react.useCallback)((e,o)=>{l(i=>i.map(n=>n.instanceId===e?{...n,minimized:true,restoreState:o}:n))},[]);const I=(0,_react.useCallback)((e,o)=>{l(i=>(0,_AppHostLogic.restoreOpenApp)(i,e,o))},[]);const M=(0,_react.useCallback)(e=>{const o=s.find(i=>i.instanceId===e);return o?.minimized??false},[s]);const y=s.some(e=>e.launchMode!=="toggle-only"&&!e.minimized);(0,_react.useEffect)(()=>{if(!y)return;const e=o=>{if(o.key!=="Escape")return;if(o.defaultPrevented)return;const i=[...s].reverse().find(n=>n.launchMode!=="toggle-only"&&!n.minimized);if(i)g(i.instanceId)};return(0,_floating.listenBuoyKeydown)(e)},[y,g,s]);const{isDialOpen:C}=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();(0,_capacitorBackButton.useCapacitorBackButton)(s.length>0,()=>{const e=(0,_backTarget.resolveBackTarget)(s,C);if(e?.kind==="tool")g(e.instanceId)});const _=(0,_react.useMemo)(()=>({openApps:s,isAnyOpen:y,open:b,close:g,closeAll:x,registerApps:A,minimize:S,restore:I,isMinimized:M}),[s,y,b,g,x,A,S,I,M]);return(0,_jsxRuntime.jsx)(AppHostContext.Provider,{value:_,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:f})=>{const u=t.component;const r=!t.minimized;const p={...t.props??{},...f?{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:f,bodyProps:p})})}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,{...p,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,{...p,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,{...p,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 f=c.filter(r=>r.minimized).length;const u=(0,_floatingToolsWeb.getBubbleAnchorPosition)()??dockIconPosition(f);return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:c.map((r,p)=>(0,_jsxRuntime.jsx)(AppRenderer,{app:r,zIndex:BASE_ZINDEX+p,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.resolveOpenAppsState=void 0;const resolveOpenAppsState=(s,i,p)=>{if(i.singleton){const e=s.find(n=>n.id===i.id);if(e){const n=e.minimized??false;return{instanceId:e.instanceId,wasMinimized:n,apps:[...s.filter(a=>a.instanceId!==e.instanceId),{...e,minimized:false}]}}}const t=p();return{instanceId:t,wasMinimized:false,apps:[...s,{...i,instanceId:t}]}};exports.resolveOpenAppsState=resolveOpenAppsState;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.restoreOpenApp=exports.resolveOpenAppsState=void 0;const resolveOpenAppsState=(s,i,n)=>{if(i.singleton){const e=s.find(p=>p.id===i.id);if(e){const p=e.minimized??false;return{instanceId:e.instanceId,wasMinimized:p,apps:[...s.filter(r=>r.instanceId!==e.instanceId),{...e,minimized:false}]}}}const t=n();return{instanceId:t,wasMinimized:false,apps:[...s,{...i,instanceId:t}]}};exports.resolveOpenAppsState=resolveOpenAppsState;const restoreOpenApp=(s,i,n)=>{const t=s.find(e=>e.instanceId===i);if(!t)return s;return[...s.filter(e=>e!==t),{...t,minimized:false,restoreState:n??t.restoreState}]};exports.restoreOpenApp=restoreOpenApp;
@@ -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 _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 c=(0,_react.useMemo)(()=>Object.fromEntries(Object.entries(e.modules).map(([l,p])=>[l.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),p])),[e.modules]);const o=c["react-query"];return o?.useReactQuerySyncAdapter?(0,_jsxRuntime.jsx)(QueryRuntime,{...e,modules:c,query:o}):(0,_jsxRuntime.jsx)(ToolRuntime,{...e,modules:c})}function QueryRuntime(e){const c=e.query.useReactQuerySyncAdapter();return(0,_jsxRuntime.jsx)(ToolRuntime,{...e,queryAdapter:c})}function ToolRuntime({modules:e,apps:c,requiredEnvVars:o,externalSync:l,headless:p,sentryGetClient:y,queryAdapter:r}){const{isPro:d,tier:_}=(0,_license.useLicense)();const n=(0,_react.useMemo)(()=>{const a={app:_appSyncAdapter.appSyncAdapter};for(const[t,s]of Object.entries(e)){for(const[u,S]of Object.entries(s)){if(u.endsWith("SyncAdapter")&&S&&typeof S==="object")a[t]=S}}if(r)a.query=r;if(e.env?.createEnvSyncAdapter)a.env=e.env.createEnvSyncAdapter(o??[]);for(const t of c??[])if(t.sync)a[`custom:${t.id}`]=t.sync;return a},[e,c,o,r]);const v=(0,_react.useRef)(n);v.current=n;(0,_react.useEffect)(()=>(0,_sharedUi.registerToolAdapters)(()=>v.current),[]);(0,_react.useEffect)(()=>{const a=[];const t=s=>{const u=s?.();if(typeof u==="function")a.push(u)};t(e.network?.startNetworkCapture);t(e.storage?.startBrowserStorageCapture);t(e.assets?.startBrowserAssetCapture);t(e.three?.startThreeCapture);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 a.reverse())s()}},[e]);const R=e["external-sync"];const i=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const f=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:i,isLicensed:d,externalSync:l,isAvailable:Boolean(R)});const g=(0,_externalSyncGate.externalSyncOptions)(l);(0,_license.installCapacitorBridge)({release:!i&&Boolean(g?.enableInRelease)});if(!i&&g?.enableInRelease)warnOnce((0,_externalSyncGate.releaseTransportProblem)(g.socketURL,g));const b=e.sentry?.SentryRoot;return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[Object.entries(e).flatMap(([a,t])=>roots.map(s=>{const u=t[s];return u?(0,_jsxRuntime.jsx)(u,{},`${a}:${s}`):null})),b&&(0,_jsxRuntime.jsx)(b,{getClient:y}),Object.entries(e).flatMap(([a,t])=>overlays.map(s=>{const u=t[s];return u&&(!p||s==="ScenariosOverlay"||s==="ImpersonateOverlay")?(0,_jsxRuntime.jsx)(u,{},`${a}:${s}`):null})),f&&(0,_jsxRuntime.jsx)(BrowserExternalSync,{module:R,tools:n,options:g,isPro:d,tier:_,dev:i})]})}let warned=null;function warnOnce(e){if(!e||e===warned)return;warned=e;console.warn("[Buoy]",e)}function BrowserExternalSync({module:e,tools:c,options:o,isPro:l,tier:p,dev:y}){const r=(0,_capacitorHostInfo.useHostInfo)();const d=(0,_deviceIdentity.useDeviceIdentity)(o,{appName:r.appName,hardwareName:r.hardwareName,platform:r.platform});const _=(0,_react.useMemo)(()=>(0,_capacitorHostInfo.capacitorBrokerURL)(o?.socketURL??(y?e.getDefaultSocketURL():_externalSyncGate.RELEASE_DEFAULT_SOCKET_URL),Boolean(o?.socketURL),r.platform),[o?.socketURL,y,e,r.platform]);const{socket:n}=e.useExternalSyncSocket({deviceName:d?.deviceName??"Buoy Browser",socketURL:_,persistentDeviceId:r.ready?d?.deviceId??null:null,platform:r.platform,extraDeviceInfo:r.extraDeviceInfo,enableLogs:o?.enableLogs});(0,_react.useEffect)(()=>{const i=(0,_capacitorHostInfo.capacitorTransportProblem)(_,r.platform);if(!n||!i)return;const f=()=>warnOnce(i);n.on("connect_error",f);return()=>{n.off("connect_error",f)}},[n,_,r.platform]);(0,_react.useEffect)(()=>{if(!n)return;const i=()=>{if(!n.connected||!_license.LicenseManager.hasAccountAccess())return;const f=_license.LicenseManager.getState();if(!l&&(f.isInitialized===false||f.isValidating===true))return;n.emit("device-license",{isPro:l?"1":"0",tier:p})};i();n.on("connect",i);return()=>{n.off("connect",i)}},[n,l,p]);const v=o?.releaseActions?.join(",")??"";const R=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(c,y,v?v.split(","):void 0),[c,y,v]);e.useExternalSync({tools:R,socket:n,deviceId:r.ready?d?.deviceId??null: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","BugLinksOverlay"];function BrowserToolRuntime(e){const c=(0,_react.useMemo)(()=>Object.fromEntries(Object.entries(e.modules).map(([l,p])=>[l.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),p])),[e.modules]);const s=c["react-query"];return s?.useReactQuerySyncAdapter?(0,_jsxRuntime.jsx)(QueryRuntime,{...e,modules:c,query:s}):(0,_jsxRuntime.jsx)(ToolRuntime,{...e,modules:c})}function QueryRuntime(e){const c=e.query.useReactQuerySyncAdapter();return(0,_jsxRuntime.jsx)(ToolRuntime,{...e,queryAdapter:c})}function ToolRuntime({modules:e,apps:c,requiredEnvVars:s,externalSync:l,headless:p,sentryGetClient:y,queryAdapter:r}){const{isPro:d,tier:g}=(0,_license.useLicense)();const n=(0,_react.useMemo)(()=>{const a={app:_appSyncAdapter.appSyncAdapter};for(const[t,o]of Object.entries(e)){for(const[u,S]of Object.entries(o)){if(u.endsWith("SyncAdapter")&&S&&typeof S==="object")a[t]=S}}if(r)a.query=r;if(e.env?.createEnvSyncAdapter)a.env=e.env.createEnvSyncAdapter(s??[]);for(const t of c??[])if(t.sync)a[`custom:${t.id}`]=t.sync;return a},[e,c,s,r]);const v=(0,_react.useRef)(n);v.current=n;(0,_react.useEffect)(()=>(0,_sharedUi.registerToolAdapters)(()=>v.current),[]);(0,_react.useEffect)(()=>{const a=[];const t=o=>{const u=o?.();if(typeof u==="function")a.push(u)};t(e.network?.startNetworkCapture);t(e.storage?.startBrowserStorageCapture);t(e.assets?.startBrowserAssetCapture);t(e.three?.startThreeCapture);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 o of a.reverse())o()}},[e]);const R=e["external-sync"];const i=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const f=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:i,isLicensed:d,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 b=e.sentry?.SentryRoot;return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[Object.entries(e).flatMap(([a,t])=>roots.map(o=>{const u=t[o];return u?(0,_jsxRuntime.jsx)(u,{},`${a}:${o}`):null})),b&&(0,_jsxRuntime.jsx)(b,{getClient:y}),Object.entries(e).flatMap(([a,t])=>overlays.map(o=>{const u=t[o];return u&&(!p||o==="ScenariosOverlay"||o==="ImpersonateOverlay"||o==="BugLinksOverlay")?(0,_jsxRuntime.jsx)(u,{},`${a}:${o}`):null})),f&&(0,_jsxRuntime.jsx)(BrowserExternalSync,{module:R,tools:n,options:_,isPro:d,tier:g,dev:i})]})}let warned=null;function warnOnce(e){if(!e||e===warned)return;warned=e;console.warn("[Buoy]",e)}function BrowserExternalSync({module:e,tools:c,options:s,isPro:l,tier:p,dev:y}){const r=(0,_capacitorHostInfo.useHostInfo)();const d=(0,_deviceIdentity.useDeviceIdentity)(s,{appName:r.appName,hardwareName:r.hardwareName,platform:r.platform});const g=(0,_react.useMemo)(()=>(0,_capacitorHostInfo.capacitorBrokerURL)(s?.socketURL??(y?e.getDefaultSocketURL():_externalSyncGate.RELEASE_DEFAULT_SOCKET_URL),Boolean(s?.socketURL),r.platform),[s?.socketURL,y,e,r.platform]);const{socket:n}=e.useExternalSyncSocket({deviceName:d?.deviceName??"Buoy Browser",socketURL:g,persistentDeviceId:r.ready?d?.deviceId??null:null,platform:r.platform,extraDeviceInfo:r.extraDeviceInfo,enableLogs:s?.enableLogs});(0,_react.useEffect)(()=>{const i=(0,_capacitorHostInfo.capacitorTransportProblem)(g,r.platform);if(!n||!i)return;const f=()=>warnOnce(i);n.on("connect_error",f);return()=>{n.off("connect_error",f)}},[n,g,r.platform]);(0,_react.useEffect)(()=>{if(!n)return;const i=()=>{if(!n.connected||!_license.LicenseManager.hasAccountAccess())return;const f=_license.LicenseManager.getState();if(!l&&(f.isInitialized===false||f.isValidating===true))return;n.emit("device-license",{isPro:l?"1":"0",tier:p})};i();n.on("connect",i);return()=>{n.off("connect",i)}},[n,l,p]);const v=s?.releaseActions?.join(",")??"";const R=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(c,y,v?v.split(","):void 0),[c,y,v]);e.useExternalSync({tools:R,socket:n,deviceId:r.ready?d?.deviceId??null:null,enableLogs:s?.enableLogs});return null}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FloatingDevTools=void 0;var _sharedUi=require("@buoy-gg/shared-ui");var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _AppHost=require("./AppHost");var _TeamToolCloser=require("./TeamToolCloser.js");var _teamToolsNote=require("./teamToolsNote.js");var _FloatingMenu=require("./FloatingMenu.js");var _ToolOpenerBridge=require("./ToolOpenerBridge.js");var _autoDiscoverPresets=require("./autoDiscoverPresets.js");var _installPing=require("../telemetry/installPing.js");var _Buoy=require("../Buoy.js");var _AppIcon=require("./AppIcon");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.js");var _optionalRequire=require("./optionalRequire.js");var _MinimizedToolsContext=require("./MinimizedToolsContext.js");var _defaultConfig=require("./defaultConfig.js");var _DefaultConfigContext=require("./DefaultConfigContext.js");var _license=_interopRequireWildcard(require("@buoy-gg/license"));var licenseModule=_license;var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _BuoySignIn=require("./BuoySignIn");var _autoExternalSync=require("./autoExternalSync.js");var _externalSyncGate=require("./externalSyncGate.js");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,n){if("function"==typeof WeakMap)var s=new WeakMap,a=new WeakMap;return(_interopRequireWildcard=function(r,m){if(!m&&r&&r.__esModule)return r;var l,u,g={__proto__:null,default:r};if(null===r||"object"!=typeof r&&"function"!=typeof r)return g;if(l=m?a:s){if(l.has(r))return l.get(r);l.set(r,g)}for(const i in r)"default"!==i&&{}.hasOwnProperty.call(r,i)&&((u=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,i))&&(u.get||u.set)?l(g,i,u):g[i]=r[i]);return g})(t,n)}let warnedReleaseTransport=null;function warnReleaseTransportOnce(t){if(!t||t===warnedReleaseTransport)return;warnedReleaseTransport=t;console.warn("[Buoy]",t)}function resolveSignInAppId(t){if(t&&typeof t==="object"&&t.appId)return t.appId;try{const{Platform:n}=require("react-native");const s=require("expo-constants");const a=(s?.default??s)?.expoConfig;const r=n.OS==="android"?a?.android?.package:a?.ios?.bundleIdentifier;if(typeof r==="string"&&r)return r}catch{}try{const n=require("expo-application");const s=(n?.default??n)?.applicationId;if(typeof s==="string"&&s)return s}catch{}return null}const FloatingDevTools=({apps:t,requiredEnvVars:n,requiredStorageKeys:s,askBuoy:a,children:r,disableHints:m=false,defaultFloatingTools:l,defaultDialTools:u,requireLicense:g,licenseKey:i,zustandStores:T,environment:U,externalSync:b=true,headless:_=false,signIn:j,...D})=>{const G=U??(0,_sharedUi.normalizeEnvironment)(process.env.NODE_ENV??"dev");const{isLicensed:q}=(0,_license.useProAccess)();const{licenseKey:E,isInitialized:k,tier:h,access:c,allowedTools:O}=(0,_license.useLicense)();const J=i===void 0||(0,_license.sameLicenseKey)(i,E);const M=J&&c.status==="admitted";(0,_react.useEffect)(()=>{if(!k||c.status==="initializing")return;void(0,_installPing.sendInstallPing)({tier:c.status==="admitted"?h:"locked",enabled:(0,_Buoy.isTelemetryEnabled)()})},[k,c.status,h]);const x=j?resolveSignInAppId(j):null;(0,_react.useEffect)(()=>{if(!x)return;const e=licenseModule.SessionManager;if(!e)return;e.configure({audience:`app:${x}`});void e.load().catch(()=>{})},[x]);(0,_react.useEffect)(()=>{(0,_sharedUi.setBuoyAppId)(x??resolveSignInAppId(true))},[x]);(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(i??(0,_Buoy.defaultLicenseKey)()).catch(()=>{})},[i]);(0,_react.useEffect)(()=>{if(M)(0,_sharedUi.startSettingsSync)()},[M]);(0,_react.useEffect)(()=>{if(!T||c.status==="locked")return;try{const{watchStores:e}=require("@buoy-gg/zustand");return e(T)}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",e)}},[T,c.status]);const Q=(0,_react.useMemo)(()=>{if(u){return(0,_defaultConfig.validateDialConfig)(u)}return u},[u]);const R=(0,_react.useMemo)(()=>{const e=[];if(n&&n.length>0){try{const{createEnvTool:o,createEnvVarConfig:P}=require("@buoy-gg/env");e.push(o({requiredEnvVars:P(n)}))}catch(o){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/env",o)}}if(s&&s.length>0){try{const{createStorageTool:o}=require("@buoy-gg/storage");e.push(o({requiredStorageKeys:s}))}catch(o){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/storage",o)}}if(a){try{const{createAskBuoyTool:o}=require("@buoy-gg/ask-buoy");e.push(o(a))}catch(o){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ask-buoy",o)}}return e},[n,s,a]);const A=(0,_react.useMemo)(()=>{if(!t&&R.length===0)return void 0;return[...t||[],...R]},[t,R]);const p=(0,_react.useMemo)(()=>A?(0,_autoDiscoverPresets.autoDiscoverPresetsWithCustom)(A):(0,_autoDiscoverPresets.autoDiscoverPresets)(),[A]);const S=(0,_react.useMemo)(()=>p.filter(e=>e.sync),[p]);const $=(0,_react.useMemo)(()=>(0,_floatingToolsCore.filterTeamTools)(p,O),[p,O]);const F=(0,_react.useMemo)(()=>{try{const{DebugBordersStandaloneOverlay:e}=require("@buoy-gg/debug-borders");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/debug-borders",e);return null}},[]);const w=(0,_react.useMemo)(()=>{try{const{HighlightUpdatesOverlay:e}=require("@buoy-gg/highlight-updates");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/highlight-updates",e);return null}},[]);const B=(0,_react.useMemo)(()=>{try{const{ImageOverlayStandalone:e}=require("@buoy-gg/image-overlay");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/image-overlay",e);return null}},[]);const z=(0,_react.useMemo)(()=>{try{const{PerfMonitorOverlay:e}=require("@buoy-gg/perf-monitor");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/perf-monitor",e);return null}},[]);const H=(0,_react.useMemo)(()=>{try{const{JsTopHudOverlay:e}=require("@buoy-gg/js-top");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/js-top",e);return null}},[]);const y=(0,_react.useMemo)(()=>{try{const{RouteTracker:e}=require("@buoy-gg/route-events");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/route-events",e);return null}},[]);const d=(0,_react.useMemo)(()=>{try{const{ReactQueryTracker:e}=require("@buoy-gg/react-query");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/react-query",e);return null}},[]);const L=(0,_react.useMemo)(()=>{try{const{ImpersonateOverlay:e}=require("@buoy-gg/impersonate");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/impersonate",e);return null}},[]);const N=(0,_react.useMemo)(()=>{try{const{ScenariosOverlay:e}=require("@buoy-gg/scenarios");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/scenarios",e);return null}},[]);const f=(0,_react.useMemo)(()=>{try{const{ReduxAutoInstrument:e}=require("@buoy-gg/redux");return e??null}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/redux",e);return null}},[]);const v=(0,_react.useMemo)(()=>{try{const{ConsoleRoot:e}=require("@buoy-gg/console");return e??null}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/console",e);return null}},[]);const K=(0,_react.useCallback)(e=>{const o=p.find(P=>P.id===e);if(!o)return null;return(0,_AppIcon.renderAppIcon)(o.icon,{slot:"dial",size:20,color:o.color})},[p]);const I=typeof __DEV__!=="undefined"&&__DEV__;if(!I&&!q){return j&&!_?(0,_jsxRuntime.jsx)(_BuoySignIn.BuoySignIn,{needsPlan:true}):null}const V=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:I,isLicensed:q,externalSync:b,isAvailable:(0,_autoExternalSync.isExternalSyncAvailable)()});const C=(0,_externalSyncGate.externalSyncOptions)(b);if(!I&&C?.enableInRelease){warnReleaseTransportOnce((0,_externalSyncGate.releaseTransportProblem)(C.socketURL,C))}const W=(0,_jsxRuntime.jsx)(_autoExternalSync.ToolRegistryPublisher,{requiredEnvVars:n,customApps:S});if(!M){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[c.status==="initializing"&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[f&&(0,_jsxRuntime.jsx)(f,{}),v&&(0,_jsxRuntime.jsx)(v,{}),y&&(0,_jsxRuntime.jsx)(y,{}),d&&(0,_jsxRuntime.jsx)(d,{})]}),!_&&(j?(0,_jsxRuntime.jsx)(_BuoySignIn.BuoySignIn,{}):(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{}))]})}if(_){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[f&&(0,_jsxRuntime.jsx)(f,{}),v&&(0,_jsxRuntime.jsx)(v,{}),y&&(0,_jsxRuntime.jsx)(y,{}),d&&(0,_jsxRuntime.jsx)(d,{}),W,V&&(0,_jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync,{options:(0,_externalSyncGate.externalSyncOptions)(b),requiredEnvVars:n,isPro:q,tier:h,licenseKey:E,customApps:S})]})}return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:l,defaultDialTools:Q,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:m,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.container,pointerEvents:"box-none",__buoyDevToolsRoot:true,children:(0,_jsxRuntime.jsxs)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:[B&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:_reactNative.StyleSheet.absoluteFill,pointerEvents:"box-none",collapsable:false,children:(0,_jsxRuntime.jsx)(B,{})}),(0,_jsxRuntime.jsx)(_AppHost.AppHostProvider,{children:(0,_jsxRuntime.jsxs)(_MinimizedToolsContext.MinimizedToolsProvider,{getToolIcon:K,children:[(0,_jsxRuntime.jsx)(_FloatingMenu.FloatingMenu,{...D,apps:$,emptyNote:O?_teamToolsNote.NO_TEAM_TOOLS_NOTE:void 0,environment:G}),D.hidden?null:(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_AppHost.AppOverlay,{}),(0,_jsxRuntime.jsx)(_sharedUi.FloatingToolHost,{})]}),(0,_jsxRuntime.jsx)(_ToolOpenerBridge.ToolOpenerBridge,{}),(0,_jsxRuntime.jsx)(_TeamToolCloser.TeamToolCloser,{allowedTools:O??null})]})}),r,F&&(0,_jsxRuntime.jsx)(F,{}),w&&(0,_jsxRuntime.jsx)(w,{}),z&&(0,_jsxRuntime.jsx)(z,{}),H&&(0,_jsxRuntime.jsx)(H,{}),L&&(0,_jsxRuntime.jsx)(L,{}),N&&(0,_jsxRuntime.jsx)(N,{}),f&&(0,_jsxRuntime.jsx)(f,{}),v&&(0,_jsxRuntime.jsx)(v,{}),y&&(0,_jsxRuntime.jsx)(y,{}),d&&(0,_jsxRuntime.jsx)(d,{}),W,V&&(0,_jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync,{options:(0,_externalSyncGate.externalSyncOptions)(b),requiredEnvVars:n,isPro:q,tier:h,licenseKey:E,customApps:S})]})})})})};exports.FloatingDevTools=FloatingDevTools;const styles=_reactNative.StyleSheet.create({container:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:9999}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FloatingDevTools=void 0;var _sharedUi=require("@buoy-gg/shared-ui");var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _AppHost=require("./AppHost");var _TeamToolCloser=require("./TeamToolCloser.js");var _teamToolsNote=require("./teamToolsNote.js");var _FloatingMenu=require("./FloatingMenu.js");var _ToolOpenerBridge=require("./ToolOpenerBridge.js");var _autoDiscoverPresets=require("./autoDiscoverPresets.js");var _installPing=require("../telemetry/installPing.js");var _Buoy=require("../Buoy.js");var _AppIcon=require("./AppIcon");var _DevToolsVisibilityContext=require("./DevToolsVisibilityContext.js");var _optionalRequire=require("./optionalRequire.js");var _MinimizedToolsContext=require("./MinimizedToolsContext.js");var _defaultConfig=require("./defaultConfig.js");var _DefaultConfigContext=require("./DefaultConfigContext.js");var _license=_interopRequireWildcard(require("@buoy-gg/license"));var licenseModule=_license;var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _BuoySignIn=require("./BuoySignIn");var _autoExternalSync=require("./autoExternalSync.js");var _externalSyncGate=require("./externalSyncGate.js");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,n){if("function"==typeof WeakMap)var s=new WeakMap,a=new WeakMap;return(_interopRequireWildcard=function(r,j){if(!j&&r&&r.__esModule)return r;var l,u,g={__proto__:null,default:r};if(null===r||"object"!=typeof r&&"function"!=typeof r)return g;if(l=j?a:s){if(l.has(r))return l.get(r);l.set(r,g)}for(const i in r)"default"!==i&&{}.hasOwnProperty.call(r,i)&&((u=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,i))&&(u.get||u.set)?l(g,i,u):g[i]=r[i]);return g})(t,n)}let warnedReleaseTransport=null;function warnReleaseTransportOnce(t){if(!t||t===warnedReleaseTransport)return;warnedReleaseTransport=t;console.warn("[Buoy]",t)}function resolveSignInAppId(t){if(t&&typeof t==="object"&&t.appId)return t.appId;try{const{Platform:n}=require("react-native");const s=require("expo-constants");const a=(s?.default??s)?.expoConfig;const r=n.OS==="android"?a?.android?.package:a?.ios?.bundleIdentifier;if(typeof r==="string"&&r)return r}catch{}try{const n=require("expo-application");const s=(n?.default??n)?.applicationId;if(typeof s==="string"&&s)return s}catch{}return null}const FloatingDevTools=({apps:t,requiredEnvVars:n,requiredStorageKeys:s,askBuoy:a,children:r,disableHints:j=false,defaultFloatingTools:l,defaultDialTools:u,requireLicense:g,licenseKey:i,zustandStores:_,environment:J,externalSync:m=true,headless:E=false,signIn:q,...k})=>{const Q=J??(0,_sharedUi.normalizeEnvironment)(process.env.NODE_ENV??"dev");const{isLicensed:O}=(0,_license.useProAccess)();const{licenseKey:R,isInitialized:F,tier:h,access:c,allowedTools:T}=(0,_license.useLicense)();const $=i===void 0||(0,_license.sameLicenseKey)(i,R);const M=$&&c.status==="admitted";(0,_react.useEffect)(()=>{if(!F||c.status==="initializing")return;void(0,_installPing.sendInstallPing)({tier:c.status==="admitted"?h:"locked",enabled:(0,_Buoy.isTelemetryEnabled)()})},[F,c.status,h]);const b=q?resolveSignInAppId(q):null;(0,_react.useEffect)(()=>{if(!b)return;const e=licenseModule.SessionManager;if(!e)return;e.configure({audience:`app:${b}`});void e.load().catch(()=>{})},[b]);(0,_react.useEffect)(()=>{(0,_sharedUi.setBuoyAppId)(b??resolveSignInAppId(true))},[b]);(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(i??(0,_Buoy.defaultLicenseKey)()).catch(()=>{})},[i]);(0,_react.useEffect)(()=>{if(M)(0,_sharedUi.startSettingsSync)()},[M]);(0,_react.useEffect)(()=>{if(!_||c.status==="locked")return;try{const{watchStores:e}=require("@buoy-gg/zustand");return e(_)}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",e)}},[_,c.status]);const K=(0,_react.useMemo)(()=>{if(u){return(0,_defaultConfig.validateDialConfig)(u)}return u},[u]);const A=(0,_react.useMemo)(()=>{const e=[];if(n&&n.length>0){try{const{createEnvTool:o,createEnvVarConfig:D}=require("@buoy-gg/env");e.push(o({requiredEnvVars:D(n)}))}catch(o){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/env",o)}}if(s&&s.length>0){try{const{createStorageTool:o}=require("@buoy-gg/storage");e.push(o({requiredStorageKeys:s}))}catch(o){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/storage",o)}}if(a){try{const{createAskBuoyTool:o}=require("@buoy-gg/ask-buoy");e.push(o(a))}catch(o){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ask-buoy",o)}}return e},[n,s,a]);const I=(0,_react.useMemo)(()=>{if(!t&&A.length===0)return void 0;return[...t||[],...A]},[t,A]);const p=(0,_react.useMemo)(()=>I?(0,_autoDiscoverPresets.autoDiscoverPresetsWithCustom)(I):(0,_autoDiscoverPresets.autoDiscoverPresets)(),[I]);const S=(0,_react.useMemo)(()=>p.filter(e=>e.sync),[p]);const X=(0,_react.useMemo)(()=>(0,_floatingToolsCore.filterTeamTools)(p,T),[p,T]);const B=(0,_react.useMemo)(()=>{try{const{DebugBordersStandaloneOverlay:e}=require("@buoy-gg/debug-borders");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/debug-borders",e);return null}},[]);const w=(0,_react.useMemo)(()=>{try{const{HighlightUpdatesOverlay:e}=require("@buoy-gg/highlight-updates");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/highlight-updates",e);return null}},[]);const L=(0,_react.useMemo)(()=>{try{const{ImageOverlayStandalone:e}=require("@buoy-gg/image-overlay");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/image-overlay",e);return null}},[]);const z=(0,_react.useMemo)(()=>{try{const{PerfMonitorOverlay:e}=require("@buoy-gg/perf-monitor");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/perf-monitor",e);return null}},[]);const H=(0,_react.useMemo)(()=>{try{const{JsTopHudOverlay:e}=require("@buoy-gg/js-top");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/js-top",e);return null}},[]);const y=(0,_react.useMemo)(()=>{try{const{RouteTracker:e}=require("@buoy-gg/route-events");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/route-events",e);return null}},[]);const d=(0,_react.useMemo)(()=>{try{const{ReactQueryTracker:e}=require("@buoy-gg/react-query");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/react-query",e);return null}},[]);const N=(0,_react.useMemo)(()=>{try{const{ImpersonateOverlay:e}=require("@buoy-gg/impersonate");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/impersonate",e);return null}},[]);const V=(0,_react.useMemo)(()=>{try{const{BugLinksOverlay:e}=require("@buoy-gg/bug-links");return e??null}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/bug-links",e);return null}},[]);const W=(0,_react.useMemo)(()=>{try{const{ScenariosOverlay:e}=require("@buoy-gg/scenarios");return e}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/scenarios",e);return null}},[]);const f=(0,_react.useMemo)(()=>{try{const{ReduxAutoInstrument:e}=require("@buoy-gg/redux");return e??null}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/redux",e);return null}},[]);const v=(0,_react.useMemo)(()=>{try{const{ConsoleRoot:e}=require("@buoy-gg/console");return e??null}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/console",e);return null}},[]);const x=(0,_react.useMemo)(()=>{try{const{OtaInspectorRoot:e}=require("@buoy-gg/ota-inspector");return e??null}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ota-inspector",e);return null}},[]);const Y=(0,_react.useCallback)(e=>{const o=p.find(D=>D.id===e);if(!o)return null;return(0,_AppIcon.renderAppIcon)(o.icon,{slot:"dial",size:20,color:o.color})},[p]);const C=typeof __DEV__!=="undefined"&&__DEV__;if(!C&&!O){return q&&!E?(0,_jsxRuntime.jsx)(_BuoySignIn.BuoySignIn,{needsPlan:true}):null}const U=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:C,isLicensed:O,externalSync:m,isAvailable:(0,_autoExternalSync.isExternalSyncAvailable)()});const P=(0,_externalSyncGate.externalSyncOptions)(m);if(!C&&P?.enableInRelease){warnReleaseTransportOnce((0,_externalSyncGate.releaseTransportProblem)(P.socketURL,P))}const G=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_autoExternalSync.ToolRegistryPublisher,{requiredEnvVars:n,customApps:S}),(0,_jsxRuntime.jsx)(_sharedUi.FiberRootAnchor,{})]});if(!M){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[c.status==="initializing"&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[f&&(0,_jsxRuntime.jsx)(f,{}),v&&(0,_jsxRuntime.jsx)(v,{}),x&&(0,_jsxRuntime.jsx)(x,{}),y&&(0,_jsxRuntime.jsx)(y,{}),d&&(0,_jsxRuntime.jsx)(d,{})]}),!E&&(q?(0,_jsxRuntime.jsx)(_BuoySignIn.BuoySignIn,{}):(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{}))]})}if(E){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[f&&(0,_jsxRuntime.jsx)(f,{}),v&&(0,_jsxRuntime.jsx)(v,{}),x&&(0,_jsxRuntime.jsx)(x,{}),y&&(0,_jsxRuntime.jsx)(y,{}),d&&(0,_jsxRuntime.jsx)(d,{}),G,U&&(0,_jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync,{options:(0,_externalSyncGate.externalSyncOptions)(m),requiredEnvVars:n,isPro:O,tier:h,licenseKey:R,customApps:S})]})}return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:l,defaultDialTools:K,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:j,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.container,pointerEvents:"box-none",__buoyDevToolsRoot:true,children:(0,_jsxRuntime.jsxs)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:[L&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:_reactNative.StyleSheet.absoluteFill,pointerEvents:"box-none",collapsable:false,children:(0,_jsxRuntime.jsx)(L,{})}),(0,_jsxRuntime.jsx)(_AppHost.AppHostProvider,{children:(0,_jsxRuntime.jsxs)(_MinimizedToolsContext.MinimizedToolsProvider,{getToolIcon:Y,children:[(0,_jsxRuntime.jsx)(_FloatingMenu.FloatingMenu,{...k,apps:X,emptyNote:T?_teamToolsNote.NO_TEAM_TOOLS_NOTE:void 0,environment:Q}),k.hidden?null:(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_AppHost.AppOverlay,{}),(0,_jsxRuntime.jsx)(_sharedUi.FloatingToolHost,{})]}),(0,_jsxRuntime.jsx)(_ToolOpenerBridge.ToolOpenerBridge,{}),(0,_jsxRuntime.jsx)(_TeamToolCloser.TeamToolCloser,{allowedTools:T??null})]})}),r,B&&(0,_jsxRuntime.jsx)(B,{}),w&&(0,_jsxRuntime.jsx)(w,{}),z&&(0,_jsxRuntime.jsx)(z,{}),H&&(0,_jsxRuntime.jsx)(H,{}),N&&(0,_jsxRuntime.jsx)(N,{}),V&&(0,_jsxRuntime.jsx)(V,{}),W&&(0,_jsxRuntime.jsx)(W,{}),f&&(0,_jsxRuntime.jsx)(f,{}),v&&(0,_jsxRuntime.jsx)(v,{}),x&&(0,_jsxRuntime.jsx)(x,{}),y&&(0,_jsxRuntime.jsx)(y,{}),d&&(0,_jsxRuntime.jsx)(d,{}),G,U&&(0,_jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync,{options:(0,_externalSyncGate.externalSyncOptions)(m),requiredEnvVars:n,isPro:O,tier:h,licenseKey:R,customApps:S})]})})})})};exports.FloatingDevTools=FloatingDevTools;const styles=_reactNative.StyleSheet.create({container:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:9999}});
@@ -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 _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _teamToolsNote=require("./teamToolsNote.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 _Buoy=require("../Buoy.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(n,s){if("function"==typeof WeakMap)var i=new WeakMap,a=new WeakMap;return(_interopRequireWildcard=function(t,r){if(!r&&t&&t.__esModule)return t;var l,c,p={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return p;if(l=r?a:i){if(l.has(t))return l.get(t);l.set(t,p)}for(const d in t)"default"!==d&&{}.hasOwnProperty.call(t,d)&&((c=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,d))&&(c.get||c.set)?l(p,d,c):p[d]=t[d]);return p})(n,s)}const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:n=14,color:s="#20C997"}){const i=Math.max(2,n/4);const a=Math.max(1,n/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${i}px)`,gap:a,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((t,r)=>(0,_jsxRuntime.jsx)("div",{style:{width:i,height:i,borderRadius:i/2,backgroundColor:s}},r))})}function AdmittedFloatingDevTools(n){const{defaultFloatingTools:s,defaultDialTools:i,disableHints:a=false,children:t}=n;const r=(0,_react.useMemo)(()=>i?(0,_defaultConfig.validateDialConfig)(i):i,[i]);return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:s,defaultDialTools:r,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:a,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(([s,i])=>STARTUP_ROOTS.map(a=>{const t=i[a];return t?(0,_jsxRuntime.jsx)(t,{},`${s}:${a}`):null}))})}function WebToolOpenerBridge(){const{openApps:n,restore:s}=(0,_AppHostWeb.useAppHost)();(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(i=>{const a=n.find(t=>t.id===i);if(!a)return false;s(a.instanceId);return true}),[n,s]);return null}function defaultEnvironment(){const n=(0,_license.capacitorDebug)();const s=n===null?process.env.NODE_ENV:n?"development":"production";return(0,_sharedUi.normalizeEnvironment)(s??"dev")}function configOverrides(n,s,i,a){const t=x=>Object.entries(n).find(([v])=>v.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===x)?.[1];const r=[];const l=t("env");if(s?.length&&l?.createEnvTool&&l.createEnvVarConfig){r.push((0,_createWebTool.createWebTool)(l.createEnvTool({requiredEnvVars:l.createEnvVarConfig(s)})))}const c=t("storage");if(i?.length&&c?.createStorageTool){r.push((0,_createWebTool.createWebTool)(c.createStorageTool({requiredStorageKeys:i})))}const p=t("ask-buoy");const d=a==="hosted"?p?.hostedAskBuoy?.():a;if(d&&p?.createAskBuoyTool)r.push((0,_createWebTool.createWebTool)(p.createAskBuoyTool(d)));return r}function FloatingDevToolsInner({environment:n,userRole:s="admin",availableEnvironments:i,onEnvironmentSwitch:a,apps:t,modules:r=EMPTY_MODULES,externalSync:l,requiredEnvVars:c,sentryGetClient:p,disableHints:d=false,headless:x=false,hidden:v=false,defaultFloatingTools:X,defaultDialTools:E,zustandStores:w,requiredStorageKeys:B,askBuoy:W}){const I=n??defaultEnvironment();const Z=(0,_react.useMemo)(()=>E?(0,_defaultConfig.validateDialConfig)(E):void 0,[E]);const[g,S]=(0,_react.useState)(false);const[y,C]=(0,_react.useState)(false);const M=(0,_react.useRef)(false);const m=(0,_AppHostWeb.useAppHost)();const R=(0,_react.useMemo)(()=>configOverrides(r,c,B,W),[r,c,B,W]);const{allowedTools:b}=(0,_license.useLicense)();const f=(0,_react.useMemo)(()=>(0,_floatingToolsCore.filterTeamTools)((0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(r),...t??[],...R]),b),[t,r,R,b]);const{openApps:L,close:F}=m;(0,_react.useEffect)(()=>{if(!b)return;for(const e of L){if(!(0,_floatingToolsCore.isTeamToolAllowed)(e.id,b))F(e.instanceId)}},[L,b,F]);const A=(0,_react.useMemo)(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);(0,_react.useEffect)(()=>{if(!w||typeof A?.watchStores!=="function")return;const e=A.watchStores(w);return typeof e==="function"?e:void 0},[w,A]);const D=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();const N=m.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{D.setDialOpen(g)},[g,D.setDialOpen]);(0,_react.useEffect)(()=>{D.setToolOpen(N||y)},[N,y,D.setToolOpen]);const{registerApps:K}=m;(0,_react.useEffect)(()=>{K(f.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:u})=>o(u):o}}))},[K,f]);const ee=(0,_react.useMemo)(()=>f.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[f]);(0,_floatingToolsReact.useSettings)({availableTools:ee,storage:webSettingsStorage});(0,_react.useEffect)(()=>{let e=false;const o=async()=>{const[u,T]=await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()),_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);if(e)return;if(u==="true")S(true);if(T==="true"){S(true);C(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(),y?"true":"false")},[y]);const _=(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;m.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?.()}},[m]);const V=(0,_react.useRef)({tools:f,openApps:m.openApps,openTool:_});V.current={tools:f,openApps:m.openApps,openTool:_};(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(e=>{const{tools:o,openApps:u,openTool:T}=V.current;if(u.some(q=>q.id===e))return false;const P=o.find(q=>q.id===e);if(!P||P.launchMode==="toggle-only")return false;T(P);return true}),[]);const O=(0,_react.useMemo)(()=>{const e=(0,_autoDiscoverPresetsWeb.getToolsBySlot)(f,"dial");return e.map(o=>{const u=o.color||(0,_floatingToolsReact.getToolColor)(o.id);let T;if(typeof o.icon==="string"){T=o.icon}else if(typeof o.icon==="function"){T=o.icon(32)}else{T=null}return{id:o.id,name:o.name||(0,_floatingToolsReact.getToolLabel)(o.id),icon:T,unavailable:!o.component&&!o.onPress,color:u,onPress:()=>{_(o);S(false)}}})},[f,_]);const z=(0,_react.useMemo)(()=>{if(!g)return O;const e=new Map(O.map(o=>[o.id,o]));return(0,_dialUsageStore.getRankedToolIds)(O.map(o=>o.id)).map(o=>e.get(o)).filter(o=>Boolean(o))},[g,O]);const{settings:k}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();const ne=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(f,"row").filter(e=>(k.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,k.floatingTools]);const te=(0,_react.useMemo)(()=>f.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})),[f]);const[oe,H]=(0,_react.useState)(false);const U=m.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{if(d)return;let e=false;const o=setTimeout(async()=>{const u=await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);if(!e&&!u)H(true)},1e3);return()=>{e=true;clearTimeout(o)}},[d]);const h=(0,_react.useCallback)(()=>{H(false);void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY,"true")},[]);const $=(0,_react.useCallback)(()=>{h();S(true)},[h]);const se=(0,_react.useCallback)(()=>{S(false);C(false)},[]);const ie=(0,_react.useCallback)(()=>{C(e=>!e)},[]);const re=(0,_react.useCallback)(()=>C(false),[]);const Y=Boolean(i?.length&&a);const G=k.floatingTools.environment!==false;const j=oe&&!g&&!U&&!v;(0,_react.useEffect)(()=>{if(!j)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))h()};const o=u=>{if(u.key==="Escape")h()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[j,h]);const Q=m.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const J=(0,_jsxRuntime.jsx)(_BrowserToolRuntime.BrowserToolRuntime,{modules:r,apps:t,requiredEnvVars:c,externalSync:l,headless:x,sentryGetClient:p});if(x)return J;return(0,_jsxRuntime.jsxs)("div",{"data-buoy-root":"",style:{display:"contents"},children:[J,(0,_jsxRuntime.jsx)(WebToolOpenerBridge,{}),j&&(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:!j,pushToSide:g||U,suspendPointerEvents:g,centerOnboarding:j,minimizedStack:Q?(0,_jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack,{}):void 0,hasMinimizedStack:Q,children:[I&&G&&!Y&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:I}),Y&&G&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:I??"local",availableEnvironments:i,onSelect:a}),s?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:s,onPress:$}):(0,_jsxRuntime.jsx)("button",{"aria-label":"Open dev tools",onClick:$,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:(0,_jsxRuntime.jsx)(MenuLauncherIcon,{})}),ne.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))]})}),j&&(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:h}),g&&!v&&(0,_jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu,{icons:z,onClose:se,centerLabel:"BUOY",onCenterPress:ie,settingsOpen:y,hintsDisabled:d,emptyNote:b&&z.length===0?_teamToolsNote.NO_TEAM_TOOLS_NOTE:void 0}),y&&!v&&(0,_jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal,{visible:true,onClose:re,availableTools:te,defaultFloatingTools:X,defaultDialTools:Z,onSettingsChange:e=>{}}),!v&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppOverlay,{}),(0,_jsxRuntime.jsx)(_floating.FloatingToolHost,{})]})]})}function useCapacitorSignInAudience(n){const s=n&&typeof n==="object"?n.appId:void 0;const i=!!n;(0,_react.useEffect)(()=>{if(!i)return;let a=false;const t=licenseModule.SessionManager;if(!t)return;const r=l=>{if(a||!l)return;t.configure({audience:`app:${l}`});void t.load().catch(()=>{})};if(s)r(s);else void(0,_license.loadCapacitorAppHost)().then(l=>r(l?.bundleId)).catch(()=>{});return()=>{a=true}},[i,s])}function usePublishAppId(n){const s=n&&typeof n==="object"?n.appId:void 0;(0,_react.useEffect)(()=>{let i=false;if(s){(0,_sharedUi.setBuoyAppId)(s)}else if((0,_license.isCapacitorNative)()){void(0,_license.loadCapacitorAppHost)().then(a=>{if(!i)(0,_sharedUi.setBuoyAppId)(a?.bundleId)}).catch(()=>{})}else if(typeof location!=="undefined"&&location.origin&&location.origin!=="null"){(0,_sharedUi.setBuoyAppId)(location.origin)}return()=>{i=true}},[s])}let warnedNoTools=false;function withInstalledTools(n){if(n.modules)return n;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{...n,modules:_installedTools.installedTools}}function FloatingDevTools(n){return(0,_jsxRuntime.jsx)(_floating.BuoyPortal,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsContent,{...withInstalledTools(n)})})}function FloatingDevToolsContent(n){const{access:s,isPro:i,licenseKey:a}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(n.licenseKey??(0,_Buoy.defaultLicenseKey)())},[n.licenseKey]);const t=n.licenseKey===void 0||(0,_license.sameLicenseKey)(n.licenseKey,a);const r=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const l=t&&s.status==="admitted";(0,_react.useEffect)(()=>{if(l)(0,_sharedUi.startSettingsSync)()},[l]);(0,_react.useEffect)(()=>{if(r||s.status==="initializing")return;if(i&&l)(0,_releaseOptIn.markReleaseOptIn)();else(0,_releaseOptIn.clearReleaseOptIn)()},[r,i,l,s.status]);const c=(0,_license.isCapacitorNative)();useCapacitorSignInAudience(c?n.signIn:void 0);usePublishAppId(n.signIn);if(!r&&!i){if(!n.signIn||n.headless)return null;return c?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{needsPlan:true}):(0,_jsxRuntime.jsx)(_BuoySignInWeb.BuoySignIn,{})}if(!l){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[s.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 _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _teamToolsNote=require("./teamToolsNote.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 _ToggleStateManager=require("./ToggleStateManager.js");var _createWebTools=require("../utils/createWebTools.js");var _BrowserToolRuntime=require("./BrowserToolRuntime.js");var _releaseOptIn=require("../releaseOptIn.js");var _BuoySignInWeb=require("./BuoySignIn.web.js");var _Buoy=require("../Buoy.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(n,s){if("function"==typeof WeakMap)var i=new WeakMap,a=new WeakMap;return(_interopRequireWildcard=function(o,r){if(!r&&o&&o.__esModule)return o;var l,c,p={__proto__:null,default:o};if(null===o||"object"!=typeof o&&"function"!=typeof o)return p;if(l=r?a:i){if(l.has(o))return l.get(o);l.set(o,p)}for(const d in o)"default"!==d&&{}.hasOwnProperty.call(o,d)&&((c=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,d))&&(c.get||c.set)?l(p,d,c):p[d]=o[d]);return p})(n,s)}const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:n=14,color:s="#20C997"}){const i=Math.max(2,n/4);const a=Math.max(1,n/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${i}px)`,gap:a,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((o,r)=>(0,_jsxRuntime.jsx)("div",{style:{width:i,height:i,borderRadius:i/2,backgroundColor:s}},r))})}function AdmittedFloatingDevTools(n){const{defaultFloatingTools:s,defaultDialTools:i,disableHints:a=false,children:o}=n;const r=(0,_react.useMemo)(()=>i?(0,_defaultConfig.validateDialConfig)(i):i,[i]);return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:s,defaultDialTools:r,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:a,children:(0,_jsxRuntime.jsxs)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppHostProvider,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsInner,{...n})}),o]})})})}const STARTUP_ROOTS=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function StartupCapture({modules:n=EMPTY_MODULES}){return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:Object.entries(n).flatMap(([s,i])=>STARTUP_ROOTS.map(a=>{const o=i[a];return o?(0,_jsxRuntime.jsx)(o,{},`${s}:${a}`):null}))})}function WebToolOpenerBridge(){const{openApps:n,restore:s}=(0,_AppHostWeb.useAppHost)();(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(i=>{const a=n.find(o=>o.id===i);if(!a)return false;s(a.instanceId);return true}),[n,s]);return null}function defaultEnvironment(){const n=(0,_license.capacitorDebug)();const s=n===null?process.env.NODE_ENV:n?"development":"production";return(0,_sharedUi.normalizeEnvironment)(s??"dev")}function configOverrides(n,s,i,a){const o=x=>Object.entries(n).find(([v])=>v.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===x)?.[1];const r=[];const l=o("env");if(s?.length&&l?.createEnvTool&&l.createEnvVarConfig){r.push((0,_createWebTool.createWebTool)(l.createEnvTool({requiredEnvVars:l.createEnvVarConfig(s)})))}const c=o("storage");if(i?.length&&c?.createStorageTool){r.push((0,_createWebTool.createWebTool)(c.createStorageTool({requiredStorageKeys:i})))}const p=o("ask-buoy");const d=a==="hosted"?p?.hostedAskBuoy?.():a;if(d&&p?.createAskBuoyTool)r.push((0,_createWebTool.createWebTool)(p.createAskBuoyTool(d)));return r}function toggleIsOn(n){if(n.launchMode!=="toggle-only")return void 0;const s=n.isOn;return typeof s==="function"?s():void 0}function FloatingDevToolsInner({environment:n,userRole:s="admin",availableEnvironments:i,onEnvironmentSwitch:a,apps:o,modules:r=EMPTY_MODULES,externalSync:l,requiredEnvVars:c,sentryGetClient:p,disableHints:d=false,headless:x=false,hidden:v=false,defaultFloatingTools:Z,defaultDialTools:E,zustandStores:M,requiredStorageKeys:B,askBuoy:W}){const I=n??defaultEnvironment();const ee=(0,_react.useMemo)(()=>E?(0,_defaultConfig.validateDialConfig)(E):void 0,[E]);const[g,S]=(0,_react.useState)(false);const[y,O]=(0,_react.useState)(false);const[,R]=(0,_react.useState)(0);(0,_react.useEffect)(()=>_ToggleStateManager.toggleStateManager.subscribe(()=>R(e=>e+1)),[]);const w=(0,_react.useRef)(false);const m=(0,_AppHostWeb.useAppHost)();const L=(0,_react.useMemo)(()=>configOverrides(r,c,B,W),[r,c,B,W]);const{allowedTools:b}=(0,_license.useLicense)();const f=(0,_react.useMemo)(()=>(0,_floatingToolsCore.filterTeamTools)((0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(r),...o??[],...L]),b),[o,r,L,b]);const{openApps:F,close:N}=m;(0,_react.useEffect)(()=>{if(!b)return;for(const e of F){if(!(0,_floatingToolsCore.isTeamToolAllowed)(e.id,b))N(e.instanceId)}},[F,b,N]);const A=(0,_react.useMemo)(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);(0,_react.useEffect)(()=>{if(!M||typeof A?.watchStores!=="function")return;const e=A.watchStores(M);return typeof e==="function"?e:void 0},[M,A]);const C=(0,_DevToolsVisibilityContext.useDevToolsVisibility)();const K=m.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{C.setDialOpen(g)},[g,C.setDialOpen]);(0,_react.useEffect)(()=>{C.setToolOpen(K||y)},[K,y,C.setToolOpen]);const{registerApps:V}=m;(0,_react.useEffect)(()=>{V(f.map(e=>{const t=e.icon;return{...e,icon:typeof t==="function"?({size:u})=>t(u):t}}))},[V,f]);const ne=(0,_react.useMemo)(()=>f.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[f]);(0,_floatingToolsReact.useSettings)({availableTools:ne,storage:webSettingsStorage});(0,_react.useEffect)(()=>{let e=false;const t=async()=>{const[u,T]=await Promise.all([_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.dial.isOpen()),_sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen())]);if(e)return;if(u==="true")S(true);if(T==="true"){S(true);O(true)}w.current=true};void t();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!w.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(),g?"true":"false")},[g]);(0,_react.useEffect)(()=>{if(!w.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),y?"true":"false")},[y]);const _=(0,_react.useCallback)(e=>{void(0,_dialUsageStore.recordToolUsage)(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();R(t=>t+1);return}if(e.component){const t=typeof e.icon==="function"?e.icon(20):e.icon;m.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:t,color:e.color||(0,_floatingToolsReact.getToolColor)(e.id)})}else{e.onPress?.()}},[m]);const z=(0,_react.useRef)({tools:f,openApps:m.openApps,openTool:_});z.current={tools:f,openApps:m.openApps,openTool:_};(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(e=>{const{tools:t,openApps:u,openTool:T}=z.current;if(u.some(q=>q.id===e))return false;const P=t.find(q=>q.id===e);if(!P||P.launchMode==="toggle-only")return false;T(P);return true}),[]);const D=(0,_react.useMemo)(()=>{const e=(0,_autoDiscoverPresetsWeb.getToolsBySlot)(f,"dial");return e.map(t=>{const u=t.color||(0,_floatingToolsReact.getToolColor)(t.id);let T;if(typeof t.icon==="string"){T=t.icon}else if(typeof t.icon==="function"){T=t.icon(32)}else{T=null}return{id:t.id,name:t.name||(0,_floatingToolsReact.getToolLabel)(t.id),icon:T,unavailable:!t.component&&!t.onPress,color:u,onPress:()=>{_(t);S(false)}}})},[f,_]);const H=(0,_react.useMemo)(()=>{if(!g)return D;const e=new Map(D.map(t=>[t.id,t]));return(0,_dialUsageStore.getRankedToolIds)(D.map(t=>t.id)).map(t=>e.get(t)).filter(t=>Boolean(t))},[g,D]);const{settings:k}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();const te=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(f,"row").filter(e=>(k.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,k.floatingTools]);const oe=(0,_react.useMemo)(()=>f.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})),[f]);const[se,U]=(0,_react.useState)(false);const $=m.openApps.some(e=>!e.minimized);(0,_react.useEffect)(()=>{if(d)return;let e=false;const t=setTimeout(async()=>{const u=await _sharedUi.persistentStorage.getItem(MENU_TOOLTIP_KEY);if(!e&&!u)U(true)},1e3);return()=>{e=true;clearTimeout(t)}},[d]);const h=(0,_react.useCallback)(()=>{U(false);void _sharedUi.persistentStorage.setItem(MENU_TOOLTIP_KEY,"true")},[]);const Y=(0,_react.useCallback)(()=>{h();S(true)},[h]);const ie=(0,_react.useCallback)(()=>{S(false);O(false)},[]);const re=(0,_react.useCallback)(()=>{O(e=>!e)},[]);const ae=(0,_react.useCallback)(()=>O(false),[]);const G=Boolean(i?.length&&a);const Q=k.floatingTools.environment!==false;const j=se&&!g&&!$&&!v;(0,_react.useEffect)(()=>{if(!j)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))h()};const t=u=>{if(u.key==="Escape")h()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",t);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",t)}},[j,h]);const J=m.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const X=(0,_jsxRuntime.jsx)(_BrowserToolRuntime.BrowserToolRuntime,{modules:r,apps:o,requiredEnvVars:c,externalSync:l,headless:x,sentryGetClient:p});if(x)return X;return(0,_jsxRuntime.jsxs)("div",{"data-buoy-root":"",style:{display:"contents"},children:[X,(0,_jsxRuntime.jsx)(WebToolOpenerBridge,{}),j&&(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:!j,pushToSide:g||$,suspendPointerEvents:g,centerOnboarding:j,minimizedStack:J?(0,_jsxRuntime.jsx)(_MinimizedToolsStackWeb.MinimizedToolsStack,{}):void 0,hasMinimizedStack:J,children:[I&&Q&&!G&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:I}),G&&Q&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:I??"local",availableEnvironments:i,onSelect:a}),s?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:s,onPress:Y}):(0,_jsxRuntime.jsx)("button",{"aria-label":"Open dev tools",onClick:Y,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:(0,_jsxRuntime.jsx)(MenuLauncherIcon,{})}),te.map(e=>(0,_jsxRuntime.jsx)("button",{"aria-label":e.name||(0,_floatingToolsReact.getToolLabel)(e.id),"aria-pressed":toggleIsOn(e),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))]})}),j&&(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:h}),g&&!v&&(0,_jsxRuntime.jsx)(_DialDevToolsWeb.DialMenu,{icons:H,onClose:ie,centerLabel:"BUOY",onCenterPress:re,settingsOpen:y,hintsDisabled:d,emptyNote:b&&H.length===0?_teamToolsNote.NO_TEAM_TOOLS_NOTE:void 0}),y&&!v&&(0,_jsxRuntime.jsx)(_DevToolsSettingsModalWeb.SettingsModal,{visible:true,onClose:ae,availableTools:oe,defaultFloatingTools:Z,defaultDialTools:ee,onSettingsChange:e=>{}}),!v&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppOverlay,{}),(0,_jsxRuntime.jsx)(_floating.FloatingToolHost,{})]})]})}function useCapacitorSignInAudience(n){const s=n&&typeof n==="object"?n.appId:void 0;const i=!!n;(0,_react.useEffect)(()=>{if(!i)return;let a=false;const o=licenseModule.SessionManager;if(!o)return;const r=l=>{if(a||!l)return;o.configure({audience:`app:${l}`});void o.load().catch(()=>{})};if(s)r(s);else void(0,_license.loadCapacitorAppHost)().then(l=>r(l?.bundleId)).catch(()=>{});return()=>{a=true}},[i,s])}function usePublishAppId(n){const s=n&&typeof n==="object"?n.appId:void 0;(0,_react.useEffect)(()=>{let i=false;if(s){(0,_sharedUi.setBuoyAppId)(s)}else if((0,_license.isCapacitorNative)()){void(0,_license.loadCapacitorAppHost)().then(a=>{if(!i)(0,_sharedUi.setBuoyAppId)(a?.bundleId)}).catch(()=>{})}else if(typeof location!=="undefined"&&location.origin&&location.origin!=="null"){(0,_sharedUi.setBuoyAppId)(location.origin)}return()=>{i=true}},[s])}let warnedNoTools=false;function withInstalledTools(n){if(n.modules)return n;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{...n,modules:_installedTools.installedTools}}function FloatingDevTools(n){return(0,_jsxRuntime.jsx)(_floating.BuoyPortal,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsContent,{...withInstalledTools(n)})})}function FloatingDevToolsContent(n){const{access:s,isPro:i,licenseKey:a}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(n.licenseKey??(0,_Buoy.defaultLicenseKey)())},[n.licenseKey]);const o=n.licenseKey===void 0||(0,_license.sameLicenseKey)(n.licenseKey,a);const r=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const l=o&&s.status==="admitted";(0,_react.useEffect)(()=>{if(l)(0,_sharedUi.startSettingsSync)()},[l]);(0,_react.useEffect)(()=>{if(r||s.status==="initializing")return;if(i&&l)(0,_releaseOptIn.markReleaseOptIn)();else(0,_releaseOptIn.clearReleaseOptIn)()},[r,i,l,s.status]);const c=(0,_license.isCapacitorNative)();useCapacitorSignInAudience(c?n.signIn:void 0);usePublishAppId(n.signIn);if(!r&&!i){if(!n.signIn||n.headless)return null;return c?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{needsPlan:true}):(0,_jsxRuntime.jsx)(_BuoySignInWeb.BuoySignIn,{})}if(!l){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[s.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.ToolModalShell=ToolModalShell;exports.useToolHeader=useToolHeader;exports.useToolHost=useToolHost;var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,o){if("function"==typeof WeakMap)var a=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,l){if(!l&&e&&e.__esModule)return e;var n,u,c={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return c;if(n=l?r:a){if(n.has(e))return n.get(e);n.set(e,c)}for(const i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?n(c,i,u):c[i]=e[i]);return c})(t,o)}const noop=()=>{};const FALLBACK_CONTEXT={search:"",isSearchActive:false,clearSearch:noop,close:noop,minimize:noop,showToast:noop,setHeaderOverride:noop};const ToolHostContext=(0,_react.createContext)(null);function useToolHost(){return(0,_react.useContext)(ToolHostContext)??FALLBACK_CONTEXT}function useToolHeader(t,o){const{setHeaderOverride:a}=useToolHost();(0,_react.useEffect)(()=>{a(t);return()=>a(null)},o)}const TOAST_DURATION_MS=2200;const TOAST_COLORS={success:_sharedUi.gameUIColors.success,error:_sharedUi.gameUIColors.error,info:_sharedUi.gameUIColors.info};function ToastView({message:t,type:o,nonce:a}){const r=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;(0,_react.useEffect)(()=>{r.setValue(0);_reactNative.Animated.sequence([_reactNative.Animated.timing(r,{toValue:1,duration:150,useNativeDriver:true}),_reactNative.Animated.delay(TOAST_DURATION_MS-450),_reactNative.Animated.timing(r,{toValue:0,duration:300,useNativeDriver:true})]).start()},[a,r]);const e=TOAST_COLORS[o];return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{pointerEvents:"none",style:[styles.toast,{opacity:r,borderColor:e+"60"}],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.toastDot,{backgroundColor:e}]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.toastText,numberOfLines:2,children:t})]})}function ToolModalShell({app:t,config:o,visible:a,zIndex:r,onClose:e,onMinimize:l,initialModalState:n,enableSharedModalDimensions:u,bodyProps:c}){const i=t.component;const[s,T]=(0,_react.useState)(false);const[m,y]=(0,_react.useState)("");const[d,S]=(0,_react.useState)(null);const[x,g]=(0,_react.useState)(null);const h=(0,_react.useRef)(null);const f=(0,_react.useCallback)(()=>{T(false);y("")},[]);const j=(0,_react.useCallback)((_,A="info")=>{if(h.current)clearTimeout(h.current);g(k=>({message:_,type:A,nonce:(k?.nonce??0)+1}));h.current=setTimeout(()=>g(null),TOAST_DURATION_MS)},[]);(0,_react.useEffect)(()=>{return()=>{if(h.current)clearTimeout(h.current)}},[]);const C=(0,_react.useMemo)(()=>({search:s?m:"",isSearchActive:s,clearSearch:f,close:e,minimize:()=>l(),showToast:j,setHeaderOverride:S,instanceId:t.instanceId}),[m,s,f,e,l,j,t.instanceId]);const p=d?.title??o.title??t.title??t.id;const w=d?.subtitle??o.subtitle;const v=d?.onBack;const O=d?.actions??o.headerActions;const b=d?.searchable??o.searchable;(0,_react.useEffect)(()=>{if(!b&&s)f()},[b,s,f]);const H=u?_sharedUi.devToolsStorageKeys.modal.root():_sharedUi.devToolsStorageKeys.custom(t.id).modal();const M=(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[v&&!s&&(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:v}),s?(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Search,{value:m,onChangeText:y,onCancel:f,placeholder:o.searchPlaceholder,testID:`tool-search-field-${t.id}`}):(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:p,subtitle:w}),(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions,{children:[!s&&O,b&&!s&&(0,_jsxRuntime.jsx)(_sharedUi.HeaderSearchButton,{variant:"chip",testID:`tool-search-${t.id}`,onPress:()=>T(true)})]})]});return(0,_jsxRuntime.jsx)(ToolHostContext.Provider,{value:C,children:(0,_jsxRuntime.jsx)(_sharedUi.JsModal,{visible:a,onClose:e,onBack:v,onMinimize:l,initialModalState:n,zIndex:r,persistenceKey:H,enablePersistence:true,initialMode:o.initialMode??"bottomSheet",header:{customContent:M,showToggleButton:true},disableScrollWrapper:true,styles:{},children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.bodyRoot,children:[(0,_jsxRuntime.jsx)(_sharedUi.TickProvider,{children:(0,_jsxRuntime.jsx)(_sharedUi.ToolScreenHeaderContext.Provider,{value:S,children:(0,_jsxRuntime.jsx)(i,{...c})})}),x&&(0,_jsxRuntime.jsx)(ToastView,{message:x.message,type:x.type,nonce:x.nonce})]})})})}const styles=_reactNative.StyleSheet.create({bodyRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},toast:{position:"absolute",bottom:16,alignSelf:"center",flexDirection:"row",alignItems:"center",gap:8,maxWidth:"86%",backgroundColor:_sharedUi.buoyColors.card,borderWidth:1,borderRadius:8,paddingHorizontal:12,paddingVertical:8,shadowColor:"#000",shadowOpacity:.4,shadowRadius:8,shadowOffset:{width:0,height:2},elevation:6},toastDot:{width:6,height:6,borderRadius:3},toastText:{flex:1,fontSize:12,color:_sharedUi.buoyColors.text}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ToolModalShell=ToolModalShell;exports.useToolHeader=useToolHeader;exports.useToolHost=useToolHost;var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,o){if("function"==typeof WeakMap)var a=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,c){if(!c&&e&&e.__esModule)return e;var n,u,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=c?r:a){if(n.has(e))return n.get(e);n.set(e,l)}for(const i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?n(l,i,u):l[i]=e[i]);return l})(t,o)}const noop=()=>{};const FALLBACK_CONTEXT={search:"",isSearchActive:false,clearSearch:noop,close:noop,minimize:noop,showToast:noop,setHeaderOverride:noop};const ToolHostContext=(0,_react.createContext)(null);function useToolHost(){return(0,_react.useContext)(ToolHostContext)??FALLBACK_CONTEXT}function useToolHeader(t,o){const{setHeaderOverride:a}=useToolHost();(0,_react.useEffect)(()=>{a(t);return()=>a(null)},o)}const TOAST_DURATION_MS=2200;const TOAST_COLORS={success:_sharedUi.gameUIColors.success,error:_sharedUi.gameUIColors.error,info:_sharedUi.gameUIColors.info};function ToastView({message:t,type:o,nonce:a}){const r=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;(0,_react.useEffect)(()=>{r.setValue(0);_reactNative.Animated.sequence([_reactNative.Animated.timing(r,{toValue:1,duration:150,useNativeDriver:true}),_reactNative.Animated.delay(TOAST_DURATION_MS-450),_reactNative.Animated.timing(r,{toValue:0,duration:300,useNativeDriver:true})]).start()},[a,r]);const e=TOAST_COLORS[o];return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{pointerEvents:"none",style:[styles.toast,{opacity:r,borderColor:e+"60"}],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.toastDot,{backgroundColor:e}]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.toastText,numberOfLines:2,children:t})]})}function ToolModalShell({app:t,config:o,visible:a,zIndex:r,onClose:e,onMinimize:c,initialModalState:n,enableSharedModalDimensions:u,bodyProps:l}){const i=t.component;const[s,T]=(0,_react.useState)(false);const[m,y]=(0,_react.useState)("");const[d,S]=(0,_react.useState)(null);const[x,g]=(0,_react.useState)(null);const h=(0,_react.useRef)(null);const f=(0,_react.useCallback)(()=>{T(false);y("")},[]);const j=(0,_react.useCallback)((_,A="info")=>{if(h.current)clearTimeout(h.current);g(k=>({message:_,type:A,nonce:(k?.nonce??0)+1}));h.current=setTimeout(()=>g(null),TOAST_DURATION_MS)},[]);(0,_react.useEffect)(()=>{return()=>{if(h.current)clearTimeout(h.current)}},[]);const C=(0,_react.useMemo)(()=>({search:s?m:"",isSearchActive:s,clearSearch:f,close:e,minimize:()=>c(),showToast:j,setHeaderOverride:S,instanceId:t.instanceId}),[m,s,f,e,c,j,t.instanceId]);const p=d?.title??o.title??t.title??t.id;const w=d?.subtitle??o.subtitle;const v=d?.onBack;const O=d?.actions??o.headerActions;const b=d?.searchable??o.searchable;(0,_react.useEffect)(()=>{if(!b&&s)f()},[b,s,f]);const H=u?_sharedUi.devToolsStorageKeys.modal.root():_sharedUi.devToolsStorageKeys.custom(t.id).modal();const M=(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[v&&!s&&(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:v}),s?(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Search,{value:m,onChangeText:y,onCancel:f,placeholder:o.searchPlaceholder,testID:`tool-search-field-${t.id}`}):(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:p,subtitle:w}),(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions,{children:[!s&&O,b&&!s&&(0,_jsxRuntime.jsx)(_sharedUi.HeaderSearchButton,{variant:"chip",testID:`tool-search-${t.id}`,onPress:()=>T(true)})]})]});return(0,_jsxRuntime.jsx)(ToolHostContext.Provider,{value:C,children:(0,_jsxRuntime.jsx)(_sharedUi.JsModal,{visible:a,onClose:e,onBack:v,onMinimize:c,initialModalState:n,zIndex:r,persistenceKey:H,enablePersistence:true,initialMode:o.initialMode??"bottomSheet",header:{customContent:M,showToggleButton:true},disableScrollWrapper:true,styles:{},children:(0,_jsxRuntime.jsxs)(_reactNative.View,{nativeID:"buoy-tool-host",style:styles.bodyRoot,children:[(0,_jsxRuntime.jsx)(_sharedUi.TickProvider,{children:(0,_jsxRuntime.jsx)(_sharedUi.ToolScreenHeaderContext.Provider,{value:S,children:(0,_jsxRuntime.jsx)(i,{...l})})}),x&&(0,_jsxRuntime.jsx)(ToastView,{message:x.message,type:x.type,nonce:x.nonce})]})})})}const styles=_reactNative.StyleSheet.create({bodyRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},toast:{position:"absolute",bottom:16,alignSelf:"center",flexDirection:"row",alignItems:"center",gap:8,maxWidth:"86%",backgroundColor:_sharedUi.buoyColors.card,borderWidth:1,borderRadius:8,paddingHorizontal:12,paddingVertical:8,shadowColor:"#000",shadowOpacity:.4,shadowRadius:8,shadowOffset:{width:0,height:2},elevation:6},toastDot:{width:6,height:6,borderRadius:3},toastText:{flex:1,fontSize:12,color:_sharedUi.buoyColors.text}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.autoDiscoverPresets=autoDiscoverPresets;exports.autoDiscoverPresetsWithCustom=autoDiscoverPresetsWithCustom;var _optionalRequire=require("./optionalRequire.js");function autoDiscoverPresets(){const t=[];const u=[{name:"@buoy-gg/env",loader:()=>{try{const{envToolPreset:r}=require("@buoy-gg/env");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/env",r);return null}}},{name:"@buoy-gg/network",loader:()=>{try{const{networkToolPreset:r}=require("@buoy-gg/network");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/network",r);return null}}},{name:"@buoy-gg/storage",loader:()=>{try{const{storageToolPreset:r}=require("@buoy-gg/storage");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/storage",r);return null}}},{name:"@buoy-gg/react-query",loader:()=>{try{const{reactQueryToolPreset:r,wifiTogglePreset:e}=require("@buoy-gg/react-query");return[r,e]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/react-query",r);return null}}},{name:"@buoy-gg/route-events",loader:()=>{try{const{routeEventsToolPreset:r}=require("@buoy-gg/route-events");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/route-events",r);return null}}},{name:"@buoy-gg/debug-borders",loader:()=>{try{const{debugBordersToolPreset:r}=require("@buoy-gg/debug-borders");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/debug-borders",r);return null}}},{name:"@buoy-gg/highlight-updates",loader:()=>{try{const{highlightUpdatesPreset:r,highlightUpdatesModalPreset:e}=require("@buoy-gg/highlight-updates");return[e,r]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/highlight-updates",r);return null}}},{name:"@buoy-gg/console",loader:()=>{try{const{consoleToolPreset:r}=require("@buoy-gg/console");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/console",r);return null}}},{name:"@buoy-gg/notifications",loader:()=>{try{return require("@buoy-gg/notifications").notificationToolPreset}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/notifications",r);return null}}},{name:"@buoy-gg/sentry",loader:()=>{try{const{sentryToolPreset:r}=require("@buoy-gg/sentry");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/sentry",r);return null}}},{name:"@buoy-gg/time-machine",loader:()=>{try{const{timeMachineToolPreset:r}=require("@buoy-gg/time-machine");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/time-machine",r);return null}}},{name:"@buoy-gg/clock",loader:()=>{try{const{clockToolPreset:r}=require("@buoy-gg/clock");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/clock",r);return null}}},{name:"@buoy-gg/lifecycle",loader:()=>{try{const{lifecycleToolPreset:r}=require("@buoy-gg/lifecycle");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/lifecycle",r);return null}}},{name:"@buoy-gg/location",loader:()=>{try{const{locationToolPreset:r}=require("@buoy-gg/location");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/location",r);return null}}},{name:"@buoy-gg/permissions",loader:()=>{try{const{permissionsToolPreset:r}=require("@buoy-gg/permissions");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/permissions",r);return null}}},{name:"@buoy-gg/scenarios",loader:()=>{try{const{scenariosToolPreset:r}=require("@buoy-gg/scenarios");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/scenarios",r);return null}}},{name:"@buoy-gg/ask-buoy",loader:()=>{try{const{askBuoyToolPreset:r}=require("@buoy-gg/ask-buoy");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ask-buoy",r);return null}}},{name:"@buoy-gg/redux",loader:()=>{try{const{reduxToolPreset:r}=require("@buoy-gg/redux");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/redux",r);return null}}},{name:"@buoy-gg/zustand",loader:()=>{try{const{zustandToolPreset:r}=require("@buoy-gg/zustand");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",r);return null}}},{name:"@buoy-gg/events",loader:()=>{try{const{eventsToolPreset:r}=require("@buoy-gg/events");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/events",r);return null}}},{name:"@buoy-gg/jotai",loader:()=>{try{const{jotaiToolPreset:r}=require("@buoy-gg/jotai");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/jotai",r);return null}}},{name:"@buoy-gg/image-overlay",loader:()=>{try{const{imageOverlayToolPreset:r}=require("@buoy-gg/image-overlay");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/image-overlay",r);return null}}},{name:"@buoy-gg/perf-monitor",loader:()=>{try{const{perfMonitorPreset:r,perfMonitorModalPreset:e}=require("@buoy-gg/perf-monitor");return[r,e]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/perf-monitor",r);return null}}},{name:"@buoy-gg/js-top",loader:()=>{try{const{jsTopPreset:r,jsTopModalPreset:e}=require("@buoy-gg/js-top");return[e,r]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/js-top",r);return null}}},{name:"@buoy-gg/images",loader:()=>{try{const{imagesToolPreset:r}=require("@buoy-gg/images");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/images",r);return null}}},{name:"@buoy-gg/assets",loader:()=>{try{const{assetsToolPreset:r}=require("@buoy-gg/assets");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/assets",r);return null}}}];for(const{name:r,loader:e}of u){try{const o=e();if(o){if(Array.isArray(o)){t.push(...o)}else{t.push(o)}}}catch(o){(0,_optionalRequire.reportOptionalRequireError)(r,o)}}return t}function autoDiscoverPresetsWithCustom(t){const u=autoDiscoverPresets();const r=new Set(t.map(o=>o.id));const e=u.filter(o=>!r.has(o.id));return[...t,...e]}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.autoDiscoverPresets=autoDiscoverPresets;exports.autoDiscoverPresetsWithCustom=autoDiscoverPresetsWithCustom;var _optionalRequire=require("./optionalRequire.js");function autoDiscoverPresets(){const t=[];const u=[{name:"@buoy-gg/env",loader:()=>{try{const{envToolPreset:r}=require("@buoy-gg/env");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/env",r);return null}}},{name:"@buoy-gg/network",loader:()=>{try{const{networkToolPreset:r}=require("@buoy-gg/network");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/network",r);return null}}},{name:"@buoy-gg/storage",loader:()=>{try{const{storageToolPreset:r}=require("@buoy-gg/storage");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/storage",r);return null}}},{name:"@buoy-gg/react-query",loader:()=>{try{const{reactQueryToolPreset:r,wifiTogglePreset:e}=require("@buoy-gg/react-query");return[r,e]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/react-query",r);return null}}},{name:"@buoy-gg/route-events",loader:()=>{try{const{routeEventsToolPreset:r}=require("@buoy-gg/route-events");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/route-events",r);return null}}},{name:"@buoy-gg/debug-borders",loader:()=>{try{const{debugBordersToolPreset:r}=require("@buoy-gg/debug-borders");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/debug-borders",r);return null}}},{name:"@buoy-gg/highlight-updates",loader:()=>{try{const{highlightUpdatesPreset:r,highlightUpdatesModalPreset:e}=require("@buoy-gg/highlight-updates");return[e,r]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/highlight-updates",r);return null}}},{name:"@buoy-gg/console",loader:()=>{try{const{consoleToolPreset:r}=require("@buoy-gg/console");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/console",r);return null}}},{name:"@buoy-gg/notifications",loader:()=>{try{return require("@buoy-gg/notifications").notificationToolPreset}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/notifications",r);return null}}},{name:"@buoy-gg/sentry",loader:()=>{try{const{sentryToolPreset:r}=require("@buoy-gg/sentry");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/sentry",r);return null}}},{name:"@buoy-gg/time-machine",loader:()=>{try{const{timeMachineToolPreset:r}=require("@buoy-gg/time-machine");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/time-machine",r);return null}}},{name:"@buoy-gg/clock",loader:()=>{try{const{clockToolPreset:r}=require("@buoy-gg/clock");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/clock",r);return null}}},{name:"@buoy-gg/bug-links",loader:()=>{try{const{reportBugToolPreset:r,bugLinksToolPreset:e}=require("@buoy-gg/bug-links");return[r,e]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/bug-links",r);return null}}},{name:"@buoy-gg/memory-leaks",loader:()=>{try{const{memoryLeaksToolPreset:r}=require("@buoy-gg/memory-leaks");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/memory-leaks",r);return null}}},{name:"@buoy-gg/lifecycle",loader:()=>{try{const{lifecycleToolPreset:r}=require("@buoy-gg/lifecycle");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/lifecycle",r);return null}}},{name:"@buoy-gg/ota-inspector",loader:()=>{try{const{otaInspectorToolPreset:r}=require("@buoy-gg/ota-inspector");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ota-inspector",r);return null}}},{name:"@buoy-gg/location",loader:()=>{try{const{locationToolPreset:r}=require("@buoy-gg/location");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/location",r);return null}}},{name:"@buoy-gg/permissions",loader:()=>{try{const{permissionsToolPreset:r}=require("@buoy-gg/permissions");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/permissions",r);return null}}},{name:"@buoy-gg/scenarios",loader:()=>{try{const{scenariosToolPreset:r}=require("@buoy-gg/scenarios");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/scenarios",r);return null}}},{name:"@buoy-gg/ask-buoy",loader:()=>{try{const{askBuoyToolPreset:r}=require("@buoy-gg/ask-buoy");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ask-buoy",r);return null}}},{name:"@buoy-gg/redux",loader:()=>{try{const{reduxToolPreset:r}=require("@buoy-gg/redux");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/redux",r);return null}}},{name:"@buoy-gg/zustand",loader:()=>{try{const{zustandToolPreset:r}=require("@buoy-gg/zustand");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",r);return null}}},{name:"@buoy-gg/events",loader:()=>{try{const{eventsToolPreset:r}=require("@buoy-gg/events");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/events",r);return null}}},{name:"@buoy-gg/jotai",loader:()=>{try{const{jotaiToolPreset:r}=require("@buoy-gg/jotai");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/jotai",r);return null}}},{name:"@buoy-gg/image-overlay",loader:()=>{try{const{imageOverlayToolPreset:r}=require("@buoy-gg/image-overlay");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/image-overlay",r);return null}}},{name:"@buoy-gg/perf-monitor",loader:()=>{try{const{perfMonitorPreset:r,perfMonitorModalPreset:e}=require("@buoy-gg/perf-monitor");return[r,e]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/perf-monitor",r);return null}}},{name:"@buoy-gg/js-top",loader:()=>{try{const{jsTopPreset:r,jsTopModalPreset:e}=require("@buoy-gg/js-top");return[e,r]}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/js-top",r);return null}}},{name:"@buoy-gg/images",loader:()=>{try{const{imagesToolPreset:r}=require("@buoy-gg/images");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/images",r);return null}}},{name:"@buoy-gg/assets",loader:()=>{try{const{assetsToolPreset:r}=require("@buoy-gg/assets");return r}catch(r){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/assets",r);return null}}}];for(const{name:r,loader:e}of u){try{const o=e();if(o){if(Array.isArray(o)){t.push(...o)}else{t.push(o)}}}catch(o){(0,_optionalRequire.reportOptionalRequireError)(r,o)}}return t}function autoDiscoverPresetsWithCustom(t){const u=autoDiscoverPresets();const r=new Set(t.map(o=>o.id));const e=u.filter(o=>!r.has(o.id));return[...t,...e]}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AutoExternalSync=AutoExternalSync;exports.ToolRegistryPublisher=ToolRegistryPublisher;exports.isExternalSyncAvailable=isExternalSyncAvailable;exports.useToolAdapterMap=useToolAdapterMap;var _react=require("react");var _reactNative=require("react-native");var _license=require("@buoy-gg/license");var _optionalRequire=require("./optionalRequire.js");var _appSyncAdapter=require("./sync/appSyncAdapter.js");var _deviceIdentity=require("./deviceIdentity.js");var _externalSyncGate=require("./externalSyncGate.js");var _Buoy=require("../Buoy.js");var _sharedUi=require("@buoy-gg/shared-ui");(0,_Buoy.applyDefaultLicenseKey)();let externalSyncModule=null;let storageModule=null;let networkModule=null;let reactQueryModule=null;let routeEventsModule=null;let reduxModule=null;let zustandModule=null;let jotaiModule=null;let eventsModule=null;let consoleModule=null;let clockModule=null;let permissionsModule=null;let lifecycleModule=null;let locationModule=null;let sentryModule=null;let notificationsModule=null;try{notificationsModule=require("@buoy-gg/notifications")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/notifications",e)}let envModule=null;let highlightUpdatesModule=null;let debugBordersModule=null;let impersonateModule=null;let perfMonitorModule=null;let jsTopModule=null;let imagesModule=null;let assetsModule=null;let tvRemoteModule=null;let focusInspectorModule=null;let expoConstantsModule=null;try{externalSyncModule=require("@buoy-gg/external-sync")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/external-sync",e)}try{storageModule=require("@buoy-gg/storage")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/storage",e)}try{networkModule=require("@buoy-gg/network")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/network",e)}try{reactQueryModule=require("@buoy-gg/react-query")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/react-query",e)}try{routeEventsModule=require("@buoy-gg/route-events")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/route-events",e)}try{reduxModule=require("@buoy-gg/redux")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/redux",e)}try{zustandModule=require("@buoy-gg/zustand")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",e)}try{jotaiModule=require("@buoy-gg/jotai")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/jotai",e)}try{eventsModule=require("@buoy-gg/events")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/events",e)}try{consoleModule=require("@buoy-gg/console")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/console",e)}try{clockModule=require("@buoy-gg/clock")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/clock",e)}try{lifecycleModule=require("@buoy-gg/lifecycle")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/lifecycle",e)}try{locationModule=require("@buoy-gg/location")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/location",e)}try{permissionsModule=require("@buoy-gg/permissions")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/permissions",e)}try{sentryModule=require("@buoy-gg/sentry")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/sentry",e)}try{envModule=require("@buoy-gg/env")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/env",e)}try{highlightUpdatesModule=require("@buoy-gg/highlight-updates")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/highlight-updates",e)}try{debugBordersModule=require("@buoy-gg/debug-borders")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/debug-borders",e)}try{impersonateModule=require("@buoy-gg/impersonate")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/impersonate",e)}try{perfMonitorModule=require("@buoy-gg/perf-monitor")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/perf-monitor",e)}try{jsTopModule=require("@buoy-gg/js-top")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/js-top",e)}try{imagesModule=require("@buoy-gg/images")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/images",e)}try{assetsModule=require("@buoy-gg/assets")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/assets",e)}try{tvRemoteModule=require("@buoy-gg/tv-remote")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/tv-remote",e)}try{focusInspectorModule=require("@buoy-gg/focus-inspector")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/focus-inspector",e)}try{expoConstantsModule=require("expo-constants")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("expo-constants",e)}function isExternalSyncAvailable(){return!!externalSyncModule?.useExternalSyncSocket}function getAppName(){const e=expoConstantsModule?.default??expoConstantsModule;return e?.expoConfig?.name??e?.manifest2?.extra?.expoClient?.name??null}function getHardwareName(){const e=expoConstantsModule?.default??expoConstantsModule;const o=e?.deviceName;return typeof o==="string"&&o.length>0?o:null}function useToolAdapterMap({requiredEnvVars:e,customApps:o}){const n=reactQueryModule?.useReactQuerySyncAdapter?reactQueryModule.useReactQuerySyncAdapter():null;return useToolAdapterMapInner(n,e,o)}function ToolRegistryPublisher({requiredEnvVars:e,customApps:o}){const n=useToolAdapterMap({requiredEnvVars:e,customApps:o});const r=(0,_react.useRef)(n);r.current=n;(0,_react.useEffect)(()=>(0,_sharedUi.registerToolAdapters)(()=>r.current),[]);return null}function AutoExternalSync({options:e,requiredEnvVars:o,isPro:n,tier:r,licenseKey:t,customApps:g}){const{useExternalSyncSocket:d,useExternalSync:f}=externalSyncModule;const l=useToolAdapterMap({requiredEnvVars:o,customApps:g});const s=(0,_deviceIdentity.useDeviceIdentity)(e,{appName:getAppName(),hardwareName:getHardwareName(),platform:_reactNative.Platform.OS});const y=s?.deviceId??null;const{socket:i}=d({deviceName:s?.deviceName??"Buoy Device",socketURL:e?.socketURL??externalSyncModule.getDefaultSocketURL?.()??"http://localhost:42831",persistentDeviceId:y,platform:_reactNative.Platform.OS,enableLogs:e?.enableLogs});const u=(0,_react.useRef)({isPro:n,tier:r,licenseKey:t});u.current={isPro:n,tier:r,licenseKey:t};(0,_react.useEffect)(()=>{if(!i)return;const c=()=>{if(!_license.LicenseManager.hasAccountAccess()||!i.connected)return;const p=_license.LicenseManager.getState();if(!u.current.isPro&&(p.isInitialized===false||p.isValidating===true))return;i.emit("device-license",{isPro:u.current.isPro?"1":"0",tier:u.current.tier??(u.current.isPro?"pro":"free")})};if(i.connected)c();i.on("connect",c);return()=>{i.off("connect",c)}},[i,n,r,t]);const a=e?.releaseActions?.join(",")??"";const b=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(l,typeof __DEV__!=="undefined"&&__DEV__,a?a.split(","):void 0),[l,a]);f({tools:b,socket:i,deviceId:y,enableLogs:e?.enableLogs});return null}function useToolAdapterMapInner(e,o,n){return(0,_react.useMemo)(()=>{const r={app:_appSyncAdapter.appSyncAdapter};if(storageModule?.storageSyncAdapter){r.storage=storageModule.storageSyncAdapter}if(networkModule?.networkSyncAdapter){r.network=networkModule.networkSyncAdapter}if(e){r.query=e}if(routeEventsModule?.routeEventsSyncAdapter){r["route-events"]=routeEventsModule.routeEventsSyncAdapter}if(reduxModule?.reduxSyncAdapter){r.redux=reduxModule.reduxSyncAdapter}if(zustandModule?.zustandSyncAdapter){r.zustand=zustandModule.zustandSyncAdapter}if(jotaiModule?.jotaiSyncAdapter){r.jotai=jotaiModule.jotaiSyncAdapter}if(eventsModule?.eventsSyncAdapter){r.events=eventsModule.eventsSyncAdapter}if(consoleModule?.consoleSyncAdapter){r.console=consoleModule.consoleSyncAdapter}if(clockModule?.clockSyncAdapter){r.clock=clockModule.clockSyncAdapter}if(permissionsModule?.permissionsSyncAdapter){r.permissions=permissionsModule.permissionsSyncAdapter}if(lifecycleModule?.lifecycleSyncAdapter){r.lifecycle=lifecycleModule.lifecycleSyncAdapter}if(locationModule?.locationSyncAdapter){r.location=locationModule.locationSyncAdapter}if(notificationsModule?.notificationSyncAdapter){r["push-notifications"]=notificationsModule.notificationSyncAdapter}if(sentryModule?.sentrySyncAdapter){r.sentry=sentryModule.sentrySyncAdapter}try{const t=require("@buoy-gg/time-machine");if(t?.timeMachineSyncAdapter){r["time-machine"]=t.timeMachineSyncAdapter}}catch(t){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/time-machine",t)}try{const t=require("@buoy-gg/scenarios");if(t?.scenariosSyncAdapter){r.scenarios=t.scenariosSyncAdapter}}catch(t){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/scenarios",t)}try{const t=require("@buoy-gg/ask-buoy");if(t?.askBuoySyncAdapter){r["ask-buoy"]=t.askBuoySyncAdapter}}catch(t){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ask-buoy",t)}if(envModule?.createEnvSyncAdapter){r.env=envModule.createEnvSyncAdapter(o??[])}if(highlightUpdatesModule?.highlightUpdatesSyncAdapter){r["highlight-updates"]=highlightUpdatesModule.highlightUpdatesSyncAdapter}if(debugBordersModule?.debugBordersSyncAdapter){r["debug-borders"]=debugBordersModule.debugBordersSyncAdapter}if(impersonateModule?.impersonateSyncAdapter){r.impersonate=impersonateModule.impersonateSyncAdapter}if(perfMonitorModule?.perfMonitorSyncAdapter){r["perf-monitor"]=perfMonitorModule.perfMonitorSyncAdapter}if(jsTopModule?.jsTopSyncAdapter){r["js-top"]=jsTopModule.jsTopSyncAdapter}if(imagesModule?.imagesSyncAdapter){r.images=imagesModule.imagesSyncAdapter}if(assetsModule?.assetsSyncAdapter){r.assets=assetsModule.assetsSyncAdapter}if(tvRemoteModule?.tvRemoteSyncAdapter){r["tv-remote"]=tvRemoteModule.tvRemoteSyncAdapter}if(focusInspectorModule?.focusInspectorSyncAdapter){r["focus-inspector"]=focusInspectorModule.focusInspectorSyncAdapter}for(const t of n??[]){if(t?.sync){r[`custom:${t.id}`]=t.sync}}return r},[e,o,n])}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AutoExternalSync=AutoExternalSync;exports.ToolRegistryPublisher=ToolRegistryPublisher;exports.isExternalSyncAvailable=isExternalSyncAvailable;exports.useToolAdapterMap=useToolAdapterMap;var _react=require("react");var _reactNative=require("react-native");var _license=require("@buoy-gg/license");var _optionalRequire=require("./optionalRequire.js");var _appSyncAdapter=require("./sync/appSyncAdapter.js");var _deviceIdentity=require("./deviceIdentity.js");var _externalSyncGate=require("./externalSyncGate.js");var _Buoy=require("../Buoy.js");var _sharedUi=require("@buoy-gg/shared-ui");(0,_Buoy.applyDefaultLicenseKey)();let externalSyncModule=null;let storageModule=null;let networkModule=null;let reactQueryModule=null;let routeEventsModule=null;let reduxModule=null;let zustandModule=null;let jotaiModule=null;let eventsModule=null;let consoleModule=null;let clockModule=null;let bugLinksModule=null;let memoryLeaksModule=null;try{memoryLeaksModule=require("@buoy-gg/memory-leaks")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/memory-leaks",e)}let permissionsModule=null;let lifecycleModule=null;let otaModule=null;let locationModule=null;let sentryModule=null;let notificationsModule=null;try{notificationsModule=require("@buoy-gg/notifications")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/notifications",e)}let envModule=null;let highlightUpdatesModule=null;let debugBordersModule=null;let impersonateModule=null;let perfMonitorModule=null;let jsTopModule=null;let imagesModule=null;let assetsModule=null;let tvRemoteModule=null;let focusInspectorModule=null;let expoConstantsModule=null;try{externalSyncModule=require("@buoy-gg/external-sync")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/external-sync",e)}try{storageModule=require("@buoy-gg/storage")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/storage",e)}try{networkModule=require("@buoy-gg/network")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/network",e)}try{reactQueryModule=require("@buoy-gg/react-query")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/react-query",e)}try{routeEventsModule=require("@buoy-gg/route-events")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/route-events",e)}try{reduxModule=require("@buoy-gg/redux")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/redux",e)}try{zustandModule=require("@buoy-gg/zustand")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",e)}try{jotaiModule=require("@buoy-gg/jotai")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/jotai",e)}try{eventsModule=require("@buoy-gg/events")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/events",e)}try{consoleModule=require("@buoy-gg/console")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/console",e)}try{clockModule=require("@buoy-gg/clock")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/clock",e)}try{bugLinksModule=require("@buoy-gg/bug-links")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/bug-links",e)}try{lifecycleModule=require("@buoy-gg/lifecycle")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/lifecycle",e)}try{otaModule=require("@buoy-gg/ota-inspector")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ota-inspector",e)}try{locationModule=require("@buoy-gg/location")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/location",e)}try{permissionsModule=require("@buoy-gg/permissions")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/permissions",e)}try{sentryModule=require("@buoy-gg/sentry")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/sentry",e)}try{envModule=require("@buoy-gg/env")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/env",e)}try{highlightUpdatesModule=require("@buoy-gg/highlight-updates")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/highlight-updates",e)}try{debugBordersModule=require("@buoy-gg/debug-borders")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/debug-borders",e)}try{impersonateModule=require("@buoy-gg/impersonate")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/impersonate",e)}try{perfMonitorModule=require("@buoy-gg/perf-monitor")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/perf-monitor",e)}try{jsTopModule=require("@buoy-gg/js-top")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/js-top",e)}try{imagesModule=require("@buoy-gg/images")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/images",e)}try{assetsModule=require("@buoy-gg/assets")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/assets",e)}try{tvRemoteModule=require("@buoy-gg/tv-remote")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/tv-remote",e)}try{focusInspectorModule=require("@buoy-gg/focus-inspector")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/focus-inspector",e)}try{expoConstantsModule=require("expo-constants")}catch(e){(0,_optionalRequire.reportOptionalRequireError)("expo-constants",e)}function isExternalSyncAvailable(){return!!externalSyncModule?.useExternalSyncSocket}function getAppName(){const e=expoConstantsModule?.default??expoConstantsModule;return e?.expoConfig?.name??e?.manifest2?.extra?.expoClient?.name??null}function getHardwareName(){const e=expoConstantsModule?.default??expoConstantsModule;const o=e?.deviceName;return typeof o==="string"&&o.length>0?o:null}function useToolAdapterMap({requiredEnvVars:e,customApps:o}){const n=reactQueryModule?.useReactQuerySyncAdapter?reactQueryModule.useReactQuerySyncAdapter():null;return useToolAdapterMapInner(n,e,o)}function ToolRegistryPublisher({requiredEnvVars:e,customApps:o}){const n=useToolAdapterMap({requiredEnvVars:e,customApps:o});const r=(0,_react.useRef)(n);r.current=n;(0,_react.useEffect)(()=>(0,_sharedUi.registerToolAdapters)(()=>r.current),[]);return null}function AutoExternalSync({options:e,requiredEnvVars:o,isPro:n,tier:r,licenseKey:t,customApps:g}){const{useExternalSyncSocket:d,useExternalSync:f}=externalSyncModule;const l=useToolAdapterMap({requiredEnvVars:o,customApps:g});const s=(0,_deviceIdentity.useDeviceIdentity)(e,{appName:getAppName(),hardwareName:getHardwareName(),platform:_reactNative.Platform.OS});const y=s?.deviceId??null;const{socket:a}=d({deviceName:s?.deviceName??"Buoy Device",socketURL:e?.socketURL??externalSyncModule.getDefaultSocketURL?.()??"http://localhost:42831",persistentDeviceId:y,platform:_reactNative.Platform.OS,enableLogs:e?.enableLogs});const u=(0,_react.useRef)({isPro:n,tier:r,licenseKey:t});u.current={isPro:n,tier:r,licenseKey:t};(0,_react.useEffect)(()=>{if(!a)return;const c=()=>{if(!_license.LicenseManager.hasAccountAccess()||!a.connected)return;const p=_license.LicenseManager.getState();if(!u.current.isPro&&(p.isInitialized===false||p.isValidating===true))return;a.emit("device-license",{isPro:u.current.isPro?"1":"0",tier:u.current.tier??(u.current.isPro?"pro":"free")})};if(a.connected)c();a.on("connect",c);return()=>{a.off("connect",c)}},[a,n,r,t]);const i=e?.releaseActions?.join(",")??"";const b=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(l,typeof __DEV__!=="undefined"&&__DEV__,i?i.split(","):void 0),[l,i]);f({tools:b,socket:a,deviceId:y,enableLogs:e?.enableLogs});return null}function useToolAdapterMapInner(e,o,n){return(0,_react.useMemo)(()=>{const r={app:_appSyncAdapter.appSyncAdapter};if(storageModule?.storageSyncAdapter){r.storage=storageModule.storageSyncAdapter}if(networkModule?.networkSyncAdapter){r.network=networkModule.networkSyncAdapter}if(networkModule?.socketsSyncAdapter){r.sockets=networkModule.socketsSyncAdapter}if(e){r.query=e}if(routeEventsModule?.routeEventsSyncAdapter){r["route-events"]=routeEventsModule.routeEventsSyncAdapter}if(reduxModule?.reduxSyncAdapter){r.redux=reduxModule.reduxSyncAdapter}if(zustandModule?.zustandSyncAdapter){r.zustand=zustandModule.zustandSyncAdapter}if(jotaiModule?.jotaiSyncAdapter){r.jotai=jotaiModule.jotaiSyncAdapter}if(eventsModule?.eventsSyncAdapter){r.events=eventsModule.eventsSyncAdapter}if(consoleModule?.consoleSyncAdapter){r.console=consoleModule.consoleSyncAdapter}if(memoryLeaksModule?.memoryLeaksSyncAdapter)r["memory-leaks"]=memoryLeaksModule.memoryLeaksSyncAdapter;if(clockModule?.clockSyncAdapter){r.clock=clockModule.clockSyncAdapter}if(permissionsModule?.permissionsSyncAdapter){r.permissions=permissionsModule.permissionsSyncAdapter}if(bugLinksModule?.bugLinksSyncAdapter){r["bug-links"]=bugLinksModule.bugLinksSyncAdapter}if(otaModule?.otaInspectorSyncAdapter)r["ota-update-inspector"]=otaModule.otaInspectorSyncAdapter;if(lifecycleModule?.lifecycleSyncAdapter){r.lifecycle=lifecycleModule.lifecycleSyncAdapter}if(locationModule?.locationSyncAdapter){r.location=locationModule.locationSyncAdapter}if(notificationsModule?.notificationSyncAdapter){r["push-notifications"]=notificationsModule.notificationSyncAdapter}if(sentryModule?.sentrySyncAdapter){r.sentry=sentryModule.sentrySyncAdapter}try{const t=require("@buoy-gg/time-machine");if(t?.timeMachineSyncAdapter){r["time-machine"]=t.timeMachineSyncAdapter}}catch(t){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/time-machine",t)}try{const t=require("@buoy-gg/scenarios");if(t?.scenariosSyncAdapter){r.scenarios=t.scenariosSyncAdapter}}catch(t){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/scenarios",t)}try{const t=require("@buoy-gg/ask-buoy");if(t?.askBuoySyncAdapter){r["ask-buoy"]=t.askBuoySyncAdapter}}catch(t){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/ask-buoy",t)}if(envModule?.createEnvSyncAdapter){r.env=envModule.createEnvSyncAdapter(o??[])}if(highlightUpdatesModule?.highlightUpdatesSyncAdapter){r["highlight-updates"]=highlightUpdatesModule.highlightUpdatesSyncAdapter}if(debugBordersModule?.debugBordersSyncAdapter){r["debug-borders"]=debugBordersModule.debugBordersSyncAdapter}if(impersonateModule?.impersonateSyncAdapter){r.impersonate=impersonateModule.impersonateSyncAdapter}if(perfMonitorModule?.perfMonitorSyncAdapter){r["perf-monitor"]=perfMonitorModule.perfMonitorSyncAdapter}if(jsTopModule?.jsTopSyncAdapter){r["js-top"]=jsTopModule.jsTopSyncAdapter}if(imagesModule?.imagesSyncAdapter){r.images=imagesModule.imagesSyncAdapter}if(assetsModule?.assetsSyncAdapter){r.assets=assetsModule.assetsSyncAdapter}if(tvRemoteModule?.tvRemoteSyncAdapter){r["tv-remote"]=tvRemoteModule.tvRemoteSyncAdapter}if(focusInspectorModule?.focusInspectorSyncAdapter){r["focus-inspector"]=focusInspectorModule.focusInspectorSyncAdapter}for(const t of n??[]){if(t?.sync){r[`custom:${t.id}`]=t.sync}}return r},[e,o,n])}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.resolveBackTarget=resolveBackTarget;function resolveBackTarget(e,r){if(r)return{kind:"dial"};for(let t=e.length-1;t>=0;t--){const n=e[t];if(n.launchMode!=="toggle-only"&&!n.minimized){return{kind:"tool",instanceId:n.instanceId}}}const i=e[e.length-1];return i?{kind:"tool",instanceId:i.instanceId}:null}
@@ -1 +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])}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BUOY_DIAL_BACK_PRIORITY=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;const BUOY_DIAL_BACK_PRIORITY=exports.BUOY_DIAL_BACK_PRIORITY=99.6;let holders=0;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,i,u=BUOY_BACK_PRIORITY){const n=(0,_react.useRef)(i);n.current=i;(0,_react.useEffect)(()=>{if(!e||(0,_license.capacitorPlatform)()!=="android")return;const a=globalThis;holders+=1;a.__BUOY_HOLDS_BACK__=true;const s=()=>{holders=Math.max(0,holders-1);a.__BUOY_HOLDS_BACK__=holders>0};let o;if(ionicHandlesBack()){const t=r=>{r.detail?.register?.(u,()=>{n.current()})};document.addEventListener("ionBackButton",t);o=()=>document.removeEventListener("ionBackButton",t)}else{const t=(0,_license.capacitorPlugin)("App");if(!t?.addListener){s();return}let r=false;let c=null;void Promise.resolve(t.addListener("backButton",()=>n.current())).then(B=>{if(r)void B.remove();else c=B}).catch(()=>{});o=()=>{r=true;if(c)void c.remove()}}return()=>{o();s()}},[e,u])}