@buoy-gg/core 7.0.76 → 7.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/buoy.js +10 -9
- package/bundlers/vite.d.ts +2 -0
- package/bundlers/vite.mjs +3 -3
- package/lib/commonjs/Buoy.js +1 -1
- package/lib/commonjs/auto.web.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
- package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/Buoy.js +1 -1
- package/lib/module/auto.web.js +1 -1
- package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
- package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
- package/lib/module/floatingMenu/autoExternalSync.js +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/Buoy.d.ts +15 -0
- package/lib/typescript/commonjs/auto.web.d.ts +8 -2
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts +5 -3
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/Buoy.d.ts +15 -0
- package/lib/typescript/module/auto.web.d.ts +8 -2
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts +5 -3
- package/lib/typescript/module/version.d.ts +1 -1
- package/lib/web/auto.mjs +1 -1
- package/lib/web/chunks/{FloatingDevTools.web-NMBTDON7.mjs → FloatingDevTools.web-IIOOVSUC.mjs} +1 -1
- package/lib/web/chunks/chunk-LAJ3HKAL.mjs +10 -0
- package/lib/web/index.mjs +1 -1
- package/package.json +5 -5
- package/lib/web/chunks/FloatingDevTools.web-FENSHQGD.mjs +0 -1
- package/lib/web/chunks/chunk-2N5IPIMV.mjs +0 -10
- package/lib/web/chunks/chunk-LU4GPZ5L.mjs +0 -10
- package/lib/web/chunks/chunk-RBPDZUHO.mjs +0 -1
- package/lib/web/chunks/chunk-Z6I7ZD34.mjs +0 -1
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ npm install @buoy-gg/core @buoy-gg/network
|
|
|
22
22
|
npx --package=@buoy-gg/core buoy login
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Put `<FloatingDevTools />` inside your app's providers. The login command signs you in. It writes a dev token for dev builds. On Expo, the token goes in `.env.development.local`. Buoy reads it by itself. React Native CLI apps get `BUOY_KEY` in `.env.local`. Pass it to `Buoy.init` with your own env setup. A key from buoy.gg still works as a backup.
|
|
26
26
|
|
|
27
27
|
The [Quick start](https://buoy.gg/buoy/latest/docs/quick-start) walks through the full setup, and [every tool](https://buoy.gg/buoy/latest/docs/overview) has its own guide.
|
|
28
28
|
|
package/bin/buoy.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";const http=require("node:http");const fs=require("node:fs");const path=require("node:path");const crypto=require("node:crypto");const{spawn}=require("node:child_process");const SITE=process.env.BUOY_SITE_URL||"https://buoy.gg";const LOGIN_TIMEOUT_MS=5*60*1e3;const ESC="\x1B[";const color=e=>
|
|
2
|
+
"use strict";const http=require("node:http");const fs=require("node:fs");const path=require("node:path");const crypto=require("node:crypto");const{spawn,spawnSync}=require("node:child_process");const SITE=process.env.BUOY_SITE_URL||"https://buoy.gg";const LOGIN_TIMEOUT_MS=5*60*1e3;const ESC="\x1B[";const color=e=>t=>`${ESC}${e}m${t}${ESC}0m`;const cyan=color(36);const green=color(32);const red=color(31);const dim=color(2);const bold=color(1);const yellow=color(33);function log(e){process.stdout.write(`${e}
|
|
3
3
|
`)}function fail(e){process.stderr.write(`${red("x")} ${e}
|
|
4
|
-
`);process.exit(1)}function openBrowser(e){const
|
|
5
|
-
`}fs.writeFileSync(
|
|
4
|
+
`);process.exit(1)}function openBrowser(e){const t=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open";const o=process.platform==="win32"?["/c","start","",e]:[e];try{const i=spawn(t,o,{stdio:"ignore",detached:true});i.on("error",()=>{});i.unref()}catch{}}function listsDependency(e,t){try{const o=JSON.parse(fs.readFileSync(path.join(e,"package.json"),"utf8"));return Boolean(Object.assign({},o.dependencies,o.devDependencies)[t])}catch{return false}}function viteKeySnippet(e){if(listsDependency(e,"@buoy-gg/solid")){return{code:" <Buoy />",note:"Buoy for Solid reads VITE_BUOY_KEY for you. Reload the app."}}if(listsDependency(e,"@buoy-gg/vue")){if(listsDependency(e,"nuxt")){return{code:" modules: ['@buoy-gg/vue/nuxt'],",note:"Buoy for Nuxt reads VITE_BUOY_KEY for you. Restart the dev server."}}return{code:" createApp(App).use(buoy).mount('#app')",note:"Buoy for Vue reads VITE_BUOY_KEY for you. Restart the dev server."}}return{code:" <FloatingDevTools modules={modules} licenseKey={import.meta.env.VITE_BUOY_KEY} />",note:"Keep your existing tool modules and providers, then reload the web app."}}function detectEnvVarName(e){let t=null;try{const o=path.join(e,"package.json");if(fs.existsSync(o)){const n=JSON.parse(fs.readFileSync(o,"utf8"));const s=Object.assign({},n.dependencies,n.devDependencies);if(s.expo)return"EXPO_PUBLIC_BUOY_KEY";if(s.nuxt)return"VITE_BUOY_KEY";if(s.next)t="NEXT_PUBLIC_BUOY_KEY";else if(s.vite)t="VITE_BUOY_KEY"}if(fs.existsSync(path.join(e,"app.config.js"))||fs.existsSync(path.join(e,"app.config.ts"))){return"EXPO_PUBLIC_BUOY_KEY"}const i=path.join(e,"app.json");if(fs.existsSync(i)){const n=JSON.parse(fs.readFileSync(i,"utf8"));if(n&&n.expo)return"EXPO_PUBLIC_BUOY_KEY"}}catch{}return t||"BUOY_KEY"}function isMauiProject(e){try{return fs.readdirSync(e).filter(t=>t.endsWith(".csproj")).some(t=>/<UseMaui>\s*true\s*<\/UseMaui>/i.test(fs.readFileSync(path.join(e,t),"utf8")))}catch{return false}}function nativeProject(e){const t=o=>fs.existsSync(path.join(e,o));if(t("package.json"))return null;try{if(t("pubspec.yaml")&&/^\s*flutter\s*:/m.test(fs.readFileSync(path.join(e,"pubspec.yaml"),"utf8")))return"flutter";if(t("settings.gradle.kts")||t("settings.gradle"))return"android";if(t("Package.swift")||t("project.yml")||t("Project.swift")||fs.readdirSync(e).some(o=>/\.(xcodeproj|xcworkspace)$/.test(o)))return"swift"}catch{}return null}function writeProperty(e,t,o,i="local.properties"){const n=path.join(e,i);let s="";try{s=fs.readFileSync(n,"utf8")}catch{}const c=`${t}=${o}`;const r=new RegExp("^"+t.replace(/\./g,"\\.")+"\\s*[=:].*$","m");if(r.test(s)){s=s.replace(r,()=>c)}else{if(s&&!s.endsWith("\n"))s+="\n";s+=`${c}
|
|
5
|
+
`}fs.writeFileSync(n,s,{mode:384});return n}const ANGULAR_KEY_HEADER="// Buoy key file. Do not commit this file.\n";function angularKeyFile(e,t){const o=path.join(e,"angular.json");if(!fs.existsSync(o))return null;const i=fs.readFileSync(o,"utf8").replace(/"(?:\\.|[^"\\])*"|\/\*[\s\S]*?\*\/|\/\/[^\r\n]*/g,l=>l.startsWith('"')?l:" ").replace(/"(?:\\.|[^"\\])*"|,(\s*[}\]])/g,(l,f)=>f||l);const n=JSON.parse(i);const s=Object.entries(n.projects||{}).filter(([,l])=>l.projectType==="application");const c=t||n.defaultProject;const r=c?n.projects[c]:s.length===1?s[0][1]:null;if(!r||r.projectType!=="application")throw new Error("Pass --project <name> to pick one Angular app.");const a=path.resolve(e,r.sourceRoot||path.join(r.root||"","src"),"environments/buoy.ts");const u=path.relative(e,a);if(u.startsWith("..")||path.isAbsolute(u))throw new Error("The app source root must be in this workspace.");if(fs.existsSync(a)&&!fs.readFileSync(a,"utf8").startsWith(ANGULAR_KEY_HEADER)){throw new Error("The Buoy key file has your code in it. Move it before you run login.")}return u}function writeAngularKey(e,t,o,i){const n=angularKeyFile(e,i);if(!n)return null;const s=path.join(e,n);const c=JSON.stringify(t);const r=ANGULAR_KEY_HEADER+(o?'declare const ngDevMode: boolean | undefined;\nexport const BUOY_KEY = (typeof ngDevMode === "undefined" || ngDevMode) ? '+c+' : "";\n':"export const BUOY_KEY = "+c+";\n");fs.mkdirSync(path.dirname(s),{recursive:true});fs.writeFileSync(s,r,{mode:384});if(!fs.existsSync(path.join(e,".gitignore")))fs.writeFileSync(path.join(e,".gitignore"),"",{flag:"wx"});ensureGitignored(e,n);return n}function envFileFor(e,t,o=false){if(!o&&!["EXPO_PUBLIC_BUOY_KEY","VITE_BUOY_KEY","NEXT_PUBLIC_BUOY_KEY"].includes(e))return".env.local";return t==="pro"||t==="business"?".env.local":".env.development.local"}function removeEnvVar(e,t,o){const i=path.join(e,o);let n;try{n=fs.readFileSync(i,"utf8")}catch{return false}const s=new RegExp("^"+t+"=.*\\n?","m");if(!s.test(n))return false;fs.writeFileSync(i,n.replace(s,""),{mode:384});return true}function writeEnvVar(e,t,o,i=".env.local"){const n=path.join(e,i);let s="";try{s=fs.readFileSync(n,"utf8")}catch{}const c=`${t}=${o}`;const r=new RegExp("^"+t+"=.*$","m");if(r.test(s)){s=s.replace(r,()=>c)}else{if(s&&!s.endsWith("\n"))s+="\n";s+=`${c}
|
|
6
|
+
`}fs.writeFileSync(n,s,{mode:384});return n}function ensureGitignored(e,t=".env.local"){const o=path.join(e,".gitignore");let i="";try{i=fs.readFileSync(o,"utf8")}catch{return false}const n=new RegExp("^/?"+t.replace(/\./g,"\\.")+"$","m");if(n.test(i)||t.startsWith(".env")&&/^\.env\*$|^\.env\*\.local$/m.test(i)||t.endsWith(".local")&&/^\*\.local$/m.test(i))return false;if(i&&!i.endsWith("\n"))i+="\n";i+=`
|
|
6
7
|
# Buoy license key (per developer - do not commit)
|
|
7
|
-
${
|
|
8
|
-
`;fs.writeFileSync(
|
|
9
|
-
${
|
|
10
|
-
No env file was changed.`);return}const r=
|
|
8
|
+
${t}
|
|
9
|
+
`;fs.writeFileSync(o,i);return true}function wouldGitCommit(e,t){try{const o=spawnSync("git",["check-ignore","-q","--",t],{cwd:e,stdio:"ignore",timeout:5e3});return o.status===1}catch{return false}}const KEY_NAMES=["BUOY_LICENSE_KEY","BUOY_KEY","EXPO_PUBLIC_BUOY_KEY","VITE_BUOY_KEY","NEXT_PUBLIC_BUOY_KEY","REACT_APP_BUOY_KEY"];function findProjectKey(e,t=process.env){for(const o of KEY_NAMES){if(t[o]!==void 0){const i=t[o].trim();return i?{name:o,source:"environment",value:i}:null}}for(const o of[".env.development.local",".env.local",".env"]){let i;try{i=fs.readFileSync(path.join(e,o),"utf8")}catch{continue}const n=new Map;for(const s of i.split(/\r?\n/)){const c=s.match(/^\s*(?:export\s+)?([A-Z_][A-Z_0-9]*)\s*=\s*(.*)$/);if(!c)continue;const r=c[2].trim();const a=r.match(/^(['"])(.*?)\1\s*(?:#.*)?$/);n.set(c[1],a?a[2]:r.split("#")[0].trim())}for(const s of KEY_NAMES){if(!n.has(s))continue;const c=n.get(s).trim();return c?{name:s,source:o,value:c}:null}}return null}function awaitKeyFromBrowser(){return new Promise((e,t)=>{const o=crypto.randomBytes(16).toString("hex");const i=http.createServer((n,s)=>{if(n.headers.origin===SITE){s.setHeader("Access-Control-Allow-Origin",SITE);s.setHeader("Access-Control-Allow-Headers","Content-Type");s.setHeader("Access-Control-Allow-Methods","POST, OPTIONS");s.setHeader("Access-Control-Allow-Private-Network","true")}if(n.method==="OPTIONS"){s.writeHead(204).end();return}if(n.method!=="POST"){s.writeHead(405).end();return}let c="";n.on("data",r=>{c+=r;if(c.length>4096)n.destroy()});n.on("end",()=>{let r={};try{r=JSON.parse(c)}catch{}if(r.state!==o||typeof r.key!=="string"||!r.key){s.writeHead(400).end();return}s.writeHead(200,{"Content-Type":"application/json"});s.end('{"ok":true}');i.close();e({key:r.key.trim(),tier:r.tier||"free",email:r.email||""})})});i.on("error",t);i.listen(0,"127.0.0.1",()=>{const{port:n}=i.address();const s=`${SITE}/cli/login?port=${n}&state=${o}`;log("");log(` Opening ${cyan(s)}`);log(dim(" If your browser did not open, paste that URL into a browser on this computer."));log("");log(dim(" Waiting for you to finish signing in..."));openBrowser(s)});setTimeout(()=>{i.close();t(new Error("Timed out waiting for the browser (5 minutes)."))},LOGIN_TIMEOUT_MS).unref()})}function loadSessionClient(){try{const e=require("@buoy-gg/license/headless");if(typeof e.createNodeSession!=="function")return null;return e}catch{return null}}function cliSession(e){return e.createNodeSession({audience:e.CLI_AUDIENCE,signinOrigin:SITE,openBrowser:t=>{log(`${cyan(">")} Opening ${dim(t.split("?")[0])} to sign in...`);log(dim(` If nothing opens, visit:
|
|
10
|
+
${t}`));openBrowser(t)}})}async function checkSignIn(e){if(typeof e.checkAvailability==="function")return e.checkAvailability();return await e.isAvailable()?{state:"enabled"}:{state:"unknown"}}async function signInAndGetDevToken(e=loadSessionClient()){if(!e)return{fallback:{state:"unsupported",computerSignedIn:false}};const t=cliSession(e);const o=await checkSignIn(t);if(o.state!=="enabled"){const n=await t.load().catch(()=>null);return{fallback:{...o,computerSignedIn:Boolean(n&&n.state==="active")}}}await t.signIn();const i=await t.devToken();if(!i.ok){throw new Error(`This computer is signed in to Buoy, but no dev token was made: ${i.detail}`)}return{result:{key:i.token,tier:i.tier,email:"",devToken:true}}}function fallbackWarning(e){if(!e)return null;if(e.state==="unknown"){return[`${yellow("!")} This computer could not be signed in. Node may not reach ${SITE}.`," A VPN, proxy or firewall may block it outside your browser."," Update @buoy-gg/license to see the exact reason."]}if(e.state!=="unreachable")return null;const t=[`${yellow("!")} Node could not reach ${SITE} (${e.detail}).`," A VPN, proxy or firewall may block it outside your browser."," The browser can still sign in this project, but not this computer."];if(e.hint)t.push(` ${e.hint}`);return t}function projectOnlyNotes(e,t){const o=e&&e.computerSignedIn?[" This login signed in only this project."," This computer keeps its earlier sign-in, which the MCP uses."," That may be a different account. Check with `npx --package=@buoy-gg/core buoy whoami`."]:[" Only this project is signed in. This computer is not,"," so `npx --package=@buoy-gg/core buoy whoami` will say so."];if(t.endsWith(".properties")){if(!(e&&e.computerSignedIn)){o.push(` The MCP can't read ${t}. To use it, sign in this computer:`);o.push(" run npx --package=@buoy-gg/core buoy login again once Node can reach buoy.gg.")}return o}if(!(e&&e.computerSignedIn)){o.push(` The MCP reads the key from ${t} when it runs in this folder.`)}if(e&&(e.state==="unreachable"||e.state==="unknown")){o.push(` The MCP checks keys with ${SITE} too, so it needs that to work.`)}return o}async function login(){const e=process.cwd();const t=process.argv.indexOf("--project");const o=t<0?void 0:process.argv[t+1];if(t>=0&&(!o||o.startsWith("--")))throw new Error("Pass a name after --project.");const i=angularKeyFile(e,o);let n;let s=null;try{const d=await signInAndGetDevToken();if(d.result){n=d.result}else{s=d.fallback;const y=fallbackWarning(s);if(y){log("");y.forEach(v=>log(v))}n=await awaitKeyFromBrowser()}}catch(d){fail(`${d.message}
|
|
11
|
+
No env file was changed.`);return}const c=isMauiProject(e);const r=i||c?null:nativeProject(e);const a=i?"BUOY_KEY":r==="swift"?"BUOY_LICENSE_KEY":r==="android"?"buoy.key":detectEnvVarName(e);const u=r==="android"?"local.properties":envFileFor(a,n.devToken?"free":n.tier,c||!!i);const l=i?writeAngularKey(e,n.key,!!n.devToken||!["pro","business"].includes(n.tier),o):null;const f=r==="android"?writeProperty(e,a,n.key,u):writeEnvVar(e,a,n.key,u);const g=u===".env.local"?".env.development.local":".env.local";const h=r==="android"?false:removeEnvVar(e,a,g);const m=ensureGitignored(e,u);const p=path.relative(e,f)||u;log("");log(`${green("OK")} Signed in${n.email?" as "+bold(n.email):""} - ${bold(n.tier)} tier`);log(` Wrote ${cyan(a)} to ${cyan(p)}`);if(l)log(` Wrote the Angular key to ${cyan(l)}. Git ignores this file.`);if(n.devToken){log(dim(" It is a dev token: it works in dev builds and sims for 30 days. Then run npx --package=@buoy-gg/core buoy login again."));log(dim(" This computer is signed in to Buoy too. The MCP uses it. Sign out: npx --package=@buoy-gg/core buoy logout"))}else{projectOnlyNotes(s,p).forEach(d=>log(dim(d)))}if(h)log(dim(` Removed the old ${a} line from ${g}`));if(u===".env.development.local"){log(dim(" This file is loaded in development, keeping the key out of production builds."))}if(m)log(dim(` Added ${u} to .gitignore`));if(wouldGitCommit(e,u))log(` ${yellow("!")} Git would commit ${u}. Add it to your .gitignore.`);log("");log(" Use it in your app:");log("");if(l){log(dim(` Import BUOY_KEY from ${l.replace(/\.ts$/,"")}.`));log(dim(" Pass it as licenseKey in provideBuoy. Keep the dev guard."));log(dim(" Reload the app to use the key."))}else if(a==="VITE_BUOY_KEY"){const d=viteKeySnippet(e);log(cyan(d.code));log("");log(dim(` ${d.note}`))}else if(a==="NEXT_PUBLIC_BUOY_KEY"){log(dim(" Buoy reads NEXT_PUBLIC_BUOY_KEY for you. Restart next dev so it picks up the new variable."))}else if(c){log(dim(" Buoy for .NET MAUI reads BUOY_KEY from this file when the app builds."));log(dim(" Rebuild and run your app. Nothing to add to MauiProgram.cs."))}else if(r==="flutter"){log(cyan(` flutter run --dart-define-from-file=${p}`));log("");log(dim(" BuoyDevTools reads BUOY_KEY for you. Add the same flag to your IDE run setup."))}else if(r==="android"){log(dim(" Pass buoy.key to the app as BuildConfig.BUOY_LICENSE_KEY."));log(dim(" The Android quick start has the Gradle lines: https://buoy.gg/buoy/latest/docs/android/quick-start"))}else if(r==="swift"){log(dim(" In Xcode, open Product > Scheme > Edit Scheme > Run > Arguments."));log(dim(` Add BUOY_LICENSE_KEY under Environment Variables. Its value is in ${p}.`));log(dim(' Buoy reads it for you. Leave "Shared" off for that scheme so the key stays out of git.'))}else if(a==="EXPO_PUBLIC_BUOY_KEY"){log(dim(" Buoy reads EXPO_PUBLIC_BUOY_KEY for you in dev builds. Run npx expo start --clear."));if(n.devToken){log(dim(" A TestFlight or store build signs in with a code: <FloatingDevTools signIn />."));log(dim(" The sign-in guide: https://buoy.gg/buoy/latest/docs/sign-in"))}else{log(dim(" For a TestFlight or store build, pass it in yourself:"));log(cyan(" Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });"))}}else{log(cyan(` Buoy.init({ licenseKey: ${a} });`));log("");log(dim(" Bare React Native does not load .env.local automatically; wire your existing env loader."))}log("")}async function logout(){const e=loadSessionClient();if(!e)fail("This version of Buoy cannot sign in or out. Update @buoy-gg/core.");const t=cliSession(e);const o=await t.load();await t.signOut();log(o.state==="active"?`${green("OK")} Signed out of Buoy on this computer.`:"This computer was not signed in.");log(dim(" Keys in your env files are not changed."))}async function whoami(e=process.cwd(),t=loadSessionClient()){if(!t)fail("This version of Buoy cannot sign in. Update @buoy-gg/core.");const o=await cliSession(t).load();const i=findProjectKey(e);const n=i&&typeof t.isDevToken==="function"&&t.isDevToken(i.value)?"a dev token":"a key";const s=i&&(i.source==="environment"?"your shell environment":i.source);const c=n==="a dev token"&&typeof t.checkDevToken==="function"?t.checkDevToken(i.value):null;const r=c&&!c.ok?c.message:null;if(o.state==="active"){log(`${green("Signed in")} - ${bold(o.claims.tier)} plan${o.grace?dim(" (offline, using the grace period)"):""}`);if(i)log(dim(` This project has ${n} in ${s} (${i.name}).`));if(r)log(` ${yellow("!")} ${r}`);return}if(!i){log("Not signed in. Run: npx --package=@buoy-gg/core buoy login");return}log("Not signed in on this computer.");log(`${green("This project")} has ${n} in ${cyan(s)} (${i.name}).`);if(r)log(` ${yellow("!")} ${r}`);log(dim(" Your app uses that key. The MCP can too, when it runs in this folder."));log(dim(" To sign in this computer as well, run npx --package=@buoy-gg/core buoy login when Node can reach buoy.gg."))}function help(){log(`
|
|
11
12
|
${bold("buoy")} - React Buoy CLI
|
|
12
13
|
|
|
13
14
|
${bold("Usage")}
|
|
@@ -36,5 +37,5 @@ ${n}
|
|
|
36
37
|
This command does not install tools or verify a Desktop connection.
|
|
37
38
|
|
|
38
39
|
Docs: ${SITE}/buoy/latest/docs/installation
|
|
39
|
-
`)}if(require.main===module){const e=process.argv[2];if(e==="login"){login().catch(
|
|
40
|
-
Run \`npx buoy help\` to see what is available.`)}}module.exports={detectEnvVarName,viteKeySnippet,angularKeyFile,writeAngularKey,envFileFor,isMauiProject,writeEnvVar,removeEnvVar,ensureGitignored,awaitKeyFromBrowser,signInAndGetDevToken,fallbackWarning,projectOnlyNotes,findProjectKey,whoami,KEY_NAMES};
|
|
40
|
+
`)}if(require.main===module){const e=process.argv[2];if(e==="login"){login().catch(t=>fail(t.message))}else if(e==="logout"){logout().catch(t=>fail(t.message))}else if(e==="whoami"){whoami().catch(t=>fail(t.message))}else if(!e||e==="help"||e==="--help"||e==="-h"){help()}else{fail(`Unknown command: ${e}
|
|
41
|
+
Run \`npx --package=@buoy-gg/core buoy help\` to see what is available.`)}}module.exports={detectEnvVarName,viteKeySnippet,angularKeyFile,writeAngularKey,envFileFor,isMauiProject,nativeProject,writeProperty,writeEnvVar,wouldGitCommit,removeEnvVar,ensureGitignored,awaitKeyFromBrowser,signInAndGetDevToken,fallbackWarning,projectOnlyNotes,findProjectKey,whoami,KEY_NAMES};
|
package/bundlers/vite.d.ts
CHANGED
|
@@ -53,3 +53,5 @@ export declare function frameworkHost(root: string): { name: 'solid' | 'vue'; pk
|
|
|
53
53
|
export declare function disabledEntry(root: string, source: string): string | undefined;
|
|
54
54
|
export declare function solidLinksModule(root: string, found: { id: string; key: string }[]): string;
|
|
55
55
|
export declare function assetListUrl(base: string, filename: string, command: 'serve' | 'build'): string | undefined;
|
|
56
|
+
/** True when react-native-web, which Buoy's menu draws with, can't be found. */
|
|
57
|
+
export declare function missingReactNativeWeb(from?: string | URL): boolean;
|
package/bundlers/vite.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{existsSync as x,readFileSync as
|
|
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?.(() => {});
|
|
2
2
|
`:"";return`${n.join("\n")}
|
|
3
3
|
${r}export const installedTools = { ${o.join(", ")} };
|
|
4
4
|
export const installedToolsFound = true;
|
|
5
|
-
`}function
|
|
6
|
-
${
|
|
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;
|
package/lib/commonjs/Buoy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Buoy=void 0;exports.applyDefaultLicenseKey=applyDefaultLicenseKey;exports.default=void 0;exports.defaultLicenseKey=defaultLicenseKey;exports.isTelemetryEnabled=isTelemetryEnabled;var _license=require("@buoy-gg/license");let telemetryEnabled=true;function isTelemetryEnabled(){return telemetryEnabled}let initKeyGiven=false;let defaultKeyApplied=false;function defaultLicenseKey(){if(initKeyGiven)return void 0;try{const e=process.env.EXPO_PUBLIC_BUOY_KEY;if(e)return e}catch{}try{const e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}return void 0}function applyDefaultLicenseKey(){if(defaultKeyApplied)return;defaultKeyApplied=true;const e=defaultLicenseKey();if(e)void _license.LicenseManager.configure(e).catch(()=>{})}const Buoy=exports.Buoy={init(e){if(e.telemetry===false)telemetryEnabled=false;if(e.licenseKey!==void 0)initKeyGiven=true;void _license.LicenseManager.configure(e.licenseKey).catch(t=>{console.warn("[Buoy] License initialization failed:",t)})},async initAsync(e){if(e.telemetry===false)telemetryEnabled=false;if(e.licenseKey!==void 0)initKeyGiven=true;return _license.LicenseManager.configure(e.licenseKey)},isPro(){return _license.LicenseManager.isPro()},getState(){return _license.LicenseManager.getState()},async forceReregister(){await _license.LicenseManager.forceReregister()}};var _default=exports.default=Buoy;
|
package/lib/commonjs/auto.web.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BuoyDevTools=BuoyDevTools;exports.shouldShowBuoy=shouldShowBuoy;var _react=require("react");function _interopRequireWildcard(t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BuoyDevTools=BuoyDevTools;exports.bundlerKey=bundlerKey;exports.shouldShowBuoy=shouldShowBuoy;var _react=require("react");function _interopRequireWildcard(t,r){if("function"==typeof WeakMap)var s=new WeakMap,a=new WeakMap;return(_interopRequireWildcard=function(e,l){if(!l&&e&&e.__esModule)return e;var n,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(n=l?a:s){if(n.has(e))return n.get(e);n.set(e,u)}for(const o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((i=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(i.get||i.set)?n(u,o,i):u[o]=e[o]);return u})(t,r)}function shouldShowBuoy(){if(typeof window==="undefined")return false;const t=window.Capacitor;let r=false;try{r=t?.isNativePlatform?.()===true}catch{r=false}if(r)return t?.DEBUG===true;return typeof __DEV__!=="undefined"?Boolean(__DEV__):process.env.NODE_ENV!=="production"}function bundlerKey(){try{const t=import.meta.env.VITE_BUOY_KEY;if(t)return t}catch{}try{const t=process.env.NEXT_PUBLIC_BUOY_KEY;if(t)return t}catch{}return void 0}let host;function loadHost(){host??=(0,_react.lazy)(()=>Promise.resolve().then(()=>_interopRequireWildcard(require("./floatingMenu/FloatingDevTools.web"))).then(t=>({default:t.FloatingDevTools})));return host}function BuoyDevTools({enabled:t,...r}){const[s,a]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{a(t??shouldShowBuoy())},[t]);if(!s)return null;const e=r.licenseKey??bundlerKey();return(0,_react.createElement)(_react.Suspense,{fallback:null},(0,_react.createElement)(loadHost(),{...r,licenseKey:e}))}
|
|
@@ -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,x){if(!x&&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=x?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:x=false,defaultFloatingTools:l,defaultDialTools:u,requireLicense:g,licenseKey:i,zustandStores:O,environment:U,externalSync:m=true,headless:T=false,signIn:b,...D})=>{const G=U??(0,_sharedUi.normalizeEnvironment)(process.env.NODE_ENV??"dev");const{isLicensed:j}=(0,_license.useProAccess)();const{licenseKey:_,isInitialized:k,tier:q,access:c,allowedTools:h}=(0,_license.useLicense)();const J=i===void 0||(0,_license.sameLicenseKey)(i,_);const E=J&&c.status==="admitted";(0,_react.useEffect)(()=>{if(!k||c.status==="initializing")return;void(0,_installPing.sendInstallPing)({tier:c.status==="admitted"?q:"locked",enabled:(0,_Buoy.isTelemetryEnabled)()})},[k,c.status,q]);const M=b?resolveSignInAppId(b):null;(0,_react.useEffect)(()=>{if(!M)return;const e=licenseModule.SessionManager;if(!e)return;e.configure({audience:`app:${M}`});void e.load().catch(()=>{})},[M]);(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(i).catch(()=>{})},[i]);(0,_react.useEffect)(()=>{if(E)(0,_sharedUi.startSettingsSync)()},[E]);(0,_react.useEffect)(()=>{if(!O||c.status==="locked")return;try{const{watchStores:e}=require("@buoy-gg/zustand");return e(O)}catch(e){(0,_optionalRequire.reportOptionalRequireError)("@buoy-gg/zustand",e)}},[O,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,h),[p,h]);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 X=(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 C=typeof __DEV__!=="undefined"&&__DEV__;if(!C&&!j){return b&&!T?(0,_jsxRuntime.jsx)(_BuoySignIn.BuoySignIn,{needsPlan:true}):null}const V=(0,_externalSyncGate.shouldMountExternalSync)({isDevelopment:C,isLicensed:j,externalSync:m,isAvailable:(0,_autoExternalSync.isExternalSyncAvailable)()});const I=(0,_externalSyncGate.externalSyncOptions)(m);if(!C&&I?.enableInRelease){warnReleaseTransportOnce((0,_externalSyncGate.releaseTransportProblem)(I.socketURL,I))}const W=(0,_jsxRuntime.jsx)(_autoExternalSync.ToolRegistryPublisher,{requiredEnvVars:n,customApps:S});if(!E){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,{})]}),!T&&(b?(0,_jsxRuntime.jsx)(_BuoySignIn.BuoySignIn,{}):(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{}))]})}if(T){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)(m),requiredEnvVars:n,isPro:j,tier:q,licenseKey:_,customApps:S})]})}return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:l,defaultDialTools:Q,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:x,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:X,children:[(0,_jsxRuntime.jsx)(_FloatingMenu.FloatingMenu,{...D,apps:$,emptyNote:h?_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:h??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)(m),requiredEnvVars:n,isPro:j,tier:q,licenseKey:_,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,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 +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 _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,i){if("function"==typeof WeakMap)var s=new WeakMap,l=new WeakMap;return(_interopRequireWildcard=function(t,r){if(!r&&t&&t.__esModule)return t;var a,c,p={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return p;if(a=r?l:s){if(a.has(t))return a.get(t);a.set(t,p)}for(const d in t)"default"!==d&&{}.hasOwnProperty.call(t,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,d))&&(c.get||c.set)?a(p,d,c):p[d]=t[d]);return p})(n,i)}const EMPTY_MODULES={};const MENU_TOOLTIP_KEY="@react_buoy_floating_menu_tooltip_shown";const webSettingsStorage=_sharedUi.persistentStorage;function MenuLauncherIcon({size:n=14,color:i="#20C997"}){const s=Math.max(2,n/4);const l=Math.max(1,n/16);return(0,_jsxRuntime.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${s}px)`,gap:l,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((t,r)=>(0,_jsxRuntime.jsx)("div",{style:{width:s,height:s,borderRadius:s/2,backgroundColor:i}},r))})}function AdmittedFloatingDevTools(n){const{defaultFloatingTools:i,defaultDialTools:s,disableHints:l=false,children:t}=n;const r=(0,_react.useMemo)(()=>s?(0,_defaultConfig.validateDialConfig)(s):s,[s]);return(0,_jsxRuntime.jsx)(_DefaultConfigContext.DefaultConfigProvider,{defaultFloatingTools:i,defaultDialTools:r,children:(0,_jsxRuntime.jsx)(_sharedUi.HintsProvider,{disableHints:l,children:(0,_jsxRuntime.jsxs)(_DevToolsVisibilityContext.DevToolsVisibilityProvider,{children:[(0,_jsxRuntime.jsx)(_AppHostWeb.AppHostProvider,{children:(0,_jsxRuntime.jsx)(FloatingDevToolsInner,{...n})}),t]})})})}const STARTUP_ROOTS=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function StartupCapture({modules:n=EMPTY_MODULES}){return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:Object.entries(n).flatMap(([i,s])=>STARTUP_ROOTS.map(l=>{const t=s[l];return t?(0,_jsxRuntime.jsx)(t,{},`${i}:${l}`):null}))})}function WebToolOpenerBridge(){const{openApps:n,restore:i}=(0,_AppHostWeb.useAppHost)();(0,_react.useEffect)(()=>(0,_sharedUi.registerToolOpener)(s=>{const l=n.find(t=>t.id===s);if(!l)return false;i(l.instanceId);return true}),[n,i]);return null}function defaultEnvironment(){const n=(0,_license.capacitorDebug)();const i=n===null?process.env.NODE_ENV:n?"development":"production";return(0,_sharedUi.normalizeEnvironment)(i??"dev")}function configOverrides(n,i,s,l){const t=x=>Object.entries(n).find(([v])=>v.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===x)?.[1];const r=[];const a=t("env");if(i?.length&&a?.createEnvTool&&a.createEnvVarConfig){r.push((0,_createWebTool.createWebTool)(a.createEnvTool({requiredEnvVars:a.createEnvVarConfig(i)})))}const c=t("storage");if(s?.length&&c?.createStorageTool){r.push((0,_createWebTool.createWebTool)(c.createStorageTool({requiredStorageKeys:s})))}const p=t("ask-buoy");const d=l==="hosted"?p?.hostedAskBuoy?.():l;if(d&&p?.createAskBuoyTool)r.push((0,_createWebTool.createWebTool)(p.createAskBuoyTool(d)));return r}function FloatingDevToolsInner({environment:n,userRole:i="admin",availableEnvironments:s,onEnvironmentSwitch:l,apps:t,modules:r=EMPTY_MODULES,externalSync:a,requiredEnvVars:c,sentryGetClient:p,disableHints:d=false,headless:x=false,hidden:v=false,defaultFloatingTools:X,defaultDialTools:E,zustandStores:w,requiredStorageKeys:q,askBuoy:R}){const M=n??defaultEnvironment();const Z=(0,_react.useMemo)(()=>E?(0,_defaultConfig.validateDialConfig)(E):void 0,[E]);const[g,S]=(0,_react.useState)(false);const[b,C]=(0,_react.useState)(false);const I=(0,_react.useRef)(false);const m=(0,_AppHostWeb.useAppHost)();const B=(0,_react.useMemo)(()=>configOverrides(r,c,q,R),[r,c,q,R]);const{allowedTools:y}=(0,_license.useLicense)();const f=(0,_react.useMemo)(()=>(0,_floatingToolsCore.filterTeamTools)((0,_autoDiscoverPresetsWeb.autoDiscoverWithCustom)([...(0,_createWebTools.createWebTools)(r),...t??[],...B]),y),[t,r,B,y]);const{openApps:L,close:F}=m;(0,_react.useEffect)(()=>{if(!y)return;for(const e of L){if(!(0,_floatingToolsCore.isTeamToolAllowed)(e.id,y))F(e.instanceId)}},[L,y,F]);const k=(0,_react.useMemo)(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);(0,_react.useEffect)(()=>{if(!w||typeof k?.watchStores!=="function")return;const e=k.watchStores(w);return typeof e==="function"?e:void 0},[w,k]);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||b)},[N,b,D.setToolOpen]);const{registerApps:V}=m;(0,_react.useEffect)(()=>{V(f.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:u})=>o(u):o}}))},[V,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)}I.current=true};void o();return()=>{e=true}},[]);(0,_react.useEffect)(()=>{if(!I.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.dial.isOpen(),g?"true":"false")},[g]);(0,_react.useEffect)(()=>{if(!I.current)return;void _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),b?"true":"false")},[b]);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 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:o,openApps:u,openTool:T}=z.current;if(u.some(W=>W.id===e))return false;const P=o.find(W=>W.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 K=(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:A}=(0,_DevToolsSettingsModalShared.useDevToolsSettings)();const ne=(0,_react.useMemo)(()=>(0,_autoDiscoverPresetsWeb.getToolsBySlot)(f,"row").filter(e=>(A.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,A.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(s?.length&&l);const G=A.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:a,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:[M&&G&&!Y&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentIndicator,{environment:M}),Y&&G&&(0,_jsxRuntime.jsx)(_sharedUi.EnvironmentSelectorInline,{currentEnvironment:M??"local",availableEnvironments:s,onSelect:l}),i?(0,_jsxRuntime.jsx)(_floatingToolsWeb.UserStatus,{userRole:i,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:K,onClose:se,centerLabel:"BUOY",onCenterPress:ie,settingsOpen:b,hintsDisabled:d,emptyNote:y&&K.length===0?_teamToolsNote.NO_TEAM_TOOLS_NOTE:void 0}),b&&!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 i=n&&typeof n==="object"?n.appId:void 0;const s=!!n;(0,_react.useEffect)(()=>{if(!s)return;let l=false;const t=licenseModule.SessionManager;if(!t)return;const r=a=>{if(l||!a)return;t.configure({audience:`app:${a}`});void t.load().catch(()=>{})};if(i)r(i);else void(0,_license.loadCapacitorAppHost)().then(a=>r(a?.bundleId)).catch(()=>{});return()=>{l=true}},[s,i])}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:i,isPro:s,licenseKey:l}=(0,_license.useLicense)();(0,_react.useEffect)(()=>{void _license.LicenseManager.configure(n.licenseKey)},[n.licenseKey]);const t=n.licenseKey===void 0||(0,_license.sameLicenseKey)(n.licenseKey,l);const r=(0,_license.resolveDevBuild)(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const a=t&&i.status==="admitted";(0,_react.useEffect)(()=>{if(a)(0,_sharedUi.startSettingsSync)()},[a]);(0,_react.useEffect)(()=>{if(r||i.status==="initializing")return;if(s&&a)(0,_releaseOptIn.markReleaseOptIn)();else(0,_releaseOptIn.clearReleaseOptIn)()},[r,s,a,i.status]);const c=(0,_license.isCapacitorNative)();useCapacitorSignInAudience(c?n.signIn:void 0);if(!r&&!s){if(!n.signIn||n.headless)return null;return c?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{needsPlan:true}):(0,_jsxRuntime.jsx)(_BuoySignInWeb.BuoySignIn,{})}if(!a){return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[i.status==="initializing"&&(0,_jsxRuntime.jsx)(StartupCapture,{modules:n.modules}),n.headless?null:n.signIn&&c?(0,_jsxRuntime.jsx)(_BuoyCodeSignIn.BuoySignIn,{}):(0,_jsxRuntime.jsx)(_sharedUi.AccountSetup,{})]})}return(0,_jsxRuntime.jsx)(AdmittedFloatingDevTools,{...n})}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.FloatingDevTools=FloatingDevTools;var _floating=require("@buoy-gg/shared-ui/floating");var _license=_interopRequireWildcard(require("@buoy-gg/license"));var licenseModule=_license;var _sharedUi=require("@buoy-gg/shared-ui");var _react=require("react");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _autoDiscoverPresetsWeb=require("../utils/autoDiscoverPresets.web.js");var _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 +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 _sharedUi=require("@buoy-gg/shared-ui");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 a=(0,_react.useRef)({isPro:n,tier:r,licenseKey:t});a.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(!a.current.isPro&&(p.isInitialized===false||p.isValidating===true))return;i.emit("device-license",{isPro:a.current.isPro?"1":"0",tier:a.current.tier??(a.current.isPro?"pro":"free")})};if(i.connected)c();i.on("connect",c);return()=>{i.off("connect",c)}},[i,n,r,t]);const u=e?.releaseActions?.join(",")??"";const b=(0,_react.useMemo)(()=>(0,_externalSyncGate.applyReleaseActionPolicy)(l,typeof __DEV__!=="undefined"&&__DEV__,u?u.split(","):void 0),[l,u]);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 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])}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.77";
|
package/lib/module/Buoy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{LicenseManager as t}from"@buoy-gg/license";let r=true;export function isTelemetryEnabled(){return r}export const Buoy={init(e){if(e.telemetry===false)r=false;void t.configure(e.licenseKey).catch(
|
|
1
|
+
"use strict";import{LicenseManager as t}from"@buoy-gg/license";let r=true;export function isTelemetryEnabled(){return r}let n=false;let i=false;export function defaultLicenseKey(){if(n)return void 0;try{const e=process.env.EXPO_PUBLIC_BUOY_KEY;if(e)return e}catch{}try{const e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}return void 0}export function applyDefaultLicenseKey(){if(i)return;i=true;const e=defaultLicenseKey();if(e)void t.configure(e).catch(()=>{})}export const Buoy={init(e){if(e.telemetry===false)r=false;if(e.licenseKey!==void 0)n=true;void t.configure(e.licenseKey).catch(s=>{console.warn("[Buoy] License initialization failed:",s)})},async initAsync(e){if(e.telemetry===false)r=false;if(e.licenseKey!==void 0)n=true;return t.configure(e.licenseKey)},isPro(){return t.isPro()},getState(){return t.getState()},async forceReregister(){await t.forceReregister()}};export default Buoy;
|
package/lib/module/auto.web.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{createElement as
|
|
1
|
+
"use strict";import{createElement as n,lazy as c,Suspense as i,useEffect as f,useState as l}from"react";export function shouldShowBuoy(){if(typeof window==="undefined")return false;const e=window.Capacitor;let t=false;try{t=e?.isNativePlatform?.()===true}catch{t=false}if(t)return e?.DEBUG===true;return typeof __DEV__!=="undefined"?Boolean(__DEV__):process.env.NODE_ENV!=="production"}export function bundlerKey(){try{const e=import.meta.env.VITE_BUOY_KEY;if(e)return e}catch{}try{const e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}return void 0}let o;function a(){o??=c(()=>import("./floatingMenu/FloatingDevTools.web").then(e=>({default:e.FloatingDevTools})));return o}export function BuoyDevTools({enabled:e,...t}){const[r,u]=l(false);f(()=>{u(e??shouldShowBuoy())},[e]);if(!r)return null;const s=t.licenseKey??bundlerKey();return n(i,{fallback:null},n(a(),{...t,licenseKey:s}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{FloatingToolHost as
|
|
1
|
+
"use strict";import{FloatingToolHost as le}from"@buoy-gg/shared-ui";import{AccountSetup as ae,setBuoyAppId as ge,startSettingsSync as ye}from"@buoy-gg/shared-ui";import $e,{useMemo as t,useCallback as pe,useEffect as m}from"react";import{View as G,StyleSheet as K}from"react-native";import{AppHostProvider as de}from"./AppHost";import{TeamToolCloser as me}from"./TeamToolCloser.js";import{NO_TEAM_TOOLS_NOTE as fe}from"./teamToolsNote.js";import{FloatingMenu as ve}from"./FloatingMenu.js";import{AppOverlay as be}from"./AppHost";import{ToolOpenerBridge as he}from"./ToolOpenerBridge.js";import{autoDiscoverPresets as Te,autoDiscoverPresetsWithCustom as Oe}from"./autoDiscoverPresets.js";import{sendInstallPing as Ae}from"../telemetry/installPing.js";import{defaultLicenseKey as qe,isTelemetryEnabled as Ie}from"../Buoy.js";import{renderAppIcon as Re}from"./AppIcon";import{DevToolsVisibilityProvider as _e}from"./DevToolsVisibilityContext.js";import{reportOptionalRequireError as n}from"./optionalRequire.js";import{HintsProvider as Ee,normalizeEnvironment as xe}from"@buoy-gg/shared-ui";import{MinimizedToolsProvider as Pe}from"./MinimizedToolsContext.js";import{validateDialConfig as Se}from"./defaultConfig.js";import{DefaultConfigProvider as ke}from"./DefaultConfigContext.js";import{LicenseManager as De,useProAccess as Me,useLicense as Ce,sameLicenseKey as Le}from"@buoy-gg/license";import*as ze from"@buoy-gg/license";import{filterTeamTools as je}from"@buoy-gg/floating-tools-core";import{BuoySignIn as X}from"./BuoySignIn";import{AutoExternalSync as Y,ToolRegistryPublisher as we,isExternalSyncAvailable as Fe}from"./autoExternalSync.js";import{externalSyncOptions as j,releaseTransportProblem as He,shouldMountExternalSync as Be}from"./externalSyncGate.js";import{jsx as r,Fragment as _,jsxs as f}from"react/jsx-runtime";let Z=null;function Ne(i){if(!i||i===Z)return;Z=i;console.warn("[Buoy]",i)}function ee(i){if(i&&typeof i==="object"&&i.appId)return i.appId;try{const{Platform:s}=require("react-native");const u=require("expo-constants");const l=(u?.default??u)?.expoConfig;const v=s.OS==="android"?l?.android?.package:l?.ios?.bundleIdentifier;if(typeof v==="string"&&v)return v}catch{}try{const s=require("expo-application");const u=(s?.default??s)?.applicationId;if(typeof u==="string"&&u)return u}catch{}return null}export const FloatingDevTools=({apps:i,requiredEnvVars:s,requiredStorageKeys:u,askBuoy:l,children:v,disableHints:re=false,defaultFloatingTools:te,defaultDialTools:h,requireLicense:Ue,licenseKey:T,zustandStores:E,environment:oe,externalSync:O=true,headless:x=false,signIn:A,...w})=>{const ne=oe??xe(process.env.NODE_ENV??"dev");const{isLicensed:q}=Me();const{licenseKey:P,isInitialized:F,tier:I,access:c,allowedTools:R}=Ce();const ie=T===void 0||Le(T,P);const S=ie&&c.status==="admitted";m(()=>{if(!F||c.status==="initializing")return;void Ae({tier:c.status==="admitted"?I:"locked",enabled:Ie()})},[F,c.status,I]);const b=A?ee(A):null;m(()=>{if(!b)return;const e=ze.SessionManager;if(!e)return;e.configure({audience:`app:${b}`});void e.load().catch(()=>{})},[b]);m(()=>{ge(b??ee(true))},[b]);m(()=>{void De.configure(T??qe()).catch(()=>{})},[T]);m(()=>{if(S)ye()},[S]);m(()=>{if(!E||c.status==="locked")return;try{const{watchStores:e}=require("@buoy-gg/zustand");return e(E)}catch(e){n("@buoy-gg/zustand",e)}},[E,c.status]);const se=t(()=>{if(h){return Se(h)}return h},[h]);const k=t(()=>{const e=[];if(s&&s.length>0){try{const{createEnvTool:o,createEnvVarConfig:z}=require("@buoy-gg/env");e.push(o({requiredEnvVars:z(s)}))}catch(o){n("@buoy-gg/env",o)}}if(u&&u.length>0){try{const{createStorageTool:o}=require("@buoy-gg/storage");e.push(o({requiredStorageKeys:u}))}catch(o){n("@buoy-gg/storage",o)}}if(l){try{const{createAskBuoyTool:o}=require("@buoy-gg/ask-buoy");e.push(o(l))}catch(o){n("@buoy-gg/ask-buoy",o)}}return e},[s,u,l]);const D=t(()=>{if(!i&&k.length===0)return void 0;return[...i||[],...k]},[i,k]);const a=t(()=>D?Oe(D):Te(),[D]);const M=t(()=>a.filter(e=>e.sync),[a]);const ue=t(()=>je(a,R),[a,R]);const H=t(()=>{try{const{DebugBordersStandaloneOverlay:e}=require("@buoy-gg/debug-borders");return e}catch(e){n("@buoy-gg/debug-borders",e);return null}},[]);const B=t(()=>{try{const{HighlightUpdatesOverlay:e}=require("@buoy-gg/highlight-updates");return e}catch(e){n("@buoy-gg/highlight-updates",e);return null}},[]);const N=t(()=>{try{const{ImageOverlayStandalone:e}=require("@buoy-gg/image-overlay");return e}catch(e){n("@buoy-gg/image-overlay",e);return null}},[]);const V=t(()=>{try{const{PerfMonitorOverlay:e}=require("@buoy-gg/perf-monitor");return e}catch(e){n("@buoy-gg/perf-monitor",e);return null}},[]);const U=t(()=>{try{const{JsTopHudOverlay:e}=require("@buoy-gg/js-top");return e}catch(e){n("@buoy-gg/js-top",e);return null}},[]);const g=t(()=>{try{const{RouteTracker:e}=require("@buoy-gg/route-events");return e}catch(e){n("@buoy-gg/route-events",e);return null}},[]);const y=t(()=>{try{const{ReactQueryTracker:e}=require("@buoy-gg/react-query");return e}catch(e){n("@buoy-gg/react-query",e);return null}},[]);const J=t(()=>{try{const{ImpersonateOverlay:e}=require("@buoy-gg/impersonate");return e}catch(e){n("@buoy-gg/impersonate",e);return null}},[]);const Q=t(()=>{try{const{ScenariosOverlay:e}=require("@buoy-gg/scenarios");return e}catch(e){n("@buoy-gg/scenarios",e);return null}},[]);const p=t(()=>{try{const{ReduxAutoInstrument:e}=require("@buoy-gg/redux");return e??null}catch(e){n("@buoy-gg/redux",e);return null}},[]);const d=t(()=>{try{const{ConsoleRoot:e}=require("@buoy-gg/console");return e??null}catch(e){n("@buoy-gg/console",e);return null}},[]);const ce=pe(e=>{const o=a.find(z=>z.id===e);if(!o)return null;return Re(o.icon,{slot:"dial",size:20,color:o.color})},[a]);const C=typeof __DEV__!=="undefined"&&__DEV__;if(!C&&!q){return A&&!x?r(X,{needsPlan:true}):null}const W=Be({isDevelopment:C,isLicensed:q,externalSync:O,isAvailable:Fe()});const L=j(O);if(!C&&L?.enableInRelease){Ne(He(L.socketURL,L))}const $=r(we,{requiredEnvVars:s,customApps:M});if(!S){return f(_,{children:[c.status==="initializing"&&f(_,{children:[p&&r(p,{}),d&&r(d,{}),g&&r(g,{}),y&&r(y,{})]}),!x&&(A?r(X,{}):r(ae,{}))]})}if(x){return f(_,{children:[p&&r(p,{}),d&&r(d,{}),g&&r(g,{}),y&&r(y,{}),$,W&&r(Y,{options:j(O),requiredEnvVars:s,isPro:q,tier:I,licenseKey:P,customApps:M})]})}return r(ke,{defaultFloatingTools:te,defaultDialTools:se,children:r(Ee,{disableHints:re,children:r(G,{style:Ve.container,pointerEvents:"box-none",__buoyDevToolsRoot:true,children:f(_e,{children:[N&&r(G,{style:K.absoluteFill,pointerEvents:"box-none",collapsable:false,children:r(N,{})}),r(de,{children:f(Pe,{getToolIcon:ce,children:[r(ve,{...w,apps:ue,emptyNote:R?fe:void 0,environment:ne}),w.hidden?null:f(_,{children:[r(be,{}),r(le,{})]}),r(he,{}),r(me,{allowedTools:R??null})]})}),v,H&&r(H,{}),B&&r(B,{}),V&&r(V,{}),U&&r(U,{}),J&&r(J,{}),Q&&r(Q,{}),p&&r(p,{}),d&&r(d,{}),g&&r(g,{}),y&&r(y,{}),$,W&&r(Y,{options:j(O),requiredEnvVars:s,isPro:q,tier:I,licenseKey:P,customApps:M})]})})})})};const Ve=K.create({container:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:9999}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{BuoyPortal as _e,FloatingToolHost as Me}from"@buoy-gg/shared-ui/floating";import*as ke from"@buoy-gg/license";import{LicenseManager as Pe,useLicense as ce,sameLicenseKey as xe,resolveDevBuild as Re,capacitorDebug as Be,isCapacitorNative as Fe,loadCapacitorAppHost as Le}from"@buoy-gg/license";import{AccountSetup as je,HintsProvider as Ne,normalizeEnvironment as Ve,registerToolOpener as de,startSettingsSync as ze}from"@buoy-gg/shared-ui";import{useState as H,useMemo as g,useCallback as I,useEffect as d,useRef as ue}from"react";import{useSettings as We,getToolLabel as R,getToolDescription as Ke,getToolColor as fe}from"@buoy-gg/floating-tools-react";import{persistentStorage as h,devToolsStorageKeys as B,EnvironmentIndicator as He,EnvironmentSelectorInline as Ue}from"@buoy-gg/shared-ui";import{autoDiscoverWithCustom as $e,getToolsBySlot as pe}from"../utils/autoDiscoverPresets.web.js";import{filterTeamTools as Ye,isTeamToolAllowed as Ge}from"@buoy-gg/floating-tools-core";import{NO_TEAM_TOOLS_NOTE as Qe}from"./teamToolsNote.js";import{FloatingTools as Je,UserStatus as Xe}from"./floatingTools.web.js";import{DialMenu as Ze}from"./dial/DialDevTools.web.js";import{getRankedToolIds as qe,recordToolUsage as en}from"./dial/dialUsageStore.js";import{OnboardingTooltip as nn}from"./dial/OnboardingTooltip.web.js";import{SettingsModal as on}from"./DevToolsSettingsModal.web.js";import{AppHostProvider as tn,AppOverlay as sn,useAppHost as me}from"./AppHost.web.js";import{MinimizedToolsStack as rn}from"./MinimizedToolsStack.web.js";import{createWebTools as an}from"../utils/createWebTools.js";import{BrowserToolRuntime as ln}from"./BrowserToolRuntime.js";import{clearReleaseOptIn as cn,markReleaseOptIn as dn}from"../releaseOptIn.js";import{BuoySignIn as un}from"./BuoySignIn.web.js";import{BuoySignIn as ge}from"./BuoyCodeSignIn.js";import{DevToolsVisibilityProvider as fn,useDevToolsVisibility as pn}from"./DevToolsVisibilityContext.js";import{createWebTool as U}from"../utils/createWebTool.js";import{DefaultConfigProvider as mn}from"./DefaultConfigContext.js";import{useDevToolsSettings as gn}from"./DevToolsSettingsModal.shared.js";import{validateDialConfig as Te}from"./defaultConfig.js";import{installedTools as Tn,installedToolsFound as vn}from"../installedTools.js";import{jsx as t,jsxs as _,Fragment as $}from"react/jsx-runtime";const ve={};const ye="@react_buoy_floating_menu_tooltip_shown";const yn=h;function hn({size:n=14,color:s="#20C997"}){const i=Math.max(2,n/4);const l=Math.max(1,n/16);return t("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${i}px)`,gap:l,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((a,r)=>t("div",{style:{width:i,height:i,borderRadius:i/2,backgroundColor:s}},r))})}function bn(n){const{defaultFloatingTools:s,defaultDialTools:i,disableHints:l=false,children:a}=n;const r=g(()=>i?Te(i):i,[i]);return t(mn,{defaultFloatingTools:s,defaultDialTools:r,children:t(Ne,{disableHints:l,children:_(fn,{children:[t(tn,{children:t(En,{...n})}),a]})})})}const On=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function Sn({modules:n=ve}){return t($,{children:Object.entries(n).flatMap(([s,i])=>On.map(l=>{const a=i[l];return a?t(a,{},`${s}:${l}`):null}))})}function Cn(){const{openApps:n,restore:s}=me();d(()=>de(i=>{const l=n.find(a=>a.id===i);if(!l)return false;s(l.instanceId);return true}),[n,s]);return null}function Dn(){const n=Be();const s=n===null?process.env.NODE_ENV:n?"development":"production";return Ve(s??"dev")}function In(n,s,i,l){const a=M=>Object.entries(n).find(([v])=>v.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===M)?.[1];const r=[];const c=a("env");if(s?.length&&c?.createEnvTool&&c.createEnvVarConfig){r.push(U(c.createEnvTool({requiredEnvVars:c.createEnvVarConfig(s)})))}const p=a("storage");if(i?.length&&p?.createStorageTool){r.push(U(p.createStorageTool({requiredStorageKeys:i})))}const E=a("ask-buoy");const b=l==="hosted"?E?.hostedAskBuoy?.():l;if(b&&E?.createAskBuoyTool)r.push(U(E.createAskBuoyTool(b)));return r}function En({environment:n,userRole:s="admin",availableEnvironments:i,onEnvironmentSwitch:l,apps:a,modules:r=ve,externalSync:c,requiredEnvVars:p,sentryGetClient:E,disableHints:b=false,headless:M=false,hidden:v=false,defaultFloatingTools:be,defaultDialTools:F,zustandStores:L,requiredStorageKeys:Y,askBuoy:G}){const j=n??Dn();const Oe=g(()=>F?Te(F):void 0,[F]);const[m,w]=H(false);const[O,k]=H(false);const N=ue(false);const T=me();const Q=g(()=>In(r,p,Y,G),[r,p,Y,G]);const{allowedTools:S}=ce();const f=g(()=>Ye($e([...an(r),...a??[],...Q]),S),[a,r,Q,S]);const{openApps:J,close:X}=T;d(()=>{if(!S)return;for(const e of J){if(!Ge(e.id,S))X(e.instanceId)}},[J,S,X]);const V=g(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);d(()=>{if(!L||typeof V?.watchStores!=="function")return;const e=V.watchStores(L);return typeof e==="function"?e:void 0},[L,V]);const P=pn();const Z=T.openApps.some(e=>!e.minimized);d(()=>{P.setDialOpen(m)},[m,P.setDialOpen]);d(()=>{P.setToolOpen(Z||O)},[Z,O,P.setToolOpen]);const{registerApps:q}=T;d(()=>{q(f.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:u})=>o(u):o}}))},[q,f]);const Se=g(()=>f.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[f]);We({availableTools:Se,storage:yn});d(()=>{let e=false;const o=async()=>{const[u,y]=await Promise.all([h.getItem(B.dial.isOpen()),h.getItem(B.settings.modalOpen())]);if(e)return;if(u==="true")w(true);if(y==="true"){w(true);k(true)}N.current=true};void o();return()=>{e=true}},[]);d(()=>{if(!N.current)return;void h.setItem(B.dial.isOpen(),m?"true":"false")},[m]);d(()=>{if(!N.current)return;void h.setItem(B.settings.modalOpen(),O?"true":"false")},[O]);const A=I(e=>{void en(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const o=typeof e.icon==="function"?e.icon(20):e.icon;T.open({id:e.id,title:e.name||R(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||fe(e.id)})}else{e.onPress?.()}},[T]);const ee=ue({tools:f,openApps:T.openApps,openTool:A});ee.current={tools:f,openApps:T.openApps,openTool:A};d(()=>de(e=>{const{tools:o,openApps:u,openTool:y}=ee.current;if(u.some(K=>K.id===e))return false;const W=o.find(K=>K.id===e);if(!W||W.launchMode==="toggle-only")return false;y(W);return true}),[]);const x=g(()=>{const e=pe(f,"dial");return e.map(o=>{const u=o.color||fe(o.id);let y;if(typeof o.icon==="string"){y=o.icon}else if(typeof o.icon==="function"){y=o.icon(32)}else{y=null}return{id:o.id,name:o.name||R(o.id),icon:y,unavailable:!o.component&&!o.onPress,color:u,onPress:()=>{A(o);w(false)}}})},[f,A]);const ne=g(()=>{if(!m)return x;const e=new Map(x.map(o=>[o.id,o]));return qe(x.map(o=>o.id)).map(o=>e.get(o)).filter(o=>Boolean(o))},[m,x]);const{settings:z}=gn();const Ce=g(()=>pe(f,"row").filter(e=>(z.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,z.floatingTools]);const De=g(()=>f.map(e=>({id:e.id,name:e.name||R(e.id),description:e.description||Ke(e.id),slot:e.slot,icon:e.icon,color:e.color})),[f]);const[Ie,oe]=H(false);const te=T.openApps.some(e=>!e.minimized);d(()=>{if(b)return;let e=false;const o=setTimeout(async()=>{const u=await h.getItem(ye);if(!e&&!u)oe(true)},1e3);return()=>{e=true;clearTimeout(o)}},[b]);const C=I(()=>{oe(false);void h.setItem(ye,"true")},[]);const ie=I(()=>{C();w(true)},[C]);const Ee=I(()=>{w(false);k(false)},[]);const we=I(()=>{k(e=>!e)},[]);const Ae=I(()=>k(false),[]);const se=Boolean(i?.length&&l);const re=z.floatingTools.environment!==false;const D=Ie&&!m&&!te&&!v;d(()=>{if(!D)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))C()};const o=u=>{if(u.key==="Escape")C()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[D,C]);const ae=T.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const le=t(ln,{modules:r,apps:a,requiredEnvVars:p,externalSync:c,headless:M,sentryGetClient:E});if(M)return le;return _("div",{"data-buoy-root":"",style:{display:"contents"},children:[le,t(Cn,{}),D&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),t("div",{style:v?{visibility:"hidden"}:{display:"contents"},"aria-hidden":v||void 0,children:_(Je,{enablePositionPersistence:!D,pushToSide:m||te,suspendPointerEvents:m,centerOnboarding:D,minimizedStack:ae?t(rn,{}):void 0,hasMinimizedStack:ae,children:[j&&re&&!se&&t(He,{environment:j}),se&&re&&t(Ue,{currentEnvironment:j??"local",availableEnvironments:i,onSelect:l}),s?t(Xe,{userRole:s,onPress:ie}):t("button",{"aria-label":"Open dev tools",onClick:ie,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:t(hn,{})}),Ce.map(e=>t("button",{"aria-label":e.name||R(e.id),title:e.description,onClick:()=>A(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))]})}),D&&t(nn,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:C}),m&&!v&&t(Ze,{icons:ne,onClose:Ee,centerLabel:"BUOY",onCenterPress:we,settingsOpen:O,hintsDisabled:b,emptyNote:S&&ne.length===0?Qe:void 0}),O&&!v&&t(on,{visible:true,onClose:Ae,availableTools:De,defaultFloatingTools:be,defaultDialTools:Oe,onSettingsChange:e=>{}}),!v&&_($,{children:[t(sn,{}),t(Me,{})]})]})}function wn(n){const s=n&&typeof n==="object"?n.appId:void 0;const i=!!n;d(()=>{if(!i)return;let l=false;const a=ke.SessionManager;if(!a)return;const r=c=>{if(l||!c)return;a.configure({audience:`app:${c}`});void a.load().catch(()=>{})};if(s)r(s);else void Le().then(c=>r(c?.bundleId)).catch(()=>{});return()=>{l=true}},[i,s])}let he=false;function An(n){if(n.modules)return n;if(!vn&&!he&&typeof console!=="undefined"){he=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:Tn}}export function FloatingDevTools(n){return t(_e,{children:t(_n,{...An(n)})})}function _n(n){const{access:s,isPro:i,licenseKey:l}=ce();d(()=>{void Pe.configure(n.licenseKey)},[n.licenseKey]);const a=n.licenseKey===void 0||xe(n.licenseKey,l);const r=Re(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const c=a&&s.status==="admitted";d(()=>{if(c)ze()},[c]);d(()=>{if(r||s.status==="initializing")return;if(i&&c)dn();else cn()},[r,i,c,s.status]);const p=Fe();wn(p?n.signIn:void 0);if(!r&&!i){if(!n.signIn||n.headless)return null;return p?t(ge,{needsPlan:true}):t(un,{})}if(!c){return _($,{children:[s.status==="initializing"&&t(Sn,{modules:n.modules}),n.headless?null:n.signIn&&p?t(ge,{}):t(je,{})]})}return t(bn,{...n})}
|
|
1
|
+
"use strict";import{BuoyPortal as ke,FloatingToolHost as xe}from"@buoy-gg/shared-ui/floating";import*as Re from"@buoy-gg/license";import{LicenseManager as Be,useLicense as de,sameLicenseKey as Le,resolveDevBuild as Fe,capacitorDebug as je,isCapacitorNative as ue,loadCapacitorAppHost as fe}from"@buoy-gg/license";import{AccountSetup as Ne,HintsProvider as Ve,normalizeEnvironment as ze,registerToolOpener as pe,setBuoyAppId as H,startSettingsSync as Ke}from"@buoy-gg/shared-ui";import{useState as U,useMemo as g,useCallback as D,useEffect as d,useRef as me}from"react";import{useSettings as We,getToolLabel as R,getToolDescription as He,getToolColor as ge}from"@buoy-gg/floating-tools-react";import{persistentStorage as h,devToolsStorageKeys as B,EnvironmentIndicator as Ue,EnvironmentSelectorInline as $e}from"@buoy-gg/shared-ui";import{autoDiscoverWithCustom as Ye,getToolsBySlot as Te}from"../utils/autoDiscoverPresets.web.js";import{filterTeamTools as Ge,isTeamToolAllowed as Qe}from"@buoy-gg/floating-tools-core";import{NO_TEAM_TOOLS_NOTE as Je}from"./teamToolsNote.js";import{FloatingTools as Xe,UserStatus as Ze}from"./floatingTools.web.js";import{DialMenu as qe}from"./dial/DialDevTools.web.js";import{getRankedToolIds as en,recordToolUsage as nn}from"./dial/dialUsageStore.js";import{OnboardingTooltip as on}from"./dial/OnboardingTooltip.web.js";import{SettingsModal as tn}from"./DevToolsSettingsModal.web.js";import{AppHostProvider as sn,AppOverlay as rn,useAppHost as ve}from"./AppHost.web.js";import{MinimizedToolsStack as ln}from"./MinimizedToolsStack.web.js";import{createWebTools as an}from"../utils/createWebTools.js";import{BrowserToolRuntime as cn}from"./BrowserToolRuntime.js";import{clearReleaseOptIn as dn,markReleaseOptIn as un}from"../releaseOptIn.js";import{BuoySignIn as fn}from"./BuoySignIn.web.js";import{defaultLicenseKey as pn}from"../Buoy.js";import{BuoySignIn as ye}from"./BuoyCodeSignIn.js";import{DevToolsVisibilityProvider as mn,useDevToolsVisibility as gn}from"./DevToolsVisibilityContext.js";import{createWebTool as $}from"../utils/createWebTool.js";import{DefaultConfigProvider as Tn}from"./DefaultConfigContext.js";import{useDevToolsSettings as vn}from"./DevToolsSettingsModal.shared.js";import{validateDialConfig as he}from"./defaultConfig.js";import{installedTools as yn,installedToolsFound as hn}from"../installedTools.js";import{jsx as t,jsxs as _,Fragment as Y}from"react/jsx-runtime";const be={};const Oe="@react_buoy_floating_menu_tooltip_shown";const bn=h;function On({size:n=14,color:i="#20C997"}){const s=Math.max(2,n/4);const l=Math.max(1,n/16);return t("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${s}px)`,gap:l,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((a,r)=>t("div",{style:{width:s,height:s,borderRadius:s/2,backgroundColor:i}},r))})}function Sn(n){const{defaultFloatingTools:i,defaultDialTools:s,disableHints:l=false,children:a}=n;const r=g(()=>s?he(s):s,[s]);return t(Tn,{defaultFloatingTools:i,defaultDialTools:r,children:t(Ve,{disableHints:l,children:_(mn,{children:[t(sn,{children:t(wn,{...n})}),a]})})})}const In=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function Cn({modules:n=be}){return t(Y,{children:Object.entries(n).flatMap(([i,s])=>In.map(l=>{const a=s[l];return a?t(a,{},`${i}:${l}`):null}))})}function Dn(){const{openApps:n,restore:i}=ve();d(()=>pe(s=>{const l=n.find(a=>a.id===s);if(!l)return false;i(l.instanceId);return true}),[n,i]);return null}function An(){const n=je();const i=n===null?process.env.NODE_ENV:n?"development":"production";return ze(i??"dev")}function En(n,i,s,l){const a=M=>Object.entries(n).find(([v])=>v.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===M)?.[1];const r=[];const c=a("env");if(i?.length&&c?.createEnvTool&&c.createEnvVarConfig){r.push($(c.createEnvTool({requiredEnvVars:c.createEnvVarConfig(i)})))}const p=a("storage");if(s?.length&&p?.createStorageTool){r.push($(p.createStorageTool({requiredStorageKeys:s})))}const A=a("ask-buoy");const b=l==="hosted"?A?.hostedAskBuoy?.():l;if(b&&A?.createAskBuoyTool)r.push($(A.createAskBuoyTool(b)));return r}function wn({environment:n,userRole:i="admin",availableEnvironments:s,onEnvironmentSwitch:l,apps:a,modules:r=be,externalSync:c,requiredEnvVars:p,sentryGetClient:A,disableHints:b=false,headless:M=false,hidden:v=false,defaultFloatingTools:Ie,defaultDialTools:L,zustandStores:F,requiredStorageKeys:G,askBuoy:Q}){const j=n??An();const Ce=g(()=>L?he(L):void 0,[L]);const[m,E]=U(false);const[O,P]=U(false);const N=me(false);const T=ve();const J=g(()=>En(r,p,G,Q),[r,p,G,Q]);const{allowedTools:S}=de();const f=g(()=>Ge(Ye([...an(r),...a??[],...J]),S),[a,r,J,S]);const{openApps:X,close:Z}=T;d(()=>{if(!S)return;for(const e of X){if(!Qe(e.id,S))Z(e.instanceId)}},[X,S,Z]);const V=g(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);d(()=>{if(!F||typeof V?.watchStores!=="function")return;const e=V.watchStores(F);return typeof e==="function"?e:void 0},[F,V]);const k=gn();const q=T.openApps.some(e=>!e.minimized);d(()=>{k.setDialOpen(m)},[m,k.setDialOpen]);d(()=>{k.setToolOpen(q||O)},[q,O,k.setToolOpen]);const{registerApps:ee}=T;d(()=>{ee(f.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:u})=>o(u):o}}))},[ee,f]);const De=g(()=>f.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[f]);We({availableTools:De,storage:bn});d(()=>{let e=false;const o=async()=>{const[u,y]=await Promise.all([h.getItem(B.dial.isOpen()),h.getItem(B.settings.modalOpen())]);if(e)return;if(u==="true")E(true);if(y==="true"){E(true);P(true)}N.current=true};void o();return()=>{e=true}},[]);d(()=>{if(!N.current)return;void h.setItem(B.dial.isOpen(),m?"true":"false")},[m]);d(()=>{if(!N.current)return;void h.setItem(B.settings.modalOpen(),O?"true":"false")},[O]);const w=D(e=>{void nn(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const o=typeof e.icon==="function"?e.icon(20):e.icon;T.open({id:e.id,title:e.name||R(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||ge(e.id)})}else{e.onPress?.()}},[T]);const ne=me({tools:f,openApps:T.openApps,openTool:w});ne.current={tools:f,openApps:T.openApps,openTool:w};d(()=>pe(e=>{const{tools:o,openApps:u,openTool:y}=ne.current;if(u.some(W=>W.id===e))return false;const K=o.find(W=>W.id===e);if(!K||K.launchMode==="toggle-only")return false;y(K);return true}),[]);const x=g(()=>{const e=Te(f,"dial");return e.map(o=>{const u=o.color||ge(o.id);let y;if(typeof o.icon==="string"){y=o.icon}else if(typeof o.icon==="function"){y=o.icon(32)}else{y=null}return{id:o.id,name:o.name||R(o.id),icon:y,unavailable:!o.component&&!o.onPress,color:u,onPress:()=>{w(o);E(false)}}})},[f,w]);const oe=g(()=>{if(!m)return x;const e=new Map(x.map(o=>[o.id,o]));return en(x.map(o=>o.id)).map(o=>e.get(o)).filter(o=>Boolean(o))},[m,x]);const{settings:z}=vn();const Ae=g(()=>Te(f,"row").filter(e=>(z.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,z.floatingTools]);const Ee=g(()=>f.map(e=>({id:e.id,name:e.name||R(e.id),description:e.description||He(e.id),slot:e.slot,icon:e.icon,color:e.color})),[f]);const[we,te]=U(false);const ie=T.openApps.some(e=>!e.minimized);d(()=>{if(b)return;let e=false;const o=setTimeout(async()=>{const u=await h.getItem(Oe);if(!e&&!u)te(true)},1e3);return()=>{e=true;clearTimeout(o)}},[b]);const I=D(()=>{te(false);void h.setItem(Oe,"true")},[]);const se=D(()=>{I();E(true)},[I]);const _e=D(()=>{E(false);P(false)},[]);const Me=D(()=>{P(e=>!e)},[]);const Pe=D(()=>P(false),[]);const re=Boolean(s?.length&&l);const le=z.floatingTools.environment!==false;const C=we&&!m&&!ie&&!v;d(()=>{if(!C)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))I()};const o=u=>{if(u.key==="Escape")I()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[C,I]);const ae=T.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const ce=t(cn,{modules:r,apps:a,requiredEnvVars:p,externalSync:c,headless:M,sentryGetClient:A});if(M)return ce;return _("div",{"data-buoy-root":"",style:{display:"contents"},children:[ce,t(Dn,{}),C&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),t("div",{style:v?{visibility:"hidden"}:{display:"contents"},"aria-hidden":v||void 0,children:_(Xe,{enablePositionPersistence:!C,pushToSide:m||ie,suspendPointerEvents:m,centerOnboarding:C,minimizedStack:ae?t(ln,{}):void 0,hasMinimizedStack:ae,children:[j&&le&&!re&&t(Ue,{environment:j}),re&&le&&t($e,{currentEnvironment:j??"local",availableEnvironments:s,onSelect:l}),i?t(Ze,{userRole:i,onPress:se}):t("button",{"aria-label":"Open dev tools",onClick:se,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:t(On,{})}),Ae.map(e=>t("button",{"aria-label":e.name||R(e.id),title:e.description,onClick:()=>w(e),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof e.icon==="function"?e.icon(16):e.icon},e.id))]})}),C&&t(on,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:I}),m&&!v&&t(qe,{icons:oe,onClose:_e,centerLabel:"BUOY",onCenterPress:Me,settingsOpen:O,hintsDisabled:b,emptyNote:S&&oe.length===0?Je:void 0}),O&&!v&&t(tn,{visible:true,onClose:Pe,availableTools:Ee,defaultFloatingTools:Ie,defaultDialTools:Ce,onSettingsChange:e=>{}}),!v&&_(Y,{children:[t(rn,{}),t(xe,{})]})]})}function _n(n){const i=n&&typeof n==="object"?n.appId:void 0;const s=!!n;d(()=>{if(!s)return;let l=false;const a=Re.SessionManager;if(!a)return;const r=c=>{if(l||!c)return;a.configure({audience:`app:${c}`});void a.load().catch(()=>{})};if(i)r(i);else void fe().then(c=>r(c?.bundleId)).catch(()=>{});return()=>{l=true}},[s,i])}function Mn(n){const i=n&&typeof n==="object"?n.appId:void 0;d(()=>{let s=false;if(i){H(i)}else if(ue()){void fe().then(l=>{if(!s)H(l?.bundleId)}).catch(()=>{})}else if(typeof location!=="undefined"&&location.origin&&location.origin!=="null"){H(location.origin)}return()=>{s=true}},[i])}let Se=false;function Pn(n){if(n.modules)return n;if(!hn&&!Se&&typeof console!=="undefined"){Se=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:yn}}export function FloatingDevTools(n){return t(ke,{children:t(kn,{...Pn(n)})})}function kn(n){const{access:i,isPro:s,licenseKey:l}=de();d(()=>{void Be.configure(n.licenseKey??pn())},[n.licenseKey]);const a=n.licenseKey===void 0||Le(n.licenseKey,l);const r=Fe(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const c=a&&i.status==="admitted";d(()=>{if(c)Ke()},[c]);d(()=>{if(r||i.status==="initializing")return;if(s&&c)un();else dn()},[r,s,c,i.status]);const p=ue();_n(p?n.signIn:void 0);Mn(n.signIn);if(!r&&!s){if(!n.signIn||n.headless)return null;return p?t(ye,{needsPlan:true}):t(fn,{})}if(!c){return _(Y,{children:[i.status==="initializing"&&t(Cn,{modules:n.modules}),n.headless?null:n.signIn&&p?t(ye,{}):t(Ne,{})]})}return t(Sn,{...n})}
|