@buoy-gg/core 7.0.78 → 7.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/bundlers/vite.d.ts +1 -1
  2. package/bundlers/vite.mjs +3 -3
  3. package/lib/commonjs/earlyNetwork.js +1 -1
  4. package/lib/commonjs/floatingMenu/AppHost.js +1 -1
  5. package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
  6. package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -1
  7. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
  8. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
  9. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -1
  10. package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -1
  11. package/lib/commonjs/floatingMenu/backTarget.js +1 -0
  12. package/lib/commonjs/floatingMenu/capacitorBackButton.js +1 -1
  13. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -1
  14. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -1
  15. package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -1
  16. package/lib/commonjs/floatingMenu/hardwareBack.js +1 -0
  17. package/lib/commonjs/version.js +1 -1
  18. package/lib/module/earlyNetwork.js +1 -1
  19. package/lib/module/floatingMenu/AppHost.js +1 -1
  20. package/lib/module/floatingMenu/AppHost.web.js +1 -1
  21. package/lib/module/floatingMenu/AppHostLogic.js +1 -1
  22. package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
  23. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
  24. package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -1
  25. package/lib/module/floatingMenu/autoExternalSync.js +1 -1
  26. package/lib/module/floatingMenu/backTarget.js +1 -0
  27. package/lib/module/floatingMenu/capacitorBackButton.js +1 -1
  28. package/lib/module/floatingMenu/dial/DialDevTools.js +1 -1
  29. package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -1
  30. package/lib/module/floatingMenu/externalSyncGate.js +1 -1
  31. package/lib/module/floatingMenu/hardwareBack.js +1 -0
  32. package/lib/module/version.js +1 -1
  33. package/lib/typescript/commonjs/earlyNetwork.d.ts +19 -4
  34. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts +6 -0
  35. package/lib/typescript/commonjs/floatingMenu/backTarget.d.ts +17 -0
  36. package/lib/typescript/commonjs/floatingMenu/capacitorBackButton.d.ts +5 -3
  37. package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
  38. package/lib/typescript/commonjs/floatingMenu/hardwareBack.d.ts +8 -0
  39. package/lib/typescript/commonjs/version.d.ts +1 -1
  40. package/lib/typescript/module/earlyNetwork.d.ts +19 -4
  41. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts +6 -0
  42. package/lib/typescript/module/floatingMenu/backTarget.d.ts +17 -0
  43. package/lib/typescript/module/floatingMenu/capacitorBackButton.d.ts +5 -3
  44. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
  45. package/lib/typescript/module/floatingMenu/hardwareBack.d.ts +8 -0
  46. package/lib/typescript/module/version.d.ts +1 -1
  47. package/lib/web/auto.mjs +1 -1
  48. package/lib/web/chunks/{FloatingDevTools.web-FB3F35HU.mjs → FloatingDevTools.web-5EMC7ZIE.mjs} +1 -1
  49. package/lib/web/chunks/{FloatingDevTools.web-IIOOVSUC.mjs → FloatingDevTools.web-QLTO5FXP.mjs} +1 -1
  50. package/lib/web/chunks/chunk-EFTCKGMC.mjs +10 -0
  51. package/lib/web/chunks/chunk-JXTHZBMM.mjs +10 -0
  52. package/lib/web/chunks/chunk-OXRZOHYP.mjs +1 -0
  53. package/lib/web/index.mjs +1 -1
  54. package/lib/web/register-network.mjs +1 -1
  55. package/lib/web/register.mjs +1 -1
  56. package/package.json +5 -5
  57. package/lib/web/chunks/chunk-5EUMNDI5.mjs +0 -1
  58. package/lib/web/chunks/chunk-A6DQ5EDK.mjs +0 -10
  59. package/lib/web/chunks/chunk-LAJ3HKAL.mjs +0 -10
