@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
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{useEffect as O,useMemo as Q,useRef as V}from"react";import{Platform as H}from"react-native";import{LicenseManager as $}from"@buoy-gg/license";import{reportOptionalRequireError as r}from"./optionalRequire.js";import{appSyncAdapter as
|
|
1
|
+
"use strict";import{useEffect as O,useMemo as Q,useRef as V}from"react";import{Platform as H}from"react-native";import{LicenseManager as $}from"@buoy-gg/license";import{reportOptionalRequireError as r}from"./optionalRequire.js";import{appSyncAdapter as W}from"./sync/appSyncAdapter.js";import{useDeviceIdentity as X}from"./deviceIdentity.js";import{applyReleaseActionPolicy as Y}from"./externalSyncGate.js";import{applyDefaultLicenseKey as Z}from"../Buoy.js";import{registerToolAdapters as ee}from"@buoy-gg/shared-ui";Z();let s=null;let g=null;let d=null;let p=null;let f=null;let b=null;let m=null;let S=null;let A=null;let h=null;let M=null;let v=null;let q=null;let k=null;let x=null;let R=null;try{R=require("@buoy-gg/notifications")}catch(e){r("@buoy-gg/notifications",e)}let j=null;let E=null;let L=null;let I=null;let w=null;let T=null;let _=null;let z=null;let B=null;let D=null;let i=null;try{s=require("@buoy-gg/external-sync")}catch(e){r("@buoy-gg/external-sync",e)}try{g=require("@buoy-gg/storage")}catch(e){r("@buoy-gg/storage",e)}try{d=require("@buoy-gg/network")}catch(e){r("@buoy-gg/network",e)}try{p=require("@buoy-gg/react-query")}catch(e){r("@buoy-gg/react-query",e)}try{f=require("@buoy-gg/route-events")}catch(e){r("@buoy-gg/route-events",e)}try{b=require("@buoy-gg/redux")}catch(e){r("@buoy-gg/redux",e)}try{m=require("@buoy-gg/zustand")}catch(e){r("@buoy-gg/zustand",e)}try{S=require("@buoy-gg/jotai")}catch(e){r("@buoy-gg/jotai",e)}try{A=require("@buoy-gg/events")}catch(e){r("@buoy-gg/events",e)}try{h=require("@buoy-gg/console")}catch(e){r("@buoy-gg/console",e)}try{M=require("@buoy-gg/clock")}catch(e){r("@buoy-gg/clock",e)}try{q=require("@buoy-gg/lifecycle")}catch(e){r("@buoy-gg/lifecycle",e)}try{k=require("@buoy-gg/location")}catch(e){r("@buoy-gg/location",e)}try{v=require("@buoy-gg/permissions")}catch(e){r("@buoy-gg/permissions",e)}try{x=require("@buoy-gg/sentry")}catch(e){r("@buoy-gg/sentry",e)}try{j=require("@buoy-gg/env")}catch(e){r("@buoy-gg/env",e)}try{E=require("@buoy-gg/highlight-updates")}catch(e){r("@buoy-gg/highlight-updates",e)}try{L=require("@buoy-gg/debug-borders")}catch(e){r("@buoy-gg/debug-borders",e)}try{I=require("@buoy-gg/impersonate")}catch(e){r("@buoy-gg/impersonate",e)}try{w=require("@buoy-gg/perf-monitor")}catch(e){r("@buoy-gg/perf-monitor",e)}try{T=require("@buoy-gg/js-top")}catch(e){r("@buoy-gg/js-top",e)}try{_=require("@buoy-gg/images")}catch(e){r("@buoy-gg/images",e)}try{z=require("@buoy-gg/assets")}catch(e){r("@buoy-gg/assets",e)}try{B=require("@buoy-gg/tv-remote")}catch(e){r("@buoy-gg/tv-remote",e)}try{D=require("@buoy-gg/focus-inspector")}catch(e){r("@buoy-gg/focus-inspector",e)}try{i=require("expo-constants")}catch(e){r("expo-constants",e)}export function isExternalSyncAvailable(){return!!s?.useExternalSyncSocket}function te(){const e=i?.default??i;return e?.expoConfig?.name??e?.manifest2?.extra?.expoClient?.name??null}function re(){const e=i?.default??i;const n=e?.deviceName;return typeof n==="string"&&n.length>0?n:null}export function useToolAdapterMap({requiredEnvVars:e,customApps:n}){const c=p?.useReactQuerySyncAdapter?p.useReactQuerySyncAdapter():null;return oe(c,e,n)}export function ToolRegistryPublisher({requiredEnvVars:e,customApps:n}){const c=useToolAdapterMap({requiredEnvVars:e,customApps:n});const t=V(c);t.current=c;O(()=>ee(()=>t.current),[]);return null}export function AutoExternalSync({options:e,requiredEnvVars:n,isPro:c,tier:t,licenseKey:o,customApps:F}){const{useExternalSyncSocket:G,useExternalSync:J}=s;const N=useToolAdapterMap({requiredEnvVars:n,customApps:F});const U=X(e,{appName:te(),hardwareName:re(),platform:H.OS});const P=U?.deviceId??null;const{socket:u}=G({deviceName:U?.deviceName??"Buoy Device",socketURL:e?.socketURL??s.getDefaultSocketURL?.()??"http://localhost:42831",persistentDeviceId:P,platform:H.OS,enableLogs:e?.enableLogs});const a=V({isPro:c,tier:t,licenseKey:o});a.current={isPro:c,tier:t,licenseKey:o};O(()=>{if(!u)return;const y=()=>{if(!$.hasAccountAccess()||!u.connected)return;const C=$.getState();if(!a.current.isPro&&(C.isInitialized===false||C.isValidating===true))return;u.emit("device-license",{isPro:a.current.isPro?"1":"0",tier:a.current.tier??(a.current.isPro?"pro":"free")})};if(u.connected)y();u.on("connect",y);return()=>{u.off("connect",y)}},[u,c,t,o]);const l=e?.releaseActions?.join(",")??"";const K=Q(()=>Y(N,typeof __DEV__!=="undefined"&&__DEV__,l?l.split(","):void 0),[N,l]);J({tools:K,socket:u,deviceId:P,enableLogs:e?.enableLogs});return null}function oe(e,n,c){return Q(()=>{const t={app:W};if(g?.storageSyncAdapter){t.storage=g.storageSyncAdapter}if(d?.networkSyncAdapter){t.network=d.networkSyncAdapter}if(e){t.query=e}if(f?.routeEventsSyncAdapter){t["route-events"]=f.routeEventsSyncAdapter}if(b?.reduxSyncAdapter){t.redux=b.reduxSyncAdapter}if(m?.zustandSyncAdapter){t.zustand=m.zustandSyncAdapter}if(S?.jotaiSyncAdapter){t.jotai=S.jotaiSyncAdapter}if(A?.eventsSyncAdapter){t.events=A.eventsSyncAdapter}if(h?.consoleSyncAdapter){t.console=h.consoleSyncAdapter}if(M?.clockSyncAdapter){t.clock=M.clockSyncAdapter}if(v?.permissionsSyncAdapter){t.permissions=v.permissionsSyncAdapter}if(q?.lifecycleSyncAdapter){t.lifecycle=q.lifecycleSyncAdapter}if(k?.locationSyncAdapter){t.location=k.locationSyncAdapter}if(R?.notificationSyncAdapter){t["push-notifications"]=R.notificationSyncAdapter}if(x?.sentrySyncAdapter){t.sentry=x.sentrySyncAdapter}try{const o=require("@buoy-gg/time-machine");if(o?.timeMachineSyncAdapter){t["time-machine"]=o.timeMachineSyncAdapter}}catch(o){r("@buoy-gg/time-machine",o)}try{const o=require("@buoy-gg/scenarios");if(o?.scenariosSyncAdapter){t.scenarios=o.scenariosSyncAdapter}}catch(o){r("@buoy-gg/scenarios",o)}try{const o=require("@buoy-gg/ask-buoy");if(o?.askBuoySyncAdapter){t["ask-buoy"]=o.askBuoySyncAdapter}}catch(o){r("@buoy-gg/ask-buoy",o)}if(j?.createEnvSyncAdapter){t.env=j.createEnvSyncAdapter(n??[])}if(E?.highlightUpdatesSyncAdapter){t["highlight-updates"]=E.highlightUpdatesSyncAdapter}if(L?.debugBordersSyncAdapter){t["debug-borders"]=L.debugBordersSyncAdapter}if(I?.impersonateSyncAdapter){t.impersonate=I.impersonateSyncAdapter}if(w?.perfMonitorSyncAdapter){t["perf-monitor"]=w.perfMonitorSyncAdapter}if(T?.jsTopSyncAdapter){t["js-top"]=T.jsTopSyncAdapter}if(_?.imagesSyncAdapter){t.images=_.imagesSyncAdapter}if(z?.assetsSyncAdapter){t.assets=z.assetsSyncAdapter}if(B?.tvRemoteSyncAdapter){t["tv-remote"]=B.tvRemoteSyncAdapter}if(D?.focusInspectorSyncAdapter){t["focus-inspector"]=D.focusInspectorSyncAdapter}for(const o of c??[]){if(o?.sync){t[`custom:${o.id}`]=o.sync}}return t},[e,n,c])}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export const SDK_VERSION="7.0.
|
|
1
|
+
"use strict";export const SDK_VERSION="7.0.77";
|
|
@@ -34,6 +34,21 @@ export interface BuoyConfig {
|
|
|
34
34
|
}
|
|
35
35
|
/** Whether the anonymous install ping is allowed to fire. */
|
|
36
36
|
export declare function isTelemetryEnabled(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* The key `buoy login` wrote, used when the app passes none. Expo puts
|
|
39
|
+
* `EXPO_PUBLIC_*` values on `process.env` in development, including for code
|
|
40
|
+
* in node_modules. Next.js swaps in `NEXT_PUBLIC_*` values when it bundles.
|
|
41
|
+
* Each name is written out in full so the bundler can find it.
|
|
42
|
+
*/
|
|
43
|
+
export declare function defaultLicenseKey(): string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Start the account check with the env key while Buoy loads, the way a
|
|
46
|
+
* top-level `Buoy.init()` would. The Network tool decides whether to keep
|
|
47
|
+
* start-up calls as it loads, and only does while a check is running; a key
|
|
48
|
+
* applied later, from a React effect, lost the app's first calls.
|
|
49
|
+
* `Buoy.init()` and the `licenseKey` prop run later, so they still win.
|
|
50
|
+
*/
|
|
51
|
+
export declare function applyDefaultLicenseKey(): void;
|
|
37
52
|
/**
|
|
38
53
|
* Buoy SDK namespace
|
|
39
54
|
*
|
|
@@ -12,10 +12,16 @@ export interface BuoyDevToolsProps extends FloatingDevToolsProps {
|
|
|
12
12
|
* browser it's a development build.
|
|
13
13
|
*/
|
|
14
14
|
export declare function shouldShowBuoy(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* The key `buoy login` writes: `VITE_BUOY_KEY` in a Vite app, `NEXT_PUBLIC_BUOY_KEY`
|
|
17
|
+
* in Next.js. Each bundler fills in its own expression; the other stays empty.
|
|
18
|
+
*/
|
|
19
|
+
export declare function bundlerKey(): string | undefined;
|
|
15
20
|
/**
|
|
16
21
|
* Buoy with no setup: shows in debug and development builds, loads every
|
|
17
|
-
* installed tool (with the `buoy()` plugin from `@buoy-gg/core/vite`),
|
|
18
|
-
* stays out of other builds. Takes every
|
|
22
|
+
* installed tool (with the `buoy()` plugin from `@buoy-gg/core/vite`), reads
|
|
23
|
+
* the key `buoy login` wrote, and stays out of other builds. Takes every
|
|
24
|
+
* `FloatingDevTools` prop.
|
|
19
25
|
*/
|
|
20
26
|
export declare function BuoyDevTools({ enabled, ...props }: BuoyDevToolsProps): import("react").FunctionComponentElement<import("react").SuspenseProps> | null;
|
|
21
27
|
//# sourceMappingURL=auto.web.d.ts.map
|
|
@@ -236,12 +236,14 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
|
|
|
236
236
|
/** @deprecated Account access is always required for Free and Pro users. */
|
|
237
237
|
requireLicense?: boolean;
|
|
238
238
|
/**
|
|
239
|
-
*
|
|
240
|
-
*
|
|
239
|
+
* The dev token `npx --package=@buoy-gg/core buoy login` writes to your env
|
|
240
|
+
* file, or a Buoy key. Buoy reads `EXPO_PUBLIC_BUOY_KEY` and
|
|
241
|
+
* `NEXT_PUBLIC_BUOY_KEY` for you; pass this for other setups, like Vite.
|
|
242
|
+
* Test and store builds sign in with `signIn` instead.
|
|
241
243
|
*
|
|
242
244
|
* @example
|
|
243
245
|
* ```tsx
|
|
244
|
-
* <FloatingDevTools licenseKey=
|
|
246
|
+
* <FloatingDevTools licenseKey={import.meta.env.VITE_BUOY_KEY} />
|
|
245
247
|
* ```
|
|
246
248
|
*/
|
|
247
249
|
licenseKey?: string;
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* Drift is prevented by a test that fails when this disagrees with
|
|
10
10
|
* package.json, so a version bump that forgets this file cannot ship.
|
|
11
11
|
*/
|
|
12
|
-
export declare const SDK_VERSION = "7.0.
|
|
12
|
+
export declare const SDK_VERSION = "7.0.77";
|
|
13
13
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -34,6 +34,21 @@ export interface BuoyConfig {
|
|
|
34
34
|
}
|
|
35
35
|
/** Whether the anonymous install ping is allowed to fire. */
|
|
36
36
|
export declare function isTelemetryEnabled(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* The key `buoy login` wrote, used when the app passes none. Expo puts
|
|
39
|
+
* `EXPO_PUBLIC_*` values on `process.env` in development, including for code
|
|
40
|
+
* in node_modules. Next.js swaps in `NEXT_PUBLIC_*` values when it bundles.
|
|
41
|
+
* Each name is written out in full so the bundler can find it.
|
|
42
|
+
*/
|
|
43
|
+
export declare function defaultLicenseKey(): string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Start the account check with the env key while Buoy loads, the way a
|
|
46
|
+
* top-level `Buoy.init()` would. The Network tool decides whether to keep
|
|
47
|
+
* start-up calls as it loads, and only does while a check is running; a key
|
|
48
|
+
* applied later, from a React effect, lost the app's first calls.
|
|
49
|
+
* `Buoy.init()` and the `licenseKey` prop run later, so they still win.
|
|
50
|
+
*/
|
|
51
|
+
export declare function applyDefaultLicenseKey(): void;
|
|
37
52
|
/**
|
|
38
53
|
* Buoy SDK namespace
|
|
39
54
|
*
|
|
@@ -12,10 +12,16 @@ export interface BuoyDevToolsProps extends FloatingDevToolsProps {
|
|
|
12
12
|
* browser it's a development build.
|
|
13
13
|
*/
|
|
14
14
|
export declare function shouldShowBuoy(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* The key `buoy login` writes: `VITE_BUOY_KEY` in a Vite app, `NEXT_PUBLIC_BUOY_KEY`
|
|
17
|
+
* in Next.js. Each bundler fills in its own expression; the other stays empty.
|
|
18
|
+
*/
|
|
19
|
+
export declare function bundlerKey(): string | undefined;
|
|
15
20
|
/**
|
|
16
21
|
* Buoy with no setup: shows in debug and development builds, loads every
|
|
17
|
-
* installed tool (with the `buoy()` plugin from `@buoy-gg/core/vite`),
|
|
18
|
-
* stays out of other builds. Takes every
|
|
22
|
+
* installed tool (with the `buoy()` plugin from `@buoy-gg/core/vite`), reads
|
|
23
|
+
* the key `buoy login` wrote, and stays out of other builds. Takes every
|
|
24
|
+
* `FloatingDevTools` prop.
|
|
19
25
|
*/
|
|
20
26
|
export declare function BuoyDevTools({ enabled, ...props }: BuoyDevToolsProps): import("react").FunctionComponentElement<import("react").SuspenseProps> | null;
|
|
21
27
|
//# sourceMappingURL=auto.web.d.ts.map
|
|
@@ -236,12 +236,14 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
|
|
|
236
236
|
/** @deprecated Account access is always required for Free and Pro users. */
|
|
237
237
|
requireLicense?: boolean;
|
|
238
238
|
/**
|
|
239
|
-
*
|
|
240
|
-
*
|
|
239
|
+
* The dev token `npx --package=@buoy-gg/core buoy login` writes to your env
|
|
240
|
+
* file, or a Buoy key. Buoy reads `EXPO_PUBLIC_BUOY_KEY` and
|
|
241
|
+
* `NEXT_PUBLIC_BUOY_KEY` for you; pass this for other setups, like Vite.
|
|
242
|
+
* Test and store builds sign in with `signIn` instead.
|
|
241
243
|
*
|
|
242
244
|
* @example
|
|
243
245
|
* ```tsx
|
|
244
|
-
* <FloatingDevTools licenseKey=
|
|
246
|
+
* <FloatingDevTools licenseKey={import.meta.env.VITE_BUOY_KEY} />
|
|
245
247
|
* ```
|
|
246
248
|
*/
|
|
247
249
|
licenseKey?: string;
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* Drift is prevented by a test that fails when this disagrees with
|
|
10
10
|
* package.json, so a version bump that forgets this file cannot ship.
|
|
11
11
|
*/
|
|
12
|
-
export declare const SDK_VERSION = "7.0.
|
|
12
|
+
export declare const SDK_VERSION = "7.0.77";
|
|
13
13
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/web/auto.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{a as
|
|
1
|
+
"use client";import{a as o,e as u}from"./chunks/chunk-LOPXJLVB.mjs";import{createElement as l,lazy as p,Suspense as d,useEffect as m,useState as v}from"react";function n(){if(typeof window>"u")return false;let e=window.Capacitor,t=false;try{t=e?.isNativePlatform?.()===true}catch{t=false}return t?e?.DEBUG===true:typeof u<"u"?!!u:process.env.NODE_ENV!=="production"}o(n,"shouldShowBuoy");function r(){try{let e=import.meta.env.VITE_BUOY_KEY;if(e)return e}catch{}try{let e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}}o(r,"bundlerKey");var a;function s(){return a??(a=p(()=>import("./chunks/FloatingDevTools.web-IIOOVSUC.mjs").then(e=>({default:e.FloatingDevTools})))),a}o(s,"loadHost");function i({enabled:e,...t}){let[c,f]=v(false);if(m(()=>{f(e??n())},[e]),!c)return null;let y=t.licenseKey??r();return l(d,{fallback:null},l(s(),{...t,licenseKey:y}))}o(i,"BuoyDevTools");export{i as BuoyDevTools,r as bundlerKey,n as shouldShowBuoy};
|
package/lib/web/chunks/{FloatingDevTools.web-NMBTDON7.mjs → FloatingDevTools.web-IIOOVSUC.mjs}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{v as o}from"./chunk-
|
|
1
|
+
"use client";import{v as o}from"./chunk-LAJ3HKAL.mjs";import"./chunk-C6HZO5XT.mjs";import"./chunk-D2FYORGY.mjs";import"./chunk-LOPXJLVB.mjs";export{o as FloatingDevTools};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";import{a as ct,b as H,c as U,d as De,e as dt,f as pr,g as Io,h as mr,i as Rl,j as Co,k as Ne}from"./chunk-C6HZO5XT.mjs";import{b as gr,c as fr}from"./chunk-D2FYORGY.mjs";import{a as r,b as ko,e as He}from"./chunk-LOPXJLVB.mjs";import{BuoyPortal as hr,FloatingToolHost as yr}from"@buoy-gg/shared-ui/web/floating";import*as br from"@buoy-gg/license/web";import{LicenseManager as vr,useLicense as zo,sameLicenseKey as Sr,resolveDevBuild as wr,capacitorDebug as xr,isCapacitorNative as Ao,loadCapacitorAppHost as Bo}from"@buoy-gg/license/web";import{AccountSetup as Tr,HintsProvider as Ir,normalizeEnvironment as Cr,registerToolOpener as Ro,setBuoyAppId as Et,startSettingsSync as kr}from"@buoy-gg/shared-ui/web";import{useState as Pt,useMemo as he,useCallback as _e,useEffect as Q,useRef as Mo}from"react";import{useSettings as zr,getToolLabel as ut,getToolDescription as Ar,getToolColor as Do}from"@buoy-gg/floating-tools-react/web";import{persistentStorage as Oe,devToolsStorageKeys as pt,EnvironmentIndicator as Br,EnvironmentSelectorInline as Rr}from"@buoy-gg/shared-ui/web";var Mr=[];function Oo(){return[]}r(Oo,"autoDiscoverWebPresets");function Lt(e=[]){return[...new Map(e.map(t=>[t.id,t])).values()]}r(Lt,"autoDiscoverWithCustom");function mt(e,t){return e.filter(o=>{let i=o.slot||"both";return i==="both"||i===t})}r(mt,"getToolsBySlot");function Eo(e,t){let o=t instanceof Set?t:new Set(t);return e.filter(i=>o.has(i.id))}r(Eo,"getEnabledTools");import{filterTeamTools as Dr,isTeamToolAllowed as Or}from"@buoy-gg/floating-tools-core/web";var Er="No tools are on for your role. Ask your team admin.";import{FloatingTool as Po,FloatingToolDivider as Pr,FloatingToolUserStatus as Lo,getBubbleAnchorPosition as Lr}from"@buoy-gg/shared-ui/web/floating";import{useState as te,useEffect as Ee,useMemo as gt,useRef as ft,useCallback as ht}from"react";var Fo={network:"Network",images:"Images","image-overlay":"Image Overlay",assets:"Assets",query:"React Query",storage:"Storage",env:"Env",console:"Console",events:"Events",redux:"Redux",zustand:"Zustand",jotai:"Jotai","route-events":"Routes","time-machine":"Time Machine",clock:"Clock",permissions:"Permissions","highlight-updates":"Highlight Updates","debug-borders":"Debug Borders","perf-monitor":"Bench HUD","js-top":"JS Top","js-top-modal":"JS Top",impersonate:"Impersonate","perf-monitor-modal":"Bench"};function $o(e,t){return e&&Fo[e]?Fo[e]:t}r($o,"dialAccessibilityLabel");import{getDialLayout as Fr,getAllIconPositions as $r,getGridLineRotations as jr,getIconStaggerInputRange as Nr,MAX_DIAL_SLOTS as Qe,DIAL_ICON_SIZE as Hr,dialAnimationConfig as jo,getDialCSSKeyframesString as _r,getDialCSSAnimationStyles as Wr,dialColors as j,dialStyles as w,withAlpha as No,floatingToolsColors as Ur}from"@buoy-gg/floating-tools-react/web";import{persistentStorage as Ho,monoFont as Ft,ToolBackground as Kr,useToolBackground as Vr}from"@buoy-gg/shared-ui/web";import{memo as qr}from"react";import{RasterLayer as Gr,scatter as Jr,useLoop as Yr,withBgAlpha as Xr}from"@buoy-gg/shared-ui/web";import{Fragment as Qr,jsx as Ze}from"react/jsx-runtime";var Zr=.94,ea=6,ta=2400,yt=3,_o=16,oa=Array.from({length:yt},(e,t)=>Jr(22343^t*40503,_o*4)),Wo=["#FFFFFF","#B3D9FF","#8CB3FF"],Uo=Math.PI/3,Ko=14*Math.PI/180;function Vo(e){let t=Math.min(5,Math.floor(e*6)),o=e*6-t;return t*Uo+Ko/2+o*(Uo-Ko)}r(Vo,"spokeClearAngle");function qo(e){return Math.min(ea,1/(1-e*Zr))}r(qo,"scaleAt");function Go(e){let t=.15+.85*e*e;return e<.06?t*=e/.06:e>.94&&(t*=(1-e)/.06),Math.min(.7,t)}r(Go,"opacityAt");function Jo(e){let t=e/yt,o=[],i=12;for(let d=0;d<=i;d++)o.push(d/i);let n=(1-t)%1;n>.001&&n<1-.001&&o.push(n-1e-4,n+1e-4),o.sort((d,u)=>d-u);let s=[],l=[],c=[];for(let d of o){let u=t===0&&d===1?1:(d+t)%1;s.push(d),l.push(qo(u)),c.push(Go(u))}return{input:s,scale:l,opacity:c}}r(Jo,"shellStops");var na=Array.from({length:yt},(e,t)=>Jo(t)),ia=qr(r(function({size:e}){let t=Yr(ta),o=e/2,i=[];for(let n=0;n<yt;n++){let s=oa[n],l=na[n],c=[];for(let d=0;d<_o;d++){let u=Vo(s[d*4]),g=(.15+.85*Math.sqrt(s[d*4+1]))*.5*o,S=Wo[Math.floor(s[d*4+3]*Wo.length)%3],h=o+Math.cos(u)*g,B=o+Math.sin(u)*g,I=.6,R=I*2.4;c.push(Ze(H,{style:{position:"absolute",left:h-R/2,top:B-R/2,width:R,height:R,borderRadius:R/2,backgroundColor:Xr(S,.3)}},`${d}-h`),Ze(H,{style:{position:"absolute",left:h-I/2,top:B-I/2,width:I,height:I,borderRadius:I/2,backgroundColor:S}},d))}i.push(Ze(De.View,{style:{position:"absolute",left:0,top:0,width:e,height:e,opacity:t.interpolate({inputRange:l.input,outputRange:l.opacity}),transform:[{scale:t.interpolate({inputRange:l.input,outputRange:l.scale})}]},pointerEvents:"none",children:Ze(Gr,{style:{width:e,height:e},raster:false,children:c})},n))}return Ze(Qr,{children:i})},"DialHyperspace"));import{useEffect as ra,useState as Yo}from"react";import{dialColors as We,withAlpha as Xo}from"@buoy-gg/floating-tools-react/web";import{ARROW_BOTTOM_OFFSET as aa,ARROW_HEIGHT as sa,SPACING_GAP as Yl,getScreenCenterY as Xl,calculateTooltipPosition as la,calculateTargetPosition as Ql}from"@buoy-gg/shared-ui/web/floating";import{monoFont as Qo}from"@buoy-gg/shared-ui/web";import{jsx as Ue,jsxs as Zo}from"react/jsx-runtime";var en=false;function tn(){if(en||typeof document>"u")return;let e=document.createElement("style");e.textContent=`
|
|
2
|
+
@keyframes buoyOnboardPulse {
|
|
3
|
+
0%, 100% { transform: scale(1); }
|
|
4
|
+
50% { transform: scale(1.02); }
|
|
5
|
+
}
|
|
6
|
+
@keyframes buoyOnboardArrowBounce {
|
|
7
|
+
0%, 100% { transform: translateY(0); }
|
|
8
|
+
50% { transform: translateY(-8px); }
|
|
9
|
+
}
|
|
10
|
+
`,document.head.appendChild(e),en=true}r(tn,"injectOnboardingKeyframes");var $t=We.accent;function jt({title:e,message:t,onDismiss:o,showArrow:i=true}){let[n,s]=Yo(false),[l,c]=Yo(false);ra(()=>{tn();let u=requestAnimationFrame(()=>s(true));return()=>cancelAnimationFrame(u)},[]);let d={fontFamily:Qo,textTransform:"uppercase"};return Ue("div",{style:{position:"fixed",left:"50%",bottom:la(),transform:`translateX(-50%) scale(${n?1:.8})`,opacity:n?1:0,transition:"transform 300ms cubic-bezier(0.34, 1.3, 0.64, 1), opacity 300ms ease",zIndex:10002,pointerEvents:"auto"},children:Zo("div",{style:{position:"relative",animation:n?"buoyOnboardPulse 3s ease-in-out infinite":"none"},children:[Ue("div",{style:{position:"absolute",inset:-4,borderRadius:18,backgroundColor:"#FFFFFF",opacity:.06}}),Zo("div",{style:{position:"relative",maxWidth:280,backgroundColor:We.dialBackground,borderRadius:16,border:`1px solid ${We.dialBorder}`,padding:20,boxShadow:`0 0 20px ${Xo(We.dialShadow,.6)}`,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[Ue("span",{style:{...d,fontSize:16,fontWeight:900,letterSpacing:1,color:$t,textAlign:"center"},children:e}),Ue("span",{style:{fontFamily:Qo,fontSize:13,lineHeight:"20px",color:We.centerText,textAlign:"center"},children:t}),Ue("button",{onClick:o,onPointerDown:()=>c(true),onPointerUp:()=>c(false),onPointerLeave:()=>c(false),onPointerCancel:()=>c(false),style:{...d,marginTop:8,borderRadius:8,border:"none",backgroundColor:$t,padding:"10px 24px",fontSize:14,fontWeight:900,letterSpacing:1.5,color:"#000000",cursor:"pointer",opacity:l?.7:1,transform:l?"scale(0.96)":"scale(1)",transition:"transform 100ms ease, opacity 100ms ease"},children:"Got it!"})]}),i&&Ue("div",{style:{position:"absolute",left:"50%",bottom:aa,marginLeft:-12,width:0,height:0,borderLeft:"12px solid transparent",borderRight:"12px solid transparent",borderTop:`${sa}px solid ${$t}`,filter:`drop-shadow(0 0 10px ${Xo(We.dialShadow,.5)})`,animation:n?"buoyOnboardArrowBounce 1.6s ease-in-out infinite":"none"}})]})})}r(jt,"OnboardingTooltip");import{Fragment as ca,jsx as P,jsxs as we}from"react/jsx-runtime";var da={x:.5,y:.5},on="@react_buoy_settings_tooltip_shown",nn=false;function rn(){if(nn||typeof document>"u")return;let e=document.createElement("style");e.textContent=_r(),document.head.appendChild(e),nn=true}r(rn,"injectKeyframes");var Ke=r(e=>1-Math.pow(1-e,3),"easeOutCubic"),Nt=r(e=>e*e*e,"easeInCubic");function an({icon:e,index:t,totalIcons:o,position:i,progress:n,onPress:s}){let[l,c]=te(false),[d,u]=te(false),g=!e.icon&&e.id.startsWith("empty-"),S=!g&&e.unavailable===true,h=!g&&!S,{icons:B}=jo,I=Nr(t,o),R=0;n<=I[1]?R=0:n<=I[2]?R=(n-I[1])/(I[2]-I[1]):R=1,R=Math.max(0,Math.min(1,R));let L=Hr,D=B.pressIn.scale,E=R*(d?D:l?1.1:1),z=0;R<=0?z=0:R<=.3?z=R:z=.3+(R-.3)*(.7/.7);let v=i.x*(R-1),C=i.y*(R-1);return P("button",{role:"menuitem","aria-label":g?"Empty slot":$o(e.id,e.name),"data-testid":e.id?`buoy-dial-${e.id}`:void 0,"aria-disabled":!h,tabIndex:h?0:-1,onClick:h?s:void 0,onPointerEnter:F=>h&&F.pointerType==="mouse"&&c(true),onPointerLeave:()=>{c(false),u(false)},onPointerDown:()=>h&&u(true),onPointerUp:()=>u(false),onPointerCancel:()=>u(false),style:{position:"absolute",left:`calc(50% + ${i.x}px)`,top:`calc(50% + ${i.y}px)`,width:L,height:L,marginLeft:-L/2,marginTop:-L/2,cursor:h?"pointer":"default",background:"none",border:"none",padding:0},children:P("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${v}px, ${C}px) scale(${E})`,opacity:z,transition:l||d?"transform 100ms ease":"none"},children:g?P("div",{style:{width:w.emptySlot.dotSize,height:w.emptySlot.dotSize,borderRadius:w.emptySlot.dotSize/2,backgroundColor:j.emptyDotBackground,border:`${w.emptySlot.borderWidth}px solid ${j.emptyDotBorder}`}}):we(ca,{children:[P("div",{style:{position:"absolute",width:`${w.icon.gradientBgSizePercent}%`,height:`${w.icon.gradientBgSizePercent}%`,borderRadius:w.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:w.icon.gradientBgOpacity}}),P("div",{style:{position:"absolute",width:`${w.icon.innerGlowSizePercent}%`,height:`${w.icon.innerGlowSizePercent}%`,borderRadius:w.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:w.icon.innerGlowOpacity}}),P("div",{style:{marginBottom:w.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:l?"brightness(1.2)":"none"},children:e.icon}),P("span",{style:{fontSize:e.name.length>8?Math.max(w.icon.label.fontSize*.7,w.icon.label.fontSize*8/e.name.length):w.icon.label.fontSize,fontWeight:w.icon.label.fontWeight,fontFamily:w.icon.label.fontFamily,color:j.iconLabel,letterSpacing:w.icon.label.letterSpacing,marginTop:w.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:e.name}),S&&P("span",{style:{fontSize:w.icon.label.fontSize-1,fontWeight:w.icon.label.fontWeight,fontFamily:w.icon.label.fontFamily,letterSpacing:w.icon.label.letterSpacing,color:Ur.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}r(an,"DialIconItem");function Ht({side:e,color:t}){return P("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:(e==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]]).map(([o,i,n,s],l)=>P("line",{x1:o,y1:i,x2:n,y2:s,stroke:t,strokeWidth:2},l))})}r(Ht,"PagerChevron");function _t({side:e,disabled:t,onClick:o}){let[i,n]=te(false),s=t?j.emptyDotBorder:j.accent;return we("button",{type:"button","aria-label":`${e==="prev"?"Previous":"Next"} dial page`,"data-testid":`buoy-dial-${e}`,disabled:t,onClick:o,onPointerDown:()=>!t&&n(true),onPointerUp:()=>n(false),onPointerLeave:()=>n(false),onPointerCancel:()=>n(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${j.dialBorder}`,backgroundColor:j.dialBackground,color:t?j.iconLabelMuted:j.centerText,fontSize:12,fontWeight:900,fontFamily:Ft,letterSpacing:1.5,textTransform:"uppercase",cursor:t?"default":"pointer",opacity:t?.4:1,boxShadow:t?"none":`0 0 8px ${No(j.dialShadow,.4)}`,transform:i?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[e==="prev"&&P(Ht,{side:"prev",color:s}),e==="prev"?"PREV":"NEXT",e==="next"&&P(Ht,{side:"next",color:s})]})}r(_t,"PagerButton");function Wt({icons:e,onClose:t,centerLabel:o="MENU",onCenterPress:i,settingsOpen:n=false,hintsDisabled:s=false,emptyNote:l}){let{id:c}=Vr(),[d,u]=te(0),[g,S]=te(0),[h,B]=te(0),[I,R]=te(0),[L,D]=te(0),[E,z]=te(1),[v,C]=te(false),[F,M]=te(false),[T,ee]=te(false),V=ft(null),K=ft(null),J=ft(null),q=ft(false),{entrance:ne,exit:Z,interaction:ue}=jo,xe=Wr(),[be,ie]=te(()=>({width:window.innerWidth,height:window.innerHeight}));Ee(()=>{let O=r(()=>ie({width:window.innerWidth,height:window.innerHeight}),"resize");return window.addEventListener("resize",O),()=>window.removeEventListener("resize",O)},[]);let W=gt(()=>Fr({screenWidth:be.width,maxCircleSize:Math.max(120,Math.min(320,be.height-96))}),[be]),me=gt(()=>jr(),[]),Re=gt(()=>$r(Qe,W.iconRadius),[W.iconRadius]),[Te,$e]=te(0),pe=Math.max(1,Math.ceil(e.length/Qe)),oe=Math.min(Te,pe-1),Ie=gt(()=>{let O=oe*Qe,a=[...e.slice(O,O+Qe)];for(;a.length<Qe;)a.push({id:`empty-${a.length}`,name:"",icon:null,onPress:r(()=>{},"onPress")});return a},[e,oe]);Ee(()=>{rn()},[]),Ee(()=>{let O=ne.backdrop.duration,a=ne.dial.rotation.duration,x=ne.centerButton.delay,A=ne.icons.delay,_=ne.icons.duration,G=performance.now(),Y=r(m=>{let f=m-G;u(Math.min(1,f/O));let k=Math.min(1,f/400),X=Ke(k)*1.1;k>.7&&(X-=(k-.7)*.33),k>=1&&(X=1),S(Math.max(0,Math.min(1.05,X)));let se=Math.min(1,f/a);if(B(Ke(se)*360),f>=x){let Se=Math.min(1,(f-x)/300),Ot=Ke(Se)*1.15;Se>.6&&(Ot-=(Se-.6)*.375),Se>=1&&(Ot=1),R(Math.max(0,Math.min(1.05,Ot)))}if(f>=A){let Se=Math.min(1,(f-A)/_);D(Ke(Se))}let Xe=A+_;f<Xe?J.current=requestAnimationFrame(Y):(u(1),S(1),B(360),R(1),D(1),ee(true))},"animate");return J.current=requestAnimationFrame(Y),()=>{J.current&&cancelAnimationFrame(J.current)}},[]);let ge=ht(()=>{if(q.current)return;q.current=true,M(true),J.current&&cancelAnimationFrame(J.current);let O=performance.now(),a=Z.icons.duration,x=Z.centerButton.duration,A=Z.dialScale.duration,_=Math.max(x,A),G=Z.backdrop.duration,Y=r(m=>{let f=m-O;if(f<a){let se=Nt(f/a);D(1-se),J.current=requestAnimationFrame(Y);return}let k=a;if(f<k+_){D(0);let se=Math.min(1,(f-k)/x),Xe=Math.min(1,(f-k)/A);R(1-Nt(se)),S(1-Nt(Xe)),J.current=requestAnimationFrame(Y);return}let X=k+_;if(f<X+G){S(0),R(0);let se=(f-X)/G;u(1-se),J.current=requestAnimationFrame(Y);return}u(0),t()},"animate");J.current=requestAnimationFrame(Y)},[Z,t]);Ee(()=>{let O=document.activeElement,a=V.current;return()=>{O?.isConnected&&(document.activeElement===document.body||a?.contains(document.activeElement))&&O.focus()}},[]),Ee(()=>{if(n)return;K.current?.focus();let O=r(a=>{let x=V.current;if(x){if(a.key==="Escape")a.preventDefault(),ge();else if(a.key==="Tab"){let A=Array.from(x.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(Y=>Y.getClientRects().length>0),_=A[0],G=A[A.length-1];(!x.contains(document.activeElement)||(a.shiftKey?document.activeElement===_:document.activeElement===G))&&(a.preventDefault(),(a.shiftKey?G:_)?.focus())}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(a.key)){let A=Array.from(x.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')),_=A.indexOf(document.activeElement);if(_<0||!A.length)return;a.preventDefault();let G=a.key==="Home"?0:a.key==="End"?A.length-1:(_+(a.key==="ArrowRight"||a.key==="ArrowDown"?1:-1)+A.length)%A.length;A[G].focus()}}},"handleKeyDown");return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[ge,n]);let[ae,Ce]=te(false);Ee(()=>{if(s)return;let O=false,a=setTimeout(async()=>{let x=await Ho.getItem(on);!O&&!x&&Ce(true)},1200);return()=>{O=true,clearTimeout(a)}},[s]);let ke=ht(()=>{Ce(false),Ho.setItem(on,"true")},[]);Ee(()=>{n&&ae&&ke()},[n,ae,ke]);let Ye=ht(O=>{if(O.id.startsWith("empty-")||q.current)return;let[a,x]=ue.iconSelect.pulse,A=performance.now(),_=150,G=r(Y=>{let m=Y-A;if(m<_){let f=Ke(m/_);z(1-(1-a.scale)*f),requestAnimationFrame(G)}else if(m<_*2){let f=Ke((m-_)/_);z(a.scale+(x.scale-a.scale)*f),requestAnimationFrame(G)}else z(1)},"animatePulse");requestAnimationFrame(G),setTimeout(()=>{O.onPress(),ge()},ue.iconSelect.actionDelay)},[ue.iconSelect,ge]),je=ht(O=>{if(q.current)return;let a=Math.max(0,Math.min(O,pe-1));a!==oe&&$e(a)},[pe,oe]),ve=W.buttonSize*w.centerButton.containerRatio,Me=W.buttonSize*w.centerButton.borderRatio,fe=W.buttonSize*w.centerButton.containerRatio/2+6,ze=T&&!F;return we("div",{ref:V,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[P("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:ge,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:j.dialBackdrop,opacity:d}}),l?P("div",{role:"status","data-testid":"buoy-dial-empty-note",style:{position:"absolute",left:16,right:16,bottom:80+W.circleSize+16,color:j.iconLabel,fontSize:12,fontFamily:Ft,textAlign:"center",opacity:g>.01?1:0},children:l}):null,we("div",{style:{position:"absolute",left:"50%",marginLeft:-W.circleSize/2,bottom:80,width:W.circleSize,height:W.circleSize,borderRadius:"50%",backgroundColor:j.dialBackground,border:`${w.circle.borderWidth}px solid ${j.dialBorder}`,boxShadow:`0 0 ${w.circle.shadowRadius}px ${No(j.dialShadow,w.circle.shadowOpacity)}`,transform:`scale(${g}) rotate(${h}deg)`,opacity:g>.01?1:0,overflow:"hidden"},children:[P("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:j.dialGradient1,opacity:w.gradientLayers[0].opacity}}),P("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:j.dialGradient2,opacity:w.gradientLayers[1].opacity}}),P("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:j.dialGradient3,opacity:w.gradientLayers[2].opacity}}),me.map(O=>P("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:w.grid.lineHeight,transform:`rotate(${O}deg)`,transformOrigin:"center"},children:["left","right"].map(a=>P("div",{style:{position:"absolute",top:0,[a]:0,width:`calc(50% - ${fe}px)`,height:w.grid.lineHeight,backgroundColor:j.dialGridLine}},a))},O)),P("div",{"data-testid":"dial-background","data-background":c,style:{position:"absolute",inset:0,pointerEvents:"none"},children:c==="hyperspace"?P(ia,{size:W.circleSize}):P(Kr,{focus:da})}),Ie.map((O,a)=>P(an,{icon:O,index:a,totalIcons:Ie.length,position:Re[a],progress:L,onPress:()=>Ye(O)},a)),we("div",{style:{position:"absolute",left:"50%",top:"50%",width:ve,height:ve,marginLeft:-ve/2,marginTop:-ve/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:j.hubHalo,borderRadius:W.buttonSize,overflow:"hidden",transform:`scale(${I*E})`,opacity:I>.01?1:0},children:[P("div",{style:{position:"absolute",inset:0,backgroundColor:j.dialGradient1,opacity:.5,borderRadius:W.buttonSize}}),P("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:j.dialGradient2,opacity:.3,borderRadius:W.buttonSize}}),P("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:j.dialGradient3,opacity:.2,borderRadius:W.buttonSize}}),P("div",{style:{width:Me,height:Me,borderRadius:W.buttonSize*w.centerButton.borderRadiusRatio,backgroundColor:j.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:P("button",{ref:K,type:"button","aria-label":n?"Close Settings":"Open Dev Tools Settings",disabled:!i,onClick:i,onPointerEnter:O=>O.pointerType==="mouse"&&C(true),onPointerLeave:()=>C(false),style:{border:0,padding:0,background:"transparent",width:W.buttonSize,height:W.buttonSize,borderRadius:W.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:i?"pointer":"default",transform:v?`scale(${ue.centerHover.scale})`:"scale(1)",transition:`transform ${ue.centerHover.duration}ms ease`,animation:ze&&!v?xe.pulse:"none"},children:n?we("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:w.centerButton.text.fontSize-2,fontWeight:w.centerButton.text.fontWeight,fontFamily:w.centerButton.text.fontFamily,color:j.centerText,letterSpacing:w.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${j.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[P("span",{style:{marginBottom:-2},children:"CLOSE"}),P("span",{style:{marginTop:-2},children:"SETTINGS"})]}):P("span",{style:{fontSize:w.centerButton.text.fontSize,fontWeight:w.centerButton.text.fontWeight,fontFamily:w.centerButton.text.fontFamily,color:j.centerText,letterSpacing:w.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${j.centerTextGlow}`,textTransform:"uppercase"},children:o})})})]})]}),pe>1&&we("div",{style:{position:"absolute",left:"50%",marginLeft:-W.circleSize/2,top:"calc(100% - 64px)",width:W.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,g),transform:`scale(${Math.min(1,g)})`},children:[P(_t,{side:"prev",disabled:oe<=0,onClick:()=>je(oe-1)}),we("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:Ft,letterSpacing:2,color:j.centerText,textShadow:`0 0 6px ${j.centerTextGlow}`},children:[String(oe+1).padStart(2,"0"),we("span",{style:{color:j.iconLabelMuted,textShadow:"none"},children:[" / ",String(pe).padStart(2,"0")]})]}),P(_t,{side:"next",disabled:oe>=pe-1,onClick:()=>je(oe+1)})]}),ae&&!n&&P(jt,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:ke,showArrow:false})]})}r(Wt,"DialMenu");import{persistentStorage as sn,devToolsStorageKeys as ua}from"@buoy-gg/shared-ui/web";import{recordUsage as pa,pruneUsage as ma}from"@buoy-gg/floating-tools-core/web";var ln=ua.dial.usage(),Ve={},cn=false,Ut=null;function Kt(){return Ut||(Ut=(async()=>{try{let e=await sn.getItem(ln);if(e){let t=JSON.parse(e);t&&typeof t=="object"&&(Ve=t)}}catch{}finally{cn=true}})(),Ut)}r(Kt,"loadDialUsage");Kt();function dn(e){return e.map((t,o)=>({id:t,index:o,lastUsed:Ve[t]?.lastUsed??0})).sort((t,o)=>o.lastUsed-t.lastUsed||t.index-o.index).map(({id:t})=>t)}r(dn,"getRankedToolIds");async function un(e){if(!e)return;cn||await Kt();let t=Math.max(Date.now(),...Object.values(Ve).map(o=>o.lastUsed+1));Ve=ma(pa(Ve,e,t),t);try{await sn.setItem(ln,JSON.stringify(Ve))}catch{}}r(un,"recordToolUsage");import{useCallback as ga,useMemo as pn}from"react";import{persistentStorage as fa}from"@buoy-gg/shared-ui/web";import{useState as re,useEffect as Ae,useCallback as bt,useMemo as vt}from"react";import{settingsEventBus as St}from"@buoy-gg/floating-tools-core/web";import{useSyncExternalStore as ha}from"react";import{getRegisteredToolModule as ya}from"@buoy-gg/shared-ui/web";var ba=r(()=>()=>{},"noopSubscribe"),va=r(()=>null,"serverSnapshot");function mn(){let e=ya("@buoy-gg/external-sync");return ha(e?.subscribeSyncStatus??ba,()=>e?.getSyncStatus?.()??null,va)}r(mn,"useDesktopSyncStatus");import{SentryIcon as Sa,WifiCircuitIcon as wa,ImageOverlayIcon as xa,RenderCountIcon as Ta,Info as Vt,Layers as Ia,ChevronRightIcon as gn,ChevronDown as fn,getStorageBackendType as Ca,getUseLicense as ka,signOutOfBuoy as za,persistentStorage as Pe,Trash2 as Aa,CheckCircle2 as hn,BuoyUpgradeSheet as Ba,BackgroundSwitcher as Ra,night as b,NightCard as Le,NightRows as qt,NightSectionLabel as Ma,NightFootnote as yn,NightSwitch as bn,NightButton as Gt,NightSegmented as Da,NightBadge as ye,NightSeparator as Oa,monoFont as vn}from"@buoy-gg/shared-ui/web";import{EnvIcon as Sn,StorageIcon as Ea,RoutesIcon as Pa,NetworkIcon as La,QueryIcon as Fa,HighlighterIcon as $a,ReduxIcon as ja,EventsIcon as Na}from"@buoy-gg/floating-tools-core/web";import Ha,{createContext as _a,useContext as Wa}from"react";import{jsx as Ua}from"react/jsx-runtime";var wn=_a({});function Jt({children:e,defaultFloatingTools:t,defaultDialTools:o}){let i=Ha.useMemo(()=>({defaultFloatingTools:t,defaultDialTools:o}),[t,o]);return Ua(wn.Provider,{value:i,children:e})}r(Jt,"DefaultConfigProvider");function Yt(){return Wa(wn)}r(Yt,"useDefaultConfig");import Ka from"react";import{toolTheme as Va}from"@buoy-gg/shared-ui/web";import{jsx as xn}from"react/jsx-runtime";function Tn({label:e,size:t,color:o=Va.colors.text}){let i=Math.max(Array.from(e.replace(/[\uFE00-\uFE0F\u200D]/g,"")).length,1),n=i<=2?t:t*1.6,s=Math.max(7,Math.min(t*(i===1?.7:.62),n/(.62*i)));return xn("span",{style:{display:"inline-flex",minWidth:t,maxWidth:n,height:t,alignItems:"center",justifyContent:"center",color:o,fontSize:s,fontWeight:800,letterSpacing:.5,whiteSpace:"nowrap",overflow:"hidden"},children:e})}r(Tn,"AppTextIcon");function Xt(e,t){return e==null?e:typeof e=="function"?Ka.createElement(e,{slot:t.slot,size:t.size,state:t.state,actions:t.actions}):typeof e=="string"||typeof e=="number"?xn(Tn,{label:String(e),size:t.size,color:t.color}):e}r(Xt,"renderAppIcon");import{JsModal as qa,devToolsStorageKeys as Qt,onSettingsApplied as Ga,expandableWindowControlsSupported as Ja}from"@buoy-gg/shared-ui/web";import{useSafeAreaInsets as Ya}from"@buoy-gg/shared-ui/web";import{Fragment as et,jsx as p,jsxs as N}from"react/jsx-runtime";var qe="@react_buoy_dev_tools_settings",Xa=6,wt=r(e=>{let t=Xa,o={};for(let[i,n]of Object.entries(e))n&&t>0?(o[i]=true,t-=1):o[i]=false;return o},"enforceDialLimit"),Qa=r((e,t)=>{let{userStatus:o,environment:i,...n}=e,s=t?Object.entries(n).filter(([l])=>t.includes(l)):Object.entries(n);return{...Object.fromEntries(s),environment:i??false}},"sanitizeFloating"),In=r((e,t,o)=>{if(!t)return e;let i={...e.dialTools,...t.dialTools??{}},n=o?.allowedDialKeys?Object.entries(i).filter(([s])=>o.allowedDialKeys?.includes(s)):Object.entries(i);return{dialTools:wt(Object.fromEntries(n)),floatingTools:Qa({...e.floatingTools,...t.floatingTools??{}},o?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true,...t.globalSettings??{}}}},"mergeWithDefaults"),Za=r((e=[],t,o)=>{let i={},n={},s=new Set(t??[]),l=new Set(o??[]),c=!o||o.length===0;for(let d of e){let{id:u,slot:g="both"}=d;(g==="dial"||g==="both")&&(i[u]=c?true:l.has(u)),(g==="row"||g==="both")&&(n[u]=s.has(u))}return{dialTools:wt(i),floatingTools:{...n,environment:s.has("environment")},globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true}}},"generateDefaultSettings"),es=r(({visible:e,onClose:t,onSettingsChange:o,initialSettings:i,availableApps:n=[],storage:s=Pe,zIndex:l})=>{let{defaultFloatingTools:c,defaultDialTools:d}=Yt(),u=vt(()=>Za(n,c,d),[n,c,d]),g=vt(()=>Object.keys(u.dialTools),[u]),S=vt(()=>Object.keys(u.floatingTools).filter(m=>m!=="environment"),[u]),[h,B]=re(i||tt||u),[I,R]=re(Zt??"floating"),[L,D]=re(Zt!==null),[E,z]=re(new Set),[v,C]=re(false),[F,M]=re(false);Ae(()=>{let m=requestAnimationFrame(()=>M(true));return()=>cancelAnimationFrame(m)},[]);let T=mn();Ae(()=>{r(async()=>{try{let m=await Pe.getItem(Qt.settings.activeTab());if(m&&["floating","settings","pro"].includes(m)){let f=m;Zt=f,R(k=>k===f?k:f)}}catch{}finally{D(true)}},"loadActiveTab")()},[]),Ae(()=>{L&&Pe.setItem(Qt.settings.activeTab(),I).catch(m=>{console.warn("[Buoy]","Failed to save settings active tab:",m)})},[I,L]);let ee=ka()?.(),V=ee?.isPro??false,K=!V&&ee?.licenseKey?ee.error:null,J=ee?.errorKind==="transport",[q,ne]=re(Cn),[Z,ue]=re(false),[xe,be]=re(false),[ie,W]=re(false),[me,Re]=re([]),[Te,$e]=re(false),pe=Ya(),oe=Co.get("window").height,Ie=Co.get("window").width,ge=Math.floor(oe*.33),ae=Math.min(Ie-32,400),Ce=bt(async()=>{try{let m=await s.getItem(qe);if(m){let f=JSON.parse(m),k=In(u,f,{allowedDialKeys:g,allowedFloatingKeys:S});tt=k,B(X=>kn(X,k)?X:k);return}tt=u,B(f=>kn(f,u)?f:u)}catch(m){console.error("[Buoy]","Failed to load dev tools settings:",m),B(u)}},[u,g,S,s]);Ae(()=>{Ce()},[Ce]),Ae(()=>{Ca().then(m=>{Cn=m,ne(f=>f===m?f:m)})},[]),Ae(()=>{ie&&($e(true),Pe.getAllKeys().then(m=>{Re(m.sort())}).catch(()=>{Re([])}).finally(()=>{$e(false)}))},[ie]);let ke=r(async m=>{try{let f=null;try{let X=await s?.getItem(qe);f=X?JSON.parse(X):null}catch{}let k={...m,dialTools:{...f?.dialTools,...wt(m.dialTools)},floatingTools:{...f?.floatingTools,...m.floatingTools}};await s.setItem(qe,JSON.stringify(k)),tt=k,B(k),o?.(k),St.emit(k)}catch(f){console.error("[Buoy]","Failed to save dev tools settings:",f)}},"saveSettings"),Ye=r(m=>{let f={...h,floatingTools:{...h.floatingTools,[m]:!h.floatingTools[m]}};ke(f)},"toggleFloatingTool"),je=r(m=>{let f={...h,globalSettings:{...h.globalSettings,[m]:!h.globalSettings?.[m]}};ke(f)},"toggleGlobalSetting"),ve=r(async()=>{ue(true),be(false);try{await Pe.clear(),be(true),B(u),s!==Pe&&await s.setItem(qe,JSON.stringify(u)),o?.(u),St.emit(u),setTimeout(()=>be(false),2e3)}catch(m){console.error("[Buoy]","Failed to clear storage:",m)}finally{ue(false)}},"handleClearStorage"),Me=bt(m=>{},[]),fe=r(m=>{let f=n.find(k=>k.id===m);return f?.description?f.description:m==="environment"?"Environment badge.":""},"getToolDescription"),ze=r(m=>m==="environment"?"Env Badge":n.find(f=>f.id===m)?.name??m.toUpperCase().replace(/_/g," "),"getToolLabel"),O=r(m=>{if(!F)return null;switch(m){case"query":return p(Fa,{size:18});case"env":return p(Sn,{size:18});case"sentry":return p(Sa,{size:18,color:"#9945FF"});case"storage":return p(Ea,{size:18,bgColor:b.color.surface});case"wifi":case"query-wifi-toggle":return p(wa,{size:18,colorPreset:"green",strength:4,noBackground:true});case"route-events":return p(Pa,{size:18,bgColor:b.color.surface});case"network":return p(La,{size:18});case"environment":return p(Sn,{size:18});case"debug-borders":return p(Ia,{size:18,color:b.color.accent});case"highlight-updates":return p(Ta,{size:18,color:b.color.accent});case"highlight-updates-modal":return p($a,{size:18});case"redux":return p(ja,{size:18});case"image-overlay":return p(xa,{size:18});case"events":return p(Na,{size:18});case"zustand":try{let{ZustandIcon:f}=ko("@buoy-gg/zustand/web");return p(f,{size:18})}catch{return p(Vt,{size:18,color:b.color.textSecondary})}case"jotai":try{let{JotaiIcon:f}=ko("@buoy-gg/jotai/web");return p(f,{size:18})}catch{return p(Vt,{size:18,color:b.color.textSecondary})}default:{let f=n.find(k=>k.id===m);return f?.icon!=null?Xt(f.icon,{slot:"row",size:18,color:f.color}):p(Vt,{size:18,color:b.color.textSecondary})}}},"getToolIcon"),a=r((m,f,k,X)=>{let se=fe(m);return N(dt,{activeOpacity:k?1:.7,onPress:()=>!k&&X(),accessibilityLabel:ze(m),accessibilityRole:"button",style:[y.toolRow,k&&y.rowDisabled],children:[p(H,{style:y.toolIconSlot,children:O(m)}),N(H,{style:y.rowInfo,children:[N(U,{style:y.rowLabel,children:[ze(m),k?" \xB7 max 6":""]}),se?p(U,{style:y.rowCaption,numberOfLines:1,children:se}):null]}),p(bn,{value:f,disabled:k,onValueChange:()=>X(),accessibilityLabel:ze(m)})]},m)},"renderToolRow"),x=r(m=>{z(f=>{let k=new Set(f);return k.has(m)?k.delete(m):k.add(m),k})},"toggleSettingExpanded"),A=r((m,f,k,X,se)=>{let Xe=h.globalSettings?.[m]??false,Se=E.has(m);return N(H,{children:[N(dt,{activeOpacity:.7,onPress:()=>x(m),accessibilityLabel:f,style:y.settingRow,children:[N(H,{style:y.rowInfo,children:[p(U,{style:y.rowLabel,children:f}),p(U,{style:y.rowCaption,numberOfLines:Se?0:1,children:k})]}),p(bn,{value:Xe,onValueChange:()=>je(m),accessibilityLabel:f})]}),Se&&N(H,{style:y.settingRowBody,children:[p(U,{style:y.settingRowBodyText,children:X}),p(U,{style:y.settingRowBodyHint,children:se})]})]},m)},"renderGlobalSettingRow"),_=r((m,f,k)=>N(H,{children:[p(Ma,{children:m}),f,k]}),"renderSection"),G=q==="filesystem"?p(ye,{label:"File System",tone:"accent"}):q==="asyncstorage"?p(ye,{label:"Async Storage",tone:"warning"}):q==="localstorage"?p(ye,{label:"Local Storage",tone:"accent"}):q==="memory"?p(ye,{label:"Memory",tone:"danger"}):p(ye,{label:"Loading\u2026",tone:"neutral"}),Y=r(()=>N(H,{style:y.container,children:[N(Io,{style:y.scrollContent,showsVerticalScrollIndicator:false,contentContainerStyle:y.scrollContainer,children:[I==="floating"&&p(et,{children:_("Floating Tools",p(Le,{glass:true,children:p(qt,{children:Object.entries(h.floatingTools).map(([m,f])=>a(m,f,false,()=>Ye(m)))})}),p(yn,{children:"Tools switched on here appear in the floating bubble row."}))}),I==="settings"&&N(et,{children:[_("Background",p(Le,{glass:true,padded:true,children:p(Ra,{embedded:true})})),_("Storage",N(Le,{glass:true,children:[N(dt,{activeOpacity:.7,onPress:()=>W(!ie),accessibilityLabel:"Storage Type",style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(U,{style:y.rowLabel,children:"Storage Type"})}),G,ie?p(fn,{size:16,color:b.color.textTertiary}):p(gn,{size:16,color:b.color.textTertiary})]}),ie&&N(et,{children:[N(H,{style:y.settingRowBody,children:[p(U,{style:y.settingRowBodyText,children:q==="filesystem"?"Settings persist independently and survive AsyncStorage.clear() calls during logout.":q==="asyncstorage"?"Settings may be lost if AsyncStorage is cleared during logout.":q==="localstorage"?"Settings are saved in this browser. Clearing site data removes them.":q==="memory"?"Settings are stored in memory only and will be lost on app restart.":"Checking storage backend\u2026"}),q==="asyncstorage"&&p(U,{style:[y.settingRowBodyText,y.bodyWarning],children:"Install expo-file-system to persist settings through logout flows."}),q==="memory"&&p(U,{style:[y.settingRowBodyText,y.bodyDanger],children:"No persistent storage available \u2014 install expo-file-system (best) or @react-native-async-storage/async-storage."})]}),p(Oa,{}),N(H,{style:y.storageExpanded,children:[N(H,{style:y.storageExpandedHeader,children:[p(U,{style:y.storageExpandedTitle,children:"SAVED SETTINGS"}),p(U,{style:y.storageExpandedCount,children:Te?"\u2026":`${me.length} keys`})]}),Te?p(U,{style:y.storageKeyEmpty,children:"Loading\u2026"}):me.length===0?p(U,{style:y.storageKeyEmpty,children:"No settings saved yet"}):p(Io,{style:y.storageKeysList,nestedScrollEnabled:true,showsVerticalScrollIndicator:true,children:me.map(m=>p(H,{style:y.storageKeyItem,children:p(U,{style:y.storageKeyText,numberOfLines:1,children:m.replace("@react_buoy_","")})},m))})]}),p(H,{style:y.cardButtonWrap,children:p(Gt,{label:xe?"Cleared":Z?"Clearing\u2026":"Clear All Settings",variant:xe?"secondary":"destructive",size:"md",disabled:Z,onPress:ve,icon:xe?p(hn,{size:15,color:b.color.accent}):p(Aa,{size:15,color:Z?b.color.textTertiary:b.color.danger})})})]})]})),T&&T.state!=="idle"&&_("Desktop Sync",N(Le,{glass:true,children:[N(dt,{activeOpacity:.7,onPress:()=>x("desktopSync"),accessibilityLabel:"Buoy Desktop",style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(U,{style:y.rowLabel,children:"Buoy Desktop"})}),T.state==="connected"?p(ye,{label:"Connected",tone:"accent"}):T.state==="connecting"?p(ye,{label:"Connecting\u2026",tone:"neutral"}):p(ye,{label:"Retrying",tone:"warning"}),E.has("desktopSync")?p(fn,{size:16,color:b.color.textTertiary}):p(gn,{size:16,color:b.color.textTertiary})]}),E.has("desktopSync")&&N(H,{style:y.settingRowBody,children:[N(U,{style:y.settingRowBodyText,children:[T.state==="connected"?"Streaming tool data to Buoy Desktop at ":"Trying to reach Buoy Desktop at ",p(U,{style:y.footnoteMono,children:T.targetURL??"(unknown URL)"}),T.state!=="connected"&&" \u2014 is the desktop app running? Override with the externalSync socketURL option if it runs elsewhere."]}),T.state==="retrying"&&T.lastError&&N(U,{style:[y.settingRowBodyText,y.bodyWarning],children:["Last error: ",T.lastError]})]})]})),_("Modal Behavior",p(Le,{glass:true,children:N(qt,{children:[A("enableSharedModalDimensions","Shared Modal Size","Sync dimensions across all tools","When enabled, all tool modals will share the same size and position. Resizing one modal will affect all others. When disabled, each tool remembers its own size and position independently.","Keep OFF for the best experience. This allows you to customize each tool's modal size separately."),Ja(Ne.OS==="web")?A("expandableWindowControls","Expand Controls","iPad-style expandable window buttons","When enabled, the window control buttons (minimize, toggle mode, close) start as small dots and expand into larger, easy-to-tap buttons when pressed. When disabled, buttons are directly tappable at their small size.","Keep ON for touch devices where the small buttons are hard to press. Turn OFF if you prefer direct single-tap access."):null]})}))]}),I==="pro"&&N(et,{children:[_("License",N(Le,{glass:true,children:[N(H,{style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(U,{style:y.rowLabel,children:"License Status"})}),p(H,{testID:"buoy-settings-license-status",accessibilityLabel:V?"License: Active":"License: Free",children:V?p(ye,{label:"Active",tone:"accent"}):p(ye,{label:"Free",tone:"neutral"})})]}),ee?.tierSource==="session"?N(H,{style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(U,{style:y.rowLabel,children:"Signed in with Buoy"})}),p(Gt,{label:"Sign out",variant:"secondary",size:"md",onPress:()=>void za(),testID:"buoy-settings-signout"})]}):null,ee?.teamRole?p(H,{style:y.settingRow,testID:"buoy-settings-team-role",children:N(H,{style:y.rowInfo,children:[N(U,{style:y.rowLabel,children:["Role: ",ee.teamRole]}),p(U,{style:y.rowCaption,children:ee.allowedTools?"Your team picks the tools you see.":"You see all tools."})]})}):null]}),p(yn,{children:V?"You have full access to all Buoy DevTools features.":K?J?`Couldn't reach the license server (${K}). A VPN or corporate proxy can block buoy.gg \u2014 turn it off and reload. Your key hasn't been rejected.`:`License check failed: ${K}.`:"Upgrade to Pro to unlock all features and support development."})),!V&&N(et,{children:[_("Pro Features",p(Le,{glass:true,children:p(qt,{children:["Advanced Settings","Priority Support"].map(m=>N(H,{style:y.featureRow,children:[p(hn,{size:16,color:b.color.accent}),p(U,{style:y.rowLabel,children:m})]},m))})})),p(Gt,{label:"Upgrade to Pro",variant:"primary",size:"lg",onPress:()=>C(true)})]})]})]}),p(Ba,{visible:v,onClose:()=>C(false)})]}),"renderContent");return p(qa,{visible:e,onClose:t,zIndex:l,variant:"night",header:{showToggleButton:false,customContent:p(H,{style:y.headerRow,children:p(Da,{glass:true,tabs:[{key:"floating",label:"Floating"},{key:"settings",label:"Settings"},{key:"pro",label:"Pro"}],activeKey:I,onChange:m=>R(m)})})},initialMode:"bottomSheet",onModeChange:Me,persistenceKey:Qt.settings.root(),enablePersistence:true,maxHeight:oe-pe.top,initialHeight:ge,initialFloatingPosition:{x:(Ie-ae)/2,y:pe.top+20},enableGlitchEffects:true,children:Y()})},"DevToolsSettingsModal"),ts={dialTools:{},floatingTools:{environment:false},globalSettings:{enableSharedModalDimensions:false}},os=r((e,t)=>{let o=new Set(e??[]),i=new Set(t??[]),n={};for(let l of i)n[l]=true;let s={environment:o.has("environment")};for(let l of o)l!=="environment"&&(s[l]=true);return{dialTools:wt(n),floatingTools:s,globalSettings:{enableSharedModalDimensions:false}}},"createDefaultsFromConfig"),tt=null,Zt=null,Cn=null,kn=r((e,t)=>JSON.stringify(e)===JSON.stringify(t),"sameSettings");St.addListener(e=>{e&&(tt=e)});var zn=r(()=>{let{defaultFloatingTools:e,defaultDialTools:t}=Yt(),o=vt(()=>!e&&!t?ts:os(e,t),[e,t]),[i,n]=re(o),s=bt(async()=>{try{let c=await Pe.getItem(qe);if(c){let d=JSON.parse(c),u=In(o,d);n(u);return}n(o)}catch(c){console.error("[Buoy]","Failed to load dev tools settings:",c),n(o)}},[o]);Ae(()=>Ga(c=>{c.includes(qe)&&s()}),[s]),Ae(()=>{s();let c=St.addListener(d=>{try{d&&n(d)}catch{}});return()=>{c()}},[s]);let l=bt(()=>{s()},[s]);return{settings:i,refreshSettings:l}},"useDevToolsSettings"),y=ct.create({container:{flex:1,backgroundColor:"transparent"},headerRow:{flexDirection:"row",alignItems:"center",paddingLeft:b.gutter,paddingRight:b.gutter,paddingBottom:8},scrollContent:{flex:1},scrollContainer:{paddingHorizontal:b.gutter,paddingTop:8,paddingBottom:24,gap:b.groupGap},toolRow:{flexDirection:"row",alignItems:"center",gap:12,paddingHorizontal:b.rowPadH,paddingVertical:12},settingRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:b.rowPadH,paddingVertical:b.rowPadV,minHeight:52},featureRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:b.rowPadH,paddingVertical:12},rowDisabled:{opacity:.4},toolIconSlot:{width:24,alignItems:"center"},rowInfo:{flex:1,gap:2},rowLabel:{color:b.color.text,fontSize:b.font.row,fontWeight:"500"},rowCaption:{color:b.color.textTertiary,fontSize:b.font.label},settingRowBody:{paddingHorizontal:b.rowPadH,paddingBottom:b.rowPadV,gap:6},settingRowBodyText:{color:b.color.textSecondary,fontSize:b.font.caption,lineHeight:b.font.caption*1.45},settingRowBodyHint:{color:b.color.textTertiary,fontSize:b.font.caption,lineHeight:b.font.caption*1.45},bodyWarning:{color:b.color.warning},bodyDanger:{color:b.color.danger},cardButtonWrap:{paddingHorizontal:b.cardPad,paddingTop:10,paddingBottom:b.cardPad},storageExpanded:{paddingHorizontal:b.rowPadH,paddingVertical:12,gap:8},storageExpandedHeader:{flexDirection:"row",alignItems:"center"},storageExpandedTitle:{flex:1,color:b.color.textSecondary,fontSize:b.font.micro,fontWeight:"600",letterSpacing:.5},storageExpandedCount:{color:b.color.textTertiary,fontSize:b.font.micro},storageKeysList:{maxHeight:150},storageKeyItem:{backgroundColor:b.color.glassElevated,borderRadius:b.radius.segment,paddingHorizontal:10,paddingVertical:7,marginBottom:4},storageKeyText:{color:b.color.textSecondary,fontSize:b.font.micro,fontFamily:vn},storageKeyEmpty:{color:b.color.textTertiary,fontSize:b.font.caption,fontStyle:"italic"},footnoteMono:{fontFamily:vn,fontSize:b.font.label,color:b.color.textSecondary}});import{jsx as An}from"react/jsx-runtime";var ns=[];function eo({visible:e,onClose:t,availableTools:o=ns,defaultFloatingTools:i,defaultDialTools:n,storage:s=fa,onSettingsChange:l}){let c=pn(()=>({getItem:r(async g=>s.getItem(g),"getItem"),setItem:r(async(g,S)=>s.setItem(g,S),"setItem")}),[s]),d=pn(()=>o.map(g=>({...g,name:g.name??g.id,icon:typeof g.icon=="function"?S=>g.icon(S.size):g.icon})),[o]),u=ga(g=>{l?.(g)},[l]);return An(Jt,{defaultFloatingTools:i,defaultDialTools:n,children:An(es,{visible:e,onClose:t,zIndex:11e3,availableApps:d,storage:c,onSettingsChange:u})})}r(eo,"SettingsModal");import{listenBuoyKeydown as is}from"@buoy-gg/shared-ui/web/floating";import{persistentStorage as Bn,setExpandableWindowControls as rs}from"@buoy-gg/shared-ui/web";import{createContext as as,useCallback as Be,useContext as ss,useEffect as xt,useMemo as ls,useRef as ot,useState as Rn}from"react";var cs=r((e,t,o)=>{if(t.singleton){let n=e.find(s=>s.id===t.id);if(n){let s=n.minimized??false;return{instanceId:n.instanceId,wasMinimized:s,apps:[...e.filter(l=>l.instanceId!==n.instanceId),{...n,minimized:false}]}}}let i=o();return{instanceId:i,wasMinimized:false,apps:[...e,{...t,instanceId:i}]}},"resolveOpenAppsState");import{createContext as ds,useCallback as Mn,useContext as us,useEffect as Tt,useMemo as ps,useRef as Dn,useState as It}from"react";import{JsModal as ms,ModalHeader as nt,HeaderSearchButton as gs,TickProvider as fs,ToolScreenHeaderContext as hs,devToolsStorageKeys as On,buoyColors as En,gameUIColors as to}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as Ct}from"react/jsx-runtime";var it=r(()=>{},"noop"),ys={search:"",isSearchActive:false,clearSearch:it,close:it,minimize:it,showToast:it,setHeaderOverride:it},Pn=ds(null);function oo(){return us(Pn)??ys}r(oo,"useToolHost");function Ln(e,t){let{setHeaderOverride:o}=oo();Tt(()=>(o(e),()=>o(null)),t)}r(Ln,"useToolHeader");var Fn=2200,bs={success:to.success,error:to.error,info:to.info};function $n({message:e,type:t,nonce:o}){let i=Dn(new De.Value(0)).current;Tt(()=>{i.setValue(0),De.sequence([De.timing(i,{toValue:1,duration:150,useNativeDriver:true}),De.delay(Fn-450),De.timing(i,{toValue:0,duration:300,useNativeDriver:true})]).start()},[o,i]);let n=bs[t];return Ct(De.View,{pointerEvents:"none",style:[kt.toast,{opacity:i,borderColor:n+"60"}],children:[le(H,{style:[kt.toastDot,{backgroundColor:n}]}),le(U,{style:kt.toastText,numberOfLines:2,children:e})]})}r($n,"ToastView");function jn({app:e,config:t,visible:o,zIndex:i,onClose:n,onMinimize:s,initialModalState:l,enableSharedModalDimensions:c,bodyProps:d}){let u=e.component,[g,S]=It(false),[h,B]=It(""),[I,R]=It(null),[L,D]=It(null),E=Dn(null),z=Mn(()=>{S(false),B("")},[]),v=Mn((q,ne="info")=>{E.current&&clearTimeout(E.current),D(Z=>({message:q,type:ne,nonce:(Z?.nonce??0)+1})),E.current=setTimeout(()=>D(null),Fn)},[]);Tt(()=>()=>{E.current&&clearTimeout(E.current)},[]);let C=ps(()=>({search:g?h:"",isSearchActive:g,clearSearch:z,close:n,minimize:r(()=>s(),"minimize"),showToast:v,setHeaderOverride:R,instanceId:e.instanceId}),[h,g,z,n,s,v,e.instanceId]),F=I?.title??t.title??e.title??e.id,M=I?.subtitle??t.subtitle,T=I?.onBack,ee=I?.actions??t.headerActions,V=I?.searchable??t.searchable;Tt(()=>{!V&&g&&z()},[V,g,z]);let K=c?On.modal.root():On.custom(e.id).modal(),J=Ct(nt,{children:[T&&!g&&le(nt.Navigation,{onBack:T}),g?le(nt.Search,{value:h,onChangeText:B,onCancel:z,placeholder:t.searchPlaceholder,testID:`tool-search-field-${e.id}`}):le(nt.Content,{title:F,subtitle:M}),Ct(nt.Actions,{children:[!g&&ee,V&&!g&&le(gs,{variant:"chip",testID:`tool-search-${e.id}`,onPress:()=>S(true)})]})]});return le(Pn.Provider,{value:C,children:le(ms,{visible:o,onClose:n,onBack:T,onMinimize:s,initialModalState:l,zIndex:i,persistenceKey:K,enablePersistence:true,initialMode:t.initialMode??"bottomSheet",header:{customContent:J,showToggleButton:true},disableScrollWrapper:true,styles:{},children:Ct(H,{style:kt.bodyRoot,children:[le(fs,{children:le(hs.Provider,{value:R,children:le(u,{...d})})}),L&&le($n,{message:L.message,type:L.type,nonce:L.nonce})]})})})}r(jn,"ToolModalShell");var kt=ct.create({bodyRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},toast:{position:"absolute",bottom:16,alignSelf:"center",flexDirection:"row",alignItems:"center",gap:8,maxWidth:"86%",backgroundColor:En.card,borderWidth:1,borderRadius:8,paddingHorizontal:12,paddingVertical:8,shadowColor:"#000",shadowOpacity:.4,shadowRadius:8,shadowOffset:{width:0,height:2},elevation:6},toastDot:{width:6,height:6,borderRadius:3},toastText:{flex:1,fontSize:12,color:En.text}});import{useEffect as vs,useRef as Ss}from"react";import{capacitorPlatform as ws,capacitorPlugin as xs}from"@buoy-gg/license/web";function Nn(){return globalThis.__BUOY_HOLDS_BACK__===true}r(Nn,"isBuoyHoldingBackButton");var Ts=99.5;function Hn(){if(typeof document>"u")return false;let e=globalThis.Ionic;if(!e&&!document.querySelector("ion-app"))return false;try{return e?.config?.get?.("hardwareBackButton",true)!==false}catch{return true}}r(Hn,"ionicHandlesBack");function _n(e,t){let o=Ss(t);o.current=t,vs(()=>{if(!e||ws()!=="android")return;let i=globalThis;i.__BUOY_HOLDS_BACK__=true;let n;if(Hn()){let s=r(l=>{l.detail?.register?.(Ts,()=>{o.current()})},"listener");document.addEventListener("ionBackButton",s),n=r(()=>document.removeEventListener("ionBackButton",s),"cleanup")}else{let s=xs("App");if(!s?.addListener){i.__BUOY_HOLDS_BACK__=false;return}let l=false,c=null;Promise.resolve(s.addListener("backButton",()=>o.current())).then(d=>{l?d.remove():c=d}).catch(()=>{}),n=r(()=>{l=true,c&&c.remove()},"cleanup")}return()=>{n(),i.__BUOY_HOLDS_BACK__=false}},[e])}r(_n,"useCapacitorBackButton");import{Fragment as Is,jsx as ce}from"react/jsx-runtime";var Wn=as(null),Un="@react_buoy_open_apps",no=44,Cs=12,ks=100,zs=16,As=r(e=>({x:window.innerWidth-no-zs,y:window.innerHeight-ks-no-e*(no+Cs)}),"dockIconPosition"),Kn=r(({children:e})=>{let[t,o]=Rn([]),[i,n]=Rn(false),s=ot([]),l=ot(null),c=ot(false),d=ot(false),u=ot(false),g=Be(v=>{let C="";return o(F=>{let{apps:M,instanceId:T}=cs(F,v,()=>`${v.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);return C=T,M}),C},[]),S=Be(()=>{if(c.current||!d.current||!u.current)return;c.current=true;let v=l.current;if(!v||v.length===0){n(true);return}l.current=null,v.forEach(({id:C,minimized:F})=>{let M=s.current.find(T=>T.id===C);if(M&&M.component){let T=Xt(M.icon,{slot:"dial",size:20,color:M.color});g({id:M.id,title:M.name,component:M.component,props:M.props,modal:M.modal,launchMode:M.launchMode||"self-modal",singleton:M.singleton??true,icon:T,color:M.color,minimized:F})}}),n(true)},[g]);xt(()=>{let v=false;return r(async()=>{try{let C=await Bn.getItem(Un);if(v)return;if(C){let F=JSON.parse(C),M;Array.isArray(F)&&F.length>0&&(typeof F[0]=="string"?M=F.map(T=>({id:T,minimized:false})):M=F.filter(T=>typeof T=="object"&&T!==null&&typeof T.id=="string"),M.length&&(l.current=M))}}catch{}v||(d.current=true,S())},"restoreOpenApps")(),()=>{v=true}},[S]),xt(()=>{if(!i)return;let v=t.map(C=>({id:C.id,minimized:C.minimized??false}));Bn.setItem(Un,JSON.stringify(v))},[t,i]);let h=Be(v=>{s.current=v,u.current=true,S()},[S]),B=Be(v=>{o(C=>C.length?v?C.filter(F=>F.instanceId!==v):C.slice(0,-1):C)},[]),I=Be(()=>o([]),[]),R=Be((v,C)=>{o(F=>F.map(M=>M.instanceId===v?{...M,minimized:true,restoreState:C}:M))},[]),L=Be((v,C)=>{o(F=>{let M=F.find(T=>T.instanceId===v);return M?[...F.filter(T=>T!==M),{...M,minimized:false,restoreState:C??M.restoreState}]:F})},[]),D=Be(v=>t.find(C=>C.instanceId===v)?.minimized??false,[t]),E=t.some(v=>v.launchMode!=="toggle-only"&&!v.minimized);xt(()=>E?is(r(v=>{if(v.key!=="Escape"||v.defaultPrevented)return;let C=[...t].reverse().find(F=>F.launchMode!=="toggle-only"&&!F.minimized);C&&B(C.instanceId)},"handler")):void 0,[E,B,t]),_n(t.length>0,()=>B());let z=ls(()=>({openApps:t,isAnyOpen:E,open:g,close:B,closeAll:I,registerApps:h,minimize:R,restore:L,isMinimized:D}),[t,E,g,B,I,h,R,L,D]);return ce(Wn.Provider,{value:z,children:e})},"AppHostProvider"),rt=r(()=>{let e=ss(Wn);return e||{openApps:[],isAnyOpen:false,open:r(()=>"","open"),close:r(()=>{},"close"),closeAll:r(()=>{},"closeAll"),registerApps:r(()=>{},"registerApps"),minimize:r(()=>{},"minimize"),restore:r(()=>{},"restore"),isMinimized:r(()=>false,"isMinimized")}},"useAppHost"),Bs=9e3,Rs={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"},Ms={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"},Ds=r(({app:e,zIndex:t,onClose:o,onMinimize:i,minimizeTargetPosition:n,enableSharedModalDimensions:s})=>{let l=e.component,c=!e.minimized,d={...e.props??{},...s?{enableSharedModalDimensions:true}:{}};return e.modal&&(!e.launchMode||e.launchMode==="self-modal")?ce("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{position:"fixed",inset:0,zIndex:t,pointerEvents:"none"},children:ce(jn,{app:e,config:e.modal,visible:c,zIndex:t,onClose:o,onMinimize:i,initialModalState:e.restoreState,enableSharedModalDimensions:s,bodyProps:d})}):e.launchMode==="self-modal"?ce("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{position:"fixed",inset:0,zIndex:t,pointerEvents:"none"},children:ce(l,{...d,visible:c,onClose:o,onRequestClose:o,onMinimize:i,minimizeTargetPosition:n,instanceId:e.instanceId,zIndex:t,initialModalState:e.restoreState})}):e.launchMode==="inline"?c?ce("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{position:"fixed",inset:0,zIndex:t,pointerEvents:"none"},children:ce(l,{...d,onClose:o,onMinimize:i,minimizeTargetPosition:n,initialModalState:e.restoreState,instanceId:e.instanceId})}):null:ce("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{...Rs,zIndex:t,display:c?"flex":"none"},children:ce("div",{style:Ms,children:ce(l,{...d,onClose:o,onMinimize:i,minimizeTargetPosition:n,initialModalState:e.restoreState,instanceId:e.instanceId})})})},"AppRenderer"),Vn=r(()=>{let{openApps:e,close:t,minimize:o}=rt(),{settings:i}=zn();xt(()=>{rs(i.globalSettings?.expandableWindowControls!==false)},[i.globalSettings?.expandableWindowControls]);let n=e.filter(c=>c.launchMode!=="toggle-only");if(n.length===0)return null;let s=n.filter(c=>c.minimized).length,l=Lr()??As(s);return ce(Is,{children:n.map((c,d)=>ce(Ds,{app:c,zIndex:Bs+d,onClose:()=>t(c.instanceId),onMinimize:u=>o(c.instanceId,u),enableSharedModalDimensions:i.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:l},c.instanceId))})},"AppOverlay");import{useCallback as Os,useEffect as io,useRef as Es,useState as qn,useSyncExternalStore as Gn}from"react";import{persistentStorage as Jn,getToolAttention as ro,subscribeToolAttention as Yn}from"@buoy-gg/shared-ui/web";import{jsx as de,jsxs as zt}from"react/jsx-runtime";function Xn(e){return Gn(Yn,()=>ro(e),()=>ro(e))}r(Xn,"useToolAttention");var Qn={needsInput:"#FF8329",done:"#20C997",failed:"#FF3B30"},Zn={needsInput:3,failed:2,done:1},ei=new Map;function ao(e){let t=null;for(let i of e?e.split("|"):[]){let n=ro(i);n&&(!t||Zn[n.kind]>Zn[t.kind])&&(t=n)}let o=ei.get(e);return o&&t&&o.kind===t.kind&&o.label===t.label?o:!o&&!t?null:(ei.set(e,t),t)}r(ao,"strongest");function ti(e){let t=e.join("|");return Gn(Yn,()=>ao(t),()=>ao(t))}r(ti,"useStrongestAttention");var oi=28,so=32,lo=6,ni=8,ii=24,ri="@react_buoy_minimized_stack_expanded",Ps=80,ai=2e3,Ls=6e3,Fs="#1A1A1A",at="#888888";function co({down:e=false}){return de("svg",{width:12,height:12,viewBox:"0 0 24 24","aria-hidden":"true",style:{transform:e?"rotate(180deg)":void 0},children:de("path",{d:"M18 15l-6-6-6 6",fill:"none",stroke:at,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}r(co,"ChevronGlyph");function si({id:e,title:t,icon:o,index:i,onPress:n}){let s=Xn(e),l=Es(null);return io(()=>{let c=true,d,u=r(()=>{l.current?.animate([{transform:"translateX(0) scale(1)",opacity:1,offset:0},{transform:"translateX(3px) scale(1.05)",opacity:.4,offset:.2},{transform:"translateX(-3px) scale(1.1)",opacity:1,offset:.4},{transform:"translateX(2px) scale(1.0)",opacity:.6,offset:.6},{transform:"translateX(-1px) scale(0.95)",opacity:1,offset:.8},{transform:"translateX(0) scale(1)",opacity:1,offset:1}],{duration:Ps,easing:"linear"})},"runGlitch"),g=r(S=>{let h=S?500+Math.random()*1500+i*200:ai+Math.random()*(Ls-ai)+i*300;d=setTimeout(()=>{c&&(u(),g(false))},h)},"schedule");return g(true),()=>{c=false,clearTimeout(d)}},[i]),zt("button",{type:"button","aria-label":s?`${t} \u2014 ${s.label}. Restore`:`Restore ${t}`,"data-testid":`buoy-dock-restore-${e}`,onClick:n,style:{width:so,height:so,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",padding:0,cursor:"pointer",position:"relative"},children:[de("div",{ref:l,style:{display:"flex",alignItems:"center",justifyContent:"center"},children:o}),s?de("span",{"aria-hidden":true,"data-testid":`buoy-dock-badge-${e}-${s.kind}`,style:{position:"absolute",top:0,right:0,minWidth:12,height:12,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:Qn[s.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:s.kind==="needsInput"?"!":""}):null]})}r(si,"GlitchToolButton");function li({containerWidth:e=32}){let{openApps:t,restore:o}=rt(),i=t.filter(h=>h.minimized&&h.launchMode!=="toggle-only"),[n,s]=qn(false),[l,c]=qn(false),d=ti(i.map(h=>h.id));io(()=>{let h=false;return r(async()=>{let B=await Jn.getItem(ri);!h&&B==="true"&&s(true),h||c(true)},"load")(),()=>{h=true}},[]),io(()=>{l&&Jn.setItem(ri,n?"true":"false")},[n,l]);let u=Os(h=>{o(h)},[o]);if(i.length===0)return null;let g=ni+i.length*so+(i.length-1)*lo+lo+ii+4,S={backgroundColor:Fs,borderTopLeftRadius:6,borderTopRightRadius:6,borderTop:`1px solid ${at}66`,borderLeft:`1px solid ${at}66`,borderRight:`1px solid ${at}66`,borderBottom:"none",boxSizing:"border-box"};return zt("div",{style:{height:oi,overflow:"visible",position:"relative"},children:[de("div",{style:{position:"absolute",bottom:"var(--buoy-stack-bottom, 0px)",top:"var(--buoy-stack-top, auto)",left:0,width:e,maxHeight:"var(--buoy-stack-space, calc(100vh - 48px))",visibility:n?"visible":"hidden",height:n?g:0,opacity:n?1:0,overflowY:"auto",overflowX:"hidden",transition:"height 200ms ease, opacity 200ms ease",pointerEvents:n?"auto":"none",...S},children:zt("div",{style:{height:g,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:ni,gap:lo,boxSizing:"border-box"},children:[n&&[...i].reverse().map((h,B)=>de(si,{id:h.id,title:h.title||h.id,icon:h.icon??de("span",{style:{color:"#fff",fontSize:13},children:(h.title||h.id).slice(0,1).toUpperCase()}),index:B,onPress:()=>u(h.instanceId)},h.instanceId)),de("button",{type:"button","aria-label":"Collapse","data-testid":"buoy-dock-collapse",onClick:()=>s(false),style:{width:"100%",height:ii,marginTop:3,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",cursor:"pointer",padding:0},children:de(co,{down:true})})]})}),zt("button",{type:"button","aria-label":`Show ${i.length} minimized tools`,"data-testid":"buoy-dock-peek",tabIndex:n?-1:0,"aria-hidden":n,onClick:()=>s(true),style:{position:"absolute",bottom:0,left:0,width:e,height:oi,display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"center",gap:2,cursor:"pointer",padding:0,opacity:n?0:1,transform:n?"scale(0.9)":"scale(1)",transition:"opacity 200ms ease, transform 200ms ease",pointerEvents:n?"none":"auto",...S},children:[de(co,{}),d?de("span",{"aria-hidden":true,"data-testid":"buoy-dock-peek-attention",style:{position:"absolute",top:2,right:2,minWidth:11,height:11,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:Qn[d.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:d.kind==="needsInput"?"!":""}):null,i.length>1&&de("span",{style:{fontSize:9,fontWeight:600,color:at,marginLeft:1},children:i.length})]})]})}r(li,"MinimizedToolsStack");import{registerToolModules as $s}from"@buoy-gg/shared-ui/web";import{createElement as js}from"react";function Ge(e){let t=e.icon;return{...e,icon:typeof t=="function"?o=>js(t,{size:o,slot:e.slot??"both",color:e.color}):()=>t}}r(Ge,"createWebTool");import{createContext as Ns,useContext as Hs,useState as ci,useMemo as di}from"react";import{jsx as _s}from"react/jsx-runtime";var ui=Ns(null);function uo({children:e}){let[t,o]=ci(false),[i,n]=ci(false),s=di(()=>t||i,[t,i]),l=di(()=>({isDialOpen:t,isToolOpen:i,isDevToolsActive:s,setDialOpen:o,setToolOpen:n}),[t,i,s]);return _s(ui.Provider,{value:l,children:e})}r(uo,"DevToolsVisibilityProvider");function At(){let e=Hs(ui);return e||{isDialOpen:false,isToolOpen:false,isDevToolsActive:false,setDialOpen:r(()=>{},"setDialOpen"),setToolOpen:r(()=>{},"setToolOpen")}}r(At,"useDevToolsVisibility");import*as Ws from"@buoy-gg/license/web";import*as Us from"@buoy-gg/shared-ui/web";import*as Ks from"@buoy-gg/shared-ui/web/dataViewer";function po(e){$s({core:{useDevToolsVisibility:At},license:Ws,"shared-ui":Us,"shared-ui/dataViewer":Ks,...e});let t=new Set;return Object.values(e).flatMap(o=>Object.entries(o).flatMap(([i,n])=>!i.endsWith("Preset")||!n||typeof n.id!="string"||!n.component||t.has(n.id)?[]:(t.add(n.id),[Ge(n)])))}r(po,"createWebTools");import{useEffect as Bt,useMemo as Rt,useRef as Vs}from"react";import{LicenseManager as pi,installCapacitorBridge as qs,resolveDevBuild as mi,useLicense as Gs}from"@buoy-gg/license/web";import{registerToolAdapters as Js}from"@buoy-gg/shared-ui/web";function mo(e){return typeof e=="object"&&e!==null?e:void 0}r(mo,"externalSyncOptions");function gi({isDevelopment:e,isLicensed:t,externalSync:o,isAvailable:i}){if(o===false||!i)return false;if(e)return true;let n=mo(o);return t&&n?.enableInRelease===true&&go(n.socketURL,n)===null}r(gi,"shouldMountExternalSync");var fi="http://localhost:42831";function hi(e){return e==="localhost"||e.endsWith(".localhost")||/^127\.\d+\.\d+\.\d+$/.test(e)||e==="[::1]"||e==="::1"||e==="10.0.2.2"}r(hi,"isLoopbackHost");function go(e,t){let o=e??fi;if(t?.allowInsecureNetwork===true)return null;let i;try{i=new URL(o)}catch{return`[Buoy] externalSync.socketURL "${o}" isn't a valid URL, so this release build won't connect to Buoy Desktop.`}return i.protocol==="https:"||i.protocol==="wss:"||hi(i.hostname)?null:`[Buoy] This release build won't connect to ${o}: release sync carries real user data, and plain http to another machine is readable by anyone on the same network. Use a simulator, an emulator or adb reverse (localhost), an https:// broker, or set externalSync.allowInsecureNetwork: true for a network you trust.`}r(go,"releaseTransportProblem");var Ys={impersonate:["searchUsers","startImpersonation","resumeImpersonation","updateSettings","removeFromHistory","clearHistory"]};function yi(e,t,o){if(t)return e;let i=null;for(let[n,s]of Object.entries(Ys)){if(o?.includes(n))continue;let l=e[n];if(!l?.actions)continue;let c={...l.actions};for(let d of s)d in c&&(c[d]=()=>{throw new Error(`${n}.${d} is off in release builds. To allow it from Buoy Desktop and the MCP, pass externalSync={{ enableInRelease: true, releaseActions: ["${n}"] }}.`)});i??(i={...e}),i[n]={...l,actions:c}}return i??e}r(yi,"applyReleaseActionPolicy");import{useEffect as Xs,useMemo as Qs,useState as Zs}from"react";import{devToolsStorageKeys as el,persistentStorage as tl}from"@buoy-gg/shared-ui/web";import{isCapacitorNative as ol}from"@buoy-gg/license/web";var nl=8;function bi(){let e="";for(;e.length<nl;)e+=(Math.random()*16|0).toString(16);return e}r(bi,"generateInstallId");function vi(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}r(vi,"slugify");function Si({appName:e,hardwareName:t,platform:o,installId:i,deviceId:n}){let s=vi(e??"buoy")||"buoy",l=e??"Buoy Device",c=t?.trim()||o;return n?{deviceId:n,deviceName:`${l} (${c})`}:{deviceId:`${s}-${o}-${i}`,deviceName:`${l} (${c} \xB7 ${i.slice(-4)})`}}r(Si,"buildDeviceIdentity");function wi(){let e=globalThis;try{return e.sessionStorage??null}catch{return null}}r(wi,"sessionStore");function xi(){let e=globalThis;try{return e.localStorage??null}catch{return null}}r(xi,"localStore");async function Ti({platform:e=Ne.OS,store:t,mint:o=bi}={}){let i=el.sync.deviceId(),n=t===void 0?ol()?xi():e==="web"?wi():tl:t;if(!n)return o();try{let s=await n.getItem(i);if(s&&s.length>0)return s;let l=o();return await n.setItem(i,l),l}catch{return o()}}r(Ti,"loadInstallId");var fo=null;function Ii(){return fo||(fo=Ti()),fo}r(Ii,"getInstallId");function Ci(e,t){let o=e?.deviceId,i=e?.deviceName,n=t.loadId??Ii,s=t.platform??Ne.OS,[l,c]=Zs(null);return Xs(()=>{if(o)return;let d=false;return n().then(u=>{d||c(u)}),()=>{d=true}},[o,n]),Qs(()=>{if(!o&&!l)return null;let d=Si({appName:t.appName,hardwareName:t.hardwareName,platform:s,installId:l??"",deviceId:o});return i?{...d,deviceName:i}:d},[o,i,l,t.appName,t.hardwareName,s])}r(Ci,"useDeviceIdentity");import{useEffect as il,useState as rl}from"react";import{capacitorPlatform as al,capacitorPlugin as Mt,isCapacitorNative as sl}from"@buoy-gg/license/web";function ki(e,t){if(t==="ios")return/iPad/.test(e)?"iPad":/iPhone/.test(e)?"iPhone":null;let o=/Android [\d.]+;\s*([^;)]+?)(?:\s+Build\/|\))/.exec(e)?.[1]?.trim();return!o||o==="K"?null:o}r(ki,"hardwareFromUserAgent");function zi(e){return/sdk_gphone|Android SDK built for|Android ATD built for|google_sdk|Emulator|generic_/i.test(e)}r(zi,"isAndroidEmulatorUserAgent");function ho(){return typeof navigator>"u"?"":navigator.userAgent??""}r(ho,"userAgent");function Dt(){return typeof document>"u"?null:document.title||(typeof location>"u"?null:location.hostname)||null}r(Dt,"firstPageTitle");var Ai="@react_buoy_capacitor_app_name";function Bi(e){try{let t=globalThis.localStorage;if(!t)return e;let o=t.getItem(Ai);if(o)return o;e&&t.setItem(Ai,e)}catch{}return e}r(Bi,"persistedAppName");function Ri(){let e=al();if(!e)return{platform:"web",appName:Dt(),hardwareName:"Browser",ready:true};let t=!!Mt("App");return{platform:e,appName:t?Dt():Bi(Dt()),hardwareName:ki(ho(),e)??e,extraDeviceInfo:{runtime:"capacitor"},ready:!t&&!Mt("Device")}}r(Ri,"initialHostInfo");function Mi(){let[e,t]=rl(Ri);return il(()=>{if(!sl())return;let o=false,i=Mt("App"),n=Mt("Device");return Promise.all([i?.getInfo?.().catch(()=>null)??null,n?.getInfo?.().catch(()=>null)??null]).then(([s,l])=>{if(o)return;let c=s?.name?.trim(),d=l?.name?.trim()||l?.model?.trim();t(u=>({...u,appName:c||u.appName,hardwareName:d||u.hardwareName,ready:true}))}),()=>{o=true}},[]),e}r(Mi,"useHostInfo");function yo(){if(typeof location>"u")return null;let e=globalThis.WEBVIEW_SERVER_URL;return{protocol:location.protocol,hostname:location.hostname,origin:`${location.protocol}//${location.host}`,userAgent:ho(),serverUrl:typeof e=="string"?e:null}}r(yo,"pageInfo");function bo(e){if(!e)return null;try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return null}}r(bo,"schemeHost");function Di(e,t){if(e==="ios"){let o=bo(t.serverUrl);return o?o===bo(t.origin):t.protocol==="capacitor:"}return Oi.has(t.hostname)}r(Di,"isBundledPage");var Oi=new Set(["localhost","127.0.0.1","[::1]","::1"]);function Ei(e,t,o,i=yo()){if(o==="web"||!i)return e;let n;try{n=new URL(e)}catch{return e}let s=Di(o,i);return!t&&s&&n.hostname===i.hostname&&(n.hostname="localhost"),o==="android"&&Oi.has(n.hostname)&&zi(i.userAgent)&&(n.hostname="10.0.2.2"),n.toString().replace(/\/$/,"")}r(Ei,"capacitorBrokerURL");function Pi(e,t,o=yo()){return t!=="android"||!o||o.protocol!=="https:"||!/^(http|ws):/i.test(e)?null:`[Buoy] Can't reach Buoy Desktop at ${e}. This Android WebView serves the app from https://${o.hostname} and blocks plain http/ws by default. For debug builds, set android.allowMixedContent: true and server.cleartext: true in capacitor.config, then run cap sync.`}r(Pi,"capacitorTransportProblem");import{getDevServerOrigin as ll,resolveReloadStrategy as cl,scheduleReloadApp as dl}from"@buoy-gg/shared-ui/web";var Li=Date.now(),Fi=ll(),ul={platform:Ne.OS,isTV:Ne.isTV===true,isTVOS:Ne.isTVOS===true},$i={version:3,getSnapshot:r(()=>{let e=cl("auto");return{startedAt:Li,devServerOrigin:Fi,device:ul,reload:{available:e!==null,strategy:e}}},"getSnapshot"),subscribe:r(e=>()=>{},"subscribe"),actions:{ping:r(()=>({ok:true,startedAt:Li,devServerOrigin:Fi}),"ping"),reloadApp:r(e=>{let t=e??{},{strategy:o,delayMs:i}=dl({strategy:t.strategy,delayMs:t.delayMs});return{scheduled:true,strategy:o,delayMs:i}},"reloadApp")}};import{Fragment as pl,jsx as Fe,jsxs as ml}from"react/jsx-runtime";var gl=["ConsoleRoot","RouteTracker","ReactQueryTracker","ReduxAutoInstrument","PerfMonitorRoot","AutomationResumer","ImagesRoot"],fl=["DebugBordersStandaloneOverlay","HighlightUpdatesOverlay","ImageOverlayStandalone","PerfMonitorOverlay","JsTopHudOverlay","ImpersonateOverlay","ScenariosOverlay"];function ji(e){let t=Rt(()=>Object.fromEntries(Object.entries(e.modules).map(([i,n])=>[i.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),n])),[e.modules]),o=t["react-query"];return o?.useReactQuerySyncAdapter?Fe(Ni,{...e,modules:t,query:o}):Fe(vo,{...e,modules:t})}r(ji,"BrowserToolRuntime");function Ni(e){let t=e.query.useReactQuerySyncAdapter();return Fe(vo,{...e,queryAdapter:t})}r(Ni,"QueryRuntime");function vo({modules:e,apps:t,requiredEnvVars:o,externalSync:i,headless:n,sentryGetClient:s,queryAdapter:l}){let{isPro:c,tier:d}=Gs(),u=Rt(()=>{let L={app:$i};for(let[D,E]of Object.entries(e))for(let[z,v]of Object.entries(E))z.endsWith("SyncAdapter")&&v&&typeof v=="object"&&(L[D]=v);l&&(L.query=l),e.env?.createEnvSyncAdapter&&(L.env=e.env.createEnvSyncAdapter(o??[]));for(let D of t??[])D.sync&&(L[`custom:${D.id}`]=D.sync);return L},[e,t,o,l]),g=Vs(u);g.current=u,Bt(()=>Js(()=>g.current),[]),Bt(()=>{let L=[],D=r(E=>{let z=E?.();typeof z=="function"&&L.push(z)},"start");return D(e.network?.startNetworkCapture),D(e.storage?.startBrowserStorageCapture),D(e.assets?.startBrowserAssetCapture),D(e.three?.startThreeCapture),mi(typeof He<"u"?He:process.env.NODE_ENV!=="production")&&D(e["time-machine"]?.startTimeMachineFloatingToolPersistence),e.storage?.storageSyncAdapter?.subscribe&&D(()=>e.storage.storageSyncAdapter.subscribe(()=>{})),e["focus-inspector"]?.focusInspectorSyncAdapter?.subscribe&&D(()=>e["focus-inspector"].focusInspectorSyncAdapter.subscribe(()=>{})),()=>{for(let E of L.reverse())E()}},[e]);let S=e["external-sync"],h=mi(typeof He<"u"?He:process.env.NODE_ENV!=="production"),B=gi({isDevelopment:h,isLicensed:c,externalSync:i,isAvailable:!!S}),I=mo(i);qs({release:!h&&!!I?.enableInRelease}),!h&&I?.enableInRelease&&So(go(I.socketURL,I));let R=e.sentry?.SentryRoot;return ml(pl,{children:[Object.entries(e).flatMap(([L,D])=>gl.map(E=>{let z=D[E];return z?Fe(z,{},`${L}:${E}`):null})),R&&Fe(R,{getClient:s}),Object.entries(e).flatMap(([L,D])=>fl.map(E=>{let z=D[E];return z&&(!n||E==="ScenariosOverlay"||E==="ImpersonateOverlay")?Fe(z,{},`${L}:${E}`):null})),B&&Fe(_i,{module:S,tools:u,options:I,isPro:c,tier:d,dev:h})]})}r(vo,"ToolRuntime");var Hi=null;function So(e){!e||e===Hi||(Hi=e,console.warn("[Buoy]",e))}r(So,"warnOnce");function _i({module:e,tools:t,options:o,isPro:i,tier:n,dev:s}){let l=Mi(),c=Ci(o,{appName:l.appName,hardwareName:l.hardwareName,platform:l.platform}),d=Rt(()=>Ei(o?.socketURL??(s?e.getDefaultSocketURL():fi),!!o?.socketURL,l.platform),[o?.socketURL,s,e,l.platform]),{socket:u}=e.useExternalSyncSocket({deviceName:c?.deviceName??"Buoy Browser",socketURL:d,persistentDeviceId:l.ready?c?.deviceId??null:null,platform:l.platform,extraDeviceInfo:l.extraDeviceInfo,enableLogs:o?.enableLogs});Bt(()=>{let h=Pi(d,l.platform);if(!u||!h)return;let B=r(()=>So(h),"onError");return u.on("connect_error",B),()=>{u.off("connect_error",B)}},[u,d,l.platform]),Bt(()=>{if(!u)return;let h=r(()=>{if(!u.connected||!pi.hasAccountAccess())return;let B=pi.getState();!i&&(B.isInitialized===false||B.isValidating===true)||u.emit("device-license",{isPro:i?"1":"0",tier:n})},"emit");return h(),u.on("connect",h),()=>{u.off("connect",h)}},[u,i,n]);let g=o?.releaseActions?.join(",")??"",S=Rt(()=>yi(t,s,g?g.split(","):void 0),[t,s,g]);return e.useExternalSync({tools:S,socket:u,deviceId:l.ready?c?.deviceId??null:null,enableLogs:o?.enableLogs}),null}r(_i,"BrowserExternalSync");import{useState as Wi}from"react";import{BuoyPortal as hl}from"@buoy-gg/shared-ui/web/floating";import{useBuoySession as yl}from"@buoy-gg/license/web";import{Fragment as Ui,jsx as Je,jsxs as Ki}from"react/jsx-runtime";var Vi="#20C997";function qi(){let{status:e,signIn:t,signOut:o}=yl(),[i,n]=Wi(false),[s,l]=Wi(null);if(typeof document>"u")return null;let c=r(()=>{l(null),n(true),t().catch(u=>l(u instanceof Error?u.message:"Sign-in did not work. Try again.")).finally(()=>n(false))},"start"),d=e.state==="active";return Je(hl,{children:Je("div",{"data-buoy-signin":"",style:{position:"fixed",right:"max(16px, env(safe-area-inset-right))",bottom:"max(20px, env(safe-area-inset-bottom))",zIndex:99999,maxWidth:"min(320px, calc(100vw - 32px))",padding:d||s?"12px 14px":0,borderRadius:16,background:d||s?"#0f1419":"transparent",color:"#e6edf3",boxShadow:d||s?"0 10px 30px rgba(0,0,0,.35)":"none",fontFamily:"system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontSize:14,lineHeight:1.45},children:d?Ki(Ui,{children:[Je("div",{"data-testid":"buoy-signin-needs-plan",children:"Buoy on a live site needs a Pro or Business plan."}),Je("button",{type:"button",onClick:()=>void o(),style:bl,"data-testid":"buoy-signout",children:"Sign out"})]}):Ki(Ui,{children:[s?Je("div",{role:"alert",style:{marginBottom:10},"data-testid":"buoy-signin-error",children:s}):null,Je("button",{type:"button",onClick:c,disabled:i,"data-testid":"buoy-signin",style:{display:"inline-flex",alignItems:"center",gap:8,padding:"10px 16px",border:"none",borderRadius:999,background:Vi,color:"#04130d",fontWeight:600,fontSize:14,cursor:i?"wait":"pointer",boxShadow:"0 8px 24px rgba(0,0,0,.3)"},children:i?"Signing in\u2026":"Sign in to Buoy"})]})})})}r(qi,"BuoySignIn");var bl={marginTop:8,padding:0,border:"none",background:"none",color:Vi,fontSize:14,cursor:"pointer",textDecoration:"underline"};import{LicenseManager as Qc}from"@buoy-gg/license/web";var vl=false;function Gi(){if(!vl){try{let e=process.env.EXPO_PUBLIC_BUOY_KEY;if(e)return e}catch{}try{let e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}}}r(Gi,"defaultLicenseKey");import{useState as Sl}from"react";import{AccountSetupButton as wl,BuoyNeedsPlanCard as xl,BuoySignInCard as Tl,useSignInState as Il}from"@buoy-gg/shared-ui/web";import{jsx as st,jsxs as Ji}from"react/jsx-runtime";function wo({needsPlan:e=false}){let[t,o]=Sl(false),i=Il();return Ji(H,{pointerEvents:"box-none",style:Yi.root,children:[st(wl,{expanded:t,onPress:()=>o(true)}),t?st(mr,{visible:true,transparent:true,animationType:"fade",onRequestClose:()=>o(false),children:Ji(H,{style:Yi.overlay,accessibilityViewIsModal:true,children:[st(pr,{style:ct.absoluteFill,onPress:()=>o(false),accessible:false}),e&&i==="active"?st(xl,{onClose:()=>o(false)}):st(Tl,{onClose:()=>o(false)})]})}):null]})}r(wo,"BuoySignIn");var Yi=ct.create({root:{position:"absolute",bottom:30,right:16,zIndex:99999},overlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.65)",alignItems:"center",justifyContent:"center",padding:20}});function xo(e){if(e.length>6){let t=e.map(o=>`"${o}"`).join(", ");return e.slice(0,6)}return e}r(xo,"validateDialConfig");import{installedTools as Cl,installedToolsFound as kl}from"@buoy-gg/core/web/installed-tools";import{Fragment as To,jsx as $,jsxs as lt}from"react/jsx-runtime";var Xi={},Qi="@react_buoy_floating_menu_tooltip_shown",zl=Oe;function Zi({size:e=14,color:t="#20C997"}){let o=Math.max(2,e/4),i=Math.max(1,e/16);return $("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${o}px)`,gap:i,width:e,height:e,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((n,s)=>$("div",{style:{width:o,height:o,borderRadius:o/2,backgroundColor:t}},s))})}r(Zi,"MenuLauncherIcon");function er(e){let{defaultFloatingTools:t,defaultDialTools:o,disableHints:i=false,children:n}=e,s=he(()=>o&&xo(o),[o]);return $(Jt,{defaultFloatingTools:t,defaultDialTools:s,children:$(Ir,{disableHints:i,children:lt(uo,{children:[$(Kn,{children:$(rr,{...e})}),n]})})})}r(er,"AdmittedFloatingDevTools");var Al=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function tr({modules:e=Xi}){return $(To,{children:Object.entries(e).flatMap(([t,o])=>Al.map(i=>{let n=o[i];return n?$(n,{},`${t}:${i}`):null}))})}r(tr,"StartupCapture");function or(){let{openApps:e,restore:t}=rt();return Q(()=>Ro(o=>{let i=e.find(n=>n.id===o);return i?(t(i.instanceId),true):false}),[e,t]),null}r(or,"WebToolOpenerBridge");function nr(){let e=xr();return Cr((e===null?process.env.NODE_ENV:e?"development":"production")??"dev")}r(nr,"defaultEnvironment");function ir(e,t,o,i){let n=r(g=>Object.entries(e).find(([S])=>S.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===g)?.[1],"find"),s=[],l=n("env");t?.length&&l?.createEnvTool&&l.createEnvVarConfig&&s.push(Ge(l.createEnvTool({requiredEnvVars:l.createEnvVarConfig(t)})));let c=n("storage");o?.length&&c?.createStorageTool&&s.push(Ge(c.createStorageTool({requiredStorageKeys:o})));let d=n("ask-buoy"),u=i==="hosted"?d?.hostedAskBuoy?.():i;return u&&d?.createAskBuoyTool&&s.push(Ge(d.createAskBuoyTool(u))),s}r(ir,"configOverrides");function rr({environment:e,userRole:t="admin",availableEnvironments:o,onEnvironmentSwitch:i,apps:n,modules:s=Xi,externalSync:l,requiredEnvVars:c,sentryGetClient:d,disableHints:u=false,headless:g=false,hidden:S=false,defaultFloatingTools:h,defaultDialTools:B,zustandStores:I,requiredStorageKeys:R,askBuoy:L}){let D=e??nr(),E=he(()=>B?xo(B):void 0,[B]),[z,v]=Pt(false),[C,F]=Pt(false),M=Mo(false),T=rt(),ee=he(()=>ir(s,c,R,L),[s,c,R,L]),{allowedTools:V}=zo(),K=he(()=>Dr(Lt([...po(s),...n??[],...ee]),V),[n,s,ee,V]),{openApps:J,close:q}=T;Q(()=>{if(V)for(let a of J)Or(a.id,V)||q(a.instanceId)},[J,V,q]);let ne=he(()=>Object.entries(s).find(([a])=>a.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[s]);Q(()=>{if(!I||typeof ne?.watchStores!="function")return;let a=ne.watchStores(I);return typeof a=="function"?a:void 0},[I,ne]);let Z=At(),ue=T.openApps.some(a=>!a.minimized);Q(()=>{Z.setDialOpen(z)},[z,Z.setDialOpen]),Q(()=>{Z.setToolOpen(ue||C)},[ue,C,Z.setToolOpen]);let{registerApps:xe}=T;Q(()=>{xe(K.map(a=>{let x=a.icon;return{...a,icon:typeof x=="function"?({size:A})=>x(A):x}}))},[xe,K]);let be=he(()=>K.map(a=>({id:a.id,name:a.name,description:a.description,slot:a.slot})),[K]);zr({availableTools:be,storage:zl}),Q(()=>{let a=false;return r(async()=>{let[x,A]=await Promise.all([Oe.getItem(pt.dial.isOpen()),Oe.getItem(pt.settings.modalOpen())]);a||(x==="true"&&v(true),A==="true"&&(v(true),F(true)),M.current=true)},"restore")(),()=>{a=true}},[]),Q(()=>{M.current&&Oe.setItem(pt.dial.isOpen(),z?"true":"false")},[z]),Q(()=>{M.current&&Oe.setItem(pt.settings.modalOpen(),C?"true":"false")},[C]);let ie=_e(a=>{if(un(a.id),a.launchMode==="toggle-only"){a.onPress?.();return}if(a.component){let x=typeof a.icon=="function"?a.icon(20):a.icon;T.open({id:a.id,title:a.name||ut(a.id),component:a.component,props:a.props,modal:a.modal,launchMode:a.launchMode||"self-modal",singleton:a.singleton??true,icon:x,color:a.color||Do(a.id)})}else a.onPress?.()},[T]),W=Mo({tools:K,openApps:T.openApps,openTool:ie});W.current={tools:K,openApps:T.openApps,openTool:ie},Q(()=>Ro(a=>{let{tools:x,openApps:A,openTool:_}=W.current;if(A.some(Y=>Y.id===a))return false;let G=x.find(Y=>Y.id===a);return!G||G.launchMode==="toggle-only"?false:(_(G),true)}),[]);let me=he(()=>mt(K,"dial").map(a=>{let x=a.color||Do(a.id),A;return typeof a.icon=="string"?A=a.icon:typeof a.icon=="function"?A=a.icon(32):A=null,{id:a.id,name:a.name||ut(a.id),icon:A,unavailable:!a.component&&!a.onPress,color:x,onPress:r(()=>{ie(a),v(false)},"onPress")}}),[K,ie]),Re=he(()=>{if(!z)return me;let a=new Map(me.map(x=>[x.id,x]));return dn(me.map(x=>x.id)).map(x=>a.get(x)).filter(x=>!!x)},[z,me]),{settings:Te}=zn(),$e=he(()=>mt(K,"row").filter(a=>(Te.floatingTools[a.id]??false)===true&&(a.component||a.onPress)),[K,Te.floatingTools]),pe=he(()=>K.map(a=>({id:a.id,name:a.name||ut(a.id),description:a.description||Ar(a.id),slot:a.slot,icon:a.icon,color:a.color})),[K]),[oe,Ie]=Pt(false),ge=T.openApps.some(a=>!a.minimized);Q(()=>{if(u)return;let a=false,x=setTimeout(async()=>{let A=await Oe.getItem(Qi);!a&&!A&&Ie(true)},1e3);return()=>{a=true,clearTimeout(x)}},[u]);let ae=_e(()=>{Ie(false),Oe.setItem(Qi,"true")},[]),Ce=_e(()=>{ae(),v(true)},[ae]),ke=_e(()=>{v(false),F(false)},[]),Ye=_e(()=>{F(a=>!a)},[]),je=_e(()=>F(false),[]),ve=!!(o?.length&&i),Me=Te.floatingTools.environment!==false,fe=oe&&!z&&!ge&&!S;Q(()=>{if(!fe)return;let a=r(A=>{(!(A.target instanceof Element)||!A.target.closest("[data-buoy-root]"))&&ae()},"onPointerDown"),x=r(A=>{A.key==="Escape"&&ae()},"onKeyDown");return document.addEventListener("pointerdown",a,true),document.addEventListener("keydown",x),()=>{document.removeEventListener("pointerdown",a,true),document.removeEventListener("keydown",x)}},[fe,ae]);let ze=T.openApps.some(a=>a.minimized&&a.launchMode!=="toggle-only"),O=$(ji,{modules:s,apps:n,requiredEnvVars:c,externalSync:l,headless:g,sentryGetClient:d});return g?O:lt("div",{"data-buoy-root":"",style:{display:"contents"},children:[O,$(or,{}),fe&&$("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),$("div",{style:S?{visibility:"hidden"}:{display:"contents"},"aria-hidden":S||void 0,children:lt(Po,{enablePositionPersistence:!fe,pushToSide:z||ge,suspendPointerEvents:z,centerOnboarding:fe,minimizedStack:ze?$(li,{}):void 0,hasMinimizedStack:ze,children:[D&&Me&&!ve&&$(Br,{environment:D}),ve&&Me&&$(Rr,{currentEnvironment:D??"local",availableEnvironments:o,onSelect:i}),t?$(Lo,{userRole:t,onPress:Ce}):$("button",{"aria-label":"Open dev tools",onClick:Ce,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:$(Zi,{})}),$e.map(a=>$("button",{"aria-label":a.name||ut(a.id),title:a.description,onClick:()=>ie(a),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof a.icon=="function"?a.icon(16):a.icon},a.id))]})}),fe&&$(jt,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:ae}),z&&!S&&$(Wt,{icons:Re,onClose:ke,centerLabel:"BUOY",onCenterPress:Ye,settingsOpen:C,hintsDisabled:u,emptyNote:V&&Re.length===0?Er:void 0}),C&&!S&&$(eo,{visible:true,onClose:je,availableTools:pe,defaultFloatingTools:h,defaultDialTools:E,onSettingsChange:a=>{}}),!S&<(To,{children:[$(Vn,{}),$(yr,{})]})]})}r(rr,"FloatingDevToolsInner");function ar(e){let t=e&&typeof e=="object"?e.appId:void 0,o=!!e;Q(()=>{if(!o)return;let i=false,n=br.SessionManager;if(!n)return;let s=r(l=>{i||!l||(n.configure({audience:`app:${l}`}),n.load().catch(()=>{}))},"apply");return t?s(t):Bo().then(l=>s(l?.bundleId)).catch(()=>{}),()=>{i=true}},[o,t])}r(ar,"useCapacitorSignInAudience");function sr(e){let t=e&&typeof e=="object"?e.appId:void 0;Q(()=>{let o=false;return t?Et(t):Ao()?Bo().then(i=>{o||Et(i?.bundleId)}).catch(()=>{}):typeof location<"u"&&location.origin&&location.origin!=="null"&&Et(location.origin),()=>{o=true}},[t])}r(sr,"usePublishAppId");var lr=false;function cr(e){return e.modules?e:(!kl&&!lr&&typeof console<"u"&&(lr=true,console.info("[Buoy] No tools loaded. Add buoy() from '@buoy-gg/core/vite' to your Vite plugins, or pass modules to FloatingDevTools.")),{...e,modules:Cl})}r(cr,"withInstalledTools");function dr(e){return $(hr,{children:$(ur,{...cr(e)})})}r(dr,"FloatingDevTools");function ur(e){let{access:t,isPro:o,licenseKey:i}=zo();Q(()=>{vr.configure(e.licenseKey??Gi())},[e.licenseKey]);let n=e.licenseKey===void 0||Sr(e.licenseKey,i),s=wr(typeof He<"u"?He:process.env.NODE_ENV!=="production"),l=n&&t.status==="admitted";Q(()=>{l&&kr()},[l]),Q(()=>{s||t.status==="initializing"||(o&&l?gr():fr())},[s,o,l,t.status]);let c=Ao();return ar(c?e.signIn:void 0),sr(e.signIn),!s&&!o?!e.signIn||e.headless?null:c?$(wo,{needsPlan:true}):$(qi,{}):l?$(er,{...e}):lt(To,{children:[t.status==="initializing"&&$(tr,{modules:e.modules}),e.headless?null:e.signIn&&c?$(wo,{}):$(Tr,{})]})}r(ur,"FloatingDevToolsContent");export{Mr as a,Oo as b,Lt as c,mt as d,Eo as e,Po as f,Pr as g,Lo as h,Wt as i,eo as j,oo as k,Ln as l,Nn as m,Kn as n,rt as o,Vn as p,Ge as q,uo as r,At as s,po as t,$i as u,dr as v};
|
package/lib/web/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{a as m,b as d,c,d as p,e as C,f as g,g as y,h as f,i as S,j as T,k as v,l as h,m as b,n as D,o as B,p as P,q as k,r as w,s as E,t as H,u as M,v as i}from"./chunks/chunk-
|
|
1
|
+
"use client";import{a as m,b as d,c,d as p,e as C,f as g,g as y,h as f,i as S,j as T,k as v,l as h,m as b,n as D,o as B,p as P,q as k,r as w,s as E,t as H,u as M,v as i}from"./chunks/chunk-LAJ3HKAL.mjs";import{$ as A,A as F,Aa as L,B as R,Ba as q,C as x,Ca as I,D as U,Da as W,E as j,Ea as J,F as K,Fa as O,G as V,Ga as G,H as X,Ha as z,I as N,Ia as Q,J as Z,Ja as Y,K as _,Ka as $,L as aa,La as sa,M as ea,Ma as oa,N as ta,Na as ra,O as la,Oa as ia,P as na,Pa as ua,Q as ma,R as da,S as ca,T as pa,U as Ca,V as ga,W as ya,X as fa,Y as Sa,Z as Ta,_ as va,a as ha,aa as ba,b as Da,ba as Ba,c as Pa,ca as ka,d as wa,da as Ea,e as Ha,ea as Ma,f as Aa,fa as Fa,g as La,ga as Ra,h as qa,ha as xa,i as Ia,ia as Ua,j as Wa,ja,k as Ja,ka as Ka,l as Oa,la as Va,m as Ga,ma as Xa,n as za,na as Na,o as Qa,oa as Za,p as Ya,pa as _a,q as $a,qa as as,r as ss,ra as es,s as os,sa as ts,t as rs,ta as ls,u as is,ua as ns,v as us,va as ms,w as ds,wa as cs,x as ps,xa as Cs,y as gs,ya as ys,z as fs,za as Ss}from"./chunks/chunk-V4BVRDHL.mjs";import"./chunks/chunk-C6HZO5XT.mjs";import{c as Ts}from"./chunks/chunk-D2FYORGY.mjs";import{a as vs}from"./chunks/chunk-LOPXJLVB.mjs";import{useSettings as hs,useFloatingTools as bs,getToolLabel as Ds,getToolDescription as Bs,getToolColor as Ps,settingsColors as ks,settingsStyles as ws,dialColors as Es,dialStyles as Hs}from"@buoy-gg/floating-tools-react/web";import{LicenseManager as Ms}from"@buoy-gg/license/web";import{createRoot as As}from"react-dom/client";import{createElement as Fs}from"react";import{installedTools as Ls}from"@buoy-gg/core/web/installed-tools";import{jsx as Rs}from"react/jsx-runtime";function n({queryClient:s,...e}={}){let o=Object.values(e.modules??Ls).find(u=>u.QueryClientProvider)?.QueryClientProvider;if(s&&!o)throw new Error("Add the react-query tool to modules to use queryClient.");let a=document.createElement("div");a.dataset.buoyMount="",document.body.appendChild(a);let t=As(a),r=Rs(i,{...e});t.render(s?Fs(o,{client:s},r):r);let l=true;return()=>{l&&(l=false,t.unmount(),a.remove())}}vs(n,"mountBuoy");export{X as Activity,as as AlertCircle,N as AlertTriangle,D as AppHostProvider,P as AppOverlay,wa as Badge,es as BarChart3,is as BaseEventStore,ts as Bookmark,Z as Bug,Ia as Button,Ga as Card,_ as Check,aa as CheckCircle,$ as CheckSquare,ea as ChevronDown,ta as ChevronLeft,la as ChevronRight,na as ChevronUp,ma as Clock,ls as Cloud,Qa as CollapsibleSection,da as Copy,Wa as CopyButton,rs as DataViewer,ca as Database,w as DevToolsVisibilityProvider,S as DialMenu,La as DiffViewer,y as Divider,ns as Download,ms as Edit3,$a as EmptyState,os as EventStepperFooter,pa as Eye,Ca as EyeOff,ga as FileJson,ya as FileText,fa as Filter,Sa as FlaskConical,i as FloatingDevTools,g as FloatingTools,cs as GitBranch,Ta as Globe,Cs as HardDrive,va as Hash,ys as HelpCircle,Ss as Home,L as Image,A as Info,Aa as InfoRow,V as JsModal,ba as Key,Ba as Layers,Ms as LicenseManager,q as Link,ka as Lock,I as Maximize2,W as Minus,J as Palette,Ea as Pause,O as Pin,Ma as Play,Fa as Plus,Ra as Power,Ja as PowerToggle,xa as RefreshCw,us as RelativeTime,G as Route,Oa as Row,Ua as Search,ss as SearchBar,za as SectionHeader,z as Server,ja as Settings,T as SettingsModal,Ka as Shield,Q as Smartphone,Y as Square,Ha as StatusDot,Ya as TabSelector,sa as Timer,Va as Trash2,oa as Unlock,ra as Upload,Xa as User,f as UserStatus,ia as Users,Na as Wifi,Za as X,ua as XCircle,_a as Zap,M as appSyncAdapter,d as autoDiscoverWebPresets,c as autoDiscoverWithCustom,Ts as clearReleaseOptIn,K as copyToClipboard,k as createWebTool,H as createWebTools,m as defaultToolPresets,U as devToolsStorageKeys,Es as dialColors,Hs as dialStyles,ds as formatBytes,ps as formatDuration,gs as formatNumber,C as getEnabledTools,Ps as getToolColor,Bs as getToolDescription,Ds as getToolLabel,p as getToolsBySlot,b as isBuoyHoldingBackButton,Da as methodColor,n as mountBuoy,x as persistentStorage,F as safeStringify,ks as settingsColors,ws as settingsStyles,ha as statusColor,qa as toolTheme,fs as truncateMiddle,Pa as typeColor,B as useAppHost,E as useDevToolsVisibility,bs as useFloatingTools,R as usePersistedState,j as useSafeAreaInsets,hs as useSettings,h as useToolHeader,v as useToolHost};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/core",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.77",
|
|
4
4
|
"description": "Floating developer menu and account setup for React Native. Add tool packages and configure Desktop or MCP connections separately.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -89,10 +89,10 @@
|
|
|
89
89
|
],
|
|
90
90
|
"dependencies": {
|
|
91
91
|
"react-devtools-core": "6.1.5",
|
|
92
|
-
"@buoy-gg/floating-tools-
|
|
93
|
-
"@buoy-gg/
|
|
94
|
-
"@buoy-gg/
|
|
95
|
-
"@buoy-gg/
|
|
92
|
+
"@buoy-gg/floating-tools-core": "^7.0.77",
|
|
93
|
+
"@buoy-gg/floating-tools-react": "^7.0.77",
|
|
94
|
+
"@buoy-gg/license": "^7.0.77",
|
|
95
|
+
"@buoy-gg/shared-ui": "^7.0.77"
|
|
96
96
|
},
|
|
97
97
|
"peerDependencies": {
|
|
98
98
|
"react": "*"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{v as o}from"./chunk-LU4GPZ5L.mjs";import"./chunk-Z6I7ZD34.mjs";import"./chunk-D2FYORGY.mjs";import"./chunk-LOPXJLVB.mjs";export{o as FloatingDevTools};
|