@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.
- package/bundlers/vite.d.ts +1 -1
- package/bundlers/vite.mjs +3 -3
- package/lib/commonjs/earlyNetwork.js +1 -1
- package/lib/commonjs/floatingMenu/AppHost.js +1 -1
- package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
- package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
- package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -1
- package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -1
- package/lib/commonjs/floatingMenu/backTarget.js +1 -0
- package/lib/commonjs/floatingMenu/capacitorBackButton.js +1 -1
- package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -1
- package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -1
- package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -1
- package/lib/commonjs/floatingMenu/hardwareBack.js +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/module/earlyNetwork.js +1 -1
- package/lib/module/floatingMenu/AppHost.js +1 -1
- package/lib/module/floatingMenu/AppHost.web.js +1 -1
- package/lib/module/floatingMenu/AppHostLogic.js +1 -1
- package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
- package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
- package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -1
- package/lib/module/floatingMenu/autoExternalSync.js +1 -1
- package/lib/module/floatingMenu/backTarget.js +1 -0
- package/lib/module/floatingMenu/capacitorBackButton.js +1 -1
- package/lib/module/floatingMenu/dial/DialDevTools.js +1 -1
- package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -1
- package/lib/module/floatingMenu/externalSyncGate.js +1 -1
- package/lib/module/floatingMenu/hardwareBack.js +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/earlyNetwork.d.ts +19 -4
- package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts +6 -0
- package/lib/typescript/commonjs/floatingMenu/backTarget.d.ts +17 -0
- package/lib/typescript/commonjs/floatingMenu/capacitorBackButton.d.ts +5 -3
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/commonjs/floatingMenu/hardwareBack.d.ts +8 -0
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/earlyNetwork.d.ts +19 -4
- package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts +6 -0
- package/lib/typescript/module/floatingMenu/backTarget.d.ts +17 -0
- package/lib/typescript/module/floatingMenu/capacitorBackButton.d.ts +5 -3
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/module/floatingMenu/hardwareBack.d.ts +8 -0
- package/lib/typescript/module/version.d.ts +1 -1
- package/lib/web/auto.mjs +1 -1
- package/lib/web/chunks/{FloatingDevTools.web-FB3F35HU.mjs → FloatingDevTools.web-5EMC7ZIE.mjs} +1 -1
- package/lib/web/chunks/{FloatingDevTools.web-IIOOVSUC.mjs → FloatingDevTools.web-QLTO5FXP.mjs} +1 -1
- package/lib/web/chunks/chunk-EFTCKGMC.mjs +10 -0
- package/lib/web/chunks/chunk-JXTHZBMM.mjs +10 -0
- package/lib/web/chunks/chunk-OXRZOHYP.mjs +1 -0
- package/lib/web/index.mjs +1 -1
- package/lib/web/register-network.mjs +1 -1
- package/lib/web/register.mjs +1 -1
- package/package.json +5 -5
- package/lib/web/chunks/chunk-5EUMNDI5.mjs +0 -1
- package/lib/web/chunks/chunk-A6DQ5EDK.mjs +0 -10
- package/lib/web/chunks/chunk-LAJ3HKAL.mjs +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{useState as p,useEffect as E,useMemo as J,useRef as Q,useCallback as ee}from"react";import{dialAccessibilityLabel as $e}from"./dialA11y.js";import{getDialLayout as Le,getAllIconPositions as Fe,getGridLineRotations as We,getIconStaggerInputRange as Ge,MAX_DIAL_SLOTS as K,DIAL_ICON_SIZE as He,dialAnimationConfig as ye,getDialCSSKeyframesString as _e,getDialCSSAnimationStyles as je,dialColors as r,dialStyles as e,withAlpha as be,floatingToolsColors as Oe}from"@buoy-gg/floating-tools-react";import{persistentStorage as Se,monoFont as de,ToolBackground as qe,useToolBackground as Ue}from"@buoy-gg/shared-ui";import{DialHyperspace as Ke}from"./DialHyperspace.js";import{OnboardingTooltip as Ne}from"./OnboardingTooltip.web.js";import{jsx as n,Fragment as Ve,jsxs as k}from"react/jsx-runtime";const Xe={x:.5,y:.5};const xe="@react_buoy_settings_tooltip_shown";let we=false;function Ye(){if(we||typeof document==="undefined")return;const o=document.createElement("style");o.textContent=_e();document.head.appendChild(o);we=true}const H=o=>1-Math.pow(1-o,3);const ue=o=>o*o*o;function Ze({icon:o,index:m,totalIcons:I,position:h,progress:c,onPress:x}){const[z,D]=p(false);const[N,w]=p(false);const b=!o.icon&&o.id.startsWith("empty-");const R=!b&&o.unavailable===true;const T=!b&&!R;const{icons:V}=ye;const P=Ge(m,I);let d=0;if(c<=P[1]){d=0}else if(c<=P[2]){d=(c-P[1])/(P[2]-P[1])}else{d=1}d=Math.max(0,Math.min(1,d));const $=He;const L=V.pressIn.scale;const te=1.1;const _=d*(N?L:z?te:1);let A=0;if(d<=0){A=0}else if(d<=.3){A=d}else{A=.3+(d-.3)*(.7/.7)}const X=h.x*(d-1);const ne=h.y*(d-1);return n("button",{role:"menuitem","aria-label":b?"Empty slot":$e(o.id,o.name),"data-testid":o.id?`buoy-dial-${o.id}`:void 0,"aria-disabled":!T,tabIndex:T?0:-1,onClick:T?x:void 0,onPointerEnter:oe=>T&&oe.pointerType==="mouse"&&D(true),onPointerLeave:()=>{D(false);w(false)},onPointerDown:()=>T&&w(true),onPointerUp:()=>w(false),onPointerCancel:()=>w(false),style:{position:"absolute",left:`calc(50% + ${h.x}px)`,top:`calc(50% + ${h.y}px)`,width:$,height:$,marginLeft:-$/2,marginTop:-$/2,cursor:T?"pointer":"default",background:"none",border:"none",padding:0},children:n("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${X}px, ${ne}px) scale(${_})`,opacity:A,transition:z||N?"transform 100ms ease":"none"},children:b?n("div",{style:{width:e.emptySlot.dotSize,height:e.emptySlot.dotSize,borderRadius:e.emptySlot.dotSize/2,backgroundColor:r.emptyDotBackground,border:`${e.emptySlot.borderWidth}px solid ${r.emptyDotBorder}`}}):k(Ve,{children:[n("div",{style:{position:"absolute",width:`${e.icon.gradientBgSizePercent}%`,height:`${e.icon.gradientBgSizePercent}%`,borderRadius:e.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:e.icon.gradientBgOpacity}}),n("div",{style:{position:"absolute",width:`${e.icon.innerGlowSizePercent}%`,height:`${e.icon.innerGlowSizePercent}%`,borderRadius:e.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:e.icon.innerGlowOpacity}}),n("div",{style:{marginBottom:e.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:z?"brightness(1.2)":"none"},children:o.icon}),n("span",{style:{fontSize:o.name.length>8?Math.max(e.icon.label.fontSize*.7,e.icon.label.fontSize*8/o.name.length):e.icon.label.fontSize,fontWeight:e.icon.label.fontWeight,fontFamily:e.icon.label.fontFamily,color:r.iconLabel,letterSpacing:e.icon.label.letterSpacing,marginTop:e.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:o.name}),R&&n("span",{style:{fontSize:e.icon.label.fontSize-1,fontWeight:e.icon.label.fontWeight,fontFamily:e.icon.label.fontFamily,letterSpacing:e.icon.label.letterSpacing,color:Oe.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}function Ce({side:o,color:m}){const I=o==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]];return n("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:I.map(([h,c,x,z],D)=>n("line",{x1:h,y1:c,x2:x,y2:z,stroke:m,strokeWidth:2},D))})}function ve({side:o,disabled:m,onClick:I}){const[h,c]=p(false);const x=m?r.emptyDotBorder:r.accent;return k("button",{type:"button","aria-label":`${o==="prev"?"Previous":"Next"} dial page`,"data-testid":`buoy-dial-${o}`,disabled:m,onClick:I,onPointerDown:()=>!m&&c(true),onPointerUp:()=>c(false),onPointerLeave:()=>c(false),onPointerCancel:()=>c(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${r.dialBorder}`,backgroundColor:r.dialBackground,color:m?r.iconLabelMuted:r.centerText,fontSize:12,fontWeight:900,fontFamily:de,letterSpacing:1.5,textTransform:"uppercase",cursor:m?"default":"pointer",opacity:m?.4:1,boxShadow:m?"none":`0 0 8px ${be(r.dialShadow,.4)}`,transform:h?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[o==="prev"&&n(Ce,{side:"prev",color:x}),o==="prev"?"PREV":"NEXT",o==="next"&&n(Ce,{side:"next",color:x})]})}export function DialMenu({icons:o,onClose:m,centerLabel:I="MENU",onCenterPress:h,settingsOpen:c=false,hintsDisabled:x=false,emptyNote:z}){const{id:D}=Ue();const[N,w]=p(0);const[b,R]=p(0);const[T,V]=p(0);const[P,d]=p(0);const[$,L]=p(0);const[te,_]=p(1);const[A,X]=p(false);const[ne,oe]=p(false);const[ke,ze]=p(false);const ie=Q(null);const pe=Q(null);const S=Q(null);const Y=Q(false);const{entrance:j,exit:O,interaction:q}=ye;const Te=je();const[re,Pe]=p(()=>({width:window.innerWidth,height:window.innerHeight}));E(()=>{const i=()=>Pe({width:window.innerWidth,height:window.innerHeight});window.addEventListener("resize",i);return()=>window.removeEventListener("resize",i)},[]);const a=J(()=>Le({screenWidth:re.width,maxCircleSize:Math.max(120,Math.min(320,re.height-96))}),[re]);const Be=J(()=>We(),[]);const Ie=J(()=>Fe(K,a.iconRadius),[a.iconRadius]);const[De,Re]=p(0);const F=Math.max(1,Math.ceil(o.length/K));const C=Math.min(De,F-1);const me=J(()=>{const i=C*K;const t=[...o.slice(i,i+K)];while(t.length<K){t.push({id:`empty-${t.length}`,name:"",icon:null,onPress:()=>{}})}return t},[o,C]);E(()=>{Ye()},[]);E(()=>{const i=j.backdrop.duration;const t=j.dial.rotation.duration;const f=j.centerButton.delay;const l=j.icons.delay;const u=j.icons.duration;const g=performance.now();const y=B=>{const s=B-g;w(Math.min(1,s/i));const v=Math.min(1,s/400);let W=H(v)*1.1;if(v>.7){W-=(v-.7)*.33}if(v>=1)W=1;R(Math.max(0,Math.min(1.05,W)));const M=Math.min(1,s/t);V(H(M)*360);if(s>=f){const G=Math.min(1,(s-f)/300);let ce=H(G)*1.15;if(G>.6){ce-=(G-.6)*.375}if(G>=1)ce=1;d(Math.max(0,Math.min(1.05,ce)))}if(s>=l){const G=Math.min(1,(s-l)/u);L(H(G))}const le=l+u;if(s<le){S.current=requestAnimationFrame(y)}else{w(1);R(1);V(360);d(1);L(1);ze(true)}};S.current=requestAnimationFrame(y);return()=>{if(S.current)cancelAnimationFrame(S.current)}},[]);const U=ee(()=>{if(Y.current)return;Y.current=true;oe(true);if(S.current){cancelAnimationFrame(S.current)}const i=performance.now();const t=O.icons.duration;const f=O.centerButton.duration;const l=O.dialScale.duration;const u=Math.max(f,l);const g=O.backdrop.duration;const y=B=>{const s=B-i;if(s<t){const M=ue(s/t);L(1-M);S.current=requestAnimationFrame(y);return}const v=t;if(s<v+u){L(0);const M=Math.min(1,(s-v)/f);const le=Math.min(1,(s-v)/l);d(1-ue(M));R(1-ue(le));S.current=requestAnimationFrame(y);return}const W=v+u;if(s<W+g){R(0);d(0);const M=(s-W)/g;w(1-M);S.current=requestAnimationFrame(y);return}w(0);m()};S.current=requestAnimationFrame(y)},[O,m]);E(()=>{const i=document.activeElement;const t=ie.current;return()=>{if(i?.isConnected&&(document.activeElement===document.body||t?.contains(document.activeElement))){i.focus()}}},[]);E(()=>{if(c)return;pe.current?.focus();const i=t=>{const f=ie.current;if(!f)return;if(t.key==="Escape"){t.preventDefault();U()}else if(t.key==="Tab"){const l=Array.from(f.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(y=>y.getClientRects().length>0);const u=l[0];const g=l[l.length-1];if(!f.contains(document.activeElement)||(t.shiftKey?document.activeElement===u:document.activeElement===g)){t.preventDefault();(t.shiftKey?g:u)?.focus()}}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(t.key)){const l=Array.from(f.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])'));const u=l.indexOf(document.activeElement);if(u<0||!l.length)return;t.preventDefault();const g=t.key==="Home"?0:t.key==="End"?l.length-1:(u+(t.key==="ArrowRight"||t.key==="ArrowDown"?1:-1)+l.length)%l.length;l[g].focus()}};document.addEventListener("keydown",i);return()=>document.removeEventListener("keydown",i)},[U,c]);const[ae,fe]=p(false);E(()=>{if(x)return;let i=false;const t=setTimeout(async()=>{const f=await Se.getItem(xe);if(!i&&!f)fe(true)},1200);return()=>{i=true;clearTimeout(t)}},[x]);const se=ee(()=>{fe(false);void Se.setItem(xe,"true")},[]);E(()=>{if(c&&ae){se()}},[c,ae,se]);const Ae=ee(i=>{if(i.id.startsWith("empty-")||Y.current)return;const[t,f]=q.iconSelect.pulse;const l=performance.now();const u=150;const g=y=>{const B=y-l;if(B<u){const s=H(B/u);_(1-(1-t.scale)*s);requestAnimationFrame(g)}else if(B<u*2){const s=H((B-u)/u);_(t.scale+(f.scale-t.scale)*s);requestAnimationFrame(g)}else{_(1)}};requestAnimationFrame(g);setTimeout(()=>{i.onPress();U()},q.iconSelect.actionDelay)},[q.iconSelect,U]);const ge=ee(i=>{if(Y.current)return;const t=Math.max(0,Math.min(i,F-1));if(t!==C)Re(t)},[F,C]);const Z=a.buttonSize*e.centerButton.containerRatio;const he=a.buttonSize*e.centerButton.borderRatio;const Me=a.buttonSize*e.centerButton.containerRatio/2+6;const Ee=ke&&!ne;return k("div",{ref:ie,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[n("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:U,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:r.dialBackdrop,opacity:N}}),z?n("div",{role:"status","data-testid":"buoy-dial-empty-note",style:{position:"absolute",left:16,right:16,bottom:80+a.circleSize+16,color:r.iconLabel,fontSize:12,fontFamily:de,textAlign:"center",opacity:b>.01?1:0},children:z}):null,k("div",{style:{position:"absolute",left:"50%",marginLeft:-a.circleSize/2,bottom:80,width:a.circleSize,height:a.circleSize,borderRadius:"50%",backgroundColor:r.dialBackground,border:`${e.circle.borderWidth}px solid ${r.dialBorder}`,boxShadow:`0 0 ${e.circle.shadowRadius}px ${be(r.dialShadow,e.circle.shadowOpacity)}`,transform:`scale(${b}) rotate(${T}deg)`,opacity:b>.01?1:0,overflow:"hidden"},children:[n("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:r.dialGradient1,opacity:e.gradientLayers[0].opacity}}),n("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:r.dialGradient2,opacity:e.gradientLayers[1].opacity}}),n("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:r.dialGradient3,opacity:e.gradientLayers[2].opacity}}),Be.map(i=>n("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:e.grid.lineHeight,transform:`rotate(${i}deg)`,transformOrigin:"center"},children:["left","right"].map(t=>n("div",{style:{position:"absolute",top:0,[t]:0,width:`calc(50% - ${Me}px)`,height:e.grid.lineHeight,backgroundColor:r.dialGridLine}},t))},i)),n("div",{"data-testid":"dial-background","data-background":D,style:{position:"absolute",inset:0,pointerEvents:"none"},children:D==="hyperspace"?n(Ke,{size:a.circleSize}):n(qe,{focus:Xe})}),me.map((i,t)=>n(Ze,{icon:i,index:t,totalIcons:me.length,position:Ie[t],progress:$,onPress:()=>Ae(i)},t)),k("div",{style:{position:"absolute",left:"50%",top:"50%",width:Z,height:Z,marginLeft:-Z/2,marginTop:-Z/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:r.hubHalo,borderRadius:a.buttonSize,overflow:"hidden",transform:`scale(${P*te})`,opacity:P>.01?1:0},children:[n("div",{style:{position:"absolute",inset:0,backgroundColor:r.dialGradient1,opacity:.5,borderRadius:a.buttonSize}}),n("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:r.dialGradient2,opacity:.3,borderRadius:a.buttonSize}}),n("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:r.dialGradient3,opacity:.2,borderRadius:a.buttonSize}}),n("div",{style:{width:he,height:he,borderRadius:a.buttonSize*e.centerButton.borderRadiusRatio,backgroundColor:r.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:n("button",{ref:pe,type:"button","aria-label":c?"Close Settings":"Open Dev Tools Settings",disabled:!h,onClick:h,onPointerEnter:i=>i.pointerType==="mouse"&&X(true),onPointerLeave:()=>X(false),style:{border:0,padding:0,background:"transparent",width:a.buttonSize,height:a.buttonSize,borderRadius:a.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:h?"pointer":"default",transform:A?`scale(${q.centerHover.scale})`:"scale(1)",transition:`transform ${q.centerHover.duration}ms ease`,animation:Ee&&!A?Te.pulse:"none"},children:c?k("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:e.centerButton.text.fontSize-2,fontWeight:e.centerButton.text.fontWeight,fontFamily:e.centerButton.text.fontFamily,color:r.centerText,letterSpacing:e.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${r.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[n("span",{style:{marginBottom:-2},children:"CLOSE"}),n("span",{style:{marginTop:-2},children:"SETTINGS"})]}):n("span",{style:{fontSize:e.centerButton.text.fontSize,fontWeight:e.centerButton.text.fontWeight,fontFamily:e.centerButton.text.fontFamily,color:r.centerText,letterSpacing:e.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${r.centerTextGlow}`,textTransform:"uppercase"},children:I})})})]})]}),F>1&&k("div",{style:{position:"absolute",left:"50%",marginLeft:-a.circleSize/2,top:"calc(100% - 64px)",width:a.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,b),transform:`scale(${Math.min(1,b)})`},children:[n(ve,{side:"prev",disabled:C<=0,onClick:()=>ge(C-1)}),k("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:de,letterSpacing:2,color:r.centerText,textShadow:`0 0 6px ${r.centerTextGlow}`},children:[String(C+1).padStart(2,"0"),k("span",{style:{color:r.iconLabelMuted,textShadow:"none"},children:[" / ",String(F).padStart(2,"0")]})]}),n(ve,{side:"next",disabled:C>=F-1,onClick:()=>ge(C+1)})]}),ae&&!c&&n(Ne,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:se,showArrow:false})]})}
|
|
1
|
+
"use strict";import{useState as p,useEffect as E,useMemo as J,useRef as Q,useCallback as ee}from"react";import{dialAccessibilityLabel as $e}from"./dialA11y.js";import{getDialLayout as Le,getAllIconPositions as Fe,getGridLineRotations as We,getIconStaggerInputRange as Ge,MAX_DIAL_SLOTS as N,DIAL_ICON_SIZE as _e,dialAnimationConfig as ye,getDialCSSKeyframesString as He,getDialCSSAnimationStyles as Oe,dialColors as r,dialStyles as e,withAlpha as be,floatingToolsColors as je}from"@buoy-gg/floating-tools-react";import{persistentStorage as Se,monoFont as de,ToolBackground as qe,useToolBackground as Ue}from"@buoy-gg/shared-ui";import{DialHyperspace as Ke}from"./DialHyperspace.js";import{OnboardingTooltip as Ne}from"./OnboardingTooltip.web.js";import{BUOY_DIAL_BACK_PRIORITY as Ye,useCapacitorBackButton as Ve}from"../capacitorBackButton.js";import{jsx as n,Fragment as Xe,jsxs as k}from"react/jsx-runtime";const Ze={x:.5,y:.5};const xe="@react_buoy_settings_tooltip_shown";let we=false;function Je(){if(we||typeof document==="undefined")return;const o=document.createElement("style");o.textContent=He();document.head.appendChild(o);we=true}const H=o=>1-Math.pow(1-o,3);const ue=o=>o*o*o;function Qe({icon:o,index:m,totalIcons:P,position:g,progress:l,onPress:x}){const[z,R]=p(false);const[Y,w]=p(false);const b=!o.icon&&o.id.startsWith("empty-");const D=!b&&o.unavailable===true;const B=!b&&!D;const{icons:V}=ye;const T=Ge(m,P);let d=0;if(l<=T[1]){d=0}else if(l<=T[2]){d=(l-T[1])/(T[2]-T[1])}else{d=1}d=Math.max(0,Math.min(1,d));const $=_e;const L=V.pressIn.scale;const te=1.1;const O=d*(Y?L:z?te:1);let A=0;if(d<=0){A=0}else if(d<=.3){A=d}else{A=.3+(d-.3)*(.7/.7)}const X=g.x*(d-1);const ne=g.y*(d-1);return n("button",{role:"menuitem","aria-label":b?"Empty slot":$e(o.id,o.name),"data-testid":o.id?`buoy-dial-${o.id}`:void 0,"aria-disabled":!B,tabIndex:B?0:-1,onClick:B?x:void 0,onPointerEnter:oe=>B&&oe.pointerType==="mouse"&&R(true),onPointerLeave:()=>{R(false);w(false)},onPointerDown:()=>B&&w(true),onPointerUp:()=>w(false),onPointerCancel:()=>w(false),style:{position:"absolute",left:`calc(50% + ${g.x}px)`,top:`calc(50% + ${g.y}px)`,width:$,height:$,marginLeft:-$/2,marginTop:-$/2,cursor:B?"pointer":"default",background:"none",border:"none",padding:0},children:n("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${X}px, ${ne}px) scale(${O})`,opacity:A,transition:z||Y?"transform 100ms ease":"none"},children:b?n("div",{style:{width:e.emptySlot.dotSize,height:e.emptySlot.dotSize,borderRadius:e.emptySlot.dotSize/2,backgroundColor:r.emptyDotBackground,border:`${e.emptySlot.borderWidth}px solid ${r.emptyDotBorder}`}}):k(Xe,{children:[n("div",{style:{position:"absolute",width:`${e.icon.gradientBgSizePercent}%`,height:`${e.icon.gradientBgSizePercent}%`,borderRadius:e.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:e.icon.gradientBgOpacity}}),n("div",{style:{position:"absolute",width:`${e.icon.innerGlowSizePercent}%`,height:`${e.icon.innerGlowSizePercent}%`,borderRadius:e.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:e.icon.innerGlowOpacity}}),n("div",{style:{marginBottom:e.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:z?"brightness(1.2)":"none"},children:o.icon}),n("span",{style:{fontSize:o.name.length>8?Math.max(e.icon.label.fontSize*.7,e.icon.label.fontSize*8/o.name.length):e.icon.label.fontSize,fontWeight:e.icon.label.fontWeight,fontFamily:e.icon.label.fontFamily,color:r.iconLabel,letterSpacing:e.icon.label.letterSpacing,marginTop:e.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:o.name}),D&&n("span",{style:{fontSize:e.icon.label.fontSize-1,fontWeight:e.icon.label.fontWeight,fontFamily:e.icon.label.fontFamily,letterSpacing:e.icon.label.letterSpacing,color:je.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}function Ce({side:o,color:m}){const P=o==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]];return n("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:P.map(([g,l,x,z],R)=>n("line",{x1:g,y1:l,x2:x,y2:z,stroke:m,strokeWidth:2},R))})}function ve({side:o,disabled:m,onClick:P}){const[g,l]=p(false);const x=m?r.emptyDotBorder:r.accent;return k("button",{type:"button","aria-label":`${o==="prev"?"Previous":"Next"} dial page`,"data-testid":`buoy-dial-${o}`,disabled:m,onClick:P,onPointerDown:()=>!m&&l(true),onPointerUp:()=>l(false),onPointerLeave:()=>l(false),onPointerCancel:()=>l(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${r.dialBorder}`,backgroundColor:r.dialBackground,color:m?r.iconLabelMuted:r.centerText,fontSize:12,fontWeight:900,fontFamily:de,letterSpacing:1.5,textTransform:"uppercase",cursor:m?"default":"pointer",opacity:m?.4:1,boxShadow:m?"none":`0 0 8px ${be(r.dialShadow,.4)}`,transform:g?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[o==="prev"&&n(Ce,{side:"prev",color:x}),o==="prev"?"PREV":"NEXT",o==="next"&&n(Ce,{side:"next",color:x})]})}export function DialMenu({icons:o,onClose:m,centerLabel:P="MENU",onCenterPress:g,settingsOpen:l=false,hintsDisabled:x=false,emptyNote:z}){const{id:R}=Ue();const[Y,w]=p(0);const[b,D]=p(0);const[B,V]=p(0);const[T,d]=p(0);const[$,L]=p(0);const[te,O]=p(1);const[A,X]=p(false);const[ne,oe]=p(false);const[ke,ze]=p(false);const ie=Q(null);const pe=Q(null);const S=Q(null);const j=Q(false);const{entrance:q,exit:U,interaction:K}=ye;const Be=Oe();const[re,Te]=p(()=>({width:window.innerWidth,height:window.innerHeight}));E(()=>{const i=()=>Te({width:window.innerWidth,height:window.innerHeight});window.addEventListener("resize",i);return()=>window.removeEventListener("resize",i)},[]);const a=J(()=>Le({screenWidth:re.width,maxCircleSize:Math.max(120,Math.min(320,re.height-96))}),[re]);const Ie=J(()=>We(),[]);const Pe=J(()=>Fe(N,a.iconRadius),[a.iconRadius]);const[Re,De]=p(0);const F=Math.max(1,Math.ceil(o.length/N));const C=Math.min(Re,F-1);const me=J(()=>{const i=C*N;const t=[...o.slice(i,i+N)];while(t.length<N){t.push({id:`empty-${t.length}`,name:"",icon:null,onPress:()=>{}})}return t},[o,C]);E(()=>{Je()},[]);E(()=>{const i=q.backdrop.duration;const t=q.dial.rotation.duration;const f=q.centerButton.delay;const c=q.icons.delay;const u=q.icons.duration;const h=performance.now();const y=I=>{const s=I-h;w(Math.min(1,s/i));const v=Math.min(1,s/400);let G=H(v)*1.1;if(v>.7){G-=(v-.7)*.33}if(v>=1)G=1;D(Math.max(0,Math.min(1.05,G)));const M=Math.min(1,s/t);V(H(M)*360);if(s>=f){const _=Math.min(1,(s-f)/300);let ce=H(_)*1.15;if(_>.6){ce-=(_-.6)*.375}if(_>=1)ce=1;d(Math.max(0,Math.min(1.05,ce)))}if(s>=c){const _=Math.min(1,(s-c)/u);L(H(_))}const le=c+u;if(s<le){S.current=requestAnimationFrame(y)}else{w(1);D(1);V(360);d(1);L(1);ze(true)}};S.current=requestAnimationFrame(y);return()=>{if(S.current)cancelAnimationFrame(S.current)}},[]);const W=ee(()=>{if(j.current)return;j.current=true;oe(true);if(S.current){cancelAnimationFrame(S.current)}const i=performance.now();const t=U.icons.duration;const f=U.centerButton.duration;const c=U.dialScale.duration;const u=Math.max(f,c);const h=U.backdrop.duration;const y=I=>{const s=I-i;if(s<t){const M=ue(s/t);L(1-M);S.current=requestAnimationFrame(y);return}const v=t;if(s<v+u){L(0);const M=Math.min(1,(s-v)/f);const le=Math.min(1,(s-v)/c);d(1-ue(M));D(1-ue(le));S.current=requestAnimationFrame(y);return}const G=v+u;if(s<G+h){D(0);d(0);const M=(s-G)/h;w(1-M);S.current=requestAnimationFrame(y);return}w(0);m()};S.current=requestAnimationFrame(y)},[U,m]);Ve(true,()=>{if(j.current)return;if(l)g?.();else W()},Ye);E(()=>{const i=document.activeElement;const t=ie.current;return()=>{if(i?.isConnected&&(document.activeElement===document.body||t?.contains(document.activeElement))){i.focus()}}},[]);E(()=>{if(l)return;pe.current?.focus();const i=t=>{const f=ie.current;if(!f)return;if(t.key==="Escape"){t.preventDefault();W()}else if(t.key==="Tab"){const c=Array.from(f.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(y=>y.getClientRects().length>0);const u=c[0];const h=c[c.length-1];if(!f.contains(document.activeElement)||(t.shiftKey?document.activeElement===u:document.activeElement===h)){t.preventDefault();(t.shiftKey?h:u)?.focus()}}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(t.key)){const c=Array.from(f.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])'));const u=c.indexOf(document.activeElement);if(u<0||!c.length)return;t.preventDefault();const h=t.key==="Home"?0:t.key==="End"?c.length-1:(u+(t.key==="ArrowRight"||t.key==="ArrowDown"?1:-1)+c.length)%c.length;c[h].focus()}};document.addEventListener("keydown",i);return()=>document.removeEventListener("keydown",i)},[W,l]);const[ae,fe]=p(false);E(()=>{if(x)return;let i=false;const t=setTimeout(async()=>{const f=await Se.getItem(xe);if(!i&&!f)fe(true)},1200);return()=>{i=true;clearTimeout(t)}},[x]);const se=ee(()=>{fe(false);void Se.setItem(xe,"true")},[]);E(()=>{if(l&&ae){se()}},[l,ae,se]);const Ae=ee(i=>{if(i.id.startsWith("empty-")||j.current)return;const[t,f]=K.iconSelect.pulse;const c=performance.now();const u=150;const h=y=>{const I=y-c;if(I<u){const s=H(I/u);O(1-(1-t.scale)*s);requestAnimationFrame(h)}else if(I<u*2){const s=H((I-u)/u);O(t.scale+(f.scale-t.scale)*s);requestAnimationFrame(h)}else{O(1)}};requestAnimationFrame(h);setTimeout(()=>{i.onPress();W()},K.iconSelect.actionDelay)},[K.iconSelect,W]);const ge=ee(i=>{if(j.current)return;const t=Math.max(0,Math.min(i,F-1));if(t!==C)De(t)},[F,C]);const Z=a.buttonSize*e.centerButton.containerRatio;const he=a.buttonSize*e.centerButton.borderRatio;const Me=a.buttonSize*e.centerButton.containerRatio/2+6;const Ee=ke&&!ne;return k("div",{ref:ie,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[n("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:W,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:r.dialBackdrop,opacity:Y}}),z?n("div",{role:"status","data-testid":"buoy-dial-empty-note",style:{position:"absolute",left:16,right:16,bottom:80+a.circleSize+16,color:r.iconLabel,fontSize:12,fontFamily:de,textAlign:"center",opacity:b>.01?1:0},children:z}):null,k("div",{style:{position:"absolute",left:"50%",marginLeft:-a.circleSize/2,bottom:80,width:a.circleSize,height:a.circleSize,borderRadius:"50%",backgroundColor:r.dialBackground,border:`${e.circle.borderWidth}px solid ${r.dialBorder}`,boxShadow:`0 0 ${e.circle.shadowRadius}px ${be(r.dialShadow,e.circle.shadowOpacity)}`,transform:`scale(${b}) rotate(${B}deg)`,opacity:b>.01?1:0,overflow:"hidden"},children:[n("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:r.dialGradient1,opacity:e.gradientLayers[0].opacity}}),n("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:r.dialGradient2,opacity:e.gradientLayers[1].opacity}}),n("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:r.dialGradient3,opacity:e.gradientLayers[2].opacity}}),Ie.map(i=>n("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:e.grid.lineHeight,transform:`rotate(${i}deg)`,transformOrigin:"center"},children:["left","right"].map(t=>n("div",{style:{position:"absolute",top:0,[t]:0,width:`calc(50% - ${Me}px)`,height:e.grid.lineHeight,backgroundColor:r.dialGridLine}},t))},i)),n("div",{"data-testid":"dial-background","data-background":R,style:{position:"absolute",inset:0,pointerEvents:"none"},children:R==="hyperspace"?n(Ke,{size:a.circleSize}):n(qe,{focus:Ze})}),me.map((i,t)=>n(Qe,{icon:i,index:t,totalIcons:me.length,position:Pe[t],progress:$,onPress:()=>Ae(i)},t)),k("div",{style:{position:"absolute",left:"50%",top:"50%",width:Z,height:Z,marginLeft:-Z/2,marginTop:-Z/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:r.hubHalo,borderRadius:a.buttonSize,overflow:"hidden",transform:`scale(${T*te})`,opacity:T>.01?1:0},children:[n("div",{style:{position:"absolute",inset:0,backgroundColor:r.dialGradient1,opacity:.5,borderRadius:a.buttonSize}}),n("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:r.dialGradient2,opacity:.3,borderRadius:a.buttonSize}}),n("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:r.dialGradient3,opacity:.2,borderRadius:a.buttonSize}}),n("div",{style:{width:he,height:he,borderRadius:a.buttonSize*e.centerButton.borderRadiusRatio,backgroundColor:r.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:n("button",{ref:pe,type:"button","aria-label":l?"Close Settings":"Open Dev Tools Settings",disabled:!g,onClick:g,onPointerEnter:i=>i.pointerType==="mouse"&&X(true),onPointerLeave:()=>X(false),style:{border:0,padding:0,background:"transparent",width:a.buttonSize,height:a.buttonSize,borderRadius:a.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:g?"pointer":"default",transform:A?`scale(${K.centerHover.scale})`:"scale(1)",transition:`transform ${K.centerHover.duration}ms ease`,animation:Ee&&!A?Be.pulse:"none"},children:l?k("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:e.centerButton.text.fontSize-2,fontWeight:e.centerButton.text.fontWeight,fontFamily:e.centerButton.text.fontFamily,color:r.centerText,letterSpacing:e.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${r.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[n("span",{style:{marginBottom:-2},children:"CLOSE"}),n("span",{style:{marginTop:-2},children:"SETTINGS"})]}):n("span",{style:{fontSize:e.centerButton.text.fontSize,fontWeight:e.centerButton.text.fontWeight,fontFamily:e.centerButton.text.fontFamily,color:r.centerText,letterSpacing:e.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${r.centerTextGlow}`,textTransform:"uppercase"},children:P})})})]})]}),F>1&&k("div",{style:{position:"absolute",left:"50%",marginLeft:-a.circleSize/2,top:"calc(100% - 64px)",width:a.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,b),transform:`scale(${Math.min(1,b)})`},children:[n(ve,{side:"prev",disabled:C<=0,onClick:()=>ge(C-1)}),k("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:de,letterSpacing:2,color:r.centerText,textShadow:`0 0 6px ${r.centerTextGlow}`},children:[String(C+1).padStart(2,"0"),k("span",{style:{color:r.iconLabelMuted,textShadow:"none"},children:[" / ",String(F).padStart(2,"0")]})]}),n(ve,{side:"next",disabled:C>=F-1,onClick:()=>ge(C+1)})]}),ae&&!l&&n(Ne,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:se,showArrow:false})]})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export function externalSyncOptions(e){return typeof e==="object"&&e!==null?e:void 0}export function shouldMountExternalSync({isDevelopment:e,isLicensed:o,externalSync:
|
|
1
|
+
"use strict";export function externalSyncOptions(e){return typeof e==="object"&&e!==null?e:void 0}export function shouldMountExternalSync({isDevelopment:e,isLicensed:o,externalSync:n,isAvailable:t}){if(n===false)return false;if(!t)return false;if(e)return true;const r=externalSyncOptions(n);return o&&r?.enableInRelease===true&&releaseTransportProblem(r.socketURL,r)===null}export const RELEASE_DEFAULT_SOCKET_URL="http://localhost:42831";function i(e){return e==="localhost"||e.endsWith(".localhost")||/^127\.\d+\.\d+\.\d+$/.test(e)||e==="[::1]"||e==="::1"||e==="10.0.2.2"}export function releaseTransportProblem(e,o){const n=e??RELEASE_DEFAULT_SOCKET_URL;if(o?.allowInsecureNetwork===true)return null;let t;try{t=new URL(n)}catch{return`[Buoy] externalSync.socketURL "${n}" isn't a valid URL, so this release build won't connect to Buoy Desktop.`}if(t.protocol==="https:"||t.protocol==="wss:")return null;if(i(t.hostname))return null;return`[Buoy] This release build won't connect to ${n}: 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.`}export const RELEASE_GATED_ACTIONS={"ota-update-inspector":["check","fetch","reload","setHeaders","setURL"],impersonate:["searchUsers","startImpersonation","resumeImpersonation","updateSettings","removeFromHistory","clearHistory"]};export function applyReleaseActionPolicy(e,o,n){if(o)return e;let t=null;for(const[r,u]of Object.entries(RELEASE_GATED_ACTIONS)){if(n?.includes(r))continue;const s=e[r];if(!s?.actions)continue;const a={...s.actions};for(const l of u){if(!(l in a))continue;a[l]=()=>{throw new Error(`${r}.${l} is off in release builds. To allow it from Buoy Desktop and the MCP, pass externalSync={{ enableInRelease: true, releaseActions: ["${r}"] }}.`)}}t??={...e};t[r]={...s,actions:a}}return t??e}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";import{useEffect as a,useRef as n}from"react";import{BackHandler as s,Platform as c}from"react-native";export{resolveBackTarget}from"./backTarget.js";export function useHardwareBack(r,e){const t=n(e);t.current=e;a(()=>{if(!r||c.OS!=="android")return;const o=s.addEventListener("hardwareBackPress",()=>t.current());return()=>o.remove()},[r])}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export const SDK_VERSION="7.0.
|
|
1
|
+
"use strict";export const SDK_VERSION="7.0.79";
|
|
@@ -9,9 +9,19 @@
|
|
|
9
9
|
* `adopt` and turns each record into a normal request row, including requests
|
|
10
10
|
* that are still in flight. After that the recorder only passes calls through.
|
|
11
11
|
*
|
|
12
|
-
* It has no dependencies because it loads before everything else. The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* It has no dependencies because it loads before everything else. The handle
|
|
13
|
+
* lives on `window[Symbol.for('buoy.earlyNetwork')]` (EARLY_NETWORK_KEY), a
|
|
14
|
+
* non-enumerable, read-only property. Its shape is shared with
|
|
15
|
+
* @buoy-gg/network (network/utils/networkListener.ts, adoptEarlyRequests);
|
|
16
|
+
* change both together. The records array itself is never exposed: page
|
|
17
|
+
* scripts can't read or rewrite it in place, and `adopt` hands each record
|
|
18
|
+
* out once.
|
|
19
|
+
*
|
|
20
|
+
* Legacy: `window.__BUOY_EARLY_NETWORK__` stays for one more version, so an
|
|
21
|
+
* older @buoy-gg/network (which reads only that name) still adopts. It is
|
|
22
|
+
* also non-enumerable and read-only, shares the same `adopt`, and has no
|
|
23
|
+
* `records` field. Remove it in the release after the one that added the
|
|
24
|
+
* symbol.
|
|
15
25
|
*/
|
|
16
26
|
export interface EarlyFetchRecord {
|
|
17
27
|
kind: 'fetch';
|
|
@@ -44,9 +54,14 @@ export interface EarlyXhrRecord {
|
|
|
44
54
|
export type EarlyNetworkRecord = EarlyFetchRecord | EarlyXhrRecord;
|
|
45
55
|
export interface EarlyNetworkRecorder {
|
|
46
56
|
version: 1;
|
|
47
|
-
records
|
|
57
|
+
/** How many records are waiting to be adopted. */
|
|
58
|
+
readonly pending: number;
|
|
48
59
|
/** Hand every record to the Network tool and stop recording. Returns them once. */
|
|
49
60
|
adopt(): EarlyNetworkRecord[];
|
|
50
61
|
}
|
|
62
|
+
/** The window key @buoy-gg/network reads. A registry symbol, so separate bundles agree on it. */
|
|
63
|
+
export declare const EARLY_NETWORK_KEY: unique symbol;
|
|
64
|
+
/** The old window key. Read-only fallback for older @buoy-gg/network; remove next version. */
|
|
65
|
+
export declare const LEGACY_EARLY_NETWORK_KEY = "__BUOY_EARLY_NETWORK__";
|
|
51
66
|
export declare function installEarlyNetworkRecorder(): void;
|
|
52
67
|
//# sourceMappingURL=earlyNetwork.d.ts.map
|
|
@@ -57,4 +57,10 @@ export declare const resolveOpenAppsState: (current: AppInstance[], def: OpenDef
|
|
|
57
57
|
instanceId: string;
|
|
58
58
|
wasMinimized: boolean;
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Un-minimizes a tool and moves it to the end of the stack. Tools are drawn in
|
|
62
|
+
* this order (z-index = base + index), so it comes back on top of tools opened
|
|
63
|
+
* after it, the same as re-opening it from the dial.
|
|
64
|
+
*/
|
|
65
|
+
export declare const restoreOpenApp: (current: AppInstance[], instanceId: string, restoreState?: ModalRestoreState) => AppInstance[];
|
|
60
66
|
//# sourceMappingURL=AppHostLogic.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Buoy layer Android back closes, top first. Shared by the native
|
|
3
|
+
* BackHandler (hardwareBack.ts) and the Capacitor back button
|
|
4
|
+
* (capacitorBackButton.ts). No platform imports, so the web build can use it.
|
|
5
|
+
*/
|
|
6
|
+
import type { AppInstance } from "./AppHostLogic";
|
|
7
|
+
export type BackTarget = {
|
|
8
|
+
kind: "tool";
|
|
9
|
+
instanceId: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "dial";
|
|
12
|
+
} | null;
|
|
13
|
+
type BackApp = Pick<AppInstance, "instanceId" | "launchMode" | "minimized">;
|
|
14
|
+
/** Which Buoy layer Android back should close, or null to let the app have it. */
|
|
15
|
+
export declare function resolveBackTarget(openApps: readonly BackApp[], dialOpen: boolean): BackTarget;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=backTarget.d.ts.map
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
export declare function isBuoyHoldingBackButton(): boolean;
|
|
8
8
|
/** Between Ionic's menu (99) and overlays (100). Ionic compares with >=, so fractions work. */
|
|
9
9
|
export declare const BUOY_BACK_PRIORITY = 99.5;
|
|
10
|
+
/** The dial draws over every tool, so it wins over them, still under Ionic's overlays. */
|
|
11
|
+
export declare const BUOY_DIAL_BACK_PRIORITY = 99.6;
|
|
10
12
|
/** Ionic is mounted and handling hardware back (its config can turn that off). */
|
|
11
13
|
export declare function ionicHandlesBack(): boolean;
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* Run `onBack` on Android back while `active`. `onBack` is read through a
|
|
16
|
+
* ref, so a new callback never re-registers. `priority` is the Ionic one.
|
|
15
17
|
*/
|
|
16
|
-
export declare function useCapacitorBackButton(active: boolean, onBack: () => void): void;
|
|
18
|
+
export declare function useCapacitorBackButton(active: boolean, onBack: () => void, priority?: number): void;
|
|
17
19
|
//# sourceMappingURL=capacitorBackButton.d.ts.map
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* All known tool IDs that can appear in the floating menu or dial menu.
|
|
20
20
|
* This is a union type of all auto-discovered tool IDs.
|
|
21
21
|
*/
|
|
22
|
-
export type BuiltInToolId = 'env' | 'network' | 'push-notifications' | 'storage' | 'query' | 'query-wifi-toggle' | 'route-events' | 'debug-borders' | 'highlight-updates' | 'highlight-updates-modal' | 'redux' | 'zustand' | 'jotai' | 'events' | 'time-machine' | 'clock' | 'permissions' | 'lifecycle' | 'location' | 'scenarios' | 'ask-buoy' | 'image-overlay' | 'perf-monitor' | 'perf-monitor-modal';
|
|
22
|
+
export type BuiltInToolId = 'env' | 'network' | 'push-notifications' | 'storage' | 'query' | 'query-wifi-toggle' | 'route-events' | 'debug-borders' | 'highlight-updates' | 'highlight-updates-modal' | 'redux' | 'zustand' | 'jotai' | 'events' | 'time-machine' | 'clock' | 'report-bug' | 'bug-links' | 'permissions' | 'lifecycle' | 'location' | 'scenarios' | 'ask-buoy' | 'image-overlay' | 'perf-monitor' | 'perf-monitor-modal';
|
|
23
23
|
/**
|
|
24
24
|
* Special floating-only tool IDs that only appear in the floating bubble row.
|
|
25
25
|
*/
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { resolveBackTarget, type BackTarget } from "./backTarget";
|
|
2
|
+
/**
|
|
3
|
+
* Listen for Android hardware back while `active`. `onBack` returns true when
|
|
4
|
+
* it handled the press. It is read through a ref, so a new callback never
|
|
5
|
+
* re-registers. No-op on other platforms.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useHardwareBack(active: boolean, onBack: () => boolean): void;
|
|
8
|
+
//# sourceMappingURL=hardwareBack.d.ts.map
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* Drift is prevented by a test that fails when this disagrees with
|
|
10
10
|
* package.json, so a version bump that forgets this file cannot ship.
|
|
11
11
|
*/
|
|
12
|
-
export declare const SDK_VERSION = "7.0.
|
|
12
|
+
export declare const SDK_VERSION = "7.0.79";
|
|
13
13
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -9,9 +9,19 @@
|
|
|
9
9
|
* `adopt` and turns each record into a normal request row, including requests
|
|
10
10
|
* that are still in flight. After that the recorder only passes calls through.
|
|
11
11
|
*
|
|
12
|
-
* It has no dependencies because it loads before everything else. The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* It has no dependencies because it loads before everything else. The handle
|
|
13
|
+
* lives on `window[Symbol.for('buoy.earlyNetwork')]` (EARLY_NETWORK_KEY), a
|
|
14
|
+
* non-enumerable, read-only property. Its shape is shared with
|
|
15
|
+
* @buoy-gg/network (network/utils/networkListener.ts, adoptEarlyRequests);
|
|
16
|
+
* change both together. The records array itself is never exposed: page
|
|
17
|
+
* scripts can't read or rewrite it in place, and `adopt` hands each record
|
|
18
|
+
* out once.
|
|
19
|
+
*
|
|
20
|
+
* Legacy: `window.__BUOY_EARLY_NETWORK__` stays for one more version, so an
|
|
21
|
+
* older @buoy-gg/network (which reads only that name) still adopts. It is
|
|
22
|
+
* also non-enumerable and read-only, shares the same `adopt`, and has no
|
|
23
|
+
* `records` field. Remove it in the release after the one that added the
|
|
24
|
+
* symbol.
|
|
15
25
|
*/
|
|
16
26
|
export interface EarlyFetchRecord {
|
|
17
27
|
kind: 'fetch';
|
|
@@ -44,9 +54,14 @@ export interface EarlyXhrRecord {
|
|
|
44
54
|
export type EarlyNetworkRecord = EarlyFetchRecord | EarlyXhrRecord;
|
|
45
55
|
export interface EarlyNetworkRecorder {
|
|
46
56
|
version: 1;
|
|
47
|
-
records
|
|
57
|
+
/** How many records are waiting to be adopted. */
|
|
58
|
+
readonly pending: number;
|
|
48
59
|
/** Hand every record to the Network tool and stop recording. Returns them once. */
|
|
49
60
|
adopt(): EarlyNetworkRecord[];
|
|
50
61
|
}
|
|
62
|
+
/** The window key @buoy-gg/network reads. A registry symbol, so separate bundles agree on it. */
|
|
63
|
+
export declare const EARLY_NETWORK_KEY: unique symbol;
|
|
64
|
+
/** The old window key. Read-only fallback for older @buoy-gg/network; remove next version. */
|
|
65
|
+
export declare const LEGACY_EARLY_NETWORK_KEY = "__BUOY_EARLY_NETWORK__";
|
|
51
66
|
export declare function installEarlyNetworkRecorder(): void;
|
|
52
67
|
//# sourceMappingURL=earlyNetwork.d.ts.map
|
|
@@ -57,4 +57,10 @@ export declare const resolveOpenAppsState: (current: AppInstance[], def: OpenDef
|
|
|
57
57
|
instanceId: string;
|
|
58
58
|
wasMinimized: boolean;
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Un-minimizes a tool and moves it to the end of the stack. Tools are drawn in
|
|
62
|
+
* this order (z-index = base + index), so it comes back on top of tools opened
|
|
63
|
+
* after it, the same as re-opening it from the dial.
|
|
64
|
+
*/
|
|
65
|
+
export declare const restoreOpenApp: (current: AppInstance[], instanceId: string, restoreState?: ModalRestoreState) => AppInstance[];
|
|
60
66
|
//# sourceMappingURL=AppHostLogic.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Buoy layer Android back closes, top first. Shared by the native
|
|
3
|
+
* BackHandler (hardwareBack.ts) and the Capacitor back button
|
|
4
|
+
* (capacitorBackButton.ts). No platform imports, so the web build can use it.
|
|
5
|
+
*/
|
|
6
|
+
import type { AppInstance } from "./AppHostLogic";
|
|
7
|
+
export type BackTarget = {
|
|
8
|
+
kind: "tool";
|
|
9
|
+
instanceId: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "dial";
|
|
12
|
+
} | null;
|
|
13
|
+
type BackApp = Pick<AppInstance, "instanceId" | "launchMode" | "minimized">;
|
|
14
|
+
/** Which Buoy layer Android back should close, or null to let the app have it. */
|
|
15
|
+
export declare function resolveBackTarget(openApps: readonly BackApp[], dialOpen: boolean): BackTarget;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=backTarget.d.ts.map
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
export declare function isBuoyHoldingBackButton(): boolean;
|
|
8
8
|
/** Between Ionic's menu (99) and overlays (100). Ionic compares with >=, so fractions work. */
|
|
9
9
|
export declare const BUOY_BACK_PRIORITY = 99.5;
|
|
10
|
+
/** The dial draws over every tool, so it wins over them, still under Ionic's overlays. */
|
|
11
|
+
export declare const BUOY_DIAL_BACK_PRIORITY = 99.6;
|
|
10
12
|
/** Ionic is mounted and handling hardware back (its config can turn that off). */
|
|
11
13
|
export declare function ionicHandlesBack(): boolean;
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* Run `onBack` on Android back while `active`. `onBack` is read through a
|
|
16
|
+
* ref, so a new callback never re-registers. `priority` is the Ionic one.
|
|
15
17
|
*/
|
|
16
|
-
export declare function useCapacitorBackButton(active: boolean, onBack: () => void): void;
|
|
18
|
+
export declare function useCapacitorBackButton(active: boolean, onBack: () => void, priority?: number): void;
|
|
17
19
|
//# sourceMappingURL=capacitorBackButton.d.ts.map
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* All known tool IDs that can appear in the floating menu or dial menu.
|
|
20
20
|
* This is a union type of all auto-discovered tool IDs.
|
|
21
21
|
*/
|
|
22
|
-
export type BuiltInToolId = 'env' | 'network' | 'push-notifications' | 'storage' | 'query' | 'query-wifi-toggle' | 'route-events' | 'debug-borders' | 'highlight-updates' | 'highlight-updates-modal' | 'redux' | 'zustand' | 'jotai' | 'events' | 'time-machine' | 'clock' | 'permissions' | 'lifecycle' | 'location' | 'scenarios' | 'ask-buoy' | 'image-overlay' | 'perf-monitor' | 'perf-monitor-modal';
|
|
22
|
+
export type BuiltInToolId = 'env' | 'network' | 'push-notifications' | 'storage' | 'query' | 'query-wifi-toggle' | 'route-events' | 'debug-borders' | 'highlight-updates' | 'highlight-updates-modal' | 'redux' | 'zustand' | 'jotai' | 'events' | 'time-machine' | 'clock' | 'report-bug' | 'bug-links' | 'permissions' | 'lifecycle' | 'location' | 'scenarios' | 'ask-buoy' | 'image-overlay' | 'perf-monitor' | 'perf-monitor-modal';
|
|
23
23
|
/**
|
|
24
24
|
* Special floating-only tool IDs that only appear in the floating bubble row.
|
|
25
25
|
*/
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { resolveBackTarget, type BackTarget } from "./backTarget";
|
|
2
|
+
/**
|
|
3
|
+
* Listen for Android hardware back while `active`. `onBack` returns true when
|
|
4
|
+
* it handled the press. It is read through a ref, so a new callback never
|
|
5
|
+
* re-registers. No-op on other platforms.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useHardwareBack(active: boolean, onBack: () => boolean): void;
|
|
8
|
+
//# sourceMappingURL=hardwareBack.d.ts.map
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* Drift is prevented by a test that fails when this disagrees with
|
|
10
10
|
* package.json, so a version bump that forgets this file cannot ship.
|
|
11
11
|
*/
|
|
12
|
-
export declare const SDK_VERSION = "7.0.
|
|
12
|
+
export declare const SDK_VERSION = "7.0.79";
|
|
13
13
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/web/auto.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{a as o,e as u}from"./chunks/chunk-LOPXJLVB.mjs";import{createElement as l,lazy as p,Suspense as d,useEffect as m,useState as v}from"react";function n(){if(typeof window>"u")return false;let e=window.Capacitor,t=false;try{t=e?.isNativePlatform?.()===true}catch{t=false}return t?e?.DEBUG===true:typeof u<"u"?!!u:process.env.NODE_ENV!=="production"}o(n,"shouldShowBuoy");function r(){try{let e=import.meta.env.VITE_BUOY_KEY;if(e)return e}catch{}try{let e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}}o(r,"bundlerKey");var a;function s(){return a??(a=p(()=>import("./chunks/FloatingDevTools.web-
|
|
1
|
+
"use client";import{a as o,e as u}from"./chunks/chunk-LOPXJLVB.mjs";import{createElement as l,lazy as p,Suspense as d,useEffect as m,useState as v}from"react";function n(){if(typeof window>"u")return false;let e=window.Capacitor,t=false;try{t=e?.isNativePlatform?.()===true}catch{t=false}return t?e?.DEBUG===true:typeof u<"u"?!!u:process.env.NODE_ENV!=="production"}o(n,"shouldShowBuoy");function r(){try{let e=import.meta.env.VITE_BUOY_KEY;if(e)return e}catch{}try{let e=process.env.NEXT_PUBLIC_BUOY_KEY;if(e)return e}catch{}}o(r,"bundlerKey");var a;function s(){return a??(a=p(()=>import("./chunks/FloatingDevTools.web-QLTO5FXP.mjs").then(e=>({default:e.FloatingDevTools})))),a}o(s,"loadHost");function i({enabled:e,...t}){let[c,f]=v(false);if(m(()=>{f(e??n())},[e]),!c)return null;let y=t.licenseKey??r();return l(d,{fallback:null},l(s(),{...t,licenseKey:y}))}o(i,"BuoyDevTools");export{i as BuoyDevTools,r as bundlerKey,n as shouldShowBuoy};
|
package/lib/web/chunks/{FloatingDevTools.web-FB3F35HU.mjs → FloatingDevTools.web-5EMC7ZIE.mjs}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{v as o}from"./chunk-
|
|
1
|
+
"use client";import{v as o}from"./chunk-EFTCKGMC.mjs";import"./chunk-C6HZO5XT.mjs";import"./chunk-D2FYORGY.mjs";import"./chunk-LOPXJLVB.mjs";export{o as FloatingDevTools};
|
package/lib/web/chunks/{FloatingDevTools.web-IIOOVSUC.mjs → FloatingDevTools.web-QLTO5FXP.mjs}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{v as o}from"./chunk-
|
|
1
|
+
"use client";import{v as o}from"./chunk-JXTHZBMM.mjs";import"./chunk-C6HZO5XT.mjs";import"./chunk-D2FYORGY.mjs";import"./chunk-LOPXJLVB.mjs";export{o as FloatingDevTools};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";import{a as dt,b as H,c as K,d as De,e as ut,f as pi,g as Co,h as mi,i as Ll,j as ko,k as Ne}from"./chunk-C6HZO5XT.mjs";import{b as fi,c as gi}from"./chunk-D2FYORGY.mjs";import{a as i,b as zo,e as He}from"./chunk-LOPXJLVB.mjs";import{BuoyPortal as hi,FloatingToolHost as yi}from"@buoy-gg/shared-ui/web/floating";import*as bi from"@buoy-gg/license/web";import{LicenseManager as vi,useLicense as Ao,sameLicenseKey as Si,resolveDevBuild as wi,capacitorDebug as xi,isCapacitorNative as Ti,loadCapacitorAppHost as Ii}from"@buoy-gg/license/web";import{AccountSetup as Ci,HintsProvider as ki,normalizeEnvironment as zi,registerToolOpener as Bo,startSettingsSync as Ai}from"@buoy-gg/shared-ui/web";import{useState as pt,useMemo as ge,useCallback as We,useEffect as X,useRef as Ro}from"react";import{useSettings as Bi,getToolLabel as mt,getToolDescription as Ri,getToolColor as Mo}from"@buoy-gg/floating-tools-react/web";import{persistentStorage as Oe,devToolsStorageKeys as ft,EnvironmentIndicator as Mi,EnvironmentSelectorInline as Di}from"@buoy-gg/shared-ui/web";var Oi=[];function Do(){return[]}i(Do,"autoDiscoverWebPresets");function Lt(e=[]){return[...new Map(e.map(t=>[t.id,t])).values()]}i(Lt,"autoDiscoverWithCustom");function gt(e,t){return e.filter(o=>{let r=o.slot||"both";return r==="both"||r===t})}i(gt,"getToolsBySlot");function Oo(e,t){let o=t instanceof Set?t:new Set(t);return e.filter(r=>o.has(r.id))}i(Oo,"getEnabledTools");import{filterTeamTools as Ei,isTeamToolAllowed as Pi}from"@buoy-gg/floating-tools-core/web";var Li="No tools are on for your role. Ask your team admin.";import{FloatingTool as Eo,FloatingToolDivider as Fi,FloatingToolUserStatus as Po,getBubbleAnchorPosition as $i}from"@buoy-gg/shared-ui/web/floating";import{useState as te,useEffect as Ee,useMemo as ht,useRef as yt,useCallback as bt}from"react";var Lo={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 Fo(e,t){return e&&Lo[e]?Lo[e]:t}i(Fo,"dialAccessibilityLabel");import{getDialLayout as ji,getAllIconPositions as Ni,getGridLineRotations as Hi,getIconStaggerInputRange as Wi,MAX_DIAL_SLOTS as Qe,DIAL_ICON_SIZE as _i,dialAnimationConfig as $o,getDialCSSKeyframesString as Ui,getDialCSSAnimationStyles as Ki,dialColors as j,dialStyles as I,withAlpha as jo,floatingToolsColors as Vi}from"@buoy-gg/floating-tools-react/web";import{persistentStorage as No,monoFont as Ft,ToolBackground as qi,useToolBackground as Gi}from"@buoy-gg/shared-ui/web";import{memo as Ji}from"react";import{RasterLayer as Yi,scatter as Xi,useLoop as Qi,withBgAlpha as Zi}from"@buoy-gg/shared-ui/web";import{Fragment as ea,jsx as Ze}from"react/jsx-runtime";var ta=.94,oa=6,na=2400,vt=3,Ho=16,ra=Array.from({length:vt},(e,t)=>Xi(22343^t*40503,Ho*4)),Wo=["#FFFFFF","#B3D9FF","#8CB3FF"],_o=Math.PI/3,Uo=14*Math.PI/180;function Ko(e){let t=Math.min(5,Math.floor(e*6)),o=e*6-t;return t*_o+Uo/2+o*(_o-Uo)}i(Ko,"spokeClearAngle");function Vo(e){return Math.min(oa,1/(1-e*ta))}i(Vo,"scaleAt");function qo(e){let t=.15+.85*e*e;return e<.06?t*=e/.06:e>.94&&(t*=(1-e)/.06),Math.min(.7,t)}i(qo,"opacityAt");function Go(e){let t=e/vt,o=[],r=12;for(let u=0;u<=r;u++)o.push(u/r);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(Vo(d)),c.push(qo(d))}return{input:a,scale:s,opacity:c}}i(Go,"shellStops");var ia=Array.from({length:vt},(e,t)=>Go(t)),aa=Ji(i(function({size:e}){let t=Qi(na),o=e/2,r=[];for(let n=0;n<vt;n++){let a=ra[n],s=ia[n],c=[];for(let u=0;u<Ho;u++){let d=Ko(a[u*4]),f=(.15+.85*Math.sqrt(a[u*4+1]))*.5*o,x=Wo[Math.floor(a[u*4+3]*Wo.length)%3],h=o+Math.cos(d)*f,B=o+Math.sin(d)*f,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:Zi(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))}r.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(Yi,{style:{width:e,height:e},raster:false,children:c})},n))}return Ze(ea,{children:r})},"DialHyperspace"));import{useEffect as sa,useState as Jo}from"react";import{dialColors as _e,withAlpha as Yo}from"@buoy-gg/floating-tools-react/web";import{ARROW_BOTTOM_OFFSET as la,ARROW_HEIGHT as ca,SPACING_GAP as oc,getScreenCenterY as nc,calculateTooltipPosition as da,calculateTargetPosition as rc}from"@buoy-gg/shared-ui/web/floating";import{monoFont as Xo}from"@buoy-gg/shared-ui/web";import{jsx as Ue,jsxs as Qo}from"react/jsx-runtime";var Zo=false;function en(){if(Zo||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),Zo=true}i(en,"injectOnboardingKeyframes");var $t=_e.accent;function jt({title:e,message:t,onDismiss:o,showArrow:r=true}){let[n,a]=Jo(false),[s,c]=Jo(false);sa(()=>{en();let d=requestAnimationFrame(()=>a(true));return()=>cancelAnimationFrame(d)},[]);let u={fontFamily:Xo,textTransform:"uppercase"};return Ue("div",{style:{position:"fixed",left:"50%",bottom:da(),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:Qo("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}}),Qo("div",{style:{position:"relative",maxWidth:280,backgroundColor:_e.dialBackground,borderRadius:16,border:`1px solid ${_e.dialBorder}`,padding:20,boxShadow:`0 0 20px ${Yo(_e.dialShadow,.6)}`,display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[Ue("span",{style:{...u,fontSize:16,fontWeight:900,letterSpacing:1,color:$t,textAlign:"center"},children:e}),Ue("span",{style:{fontFamily:Xo,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:$t,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!"})]}),r&&Ue("div",{style:{position:"absolute",left:"50%",bottom:la,marginLeft:-12,width:0,height:0,borderLeft:"12px solid transparent",borderRight:"12px solid transparent",borderTop:`${ca}px solid ${$t}`,filter:`drop-shadow(0 0 10px ${Yo(_e.dialShadow,.5)})`,animation:n?"buoyOnboardArrowBounce 1.6s ease-in-out infinite":"none"}})]})})}i(jt,"OnboardingTooltip");import{useEffect as ua,useRef as pa}from"react";import{capacitorPlatform as ma,capacitorPlugin as fa}from"@buoy-gg/license/web";function tn(){return globalThis.__BUOY_HOLDS_BACK__===true}i(tn,"isBuoyHoldingBackButton");var ga=99.5,ha=99.6,St=0;function on(){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}}i(on,"ionicHandlesBack");function Nt(e,t,o=ga){let r=pa(t);r.current=t,ua(()=>{if(!e||ma()!=="android")return;let n=globalThis;St+=1,n.__BUOY_HOLDS_BACK__=true;let a=i(()=>{St=Math.max(0,St-1),n.__BUOY_HOLDS_BACK__=St>0},"release"),s;if(on()){let c=i(u=>{u.detail?.register?.(o,()=>{r.current()})},"listener");document.addEventListener("ionBackButton",c),s=i(()=>document.removeEventListener("ionBackButton",c),"cleanup")}else{let c=fa("App");if(!c?.addListener){a();return}let u=false,d=null;Promise.resolve(c.addListener("backButton",()=>r.current())).then(f=>{u?f.remove():d=f}).catch(()=>{}),s=i(()=>{u=true,d&&d.remove()},"cleanup")}return()=>{s(),a()}},[e,o])}i(Nt,"useCapacitorBackButton");import{Fragment as ya,jsx as L,jsxs as we}from"react/jsx-runtime";var ba={x:.5,y:.5},nn="@react_buoy_settings_tooltip_shown",rn=false;function an(){if(rn||typeof document>"u")return;let e=document.createElement("style");e.textContent=Ui(),document.head.appendChild(e),rn=true}i(an,"injectKeyframes");var Ke=i(e=>1-Math.pow(1-e,3),"easeOutCubic"),Ht=i(e=>e*e*e,"easeInCubic");function sn({icon:e,index:t,totalIcons:o,position:r,progress:n,onPress:a}){let[s,c]=te(false),[u,d]=te(false),f=!e.icon&&e.id.startsWith("empty-"),x=!f&&e.unavailable===true,h=!f&&!x,{icons:B}=$o,k=Wi(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=_i,D=B.pressIn.scale,E=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=r.x*(R-1),S=r.y*(R-1);return L("button",{role:"menuitem","aria-label":f?"Empty slot":Fo(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% + ${r.x}px)`,top:`calc(50% + ${r.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(${E})`,opacity:A,transition:s||u?"transform 100ms ease":"none"},children:f?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(ya,{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:Vi.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}i(sn,"DialIconItem");function Wt({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,r,n,a],s)=>L("line",{x1:o,y1:r,x2:n,y2:a,stroke:t,strokeWidth:2},s))})}i(Wt,"PagerChevron");function _t({side:e,disabled:t,onClick:o}){let[r,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:Ft,letterSpacing:1.5,textTransform:"uppercase",cursor:t?"default":"pointer",opacity:t?.4:1,boxShadow:t?"none":`0 0 8px ${jo(j.dialShadow,.4)}`,transform:r?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[e==="prev"&&L(Wt,{side:"prev",color:a}),e==="prev"?"PREV":"NEXT",e==="next"&&L(Wt,{side:"next",color:a})]})}i(_t,"PagerButton");function Ut({icons:e,onClose:t,centerLabel:o="MENU",onCenterPress:r,settingsOpen:n=false,hintsDisabled:a=false,emptyNote:s}){let{id:c}=Gi(),[u,d]=te(0),[f,x]=te(0),[h,B]=te(0),[k,R]=te(0),[F,D]=te(0),[E,A]=te(1),[V,S]=te(false),[M,_]=te(false),[T,P]=te(false),Q=yt(null),Z=yt(null),U=yt(null),q=yt(false),{entrance:ie,exit:ee,interaction:ne}=$o,xe=Ki(),[fe,ye]=te(()=>({width:window.innerWidth,height:window.innerHeight}));Ee(()=>{let O=i(()=>ye({width:window.innerWidth,height:window.innerHeight}),"resize");return window.addEventListener("resize",O),()=>window.removeEventListener("resize",O)},[]);let W=ht(()=>ji({screenWidth:fe.width,maxCircleSize:Math.max(120,Math.min(320,fe.height-96))}),[fe]),Te=ht(()=>Hi(),[]),be=ht(()=>Ni(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:i(()=>{},"onPress")});return w},[e,oe]);Ee(()=>{an()},[]),Ee(()=>{let O=ie.backdrop.duration,w=ie.dial.rotation.duration,l=ie.centerButton.delay,v=ie.icons.delay,C=ie.icons.duration,G=performance.now(),J=i(m=>{let g=m-G;d(Math.min(1,g/O));let z=Math.min(1,g/400),Y=Ke(z)*1.1;z>.7&&(Y-=(z-.7)*.33),z>=1&&(Y=1),x(Math.max(0,Math.min(1.05,Y)));let le=Math.min(1,g/w);if(B(Ke(le)*360),g>=l){let Se=Math.min(1,(g-l)/300),Pt=Ke(Se)*1.15;Se>.6&&(Pt-=(Se-.6)*.375),Se>=1&&(Pt=1),R(Math.max(0,Math.min(1.05,Pt)))}if(g>=v){let Se=Math.min(1,(g-v)/C);D(Ke(Se))}let Xe=v+C;g<Xe?U.current=requestAnimationFrame(J):(d(1),x(1),B(360),R(1),D(1),P(true))},"animate");return U.current=requestAnimationFrame(J),()=>{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),G=ee.backdrop.duration,J=i(m=>{let g=m-O;if(g<w){let le=Ht(g/w);D(1-le),U.current=requestAnimationFrame(J);return}let z=w;if(g<z+C){D(0);let le=Math.min(1,(g-z)/l),Xe=Math.min(1,(g-z)/v);R(1-Ht(le)),x(1-Ht(Xe)),U.current=requestAnimationFrame(J);return}let Y=z+C;if(g<Y+G){x(0),R(0);let le=(g-Y)/G;d(1-le),U.current=requestAnimationFrame(J);return}d(0),t()},"animate");U.current=requestAnimationFrame(J)},[ee,t]);Nt(true,()=>{q.current||(n?r?.():me())},ha),Ee(()=>{let O=document.activeElement,w=Q.current;return()=>{O?.isConnected&&(document.activeElement===document.body||w?.contains(document.activeElement))&&O.focus()}},[]),Ee(()=>{if(n)return;Z.current?.focus();let O=i(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(J=>J.getClientRects().length>0),C=v[0],G=v[v.length-1];(!l.contains(document.activeElement)||(w.shiftKey?document.activeElement===C:document.activeElement===G))&&(w.preventDefault(),(w.shiftKey?G: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 G=w.key==="Home"?0:w.key==="End"?v.length-1:(C+(w.key==="ArrowRight"||w.key==="ArrowDown"?1:-1)+v.length)%v.length;v[G].focus()}}},"handleKeyDown");return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[me,n]);let[Ce,ae]=te(false);Ee(()=>{if(a)return;let O=false,w=setTimeout(async()=>{let l=await No.getItem(nn);!O&&!l&&ae(true)},1200);return()=>{O=true,clearTimeout(w)}},[a]);let ve=bt(()=>{ae(false),No.setItem(nn,"true")},[]);Ee(()=>{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,G=i(J=>{let m=J-v;if(m<C){let g=Ke(m/C);A(1-(1-w.scale)*g),requestAnimationFrame(G)}else if(m<C*2){let g=Ke((m-C)/C);A(w.scale+(l.scale-w.scale)*g),requestAnimationFrame(G)}else A(1)},"animatePulse");requestAnimationFrame(G),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:Ft,textAlign:"center",opacity:f>.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 ${jo(j.dialShadow,I.circle.shadowOpacity)}`,transform:`scale(${f}) rotate(${h}deg)`,opacity:f>.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(aa,{size:W.circleSize}):L(qi,{focus:ba})}),Re.map((O,w)=>L(sn,{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*E})`,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:!r,onClick:r,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:r?"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,f),transform:`scale(${Math.min(1,f)})`},children:[L(_t,{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: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")]})]}),L(_t,{side:"next",disabled:oe>=pe-1,onClick:()=>$e(oe+1)})]}),Ce&&!n&&L(jt,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:ve,showArrow:false})]})}i(Ut,"DialMenu");import{persistentStorage as ln,devToolsStorageKeys as va}from"@buoy-gg/shared-ui/web";import{recordUsage as Sa,pruneUsage as wa}from"@buoy-gg/floating-tools-core/web";var cn=va.dial.usage(),Ve={},dn=false,Kt=null;function Vt(){return Kt||(Kt=(async()=>{try{let e=await ln.getItem(cn);if(e){let t=JSON.parse(e);t&&typeof t=="object"&&(Ve=t)}}catch{}finally{dn=true}})(),Kt)}i(Vt,"loadDialUsage");Vt();function un(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)}i(un,"getRankedToolIds");async function pn(e){if(!e)return;dn||await Vt();let t=Math.max(Date.now(),...Object.values(Ve).map(o=>o.lastUsed+1));Ve=wa(Sa(Ve,e,t),t);try{await ln.setItem(cn,JSON.stringify(Ve))}catch{}}i(pn,"recordToolUsage");import{useCallback as xa,useMemo as mn}from"react";import{persistentStorage as Ta}from"@buoy-gg/shared-ui/web";import{useState as re,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 Ia}from"react";import{getRegisteredToolModule as Ca}from"@buoy-gg/shared-ui/web";var ka=i(()=>()=>{},"noopSubscribe"),za=i(()=>null,"serverSnapshot");function fn(){let e=Ca("@buoy-gg/external-sync");return Ia(e?.subscribeSyncStatus??ka,()=>e?.getSyncStatus?.()??null,za)}i(fn,"useDesktopSyncStatus");import{SentryIcon as Aa,WifiCircuitIcon as Ba,ImageOverlayIcon as Ra,RenderCountIcon as Ma,Info as qt,Layers as Da,ChevronRightIcon as gn,ChevronDown as hn,getStorageBackendType as Oa,getUseLicense as Ea,signOutOfBuoy as Pa,persistentStorage as Pe,Trash2 as La,CheckCircle2 as yn,BuoyUpgradeSheet as Fa,BackgroundSwitcher as $a,night as b,NightCard as Le,NightRows as Gt,NightSectionLabel as ja,NightFootnote as bn,NightSwitch as vn,NightButton as Jt,NightSegmented as Na,NightBadge as he,NightSeparator as Ha,monoFont as Sn}from"@buoy-gg/shared-ui/web";import{EnvIcon as wn,StorageIcon as Wa,RoutesIcon as _a,NetworkIcon as Ua,QueryIcon as Ka,HighlighterIcon as Va,ReduxIcon as qa,EventsIcon as Ga}from"@buoy-gg/floating-tools-core/web";import Ja,{createContext as Ya,useContext as Xa}from"react";import{jsx as Qa}from"react/jsx-runtime";var xn=Ya({});function Yt({children:e,defaultFloatingTools:t,defaultDialTools:o}){let r=Ja.useMemo(()=>({defaultFloatingTools:t,defaultDialTools:o}),[t,o]);return Qa(xn.Provider,{value:r,children:e})}i(Yt,"DefaultConfigProvider");function Xt(){return Xa(xn)}i(Xt,"useDefaultConfig");import Za from"react";import{toolTheme as es}from"@buoy-gg/shared-ui/web";import{jsx as Tn}from"react/jsx-runtime";function In({label:e,size:t,color:o=es.colors.text}){let r=Math.max(Array.from(e.replace(/[\uFE00-\uFE0F\u200D]/g,"")).length,1),n=r<=2?t:t*1.6,a=Math.max(7,Math.min(t*(r===1?.7:.62),n/(.62*r)));return Tn("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})}i(In,"AppTextIcon");function Qt(e,t){return e==null?e:typeof e=="function"?Za.createElement(e,{slot:t.slot,size:t.size,state:t.state,actions:t.actions}):typeof e=="string"||typeof e=="number"?Tn(In,{label:String(e),size:t.size,color:t.color}):e}i(Qt,"renderAppIcon");import{JsModal as ts,devToolsStorageKeys as Zt,onSettingsApplied as os,expandableWindowControlsSupported as ns}from"@buoy-gg/shared-ui/web";import{useSafeAreaInsets as rs}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",is=6,It=i(e=>{let t=is,o={};for(let[r,n]of Object.entries(e))n&&t>0?(o[r]=true,t-=1):o[r]=false;return o},"enforceDialLimit"),as=i((e,t)=>{let{userStatus:o,environment:r,...n}=e,a=t?Object.entries(n).filter(([s])=>t.includes(s)):Object.entries(n);return{...Object.fromEntries(a),environment:r??false}},"sanitizeFloating"),Cn=i((e,t,o)=>{if(!t)return e;let r={...e.dialTools,...t.dialTools??{}},n=o?.allowedDialKeys?Object.entries(r).filter(([a])=>o.allowedDialKeys?.includes(a)):Object.entries(r);return{dialTools:It(Object.fromEntries(n)),floatingTools:as({...e.floatingTools,...t.floatingTools??{}},o?.allowedFloatingKeys),globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true,...t.globalSettings??{}}}},"mergeWithDefaults"),ss=i((e=[],t,o)=>{let r={},n={},a=new Set(t??[]),s=new Set(o??[]),c=!o||o.length===0;for(let u of e){let{id:d,slot:f="both"}=u;(f==="dial"||f==="both")&&(r[d]=c?true:s.has(d)),(f==="row"||f==="both")&&(n[d]=a.has(d))}return{dialTools:It(r),floatingTools:{...n,environment:a.has("environment")},globalSettings:{enableSharedModalDimensions:false,expandableWindowControls:true}}},"generateDefaultSettings"),ls=i(({visible:e,onClose:t,onSettingsChange:o,initialSettings:r,availableApps:n=[],storage:a=Pe,zIndex:s})=>{let{defaultFloatingTools:c,defaultDialTools:u}=Xt(),d=xt(()=>ss(n,c,u),[n,c,u]),f=xt(()=>Object.keys(d.dialTools),[d]),x=xt(()=>Object.keys(d.floatingTools).filter(m=>m!=="environment"),[d]),[h,B]=re(r||tt||d),[k,R]=re(eo??"floating"),[F,D]=re(eo!==null),[E,A]=re(new Set),[V,S]=re(false),[M,_]=re(false);ze(()=>{let m=requestAnimationFrame(()=>_(true));return()=>cancelAnimationFrame(m)},[]);let T=fn();ze(()=>{i(async()=>{try{let m=await Pe.getItem(Zt.settings.activeTab());if(m&&["floating","settings","pro"].includes(m)){let g=m;eo=g,R(z=>z===g?z:g)}}catch{}finally{D(true)}},"loadActiveTab")()},[]),ze(()=>{F&&Pe.setItem(Zt.settings.activeTab(),k).catch(m=>{console.warn("[Buoy]","Failed to save settings active tab:",m)})},[k,F]);let P=Ea()?.(),Q=P?.isPro??false,Z=!Q&&P?.licenseKey?P.error:null,U=P?.errorKind==="transport",[q,ie]=re(kn),[ee,ne]=re(false),[xe,fe]=re(false),[ye,W]=re(false),[Te,be]=re([]),[Be,Ie]=re(false),pe=rs(),oe=ko.get("window").height,Re=ko.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 g=JSON.parse(m),z=Cn(d,g,{allowedDialKeys:f,allowedFloatingKeys:x});tt=z,B(Y=>zn(Y,z)?Y:z);return}tt=d,B(g=>zn(g,d)?g:d)}catch(m){console.error("[Buoy]","Failed to load dev tools settings:",m),B(d)}},[d,f,x,a]);ze(()=>{ae()},[ae]),ze(()=>{Oa().then(m=>{kn=m,ie(g=>g===m?g:m)})},[]),ze(()=>{ye&&(Ie(true),Pe.getAllKeys().then(m=>{be(m.sort())}).catch(()=>{be([])}).finally(()=>{Ie(false)}))},[ye]);let ve=i(async m=>{try{let g=null;try{let Y=await a?.getItem(qe);g=Y?JSON.parse(Y):null}catch{}let z={...m,dialTools:{...g?.dialTools,...It(m.dialTools)},floatingTools:{...g?.floatingTools,...m.floatingTools}};await a.setItem(qe,JSON.stringify(z)),tt=z,B(z),o?.(z),Tt.emit(z)}catch(g){console.error("[Buoy]","Failed to save dev tools settings:",g)}},"saveSettings"),Ye=i(m=>{let g={...h,floatingTools:{...h.floatingTools,[m]:!h.floatingTools[m]}};ve(g)},"toggleFloatingTool"),$e=i(m=>{let g={...h,globalSettings:{...h.globalSettings,[m]:!h.globalSettings?.[m]}};ve(g)},"toggleGlobalSetting"),ke=i(async()=>{ne(true),fe(false);try{await Pe.clear(),fe(true),B(d),a!==Pe&&await a.setItem(qe,JSON.stringify(d)),o?.(d),Tt.emit(d),setTimeout(()=>fe(false),2e3)}catch(m){console.error("[Buoy]","Failed to clear storage:",m)}finally{ne(false)}},"handleClearStorage"),Me=wt(m=>{},[]),je=i(m=>{let g=n.find(z=>z.id===m);return g?.description?g.description:m==="environment"?"Environment badge.":""},"getToolDescription"),se=i(m=>m==="environment"?"Env Badge":n.find(g=>g.id===m)?.name??m.toUpperCase().replace(/_/g," "),"getToolLabel"),O=i(m=>{if(!M)return null;switch(m){case"query":return p(Ka,{size:18});case"env":return p(wn,{size:18});case"sentry":return p(Aa,{size:18,color:"#9945FF"});case"storage":return p(Wa,{size:18,bgColor:b.color.surface});case"wifi":case"query-wifi-toggle":return p(Ba,{size:18,colorPreset:"green",strength:4,noBackground:true});case"route-events":return p(_a,{size:18,bgColor:b.color.surface});case"network":return p(Ua,{size:18});case"environment":return p(wn,{size:18});case"debug-borders":return p(Da,{size:18,color:b.color.accent});case"highlight-updates":return p(Ma,{size:18,color:b.color.accent});case"highlight-updates-modal":return p(Va,{size:18});case"redux":return p(qa,{size:18});case"image-overlay":return p(Ra,{size:18});case"events":return p(Ga,{size:18});case"zustand":try{let{ZustandIcon:g}=zo("@buoy-gg/zustand/web");return p(g,{size:18})}catch{return p(qt,{size:18,color:b.color.textSecondary})}case"jotai":try{let{JotaiIcon:g}=zo("@buoy-gg/jotai/web");return p(g,{size:18})}catch{return p(qt,{size:18,color:b.color.textSecondary})}default:{let g=n.find(z=>z.id===m);return g?.icon!=null?Qt(g.icon,{slot:"row",size:18,color:g.color}):p(qt,{size:18,color:b.color.textSecondary})}}},"getToolIcon"),w=i((m,g,z,Y)=>{let le=je(m);return N(ut,{activeOpacity:z?1:.7,onPress:()=>!z&&Y(),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(vn,{value:g,disabled:z,onValueChange:()=>Y(),accessibilityLabel:se(m)})]},m)},"renderToolRow"),l=i(m=>{A(g=>{let z=new Set(g);return z.has(m)?z.delete(m):z.add(m),z})},"toggleSettingExpanded"),v=i((m,g,z,Y,le)=>{let Xe=h.globalSettings?.[m]??false,Se=E.has(m);return N(H,{children:[N(ut,{activeOpacity:.7,onPress:()=>l(m),accessibilityLabel:g,style:y.settingRow,children:[N(H,{style:y.rowInfo,children:[p(K,{style:y.rowLabel,children:g}),p(K,{style:y.rowCaption,numberOfLines:Se?0:1,children:z})]}),p(vn,{value:Xe,onValueChange:()=>$e(m),accessibilityLabel:g})]}),Se&&N(H,{style:y.settingRowBody,children:[p(K,{style:y.settingRowBodyText,children:Y}),p(K,{style:y.settingRowBodyHint,children:le})]})]},m)},"renderGlobalSettingRow"),C=i((m,g,z)=>N(H,{children:[p(ja,{children:m}),g,z]}),"renderSection"),G=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"}),J=i(()=>N(H,{style:y.container,children:[N(Co,{style:y.scrollContent,showsVerticalScrollIndicator:false,contentContainerStyle:y.scrollContainer,children:[k==="floating"&&p(et,{children:C("Floating Tools",p(Le,{glass:true,children:p(Gt,{children:Object.entries(h.floatingTools).map(([m,g])=>w(m,g,false,()=>Ye(m)))})}),p(bn,{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($a,{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"})}),G,ye?p(hn,{size:16,color:b.color.textTertiary}):p(gn,{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(Ha,{}),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(Co,{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(Jt,{label:xe?"Cleared":ee?"Clearing\u2026":"Clear All Settings",variant:xe?"secondary":"destructive",size:"md",disabled:ee,onPress:ke,icon:xe?p(yn,{size:15,color:b.color.accent}):p(La,{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"}),E.has("desktopSync")?p(hn,{size:16,color:b.color.textTertiary}):p(gn,{size:16,color:b.color.textTertiary})]}),E.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(Gt,{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."),ns(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"})})]}),P?.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(Jt,{label:"Sign out",variant:"secondary",size:"md",onPress:()=>void Pa(),testID:"buoy-settings-signout"})]}):null,P?.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: ",P.teamRole]}),p(K,{style:y.rowCaption,children:P.allowedTools?"Your team picks the tools you see.":"You see all tools."})]})}):null]}),p(bn,{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(Gt,{children:["Advanced Settings","Priority Support"].map(m=>N(H,{style:y.featureRow,children:[p(yn,{size:16,color:b.color.accent}),p(K,{style:y.rowLabel,children:m})]},m))})})),p(Jt,{label:"Upgrade to Pro",variant:"primary",size:"lg",onPress:()=>S(true)})]})]})]}),p(Fa,{visible:V,onClose:()=>S(false)})]}),"renderContent");return p(ts,{visible:e,onClose:t,zIndex:s,variant:"night",header:{showToggleButton:false,customContent:p(H,{style:y.headerRow,children:p(Na,{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:Zt.settings.root(),enablePersistence:true,maxHeight:oe-pe.top,initialHeight:me,initialFloatingPosition:{x:(Re-Ce)/2,y:pe.top+20},enableGlitchEffects:true,children:J()})},"DevToolsSettingsModal"),cs={dialTools:{},floatingTools:{environment:false},globalSettings:{enableSharedModalDimensions:false}},ds=i((e,t)=>{let o=new Set(e??[]),r=new Set(t??[]),n={};for(let s of r)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,eo=null,kn=null,zn=i((e,t)=>JSON.stringify(e)===JSON.stringify(t),"sameSettings");Tt.addListener(e=>{e&&(tt=e)});var An=i(()=>{let{defaultFloatingTools:e,defaultDialTools:t}=Xt(),o=xt(()=>!e&&!t?cs:ds(e,t),[e,t]),[r,n]=re(o),a=wt(async()=>{try{let c=await Pe.getItem(qe);if(c){let u=JSON.parse(c),d=Cn(o,u);n(d);return}n(o)}catch(c){console.error("[Buoy]","Failed to load dev tools settings:",c),n(o)}},[o]);ze(()=>os(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:r,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:Sn},storageKeyEmpty:{color:b.color.textTertiary,fontSize:b.font.caption,fontStyle:"italic"},footnoteMono:{fontFamily:Sn,fontSize:b.font.label,color:b.color.textSecondary}});import{jsx as Bn}from"react/jsx-runtime";var us=[];function to({visible:e,onClose:t,availableTools:o=us,defaultFloatingTools:r,defaultDialTools:n,storage:a=Ta,onSettingsChange:s}){let c=mn(()=>({getItem:i(async f=>a.getItem(f),"getItem"),setItem:i(async(f,x)=>a.setItem(f,x),"setItem")}),[a]),u=mn(()=>o.map(f=>({...f,name:f.name??f.id,icon:typeof f.icon=="function"?x=>f.icon(x.size):f.icon})),[o]),d=xa(f=>{s?.(f)},[s]);return Bn(Yt,{defaultFloatingTools:r,defaultDialTools:n,children:Bn(ls,{visible:e,onClose:t,zIndex:11e3,availableApps:u,storage:c,onSettingsChange:d})})}i(to,"SettingsModal");import{listenBuoyKeydown as ps}from"@buoy-gg/shared-ui/web/floating";import{persistentStorage as Rn,setExpandableWindowControls as ms}from"@buoy-gg/shared-ui/web";import{createContext as fs,useCallback as Ae,useContext as gs,useEffect as Ct,useMemo as hs,useRef as ot,useState as Mn}from"react";var ys=i((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 r=o();return{instanceId:r,wasMinimized:false,apps:[...e,{...t,instanceId:r}]}},"resolveOpenAppsState"),bs=i((e,t,o)=>{let r=e.find(n=>n.instanceId===t);return r?[...e.filter(n=>n!==r),{...r,minimized:false,restoreState:o??r.restoreState}]:e},"restoreOpenApp");import{createContext as vs,useCallback as Dn,useContext as Ss,useEffect as kt,useMemo as ws,useRef as On,useState as zt}from"react";import{JsModal as xs,ModalHeader as nt,HeaderSearchButton as Ts,TickProvider as Is,ToolScreenHeaderContext as Cs,devToolsStorageKeys as En,buoyColors as Pn,gameUIColors as oo}from"@buoy-gg/shared-ui/web";import{jsx as ce,jsxs as At}from"react/jsx-runtime";var rt=i(()=>{},"noop"),ks={search:"",isSearchActive:false,clearSearch:rt,close:rt,minimize:rt,showToast:rt,setHeaderOverride:rt},Ln=vs(null);function no(){return Ss(Ln)??ks}i(no,"useToolHost");function Fn(e,t){let{setHeaderOverride:o}=no();kt(()=>(o(e),()=>o(null)),t)}i(Fn,"useToolHeader");var $n=2200,zs={success:oo.success,error:oo.error,info:oo.info};function jn({message:e,type:t,nonce:o}){let r=On(new De.Value(0)).current;kt(()=>{r.setValue(0),De.sequence([De.timing(r,{toValue:1,duration:150,useNativeDriver:true}),De.delay($n-450),De.timing(r,{toValue:0,duration:300,useNativeDriver:true})]).start()},[o,r]);let n=zs[t];return At(De.View,{pointerEvents:"none",style:[Bt.toast,{opacity:r,borderColor:n+"60"}],children:[ce(H,{style:[Bt.toastDot,{backgroundColor:n}]}),ce(K,{style:Bt.toastText,numberOfLines:2,children:e})]})}i(jn,"ToastView");function Nn({app:e,config:t,visible:o,zIndex:r,onClose:n,onMinimize:a,initialModalState:s,enableSharedModalDimensions:c,bodyProps:u}){let d=e.component,[f,x]=zt(false),[h,B]=zt(""),[k,R]=zt(null),[F,D]=zt(null),E=On(null),A=Dn(()=>{x(false),B("")},[]),V=Dn((q,ie="info")=>{E.current&&clearTimeout(E.current),D(ee=>({message:q,type:ie,nonce:(ee?.nonce??0)+1})),E.current=setTimeout(()=>D(null),$n)},[]);kt(()=>()=>{E.current&&clearTimeout(E.current)},[]);let S=ws(()=>({search:f?h:"",isSearchActive:f,clearSearch:A,close:n,minimize:i(()=>a(),"minimize"),showToast:V,setHeaderOverride:R,instanceId:e.instanceId}),[h,f,A,n,a,V,e.instanceId]),M=k?.title??t.title??e.title??e.id,_=k?.subtitle??t.subtitle,T=k?.onBack,P=k?.actions??t.headerActions,Q=k?.searchable??t.searchable;kt(()=>{!Q&&f&&A()},[Q,f,A]);let Z=c?En.modal.root():En.custom(e.id).modal(),U=At(nt,{children:[T&&!f&&ce(nt.Navigation,{onBack:T}),f?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:[!f&&P,Q&&!f&&ce(Ts,{variant:"chip",testID:`tool-search-${e.id}`,onPress:()=>x(true)})]})]});return ce(Ln.Provider,{value:S,children:ce(xs,{visible:o,onClose:n,onBack:T,onMinimize:a,initialModalState:s,zIndex:r,persistenceKey:Z,enablePersistence:true,initialMode:t.initialMode??"bottomSheet",header:{customContent:U,showToggleButton:true},disableScrollWrapper:true,styles:{},children:At(H,{style:Bt.bodyRoot,children:[ce(Is,{children:ce(Cs.Provider,{value:R,children:ce(d,{...u})})}),F&&ce(jn,{message:F.message,type:F.type,nonce:F.nonce})]})})})}i(Nn,"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: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}});function Hn(e,t){if(t)return{kind:"dial"};for(let r=e.length-1;r>=0;r--){let n=e[r];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}i(Hn,"resolveBackTarget");import{createContext as As,useContext as Bs,useState as Wn,useMemo as _n}from"react";import{jsx as Rs}from"react/jsx-runtime";var Un=As(null);function ro({children:e}){let[t,o]=Wn(false),[r,n]=Wn(false),a=_n(()=>t||r,[t,r]),s=_n(()=>({isDialOpen:t,isToolOpen:r,isDevToolsActive:a,setDialOpen:o,setToolOpen:n}),[t,r,a]);return Rs(Un.Provider,{value:s,children:e})}i(ro,"DevToolsVisibilityProvider");function it(){let e=Bs(Un);return e||{isDialOpen:false,isToolOpen:false,isDevToolsActive:false,setDialOpen:i(()=>{},"setDialOpen"),setToolOpen:i(()=>{},"setToolOpen")}}i(it,"useDevToolsVisibility");import{Fragment as Ms,jsx as de}from"react/jsx-runtime";var Kn=fs(null),Vn="@react_buoy_open_apps",io=44,Ds=12,Os=100,Es=16,Ps=i(e=>({x:window.innerWidth-io-Es,y:window.innerHeight-Os-io-e*(io+Ds)}),"dockIconPosition"),qn=i(({children:e})=>{let[t,o]=Mn([]),[r,n]=Mn(false),a=ot([]),s=ot(null),c=ot(false),u=ot(false),d=ot(false),f=Ae(S=>{let M="";return o(_=>{let{apps:T,instanceId:P}=ys(_,S,()=>`${S.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);return M=P,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(P=>P.id===M);if(T&&T.component){let P=Qt(T.icon,{slot:"dial",size:20,color:T.color});f({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:P,color:T.color,minimized:_})}}),n(true)},[f]);Ct(()=>{let S=false;return i(async()=>{try{let M=await Rn.getItem(Vn);if(S)return;if(M){let _=JSON.parse(M),T;Array.isArray(_)&&_.length>0&&(typeof _[0]=="string"?T=_.map(P=>({id:P,minimized:false})):T=_.filter(P=>typeof P=="object"&&P!==null&&typeof P.id=="string"),T.length&&(s.current=T))}}catch{}S||(u.current=true,x())},"restoreOpenApps")(),()=>{S=true}},[x]),Ct(()=>{if(!r)return;let S=t.map(M=>({id:M.id,minimized:M.minimized??false}));Rn.setItem(Vn,JSON.stringify(S))},[t,r]);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(_=>bs(_,S,M))},[]),D=Ae(S=>t.find(M=>M.instanceId===S)?.minimized??false,[t]),E=t.some(S=>S.launchMode!=="toggle-only"&&!S.minimized);Ct(()=>E?ps(i(S=>{if(S.key!=="Escape"||S.defaultPrevented)return;let M=[...t].reverse().find(_=>_.launchMode!=="toggle-only"&&!_.minimized);M&&B(M.instanceId)},"handler")):void 0,[E,B,t]);let{isDialOpen:A}=it();Nt(t.length>0,()=>{let S=Hn(t,A);S?.kind==="tool"&&B(S.instanceId)});let V=hs(()=>({openApps:t,isAnyOpen:E,open:f,close:B,closeAll:k,registerApps:h,minimize:R,restore:F,isMinimized:D}),[t,E,f,B,k,h,R,F,D]);return de(Kn.Provider,{value:V,children:e})},"AppHostProvider"),at=i(()=>{let e=gs(Kn);return e||{openApps:[],isAnyOpen:false,open:i(()=>"","open"),close:i(()=>{},"close"),closeAll:i(()=>{},"closeAll"),registerApps:i(()=>{},"registerApps"),minimize:i(()=>{},"minimize"),restore:i(()=>{},"restore"),isMinimized:i(()=>false,"isMinimized")}},"useAppHost"),Ls=9e3,Fs={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"},$s={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"},js=i(({app:e,zIndex:t,onClose:o,onMinimize:r,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(Nn,{app:e,config:e.modal,visible:c,zIndex:t,onClose:o,onMinimize:r,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:r,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:r,minimizeTargetPosition:n,initialModalState:e.restoreState,instanceId:e.instanceId})}):null:de("div",{"data-testid":`buoy-tool-instance-${e.id}`,style:{...Fs,zIndex:t,display:c?"flex":"none"},children:de("div",{style:$s,children:de(s,{...u,onClose:o,onMinimize:r,minimizeTargetPosition:n,initialModalState:e.restoreState,instanceId:e.instanceId})})})},"AppRenderer"),Gn=i(()=>{let{openApps:e,close:t,minimize:o}=at(),{settings:r}=An();Ct(()=>{ms(r.globalSettings?.expandableWindowControls!==false)},[r.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=$i()??Ps(a);return de(Ms,{children:n.map((c,u)=>de(js,{app:c,zIndex:Ls+u,onClose:()=>t(c.instanceId),onMinimize:d=>o(c.instanceId,d),enableSharedModalDimensions:r.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:s},c.instanceId))})},"AppOverlay");import{useCallback as Ns,useEffect as ao,useRef as Hs,useState as Jn,useSyncExternalStore as Yn}from"react";import{persistentStorage as Xn,getToolAttention as so,subscribeToolAttention as Qn}from"@buoy-gg/shared-ui/web";import{jsx as ue,jsxs as Rt}from"react/jsx-runtime";function Zn(e){return Yn(Qn,()=>so(e),()=>so(e))}i(Zn,"useToolAttention");var er={needsInput:"#FF8329",done:"#20C997",failed:"#FF3B30"},tr={needsInput:3,failed:2,done:1},or=new Map;function lo(e){let t=null;for(let r of e?e.split("|"):[]){let n=so(r);n&&(!t||tr[n.kind]>tr[t.kind])&&(t=n)}let o=or.get(e);return o&&t&&o.kind===t.kind&&o.label===t.label?o:!o&&!t?null:(or.set(e,t),t)}i(lo,"strongest");function nr(e){let t=e.join("|");return Yn(Qn,()=>lo(t),()=>lo(t))}i(nr,"useStrongestAttention");var rr=28,co=32,uo=6,ir=8,ar=24,sr="@react_buoy_minimized_stack_expanded",Ws=80,lr=2e3,_s=6e3,Us="#1A1A1A",st="#888888";function po({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"})})}i(po,"ChevronGlyph");function cr({id:e,title:t,icon:o,index:r,onPress:n}){let a=Zn(e),s=Hs(null);return ao(()=>{let c=true,u,d=i(()=>{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:Ws,easing:"linear"})},"runGlitch"),f=i(x=>{let h=x?500+Math.random()*1500+r*200:lr+Math.random()*(_s-lr)+r*300;u=setTimeout(()=>{c&&(d(),f(false))},h)},"schedule");return f(true),()=>{c=false,clearTimeout(u)}},[r]),Rt("button",{type:"button","aria-label":a?`${t} \u2014 ${a.label}. Restore`:`Restore ${t}`,"data-testid":`buoy-dock-restore-${e}`,onClick:n,style:{width:co,height:co,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:er[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]})}i(cr,"GlitchToolButton");function dr({containerWidth:e=32}){let{openApps:t,restore:o}=at(),r=t.filter(h=>h.minimized&&h.launchMode!=="toggle-only"),[n,a]=Jn(false),[s,c]=Jn(false),u=nr(r.map(h=>h.id));ao(()=>{let h=false;return i(async()=>{let B=await Xn.getItem(sr);!h&&B==="true"&&a(true),h||c(true)},"load")(),()=>{h=true}},[]),ao(()=>{s&&Xn.setItem(sr,n?"true":"false")},[n,s]);let d=Ns(h=>{o(h)},[o]);if(r.length===0)return null;let f=ir+r.length*co+(r.length-1)*uo+uo+ar+4,x={backgroundColor:Us,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:rr,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?f: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:f,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:ir,gap:uo,boxSizing:"border-box"},children:[n&&[...r].reverse().map((h,B)=>ue(cr,{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:ar,marginTop:3,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",cursor:"pointer",padding:0},children:ue(po,{down:true})})]})}),Rt("button",{type:"button","aria-label":`Show ${r.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:rr,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(po,{}),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:er[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,r.length>1&&ue("span",{style:{fontSize:9,fontWeight:600,color:st,marginLeft:1},children:r.length})]})]})}i(dr,"MinimizedToolsStack");var ur=class Hc{constructor(){this.listeners=new Set}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}notify(){this.listeners.forEach(t=>t())}};i(ur,"ToggleStateManager");var Ks=ur,Vs=new Ks;import{registerToolModules as qs}from"@buoy-gg/shared-ui/web";import{createElement as Gs}from"react";function Ge(e){let t=e.icon;return{...e,icon:typeof t=="function"?o=>Gs(t,{size:o,slot:e.slot??"both",color:e.color}):()=>t}}i(Ge,"createWebTool");import*as Js from"@buoy-gg/license/web";import*as Ys from"@buoy-gg/shared-ui/web";import*as Xs from"@buoy-gg/shared-ui/web/dataViewer";function mo(e){qs({core:{useDevToolsVisibility:it},license:Js,"shared-ui":Ys,"shared-ui/dataViewer":Xs,...e});let t=new Set;return Object.values(e).flatMap(o=>Object.entries(o).flatMap(([r,n])=>!r.endsWith("Preset")||!n||typeof n.id!="string"||!n.component||t.has(n.id)?[]:(t.add(n.id),[Ge(n)])))}i(mo,"createWebTools");import{useEffect as Mt,useMemo as Dt,useRef as Qs}from"react";import{LicenseManager as pr,installCapacitorBridge as Zs,resolveDevBuild as mr,useLicense as el}from"@buoy-gg/license/web";import{registerToolAdapters as tl}from"@buoy-gg/shared-ui/web";function fo(e){return typeof e=="object"&&e!==null?e:void 0}i(fo,"externalSyncOptions");function fr({isDevelopment:e,isLicensed:t,externalSync:o,isAvailable:r}){if(o===false||!r)return false;if(e)return true;let n=fo(o);return t&&n?.enableInRelease===true&&go(n.socketURL,n)===null}i(fr,"shouldMountExternalSync");var gr="http://localhost:42831";function hr(e){return e==="localhost"||e.endsWith(".localhost")||/^127\.\d+\.\d+\.\d+$/.test(e)||e==="[::1]"||e==="::1"||e==="10.0.2.2"}i(hr,"isLoopbackHost");function go(e,t){let o=e??gr;if(t?.allowInsecureNetwork===true)return null;let r;try{r=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 r.protocol==="https:"||r.protocol==="wss:"||hr(r.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.`}i(go,"releaseTransportProblem");var ol={"ota-update-inspector":["check","fetch","reload","setHeaders","setURL"],impersonate:["searchUsers","startImpersonation","resumeImpersonation","updateSettings","removeFromHistory","clearHistory"]};function yr(e,t,o){if(t)return e;let r=null;for(let[n,a]of Object.entries(ol)){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}"] }}.`)});r??(r={...e}),r[n]={...s,actions:c}}return r??e}i(yr,"applyReleaseActionPolicy");import{useEffect as nl,useMemo as rl,useState as il}from"react";import{devToolsStorageKeys as al,persistentStorage as sl}from"@buoy-gg/shared-ui/web";import{isCapacitorNative as ll}from"@buoy-gg/license/web";var cl=8;function br(){let e="";for(;e.length<cl;)e+=(Math.random()*16|0).toString(16);return e}i(br,"generateInstallId");function vr(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}i(vr,"slugify");function Sr({appName:e,hardwareName:t,platform:o,installId:r,deviceId:n}){let a=vr(e??"buoy")||"buoy",s=e??"Buoy Device",c=t?.trim()||o;return n?{deviceId:n,deviceName:`${s} (${c})`}:{deviceId:`${a}-${o}-${r}`,deviceName:`${s} (${c} \xB7 ${r.slice(-4)})`}}i(Sr,"buildDeviceIdentity");function wr(){let e=globalThis;try{return e.sessionStorage??null}catch{return null}}i(wr,"sessionStore");function xr(){let e=globalThis;try{return e.localStorage??null}catch{return null}}i(xr,"localStore");async function Tr({platform:e=Ne.OS,store:t,mint:o=br}={}){let r=al.sync.deviceId(),n=t===void 0?ll()?xr():e==="web"?wr():sl:t;if(!n)return o();try{let a=await n.getItem(r);if(a&&a.length>0)return a;let s=o();return await n.setItem(r,s),s}catch{return o()}}i(Tr,"loadInstallId");var ho=null;function Ir(){return ho||(ho=Tr()),ho}i(Ir,"getInstallId");function Cr(e,t){let o=e?.deviceId,r=e?.deviceName,n=t.loadId??Ir,a=t.platform??Ne.OS,[s,c]=il(null);return nl(()=>{if(o)return;let u=false;return n().then(d=>{u||c(d)}),()=>{u=true}},[o,n]),rl(()=>{if(!o&&!s)return null;let u=Sr({appName:t.appName,hardwareName:t.hardwareName,platform:a,installId:s??"",deviceId:o});return r?{...u,deviceName:r}:u},[o,r,s,t.appName,t.hardwareName,a])}i(Cr,"useDeviceIdentity");import{useEffect as dl,useState as ul}from"react";import{capacitorPlatform as pl,capacitorPlugin as Ot,isCapacitorNative as ml}from"@buoy-gg/license/web";function kr(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}i(kr,"hardwareFromUserAgent");function zr(e){return/sdk_gphone|Android SDK built for|Android ATD built for|google_sdk|Emulator|generic_/i.test(e)}i(zr,"isAndroidEmulatorUserAgent");function yo(){return typeof navigator>"u"?"":navigator.userAgent??""}i(yo,"userAgent");function Et(){return typeof document>"u"?null:document.title||(typeof location>"u"?null:location.hostname)||null}i(Et,"firstPageTitle");var Ar="@react_buoy_capacitor_app_name";function Br(e){try{let t=globalThis.localStorage;if(!t)return e;let o=t.getItem(Ar);if(o)return o;e&&t.setItem(Ar,e)}catch{}return e}i(Br,"persistedAppName");function Rr(){let e=pl();if(!e)return{platform:"web",appName:Et(),hardwareName:"Browser",ready:true};let t=!!Ot("App");return{platform:e,appName:t?Et():Br(Et()),hardwareName:kr(yo(),e)??e,extraDeviceInfo:{runtime:"capacitor"},ready:!t&&!Ot("Device")}}i(Rr,"initialHostInfo");function Mr(){let[e,t]=ul(Rr);return dl(()=>{if(!ml())return;let o=false,r=Ot("App"),n=Ot("Device");return Promise.all([r?.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}i(Mr,"useHostInfo");function bo(){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:yo(),serverUrl:typeof e=="string"?e:null}}i(bo,"pageInfo");function vo(e){if(!e)return null;try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return null}}i(vo,"schemeHost");function Dr(e,t){if(e==="ios"){let o=vo(t.serverUrl);return o?o===vo(t.origin):t.protocol==="capacitor:"}return Or.has(t.hostname)}i(Dr,"isBundledPage");var Or=new Set(["localhost","127.0.0.1","[::1]","::1"]);function Er(e,t,o,r=bo()){if(o==="web"||!r)return e;let n;try{n=new URL(e)}catch{return e}let a=Dr(o,r);return!t&&a&&n.hostname===r.hostname&&(n.hostname="localhost"),o==="android"&&Or.has(n.hostname)&&zr(r.userAgent)&&(n.hostname="10.0.2.2"),n.toString().replace(/\/$/,"")}i(Er,"capacitorBrokerURL");function Pr(e,t,o=bo()){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.`}i(Pr,"capacitorTransportProblem");import{getDevServerOrigin as fl,resolveReloadStrategy as gl,scheduleReloadApp as hl}from"@buoy-gg/shared-ui/web";var Lr=Date.now(),Fr=fl(),yl={platform:Ne.OS,isTV:Ne.isTV===true,isTVOS:Ne.isTVOS===true},$r={version:3,getSnapshot:i(()=>{let e=gl("auto");return{startedAt:Lr,devServerOrigin:Fr,device:yl,reload:{available:e!==null,strategy:e}}},"getSnapshot"),subscribe:i(e=>()=>{},"subscribe"),actions:{ping:i(()=>({ok:true,startedAt:Lr,devServerOrigin:Fr}),"ping"),reloadApp:i(e=>{let t=e??{},{strategy:o,delayMs:r}=hl({strategy:t.strategy,delayMs:t.delayMs});return{scheduled:true,strategy:o,delayMs:r}},"reloadApp")}};import{Fragment as bl,jsx as Fe,jsxs as vl}from"react/jsx-runtime";var Sl=["ConsoleRoot","RouteTracker","ReactQueryTracker","ReduxAutoInstrument","PerfMonitorRoot","AutomationResumer","ImagesRoot"],wl=["DebugBordersStandaloneOverlay","HighlightUpdatesOverlay","ImageOverlayStandalone","PerfMonitorOverlay","JsTopHudOverlay","ImpersonateOverlay","ScenariosOverlay"];function jr(e){let t=Dt(()=>Object.fromEntries(Object.entries(e.modules).map(([r,n])=>[r.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),n])),[e.modules]),o=t["react-query"];return o?.useReactQuerySyncAdapter?Fe(Nr,{...e,modules:t,query:o}):Fe(So,{...e,modules:t})}i(jr,"BrowserToolRuntime");function Nr(e){let t=e.query.useReactQuerySyncAdapter();return Fe(So,{...e,queryAdapter:t})}i(Nr,"QueryRuntime");function So({modules:e,apps:t,requiredEnvVars:o,externalSync:r,headless:n,sentryGetClient:a,queryAdapter:s}){let{isPro:c,tier:u}=el(),d=Dt(()=>{let F={app:$r};for(let[D,E]of Object.entries(e))for(let[A,V]of Object.entries(E))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]),f=Qs(d);f.current=d,Mt(()=>tl(()=>f.current),[]),Mt(()=>{let F=[],D=i(E=>{let A=E?.();typeof A=="function"&&F.push(A)},"start");return D(e.network?.startNetworkCapture),D(e.storage?.startBrowserStorageCapture),D(e.assets?.startBrowserAssetCapture),D(e.three?.startThreeCapture),mr(typeof He<"u"?He:process.env.NODE_ENV!=="production")&&D(e["time-machine"]?.startTimeMachineFloatingToolPersistence),e.storage?.storageSyncAdapter?.subscribe&&D(()=>e.storage.storageSyncAdapter.subscribe(()=>{})),e["focus-inspector"]?.focusInspectorSyncAdapter?.subscribe&&D(()=>e["focus-inspector"].focusInspectorSyncAdapter.subscribe(()=>{})),()=>{for(let E of F.reverse())E()}},[e]);let x=e["external-sync"],h=mr(typeof He<"u"?He:process.env.NODE_ENV!=="production"),B=fr({isDevelopment:h,isLicensed:c,externalSync:r,isAvailable:!!x}),k=fo(r);Zs({release:!h&&!!k?.enableInRelease}),!h&&k?.enableInRelease&&wo(go(k.socketURL,k));let R=e.sentry?.SentryRoot;return vl(bl,{children:[Object.entries(e).flatMap(([F,D])=>Sl.map(E=>{let A=D[E];return A?Fe(A,{},`${F}:${E}`):null})),R&&Fe(R,{getClient:a}),Object.entries(e).flatMap(([F,D])=>wl.map(E=>{let A=D[E];return A&&(!n||E==="ScenariosOverlay"||E==="ImpersonateOverlay")?Fe(A,{},`${F}:${E}`):null})),B&&Fe(Wr,{module:x,tools:d,options:k,isPro:c,tier:u,dev:h})]})}i(So,"ToolRuntime");var Hr=null;function wo(e){!e||e===Hr||(Hr=e,console.warn("[Buoy]",e))}i(wo,"warnOnce");function Wr({module:e,tools:t,options:o,isPro:r,tier:n,dev:a}){let s=Mr(),c=Cr(o,{appName:s.appName,hardwareName:s.hardwareName,platform:s.platform}),u=Dt(()=>Er(o?.socketURL??(a?e.getDefaultSocketURL():gr),!!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=Pr(u,s.platform);if(!d||!h)return;let B=i(()=>wo(h),"onError");return d.on("connect_error",B),()=>{d.off("connect_error",B)}},[d,u,s.platform]),Mt(()=>{if(!d)return;let h=i(()=>{if(!d.connected||!pr.hasAccountAccess())return;let B=pr.getState();!r&&(B.isInitialized===false||B.isValidating===true)||d.emit("device-license",{isPro:r?"1":"0",tier:n})},"emit");return h(),d.on("connect",h),()=>{d.off("connect",h)}},[d,r,n]);let f=o?.releaseActions?.join(",")??"",x=Dt(()=>yr(t,a,f?f.split(","):void 0),[t,a,f]);return e.useExternalSync({tools:x,socket:d,deviceId:s.ready?c?.deviceId??null:null,enableLogs:o?.enableLogs}),null}i(Wr,"BrowserExternalSync");import{useState as _r}from"react";import{BuoyPortal as xl}from"@buoy-gg/shared-ui/web/floating";import{useBuoySession as Tl}from"@buoy-gg/license/web";import{Fragment as Ur,jsx as Je,jsxs as Kr}from"react/jsx-runtime";var Vr="#20C997";function qr(){let{status:e,signIn:t,signOut:o}=Tl(),[r,n]=_r(false),[a,s]=_r(null);if(typeof document>"u")return null;let c=i(()=>{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(xl,{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?Kr(Ur,{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:Il,"data-testid":"buoy-signout",children:"Sign out"})]}):Kr(Ur,{children:[a?Je("div",{role:"alert",style:{marginBottom:10},"data-testid":"buoy-signin-error",children:a}):null,Je("button",{type:"button",onClick:c,disabled:r,"data-testid":"buoy-signin",style:{display:"inline-flex",alignItems:"center",gap:8,padding:"10px 16px",border:"none",borderRadius:999,background:Vr,color:"#04130d",fontWeight:600,fontSize:14,cursor:r?"wait":"pointer",boxShadow:"0 8px 24px rgba(0,0,0,.3)"},children:r?"Signing in\u2026":"Sign in to Buoy"})]})})})}i(qr,"BuoySignIn");var Il={marginTop:8,padding:0,border:"none",background:"none",color:Vr,fontSize:14,cursor:"pointer",textDecoration:"underline"};import{LicenseManager as id}from"@buoy-gg/license/web";var Cl=false;function Gr(){if(!Cl){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{}}}i(Gr,"defaultLicenseKey");import{useState as kl}from"react";import{AccountSetupButton as zl,BuoyNeedsPlanCard as Al,BuoySignInCard as Bl,useSignInState as Rl}from"@buoy-gg/shared-ui/web";import{jsx as lt,jsxs as Jr}from"react/jsx-runtime";function xo({needsPlan:e=false}){let[t,o]=kl(false),r=Rl();return Jr(H,{pointerEvents:"box-none",style:Yr.root,children:[lt(zl,{expanded:t,onPress:()=>o(true)}),t?lt(mi,{visible:true,transparent:true,animationType:"fade",onRequestClose:()=>o(false),children:Jr(H,{style:Yr.overlay,accessibilityViewIsModal:true,children:[lt(pi,{style:dt.absoluteFill,onPress:()=>o(false),accessible:false}),e&&r==="active"?lt(Al,{onClose:()=>o(false)}):lt(Bl,{onClose:()=>o(false)})]})}):null]})}i(xo,"BuoySignIn");var Yr=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 To(e){if(e.length>6){let t=e.map(o=>`"${o}"`).join(", ");return e.slice(0,6)}return e}i(To,"validateDialConfig");import{installedTools as Ml,installedToolsFound as Dl}from"@buoy-gg/core/web/installed-tools";import{Fragment as Io,jsx as $,jsxs as ct}from"react/jsx-runtime";var Xr={},Qr="@react_buoy_floating_menu_tooltip_shown",Ol=Oe;function Zr({size:e=14,color:t="#20C997"}){let o=Math.max(2,e/4),r=Math.max(1,e/16);return $("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${o}px)`,gap:r,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))})}i(Zr,"MenuLauncherIcon");function ei(e){let{defaultFloatingTools:t,defaultDialTools:o,disableHints:r=false,children:n}=e,a=ge(()=>o&&To(o),[o]);return $(Yt,{defaultFloatingTools:t,defaultDialTools:a,children:$(ki,{disableHints:r,children:ct(ro,{children:[$(qn,{children:$(ai,{...e})}),n]})})})}i(ei,"AdmittedFloatingDevTools");var El=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function ti({modules:e=Xr}){return $(Io,{children:Object.entries(e).flatMap(([t,o])=>El.map(r=>{let n=o[r];return n?$(n,{},`${t}:${r}`):null}))})}i(ti,"StartupCapture");function oi(){let{openApps:e,restore:t}=at();return X(()=>Bo(o=>{let r=e.find(n=>n.id===o);return r?(t(r.instanceId),true):false}),[e,t]),null}i(oi,"WebToolOpenerBridge");function ni(){let e=xi();return zi((e===null?process.env.NODE_ENV:e?"development":"production")??"dev")}i(ni,"defaultEnvironment");function ri(e,t,o,r){let n=i(f=>Object.entries(e).find(([x])=>x.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===f)?.[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=r==="hosted"?u?.hostedAskBuoy?.():r;return d&&u?.createAskBuoyTool&&a.push(Ge(u.createAskBuoyTool(d))),a}i(ri,"configOverrides");function ii(e){if(e.launchMode!=="toggle-only")return;let t=e.isOn;return typeof t=="function"?t():void 0}i(ii,"toggleIsOn");function ai({environment:e,userRole:t="admin",availableEnvironments:o,onEnvironmentSwitch:r,apps:n,modules:a=Xr,externalSync:s,requiredEnvVars:c,sentryGetClient:u,disableHints:d=false,headless:f=false,hidden:x=false,defaultFloatingTools:h,defaultDialTools:B,zustandStores:k,requiredStorageKeys:R,askBuoy:F}){let D=e??ni(),E=ge(()=>B?To(B):void 0,[B]),[A,V]=pt(false),[S,M]=pt(false),[,_]=pt(0);X(()=>Vs.subscribe(()=>_(l=>l+1)),[]);let T=Ro(false),P=at(),Q=ge(()=>ri(a,c,R,F),[a,c,R,F]),{allowedTools:Z}=Ao(),U=ge(()=>Ei(Lt([...mo(a),...n??[],...Q]),Z),[n,a,Q,Z]),{openApps:q,close:ie}=P;X(()=>{if(Z)for(let l of q)Pi(l.id,Z)||ie(l.instanceId)},[q,Z,ie]);let ee=ge(()=>Object.entries(a).find(([l])=>l.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[a]);X(()=>{if(!k||typeof ee?.watchStores!="function")return;let l=ee.watchStores(k);return typeof l=="function"?l:void 0},[k,ee]);let ne=it(),xe=P.openApps.some(l=>!l.minimized);X(()=>{ne.setDialOpen(A)},[A,ne.setDialOpen]),X(()=>{ne.setToolOpen(xe||S)},[xe,S,ne.setToolOpen]);let{registerApps:fe}=P;X(()=>{fe(U.map(l=>{let v=l.icon;return{...l,icon:typeof v=="function"?({size:C})=>v(C):v}}))},[fe,U]);let ye=ge(()=>U.map(l=>({id:l.id,name:l.name,description:l.description,slot:l.slot})),[U]);Bi({availableTools:ye,storage:Ol}),X(()=>{let l=false;return i(async()=>{let[v,C]=await Promise.all([Oe.getItem(ft.dial.isOpen()),Oe.getItem(ft.settings.modalOpen())]);l||(v==="true"&&V(true),C==="true"&&(V(true),M(true)),T.current=true)},"restore")(),()=>{l=true}},[]),X(()=>{T.current&&Oe.setItem(ft.dial.isOpen(),A?"true":"false")},[A]),X(()=>{T.current&&Oe.setItem(ft.settings.modalOpen(),S?"true":"false")},[S]);let W=We(l=>{if(pn(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;P.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||Mo(l.id)})}else l.onPress?.()},[P]),Te=Ro({tools:U,openApps:P.openApps,openTool:W});Te.current={tools:U,openApps:P.openApps,openTool:W},X(()=>Bo(l=>{let{tools:v,openApps:C,openTool:G}=Te.current;if(C.some(m=>m.id===l))return false;let J=v.find(m=>m.id===l);return!J||J.launchMode==="toggle-only"?false:(G(J),true)}),[]);let be=ge(()=>gt(U,"dial").map(l=>{let v=l.color||Mo(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:i(()=>{W(l),V(false)},"onPress")}}),[U,W]),Be=ge(()=>{if(!A)return be;let l=new Map(be.map(v=>[v.id,v]));return un(be.map(v=>v.id)).map(v=>l.get(v)).filter(v=>!!v)},[A,be]),{settings:Ie}=An(),pe=ge(()=>gt(U,"row").filter(l=>(Ie.floatingTools[l.id]??false)===true&&(l.component||l.onPress)),[U,Ie.floatingTools]),oe=ge(()=>U.map(l=>({id:l.id,name:l.name||mt(l.id),description:l.description||Ri(l.id),slot:l.slot,icon:l.icon,color:l.color})),[U]),[Re,me]=pt(false),Ce=P.openApps.some(l=>!l.minimized);X(()=>{if(d)return;let l=false,v=setTimeout(async()=>{let C=await Oe.getItem(Qr);!l&&!C&&me(true)},1e3);return()=>{l=true,clearTimeout(v)}},[d]);let ae=We(()=>{me(false),Oe.setItem(Qr,"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&&r),je=Ie.floatingTools.environment!==false,se=Re&&!A&&!Ce&&!x;X(()=>{if(!se)return;let l=i(C=>{(!(C.target instanceof Element)||!C.target.closest("[data-buoy-root]"))&&ae()},"onPointerDown"),v=i(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=P.openApps.some(l=>l.minimized&&l.launchMode!=="toggle-only"),w=$(jr,{modules:a,apps:n,requiredEnvVars:c,externalSync:s,headless:f,sentryGetClient:u});return f?w:ct("div",{"data-buoy-root":"",style:{display:"contents"},children:[w,$(oi,{}),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(Eo,{enablePositionPersistence:!se,pushToSide:A||Ce,suspendPointerEvents:A,centerOnboarding:se,minimizedStack:O?$(dr,{}):void 0,hasMinimizedStack:O,children:[D&&je&&!Me&&$(Mi,{environment:D}),Me&&je&&$(Di,{currentEnvironment:D??"local",availableEnvironments:o,onSelect:r}),t?$(Po,{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:$(Zr,{})}),pe.map(l=>$("button",{"aria-label":l.name||mt(l.id),"aria-pressed":ii(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&&$(jt,{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&&$(Ut,{icons:Be,onClose:Ye,centerLabel:"BUOY",onCenterPress:$e,settingsOpen:S,hintsDisabled:d,emptyNote:Z&&Be.length===0?Li:void 0}),S&&!x&&$(to,{visible:true,onClose:ke,availableTools:oe,defaultFloatingTools:h,defaultDialTools:E,onSettingsChange:l=>{}}),!x&&ct(Io,{children:[$(Gn,{}),$(yi,{})]})]})}i(ai,"FloatingDevToolsInner");function si(e){let t=e&&typeof e=="object"?e.appId:void 0,o=!!e;X(()=>{if(!o)return;let r=false,n=bi.SessionManager;if(!n)return;let a=i(s=>{r||!s||(n.configure({audience:`app:${s}`}),n.load().catch(()=>{}))},"apply");return t?a(t):Ii().then(s=>a(s?.bundleId)).catch(()=>{}),()=>{r=true}},[o,t])}i(si,"useCapacitorSignInAudience");var li=false;function ci(e){return e.modules?e:(!Dl&&!li&&typeof console<"u"&&(li=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:Ml})}i(ci,"withInstalledTools");function di(e){return $(hi,{children:$(ui,{...ci(e)})})}i(di,"FloatingDevTools");function ui(e){let{access:t,isPro:o,licenseKey:r}=Ao();X(()=>{vi.configure(e.licenseKey??Gr())},[e.licenseKey]);let n=e.licenseKey===void 0||Si(e.licenseKey,r),a=wi(typeof He<"u"?He:process.env.NODE_ENV!=="production"),s=n&&t.status==="admitted";X(()=>{s&&Ai()},[s]),X(()=>{a||t.status==="initializing"||(o&&s?fi():gi())},[a,o,s,t.status]);let c=Ti();return si(c?e.signIn:void 0),!a&&!o?!e.signIn||e.headless?null:c?$(xo,{needsPlan:true}):$(qr,{}):s?$(ei,{...e}):ct(Io,{children:[t.status==="initializing"&&$(ti,{modules:e.modules}),e.headless?null:e.signIn&&c?$(xo,{}):$(Ci,{})]})}i(ui,"FloatingDevToolsContent");export{Oi as a,Do as b,Lt as c,gt as d,Oo as e,Eo as f,Fi as g,Po as h,tn as i,Ut as j,to as k,no as l,Fn as m,ro as n,it as o,qn as p,at as q,Gn as r,Ge as s,mo as t,$r as u,di as v};
|