@@ -0,0 +1,10 @@
1
+ "use client";import{a as dt,b as H,c as K,d as De,e as ut,f as hr,g as ko,h as yr,i as $l,j as zo,k as Ne}from"./chunk-C6HZO5XT.mjs";import{b as br,c as vr}from"./chunk-D2FYORGY.mjs";import{a as r,b as Ao,e as He}from"./chunk-LOPXJLVB.mjs";import{BuoyPortal as Sr,FloatingToolHost as wr}from"@buoy-gg/shared-ui/web/floating";import*as xr from"@buoy-gg/license/web";import{LicenseManager as Tr,useLicense as Bo,sameLicenseKey as Ir,resolveDevBuild as Cr,capacitorDebug as kr,isCapacitorNative as Ro,loadCapacitorAppHost as Mo}from"@buoy-gg/license/web";import{AccountSetup as zr,HintsProvider as Ar,normalizeEnvironment as Br,registerToolOpener as Do,setBuoyAppId as Lt,startSettingsSync as Rr}from"@buoy-gg/shared-ui/web";import{useState as pt,useMemo as fe,useCallback as We,useEffect as G,useRef as Oo}from"react";import{useSettings as Mr,getToolLabel as mt,getToolDescription as Dr,getToolColor as Po}from"@buoy-gg/floating-tools-react/web";import{persistentStorage as Oe,devToolsStorageKeys as gt,EnvironmentIndicator as Or,EnvironmentSelectorInline as Pr}from"@buoy-gg/shared-ui/web";var Er=[];function Eo(){return[]}r(Eo,"autoDiscoverWebPresets");function Ft(e=[]){return[...new Map(e.map(t=>[t.id,t])).values()]}r(Ft,"autoDiscoverWithCustom");function ft(e,t){return e.filter(o=>{let i=o.slot||"both";return i==="both"||i===t})}r(ft,"getToolsBySlot");function Lo(e,t){let o=t instanceof Set?t:new Set(t);return e.filter(i=>o.has(i.id))}r(Lo,"getEnabledTools");import{filterTeamTools as Lr,isTeamToolAllowed as Fr}from"@buoy-gg/floating-tools-core/web";var $r="No tools are on for your role. Ask your team admin.";import{FloatingTool as Fo,FloatingToolDivider as jr,FloatingToolUserStatus as $o,getBubbleAnchorPosition as Nr}from"@buoy-gg/shared-ui/web/floating";import{useState as te,useEffect as Pe,useMemo as ht,useRef as yt,useCallback as bt}from"react";var jo={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 No(e,t){return e&&jo[e]?jo[e]:t}r(No,"dialAccessibilityLabel");import{getDialLayout as Hr,getAllIconPositions as Wr,getGridLineRotations as _r,getIconStaggerInputRange as Ur,MAX_DIAL_SLOTS as Qe,DIAL_ICON_SIZE as Kr,dialAnimationConfig as Ho,getDialCSSKeyframesString as Vr,getDialCSSAnimationStyles as qr,dialColors as j,dialStyles as I,withAlpha as Wo,floatingToolsColors as Gr}from"@buoy-gg/floating-tools-react/web";import{persistentStorage as _o,monoFont as $t,ToolBackground as Jr,useToolBackground as Yr}from"@buoy-gg/shared-ui/web";import{memo as Xr}from"react";import{RasterLayer as Qr,scatter as Zr,useLoop as ea,withBgAlpha as ta}from"@buoy-gg/shared-ui/web";import{Fragment as oa,jsx as Ze}from"react/jsx-runtime";var na=.94,ia=6,ra=2400,vt=3,Uo=16,aa=Array.from({length:vt},(e,t)=>Zr(22343^t*40503,Uo*4)),Ko=["#FFFFFF","#B3D9FF","#8CB3FF"],Vo=Math.PI/3,qo=14*Math.PI/180;function Go(e){let t=Math.min(5,Math.floor(e*6)),o=e*6-t;return t*Vo+qo/2+o*(Vo-qo)}r(Go,"spokeClearAngle");function Jo(e){return Math.min(ia,1/(1-e*na))}r(Jo,"scaleAt");function Yo(e){let t=.15+.85*e*e;return e<.06?t*=e/.06:e>.94&&(t*=(1-e)/.06),Math.min(.7,t)}r(Yo,"opacityAt");function Xo(e){let t=e/vt,o=[],i=12;for(let u=0;u<=i;u++)o.push(u/i);let n=(1-t)%1;n>.001&&n<1-.001&&o.push(n-1e-4,n+1e-4),o.sort((u,d)=>u-d);let a=[],s=[],c=[];for(let u of o){let d=t===0&&u===1?1:(u+t)%1;a.push(u),s.push(Jo(d)),c.push(Yo(d))}return{input:a,scale:s,opacity:c}}r(Xo,"shellStops");var sa=Array.from({length:vt},(e,t)=>Xo(t)),la=Xr(r(function({size:e}){let t=ea(ra),o=e/2,i=[];for(let n=0;n<vt;n++){let a=aa[n],s=sa[n],c=[];for(let u=0;u<Uo;u++){let d=Go(a[u*4]),g=(.15+.85*Math.sqrt(a[u*4+1]))*.5*o,x=Ko[Math.floor(a[u*4+3]*Ko.length)%3],h=o+Math.cos(d)*g,B=o+Math.sin(d)*g,k=.6,R=k*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:ta(x,.3)}},`${u}-h`),Ze(H,{style:{position:"absolute",left:h-k/2,top:B-k/2,width:k,height:k,borderRadius:k/2,backgroundColor:x}},u))}i.push(Ze(De.View,{style:{position:"absolute",left:0,top:0,width:e,height:e,opacity:t.interpolate({inputRange:s.input,outputRange:s.opacity}),transform:[{scale:t.interpolate({inputRange:s.input,outputRange:s.scale})}]},pointerEvents:"none",children:Ze(Qr,{style:{width:e,height:e},raster:false,children:c})},n))}return Ze(oa,{children:i})},"DialHyperspace"));import{useEffect as ca,useState as Qo}from"react";import{dialColors as _e,withAlpha as Zo}from"@buoy-gg/floating-tools-react/web";import{ARROW_BOTTOM_OFFSET as da,ARROW_HEIGHT as ua,SPACING_GAP as ic,getScreenCenterY as rc,calculateTooltipPosition as pa,calculateTargetPosition as ac}from"@buoy-gg/shared-ui/web/floating";import{monoFont as en}from"@buoy-gg/shared-ui/web";import{jsx as Ue,jsxs as tn}from"react/jsx-runtime";var on=false;function nn(){if(on||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),on=true}r(nn,"injectOnboardingKeyframes");var jt=_e.accent;function Nt({title:e,message:t,onDismiss:o,showArrow:i=true}){let[n,a]=Qo(false),[s,c]=Qo(false);ca(()=>{nn();let d=requestAnimationFrame(()=>a(true));return()=>cancelAnimationFrame(d)},[]);let u={fontFamily:en,textTransform:"uppercase"};return Ue("div",{style:{position:"fixed",left:"50%",bottom:pa(),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:tn("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}}),tn("div",{style:{position:"relative",maxWidth:280,backgroundColor:_e.dialBackground,borderRadius:16,border:`1px solid ${_e.dialBorder}`,padding:20,boxShadow:`0 0 20px ${Zo(_e.dialShadow,.6)}`,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[Ue("span",{style:{...u,fontSize:16,fontWeight:900,letterSpacing:1,color:jt,textAlign:"center"},children:e}),Ue("span",{style:{fontFamily:en,fontSize:13,lineHeight:"20px",color:_e.centerText,textAlign:"center"},children:t}),Ue("button",{onClick:o,onPointerDown:()=>c(true),onPointerUp:()=>c(false),onPointerLeave:()=>c(false),onPointerCancel:()=>c(false),style:{...u,marginTop:8,borderRadius:8,border:"none",backgroundColor:jt,padding:"10px 24px",fontSize:14,fontWeight:900,letterSpacing:1.5,color:"#000000",cursor:"pointer",opacity:s?.7:1,transform:s?"scale(0.96)":"scale(1)",transition:"transform 100ms ease, opacity 100ms ease"},children:"Got it!"})]}),i&&Ue("div",{style:{position:"absolute",left:"50%",bottom:da,marginLeft:-12,width:0,height:0,borderLeft:"12px solid transparent",borderRight:"12px solid transparent",borderTop:`${ua}px solid ${jt}`,filter:`drop-shadow(0 0 10px ${Zo(_e.dialShadow,.5)})`,animation:n?"buoyOnboardArrowBounce 1.6s ease-in-out infinite":"none"}})]})})}r(Nt,"OnboardingTooltip");import{useEffect as ma,useRef as ga}from"react";import{capacitorPlatform as fa,capacitorPlugin as ha}from"@buoy-gg/license/web";function rn(){return globalThis.__BUOY_HOLDS_BACK__===true}r(rn,"isBuoyHoldingBackButton");var ya=99.5,ba=99.6,St=0;function an(){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(an,"ionicHandlesBack");function Ht(e,t,o=ya){let i=ga(t);i.current=t,ma(()=>{if(!e||fa()!=="android")return;let n=globalThis;St+=1,n.__BUOY_HOLDS_BACK__=true;let a=r(()=>{St=Math.max(0,St-1),n.__BUOY_HOLDS_BACK__=St>0},"release"),s;if(an()){let c=r(u=>{u.detail?.register?.(o,()=>{i.current()})},"listener");document.addEventListener("ionBackButton",c),s=r(()=>document.removeEventListener("ionBackButton",c),"cleanup")}else{let c=ha("App");if(!c?.addListener){a();return}let u=false,d=null;Promise.resolve(c.addListener("backButton",()=>i.current())).then(g=>{u?g.remove():d=g}).catch(()=>{}),s=r(()=>{u=true,d&&d.remove()},"cleanup")}return()=>{s(),a()}},[e,o])}r(Ht,"useCapacitorBackButton");import{Fragment as va,jsx as L,jsxs as we}from"react/jsx-runtime";var Sa={x:.5,y:.5},sn="@react_buoy_settings_tooltip_shown",ln=false;function cn(){if(ln||typeof document>"u")return;let e=document.createElement("style");e.textContent=Vr(),document.head.appendChild(e),ln=true}r(cn,"injectKeyframes");var Ke=r(e=>1-Math.pow(1-e,3),"easeOutCubic"),Wt=r(e=>e*e*e,"easeInCubic");function dn({icon:e,index:t,totalIcons:o,position:i,progress:n,onPress:a}){let[s,c]=te(false),[u,d]=te(false),g=!e.icon&&e.id.startsWith("empty-"),x=!g&&e.unavailable===true,h=!g&&!x,{icons:B}=Ho,k=Ur(t,o),R=0;n<=k[1]?R=0:n<=k[2]?R=(n-k[1])/(k[2]-k[1]):R=1,R=Math.max(0,Math.min(1,R));let F=Kr,D=B.pressIn.scale,P=R*(u?D:s?1.1:1),A=0;R<=0?A=0:R<=.3?A=R:A=.3+(R-.3)*(.7/.7);let V=i.x*(R-1),S=i.y*(R-1);return L("button",{role:"menuitem","aria-label":g?"Empty slot":No(e.id,e.name),"data-testid":e.id?`buoy-dial-${e.id}`:void 0,"aria-disabled":!h,tabIndex:h?0:-1,onClick:h?a:void 0,onPointerEnter:M=>h&&M.pointerType==="mouse"&&c(true),onPointerLeave:()=>{c(false),d(false)},onPointerDown:()=>h&&d(true),onPointerUp:()=>d(false),onPointerCancel:()=>d(false),style:{position:"absolute",left:`calc(50% + ${i.x}px)`,top:`calc(50% + ${i.y}px)`,width:F,height:F,marginLeft:-F/2,marginTop:-F/2,cursor:h?"pointer":"default",background:"none",border:"none",padding:0},children:L("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${V}px, ${S}px) scale(${P})`,opacity:A,transition:s||u?"transform 100ms ease":"none"},children:g?L("div",{style:{width:I.emptySlot.dotSize,height:I.emptySlot.dotSize,borderRadius:I.emptySlot.dotSize/2,backgroundColor:j.emptyDotBackground,border:`${I.emptySlot.borderWidth}px solid ${j.emptyDotBorder}`}}):we(va,{children:[L("div",{style:{position:"absolute",width:`${I.icon.gradientBgSizePercent}%`,height:`${I.icon.gradientBgSizePercent}%`,borderRadius:I.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:I.icon.gradientBgOpacity}}),L("div",{style:{position:"absolute",width:`${I.icon.innerGlowSizePercent}%`,height:`${I.icon.innerGlowSizePercent}%`,borderRadius:I.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:I.icon.innerGlowOpacity}}),L("div",{style:{marginBottom:I.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:s?"brightness(1.2)":"none"},children:e.icon}),L("span",{style:{fontSize:e.name.length>8?Math.max(I.icon.label.fontSize*.7,I.icon.label.fontSize*8/e.name.length):I.icon.label.fontSize,fontWeight:I.icon.label.fontWeight,fontFamily:I.icon.label.fontFamily,color:j.iconLabel,letterSpacing:I.icon.label.letterSpacing,marginTop:I.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:e.name}),x&&L("span",{style:{fontSize:I.icon.label.fontSize-1,fontWeight:I.icon.label.fontWeight,fontFamily:I.icon.label.fontFamily,letterSpacing:I.icon.label.letterSpacing,color:Gr.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}r(dn,"DialIconItem");function _t({side:e,color:t}){return L("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,a],s)=>L("line",{x1:o,y1:i,x2:n,y2:a,stroke:t,strokeWidth:2},s))})}r(_t,"PagerChevron");function Ut({side:e,disabled:t,onClick:o}){let[i,n]=te(false),a=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:$t,letterSpacing:1.5,textTransform:"uppercase",cursor:t?"default":"pointer",opacity:t?.4:1,boxShadow:t?"none":`0 0 8px ${Wo(j.dialShadow,.4)}`,transform:i?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[e==="prev"&&L(_t,{side:"prev",color:a}),e==="prev"?"PREV":"NEXT",e==="next"&&L(_t,{side:"next",color:a})]})}r(Ut,"PagerButton");function Kt({icons:e,onClose:t,centerLabel:o="MENU",onCenterPress:i,settingsOpen:n=false,hintsDisabled:a=false,emptyNote:s}){let{id:c}=Yr(),[u,d]=te(0),[g,x]=te(0),[h,B]=te(0),[k,R]=te(0),[F,D]=te(0),[P,A]=te(1),[V,S]=te(false),[M,_]=te(false),[T,E]=te(false),Q=yt(null),Z=yt(null),U=yt(null),q=yt(false),{entrance:re,exit:ee,interaction:ne}=Ho,xe=qr(),[ge,ye]=te(()=>({width:window.innerWidth,height:window.innerHeight}));Pe(()=>{let O=r(()=>ye({width:window.innerWidth,height:window.innerHeight}),"resize");return window.addEventListener("resize",O),()=>window.removeEventListener("resize",O)},[]);let W=ht(()=>Hr({screenWidth:ge.width,maxCircleSize:Math.max(120,Math.min(320,ge.height-96))}),[ge]),Te=ht(()=>_r(),[]),be=ht(()=>Wr(Qe,W.iconRadius),[W.iconRadius]),[Be,Ie]=te(0),pe=Math.max(1,Math.ceil(e.length/Qe)),oe=Math.min(Be,pe-1),Re=ht(()=>{let O=oe*Qe,w=[...e.slice(O,O+Qe)];for(;w.length<Qe;)w.push({id:`empty-${w.length}`,name:"",icon:null,onPress:r(()=>{},"onPress")});return w},[e,oe]);Pe(()=>{cn()},[]),Pe(()=>{let O=re.backdrop.duration,w=re.dial.rotation.duration,l=re.centerButton.delay,v=re.icons.delay,C=re.icons.duration,J=performance.now(),Y=r(m=>{let f=m-J;d(Math.min(1,f/O));let z=Math.min(1,f/400),X=Ke(z)*1.1;z>.7&&(X-=(z-.7)*.33),z>=1&&(X=1),x(Math.max(0,Math.min(1.05,X)));let le=Math.min(1,f/w);if(B(Ke(le)*360),f>=l){let Se=Math.min(1,(f-l)/300),Et=Ke(Se)*1.15;Se>.6&&(Et-=(Se-.6)*.375),Se>=1&&(Et=1),R(Math.max(0,Math.min(1.05,Et)))}if(f>=v){let Se=Math.min(1,(f-v)/C);D(Ke(Se))}let Xe=v+C;f<Xe?U.current=requestAnimationFrame(Y):(d(1),x(1),B(360),R(1),D(1),E(true))},"animate");return U.current=requestAnimationFrame(Y),()=>{U.current&&cancelAnimationFrame(U.current)}},[]);let me=bt(()=>{if(q.current)return;q.current=true,_(true),U.current&&cancelAnimationFrame(U.current);let O=performance.now(),w=ee.icons.duration,l=ee.centerButton.duration,v=ee.dialScale.duration,C=Math.max(l,v),J=ee.backdrop.duration,Y=r(m=>{let f=m-O;if(f<w){let le=Wt(f/w);D(1-le),U.current=requestAnimationFrame(Y);return}let z=w;if(f<z+C){D(0);let le=Math.min(1,(f-z)/l),Xe=Math.min(1,(f-z)/v);R(1-Wt(le)),x(1-Wt(Xe)),U.current=requestAnimationFrame(Y);return}let X=z+C;if(f<X+J){x(0),R(0);let le=(f-X)/J;d(1-le),U.current=requestAnimationFrame(Y);return}d(0),t()},"animate");U.current=requestAnimationFrame(Y)},[ee,t]);Ht(true,()=>{q.current||(n?i?.():me())},ba),Pe(()=>{let O=document.activeElement,w=Q.current;return()=>{O?.isConnected&&(document.activeElement===document.body||w?.contains(document.activeElement))&&O.focus()}},[]),Pe(()=>{if(n)return;Z.current?.focus();let O=r(w=>{let l=Q.current;if(l){if(w.key==="Escape")w.preventDefault(),me();else if(w.key==="Tab"){let v=Array.from(l.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(Y=>Y.getClientRects().length>0),C=v[0],J=v[v.length-1];(!l.contains(document.activeElement)||(w.shiftKey?document.activeElement===C:document.activeElement===J))&&(w.preventDefault(),(w.shiftKey?J:C)?.focus())}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(w.key)){let v=Array.from(l.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')),C=v.indexOf(document.activeElement);if(C<0||!v.length)return;w.preventDefault();let J=w.key==="Home"?0:w.key==="End"?v.length-1:(C+(w.key==="ArrowRight"||w.key==="ArrowDown"?1:-1)+v.length)%v.length;v[J].focus()}}},"handleKeyDown");return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[me,n]);let[Ce,ae]=te(false);Pe(()=>{if(a)return;let O=false,w=setTimeout(async()=>{let l=await _o.getItem(sn);!O&&!l&&ae(true)},1200);return()=>{O=true,clearTimeout(w)}},[a]);let ve=bt(()=>{ae(false),_o.setItem(sn,"true")},[]);Pe(()=>{n&&Ce&&ve()},[n,Ce,ve]);let Ye=bt(O=>{if(O.id.startsWith("empty-")||q.current)return;let[w,l]=ne.iconSelect.pulse,v=performance.now(),C=150,J=r(Y=>{let m=Y-v;if(m<C){let f=Ke(m/C);A(1-(1-w.scale)*f),requestAnimationFrame(J)}else if(m<C*2){let f=Ke((m-C)/C);A(w.scale+(l.scale-w.scale)*f),requestAnimationFrame(J)}else A(1)},"animatePulse");requestAnimationFrame(J),setTimeout(()=>{O.onPress(),me()},ne.iconSelect.actionDelay)},[ne.iconSelect,me]),$e=bt(O=>{if(q.current)return;let w=Math.max(0,Math.min(O,pe-1));w!==oe&&Ie(w)},[pe,oe]),ke=W.buttonSize*I.centerButton.containerRatio,Me=W.buttonSize*I.centerButton.borderRatio,je=W.buttonSize*I.centerButton.containerRatio/2+6,se=T&&!M;return we("div",{ref:Q,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[L("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:me,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:j.dialBackdrop,opacity:u}}),s?L("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:$t,textAlign:"center",opacity:g>.01?1:0},children:s}):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:`${I.circle.borderWidth}px solid ${j.dialBorder}`,boxShadow:`0 0 ${I.circle.shadowRadius}px ${Wo(j.dialShadow,I.circle.shadowOpacity)}`,transform:`scale(${g}) rotate(${h}deg)`,opacity:g>.01?1:0,overflow:"hidden"},children:[L("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:j.dialGradient1,opacity:I.gradientLayers[0].opacity}}),L("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:j.dialGradient2,opacity:I.gradientLayers[1].opacity}}),L("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:j.dialGradient3,opacity:I.gradientLayers[2].opacity}}),Te.map(O=>L("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:I.grid.lineHeight,transform:`rotate(${O}deg)`,transformOrigin:"center"},children:["left","right"].map(w=>L("div",{style:{position:"absolute",top:0,[w]:0,width:`calc(50% - ${je}px)`,height:I.grid.lineHeight,backgroundColor:j.dialGridLine}},w))},O)),L("div",{"data-testid":"dial-background","data-background":c,style:{position:"absolute",inset:0,pointerEvents:"none"},children:c==="hyperspace"?L(la,{size:W.circleSize}):L(Jr,{focus:Sa})}),Re.map((O,w)=>L(dn,{icon:O,index:w,totalIcons:Re.length,position:be[w],progress:F,onPress:()=>Ye(O)},w)),we("div",{style:{position:"absolute",left:"50%",top:"50%",width:ke,height:ke,marginLeft:-ke/2,marginTop:-ke/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:j.hubHalo,borderRadius:W.buttonSize,overflow:"hidden",transform:`scale(${k*P})`,opacity:k>.01?1:0},children:[L("div",{style:{position:"absolute",inset:0,backgroundColor:j.dialGradient1,opacity:.5,borderRadius:W.buttonSize}}),L("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:j.dialGradient2,opacity:.3,borderRadius:W.buttonSize}}),L("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:j.dialGradient3,opacity:.2,borderRadius:W.buttonSize}}),L("div",{style:{width:Me,height:Me,borderRadius:W.buttonSize*I.centerButton.borderRadiusRatio,backgroundColor:j.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:L("button",{ref:Z,type:"button","aria-label":n?"Close Settings":"Open Dev Tools Settings",disabled:!i,onClick:i,onPointerEnter:O=>O.pointerType==="mouse"&&S(true),onPointerLeave:()=>S(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(${ne.centerHover.scale})`:"scale(1)",transition:`transform ${ne.centerHover.duration}ms ease`,animation:se&&!V?xe.pulse:"none"},children:n?we("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:I.centerButton.text.fontSize-2,fontWeight:I.centerButton.text.fontWeight,fontFamily:I.centerButton.text.fontFamily,color:j.centerText,letterSpacing:I.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${j.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[L("span",{style:{marginBottom:-2},children:"CLOSE"}),L("span",{style:{marginTop:-2},children:"SETTINGS"})]}):L("span",{style:{fontSize:I.centerButton.text.fontSize,fontWeight:I.centerButton.text.fontWeight,fontFamily:I.centerButton.text.fontFamily,color:j.centerText,letterSpacing:I.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:[L(Ut,{side:"prev",disabled:oe<=0,onClick:()=>$e(oe-1)}),we("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:$t,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")]})]}),L(Ut,{side:"next",disabled:oe>=pe-1,onClick:()=>$e(oe+1)})]}),Ce&&!n&&L(Nt,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:ve,showArrow:false})]})}r(Kt,"DialMenu");import{persistentStorage as un,devToolsStorageKeys as wa}from"@buoy-gg/shared-ui/web";import{recordUsage as xa,pruneUsage as Ta}from"@buoy-gg/floating-tools-core/web";var pn=wa.dial.usage(),Ve={},mn=false,Vt=null;function qt(){return Vt||(Vt=(async()=>{try{let e=await un.getItem(pn);if(e){let t=JSON.parse(e);t&&typeof t=="object"&&(Ve=t)}}catch{}finally{mn=true}})(),Vt)}r(qt,"loadDialUsage");qt();function gn(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(gn,"getRankedToolIds");async function fn(e){if(!e)return;mn||await qt();let t=Math.max(Date.now(),...Object.values(Ve).map(o=>o.lastUsed+1));Ve=Ta(xa(Ve,e,t),t);try{await un.setItem(pn,JSON.stringify(Ve))}catch{}}r(fn,"recordToolUsage");import{useCallback as Ia,useMemo as hn}from"react";import{persistentStorage as Ca}from"@buoy-gg/shared-ui/web";import{useState as ie,useEffect as ze,useCallback as wt,useMemo as xt}from"react";import{settingsEventBus as Tt}from"@buoy-gg/floating-tools-core/web";import{useSyncExternalStore as ka}from"react";import{getRegisteredToolModule as za}from"@buoy-gg/shared-ui/web";var Aa=r(()=>()=>{},"noopSubscribe"),Ba=r(()=>null,"serverSnapshot");function yn(){let e=za("@buoy-gg/external-sync");return ka(e?.subscribeSyncStatus??Aa,()=>e?.getSyncStatus?.()??null,Ba)}r(yn,"useDesktopSyncStatus");import{SentryIcon as Ra,WifiCircuitIcon as Ma,ImageOverlayIcon as Da,RenderCountIcon as Oa,Info as Gt,Layers as Pa,ChevronRightIcon as bn,ChevronDown as vn,getStorageBackendType as Ea,getUseLicense as La,signOutOfBuoy as Fa,persistentStorage as Ee,Trash2 as $a,CheckCircle2 as Sn,BuoyUpgradeSheet as ja,BackgroundSwitcher as Na,night as b,NightCard as Le,NightRows as Jt,NightSectionLabel as Ha,NightFootnote as wn,NightSwitch as xn,NightButton as Yt,NightSegmented as Wa,NightBadge as he,NightSeparator as _a,monoFont as Tn}from"@buoy-gg/shared-ui/web";import{EnvIcon as In,StorageIcon as Ua,RoutesIcon as Ka,NetworkIcon as Va,QueryIcon as qa,HighlighterIcon as Ga,ReduxIcon as Ja,EventsIcon as Ya}from"@buoy-gg/floating-tools-core/web";import Xa,{createContext as Qa,useContext as Za}from"react";import{jsx as es}from"react/jsx-runtime";var Cn=Qa({});function Xt({children:e,defaultFloatingTools:t,defaultDialTools:o}){let i=Xa.useMemo(()=>({defaultFloatingTools:t,defaultDialTools:o}),[t,o]);return es(Cn.Provider,{value:i,children:e})}r(Xt,"DefaultConfigProvider");function Qt(){return Za(Cn)}r(Qt,"useDefaultConfig");import ts from"react";import{toolTheme as os}from"@buoy-gg/shared-ui/web";import{jsx as kn}from"react/jsx-runtime";function zn({label:e,size:t,color:o=os.colors.text}){let i=Math.max(Array.from(e.replace(/[\uFE00-\uFE0F\u200D]/g,"")).length,1),n=i<=2?t:t*1.6,a=Math.max(7,Math.min(t*(i===1?.7:.62),n/(.62*i)));return kn("span",{style:{display:"inline-flex",minWidth:t,maxWidth:n,height:t,alignItems:"center",justifyContent:"center",color:o,fontSize:a,fontWeight:800,letterSpacing:.5,whiteSpace:"nowrap",overflow:"hidden"},children:e})}r(zn,"AppTextIcon");function Zt(e,t){return e==null?e:typeof e=="function"?ts.createElement(e,{slot:t.slot,size:t.size,state:t.state,actions:t.actions}):typeof e=="string"||typeof e=="number"?kn(zn,{label:String(e),size:t.size,color:t.color}):e}r(Zt,"renderAppIcon");import{JsModal as ns,devToolsStorageKeys as eo,onSettingsApplied as is,expandableWindowControlsSupported as rs}from"@buoy-gg/shared-ui/web";import{useSafeAreaInsets as as}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",ss=6,It=r(e=>{let t=ss,o={};for(let[i,n]of Object.entries(e))n&&t>0?(o[i]=true,t-=1):o[i]=false;return o},"enforceDialLimit"),ls=r((e,t)=>{let{userStatus:o,environment:i,...n}=e,a=t?Object.entries(n).filter(([s])=>t.includes(s)):Object.entries(n);return{...Object.fromEntries(a),environment:i??false}},"sanitizeFloating"),An=r((e,t,o)=>{if(!t)return e;let i={...e.dialTools,...t.dialTools??{}},n=o?.allowedDialKeys?Object.entries(i).filter(([a])=>o.allowedDialKeys?.includes(a)):Object.entries(i);return{dialTools:It(Object.fromEntries(n)),floatingTools:ls({...e.floatingTools,...t.floatingTools??{}},o?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true,...t.globalSettings??{}}}},"mergeWithDefaults"),cs=r((e=[],t,o)=>{let i={},n={},a=new Set(t??[]),s=new Set(o??[]),c=!o||o.length===0;for(let u of e){let{id:d,slot:g="both"}=u;(g==="dial"||g==="both")&&(i[d]=c?true:s.has(d)),(g==="row"||g==="both")&&(n[d]=a.has(d))}return{dialTools:It(i),floatingTools:{...n,environment:a.has("environment")},globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true}}},"generateDefaultSettings"),ds=r(({visible:e,onClose:t,onSettingsChange:o,initialSettings:i,availableApps:n=[],storage:a=Ee,zIndex:s})=>{let{defaultFloatingTools:c,defaultDialTools:u}=Qt(),d=xt(()=>cs(n,c,u),[n,c,u]),g=xt(()=>Object.keys(d.dialTools),[d]),x=xt(()=>Object.keys(d.floatingTools).filter(m=>m!=="environment"),[d]),[h,B]=ie(i||tt||d),[k,R]=ie(to??"floating"),[F,D]=ie(to!==null),[P,A]=ie(new Set),[V,S]=ie(false),[M,_]=ie(false);ze(()=>{let m=requestAnimationFrame(()=>_(true));return()=>cancelAnimationFrame(m)},[]);let T=yn();ze(()=>{r(async()=>{try{let m=await Ee.getItem(eo.settings.activeTab());if(m&&["floating","settings","pro"].includes(m)){let f=m;to=f,R(z=>z===f?z:f)}}catch{}finally{D(true)}},"loadActiveTab")()},[]),ze(()=>{F&&Ee.setItem(eo.settings.activeTab(),k).catch(m=>{console.warn("[Buoy]","Failed to save settings active tab:",m)})},[k,F]);let E=La()?.(),Q=E?.isPro??false,Z=!Q&&E?.licenseKey?E.error:null,U=E?.errorKind==="transport",[q,re]=ie(Bn),[ee,ne]=ie(false),[xe,ge]=ie(false),[ye,W]=ie(false),[Te,be]=ie([]),[Be,Ie]=ie(false),pe=as(),oe=zo.get("window").height,Re=zo.get("window").width,me=Math.floor(oe*.33),Ce=Math.min(Re-32,400),ae=wt(async()=>{try{let m=await a.getItem(qe);if(m){let f=JSON.parse(m),z=An(d,f,{allowedDialKeys:g,allowedFloatingKeys:x});tt=z,B(X=>Rn(X,z)?X:z);return}tt=d,B(f=>Rn(f,d)?f:d)}catch(m){console.error("[Buoy]","Failed to load dev tools settings:",m),B(d)}},[d,g,x,a]);ze(()=>{ae()},[ae]),ze(()=>{Ea().then(m=>{Bn=m,re(f=>f===m?f:m)})},[]),ze(()=>{ye&&(Ie(true),Ee.getAllKeys().then(m=>{be(m.sort())}).catch(()=>{be([])}).finally(()=>{Ie(false)}))},[ye]);let ve=r(async m=>{try{let f=null;try{let X=await a?.getItem(qe);f=X?JSON.parse(X):null}catch{}let z={...m,dialTools:{...f?.dialTools,...It(m.dialTools)},floatingTools:{...f?.floatingTools,...m.floatingTools}};await a.setItem(qe,JSON.stringify(z)),tt=z,B(z),o?.(z),Tt.emit(z)}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]}};ve(f)},"toggleFloatingTool"),$e=r(m=>{let f={...h,globalSettings:{...h.globalSettings,[m]:!h.globalSettings?.[m]}};ve(f)},"toggleGlobalSetting"),ke=r(async()=>{ne(true),ge(false);try{await Ee.clear(),ge(true),B(d),a!==Ee&&await a.setItem(qe,JSON.stringify(d)),o?.(d),Tt.emit(d),setTimeout(()=>ge(false),2e3)}catch(m){console.error("[Buoy]","Failed to clear storage:",m)}finally{ne(false)}},"handleClearStorage"),Me=wt(m=>{},[]),je=r(m=>{let f=n.find(z=>z.id===m);return f?.description?f.description:m==="environment"?"Environment badge.":""},"getToolDescription"),se=r(m=>m==="environment"?"Env Badge":n.find(f=>f.id===m)?.name??m.toUpperCase().replace(/_/g," "),"getToolLabel"),O=r(m=>{if(!M)return null;switch(m){case"query":return p(qa,{size:18});case"env":return p(In,{size:18});case"sentry":return p(Ra,{size:18,color:"#9945FF"});case"storage":return p(Ua,{size:18,bgColor:b.color.surface});case"wifi":case"query-wifi-toggle":return p(Ma,{size:18,colorPreset:"green",strength:4,noBackground:true});case"route-events":return p(Ka,{size:18,bgColor:b.color.surface});case"network":return p(Va,{size:18});case"environment":return p(In,{size:18});case"debug-borders":return p(Pa,{size:18,color:b.color.accent});case"highlight-updates":return p(Oa,{size:18,color:b.color.accent});case"highlight-updates-modal":return p(Ga,{size:18});case"redux":return p(Ja,{size:18});case"image-overlay":return p(Da,{size:18});case"events":return p(Ya,{size:18});case"zustand":try{let{ZustandIcon:f}=Ao("@buoy-gg/zustand/web");return p(f,{size:18})}catch{return p(Gt,{size:18,color:b.color.textSecondary})}case"jotai":try{let{JotaiIcon:f}=Ao("@buoy-gg/jotai/web");return p(f,{size:18})}catch{return p(Gt,{size:18,color:b.color.textSecondary})}default:{let f=n.find(z=>z.id===m);return f?.icon!=null?Zt(f.icon,{slot:"row",size:18,color:f.color}):p(Gt,{size:18,color:b.color.textSecondary})}}},"getToolIcon"),w=r((m,f,z,X)=>{let le=je(m);return N(ut,{activeOpacity:z?1:.7,onPress:()=>!z&&X(),accessibilityLabel:se(m),accessibilityRole:"button",style:[y.toolRow,z&&y.rowDisabled],children:[p(H,{style:y.toolIconSlot,children:O(m)}),N(H,{style:y.rowInfo,children:[N(K,{style:y.rowLabel,children:[se(m),z?" \xB7 max 6":""]}),le?p(K,{style:y.rowCaption,numberOfLines:1,children:le}):null]}),p(xn,{value:f,disabled:z,onValueChange:()=>X(),accessibilityLabel:se(m)})]},m)},"renderToolRow"),l=r(m=>{A(f=>{let z=new Set(f);return z.has(m)?z.delete(m):z.add(m),z})},"toggleSettingExpanded"),v=r((m,f,z,X,le)=>{let Xe=h.globalSettings?.[m]??false,Se=P.has(m);return N(H,{children:[N(ut,{activeOpacity:.7,onPress:()=>l(m),accessibilityLabel:f,style:y.settingRow,children:[N(H,{style:y.rowInfo,children:[p(K,{style:y.rowLabel,children:f}),p(K,{style:y.rowCaption,numberOfLines:Se?0:1,children:z})]}),p(xn,{value:Xe,onValueChange:()=>$e(m),accessibilityLabel:f})]}),Se&&N(H,{style:y.settingRowBody,children:[p(K,{style:y.settingRowBodyText,children:X}),p(K,{style:y.settingRowBodyHint,children:le})]})]},m)},"renderGlobalSettingRow"),C=r((m,f,z)=>N(H,{children:[p(Ha,{children:m}),f,z]}),"renderSection"),J=q==="filesystem"?p(he,{label:"File System",tone:"accent"}):q==="asyncstorage"?p(he,{label:"Async Storage",tone:"warning"}):q==="localstorage"?p(he,{label:"Local Storage",tone:"accent"}):q==="memory"?p(he,{label:"Memory",tone:"danger"}):p(he,{label:"Loading\u2026",tone:"neutral"}),Y=r(()=>N(H,{style:y.container,children:[N(ko,{keyboardShouldPersistTaps:"handled",style:y.scrollContent,showsVerticalScrollIndicator:false,contentContainerStyle:y.scrollContainer,children:[k==="floating"&&p(et,{children:C("Floating Tools",p(Le,{glass:true,children:p(Jt,{children:Object.entries(h.floatingTools).map(([m,f])=>w(m,f,false,()=>Ye(m)))})}),p(wn,{children:"Tools switched on here appear in the floating bubble row."}))}),k==="settings"&&N(et,{children:[C("Background",p(Le,{glass:true,padded:true,children:p(Na,{embedded:true})})),C("Storage",N(Le,{glass:true,children:[N(ut,{activeOpacity:.7,onPress:()=>W(!ye),accessibilityLabel:"Storage Type",style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(K,{style:y.rowLabel,children:"Storage Type"})}),J,ye?p(vn,{size:16,color:b.color.textTertiary}):p(bn,{size:16,color:b.color.textTertiary})]}),ye&&N(et,{children:[N(H,{style:y.settingRowBody,children:[p(K,{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(K,{style:[y.settingRowBodyText,y.bodyWarning],children:"Install expo-file-system to persist settings through logout flows."}),q==="memory"&&p(K,{style:[y.settingRowBodyText,y.bodyDanger],children:"No persistent storage available \u2014 install expo-file-system (best) or @react-native-async-storage/async-storage."})]}),p(_a,{}),N(H,{style:y.storageExpanded,children:[N(H,{style:y.storageExpandedHeader,children:[p(K,{style:y.storageExpandedTitle,children:"SAVED SETTINGS"}),p(K,{style:y.storageExpandedCount,children:Be?"\u2026":`${Te.length} keys`})]}),Be?p(K,{style:y.storageKeyEmpty,children:"Loading\u2026"}):Te.length===0?p(K,{style:y.storageKeyEmpty,children:"No settings saved yet"}):p(ko,{keyboardShouldPersistTaps:"handled",style:y.storageKeysList,nestedScrollEnabled:true,showsVerticalScrollIndicator:true,children:Te.map(m=>p(H,{style:y.storageKeyItem,children:p(K,{style:y.storageKeyText,numberOfLines:1,children:m.replace("@react_buoy_","")})},m))})]}),p(H,{style:y.cardButtonWrap,children:p(Yt,{label:xe?"Cleared":ee?"Clearing\u2026":"Clear All Settings",variant:xe?"secondary":"destructive",size:"md",disabled:ee,onPress:ke,icon:xe?p(Sn,{size:15,color:b.color.accent}):p($a,{size:15,color:ee?b.color.textTertiary:b.color.danger})})})]})]})),T&&T.state!=="idle"&&C("Desktop Sync",N(Le,{glass:true,children:[N(ut,{activeOpacity:.7,onPress:()=>l("desktopSync"),accessibilityLabel:"Buoy Desktop",style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(K,{style:y.rowLabel,children:"Buoy Desktop"})}),T.state==="connected"?p(he,{label:"Connected",tone:"accent"}):T.state==="connecting"?p(he,{label:"Connecting\u2026",tone:"neutral"}):p(he,{label:"Retrying",tone:"warning"}),P.has("desktopSync")?p(vn,{size:16,color:b.color.textTertiary}):p(bn,{size:16,color:b.color.textTertiary})]}),P.has("desktopSync")&&N(H,{style:y.settingRowBody,children:[N(K,{style:y.settingRowBodyText,children:[T.state==="connected"?"Streaming tool data to Buoy Desktop at ":"Trying to reach Buoy Desktop at ",p(K,{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(K,{style:[y.settingRowBodyText,y.bodyWarning],children:["Last error: ",T.lastError]})]})]})),C("Modal Behavior",p(Le,{glass:true,children:N(Jt,{children:[v("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."),rs(Ne.OS==="web")?v("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]})}))]}),k==="pro"&&N(et,{children:[C("License",N(Le,{glass:true,children:[N(H,{style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(K,{style:y.rowLabel,children:"License Status"})}),p(H,{testID:"buoy-settings-license-status",accessibilityLabel:Q?"License: Active":"License: Free",children:Q?p(he,{label:"Active",tone:"accent"}):p(he,{label:"Free",tone:"neutral"})})]}),E?.tierSource==="session"?N(H,{style:y.settingRow,children:[p(H,{style:y.rowInfo,children:p(K,{style:y.rowLabel,children:"Signed in with Buoy"})}),p(Yt,{label:"Sign out",variant:"secondary",size:"md",onPress:()=>void Fa(),testID:"buoy-settings-signout"})]}):null,E?.teamRole?p(H,{style:y.settingRow,testID:"buoy-settings-team-role",children:N(H,{style:y.rowInfo,children:[N(K,{style:y.rowLabel,children:["Role: ",E.teamRole]}),p(K,{style:y.rowCaption,children:E.allowedTools?"Your team picks the tools you see.":"You see all tools."})]})}):null]}),p(wn,{children:Q?"You have full access to all Buoy DevTools features.":Z?U?`Couldn't reach the license server (${Z}). A VPN or corporate proxy can block buoy.gg \u2014 turn it off and reload. Your key hasn't been rejected.`:`License check failed: ${Z}.`:"Upgrade to Pro to unlock all features and support development."})),!Q&&N(et,{children:[C("Pro Features",p(Le,{glass:true,children:p(Jt,{children:["Advanced Settings","Priority Support"].map(m=>N(H,{style:y.featureRow,children:[p(Sn,{size:16,color:b.color.accent}),p(K,{style:y.rowLabel,children:m})]},m))})})),p(Yt,{label:"Upgrade to Pro",variant:"primary",size:"lg",onPress:()=>S(true)})]})]})]}),p(ja,{visible:V,onClose:()=>S(false)})]}),"renderContent");return p(ns,{visible:e,onClose:t,zIndex:s,variant:"night",header:{showToggleButton:false,customContent:p(H,{style:y.headerRow,children:p(Wa,{glass:true,tabs:[{key:"floating",label:"Floating"},{key:"settings",label:"Settings"},{key:"pro",label:"Pro"}],activeKey:k,onChange:m=>R(m)})})},initialMode:"bottomSheet",onModeChange:Me,persistenceKey:eo.settings.root(),enablePersistence:true,maxHeight:oe-pe.top,initialHeight:me,initialFloatingPosition:{x:(Re-Ce)/2,y:pe.top+20},enableGlitchEffects:true,children:Y()})},"DevToolsSettingsModal"),us={dialTools:{},floatingTools:{environment:false},globalSettings:{enableSharedModalDimensions:false}},ps=r((e,t)=>{let o=new Set(e??[]),i=new Set(t??[]),n={};for(let s of i)n[s]=true;let a={environment:o.has("environment")};for(let s of o)s!=="environment"&&(a[s]=true);return{dialTools:It(n),floatingTools:a,globalSettings:{enableSharedModalDimensions:false}}},"createDefaultsFromConfig"),tt=null,to=null,Bn=null,Rn=r((e,t)=>JSON.stringify(e)===JSON.stringify(t),"sameSettings");Tt.addListener(e=>{e&&(tt=e)});var Mn=r(()=>{let{defaultFloatingTools:e,defaultDialTools:t}=Qt(),o=xt(()=>!e&&!t?us:ps(e,t),[e,t]),[i,n]=ie(o),a=wt(async()=>{try{let c=await Ee.getItem(qe);if(c){let u=JSON.parse(c),d=An(o,u);n(d);return}n(o)}catch(c){console.error("[Buoy]","Failed to load dev tools settings:",c),n(o)}},[o]);ze(()=>is(c=>{c.includes(qe)&&a()}),[a]),ze(()=>{a();let c=Tt.addListener(u=>{try{u&&n(u)}catch{}});return()=>{c()}},[a]);let s=wt(()=>{a()},[a]);return{settings:i,refreshSettings:s}},"useDevToolsSettings"),y=dt.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:Tn},storageKeyEmpty:{color:b.color.textTertiary,fontSize:b.font.caption,fontStyle:"italic"},footnoteMono:{fontFamily:Tn,fontSize:b.font.label,color:b.color.textSecondary}});import{jsx as Dn}from"react/jsx-runtime";var ms=[];function oo({visible:e,onClose:t,availableTools:o=ms,defaultFloatingTools:i,defaultDialTools:n,storage:a=Ca,onSettingsChange:s}){let c=hn(()=>({getItem:r(async g=>a.getItem(g),"getItem"),setItem:r(async(g,x)=>a.setItem(g,x),"setItem")}),[a]),u=hn(()=>o.map(g=>({...g,name:g.name??g.id,icon:typeof g.icon=="function"?x=>g.icon(x.size):g.icon})),[o]),d=Ia(g=>{s?.(g)},[s]);return Dn(Xt,{defaultFloatingTools:i,defaultDialTools:n,children:Dn(ds,{visible:e,onClose:t,zIndex:11e3,availableApps:u,storage:c,onSettingsChange:d})})}r(oo,"SettingsModal");import{listenBuoyKeydown as gs}from"@buoy-gg/shared-ui/web/floating";import{persistentStorage as On,setExpandableWindowControls as fs}from"@buoy-gg/shared-ui/web";import{createContext as hs,useCallback as Ae,useContext as ys,useEffect as Ct,useMemo as bs,useRef as ot,useState as Pn}from"react";var vs=r((e,t,o)=>{if(t.singleton){let n=e.find(a=>a.id===t.id);if(n){let a=n.minimized??false;return{instanceId:n.instanceId,wasMinimized:a,apps:[...e.filter(s=>s.instanceId!==n.instanceId),{...n,minimized:false}]}}}let i=o();return{instanceId:i,wasMinimized:false,apps:[...e,{...t,instanceId:i}]}},"resolveOpenAppsState"),Ss=r((e,t,o)=>{let i=e.find(n=>n.instanceId===t);return i?[...e.filter(n=>n!==i),{...i,minimized:false,restoreState:o??i.restoreState}]:e},"restoreOpenApp");import{createContext as ws,useCallback as En,useContext as xs,useEffect as kt,useMemo as Ts,useRef as Ln,useState as zt}from"react";import{JsModal as Is,ModalHeader as nt,HeaderSearchButton as Cs,TickProvider as ks,ToolScreenHeaderContext as zs,devToolsStorageKeys as Fn,buoyColors as $n,gameUIColors as no}from"@buoy-gg/shared-ui/web";import{jsx as ce,jsxs as At}from"react/jsx-runtime";var it=r(()=>{},"noop"),As={search:"",isSearchActive:false,clearSearch:it,close:it,minimize:it,showToast:it,setHeaderOverride:it},jn=ws(null);function io(){return xs(jn)??As}r(io,"useToolHost");function Nn(e,t){let{setHeaderOverride:o}=io();kt(()=>(o(e),()=>o(null)),t)}r(Nn,"useToolHeader");var Hn=2200,Bs={success:no.success,error:no.error,info:no.info};function Wn({message:e,type:t,nonce:o}){let i=Ln(new De.Value(0)).current;kt(()=>{i.setValue(0),De.sequence([De.timing(i,{toValue:1,duration:150,useNativeDriver:true}),De.delay(Hn-450),De.timing(i,{toValue:0,duration:300,useNativeDriver:true})]).start()},[o,i]);let n=Bs[t];return At(De.View,{pointerEvents:"none",style:[Bt.toast,{opacity:i,borderColor:n+"60"}],children:[ce(H,{style:[Bt.toastDot,{backgroundColor:n}]}),ce(K,{style:Bt.toastText,numberOfLines:2,children:e})]})}r(Wn,"ToastView");function _n({app:e,config:t,visible:o,zIndex:i,onClose:n,onMinimize:a,initialModalState:s,enableSharedModalDimensions:c,bodyProps:u}){let d=e.component,[g,x]=zt(false),[h,B]=zt(""),[k,R]=zt(null),[F,D]=zt(null),P=Ln(null),A=En(()=>{x(false),B("")},[]),V=En((q,re="info")=>{P.current&&clearTimeout(P.current),D(ee=>({message:q,type:re,nonce:(ee?.nonce??0)+1})),P.current=setTimeout(()=>D(null),Hn)},[]);kt(()=>()=>{P.current&&clearTimeout(P.current)},[]);let S=Ts(()=>({search:g?h:"",isSearchActive:g,clearSearch:A,close:n,minimize:r(()=>a(),"minimize"),showToast:V,setHeaderOverride:R,instanceId:e.instanceId}),[h,g,A,n,a,V,e.instanceId]),M=k?.title??t.title??e.title??e.id,_=k?.subtitle??t.subtitle,T=k?.onBack,E=k?.actions??t.headerActions,Q=k?.searchable??t.searchable;kt(()=>{!Q&&g&&A()},[Q,g,A]);let Z=c?Fn.modal.root():Fn.custom(e.id).modal(),U=At(nt,{children:[T&&!g&&ce(nt.Navigation,{onBack:T}),g?ce(nt.Search,{value:h,onChangeText:B,onCancel:A,placeholder:t.searchPlaceholder,testID:`tool-search-field-${e.id}`}):ce(nt.Content,{title:M,subtitle:_}),At(nt.Actions,{children:[!g&&E,Q&&!g&&ce(Cs,{variant:"chip",testID:`tool-search-${e.id}`,onPress:()=>x(true)})]})]});return ce(jn.Provider,{value:S,children:ce(Is,{visible:o,onClose:n,onBack:T,onMinimize:a,initialModalState:s,zIndex:i,persistenceKey:Z,enablePersistence:true,initialMode:t.initialMode??"bottomSheet",header:{customContent:U,showToggleButton:true},disableScrollWrapper:true,styles:{},children:At(H,{style:Bt.bodyRoot,children:[ce(ks,{children:ce(zs.Provider,{value:R,children:ce(d,{...u})})}),F&&ce(Wn,{message:F.message,type:F.type,nonce:F.nonce})]})})})}r(_n,"ToolModalShell");var Bt=dt.create({bodyRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},toast:{position:"absolute",bottom:16,alignSelf:"center",flexDirection:"row",alignItems:"center",gap:8,maxWidth:"86%",backgroundColor:$n.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:$n.text}});function Un(e,t){if(t)return{kind:"dial"};for(let i=e.length-1;i>=0;i--){let n=e[i];if(n.launchMode!=="toggle-only"&&!n.minimized)return{kind:"tool",instanceId:n.instanceId}}let o=e[e.length-1];return o?{kind:"tool",instanceId:o.instanceId}:null}r(Un,"resolveBackTarget");import{createContext as Rs,useContext as Ms,useState as Kn,useMemo as Vn}from"react";import{jsx as Ds}from"react/jsx-runtime";var qn=Rs(null);function ro({children:e}){let[t,o]=Kn(false),[i,n]=Kn(false),a=Vn(()=>t||i,[t,i]),s=Vn(()=>({isDialOpen:t,isToolOpen:i,isDevToolsActive:a,setDialOpen:o,setToolOpen:n}),[t,i,a]);return Ds(qn.Provider,{value:s,children:e})}r(ro,"DevToolsVisibilityProvider");function rt(){let e=Ms(qn);return e||{isDialOpen:false,isToolOpen:false,isDevToolsActive:false,setDialOpen:r(()=>{},"setDialOpen"),setToolOpen:r(()=>{},"setToolOpen")}}r(rt,"useDevToolsVisibility");import{Fragment as Os,jsx as de}from"react/jsx-runtime";var Gn=hs(null),Jn="@react_buoy_open_apps",ao=44,Ps=12,Es=100,Ls=16,Fs=r(e=>({x:window.innerWidth-ao-Ls,y:window.innerHeight-Es-ao-e*(ao+Ps)}),"dockIconPosition"),Yn=r(({children:e})=>{let[t,o]=Pn([]),[i,n]=Pn(false),a=ot([]),s=ot(null),c=ot(false),u=ot(false),d=ot(false),g=Ae(S=>{let M="";return o(_=>{let{apps:T,instanceId:E}=vs(_,S,()=>`${S.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);return M=E,T}),M},[]),x=Ae(()=>{if(c.current||!u.current||!d.current)return;c.current=true;let S=s.current;if(!S||S.length===0){n(true);return}s.current=null,S.forEach(({id:M,minimized:_})=>{let T=a.current.find(E=>E.id===M);if(T&&T.component){let E=Zt(T.icon,{slot:"dial",size:20,color:T.color});g({id:T.id,title:T.name,component:T.component,props:T.props,modal:T.modal,launchMode:T.launchMode||"self-modal",singleton:T.singleton??true,icon:E,color:T.color,minimized:_})}}),n(true)},[g]);Ct(()=>{let S=false;return r(async()=>{try{let M=await On.getItem(Jn);if(S)return;if(M){let _=JSON.parse(M),T;Array.isArray(_)&&_.length>0&&(typeof _[0]=="string"?T=_.map(E=>({id:E,minimized:false})):T=_.filter(E=>typeof E=="object"&&E!==null&&typeof E.id=="string"),T.length&&(s.current=T))}}catch{}S||(u.current=true,x())},"restoreOpenApps")(),()=>{S=true}},[x]),Ct(()=>{if(!i)return;let S=t.map(M=>({id:M.id,minimized:M.minimized??false}));On.setItem(Jn,JSON.stringify(S))},[t,i]);let h=Ae(S=>{a.current=S,d.current=true,x()},[x]),B=Ae(S=>{o(M=>M.length?S?M.filter(_=>_.instanceId!==S):M.slice(0,-1):M)},[]),k=Ae(()=>o([]),[]),R=Ae((S,M)=>{o(_=>_.map(T=>T.instanceId===S?{...T,minimized:true,restoreState:M}:T))},[]),F=Ae((S,M)=>{o(_=>Ss(_,S,M))},[]),D=Ae(S=>t.find(M=>M.instanceId===S)?.minimized??false,[t]),P=t.some(S=>S.launchMode!=="toggle-only"&&!S.minimized);Ct(()=>P?gs(r(S=>{if(S.key!=="Escape"||S.defaultPrevented)return;let M=[...t].reverse().find(_=>_.launchMode!=="toggle-only"&&!_.minimized);M&&B(M.instanceId)},"handler")):void 0,[P,B,t]);let{isDialOpen:A}=rt();Ht(t.length>0,()=>{let S=Un(t,A);S?.kind==="tool"&&B(S.instanceId)});let V=bs(()=>({openApps:t,isAnyOpen:P,open:g,close:B,closeAll:k,registerApps:h,minimize:R,restore:F,isMinimized:D}),[t,P,g,B,k,h,R,F,D]);return de(Gn.Provider,{value:V,children:e})},"AppHostProvider"),at=r(()=>{let e=ys(Gn);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"),$s=9e3,js={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"},Ns={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"},Hs=r(({app:e,zIndex:t,onClose:o,onMinimize:i,minimizeTargetPosition:n,enableSharedModalDimensions:a})=>{let s=e.component,c=!e.minimized,u={...e.props??{},...a?{enableSharedModalDimensions:true}:{}};return e.modal&&(!e.launchMode||e.launchMode==="self-modal")?de("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{position:"fixed",inset:0,zIndex:t,pointerEvents:"none"},children:de(_n,{app:e,config:e.modal,visible:c,zIndex:t,onClose:o,onMinimize:i,initialModalState:e.restoreState,enableSharedModalDimensions:a,bodyProps:u})}):e.launchMode==="self-modal"?de("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{position:"fixed",inset:0,zIndex:t,pointerEvents:"none"},children:de(s,{...u,visible:c,onClose:o,onRequestClose:o,onMinimize:i,minimizeTargetPosition:n,instanceId:e.instanceId,zIndex:t,initialModalState:e.restoreState})}):e.launchMode==="inline"?c?de("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{position:"fixed",inset:0,zIndex:t,pointerEvents:"none"},children:de(s,{...u,onClose:o,onMinimize:i,minimizeTargetPosition:n,initialModalState:e.restoreState,instanceId:e.instanceId})}):null:de("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{...js,zIndex:t,display:c?"flex":"none"},children:de("div",{style:Ns,children:de(s,{...u,onClose:o,onMinimize:i,minimizeTargetPosition:n,initialModalState:e.restoreState,instanceId:e.instanceId})})})},"AppRenderer"),Xn=r(()=>{let{openApps:e,close:t,minimize:o}=at(),{settings:i}=Mn();Ct(()=>{fs(i.globalSettings?.expandableWindowControls!==false)},[i.globalSettings?.expandableWindowControls]);let n=e.filter(c=>c.launchMode!=="toggle-only");if(n.length===0)return null;let a=n.filter(c=>c.minimized).length,s=Nr()??Fs(a);return de(Os,{children:n.map((c,u)=>de(Hs,{app:c,zIndex:$s+u,onClose:()=>t(c.instanceId),onMinimize:d=>o(c.instanceId,d),enableSharedModalDimensions:i.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:s},c.instanceId))})},"AppOverlay");import{useCallback as Ws,useEffect as so,useRef as _s,useState as Qn,useSyncExternalStore as Zn}from"react";import{persistentStorage as ei,getToolAttention as lo,subscribeToolAttention as ti}from"@buoy-gg/shared-ui/web";import{jsx as ue,jsxs as Rt}from"react/jsx-runtime";function oi(e){return Zn(ti,()=>lo(e),()=>lo(e))}r(oi,"useToolAttention");var ni={needsInput:"#FF8329",done:"#20C997",failed:"#FF3B30"},ii={needsInput:3,failed:2,done:1},ri=new Map;function co(e){let t=null;for(let i of e?e.split("|"):[]){let n=lo(i);n&&(!t||ii[n.kind]>ii[t.kind])&&(t=n)}let o=ri.get(e);return o&&t&&o.kind===t.kind&&o.label===t.label?o:!o&&!t?null:(ri.set(e,t),t)}r(co,"strongest");function ai(e){let t=e.join("|");return Zn(ti,()=>co(t),()=>co(t))}r(ai,"useStrongestAttention");var si=28,uo=32,po=6,li=8,ci=24,di="@react_buoy_minimized_stack_expanded",Us=80,ui=2e3,Ks=6e3,Vs="#1A1A1A",st="#888888";function mo({down:e=false}){return ue("svg",{width:12,height:12,viewBox:"0 0 24 24","aria-hidden":"true",style:{transform:e?"rotate(180deg)":void 0},children:ue("path",{d:"M18 15l-6-6-6 6",fill:"none",stroke:st,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}r(mo,"ChevronGlyph");function pi({id:e,title:t,icon:o,index:i,onPress:n}){let a=oi(e),s=_s(null);return so(()=>{let c=true,u,d=r(()=>{s.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:Us,easing:"linear"})},"runGlitch"),g=r(x=>{let h=x?500+Math.random()*1500+i*200:ui+Math.random()*(Ks-ui)+i*300;u=setTimeout(()=>{c&&(d(),g(false))},h)},"schedule");return g(true),()=>{c=false,clearTimeout(u)}},[i]),Rt("button",{type:"button","aria-label":a?`${t} \u2014 ${a.label}. Restore`:`Restore ${t}`,"data-testid":`buoy-dock-restore-${e}`,onClick:n,style:{width:uo,height:uo,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",padding:0,cursor:"pointer",position:"relative"},children:[ue("div",{ref:s,style:{display:"flex",alignItems:"center",justifyContent:"center"},children:o}),a?ue("span",{"aria-hidden":true,"data-testid":`buoy-dock-badge-${e}-${a.kind}`,style:{position:"absolute",top:0,right:0,minWidth:12,height:12,borderRadius:6,padding:"0 2px",boxSizing:"border-box",background:ni[a.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:a.kind==="needsInput"?"!":""}):null]})}r(pi,"GlitchToolButton");function mi({containerWidth:e=32}){let{openApps:t,restore:o}=at(),i=t.filter(h=>h.minimized&&h.launchMode!=="toggle-only"),[n,a]=Qn(false),[s,c]=Qn(false),u=ai(i.map(h=>h.id));so(()=>{let h=false;return r(async()=>{let B=await ei.getItem(di);!h&&B==="true"&&a(true),h||c(true)},"load")(),()=>{h=true}},[]),so(()=>{s&&ei.setItem(di,n?"true":"false")},[n,s]);let d=Ws(h=>{o(h)},[o]);if(i.length===0)return null;let g=li+i.length*uo+(i.length-1)*po+po+ci+4,x={backgroundColor:Vs,borderTopLeftRadius:6,borderTopRightRadius:6,borderTop:`1px solid ${st}66`,borderLeft:`1px solid ${st}66`,borderRight:`1px solid ${st}66`,borderBottom:"none",boxSizing:"border-box"};return Rt("div",{style:{height:si,overflow:"visible",position:"relative"},children:[ue("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",...x},children:Rt("div",{style:{height:g,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:li,gap:po,boxSizing:"border-box"},children:[n&&[...i].reverse().map((h,B)=>ue(pi,{id:h.id,title:h.title||h.id,icon:h.icon??ue("span",{style:{color:"#fff",fontSize:13},children:(h.title||h.id).slice(0,1).toUpperCase()}),index:B,onPress:()=>d(h.instanceId)},h.instanceId)),ue("button",{type:"button","aria-label":"Collapse","data-testid":"buoy-dock-collapse",onClick:()=>a(false),style:{width:"100%",height:ci,marginTop:3,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",cursor:"pointer",padding:0},children:ue(mo,{down:true})})]})}),Rt("button",{type:"button","aria-label":`Show ${i.length} minimized tools`,"data-testid":"buoy-dock-peek",tabIndex:n?-1:0,"aria-hidden":n,onClick:()=>a(true),style:{position:"absolute",bottom:0,left:0,width:e,height:si,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",...x},children:[ue(mo,{}),u?ue("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:ni[u.kind],border:"1.5px solid #0C0C0C",color:"#000",fontSize:8,fontWeight:800,lineHeight:"9px",display:"flex",alignItems:"center",justifyContent:"center"},children:u.kind==="needsInput"?"!":""}):null,i.length>1&&ue("span",{style:{fontSize:9,fontWeight:600,color:st,marginLeft:1},children:i.length})]})]})}r(mi,"MinimizedToolsStack");var gi=class _c{constructor(){this.listeners=new Set}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}notify(){this.listeners.forEach(t=>t())}};r(gi,"ToggleStateManager");var qs=gi,Gs=new qs;import{registerToolModules as Js}from"@buoy-gg/shared-ui/web";import{createElement as Ys}from"react";function Ge(e){let t=e.icon;return{...e,icon:typeof t=="function"?o=>Ys(t,{size:o,slot:e.slot??"both",color:e.color}):()=>t}}r(Ge,"createWebTool");import*as Xs from"@buoy-gg/license/web";import*as Qs from"@buoy-gg/shared-ui/web";import*as Zs from"@buoy-gg/shared-ui/web/dataViewer";function go(e){Js({core:{useDevToolsVisibility:rt},license:Xs,"shared-ui":Qs,"shared-ui/dataViewer":Zs,...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(go,"createWebTools");import{useEffect as Mt,useMemo as Dt,useRef as el}from"react";import{LicenseManager as fi,installCapacitorBridge as tl,resolveDevBuild as hi,useLicense as ol}from"@buoy-gg/license/web";import{registerToolAdapters as nl}from"@buoy-gg/shared-ui/web";function fo(e){return typeof e=="object"&&e!==null?e:void 0}r(fo,"externalSyncOptions");function yi({isDevelopment:e,isLicensed:t,externalSync:o,isAvailable:i}){if(o===false||!i)return false;if(e)return true;let n=fo(o);return t&&n?.enableInRelease===true&&ho(n.socketURL,n)===null}r(yi,"shouldMountExternalSync");var bi="http://localhost:42831";function vi(e){return e==="localhost"||e.endsWith(".localhost")||/^127\.\d+\.\d+\.\d+$/.test(e)||e==="[::1]"||e==="::1"||e==="10.0.2.2"}r(vi,"isLoopbackHost");function ho(e,t){let o=e??bi;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:"||vi(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(ho,"releaseTransportProblem");var il={"ota-update-inspector":["check","fetch","reload","setHeaders","setURL"],impersonate:["searchUsers","startImpersonation","resumeImpersonation","updateSettings","removeFromHistory","clearHistory"]};function Si(e,t,o){if(t)return e;let i=null;for(let[n,a]of Object.entries(il)){if(o?.includes(n))continue;let s=e[n];if(!s?.actions)continue;let c={...s.actions};for(let u of a)u in c&&(c[u]=()=>{throw new Error(`${n}.${u} 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]={...s,actions:c}}return i??e}r(Si,"applyReleaseActionPolicy");import{useEffect as rl,useMemo as al,useState as sl}from"react";import{devToolsStorageKeys as ll,persistentStorage as cl}from"@buoy-gg/shared-ui/web";import{isCapacitorNative as dl}from"@buoy-gg/license/web";var ul=8;function wi(){let e="";for(;e.length<ul;)e+=(Math.random()*16|0).toString(16);return e}r(wi,"generateInstallId");function xi(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}r(xi,"slugify");function Ti({appName:e,hardwareName:t,platform:o,installId:i,deviceId:n}){let a=xi(e??"buoy")||"buoy",s=e??"Buoy Device",c=t?.trim()||o;return n?{deviceId:n,deviceName:`${s} (${c})`}:{deviceId:`${a}-${o}-${i}`,deviceName:`${s} (${c} \xB7 ${i.slice(-4)})`}}r(Ti,"buildDeviceIdentity");function Ii(){let e=globalThis;try{return e.sessionStorage??null}catch{return null}}r(Ii,"sessionStore");function Ci(){let e=globalThis;try{return e.localStorage??null}catch{return null}}r(Ci,"localStore");async function ki({platform:e=Ne.OS,store:t,mint:o=wi}={}){let i=ll.sync.deviceId(),n=t===void 0?dl()?Ci():e==="web"?Ii():cl:t;if(!n)return o();try{let a=await n.getItem(i);if(a&&a.length>0)return a;let s=o();return await n.setItem(i,s),s}catch{return o()}}r(ki,"loadInstallId");var yo=null;function zi(){return yo||(yo=ki()),yo}r(zi,"getInstallId");function Ai(e,t){let o=e?.deviceId,i=e?.deviceName,n=t.loadId??zi,a=t.platform??Ne.OS,[s,c]=sl(null);return rl(()=>{if(o)return;let u=false;return n().then(d=>{u||c(d)}),()=>{u=true}},[o,n]),al(()=>{if(!o&&!s)return null;let u=Ti({appName:t.appName,hardwareName:t.hardwareName,platform:a,installId:s??"",deviceId:o});return i?{...u,deviceName:i}:u},[o,i,s,t.appName,t.hardwareName,a])}r(Ai,"useDeviceIdentity");import{useEffect as pl,useState as ml}from"react";import{capacitorPlatform as gl,capacitorPlugin as Ot,isCapacitorNative as fl}from"@buoy-gg/license/web";function Bi(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(Bi,"hardwareFromUserAgent");function Ri(e){return/sdk_gphone|Android SDK built for|Android ATD built for|google_sdk|Emulator|generic_/i.test(e)}r(Ri,"isAndroidEmulatorUserAgent");function bo(){return typeof navigator>"u"?"":navigator.userAgent??""}r(bo,"userAgent");function Pt(){return typeof document>"u"?null:document.title||(typeof location>"u"?null:location.hostname)||null}r(Pt,"firstPageTitle");var Mi="@react_buoy_capacitor_app_name";function Di(e){try{let t=globalThis.localStorage;if(!t)return e;let o=t.getItem(Mi);if(o)return o;e&&t.setItem(Mi,e)}catch{}return e}r(Di,"persistedAppName");function Oi(){let e=gl();if(!e)return{platform:"web",appName:Pt(),hardwareName:"Browser",ready:true};let t=!!Ot("App");return{platform:e,appName:t?Pt():Di(Pt()),hardwareName:Bi(bo(),e)??e,extraDeviceInfo:{runtime:"capacitor"},ready:!t&&!Ot("Device")}}r(Oi,"initialHostInfo");function Pi(){let[e,t]=ml(Oi);return pl(()=>{if(!fl())return;let o=false,i=Ot("App"),n=Ot("Device");return Promise.all([i?.getInfo?.().catch(()=>null)??null,n?.getInfo?.().catch(()=>null)??null]).then(([a,s])=>{if(o)return;let c=a?.name?.trim(),u=s?.name?.trim()||s?.model?.trim();t(d=>({...d,appName:c||d.appName,hardwareName:u||d.hardwareName,ready:true}))}),()=>{o=true}},[]),e}r(Pi,"useHostInfo");function vo(){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:bo(),serverUrl:typeof e=="string"?e:null}}r(vo,"pageInfo");function So(e){if(!e)return null;try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return null}}r(So,"schemeHost");function Ei(e,t){if(e==="ios"){let o=So(t.serverUrl);return o?o===So(t.origin):t.protocol==="capacitor:"}return Li.has(t.hostname)}r(Ei,"isBundledPage");var Li=new Set(["localhost","127.0.0.1","[::1]","::1"]);function Fi(e,t,o,i=vo()){if(o==="web"||!i)return e;let n;try{n=new URL(e)}catch{return e}let a=Ei(o,i);return!t&&a&&n.hostname===i.hostname&&(n.hostname="localhost"),o==="android"&&Li.has(n.hostname)&&Ri(i.userAgent)&&(n.hostname="10.0.2.2"),n.toString().replace(/\/$/,"")}r(Fi,"capacitorBrokerURL");function $i(e,t,o=vo()){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($i,"capacitorTransportProblem");import{getDevServerOrigin as hl,resolveReloadStrategy as yl,scheduleReloadApp as bl}from"@buoy-gg/shared-ui/web";var ji=Date.now(),Ni=hl(),vl={platform:Ne.OS,isTV:Ne.isTV===true,isTVOS:Ne.isTVOS===true},Hi={version:3,getSnapshot:r(()=>{let e=yl("auto");return{startedAt:ji,devServerOrigin:Ni,device:vl,reload:{available:e!==null,strategy:e}}},"getSnapshot"),subscribe:r(e=>()=>{},"subscribe"),actions:{ping:r(()=>({ok:true,startedAt:ji,devServerOrigin:Ni}),"ping"),reloadApp:r(e=>{let t=e??{},{strategy:o,delayMs:i}=bl({strategy:t.strategy,delayMs:t.delayMs});return{scheduled:true,strategy:o,delayMs:i}},"reloadApp")}};import{Fragment as Sl,jsx as Fe,jsxs as wl}from"react/jsx-runtime";var xl=["ConsoleRoot","RouteTracker","ReactQueryTracker","ReduxAutoInstrument","PerfMonitorRoot","AutomationResumer","ImagesRoot"],Tl=["DebugBordersStandaloneOverlay","HighlightUpdatesOverlay","ImageOverlayStandalone","PerfMonitorOverlay","JsTopHudOverlay","ImpersonateOverlay","ScenariosOverlay"];function Wi(e){let t=Dt(()=>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(_i,{...e,modules:t,query:o}):Fe(wo,{...e,modules:t})}r(Wi,"BrowserToolRuntime");function _i(e){let t=e.query.useReactQuerySyncAdapter();return Fe(wo,{...e,queryAdapter:t})}r(_i,"QueryRuntime");function wo({modules:e,apps:t,requiredEnvVars:o,externalSync:i,headless:n,sentryGetClient:a,queryAdapter:s}){let{isPro:c,tier:u}=ol(),d=Dt(()=>{let F={app:Hi};for(let[D,P]of Object.entries(e))for(let[A,V]of Object.entries(P))A.endsWith("SyncAdapter")&&V&&typeof V=="object"&&(F[D]=V);s&&(F.query=s),e.env?.createEnvSyncAdapter&&(F.env=e.env.createEnvSyncAdapter(o??[]));for(let D of t??[])D.sync&&(F[`custom:${D.id}`]=D.sync);return F},[e,t,o,s]),g=el(d);g.current=d,Mt(()=>nl(()=>g.current),[]),Mt(()=>{let F=[],D=r(P=>{let A=P?.();typeof A=="function"&&F.push(A)},"start");return D(e.network?.startNetworkCapture),D(e.storage?.startBrowserStorageCapture),D(e.assets?.startBrowserAssetCapture),D(e.three?.startThreeCapture),hi(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 P of F.reverse())P()}},[e]);let x=e["external-sync"],h=hi(typeof He<"u"?He:process.env.NODE_ENV!=="production"),B=yi({isDevelopment:h,isLicensed:c,externalSync:i,isAvailable:!!x}),k=fo(i);tl({release:!h&&!!k?.enableInRelease}),!h&&k?.enableInRelease&&xo(ho(k.socketURL,k));let R=e.sentry?.SentryRoot;return wl(Sl,{children:[Object.entries(e).flatMap(([F,D])=>xl.map(P=>{let A=D[P];return A?Fe(A,{},`${F}:${P}`):null})),R&&Fe(R,{getClient:a}),Object.entries(e).flatMap(([F,D])=>Tl.map(P=>{let A=D[P];return A&&(!n||P==="ScenariosOverlay"||P==="ImpersonateOverlay")?Fe(A,{},`${F}:${P}`):null})),B&&Fe(Ki,{module:x,tools:d,options:k,isPro:c,tier:u,dev:h})]})}r(wo,"ToolRuntime");var Ui=null;function xo(e){!e||e===Ui||(Ui=e,console.warn("[Buoy]",e))}r(xo,"warnOnce");function Ki({module:e,tools:t,options:o,isPro:i,tier:n,dev:a}){let s=Pi(),c=Ai(o,{appName:s.appName,hardwareName:s.hardwareName,platform:s.platform}),u=Dt(()=>Fi(o?.socketURL??(a?e.getDefaultSocketURL():bi),!!o?.socketURL,s.platform),[o?.socketURL,a,e,s.platform]),{socket:d}=e.useExternalSyncSocket({deviceName:c?.deviceName??"Buoy Browser",socketURL:u,persistentDeviceId:s.ready?c?.deviceId??null:null,platform:s.platform,extraDeviceInfo:s.extraDeviceInfo,enableLogs:o?.enableLogs});Mt(()=>{let h=$i(u,s.platform);if(!d||!h)return;let B=r(()=>xo(h),"onError");return d.on("connect_error",B),()=>{d.off("connect_error",B)}},[d,u,s.platform]),Mt(()=>{if(!d)return;let h=r(()=>{if(!d.connected||!fi.hasAccountAccess())return;let B=fi.getState();!i&&(B.isInitialized===false||B.isValidating===true)||d.emit("device-license",{isPro:i?"1":"0",tier:n})},"emit");return h(),d.on("connect",h),()=>{d.off("connect",h)}},[d,i,n]);let g=o?.releaseActions?.join(",")??"",x=Dt(()=>Si(t,a,g?g.split(","):void 0),[t,a,g]);return e.useExternalSync({tools:x,socket:d,deviceId:s.ready?c?.deviceId??null:null,enableLogs:o?.enableLogs}),null}r(Ki,"BrowserExternalSync");import{useState as Vi}from"react";import{BuoyPortal as Il}from"@buoy-gg/shared-ui/web/floating";import{useBuoySession as Cl}from"@buoy-gg/license/web";import{Fragment as qi,jsx as Je,jsxs as Gi}from"react/jsx-runtime";var Ji="#20C997";function Yi(){let{status:e,signIn:t,signOut:o}=Cl(),[i,n]=Vi(false),[a,s]=Vi(null);if(typeof document>"u")return null;let c=r(()=>{s(null),n(true),t().catch(d=>s(d instanceof Error?d.message:"Sign-in did not work. Try again.")).finally(()=>n(false))},"start"),u=e.state==="active";return Je(Il,{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:u||a?"12px 14px":0,borderRadius:16,background:u||a?"#0f1419":"transparent",color:"#e6edf3",boxShadow:u||a?"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:u?Gi(qi,{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:kl,"data-testid":"buoy-signout",children:"Sign out"})]}):Gi(qi,{children:[a?Je("div",{role:"alert",style:{marginBottom:10},"data-testid":"buoy-signin-error",children:a}):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:Ji,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(Yi,"BuoySignIn");var kl={marginTop:8,padding:0,border:"none",background:"none",color:Ji,fontSize:14,cursor:"pointer",textDecoration:"underline"};import{LicenseManager as sd}from"@buoy-gg/license/web";var zl=false;function Xi(){if(!zl){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(Xi,"defaultLicenseKey");import{useState as Al}from"react";import{AccountSetupButton as Bl,BuoyNeedsPlanCard as Rl,BuoySignInCard as Ml,useSignInState as Dl}from"@buoy-gg/shared-ui/web";import{jsx as lt,jsxs as Qi}from"react/jsx-runtime";function To({needsPlan:e=false}){let[t,o]=Al(false),i=Dl();return Qi(H,{pointerEvents:"box-none",style:Zi.root,children:[lt(Bl,{expanded:t,onPress:()=>o(true)}),t?lt(yr,{visible:true,transparent:true,animationType:"fade",onRequestClose:()=>o(false),children:Qi(H,{style:Zi.overlay,accessibilityViewIsModal:true,children:[lt(hr,{style:dt.absoluteFill,onPress:()=>o(false),accessible:false}),e&&i==="active"?lt(Rl,{onClose:()=>o(false)}):lt(Ml,{onClose:()=>o(false)})]})}):null]})}r(To,"BuoySignIn");var Zi=dt.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 Io(e){if(e.length>6){let t=e.map(o=>`"${o}"`).join(", ");return e.slice(0,6)}return e}r(Io,"validateDialConfig");import{installedTools as Ol,installedToolsFound as Pl}from"@buoy-gg/core/web/installed-tools";import{Fragment as Co,jsx as $,jsxs as ct}from"react/jsx-runtime";var er={},tr="@react_buoy_floating_menu_tooltip_shown",El=Oe;function or({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,a)=>$("div",{style:{width:o,height:o,borderRadius:o/2,backgroundColor:t}},a))})}r(or,"MenuLauncherIcon");function nr(e){let{defaultFloatingTools:t,defaultDialTools:o,disableHints:i=false,children:n}=e,a=fe(()=>o&&Io(o),[o]);return $(Xt,{defaultFloatingTools:t,defaultDialTools:a,children:$(Ar,{disableHints:i,children:ct(ro,{children:[$(Yn,{children:$(cr,{...e})}),n]})})})}r(nr,"AdmittedFloatingDevTools");var Ll=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function ir({modules:e=er}){return $(Co,{children:Object.entries(e).flatMap(([t,o])=>Ll.map(i=>{let n=o[i];return n?$(n,{},`${t}:${i}`):null}))})}r(ir,"StartupCapture");function rr(){let{openApps:e,restore:t}=at();return G(()=>Do(o=>{let i=e.find(n=>n.id===o);return i?(t(i.instanceId),true):false}),[e,t]),null}r(rr,"WebToolOpenerBridge");function ar(){let e=kr();return Br((e===null?process.env.NODE_ENV:e?"development":"production")??"dev")}r(ar,"defaultEnvironment");function sr(e,t,o,i){let n=r(g=>Object.entries(e).find(([x])=>x.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===g)?.[1],"find"),a=[],s=n("env");t?.length&&s?.createEnvTool&&s.createEnvVarConfig&&a.push(Ge(s.createEnvTool({requiredEnvVars:s.createEnvVarConfig(t)})));let c=n("storage");o?.length&&c?.createStorageTool&&a.push(Ge(c.createStorageTool({requiredStorageKeys:o})));let u=n("ask-buoy"),d=i==="hosted"?u?.hostedAskBuoy?.():i;return d&&u?.createAskBuoyTool&&a.push(Ge(u.createAskBuoyTool(d))),a}r(sr,"configOverrides");function lr(e){if(e.launchMode!=="toggle-only")return;let t=e.isOn;return typeof t=="function"?t():void 0}r(lr,"toggleIsOn");function cr({environment:e,userRole:t="admin",availableEnvironments:o,onEnvironmentSwitch:i,apps:n,modules:a=er,externalSync:s,requiredEnvVars:c,sentryGetClient:u,disableHints:d=false,headless:g=false,hidden:x=false,defaultFloatingTools:h,defaultDialTools:B,zustandStores:k,requiredStorageKeys:R,askBuoy:F}){let D=e??ar(),P=fe(()=>B?Io(B):void 0,[B]),[A,V]=pt(false),[S,M]=pt(false),[,_]=pt(0);G(()=>Gs.subscribe(()=>_(l=>l+1)),[]);let T=Oo(false),E=at(),Q=fe(()=>sr(a,c,R,F),[a,c,R,F]),{allowedTools:Z}=Bo(),U=fe(()=>Lr(Ft([...go(a),...n??[],...Q]),Z),[n,a,Q,Z]),{openApps:q,close:re}=E;G(()=>{if(Z)for(let l of q)Fr(l.id,Z)||re(l.instanceId)},[q,Z,re]);let ee=fe(()=>Object.entries(a).find(([l])=>l.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[a]);G(()=>{if(!k||typeof ee?.watchStores!="function")return;let l=ee.watchStores(k);return typeof l=="function"?l:void 0},[k,ee]);let ne=rt(),xe=E.openApps.some(l=>!l.minimized);G(()=>{ne.setDialOpen(A)},[A,ne.setDialOpen]),G(()=>{ne.setToolOpen(xe||S)},[xe,S,ne.setToolOpen]);let{registerApps:ge}=E;G(()=>{ge(U.map(l=>{let v=l.icon;return{...l,icon:typeof v=="function"?({size:C})=>v(C):v}}))},[ge,U]);let ye=fe(()=>U.map(l=>({id:l.id,name:l.name,description:l.description,slot:l.slot})),[U]);Mr({availableTools:ye,storage:El}),G(()=>{let l=false;return r(async()=>{let[v,C]=await Promise.all([Oe.getItem(gt.dial.isOpen()),Oe.getItem(gt.settings.modalOpen())]);l||(v==="true"&&V(true),C==="true"&&(V(true),M(true)),T.current=true)},"restore")(),()=>{l=true}},[]),G(()=>{T.current&&Oe.setItem(gt.dial.isOpen(),A?"true":"false")},[A]),G(()=>{T.current&&Oe.setItem(gt.settings.modalOpen(),S?"true":"false")},[S]);let W=We(l=>{if(fn(l.id),l.launchMode==="toggle-only"){l.onPress?.(),_(v=>v+1);return}if(l.component){let v=typeof l.icon=="function"?l.icon(20):l.icon;E.open({id:l.id,title:l.name||mt(l.id),component:l.component,props:l.props,modal:l.modal,launchMode:l.launchMode||"self-modal",singleton:l.singleton??true,icon:v,color:l.color||Po(l.id)})}else l.onPress?.()},[E]),Te=Oo({tools:U,openApps:E.openApps,openTool:W});Te.current={tools:U,openApps:E.openApps,openTool:W},G(()=>Do(l=>{let{tools:v,openApps:C,openTool:J}=Te.current;if(C.some(m=>m.id===l))return false;let Y=v.find(m=>m.id===l);return!Y||Y.launchMode==="toggle-only"?false:(J(Y),true)}),[]);let be=fe(()=>ft(U,"dial").map(l=>{let v=l.color||Po(l.id),C;return typeof l.icon=="string"?C=l.icon:typeof l.icon=="function"?C=l.icon(32):C=null,{id:l.id,name:l.name||mt(l.id),icon:C,unavailable:!l.component&&!l.onPress,color:v,onPress:r(()=>{W(l),V(false)},"onPress")}}),[U,W]),Be=fe(()=>{if(!A)return be;let l=new Map(be.map(v=>[v.id,v]));return gn(be.map(v=>v.id)).map(v=>l.get(v)).filter(v=>!!v)},[A,be]),{settings:Ie}=Mn(),pe=fe(()=>ft(U,"row").filter(l=>(Ie.floatingTools[l.id]??false)===true&&(l.component||l.onPress)),[U,Ie.floatingTools]),oe=fe(()=>U.map(l=>({id:l.id,name:l.name||mt(l.id),description:l.description||Dr(l.id),slot:l.slot,icon:l.icon,color:l.color})),[U]),[Re,me]=pt(false),Ce=E.openApps.some(l=>!l.minimized);G(()=>{if(d)return;let l=false,v=setTimeout(async()=>{let C=await Oe.getItem(tr);!l&&!C&&me(true)},1e3);return()=>{l=true,clearTimeout(v)}},[d]);let ae=We(()=>{me(false),Oe.setItem(tr,"true")},[]),ve=We(()=>{ae(),V(true)},[ae]),Ye=We(()=>{V(false),M(false)},[]),$e=We(()=>{M(l=>!l)},[]),ke=We(()=>M(false),[]),Me=!!(o?.length&&i),je=Ie.floatingTools.environment!==false,se=Re&&!A&&!Ce&&!x;G(()=>{if(!se)return;let l=r(C=>{(!(C.target instanceof Element)||!C.target.closest("[data-buoy-root]"))&&ae()},"onPointerDown"),v=r(C=>{C.key==="Escape"&&ae()},"onKeyDown");return document.addEventListener("pointerdown",l,true),document.addEventListener("keydown",v),()=>{document.removeEventListener("pointerdown",l,true),document.removeEventListener("keydown",v)}},[se,ae]);let O=E.openApps.some(l=>l.minimized&&l.launchMode!=="toggle-only"),w=$(Wi,{modules:a,apps:n,requiredEnvVars:c,externalSync:s,headless:g,sentryGetClient:u});return g?w:ct("div",{"data-buoy-root":"",style:{display:"contents"},children:[w,$(rr,{}),se&&$("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),$("div",{style:x?{visibility:"hidden"}:{display:"contents"},"aria-hidden":x||void 0,children:ct(Fo,{enablePositionPersistence:!se,pushToSide:A||Ce,suspendPointerEvents:A,centerOnboarding:se,minimizedStack:O?$(mi,{}):void 0,hasMinimizedStack:O,children:[D&&je&&!Me&&$(Or,{environment:D}),Me&&je&&$(Pr,{currentEnvironment:D??"local",availableEnvironments:o,onSelect:i}),t?$($o,{userRole:t,onPress:ve}):$("button",{"aria-label":"Open dev tools",onClick:ve,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:$(or,{})}),pe.map(l=>$("button",{"aria-label":l.name||mt(l.id),"aria-pressed":lr(l),title:l.description,onClick:()=>W(l),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof l.icon=="function"?l.icon(16):l.icon},l.id))]})}),se&&$(Nt,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:ae}),A&&!x&&$(Kt,{icons:Be,onClose:Ye,centerLabel:"BUOY",onCenterPress:$e,settingsOpen:S,hintsDisabled:d,emptyNote:Z&&Be.length===0?$r:void 0}),S&&!x&&$(oo,{visible:true,onClose:ke,availableTools:oe,defaultFloatingTools:h,defaultDialTools:P,onSettingsChange:l=>{}}),!x&&ct(Co,{children:[$(Xn,{}),$(wr,{})]})]})}r(cr,"FloatingDevToolsInner");function dr(e){let t=e&&typeof e=="object"?e.appId:void 0,o=!!e;G(()=>{if(!o)return;let i=false,n=xr.SessionManager;if(!n)return;let a=r(s=>{i||!s||(n.configure({audience:`app:${s}`}),n.load().catch(()=>{}))},"apply");return t?a(t):Mo().then(s=>a(s?.bundleId)).catch(()=>{}),()=>{i=true}},[o,t])}r(dr,"useCapacitorSignInAudience");function ur(e){let t=e&&typeof e=="object"?e.appId:void 0;G(()=>{let o=false;return t?Lt(t):Ro()?Mo().then(i=>{o||Lt(i?.bundleId)}).catch(()=>{}):typeof location<"u"&&location.origin&&location.origin!=="null"&&Lt(location.origin),()=>{o=true}},[t])}r(ur,"usePublishAppId");var pr=false;function mr(e){return e.modules?e:(!Pl&&!pr&&typeof console<"u"&&(pr=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:Ol})}r(mr,"withInstalledTools");function gr(e){return $(Sr,{children:$(fr,{...mr(e)})})}r(gr,"FloatingDevTools");function fr(e){let{access:t,isPro:o,licenseKey:i}=Bo();G(()=>{Tr.configure(e.licenseKey??Xi())},[e.licenseKey]);let n=e.licenseKey===void 0||Ir(e.licenseKey,i),a=Cr(typeof He<"u"?He:process.env.NODE_ENV!=="production"),s=n&&t.status==="admitted";G(()=>{s&&Rr()},[s]),G(()=>{a||t.status==="initializing"||(o&&s?br():vr())},[a,o,s,t.status]);let c=Ro();return dr(c?e.signIn:void 0),ur(e.signIn),!a&&!o?!e.signIn||e.headless?null:c?$(To,{needsPlan:true}):$(Yi,{}):s?$(nr,{...e}):ct(Co,{children:[t.status==="initializing"&&$(ir,{modules:e.modules}),e.headless?null:e.signIn&&c?$(To,{}):$(zr,{})]})}r(fr,"FloatingDevToolsContent");export{Er as a,Eo as b,Ft as c,ft as d,Lo as e,Fo as f,jr as g,$o as h,rn as i,Kt as j,oo as k,io as l,Nn as m,ro as n,rt as o,Yn as p,at as q,Xn as r,Ge as s,go as t,Hi as u,gr as v};
@@ -0,0 +1 @@
1
+ "use client";import{a as c}from"./chunk-LOPXJLVB.mjs";var g=Symbol.for("buoy.earlyNetwork"),v="__BUOY_EARLY_NETWORK__",E=100;function R(){if(typeof window>"u")return;let u=window;if(u[g]||u[v])return;let d=Date.now,h=true,l=[],p=c(e=>{if(l.push(Object.freeze(e)),l.length>E){let n=l.shift();n?.kind==="fetch"&&n.settled.then(s=>s.clone?.body?.cancel()).catch(()=>{})}},"push"),f=typeof window.fetch=="function"?window.fetch:void 0;if(f&&(window.fetch=c(function(e,n){if(n?.__buoyInternal||!h)return f.call(window,e,n);let s;try{e instanceof Request&&e.body&&!e.bodyUsed&&n?.body===void 0&&(s=e.clone())}catch{}let y=d(),i=f.call(window,e,n),r=i.then(t=>{let o=d(),a=/event-stream|ndjson/.test(t.headers.get("content-type")??""),_;try{a||(_=t.clone())}catch{}return{response:t,clone:_,headersAt:o}},t=>({error:t,headersAt:d()}));return p({kind:"fetch",input:e,init:n,requestCopy:s,start:y,settled:r}),i},"buoyEarlyFetch")),typeof XMLHttpRequest<"u"){let e=XMLHttpRequest.prototype,{open:n,send:s,setRequestHeader:y}=e,i=new WeakMap;e.open=function(r,t,...o){return h&&i.set(this,{method:r,url:String(t),headers:{}}),n.call(this,r,t,...o)},e.setRequestHeader=function(r,t){let o=i.get(this);return o&&(o.headers[r]=t),y.call(this,r,t)},e.send=function(r){let t=i.get(this);if(h&&t){i.delete(this);let o=d(),a=this;a.addEventListener("readystatechange",()=>{a.readyState===2&&a._buoyTtfb===void 0&&(a._buoyTtfb=d()-o),a.readyState===4&&(a._buoyEarlyEnd=d())}),p({kind:"xhr",xhr:a,method:t.method,url:t.url,headers:t.headers,body:r,start:o})}return s.call(this,r)}}let b=c(()=>(h=false,l.splice(0)),"adopt"),m=Object.freeze({version:1,get pending(){return l.length},adopt:b}),w=c((e,n)=>{try{Object.defineProperty(u,e,{value:n,enumerable:false,writable:false,configurable:false})}catch{}},"define");w(g,m),w(v,Object.freeze({version:1,adopt:b}))}c(R,"installEarlyNetworkRecorder");export{R as a};
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-A6DQ5EDK.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};
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-JXTHZBMM.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,P as AppHostProvider,w 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,D as DevToolsVisibilityProvider,T 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,v 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,E 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,S 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,k as useAppHost,B as useDevToolsVisibility,bs as useFloatingTools,R as usePersistedState,j as useSafeAreaInsets,hs as useSettings,b as useToolHeader,h as useToolHost};
@@ -1 +1 @@
1
- "use client";import{a as n}from"./chunks/chunk-5EUMNDI5.mjs";import{a as s}from"./chunks/chunk-D2FYORGY.mjs";import{a as p,e as i}from"./chunks/chunk-LOPXJLVB.mjs";import{installCapacitorBridge as f}from"@buoy-gg/license/web/capacitor";function r(a={}){if(typeof window>"u"||typeof document>"u")return false;let e=window.Capacitor,t=(()=>{try{return e?.isNativePlatform?.()===true}catch{return false}})(),o=t?e?.DEBUG===true:typeof i<"u"?i:process.env.NODE_ENV!=="production";return!o&&!a.enableInRelease&&!s()?false:(n(),t&&f({release:!o}),true)}p(r,"registerBrowserNetwork");r();export{r as registerBrowserNetwork};
1
+ "use client";import{a as n}from"./chunks/chunk-OXRZOHYP.mjs";import{a as s}from"./chunks/chunk-D2FYORGY.mjs";import{a as p,e as i}from"./chunks/chunk-LOPXJLVB.mjs";import{installCapacitorBridge as f}from"@buoy-gg/license/web/capacitor";function r(a={}){if(typeof window>"u"||typeof document>"u")return false;let e=window.Capacitor,t=(()=>{try{return e?.isNativePlatform?.()===true}catch{return false}})(),o=t?e?.DEBUG===true:typeof i<"u"?i:process.env.NODE_ENV!=="production";return!o&&!a.enableInRelease&&!s()?false:(n(),t&&f({release:!o}),true)}p(r,"registerBrowserNetwork");r();export{r as registerBrowserNetwork};
@@ -1 +1 @@
1
- "use client";import{a as C,b as A}from"./chunks/chunk-NEDMFPZ4.mjs";import{a as w}from"./chunks/chunk-FROELTJH.mjs";import{a as B}from"./chunks/chunk-5EUMNDI5.mjs";import{a as D}from"./chunks/chunk-D2FYORGY.mjs";import{a as R,e as E}from"./chunks/chunk-LOPXJLVB.mjs";import*as L from"react-devtools-core";import{installCapacitorBridge as S}from"@buoy-gg/license/web/capacitor";var d=["onScheduleFiberRoot","onCommitFiberRoot","onPostCommitFiberRoot","onCommitFiberUnmount","setStrictMode"];function O(T={}){if(typeof window>"u"||typeof document>"u")return false;let l=window.Capacitor,f=(()=>{try{return l?.isNativePlatform?.()===true}catch{return false}})(),p=f?l?.DEBUG===true:typeof E<"u"?E:process.env.NODE_ENV!=="production";if(!p&&!T.enableInRelease&&!D())return false;C(),B(),f&&S({release:!p});let r=window,o=r.__REACT_DEVTOOLS_GLOBAL_HOOK__,c=o&&o.supportsFiber&&!o.getFiberRoots&&!o.sub&&Object.getOwnPropertyDescriptor(r,"__REACT_DEVTOOLS_GLOBAL_HOOK__")?.configurable;if(c&&delete r.__REACT_DEVTOOLS_GLOBAL_HOOK__,!r.__REACT_DEVTOOLS_GLOBAL_HOOK__&&((L.initialize??L.default?.initialize)({appendComponentStack:false,breakOnConsoleErrors:false,showInlineWarningsAndErrors:false,hideConsoleLogsInStrictMode:false}),c)){let n=r.__REACT_DEVTOOLS_GLOBAL_HOOK__,m=n.inject,a=new Map;n.inject=e=>{let t=m(e);return a.set(t,o.inject(e)),t};for(let e of d){let t=n[e];typeof t=="function"&&(n[e]=(i,...s)=>(a.has(i)&&o[e]?.(a.get(i),...s),t(i,...s)))}let _=new Map;if(o.renderers?.forEach?.((e,t)=>_.set(t,m(e))),_.size)for(let e of d){let t=o[e];o[e]=function(i,...s){let b=t?.call(this,i,...s),u=_.get(i);return u!==void 0&&n[e]?.(u,...s),b}}}return!!r.__REACT_DEVTOOLS_GLOBAL_HOOK__}R(O,"registerBrowserDevTools");O();export{w as earlyHookScript,O as registerBrowserDevTools,A as subscribeThreeBootEvents};
1
+ "use client";import{a as C,b as A}from"./chunks/chunk-NEDMFPZ4.mjs";import{a as w}from"./chunks/chunk-FROELTJH.mjs";import{a as B}from"./chunks/chunk-OXRZOHYP.mjs";import{a as D}from"./chunks/chunk-D2FYORGY.mjs";import{a as R,e as E}from"./chunks/chunk-LOPXJLVB.mjs";import*as L from"react-devtools-core";import{installCapacitorBridge as S}from"@buoy-gg/license/web/capacitor";var d=["onScheduleFiberRoot","onCommitFiberRoot","onPostCommitFiberRoot","onCommitFiberUnmount","setStrictMode"];function O(T={}){if(typeof window>"u"||typeof document>"u")return false;let l=window.Capacitor,f=(()=>{try{return l?.isNativePlatform?.()===true}catch{return false}})(),p=f?l?.DEBUG===true:typeof E<"u"?E:process.env.NODE_ENV!=="production";if(!p&&!T.enableInRelease&&!D())return false;C(),B(),f&&S({release:!p});let r=window,o=r.__REACT_DEVTOOLS_GLOBAL_HOOK__,c=o&&o.supportsFiber&&!o.getFiberRoots&&!o.sub&&Object.getOwnPropertyDescriptor(r,"__REACT_DEVTOOLS_GLOBAL_HOOK__")?.configurable;if(c&&delete r.__REACT_DEVTOOLS_GLOBAL_HOOK__,!r.__REACT_DEVTOOLS_GLOBAL_HOOK__&&((L.initialize??L.default?.initialize)({appendComponentStack:false,breakOnConsoleErrors:false,showInlineWarningsAndErrors:false,hideConsoleLogsInStrictMode:false}),c)){let n=r.__REACT_DEVTOOLS_GLOBAL_HOOK__,m=n.inject,a=new Map;n.inject=e=>{let t=m(e);return a.set(t,o.inject(e)),t};for(let e of d){let t=n[e];typeof t=="function"&&(n[e]=(i,...s)=>(a.has(i)&&o[e]?.(a.get(i),...s),t(i,...s)))}let _=new Map;if(o.renderers?.forEach?.((e,t)=>_.set(t,m(e))),_.size)for(let e of d){let t=o[e];o[e]=function(i,...s){let b=t?.call(this,i,...s),u=_.get(i);return u!==void 0&&n[e]?.(u,...s),b}}}return!!r.__REACT_DEVTOOLS_GLOBAL_HOOK__}R(O,"registerBrowserDevTools");O();export{w as earlyHookScript,O as registerBrowserDevTools,A as subscribeThreeBootEvents};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/core",
3
- "version": "7.0.78",
3
+ "version": "7.0.79",
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-core": "^7.0.78",
93
- "@buoy-gg/floating-tools-react": "^7.0.78",
94
- "@buoy-gg/license": "^7.0.78",
95
- "@buoy-gg/shared-ui": "^7.0.78"
92
+ "@buoy-gg/floating-tools-core": "^7.0.79",
93
+ "@buoy-gg/license": "^7.0.79",
94
+ "@buoy-gg/shared-ui": "^7.0.79",
95
+ "@buoy-gg/floating-tools-react": "^7.0.79"
96
96
  },
97
97
  "peerDependencies": {
98
98
  "react": "*"
@@ -1 +0,0 @@
1
- "use client";import{a as f}from"./chunk-LOPXJLVB.mjs";function _(){if(typeof window>"u")return;let y=window;if(y.__BUOY_EARLY_NETWORK__)return;let i=Date.now,c=true,l=[],p=f(t=>{if(l.push(t),l.length>100){let n=l.shift();n?.kind==="fetch"&&n.settled.then(a=>a.clone?.body?.cancel()).catch(()=>{})}},"push"),h=typeof window.fetch=="function"?window.fetch:void 0;if(h&&(window.fetch=f(function(t,n){if(n?.__buoyInternal||!c)return h.call(window,t,n);let a;try{t instanceof Request&&t.body&&!t.bodyUsed&&n?.body===void 0&&(a=t.clone())}catch{}let u=i(),d=h.call(window,t,n),r=d.then(e=>{let o=i(),s=/event-stream|ndjson/.test(e.headers.get("content-type")??""),w;try{s||(w=e.clone())}catch{}return{response:e,clone:w,headersAt:o}},e=>({error:e,headersAt:i()}));return p({kind:"fetch",input:t,init:n,requestCopy:a,start:u,settled:r}),d},"buoyEarlyFetch")),typeof XMLHttpRequest<"u"){let t=XMLHttpRequest.prototype,{open:n,send:a,setRequestHeader:u}=t,d=new WeakMap;t.open=function(r,e,...o){return c&&d.set(this,{method:r,url:String(e),headers:{}}),n.call(this,r,e,...o)},t.setRequestHeader=function(r,e){let o=d.get(this);return o&&(o.headers[r]=e),u.call(this,r,e)},t.send=function(r){let e=d.get(this);if(c&&e){d.delete(this);let o=i(),s=this;s.addEventListener("readystatechange",()=>{s.readyState===2&&s._buoyTtfb===void 0&&(s._buoyTtfb=i()-o),s.readyState===4&&(s._buoyEarlyEnd=i())}),p({kind:"xhr",xhr:s,method:e.method,url:e.url,headers:e.headers,body:r,start:o})}return a.call(this,r)}}y.__BUOY_EARLY_NETWORK__={version:1,records:l,adopt(){return c=false,l.splice(0)}}}f(_,"installEarlyNetworkRecorder");export{_ as a};
@@ -1,10 +0,0 @@
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 Pt,startSettingsSync as kr}from"@buoy-gg/shared-ui/web";import{useState as Et,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 Po(e,t){let o=t instanceof Set?t:new Set(t);return e.filter(i=>o.has(i.id))}r(Po,"getEnabledTools");import{filterTeamTools as Dr,isTeamToolAllowed as Or}from"@buoy-gg/floating-tools-core/web";var Pr="No tools are on for your role. Ask your team admin.";import{FloatingTool as Eo,FloatingToolDivider as Er,FloatingToolUserStatus as Lo,getBubbleAnchorPosition as Lr}from"@buoy-gg/shared-ui/web/floating";import{useState as te,useEffect as Pe,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 E,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,P=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 E("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:E("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${v}px, ${C}px) scale(${P})`,opacity:z,transition:l||d?"transform 100ms ease":"none"},children:g?E("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:[E("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}}),E("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}}),E("div",{style:{marginBottom:w.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:l?"brightness(1.2)":"none"},children:e.icon}),E("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&&E("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 E("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)=>E("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"&&E(Ht,{side:"prev",color:s}),e==="prev"?"PREV":"NEXT",e==="next"&&E(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),[P,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}));Pe(()=>{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]);Pe(()=>{rn()},[]),Pe(()=>{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]);Pe(()=>{let O=document.activeElement,a=V.current;return()=>{O?.isConnected&&(document.activeElement===document.body||a?.contains(document.activeElement))&&O.focus()}},[]),Pe(()=>{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);Pe(()=>{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")},[]);Pe(()=>{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:[E("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?E("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:[E("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:j.dialGradient1,opacity:w.gradientLayers[0].opacity}}),E("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:j.dialGradient2,opacity:w.gradientLayers[1].opacity}}),E("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:j.dialGradient3,opacity:w.gradientLayers[2].opacity}}),me.map(O=>E("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=>E("div",{style:{position:"absolute",top:0,[a]:0,width:`calc(50% - ${fe}px)`,height:w.grid.lineHeight,backgroundColor:j.dialGridLine}},a))},O)),E("div",{"data-testid":"dial-background","data-background":c,style:{position:"absolute",inset:0,pointerEvents:"none"},children:c==="hyperspace"?E(ia,{size:W.circleSize}):E(Kr,{focus:da})}),Ie.map((O,a)=>E(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*P})`,opacity:I>.01?1:0},children:[E("div",{style:{position:"absolute",inset:0,backgroundColor:j.dialGradient1,opacity:.5,borderRadius:W.buttonSize}}),E("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:j.dialGradient2,opacity:.3,borderRadius:W.buttonSize}}),E("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:j.dialGradient3,opacity:.2,borderRadius:W.buttonSize}}),E("div",{style:{width:Me,height:Me,borderRadius:W.buttonSize*w.centerButton.borderRadiusRatio,backgroundColor:j.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:E("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:[E("span",{style:{marginBottom:-2},children:"CLOSE"}),E("span",{style:{marginTop:-2},children:"SETTINGS"})]}):E("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:[E(_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")]})]}),E(_t,{side:"next",disabled:oe>=pe-1,onClick:()=>je(oe+1)})]}),ae&&!n&&E(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 Ee,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 Pa,RoutesIcon as Ea,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=Ee,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),[P,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 Ee.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&&Ee.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),Ee.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 Ee.clear(),be(true),B(u),s!==Ee&&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(Pa,{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(Ea,{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=P.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,{keyboardShouldPersistTaps:"handled",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,{keyboardShouldPersistTaps:"handled",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"}),P.has("desktopSync")?p(fn,{size:16,color:b.color.textTertiary}):p(gn,{size:16,color:b.color.textTertiary})]}),P.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 Ee.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 Pn,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},En=ds(null);function oo(){return us(En)??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),P=Dn(null),z=Mn(()=>{S(false),B("")},[]),v=Mn((q,ne="info")=>{P.current&&clearTimeout(P.current),D(Z=>({message:q,type:ne,nonce:(Z?.nonce??0)+1})),P.current=setTimeout(()=>D(null),Fn)},[]);Tt(()=>()=>{P.current&&clearTimeout(P.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(En.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:Pn.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:Pn.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]),P=t.some(v=>v.launchMode!=="toggle-only"&&!v.minimized);xt(()=>P?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,[P,B,t]),_n(t.length>0,()=>B());let z=ls(()=>({openApps:t,isAnyOpen:P,open:g,close:B,closeAll:I,registerApps:h,minimize:R,restore:L,isMinimized:D}),[t,P,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 Ps,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",Es=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=Ps(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:Es,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 Pi(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(Pi,"capacitorBrokerURL");function Ei(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(Ei,"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,P]of Object.entries(e))for(let[z,v]of Object.entries(P))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(P=>{let z=P?.();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 P of L.reverse())P()}},[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(P=>{let z=D[P];return z?Fe(z,{},`${L}:${P}`):null})),R&&Fe(R,{getClient:s}),Object.entries(e).flatMap(([L,D])=>fl.map(P=>{let z=D[P];return z&&(!n||P==="ScenariosOverlay"||P==="ImpersonateOverlay")?Fe(z,{},`${L}:${P}`):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(()=>Pi(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=Ei(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(),P=he(()=>B?xo(B):void 0,[B]),[z,v]=Et(false),[C,F]=Et(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]=Et(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(Eo,{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?Pr:void 0}),C&&!S&&$(eo,{visible:true,onClose:je,availableTools:pe,defaultFloatingTools:h,defaultDialTools:P,onSettingsChange:a=>{}}),!S&&lt(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?Pt(t):Ao()?Bo().then(i=>{o||Pt(i?.bundleId)}).catch(()=>{}):typeof location<"u"&&location.origin&&location.origin!=="null"&&Pt(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,Po as e,Eo as f,Er 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};