@buoy-gg/core 7.0.78 → 7.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/bundlers/vite.d.ts +1 -1
  2. package/bundlers/vite.mjs +3 -3
  3. package/lib/commonjs/earlyNetwork.js +1 -1
  4. package/lib/commonjs/floatingMenu/AppHost.js +1 -1
  5. package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
  6. package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -1
  7. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
  8. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
  9. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -1
  10. package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -1
  11. package/lib/commonjs/floatingMenu/backTarget.js +1 -0
  12. package/lib/commonjs/floatingMenu/capacitorBackButton.js +1 -1
  13. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -1
  14. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -1
  15. package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -1
  16. package/lib/commonjs/floatingMenu/hardwareBack.js +1 -0
  17. package/lib/commonjs/version.js +1 -1
  18. package/lib/module/earlyNetwork.js +1 -1
  19. package/lib/module/floatingMenu/AppHost.js +1 -1
  20. package/lib/module/floatingMenu/AppHost.web.js +1 -1
  21. package/lib/module/floatingMenu/AppHostLogic.js +1 -1
  22. package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
  23. package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
  24. package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -1
  25. package/lib/module/floatingMenu/autoExternalSync.js +1 -1
  26. package/lib/module/floatingMenu/backTarget.js +1 -0
  27. package/lib/module/floatingMenu/capacitorBackButton.js +1 -1
  28. package/lib/module/floatingMenu/dial/DialDevTools.js +1 -1
  29. package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -1
  30. package/lib/module/floatingMenu/externalSyncGate.js +1 -1
  31. package/lib/module/floatingMenu/hardwareBack.js +1 -0
  32. package/lib/module/version.js +1 -1
  33. package/lib/typescript/commonjs/earlyNetwork.d.ts +19 -4
  34. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts +6 -0
  35. package/lib/typescript/commonjs/floatingMenu/backTarget.d.ts +17 -0
  36. package/lib/typescript/commonjs/floatingMenu/capacitorBackButton.d.ts +5 -3
  37. package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
  38. package/lib/typescript/commonjs/floatingMenu/hardwareBack.d.ts +8 -0
  39. package/lib/typescript/commonjs/version.d.ts +1 -1
  40. package/lib/typescript/module/earlyNetwork.d.ts +19 -4
  41. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts +6 -0
  42. package/lib/typescript/module/floatingMenu/backTarget.d.ts +17 -0
  43. package/lib/typescript/module/floatingMenu/capacitorBackButton.d.ts +5 -3
  44. package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
  45. package/lib/typescript/module/floatingMenu/hardwareBack.d.ts +8 -0
  46. package/lib/typescript/module/version.d.ts +1 -1
  47. package/lib/web/auto.mjs +1 -1
  48. package/lib/web/chunks/{FloatingDevTools.web-FB3F35HU.mjs → FloatingDevTools.web-5EMC7ZIE.mjs} +1 -1
  49. package/lib/web/chunks/{FloatingDevTools.web-IIOOVSUC.mjs → FloatingDevTools.web-QLTO5FXP.mjs} +1 -1
  50. package/lib/web/chunks/chunk-EFTCKGMC.mjs +10 -0
  51. package/lib/web/chunks/chunk-JXTHZBMM.mjs +10 -0
  52. package/lib/web/chunks/chunk-OXRZOHYP.mjs +1 -0
  53. package/lib/web/index.mjs +1 -1
  54. package/lib/web/register-network.mjs +1 -1
  55. package/lib/web/register.mjs +1 -1
  56. package/package.json +5 -5
  57. package/lib/web/chunks/chunk-5EUMNDI5.mjs +0 -1
  58. package/lib/web/chunks/chunk-A6DQ5EDK.mjs +0 -10
  59. package/lib/web/chunks/chunk-LAJ3HKAL.mjs +0 -10
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialMenu=DialMenu;var _react=require("react");var _dialA11y=require("./dialA11y.js");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _sharedUi=require("@buoy-gg/shared-ui");var _DialHyperspace=require("./DialHyperspace.js");var _OnboardingTooltipWeb=require("./OnboardingTooltip.web.js");var _jsxRuntime=require("react/jsx-runtime");const DIAL_BACKGROUND_FOCUS={x:.5,y:.5};const SETTINGS_TOOLTIP_KEY="@react_buoy_settings_tooltip_shown";let keyframesInjected=false;function injectKeyframes(){if(keyframesInjected||typeof document==="undefined")return;const t=document.createElement("style");t.textContent=(0,_floatingToolsReact.getDialCSSKeyframesString)();document.head.appendChild(t);keyframesInjected=true}const easeOutCubic=t=>1-Math.pow(1-t,3);const easeInCubic=t=>t*t*t;function DialIconItem({icon:t,index:c,totalIcons:j,position:p,progress:r,onPress:y}){const[x,k]=(0,_react.useState)(false);const[F,S]=(0,_react.useState)(false);const m=!t.icon&&t.id.startsWith("empty-");const T=!m&&t.unavailable===true;const C=!m&&!T;const{icons:W}=_floatingToolsReact.dialAnimationConfig;const w=(0,_floatingToolsReact.getIconStaggerInputRange)(c,j);let s=0;if(r<=w[1]){s=0}else if(r<=w[2]){s=(r-w[1])/(w[2]-w[1])}else{s=1}s=Math.max(0,Math.min(1,s));const D=_floatingToolsReact.DIAL_ICON_SIZE;const I=W.pressIn.scale;const H=1.1;const M=s*(F?I:x?H:1);let A=0;if(s<=0){A=0}else if(s<=.3){A=s}else{A=.3+(s-.3)*(.7/.7)}const O=p.x*(s-1);const U=p.y*(s-1);return(0,_jsxRuntime.jsx)("button",{role:"menuitem","aria-label":m?"Empty slot":(0,_dialA11y.dialAccessibilityLabel)(t.id,t.name),"data-testid":t.id?`buoy-dial-${t.id}`:void 0,"aria-disabled":!C,tabIndex:C?0:-1,onClick:C?y:void 0,onPointerEnter:K=>C&&K.pointerType==="mouse"&&k(true),onPointerLeave:()=>{k(false);S(false)},onPointerDown:()=>C&&S(true),onPointerUp:()=>S(false),onPointerCancel:()=>S(false),style:{position:"absolute",left:`calc(50% + ${p.x}px)`,top:`calc(50% + ${p.y}px)`,width:D,height:D,marginLeft:-D/2,marginTop:-D/2,cursor:C?"pointer":"default",background:"none",border:"none",padding:0},children:(0,_jsxRuntime.jsx)("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${O}px, ${U}px) scale(${M})`,opacity:A,transition:x||F?"transform 100ms ease":"none"},children:m?(0,_jsxRuntime.jsx)("div",{style:{width:_floatingToolsReact.dialStyles.emptySlot.dotSize,height:_floatingToolsReact.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsReact.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsReact.dialColors.emptyDotBackground,border:`${_floatingToolsReact.dialStyles.emptySlot.borderWidth}px solid ${_floatingToolsReact.dialColors.emptyDotBorder}`}}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:_floatingToolsReact.dialStyles.icon.gradientBgOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:_floatingToolsReact.dialStyles.icon.innerGlowOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{marginBottom:_floatingToolsReact.dialStyles.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:x?"brightness(1.2)":"none"},children:t.icon}),(0,_jsxRuntime.jsx)("span",{style:{fontSize:t.name.length>8?Math.max(_floatingToolsReact.dialStyles.icon.label.fontSize*.7,_floatingToolsReact.dialStyles.icon.label.fontSize*8/t.name.length):_floatingToolsReact.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,color:_floatingToolsReact.dialColors.iconLabel,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,marginTop:_floatingToolsReact.dialStyles.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:t.name}),T&&(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.icon.label.fontSize-1,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,color:_floatingToolsReact.floatingToolsColors.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}function PagerChevron({side:t,color:c}){const j=t==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]];return(0,_jsxRuntime.jsx)("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:j.map(([p,r,y,x],k)=>(0,_jsxRuntime.jsx)("line",{x1:p,y1:r,x2:y,y2:x,stroke:c,strokeWidth:2},k))})}function PagerButton({side:t,disabled:c,onClick:j}){const[p,r]=(0,_react.useState)(false);const y=c?_floatingToolsReact.dialColors.emptyDotBorder:_floatingToolsReact.dialColors.accent;return(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":`${t==="prev"?"Previous":"Next"} dial page`,"data-testid":`buoy-dial-${t}`,disabled:c,onClick:j,onPointerDown:()=>!c&&r(true),onPointerUp:()=>r(false),onPointerLeave:()=>r(false),onPointerCancel:()=>r(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${_floatingToolsReact.dialColors.dialBorder}`,backgroundColor:_floatingToolsReact.dialColors.dialBackground,color:c?_floatingToolsReact.dialColors.iconLabelMuted:_floatingToolsReact.dialColors.centerText,fontSize:12,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:1.5,textTransform:"uppercase",cursor:c?"default":"pointer",opacity:c?.4:1,boxShadow:c?"none":`0 0 8px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.4)}`,transform:p?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[t==="prev"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"prev",color:y}),t==="prev"?"PREV":"NEXT",t==="next"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"next",color:y})]})}function DialMenu({icons:t,onClose:c,centerLabel:j="MENU",onCenterPress:p,settingsOpen:r=false,hintsDisabled:y=false,emptyNote:x}){const{id:k}=(0,_sharedUi.useToolBackground)();const[F,S]=(0,_react.useState)(0);const[m,T]=(0,_react.useState)(0);const[C,W]=(0,_react.useState)(0);const[w,s]=(0,_react.useState)(0);const[D,I]=(0,_react.useState)(0);const[H,M]=(0,_react.useState)(1);const[A,O]=(0,_react.useState)(false);const[U,K]=(0,_react.useState)(false);const[ie,ae]=(0,_react.useState)(false);const N=(0,_react.useRef)(null);const Q=(0,_react.useRef)(null);const g=(0,_react.useRef)(null);const q=(0,_react.useRef)(false);const{entrance:E,exit:L,interaction:$}=_floatingToolsReact.dialAnimationConfig;const re=(0,_floatingToolsReact.getDialCSSAnimationStyles)();const[X,se]=(0,_react.useState)(()=>({width:window.innerWidth,height:window.innerHeight}));(0,_react.useEffect)(()=>{const o=()=>se({width:window.innerWidth,height:window.innerHeight});window.addEventListener("resize",o);return()=>window.removeEventListener("resize",o)},[]);const n=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getDialLayout)({screenWidth:X.width,maxCircleSize:Math.max(120,Math.min(320,X.height-96))}),[X]);const le=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getGridLineRotations)(),[]);const ce=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getAllIconPositions)(_floatingToolsReact.MAX_DIAL_SLOTS,n.iconRadius),[n.iconRadius]);const[de,ue]=(0,_react.useState)(0);const R=Math.max(1,Math.ceil(t.length/_floatingToolsReact.MAX_DIAL_SLOTS));const h=Math.min(de,R-1);const ee=(0,_react.useMemo)(()=>{const o=h*_floatingToolsReact.MAX_DIAL_SLOTS;const e=[...t.slice(o,o+_floatingToolsReact.MAX_DIAL_SLOTS)];while(e.length<_floatingToolsReact.MAX_DIAL_SLOTS){e.push({id:`empty-${e.length}`,name:"",icon:null,onPress:()=>{}})}return e},[t,h]);(0,_react.useEffect)(()=>{injectKeyframes()},[]);(0,_react.useEffect)(()=>{const o=E.backdrop.duration;const e=E.dial.rotation.duration;const d=E.centerButton.delay;const a=E.icons.delay;const l=E.icons.duration;const u=performance.now();const f=v=>{const i=v-u;S(Math.min(1,i/o));const b=Math.min(1,i/400);let P=easeOutCubic(b)*1.1;if(b>.7){P-=(b-.7)*.33}if(b>=1)P=1;T(Math.max(0,Math.min(1.05,P)));const z=Math.min(1,i/e);W(easeOutCubic(z)*360);if(i>=d){const B=Math.min(1,(i-d)/300);let J=easeOutCubic(B)*1.15;if(B>.6){J-=(B-.6)*.375}if(B>=1)J=1;s(Math.max(0,Math.min(1.05,J)))}if(i>=a){const B=Math.min(1,(i-a)/l);I(easeOutCubic(B))}const Z=a+l;if(i<Z){g.current=requestAnimationFrame(f)}else{S(1);T(1);W(360);s(1);I(1);ae(true)}};g.current=requestAnimationFrame(f);return()=>{if(g.current)cancelAnimationFrame(g.current)}},[]);const _=(0,_react.useCallback)(()=>{if(q.current)return;q.current=true;K(true);if(g.current){cancelAnimationFrame(g.current)}const o=performance.now();const e=L.icons.duration;const d=L.centerButton.duration;const a=L.dialScale.duration;const l=Math.max(d,a);const u=L.backdrop.duration;const f=v=>{const i=v-o;if(i<e){const z=easeInCubic(i/e);I(1-z);g.current=requestAnimationFrame(f);return}const b=e;if(i<b+l){I(0);const z=Math.min(1,(i-b)/d);const Z=Math.min(1,(i-b)/a);s(1-easeInCubic(z));T(1-easeInCubic(Z));g.current=requestAnimationFrame(f);return}const P=b+l;if(i<P+u){T(0);s(0);const z=(i-P)/u;S(1-z);g.current=requestAnimationFrame(f);return}S(0);c()};g.current=requestAnimationFrame(f)},[L,c]);(0,_react.useEffect)(()=>{const o=document.activeElement;const e=N.current;return()=>{if(o?.isConnected&&(document.activeElement===document.body||e?.contains(document.activeElement))){o.focus()}}},[]);(0,_react.useEffect)(()=>{if(r)return;Q.current?.focus();const o=e=>{const d=N.current;if(!d)return;if(e.key==="Escape"){e.preventDefault();_()}else if(e.key==="Tab"){const a=Array.from(d.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(f=>f.getClientRects().length>0);const l=a[0];const u=a[a.length-1];if(!d.contains(document.activeElement)||(e.shiftKey?document.activeElement===l:document.activeElement===u)){e.preventDefault();(e.shiftKey?u:l)?.focus()}}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(e.key)){const a=Array.from(d.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])'));const l=a.indexOf(document.activeElement);if(l<0||!a.length)return;e.preventDefault();const u=e.key==="Home"?0:e.key==="End"?a.length-1:(l+(e.key==="ArrowRight"||e.key==="ArrowDown"?1:-1)+a.length)%a.length;a[u].focus()}};document.addEventListener("keydown",o);return()=>document.removeEventListener("keydown",o)},[_,r]);const[V,te]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{if(y)return;let o=false;const e=setTimeout(async()=>{const d=await _sharedUi.persistentStorage.getItem(SETTINGS_TOOLTIP_KEY);if(!o&&!d)te(true)},1200);return()=>{o=true;clearTimeout(e)}},[y]);const Y=(0,_react.useCallback)(()=>{te(false);void _sharedUi.persistentStorage.setItem(SETTINGS_TOOLTIP_KEY,"true")},[]);(0,_react.useEffect)(()=>{if(r&&V){Y()}},[r,V,Y]);const pe=(0,_react.useCallback)(o=>{if(o.id.startsWith("empty-")||q.current)return;const[e,d]=$.iconSelect.pulse;const a=performance.now();const l=150;const u=f=>{const v=f-a;if(v<l){const i=easeOutCubic(v/l);M(1-(1-e.scale)*i);requestAnimationFrame(u)}else if(v<l*2){const i=easeOutCubic((v-l)/l);M(e.scale+(d.scale-e.scale)*i);requestAnimationFrame(u)}else{M(1)}};requestAnimationFrame(u);setTimeout(()=>{o.onPress();_()},$.iconSelect.actionDelay)},[$.iconSelect,_]);const oe=(0,_react.useCallback)(o=>{if(q.current)return;const e=Math.max(0,Math.min(o,R-1));if(e!==h)ue(e)},[R,h]);const G=n.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio;const ne=n.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRatio;const fe=n.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio/2+6;const me=ie&&!U;return(0,_jsxRuntime.jsxs)("div",{ref:N,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[(0,_jsxRuntime.jsx)("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:_,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:_floatingToolsReact.dialColors.dialBackdrop,opacity:F}}),x?(0,_jsxRuntime.jsx)("div",{role:"status","data-testid":"buoy-dial-empty-note",style:{position:"absolute",left:16,right:16,bottom:80+n.circleSize+16,color:_floatingToolsReact.dialColors.iconLabel,fontSize:12,fontFamily:_sharedUi.monoFont,textAlign:"center",opacity:m>.01?1:0},children:x}):null,(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-n.circleSize/2,bottom:80,width:n.circleSize,height:n.circleSize,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialBackground,border:`${_floatingToolsReact.dialStyles.circle.borderWidth}px solid ${_floatingToolsReact.dialColors.dialBorder}`,boxShadow:`0 0 ${_floatingToolsReact.dialStyles.circle.shadowRadius}px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,_floatingToolsReact.dialStyles.circle.shadowOpacity)}`,transform:`scale(${m}) rotate(${C}deg)`,opacity:m>.01?1:0,overflow:"hidden"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:_floatingToolsReact.dialStyles.gradientLayers[0].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:_floatingToolsReact.dialStyles.gradientLayers[1].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:_floatingToolsReact.dialStyles.gradientLayers[2].opacity}}),le.map(o=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:_floatingToolsReact.dialStyles.grid.lineHeight,transform:`rotate(${o}deg)`,transformOrigin:"center"},children:["left","right"].map(e=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:0,[e]:0,width:`calc(50% - ${fe}px)`,height:_floatingToolsReact.dialStyles.grid.lineHeight,backgroundColor:_floatingToolsReact.dialColors.dialGridLine}},e))},o)),(0,_jsxRuntime.jsx)("div",{"data-testid":"dial-background","data-background":k,style:{position:"absolute",inset:0,pointerEvents:"none"},children:k==="hyperspace"?(0,_jsxRuntime.jsx)(_DialHyperspace.DialHyperspace,{size:n.circleSize}):(0,_jsxRuntime.jsx)(_sharedUi.ToolBackground,{focus:DIAL_BACKGROUND_FOCUS})}),ee.map((o,e)=>(0,_jsxRuntime.jsx)(DialIconItem,{icon:o,index:e,totalIcons:ee.length,position:ce[e],progress:D,onPress:()=>pe(o)},e)),(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",top:"50%",width:G,height:G,marginLeft:-G/2,marginTop:-G/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:_floatingToolsReact.dialColors.hubHalo,borderRadius:n.buttonSize,overflow:"hidden",transform:`scale(${w*H})`,opacity:w>.01?1:0},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:.5,borderRadius:n.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:.3,borderRadius:n.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:.2,borderRadius:n.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{width:ne,height:ne,borderRadius:n.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRadiusRatio,backgroundColor:_floatingToolsReact.dialColors.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:(0,_jsxRuntime.jsx)("button",{ref:Q,type:"button","aria-label":r?"Close Settings":"Open Dev Tools Settings",disabled:!p,onClick:p,onPointerEnter:o=>o.pointerType==="mouse"&&O(true),onPointerLeave:()=>O(false),style:{border:0,padding:0,background:"transparent",width:n.buttonSize,height:n.buttonSize,borderRadius:n.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:p?"pointer":"default",transform:A?`scale(${$.centerHover.scale})`:"scale(1)",transition:`transform ${$.centerHover.duration}ms ease`,animation:me&&!A?re.pulse:"none"},children:r?(0,_jsxRuntime.jsxs)("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize-2,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[(0,_jsxRuntime.jsx)("span",{style:{marginBottom:-2},children:"CLOSE"}),(0,_jsxRuntime.jsx)("span",{style:{marginTop:-2},children:"SETTINGS"})]}):(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase"},children:j})})})]})]}),R>1&&(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-n.circleSize/2,top:"calc(100% - 64px)",width:n.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,m),transform:`scale(${Math.min(1,m)})`},children:[(0,_jsxRuntime.jsx)(PagerButton,{side:"prev",disabled:h<=0,onClick:()=>oe(h-1)}),(0,_jsxRuntime.jsxs)("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:2,color:_floatingToolsReact.dialColors.centerText,textShadow:`0 0 6px ${_floatingToolsReact.dialColors.centerTextGlow}`},children:[String(h+1).padStart(2,"0"),(0,_jsxRuntime.jsxs)("span",{style:{color:_floatingToolsReact.dialColors.iconLabelMuted,textShadow:"none"},children:[" / ",String(R).padStart(2,"0")]})]}),(0,_jsxRuntime.jsx)(PagerButton,{side:"next",disabled:h>=R-1,onClick:()=>oe(h+1)})]}),V&&!r&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:Y,showArrow:false})]})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialMenu=DialMenu;var _react=require("react");var _dialA11y=require("./dialA11y.js");var _floatingToolsReact=require("@buoy-gg/floating-tools-react");var _sharedUi=require("@buoy-gg/shared-ui");var _DialHyperspace=require("./DialHyperspace.js");var _OnboardingTooltipWeb=require("./OnboardingTooltip.web.js");var _capacitorBackButton=require("../capacitorBackButton.js");var _jsxRuntime=require("react/jsx-runtime");const DIAL_BACKGROUND_FOCUS={x:.5,y:.5};const SETTINGS_TOOLTIP_KEY="@react_buoy_settings_tooltip_shown";let keyframesInjected=false;function injectKeyframes(){if(keyframesInjected||typeof document==="undefined")return;const t=document.createElement("style");t.textContent=(0,_floatingToolsReact.getDialCSSKeyframesString)();document.head.appendChild(t);keyframesInjected=true}const easeOutCubic=t=>1-Math.pow(1-t,3);const easeInCubic=t=>t*t*t;function DialIconItem({icon:t,index:c,totalIcons:j,position:u,progress:a,onPress:g}){const[x,k]=(0,_react.useState)(false);const[O,S]=(0,_react.useState)(false);const m=!t.icon&&t.id.startsWith("empty-");const T=!m&&t.unavailable===true;const C=!m&&!T;const{icons:W}=_floatingToolsReact.dialAnimationConfig;const w=(0,_floatingToolsReact.getIconStaggerInputRange)(c,j);let s=0;if(a<=w[1]){s=0}else if(a<=w[2]){s=(a-w[1])/(w[2]-w[1])}else{s=1}s=Math.max(0,Math.min(1,s));const z=_floatingToolsReact.DIAL_ICON_SIZE;const D=W.pressIn.scale;const H=1.1;const E=s*(O?D:x?H:1);let A=0;if(s<=0){A=0}else if(s<=.3){A=s}else{A=.3+(s-.3)*(.7/.7)}const q=u.x*(s-1);const U=u.y*(s-1);return(0,_jsxRuntime.jsx)("button",{role:"menuitem","aria-label":m?"Empty slot":(0,_dialA11y.dialAccessibilityLabel)(t.id,t.name),"data-testid":t.id?`buoy-dial-${t.id}`:void 0,"aria-disabled":!C,tabIndex:C?0:-1,onClick:C?g:void 0,onPointerEnter:K=>C&&K.pointerType==="mouse"&&k(true),onPointerLeave:()=>{k(false);S(false)},onPointerDown:()=>C&&S(true),onPointerUp:()=>S(false),onPointerCancel:()=>S(false),style:{position:"absolute",left:`calc(50% + ${u.x}px)`,top:`calc(50% + ${u.y}px)`,width:z,height:z,marginLeft:-z/2,marginTop:-z/2,cursor:C?"pointer":"default",background:"none",border:"none",padding:0},children:(0,_jsxRuntime.jsx)("span",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",transform:`translate(${q}px, ${U}px) scale(${E})`,opacity:A,transition:x||O?"transform 100ms ease":"none"},children:m?(0,_jsxRuntime.jsx)("div",{style:{width:_floatingToolsReact.dialStyles.emptySlot.dotSize,height:_floatingToolsReact.dialStyles.emptySlot.dotSize,borderRadius:_floatingToolsReact.dialStyles.emptySlot.dotSize/2,backgroundColor:_floatingToolsReact.dialColors.emptyDotBackground,border:`${_floatingToolsReact.dialStyles.emptySlot.borderWidth}px solid ${_floatingToolsReact.dialColors.emptyDotBorder}`}}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.gradientBgSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.gradientBgBorderRadius,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:_floatingToolsReact.dialStyles.icon.gradientBgOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",width:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,height:`${_floatingToolsReact.dialStyles.icon.innerGlowSizePercent}%`,borderRadius:_floatingToolsReact.dialStyles.icon.innerGlowBorderRadius,backgroundColor:"rgba(255, 255, 255, 0.02)",opacity:_floatingToolsReact.dialStyles.icon.innerGlowOpacity}}),(0,_jsxRuntime.jsx)("div",{style:{marginBottom:_floatingToolsReact.dialStyles.icon.wrapperMarginBottom,display:"flex",alignItems:"center",justifyContent:"center",fontSize:32,filter:x?"brightness(1.2)":"none"},children:t.icon}),(0,_jsxRuntime.jsx)("span",{style:{fontSize:t.name.length>8?Math.max(_floatingToolsReact.dialStyles.icon.label.fontSize*.7,_floatingToolsReact.dialStyles.icon.label.fontSize*8/t.name.length):_floatingToolsReact.dialStyles.icon.label.fontSize,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,color:_floatingToolsReact.dialColors.iconLabel,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,marginTop:_floatingToolsReact.dialStyles.icon.label.marginTop,textTransform:"uppercase",whiteSpace:"nowrap"},children:t.name}),T&&(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.icon.label.fontSize-1,fontWeight:_floatingToolsReact.dialStyles.icon.label.fontWeight,fontFamily:_floatingToolsReact.dialStyles.icon.label.fontFamily,letterSpacing:_floatingToolsReact.dialStyles.icon.label.letterSpacing,color:_floatingToolsReact.floatingToolsColors.muted,textTransform:"uppercase",whiteSpace:"nowrap"},children:"Unavailable"})]})})})}function PagerChevron({side:t,color:c}){const j=t==="prev"?[[15,18,9,12],[9,12,15,6]]:[[9,18,15,12],[15,12,9,6]];return(0,_jsxRuntime.jsx)("svg",{width:18,height:18,viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false",children:j.map(([u,a,g,x],k)=>(0,_jsxRuntime.jsx)("line",{x1:u,y1:a,x2:g,y2:x,stroke:c,strokeWidth:2},k))})}function PagerButton({side:t,disabled:c,onClick:j}){const[u,a]=(0,_react.useState)(false);const g=c?_floatingToolsReact.dialColors.emptyDotBorder:_floatingToolsReact.dialColors.accent;return(0,_jsxRuntime.jsxs)("button",{type:"button","aria-label":`${t==="prev"?"Previous":"Next"} dial page`,"data-testid":`buoy-dial-${t}`,disabled:c,onClick:j,onPointerDown:()=>!c&&a(true),onPointerUp:()=>a(false),onPointerLeave:()=>a(false),onPointerCancel:()=>a(false),style:{display:"flex",alignItems:"center",gap:4,padding:"10px 16px",borderRadius:10,border:`1px solid ${_floatingToolsReact.dialColors.dialBorder}`,backgroundColor:_floatingToolsReact.dialColors.dialBackground,color:c?_floatingToolsReact.dialColors.iconLabelMuted:_floatingToolsReact.dialColors.centerText,fontSize:12,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:1.5,textTransform:"uppercase",cursor:c?"default":"pointer",opacity:c?.4:1,boxShadow:c?"none":`0 0 8px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,.4)}`,transform:u?"scale(0.92)":"scale(1)",transition:"transform 100ms ease"},children:[t==="prev"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"prev",color:g}),t==="prev"?"PREV":"NEXT",t==="next"&&(0,_jsxRuntime.jsx)(PagerChevron,{side:"next",color:g})]})}function DialMenu({icons:t,onClose:c,centerLabel:j="MENU",onCenterPress:u,settingsOpen:a=false,hintsDisabled:g=false,emptyNote:x}){const{id:k}=(0,_sharedUi.useToolBackground)();const[O,S]=(0,_react.useState)(0);const[m,T]=(0,_react.useState)(0);const[C,W]=(0,_react.useState)(0);const[w,s]=(0,_react.useState)(0);const[z,D]=(0,_react.useState)(0);const[H,E]=(0,_react.useState)(1);const[A,q]=(0,_react.useState)(false);const[U,K]=(0,_react.useState)(false);const[ie,ae]=(0,_react.useState)(false);const N=(0,_react.useRef)(null);const Q=(0,_react.useRef)(null);const y=(0,_react.useRef)(null);const L=(0,_react.useRef)(false);const{entrance:_,exit:$,interaction:F}=_floatingToolsReact.dialAnimationConfig;const re=(0,_floatingToolsReact.getDialCSSAnimationStyles)();const[X,se]=(0,_react.useState)(()=>({width:window.innerWidth,height:window.innerHeight}));(0,_react.useEffect)(()=>{const o=()=>se({width:window.innerWidth,height:window.innerHeight});window.addEventListener("resize",o);return()=>window.removeEventListener("resize",o)},[]);const n=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getDialLayout)({screenWidth:X.width,maxCircleSize:Math.max(120,Math.min(320,X.height-96))}),[X]);const le=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getGridLineRotations)(),[]);const ce=(0,_react.useMemo)(()=>(0,_floatingToolsReact.getAllIconPositions)(_floatingToolsReact.MAX_DIAL_SLOTS,n.iconRadius),[n.iconRadius]);const[de,ue]=(0,_react.useState)(0);const I=Math.max(1,Math.ceil(t.length/_floatingToolsReact.MAX_DIAL_SLOTS));const h=Math.min(de,I-1);const ee=(0,_react.useMemo)(()=>{const o=h*_floatingToolsReact.MAX_DIAL_SLOTS;const e=[...t.slice(o,o+_floatingToolsReact.MAX_DIAL_SLOTS)];while(e.length<_floatingToolsReact.MAX_DIAL_SLOTS){e.push({id:`empty-${e.length}`,name:"",icon:null,onPress:()=>{}})}return e},[t,h]);(0,_react.useEffect)(()=>{injectKeyframes()},[]);(0,_react.useEffect)(()=>{const o=_.backdrop.duration;const e=_.dial.rotation.duration;const d=_.centerButton.delay;const r=_.icons.delay;const l=_.icons.duration;const p=performance.now();const f=v=>{const i=v-p;S(Math.min(1,i/o));const b=Math.min(1,i/400);let P=easeOutCubic(b)*1.1;if(b>.7){P-=(b-.7)*.33}if(b>=1)P=1;T(Math.max(0,Math.min(1.05,P)));const B=Math.min(1,i/e);W(easeOutCubic(B)*360);if(i>=d){const M=Math.min(1,(i-d)/300);let J=easeOutCubic(M)*1.15;if(M>.6){J-=(M-.6)*.375}if(M>=1)J=1;s(Math.max(0,Math.min(1.05,J)))}if(i>=r){const M=Math.min(1,(i-r)/l);D(easeOutCubic(M))}const Z=r+l;if(i<Z){y.current=requestAnimationFrame(f)}else{S(1);T(1);W(360);s(1);D(1);ae(true)}};y.current=requestAnimationFrame(f);return()=>{if(y.current)cancelAnimationFrame(y.current)}},[]);const R=(0,_react.useCallback)(()=>{if(L.current)return;L.current=true;K(true);if(y.current){cancelAnimationFrame(y.current)}const o=performance.now();const e=$.icons.duration;const d=$.centerButton.duration;const r=$.dialScale.duration;const l=Math.max(d,r);const p=$.backdrop.duration;const f=v=>{const i=v-o;if(i<e){const B=easeInCubic(i/e);D(1-B);y.current=requestAnimationFrame(f);return}const b=e;if(i<b+l){D(0);const B=Math.min(1,(i-b)/d);const Z=Math.min(1,(i-b)/r);s(1-easeInCubic(B));T(1-easeInCubic(Z));y.current=requestAnimationFrame(f);return}const P=b+l;if(i<P+p){T(0);s(0);const B=(i-P)/p;S(1-B);y.current=requestAnimationFrame(f);return}S(0);c()};y.current=requestAnimationFrame(f)},[$,c]);(0,_capacitorBackButton.useCapacitorBackButton)(true,()=>{if(L.current)return;if(a)u?.();else R()},_capacitorBackButton.BUOY_DIAL_BACK_PRIORITY);(0,_react.useEffect)(()=>{const o=document.activeElement;const e=N.current;return()=>{if(o?.isConnected&&(document.activeElement===document.body||e?.contains(document.activeElement))){o.focus()}}},[]);(0,_react.useEffect)(()=>{if(a)return;Q.current?.focus();const o=e=>{const d=N.current;if(!d)return;if(e.key==="Escape"){e.preventDefault();R()}else if(e.key==="Tab"){const r=Array.from(d.querySelectorAll('button:not(:disabled):not([aria-disabled="true"]), [tabindex="0"]')).filter(f=>f.getClientRects().length>0);const l=r[0];const p=r[r.length-1];if(!d.contains(document.activeElement)||(e.shiftKey?document.activeElement===l:document.activeElement===p)){e.preventDefault();(e.shiftKey?p:l)?.focus()}}else if(["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(e.key)){const r=Array.from(d.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])'));const l=r.indexOf(document.activeElement);if(l<0||!r.length)return;e.preventDefault();const p=e.key==="Home"?0:e.key==="End"?r.length-1:(l+(e.key==="ArrowRight"||e.key==="ArrowDown"?1:-1)+r.length)%r.length;r[p].focus()}};document.addEventListener("keydown",o);return()=>document.removeEventListener("keydown",o)},[R,a]);const[Y,te]=(0,_react.useState)(false);(0,_react.useEffect)(()=>{if(g)return;let o=false;const e=setTimeout(async()=>{const d=await _sharedUi.persistentStorage.getItem(SETTINGS_TOOLTIP_KEY);if(!o&&!d)te(true)},1200);return()=>{o=true;clearTimeout(e)}},[g]);const V=(0,_react.useCallback)(()=>{te(false);void _sharedUi.persistentStorage.setItem(SETTINGS_TOOLTIP_KEY,"true")},[]);(0,_react.useEffect)(()=>{if(a&&Y){V()}},[a,Y,V]);const pe=(0,_react.useCallback)(o=>{if(o.id.startsWith("empty-")||L.current)return;const[e,d]=F.iconSelect.pulse;const r=performance.now();const l=150;const p=f=>{const v=f-r;if(v<l){const i=easeOutCubic(v/l);E(1-(1-e.scale)*i);requestAnimationFrame(p)}else if(v<l*2){const i=easeOutCubic((v-l)/l);E(e.scale+(d.scale-e.scale)*i);requestAnimationFrame(p)}else{E(1)}};requestAnimationFrame(p);setTimeout(()=>{o.onPress();R()},F.iconSelect.actionDelay)},[F.iconSelect,R]);const oe=(0,_react.useCallback)(o=>{if(L.current)return;const e=Math.max(0,Math.min(o,I-1));if(e!==h)ue(e)},[I,h]);const G=n.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio;const ne=n.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRatio;const fe=n.buttonSize*_floatingToolsReact.dialStyles.centerButton.containerRatio/2+6;const me=ie&&!U;return(0,_jsxRuntime.jsxs)("div",{ref:N,role:"dialog","aria-label":"Dial Menu","aria-modal":"true",style:{position:"fixed",inset:0,zIndex:1e4},children:[(0,_jsxRuntime.jsx)("button",{type:"button","aria-label":"Close dial menu",tabIndex:0,onClick:R,style:{position:"absolute",inset:0,border:0,padding:0,backgroundColor:_floatingToolsReact.dialColors.dialBackdrop,opacity:O}}),x?(0,_jsxRuntime.jsx)("div",{role:"status","data-testid":"buoy-dial-empty-note",style:{position:"absolute",left:16,right:16,bottom:80+n.circleSize+16,color:_floatingToolsReact.dialColors.iconLabel,fontSize:12,fontFamily:_sharedUi.monoFont,textAlign:"center",opacity:m>.01?1:0},children:x}):null,(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-n.circleSize/2,bottom:80,width:n.circleSize,height:n.circleSize,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialBackground,border:`${_floatingToolsReact.dialStyles.circle.borderWidth}px solid ${_floatingToolsReact.dialColors.dialBorder}`,boxShadow:`0 0 ${_floatingToolsReact.dialStyles.circle.shadowRadius}px ${(0,_floatingToolsReact.withAlpha)(_floatingToolsReact.dialColors.dialShadow,_floatingToolsReact.dialStyles.circle.shadowOpacity)}`,transform:`scale(${m}) rotate(${C}deg)`,opacity:m>.01?1:0,overflow:"hidden"},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:_floatingToolsReact.dialStyles.gradientLayers[0].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"30%",left:"30%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:_floatingToolsReact.dialStyles.gradientLayers[1].opacity}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"50%",left:"50%",borderRadius:"50%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:_floatingToolsReact.dialStyles.gradientLayers[2].opacity}}),le.map(o=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:_floatingToolsReact.dialStyles.grid.lineHeight,transform:`rotate(${o}deg)`,transformOrigin:"center"},children:["left","right"].map(e=>(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",top:0,[e]:0,width:`calc(50% - ${fe}px)`,height:_floatingToolsReact.dialStyles.grid.lineHeight,backgroundColor:_floatingToolsReact.dialColors.dialGridLine}},e))},o)),(0,_jsxRuntime.jsx)("div",{"data-testid":"dial-background","data-background":k,style:{position:"absolute",inset:0,pointerEvents:"none"},children:k==="hyperspace"?(0,_jsxRuntime.jsx)(_DialHyperspace.DialHyperspace,{size:n.circleSize}):(0,_jsxRuntime.jsx)(_sharedUi.ToolBackground,{focus:DIAL_BACKGROUND_FOCUS})}),ee.map((o,e)=>(0,_jsxRuntime.jsx)(DialIconItem,{icon:o,index:e,totalIcons:ee.length,position:ce[e],progress:z,onPress:()=>pe(o)},e)),(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",top:"50%",width:G,height:G,marginLeft:-G/2,marginTop:-G/2,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:_floatingToolsReact.dialColors.hubHalo,borderRadius:n.buttonSize,overflow:"hidden",transform:`scale(${w*H})`,opacity:w>.01?1:0},children:[(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,backgroundColor:_floatingToolsReact.dialColors.dialGradient1,opacity:.5,borderRadius:n.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"20%",left:"20%",backgroundColor:_floatingToolsReact.dialColors.dialGradient2,opacity:.3,borderRadius:n.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{position:"absolute",inset:0,top:"40%",left:"40%",backgroundColor:_floatingToolsReact.dialColors.dialGradient3,opacity:.2,borderRadius:n.buttonSize}}),(0,_jsxRuntime.jsx)("div",{style:{width:ne,height:ne,borderRadius:n.buttonSize*_floatingToolsReact.dialStyles.centerButton.borderRadiusRatio,backgroundColor:_floatingToolsReact.dialColors.hubFill,display:"flex",alignItems:"center",justifyContent:"center"},children:(0,_jsxRuntime.jsx)("button",{ref:Q,type:"button","aria-label":a?"Close Settings":"Open Dev Tools Settings",disabled:!u,onClick:u,onPointerEnter:o=>o.pointerType==="mouse"&&q(true),onPointerLeave:()=>q(false),style:{border:0,padding:0,background:"transparent",width:n.buttonSize,height:n.buttonSize,borderRadius:n.buttonSize/2,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:u?"pointer":"default",transform:A?`scale(${F.centerHover.scale})`:"scale(1)",transition:`transform ${F.centerHover.duration}ms ease`,animation:me&&!A?re.pulse:"none"},children:a?(0,_jsxRuntime.jsxs)("span",{style:{display:"flex",flexDirection:"column",alignItems:"center",fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize-2,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase",lineHeight:1.2},children:[(0,_jsxRuntime.jsx)("span",{style:{marginBottom:-2},children:"CLOSE"}),(0,_jsxRuntime.jsx)("span",{style:{marginTop:-2},children:"SETTINGS"})]}):(0,_jsxRuntime.jsx)("span",{style:{fontSize:_floatingToolsReact.dialStyles.centerButton.text.fontSize,fontWeight:_floatingToolsReact.dialStyles.centerButton.text.fontWeight,fontFamily:_floatingToolsReact.dialStyles.centerButton.text.fontFamily,color:_floatingToolsReact.dialColors.centerText,letterSpacing:_floatingToolsReact.dialStyles.centerButton.text.letterSpacing,textAlign:"center",textShadow:`0 0 4px ${_floatingToolsReact.dialColors.centerTextGlow}`,textTransform:"uppercase"},children:j})})})]})]}),I>1&&(0,_jsxRuntime.jsxs)("div",{style:{position:"absolute",left:"50%",marginLeft:-n.circleSize/2,top:"calc(100% - 64px)",width:n.circleSize,display:"flex",alignItems:"center",justifyContent:"space-between",opacity:Math.min(1,m),transform:`scale(${Math.min(1,m)})`},children:[(0,_jsxRuntime.jsx)(PagerButton,{side:"prev",disabled:h<=0,onClick:()=>oe(h-1)}),(0,_jsxRuntime.jsxs)("span",{"data-testid":"buoy-dial-page",style:{padding:"6px 12px",fontSize:13,fontWeight:900,fontFamily:_sharedUi.monoFont,letterSpacing:2,color:_floatingToolsReact.dialColors.centerText,textShadow:`0 0 6px ${_floatingToolsReact.dialColors.centerTextGlow}`},children:[String(h+1).padStart(2,"0"),(0,_jsxRuntime.jsxs)("span",{style:{color:_floatingToolsReact.dialColors.iconLabelMuted,textShadow:"none"},children:[" / ",String(I).padStart(2,"0")]})]}),(0,_jsxRuntime.jsx)(PagerButton,{side:"next",disabled:h>=I-1,onClick:()=>oe(h+1)})]}),Y&&!a&&(0,_jsxRuntime.jsx)(_OnboardingTooltipWeb.OnboardingTooltip,{title:"Welcome to Buoy!",message:"Tap the center button to configure and add tools to your dial menu.",onDismiss:V,showArrow:false})]})}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RELEASE_GATED_ACTIONS=exports.RELEASE_DEFAULT_SOCKET_URL=void 0;exports.applyReleaseActionPolicy=applyReleaseActionPolicy;exports.externalSyncOptions=externalSyncOptions;exports.releaseTransportProblem=releaseTransportProblem;exports.shouldMountExternalSync=shouldMountExternalSync;function externalSyncOptions(e){return typeof e==="object"&&e!==null?e:void 0}function shouldMountExternalSync({isDevelopment:e,isLicensed:n,externalSync:r,isAvailable:t}){if(r===false)return false;if(!t)return false;if(e)return true;const o=externalSyncOptions(r);return n&&o?.enableInRelease===true&&releaseTransportProblem(o.socketURL,o)===null}const RELEASE_DEFAULT_SOCKET_URL=exports.RELEASE_DEFAULT_SOCKET_URL="http://localhost:42831";function isLoopbackHost(e){return e==="localhost"||e.endsWith(".localhost")||/^127\.\d+\.\d+\.\d+$/.test(e)||e==="[::1]"||e==="::1"||e==="10.0.2.2"}function releaseTransportProblem(e,n){const r=e??RELEASE_DEFAULT_SOCKET_URL;if(n?.allowInsecureNetwork===true)return null;let t;try{t=new URL(r)}catch{return`[Buoy] externalSync.socketURL "${r}" 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(isLoopbackHost(t.hostname))return null;return`[Buoy] This release build won't connect to ${r}: 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.`}const RELEASE_GATED_ACTIONS=exports.RELEASE_GATED_ACTIONS={impersonate:["searchUsers","startImpersonation","resumeImpersonation","updateSettings","removeFromHistory","clearHistory"]};function applyReleaseActionPolicy(e,n,r){if(n)return e;let t=null;for(const[o,u]of Object.entries(RELEASE_GATED_ACTIONS)){if(r?.includes(o))continue;const s=e[o];if(!s?.actions)continue;const a={...s.actions};for(const l of u){if(!(l in a))continue;a[l]=()=>{throw new Error(`${o}.${l} is off in release builds. To allow it from Buoy Desktop and the MCP, pass externalSync={{ enableInRelease: true, releaseActions: ["${o}"] }}.`)}}t??={...e};t[o]={...s,actions:a}}return t??e}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.RELEASE_GATED_ACTIONS=exports.RELEASE_DEFAULT_SOCKET_URL=void 0;exports.applyReleaseActionPolicy=applyReleaseActionPolicy;exports.externalSyncOptions=externalSyncOptions;exports.releaseTransportProblem=releaseTransportProblem;exports.shouldMountExternalSync=shouldMountExternalSync;function externalSyncOptions(e){return typeof e==="object"&&e!==null?e:void 0}function shouldMountExternalSync({isDevelopment:e,isLicensed:n,externalSync:r,isAvailable:t}){if(r===false)return false;if(!t)return false;if(e)return true;const o=externalSyncOptions(r);return n&&o?.enableInRelease===true&&releaseTransportProblem(o.socketURL,o)===null}const RELEASE_DEFAULT_SOCKET_URL=exports.RELEASE_DEFAULT_SOCKET_URL="http://localhost:42831";function isLoopbackHost(e){return e==="localhost"||e.endsWith(".localhost")||/^127\.\d+\.\d+\.\d+$/.test(e)||e==="[::1]"||e==="::1"||e==="10.0.2.2"}function releaseTransportProblem(e,n){const r=e??RELEASE_DEFAULT_SOCKET_URL;if(n?.allowInsecureNetwork===true)return null;let t;try{t=new URL(r)}catch{return`[Buoy] externalSync.socketURL "${r}" 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(isLoopbackHost(t.hostname))return null;return`[Buoy] This release build won't connect to ${r}: 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.`}const RELEASE_GATED_ACTIONS=exports.RELEASE_GATED_ACTIONS={"ota-update-inspector":["check","fetch","reload","setHeaders","setURL"],impersonate:["searchUsers","startImpersonation","resumeImpersonation","updateSettings","removeFromHistory","clearHistory"]};function applyReleaseActionPolicy(e,n,r){if(n)return e;let t=null;for(const[o,u]of Object.entries(RELEASE_GATED_ACTIONS)){if(r?.includes(o))continue;const s=e[o];if(!s?.actions)continue;const a={...s.actions};for(const l of u){if(!(l in a))continue;a[l]=()=>{throw new Error(`${o}.${l} is off in release builds. To allow it from Buoy Desktop and the MCP, pass externalSync={{ enableInRelease: true, releaseActions: ["${o}"] }}.`)}}t??={...e};t[o]={...s,actions:a}}return t??e}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"resolveBackTarget",{enumerable:true,get:function(){return _backTarget.resolveBackTarget}});exports.useHardwareBack=useHardwareBack;var _react=require("react");var _reactNative=require("react-native");var _backTarget=require("./backTarget.js");function useHardwareBack(e,r){const t=(0,_react.useRef)(r);t.current=r;(0,_react.useEffect)(()=>{if(!e||_reactNative.Platform.OS!=="android")return;const a=_reactNative.BackHandler.addEventListener("hardwareBackPress",()=>t.current());return()=>a.remove()},[e])}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.78";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.79";
@@ -1 +1 @@
1
- "use strict";const p=100;export function installEarlyNetworkRecorder(){if(typeof window==="undefined")return;const u=window;if(u.__BUOY_EARLY_NETWORK__)return;const d=Date.now;let f=true;const i=[];const y=c=>{i.push(c);if(i.length>p){const e=i.shift();if(e?.kind==="fetch")void e.settled.then(r=>r.clone?.body?.cancel()).catch(()=>{})}};const h=typeof window.fetch==="function"?window.fetch:void 0;if(h){window.fetch=function c(e,r){if(r?.__buoyInternal)return h.call(window,e,r);if(!f)return h.call(window,e,r);let l;try{if(e instanceof Request&&e.body&&!e.bodyUsed&&r?.body===void 0)l=e.clone()}catch{}const a=d();const o=h.call(window,e,r);const n=o.then(t=>{const s=d();const _=/event-stream|ndjson/.test(t.headers.get("content-type")??"");let w;try{if(!_)w=t.clone()}catch{}return{response:t,clone:w,headersAt:s}},t=>({error:t,headersAt:d()}));y({kind:"fetch",input:e,init:r,requestCopy:l,start:a,settled:n});return o}}if(typeof XMLHttpRequest!=="undefined"){const c=XMLHttpRequest.prototype;const{open:e,send:r,setRequestHeader:l}=c;const a=new WeakMap;c.open=function(o,n,...t){if(f)a.set(this,{method:o,url:String(n),headers:{}});return e.call(this,o,n,...t)};c.setRequestHeader=function(o,n){const t=a.get(this);if(t)t.headers[o]=n;return l.call(this,o,n)};c.send=function(o){const n=a.get(this);if(f&&n){a.delete(this);const t=d();const s=this;s.addEventListener("readystatechange",()=>{if(s.readyState===2&&s._buoyTtfb===void 0)s._buoyTtfb=d()-t;if(s.readyState===4)s._buoyEarlyEnd=d()});y({kind:"xhr",xhr:s,method:n.method,url:n.url,headers:n.headers,body:o,start:t})}return r.call(this,o)}}u.__BUOY_EARLY_NETWORK__={version:1,records:i,adopt(){f=false;return i.splice(0)}}}
1
+ "use strict";export const EARLY_NETWORK_KEY=Symbol.for("buoy.earlyNetwork");export const LEGACY_EARLY_NETWORK_KEY="__BUOY_EARLY_NETWORK__";const g=100;export function installEarlyNetworkRecorder(){if(typeof window==="undefined")return;const u=window;if(u[EARLY_NETWORK_KEY]||u[LEGACY_EARLY_NETWORK_KEY])return;const d=Date.now;let i=true;const f=[];const y=s=>{f.push(Object.freeze(s));if(f.length>g){const e=f.shift();if(e?.kind==="fetch")void e.settled.then(r=>r.clone?.body?.cancel()).catch(()=>{})}};const l=typeof window.fetch==="function"?window.fetch:void 0;if(l){window.fetch=function s(e,r){if(r?.__buoyInternal)return l.call(window,e,r);if(!i)return l.call(window,e,r);let h;try{if(e instanceof Request&&e.body&&!e.bodyUsed&&r?.body===void 0)h=e.clone()}catch{}const a=d();const o=l.call(window,e,r);const n=o.then(t=>{const c=d();const E=/event-stream|ndjson/.test(t.headers.get("content-type")??"");let _;try{if(!E)_=t.clone()}catch{}return{response:t,clone:_,headersAt:c}},t=>({error:t,headersAt:d()}));y({kind:"fetch",input:e,init:r,requestCopy:h,start:a,settled:n});return o}}if(typeof XMLHttpRequest!=="undefined"){const s=XMLHttpRequest.prototype;const{open:e,send:r,setRequestHeader:h}=s;const a=new WeakMap;s.open=function(o,n,...t){if(i)a.set(this,{method:o,url:String(n),headers:{}});return e.call(this,o,n,...t)};s.setRequestHeader=function(o,n){const t=a.get(this);if(t)t.headers[o]=n;return h.call(this,o,n)};s.send=function(o){const n=a.get(this);if(i&&n){a.delete(this);const t=d();const c=this;c.addEventListener("readystatechange",()=>{if(c.readyState===2&&c._buoyTtfb===void 0)c._buoyTtfb=d()-t;if(c.readyState===4)c._buoyEarlyEnd=d()});y({kind:"xhr",xhr:c,method:n.method,url:n.url,headers:n.headers,body:o,start:t})}return r.call(this,o)}}const w=()=>{i=false;return f.splice(0)};const p=Object.freeze({version:1,get pending(){return f.length},adopt:w});const b=(s,e)=>{try{Object.defineProperty(u,s,{value:e,enumerable:false,writable:false,configurable:false})}catch{}};b(EARLY_NETWORK_KEY,p);b(LEGACY_EARLY_NETWORK_KEY,Object.freeze({version:1,adopt:w}))}
@@ -1 +1 @@
1
- "use strict";import{persistentStorage as T,setExpandableWindowControls as F}from"@buoy-gg/shared-ui";import R,{createContext as H,useCallback as z,useContext as j,useMemo as B,useState as C,useEffect as y,useRef as v}from"react";import{BackHandler as W,Modal as $,StyleSheet as P,View as x}from"react-native";import{resolveOpenAppsState as q}from"./AppHostLogic.js";import{renderAppIcon as J}from"./AppIcon";import{useMinimizedTools as _}from"./MinimizedToolsContext.js";import{ToolModalShell as L}from"./ToolHost.js";import{useDevToolsSettings as V}from"./DevToolsSettingsModal";import{jsx as m,Fragment as Y}from"react/jsx-runtime";const k=H(null);const w="@react_buoy_open_apps";const G=500;export const AppHostProvider=({children:n})=>{const[s,l]=C([]);const[c,u]=C(false);const f=v(null);const a=v([]);const d=v(null);const{restore:g}=_();const M=z(t=>{let i="";l(r=>{const{apps:o,instanceId:S,wasMinimized:N}=q(r,t,()=>`${t.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);i=S;if(N){setTimeout(()=>g(S),0)}return o});return i},[g]);const e=z(()=>{if(c)return;if(!a.current.length)return;const t=d.current;if(!t||t.length===0){u(true);return}d.current=null;t.forEach(({id:i,minimized:r})=>{const o=a.current.find(S=>S.id===i);if(o){const S=J(o.icon,{slot:"dial",size:20,color:o.color});M({id:o.id,title:o.name,component:o.component,props:o.props,launchMode:o.launchMode||"self-modal",singleton:o.singleton,icon:S,color:o.color,modal:o.modal,minimized:r})}});u(true)},[c,M]);y(()=>{const t=async()=>{try{const i=await T.getItem(w);if(i){const r=JSON.parse(i);let o;if(Array.isArray(r)&&r.length>0){if(typeof r[0]==="string"){o=r.map(S=>({id:S,minimized:false}))}else{o=r}if(o.length){d.current=o;e();return}}}}catch(i){}u(true)};t()},[e]);y(()=>{if(!c)return;if(f.current){clearTimeout(f.current)}f.current=setTimeout(()=>{const t=s.map(i=>({id:i.id,minimized:i.minimized??false}));T.setItem(w,JSON.stringify(t))},G);return()=>{if(f.current){clearTimeout(f.current)}}},[s,c]);const I=z(t=>{a.current=t;e()},[e]);const h=z(t=>{l(i=>{if(!i.length)return i;if(!t)return i.slice(0,-1);return i.filter(r=>r.instanceId!==t)})},[]);const p=z(()=>l([]),[]);const A=z(t=>{l(i=>i.map(r=>r.instanceId===t?{...r,minimized:true}:r))},[]);const b=z((t,i)=>{l(r=>r.map(o=>o.instanceId===t?{...o,minimized:false,restoreState:i}:o))},[]);const E=z(t=>{const i=s.find(r=>r.instanceId===t);return i?.minimized??false},[s]);R.useEffect(()=>{if(s.length===0)return;const t=()=>{h();return true};const i=W.addEventListener("hardwareBackPress",t);return()=>i.remove()},[s.length,h]);const D=B(()=>({openApps:s,isAnyOpen:s.filter(t=>t.launchMode!=="toggle-only"&&!t.minimized).length>0,open:M,close:h,closeAll:p,registerApps:I,minimize:A,restore:b,isMinimized:E}),[s,M,h,p,I,A,b,E]);return m(k.Provider,{value:D,children:n})};export const useAppHost=()=>{const n=j(k);if(!n){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},minimize:()=>{},restore:(s,l)=>{},isMinimized:()=>false}}return n};const K=({app:n,zIndex:s,onClose:l,onMinimize:c,minimizeTargetPosition:u,globalEnableSharedModalDimensions:f})=>{const a=n.component;const d=!n.minimized;const g={...n.props??{},...f===true?{enableSharedModalDimensions:true}:{}};if(n.modal&&(n.launchMode==="self-modal"||!n.launchMode)){return m(L,{app:n,config:n.modal,visible:d,zIndex:s,onClose:l,onMinimize:c,initialModalState:n.restoreState,enableSharedModalDimensions:f===true,bodyProps:g})}if(n.launchMode==="self-modal"){return m(a,{...g,visible:d,onClose:l,onRequestClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:n.restoreState,instanceId:n.instanceId,zIndex:s})}if(n.launchMode==="inline"){if(!d)return null;return m(x,{pointerEvents:"box-none",style:[P.absoluteFill,{zIndex:s}],children:m(a,{...g,onClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:n.restoreState,instanceId:n.instanceId})})}return m($,{visible:d,transparent:true,animationType:"slide",onRequestClose:l,children:m(x,{style:O.backdrop,children:m(x,{style:O.card,children:m(a,{...g,onClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:n.restoreState,instanceId:n.instanceId})})})})};export const AppOverlay=()=>{const{openApps:n,close:s,minimize:l}=useAppHost();const{minimize:c,restore:u,getNextIconPosition:f,minimizedTools:a}=_();const{settings:d}=V();y(()=>{F(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);R.useEffect(()=>{n.forEach(e=>{if(e.minimized&&e.launchMode!=="toggle-only"){const I=a.some(h=>h.instanceId===e.instanceId);if(!I){c({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color})}}});a.forEach(e=>{const I=n.find(h=>h.instanceId===e.instanceId);if(!I||!I.minimized){u(e.instanceId)}})},[n,a,c,u]);const g=n.filter(e=>e.launchMode!=="toggle-only");if(g.length===0)return null;const M=9e3;return m(Y,{children:g.map((e,I)=>{const h=M+I;const p=f();const A=b=>{l(e.instanceId);c({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color,modalState:b})};return m(K,{app:e,zIndex:h,onClose:()=>s(e.instanceId),onMinimize:A,minimizeTargetPosition:p,globalEnableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions},e.instanceId)})})};const O=P.create({backdrop:{flex:1,backgroundColor:"rgba(0,0,0,0.28)",alignItems:"center",justifyContent:"center"},card:{maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"}});
1
+ "use strict";import{persistentStorage as E,setExpandableWindowControls as F}from"@buoy-gg/shared-ui";import H,{createContext as j,useCallback as S,useContext as B,useMemo as V,useState as R,useEffect as y,useRef as v}from"react";import{Modal as W,StyleSheet as C,View as x}from"react-native";import{resolveOpenAppsState as $,restoreOpenApp as q}from"./AppHostLogic.js";import{renderAppIcon as J}from"./AppIcon";import{useMinimizedTools as P}from"./MinimizedToolsContext.js";import{ToolModalShell as Y}from"./ToolHost.js";import{useDevToolsSettings as G}from"./DevToolsSettingsModal";import{useDevToolsVisibility as K}from"./DevToolsVisibilityContext.js";import{resolveBackTarget as L,useHardwareBack as X}from"./hardwareBack.js";import{jsx as m,Fragment as Z}from"react/jsx-runtime";const k=j(null);const O="@react_buoy_open_apps";const Q=500;export const AppHostProvider=({children:t})=>{const[s,l]=R([]);const[c,u]=R(false);const f=v(null);const a=v([]);const d=v(null);const{restore:g}=P();const z=S(n=>{let i="";l(o=>{const{apps:r,instanceId:I,wasMinimized:N}=$(o,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);i=I;if(N){setTimeout(()=>g(I),0)}return r});return i},[g]);const e=S(()=>{if(c)return;if(!a.current.length)return;const n=d.current;if(!n||n.length===0){u(true);return}d.current=null;n.forEach(({id:i,minimized:o})=>{const r=a.current.find(I=>I.id===i);if(r){const I=J(r.icon,{slot:"dial",size:20,color:r.color});z({id:r.id,title:r.name,component:r.component,props:r.props,launchMode:r.launchMode||"self-modal",singleton:r.singleton,icon:I,color:r.color,modal:r.modal,minimized:o})}});u(true)},[c,z]);y(()=>{const n=async()=>{try{const i=await E.getItem(O);if(i){const o=JSON.parse(i);let r;if(Array.isArray(o)&&o.length>0){if(typeof o[0]==="string"){r=o.map(I=>({id:I,minimized:false}))}else{r=o}if(r.length){d.current=r;e();return}}}}catch(i){}u(true)};n()},[e]);y(()=>{if(!c)return;if(f.current){clearTimeout(f.current)}f.current=setTimeout(()=>{const n=s.map(i=>({id:i.id,minimized:i.minimized??false}));E.setItem(O,JSON.stringify(n))},Q);return()=>{if(f.current){clearTimeout(f.current)}}},[s,c]);const h=S(n=>{a.current=n;e()},[e]);const p=S(n=>{l(i=>{if(!i.length)return i;if(!n)return i.slice(0,-1);return i.filter(o=>o.instanceId!==n)})},[]);const M=S(()=>l([]),[]);const A=S(n=>{l(i=>i.map(o=>o.instanceId===n?{...o,minimized:true}:o))},[]);const b=S((n,i)=>{l(o=>q(o,n,i))},[]);const T=S(n=>{const i=s.find(o=>o.instanceId===n);return i?.minimized??false},[s]);const{isDialOpen:w}=K();X(s.length>0,()=>{const n=L(s,w);if(n?.kind!=="tool")return false;p(n.instanceId);return true});const D=V(()=>({openApps:s,isAnyOpen:s.filter(n=>n.launchMode!=="toggle-only"&&!n.minimized).length>0,open:z,close:p,closeAll:M,registerApps:h,minimize:A,restore:b,isMinimized:T}),[s,z,p,M,h,A,b,T]);return m(k.Provider,{value:D,children:t})};export const useAppHost=()=>{const t=B(k);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},minimize:()=>{},restore:(s,l)=>{},isMinimized:()=>false}}return t};const U=({app:t,zIndex:s,onClose:l,onMinimize:c,minimizeTargetPosition:u,globalEnableSharedModalDimensions:f})=>{const a=t.component;const d=!t.minimized;const g={...t.props??{},...f===true?{enableSharedModalDimensions:true}:{}};if(t.modal&&(t.launchMode==="self-modal"||!t.launchMode)){return m(Y,{app:t,config:t.modal,visible:d,zIndex:s,onClose:l,onMinimize:c,initialModalState:t.restoreState,enableSharedModalDimensions:f===true,bodyProps:g})}if(t.launchMode==="self-modal"){return m(a,{...g,visible:d,onClose:l,onRequestClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:t.restoreState,instanceId:t.instanceId,zIndex:s})}if(t.launchMode==="inline"){if(!d)return null;return m(x,{pointerEvents:"box-none",style:[C.absoluteFill,{zIndex:s}],children:m(a,{...g,onClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:t.restoreState,instanceId:t.instanceId})})}return m(W,{visible:d,transparent:true,animationType:"slide",onRequestClose:l,children:m(x,{style:_.backdrop,children:m(x,{style:_.card,children:m(a,{...g,onClose:l,onMinimize:c,minimizeTargetPosition:u,initialModalState:t.restoreState,instanceId:t.instanceId})})})})};export const AppOverlay=()=>{const{openApps:t,close:s,minimize:l}=useAppHost();const{minimize:c,restore:u,getNextIconPosition:f,minimizedTools:a}=P();const{settings:d}=G();y(()=>{F(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);H.useEffect(()=>{t.forEach(e=>{if(e.minimized&&e.launchMode!=="toggle-only"){const h=a.some(p=>p.instanceId===e.instanceId);if(!h){c({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color})}}});a.forEach(e=>{const h=t.find(p=>p.instanceId===e.instanceId);if(!h||!h.minimized){u(e.instanceId)}})},[t,a,c,u]);const g=t.filter(e=>e.launchMode!=="toggle-only");if(g.length===0)return null;const z=9e3;return m(Z,{children:g.map((e,h)=>{const p=z+h;const M=f();const A=b=>{l(e.instanceId);c({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color,modalState:b})};return m(U,{app:e,zIndex:p,onClose:()=>s(e.instanceId),onMinimize:A,minimizeTargetPosition:M,globalEnableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions},e.instanceId)})})};const _=C.create({backdrop:{flex:1,backgroundColor:"rgba(0,0,0,0.28)",alignItems:"center",justifyContent:"center"},card:{maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"}});
@@ -1 +1 @@
1
- "use strict";import{listenBuoyKeydown as D}from"@buoy-gg/shared-ui/floating";import{persistentStorage as P,setExpandableWindowControls as $}from"@buoy-gg/shared-ui";import{createContext as B,useCallback as p,useContext as F,useEffect as M,useMemo as H,useRef as S,useState as w}from"react";import{resolveOpenAppsState as N}from"./AppHostLogic.js";import{renderAppIcon as j}from"./AppIcon";import{ToolModalShell as W}from"./ToolHost.js";import{useDevToolsSettings as G}from"./DevToolsSettingsModal.shared.js";import{getBubbleAnchorPosition as J}from"./floatingTools.web.js";import{useCapacitorBackButton as K}from"./capacitorBackButton.js";import{jsx as c,Fragment as V}from"react/jsx-runtime";const _=B(null);const T="@react_buoy_open_apps";const z=44;const Z=12;const q=100;const X=16;const Y=t=>({x:window.innerWidth-z-X,y:window.innerHeight-q-z-t*(z+Z)});export const AppHostProvider=({children:t})=>{const[i,d]=w([]);const[a,u]=w(false);const g=S([]);const m=S(null);const r=S(false);const f=S(false);const b=S(false);const A=p(n=>{let o="";d(s=>{const{apps:e,instanceId:l}=N(s,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=l;return e});return o},[]);const v=p(()=>{if(r.current||!f.current||!b.current)return;r.current=true;const n=m.current;if(!n||n.length===0){u(true);return}m.current=null;n.forEach(({id:o,minimized:s})=>{const e=g.current.find(l=>l.id===o);if(e&&e.component){const l=j(e.icon,{slot:"dial",size:20,color:e.color});A({id:e.id,title:e.name,component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:l,color:e.color,minimized:s})}});u(true)},[A]);M(()=>{let n=false;const o=async()=>{try{const s=await P.getItem(T);if(n)return;if(s){const e=JSON.parse(s);let l;if(Array.isArray(e)&&e.length>0){if(typeof e[0]==="string"){l=e.map(y=>({id:y,minimized:false}))}else{l=e.filter(y=>typeof y==="object"&&y!==null&&typeof y.id==="string")}if(l.length){m.current=l}}}}catch{}if(n)return;f.current=true;v()};void o();return()=>{n=true}},[v]);M(()=>{if(!a)return;const n=i.map(o=>({id:o.id,minimized:o.minimized??false}));void P.setItem(T,JSON.stringify(n))},[i,a]);const x=p(n=>{g.current=n;b.current=true;v()},[v]);const h=p(n=>{d(o=>{if(!o.length)return o;if(!n)return o.slice(0,-1);return o.filter(s=>s.instanceId!==n)})},[]);const C=p(()=>d([]),[]);const O=p((n,o)=>{d(s=>s.map(e=>e.instanceId===n?{...e,minimized:true,restoreState:o}:e))},[]);const R=p((n,o)=>{d(s=>{const e=s.find(l=>l.instanceId===n);if(!e)return s;return[...s.filter(l=>l!==e),{...e,minimized:false,restoreState:o??e.restoreState}]})},[]);const E=p(n=>{const o=i.find(s=>s.instanceId===n);return o?.minimized??false},[i]);const I=i.some(n=>n.launchMode!=="toggle-only"&&!n.minimized);M(()=>{if(!I)return;const n=o=>{if(o.key!=="Escape")return;if(o.defaultPrevented)return;const s=[...i].reverse().find(e=>e.launchMode!=="toggle-only"&&!e.minimized);if(s)h(s.instanceId)};return D(n)},[I,h,i]);K(i.length>0,()=>h());const k=H(()=>({openApps:i,isAnyOpen:I,open:A,close:h,closeAll:C,registerApps:x,minimize:O,restore:R,isMinimized:E}),[i,I,A,h,C,x,O,R,E]);return c(_.Provider,{value:k,children:t})};export const useAppHost=()=>{const t=F(_);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},registerApps:()=>{},minimize:()=>{},restore:()=>{},isMinimized:()=>false}}return t};const L=9e3;const Q={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"};const U={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"};const ee=({app:t,zIndex:i,onClose:d,onMinimize:a,minimizeTargetPosition:u,enableSharedModalDimensions:g})=>{const m=t.component;const r=!t.minimized;const f={...t.props??{},...g?{enableSharedModalDimensions:true}:{}};if(t.modal&&(!t.launchMode||t.launchMode==="self-modal")){return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:i,pointerEvents:"none"},children:c(W,{app:t,config:t.modal,visible:r,zIndex:i,onClose:d,onMinimize:a,initialModalState:t.restoreState,enableSharedModalDimensions:g,bodyProps:f})})}if(t.launchMode==="self-modal"){return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:i,pointerEvents:"none"},children:c(m,{...f,visible:r,onClose:d,onRequestClose:d,onMinimize:a,minimizeTargetPosition:u,instanceId:t.instanceId,zIndex:i,initialModalState:t.restoreState})})}if(t.launchMode==="inline"){if(!r)return null;return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:i,pointerEvents:"none"},children:c(m,{...f,onClose:d,onMinimize:a,minimizeTargetPosition:u,initialModalState:t.restoreState,instanceId:t.instanceId})})}return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{...Q,zIndex:i,display:r?"flex":"none"},children:c("div",{style:U,children:c(m,{...f,onClose:d,onMinimize:a,minimizeTargetPosition:u,initialModalState:t.restoreState,instanceId:t.instanceId})})})};export const AppOverlay=()=>{const{openApps:t,close:i,minimize:d}=useAppHost();const{settings:a}=G();M(()=>{$(a.globalSettings?.expandableWindowControls!==false)},[a.globalSettings?.expandableWindowControls]);const u=t.filter(r=>r.launchMode!=="toggle-only");if(u.length===0)return null;const g=u.filter(r=>r.minimized).length;const m=J()??Y(g);return c(V,{children:u.map((r,f)=>c(ee,{app:r,zIndex:L+f,onClose:()=>i(r.instanceId),onMinimize:b=>d(r.instanceId,b),enableSharedModalDimensions:a.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:m},r.instanceId))})};
1
+ "use strict";import{listenBuoyKeydown as B}from"@buoy-gg/shared-ui/floating";import{persistentStorage as P,setExpandableWindowControls as $}from"@buoy-gg/shared-ui";import{createContext as F,useCallback as p,useContext as H,useEffect as M,useMemo as N,useRef as b,useState as w}from"react";import{resolveOpenAppsState as j,restoreOpenApp as W}from"./AppHostLogic.js";import{renderAppIcon as G}from"./AppIcon";import{ToolModalShell as V}from"./ToolHost.js";import{useDevToolsSettings as J}from"./DevToolsSettingsModal.shared.js";import{getBubbleAnchorPosition as K}from"./floatingTools.web.js";import{useCapacitorBackButton as Z}from"./capacitorBackButton.js";import{resolveBackTarget as q}from"./backTarget.js";import{useDevToolsVisibility as X}from"./DevToolsVisibilityContext.js";import{jsx as c,Fragment as Y}from"react/jsx-runtime";const T=F(null);const _="@react_buoy_open_apps";const z=44;const L=12;const Q=100;const U=16;const ee=t=>({x:window.innerWidth-z-U,y:window.innerHeight-Q-z-t*(z+L)});export const AppHostProvider=({children:t})=>{const[i,l]=w([]);const[d,a]=w(false);const g=b([]);const m=b(null);const r=b(false);const f=b(false);const A=b(false);const S=p(e=>{let o="";l(s=>{const{apps:n,instanceId:u}=j(s,e,()=>`${e.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=u;return n});return o},[]);const v=p(()=>{if(r.current||!f.current||!A.current)return;r.current=true;const e=m.current;if(!e||e.length===0){a(true);return}m.current=null;e.forEach(({id:o,minimized:s})=>{const n=g.current.find(u=>u.id===o);if(n&&n.component){const u=G(n.icon,{slot:"dial",size:20,color:n.color});S({id:n.id,title:n.name,component:n.component,props:n.props,modal:n.modal,launchMode:n.launchMode||"self-modal",singleton:n.singleton??true,icon:u,color:n.color,minimized:s})}});a(true)},[S]);M(()=>{let e=false;const o=async()=>{try{const s=await P.getItem(_);if(e)return;if(s){const n=JSON.parse(s);let u;if(Array.isArray(n)&&n.length>0){if(typeof n[0]==="string"){u=n.map(y=>({id:y,minimized:false}))}else{u=n.filter(y=>typeof y==="object"&&y!==null&&typeof y.id==="string")}if(u.length){m.current=u}}}}catch{}if(e)return;f.current=true;v()};void o();return()=>{e=true}},[v]);M(()=>{if(!d)return;const e=i.map(o=>({id:o.id,minimized:o.minimized??false}));void P.setItem(_,JSON.stringify(e))},[i,d]);const x=p(e=>{g.current=e;A.current=true;v()},[v]);const h=p(e=>{l(o=>{if(!o.length)return o;if(!e)return o.slice(0,-1);return o.filter(s=>s.instanceId!==e)})},[]);const O=p(()=>l([]),[]);const C=p((e,o)=>{l(s=>s.map(n=>n.instanceId===e?{...n,minimized:true,restoreState:o}:n))},[]);const R=p((e,o)=>{l(s=>W(s,e,o))},[]);const E=p(e=>{const o=i.find(s=>s.instanceId===e);return o?.minimized??false},[i]);const I=i.some(e=>e.launchMode!=="toggle-only"&&!e.minimized);M(()=>{if(!I)return;const e=o=>{if(o.key!=="Escape")return;if(o.defaultPrevented)return;const s=[...i].reverse().find(n=>n.launchMode!=="toggle-only"&&!n.minimized);if(s)h(s.instanceId)};return B(e)},[I,h,i]);const{isDialOpen:k}=X();Z(i.length>0,()=>{const e=q(i,k);if(e?.kind==="tool")h(e.instanceId)});const D=N(()=>({openApps:i,isAnyOpen:I,open:S,close:h,closeAll:O,registerApps:x,minimize:C,restore:R,isMinimized:E}),[i,I,S,h,O,x,C,R,E]);return c(T.Provider,{value:D,children:t})};export const useAppHost=()=>{const t=H(T);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},registerApps:()=>{},minimize:()=>{},restore:()=>{},isMinimized:()=>false}}return t};const te=9e3;const ne={position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.28)",display:"flex",alignItems:"center",justifyContent:"center"};const oe={maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"};const ie=({app:t,zIndex:i,onClose:l,onMinimize:d,minimizeTargetPosition:a,enableSharedModalDimensions:g})=>{const m=t.component;const r=!t.minimized;const f={...t.props??{},...g?{enableSharedModalDimensions:true}:{}};if(t.modal&&(!t.launchMode||t.launchMode==="self-modal")){return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:i,pointerEvents:"none"},children:c(V,{app:t,config:t.modal,visible:r,zIndex:i,onClose:l,onMinimize:d,initialModalState:t.restoreState,enableSharedModalDimensions:g,bodyProps:f})})}if(t.launchMode==="self-modal"){return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:i,pointerEvents:"none"},children:c(m,{...f,visible:r,onClose:l,onRequestClose:l,onMinimize:d,minimizeTargetPosition:a,instanceId:t.instanceId,zIndex:i,initialModalState:t.restoreState})})}if(t.launchMode==="inline"){if(!r)return null;return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{position:"fixed",inset:0,zIndex:i,pointerEvents:"none"},children:c(m,{...f,onClose:l,onMinimize:d,minimizeTargetPosition:a,initialModalState:t.restoreState,instanceId:t.instanceId})})}return c("div",{"data-testid":`buoy-tool-instance-${t.id}`,style:{...ne,zIndex:i,display:r?"flex":"none"},children:c("div",{style:oe,children:c(m,{...f,onClose:l,onMinimize:d,minimizeTargetPosition:a,initialModalState:t.restoreState,instanceId:t.instanceId})})})};export const AppOverlay=()=>{const{openApps:t,close:i,minimize:l}=useAppHost();const{settings:d}=J();M(()=>{$(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);const a=t.filter(r=>r.launchMode!=="toggle-only");if(a.length===0)return null;const g=a.filter(r=>r.minimized).length;const m=K()??ee(g);return c(Y,{children:a.map((r,f)=>c(ie,{app:r,zIndex:te+f,onClose:()=>i(r.instanceId),onMinimize:A=>l(r.instanceId,A),enableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions===true,minimizeTargetPosition:m},r.instanceId))})};
@@ -1 +1 @@
1
- "use strict";export const resolveOpenAppsState=(n,s,a)=>{if(s.singleton){const i=n.find(e=>e.id===s.id);if(i){const e=i.minimized??false;return{instanceId:i.instanceId,wasMinimized:e,apps:[...n.filter(d=>d.instanceId!==i.instanceId),{...i,minimized:false}]}}}const t=a();return{instanceId:t,wasMinimized:false,apps:[...n,{...s,instanceId:t}]}};
1
+ "use strict";export const resolveOpenAppsState=(e,s,t)=>{if(s.singleton){const i=e.find(a=>a.id===s.id);if(i){const a=i.minimized??false;return{instanceId:i.instanceId,wasMinimized:a,apps:[...e.filter(p=>p.instanceId!==i.instanceId),{...i,minimized:false}]}}}const n=t();return{instanceId:n,wasMinimized:false,apps:[...e,{...s,instanceId:n}]}};export const restoreOpenApp=(e,s,t)=>{const n=e.find(i=>i.instanceId===s);if(!n)return e;return[...e.filter(i=>i!==n),{...n,minimized:false,restoreState:t??n.restoreState}]};
@@ -1 +1 @@
1
- "use strict";import{FloatingToolHost as le}from"@buoy-gg/shared-ui";import{AccountSetup as ae,setBuoyAppId as ge,startSettingsSync as ye}from"@buoy-gg/shared-ui";import $e,{useMemo as t,useCallback as pe,useEffect as m}from"react";import{View as G,StyleSheet as K}from"react-native";import{AppHostProvider as de}from"./AppHost";import{TeamToolCloser as me}from"./TeamToolCloser.js";import{NO_TEAM_TOOLS_NOTE as fe}from"./teamToolsNote.js";import{FloatingMenu as ve}from"./FloatingMenu.js";import{AppOverlay as be}from"./AppHost";import{ToolOpenerBridge as he}from"./ToolOpenerBridge.js";import{autoDiscoverPresets as Te,autoDiscoverPresetsWithCustom as Oe}from"./autoDiscoverPresets.js";import{sendInstallPing as Ae}from"../telemetry/installPing.js";import{defaultLicenseKey as qe,isTelemetryEnabled as Ie}from"../Buoy.js";import{renderAppIcon as Re}from"./AppIcon";import{DevToolsVisibilityProvider as _e}from"./DevToolsVisibilityContext.js";import{reportOptionalRequireError as n}from"./optionalRequire.js";import{HintsProvider as Ee,normalizeEnvironment as xe}from"@buoy-gg/shared-ui";import{MinimizedToolsProvider as Pe}from"./MinimizedToolsContext.js";import{validateDialConfig as Se}from"./defaultConfig.js";import{DefaultConfigProvider as ke}from"./DefaultConfigContext.js";import{LicenseManager as De,useProAccess as Me,useLicense as Ce,sameLicenseKey as Le}from"@buoy-gg/license";import*as ze from"@buoy-gg/license";import{filterTeamTools as je}from"@buoy-gg/floating-tools-core";import{BuoySignIn as X}from"./BuoySignIn";import{AutoExternalSync as Y,ToolRegistryPublisher as we,isExternalSyncAvailable as Fe}from"./autoExternalSync.js";import{externalSyncOptions as j,releaseTransportProblem as He,shouldMountExternalSync as Be}from"./externalSyncGate.js";import{jsx as r,Fragment as _,jsxs as f}from"react/jsx-runtime";let Z=null;function Ne(i){if(!i||i===Z)return;Z=i;console.warn("[Buoy]",i)}function ee(i){if(i&&typeof i==="object"&&i.appId)return i.appId;try{const{Platform:s}=require("react-native");const u=require("expo-constants");const l=(u?.default??u)?.expoConfig;const v=s.OS==="android"?l?.android?.package:l?.ios?.bundleIdentifier;if(typeof v==="string"&&v)return v}catch{}try{const s=require("expo-application");const u=(s?.default??s)?.applicationId;if(typeof u==="string"&&u)return u}catch{}return null}export const FloatingDevTools=({apps:i,requiredEnvVars:s,requiredStorageKeys:u,askBuoy:l,children:v,disableHints:re=false,defaultFloatingTools:te,defaultDialTools:h,requireLicense:Ue,licenseKey:T,zustandStores:E,environment:oe,externalSync:O=true,headless:x=false,signIn:A,...w})=>{const ne=oe??xe(process.env.NODE_ENV??"dev");const{isLicensed:q}=Me();const{licenseKey:P,isInitialized:F,tier:I,access:c,allowedTools:R}=Ce();const ie=T===void 0||Le(T,P);const S=ie&&c.status==="admitted";m(()=>{if(!F||c.status==="initializing")return;void Ae({tier:c.status==="admitted"?I:"locked",enabled:Ie()})},[F,c.status,I]);const b=A?ee(A):null;m(()=>{if(!b)return;const e=ze.SessionManager;if(!e)return;e.configure({audience:`app:${b}`});void e.load().catch(()=>{})},[b]);m(()=>{ge(b??ee(true))},[b]);m(()=>{void De.configure(T??qe()).catch(()=>{})},[T]);m(()=>{if(S)ye()},[S]);m(()=>{if(!E||c.status==="locked")return;try{const{watchStores:e}=require("@buoy-gg/zustand");return e(E)}catch(e){n("@buoy-gg/zustand",e)}},[E,c.status]);const se=t(()=>{if(h){return Se(h)}return h},[h]);const k=t(()=>{const e=[];if(s&&s.length>0){try{const{createEnvTool:o,createEnvVarConfig:z}=require("@buoy-gg/env");e.push(o({requiredEnvVars:z(s)}))}catch(o){n("@buoy-gg/env",o)}}if(u&&u.length>0){try{const{createStorageTool:o}=require("@buoy-gg/storage");e.push(o({requiredStorageKeys:u}))}catch(o){n("@buoy-gg/storage",o)}}if(l){try{const{createAskBuoyTool:o}=require("@buoy-gg/ask-buoy");e.push(o(l))}catch(o){n("@buoy-gg/ask-buoy",o)}}return e},[s,u,l]);const D=t(()=>{if(!i&&k.length===0)return void 0;return[...i||[],...k]},[i,k]);const a=t(()=>D?Oe(D):Te(),[D]);const M=t(()=>a.filter(e=>e.sync),[a]);const ue=t(()=>je(a,R),[a,R]);const H=t(()=>{try{const{DebugBordersStandaloneOverlay:e}=require("@buoy-gg/debug-borders");return e}catch(e){n("@buoy-gg/debug-borders",e);return null}},[]);const B=t(()=>{try{const{HighlightUpdatesOverlay:e}=require("@buoy-gg/highlight-updates");return e}catch(e){n("@buoy-gg/highlight-updates",e);return null}},[]);const N=t(()=>{try{const{ImageOverlayStandalone:e}=require("@buoy-gg/image-overlay");return e}catch(e){n("@buoy-gg/image-overlay",e);return null}},[]);const V=t(()=>{try{const{PerfMonitorOverlay:e}=require("@buoy-gg/perf-monitor");return e}catch(e){n("@buoy-gg/perf-monitor",e);return null}},[]);const U=t(()=>{try{const{JsTopHudOverlay:e}=require("@buoy-gg/js-top");return e}catch(e){n("@buoy-gg/js-top",e);return null}},[]);const g=t(()=>{try{const{RouteTracker:e}=require("@buoy-gg/route-events");return e}catch(e){n("@buoy-gg/route-events",e);return null}},[]);const y=t(()=>{try{const{ReactQueryTracker:e}=require("@buoy-gg/react-query");return e}catch(e){n("@buoy-gg/react-query",e);return null}},[]);const J=t(()=>{try{const{ImpersonateOverlay:e}=require("@buoy-gg/impersonate");return e}catch(e){n("@buoy-gg/impersonate",e);return null}},[]);const Q=t(()=>{try{const{ScenariosOverlay:e}=require("@buoy-gg/scenarios");return e}catch(e){n("@buoy-gg/scenarios",e);return null}},[]);const p=t(()=>{try{const{ReduxAutoInstrument:e}=require("@buoy-gg/redux");return e??null}catch(e){n("@buoy-gg/redux",e);return null}},[]);const d=t(()=>{try{const{ConsoleRoot:e}=require("@buoy-gg/console");return e??null}catch(e){n("@buoy-gg/console",e);return null}},[]);const ce=pe(e=>{const o=a.find(z=>z.id===e);if(!o)return null;return Re(o.icon,{slot:"dial",size:20,color:o.color})},[a]);const C=typeof __DEV__!=="undefined"&&__DEV__;if(!C&&!q){return A&&!x?r(X,{needsPlan:true}):null}const W=Be({isDevelopment:C,isLicensed:q,externalSync:O,isAvailable:Fe()});const L=j(O);if(!C&&L?.enableInRelease){Ne(He(L.socketURL,L))}const $=r(we,{requiredEnvVars:s,customApps:M});if(!S){return f(_,{children:[c.status==="initializing"&&f(_,{children:[p&&r(p,{}),d&&r(d,{}),g&&r(g,{}),y&&r(y,{})]}),!x&&(A?r(X,{}):r(ae,{}))]})}if(x){return f(_,{children:[p&&r(p,{}),d&&r(d,{}),g&&r(g,{}),y&&r(y,{}),$,W&&r(Y,{options:j(O),requiredEnvVars:s,isPro:q,tier:I,licenseKey:P,customApps:M})]})}return r(ke,{defaultFloatingTools:te,defaultDialTools:se,children:r(Ee,{disableHints:re,children:r(G,{style:Ve.container,pointerEvents:"box-none",__buoyDevToolsRoot:true,children:f(_e,{children:[N&&r(G,{style:K.absoluteFill,pointerEvents:"box-none",collapsable:false,children:r(N,{})}),r(de,{children:f(Pe,{getToolIcon:ce,children:[r(ve,{...w,apps:ue,emptyNote:R?fe:void 0,environment:ne}),w.hidden?null:f(_,{children:[r(be,{}),r(le,{})]}),r(he,{}),r(me,{allowedTools:R??null})]})}),v,H&&r(H,{}),B&&r(B,{}),V&&r(V,{}),U&&r(U,{}),J&&r(J,{}),Q&&r(Q,{}),p&&r(p,{}),d&&r(d,{}),g&&r(g,{}),y&&r(y,{}),$,W&&r(Y,{options:j(O),requiredEnvVars:s,isPro:q,tier:I,licenseKey:P,customApps:M})]})})})})};const Ve=K.create({container:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:9999}});
1
+ "use strict";import{FloatingToolHost as ge}from"@buoy-gg/shared-ui";import{AccountSetup as ye,setBuoyAppId as pe,startSettingsSync as de}from"@buoy-gg/shared-ui";import Ke,{useMemo as t,useCallback as me,useEffect as f}from"react";import{View as X,StyleSheet as Y}from"react-native";import{AppHostProvider as fe}from"./AppHost";import{TeamToolCloser as be}from"./TeamToolCloser.js";import{NO_TEAM_TOOLS_NOTE as ve}from"./teamToolsNote.js";import{FloatingMenu as he}from"./FloatingMenu.js";import{AppOverlay as Oe}from"./AppHost";import{ToolOpenerBridge as Te}from"./ToolOpenerBridge.js";import{autoDiscoverPresets as Ae,autoDiscoverPresetsWithCustom as Re}from"./autoDiscoverPresets.js";import{sendInstallPing as qe}from"../telemetry/installPing.js";import{defaultLicenseKey as Ie,isTelemetryEnabled as _e}from"../Buoy.js";import{renderAppIcon as Ee}from"./AppIcon";import{DevToolsVisibilityProvider as ke}from"./DevToolsVisibilityContext.js";import{reportOptionalRequireError as o}from"./optionalRequire.js";import{HintsProvider as xe,normalizeEnvironment as Pe}from"@buoy-gg/shared-ui";import{MinimizedToolsProvider as Se}from"./MinimizedToolsContext.js";import{validateDialConfig as De}from"./defaultConfig.js";import{DefaultConfigProvider as Le}from"./DefaultConfigContext.js";import{LicenseManager as Me,useProAccess as Ce,useLicense as ze,sameLicenseKey as je}from"@buoy-gg/license";import*as we from"@buoy-gg/license";import{filterTeamTools as Be}from"@buoy-gg/floating-tools-core";import{BuoySignIn as Z}from"./BuoySignIn";import{AutoExternalSync as ee,ToolRegistryPublisher as Fe,isExternalSyncAvailable as He}from"./autoExternalSync.js";import{externalSyncOptions as w,releaseTransportProblem as Ne,shouldMountExternalSync as Ve}from"./externalSyncGate.js";import{jsx as r,Fragment as E,jsxs as b}from"react/jsx-runtime";let re=null;function Ue(i){if(!i||i===re)return;re=i;console.warn("[Buoy]",i)}function te(i){if(i&&typeof i==="object"&&i.appId)return i.appId;try{const{Platform:s}=require("react-native");const u=require("expo-constants");const l=(u?.default??u)?.expoConfig;const v=s.OS==="android"?l?.android?.package:l?.ios?.bundleIdentifier;if(typeof v==="string"&&v)return v}catch{}try{const s=require("expo-application");const u=(s?.default??s)?.applicationId;if(typeof u==="string"&&u)return u}catch{}return null}export const FloatingDevTools=({apps:i,requiredEnvVars:s,requiredStorageKeys:u,askBuoy:l,children:v,disableHints:oe=false,defaultFloatingTools:ne,defaultDialTools:O,requireLicense:Qe,licenseKey:T,zustandStores:k,environment:ie,externalSync:A=true,headless:x=false,signIn:R,...B})=>{const se=ie??Pe(process.env.NODE_ENV??"dev");const{isLicensed:q}=Ce();const{licenseKey:P,isInitialized:F,tier:I,access:c,allowedTools:_}=ze();const ue=T===void 0||je(T,P);const S=ue&&c.status==="admitted";f(()=>{if(!F||c.status==="initializing")return;void qe({tier:c.status==="admitted"?I:"locked",enabled:_e()})},[F,c.status,I]);const h=R?te(R):null;f(()=>{if(!h)return;const e=we.SessionManager;if(!e)return;e.configure({audience:`app:${h}`});void e.load().catch(()=>{})},[h]);f(()=>{pe(h??te(true))},[h]);f(()=>{void Me.configure(T??Ie()).catch(()=>{})},[T]);f(()=>{if(S)de()},[S]);f(()=>{if(!k||c.status==="locked")return;try{const{watchStores:e}=require("@buoy-gg/zustand");return e(k)}catch(e){o("@buoy-gg/zustand",e)}},[k,c.status]);const ce=t(()=>{if(O){return De(O)}return O},[O]);const D=t(()=>{const e=[];if(s&&s.length>0){try{const{createEnvTool:n,createEnvVarConfig:j}=require("@buoy-gg/env");e.push(n({requiredEnvVars:j(s)}))}catch(n){o("@buoy-gg/env",n)}}if(u&&u.length>0){try{const{createStorageTool:n}=require("@buoy-gg/storage");e.push(n({requiredStorageKeys:u}))}catch(n){o("@buoy-gg/storage",n)}}if(l){try{const{createAskBuoyTool:n}=require("@buoy-gg/ask-buoy");e.push(n(l))}catch(n){o("@buoy-gg/ask-buoy",n)}}return e},[s,u,l]);const L=t(()=>{if(!i&&D.length===0)return void 0;return[...i||[],...D]},[i,D]);const a=t(()=>L?Re(L):Ae(),[L]);const M=t(()=>a.filter(e=>e.sync),[a]);const le=t(()=>Be(a,_),[a,_]);const H=t(()=>{try{const{DebugBordersStandaloneOverlay:e}=require("@buoy-gg/debug-borders");return e}catch(e){o("@buoy-gg/debug-borders",e);return null}},[]);const N=t(()=>{try{const{HighlightUpdatesOverlay:e}=require("@buoy-gg/highlight-updates");return e}catch(e){o("@buoy-gg/highlight-updates",e);return null}},[]);const V=t(()=>{try{const{ImageOverlayStandalone:e}=require("@buoy-gg/image-overlay");return e}catch(e){o("@buoy-gg/image-overlay",e);return null}},[]);const U=t(()=>{try{const{PerfMonitorOverlay:e}=require("@buoy-gg/perf-monitor");return e}catch(e){o("@buoy-gg/perf-monitor",e);return null}},[]);const J=t(()=>{try{const{JsTopHudOverlay:e}=require("@buoy-gg/js-top");return e}catch(e){o("@buoy-gg/js-top",e);return null}},[]);const g=t(()=>{try{const{RouteTracker:e}=require("@buoy-gg/route-events");return e}catch(e){o("@buoy-gg/route-events",e);return null}},[]);const y=t(()=>{try{const{ReactQueryTracker:e}=require("@buoy-gg/react-query");return e}catch(e){o("@buoy-gg/react-query",e);return null}},[]);const Q=t(()=>{try{const{ImpersonateOverlay:e}=require("@buoy-gg/impersonate");return e}catch(e){o("@buoy-gg/impersonate",e);return null}},[]);const W=t(()=>{try{const{BugLinksOverlay:e}=require("@buoy-gg/bug-links");return e??null}catch(e){o("@buoy-gg/bug-links",e);return null}},[]);const $=t(()=>{try{const{ScenariosOverlay:e}=require("@buoy-gg/scenarios");return e}catch(e){o("@buoy-gg/scenarios",e);return null}},[]);const p=t(()=>{try{const{ReduxAutoInstrument:e}=require("@buoy-gg/redux");return e??null}catch(e){o("@buoy-gg/redux",e);return null}},[]);const d=t(()=>{try{const{ConsoleRoot:e}=require("@buoy-gg/console");return e??null}catch(e){o("@buoy-gg/console",e);return null}},[]);const m=t(()=>{try{const{OtaInspectorRoot:e}=require("@buoy-gg/ota-inspector");return e??null}catch(e){o("@buoy-gg/ota-inspector",e);return null}},[]);const ae=me(e=>{const n=a.find(j=>j.id===e);if(!n)return null;return Ee(n.icon,{slot:"dial",size:20,color:n.color})},[a]);const C=typeof __DEV__!=="undefined"&&__DEV__;if(!C&&!q){return R&&!x?r(Z,{needsPlan:true}):null}const G=Ve({isDevelopment:C,isLicensed:q,externalSync:A,isAvailable:He()});const z=w(A);if(!C&&z?.enableInRelease){Ue(Ne(z.socketURL,z))}const K=r(Fe,{requiredEnvVars:s,customApps:M});if(!S){return b(E,{children:[c.status==="initializing"&&b(E,{children:[p&&r(p,{}),d&&r(d,{}),m&&r(m,{}),g&&r(g,{}),y&&r(y,{})]}),!x&&(R?r(Z,{}):r(ye,{}))]})}if(x){return b(E,{children:[p&&r(p,{}),d&&r(d,{}),m&&r(m,{}),g&&r(g,{}),y&&r(y,{}),K,G&&r(ee,{options:w(A),requiredEnvVars:s,isPro:q,tier:I,licenseKey:P,customApps:M})]})}return r(Le,{defaultFloatingTools:ne,defaultDialTools:ce,children:r(xe,{disableHints:oe,children:r(X,{style:Je.container,pointerEvents:"box-none",__buoyDevToolsRoot:true,children:b(ke,{children:[V&&r(X,{style:Y.absoluteFill,pointerEvents:"box-none",collapsable:false,children:r(V,{})}),r(fe,{children:b(Se,{getToolIcon:ae,children:[r(he,{...B,apps:le,emptyNote:_?ve:void 0,environment:se}),B.hidden?null:b(E,{children:[r(Oe,{}),r(ge,{})]}),r(Te,{}),r(be,{allowedTools:_??null})]})}),v,H&&r(H,{}),N&&r(N,{}),U&&r(U,{}),J&&r(J,{}),Q&&r(Q,{}),W&&r(W,{}),$&&r($,{}),p&&r(p,{}),d&&r(d,{}),m&&r(m,{}),g&&r(g,{}),y&&r(y,{}),K,G&&r(ee,{options:w(A),requiredEnvVars:s,isPro:q,tier:I,licenseKey:P,customApps:M})]})})})})};const Je=Y.create({container:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:9999}});
@@ -1 +1 @@
1
- "use strict";import{BuoyPortal as ke,FloatingToolHost as xe}from"@buoy-gg/shared-ui/floating";import*as Re from"@buoy-gg/license";import{LicenseManager as Be,useLicense as de,sameLicenseKey as Le,resolveDevBuild as Fe,capacitorDebug as je,isCapacitorNative as ue,loadCapacitorAppHost as fe}from"@buoy-gg/license";import{AccountSetup as Ne,HintsProvider as Ve,normalizeEnvironment as ze,registerToolOpener as pe,setBuoyAppId as H,startSettingsSync as Ke}from"@buoy-gg/shared-ui";import{useState as U,useMemo as g,useCallback as D,useEffect as d,useRef as me}from"react";import{useSettings as We,getToolLabel as R,getToolDescription as He,getToolColor as ge}from"@buoy-gg/floating-tools-react";import{persistentStorage as h,devToolsStorageKeys as B,EnvironmentIndicator as Ue,EnvironmentSelectorInline as $e}from"@buoy-gg/shared-ui";import{autoDiscoverWithCustom as Ye,getToolsBySlot as Te}from"../utils/autoDiscoverPresets.web.js";import{filterTeamTools as Ge,isTeamToolAllowed as Qe}from"@buoy-gg/floating-tools-core";import{NO_TEAM_TOOLS_NOTE as Je}from"./teamToolsNote.js";import{FloatingTools as Xe,UserStatus as Ze}from"./floatingTools.web.js";import{DialMenu as qe}from"./dial/DialDevTools.web.js";import{getRankedToolIds as en,recordToolUsage as nn}from"./dial/dialUsageStore.js";import{OnboardingTooltip as on}from"./dial/OnboardingTooltip.web.js";import{SettingsModal as tn}from"./DevToolsSettingsModal.web.js";import{AppHostProvider as sn,AppOverlay as rn,useAppHost as ve}from"./AppHost.web.js";import{MinimizedToolsStack as ln}from"./MinimizedToolsStack.web.js";import{createWebTools as an}from"../utils/createWebTools.js";import{BrowserToolRuntime as cn}from"./BrowserToolRuntime.js";import{clearReleaseOptIn as dn,markReleaseOptIn as un}from"../releaseOptIn.js";import{BuoySignIn as fn}from"./BuoySignIn.web.js";import{defaultLicenseKey as pn}from"../Buoy.js";import{BuoySignIn as ye}from"./BuoyCodeSignIn.js";import{DevToolsVisibilityProvider as mn,useDevToolsVisibility as gn}from"./DevToolsVisibilityContext.js";import{createWebTool as $}from"../utils/createWebTool.js";import{DefaultConfigProvider as Tn}from"./DefaultConfigContext.js";import{useDevToolsSettings as vn}from"./DevToolsSettingsModal.shared.js";import{validateDialConfig as he}from"./defaultConfig.js";import{installedTools as yn,installedToolsFound as hn}from"../installedTools.js";import{jsx as t,jsxs as _,Fragment as Y}from"react/jsx-runtime";const be={};const Oe="@react_buoy_floating_menu_tooltip_shown";const bn=h;function On({size:n=14,color:i="#20C997"}){const s=Math.max(2,n/4);const l=Math.max(1,n/16);return t("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${s}px)`,gap:l,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((a,r)=>t("div",{style:{width:s,height:s,borderRadius:s/2,backgroundColor:i}},r))})}function Sn(n){const{defaultFloatingTools:i,defaultDialTools:s,disableHints:l=false,children:a}=n;const r=g(()=>s?he(s):s,[s]);return t(Tn,{defaultFloatingTools:i,defaultDialTools:r,children:t(Ve,{disableHints:l,children:_(mn,{children:[t(sn,{children:t(wn,{...n})}),a]})})})}const In=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function Cn({modules:n=be}){return t(Y,{children:Object.entries(n).flatMap(([i,s])=>In.map(l=>{const a=s[l];return a?t(a,{},`${i}:${l}`):null}))})}function Dn(){const{openApps:n,restore:i}=ve();d(()=>pe(s=>{const l=n.find(a=>a.id===s);if(!l)return false;i(l.instanceId);return true}),[n,i]);return null}function An(){const n=je();const i=n===null?process.env.NODE_ENV:n?"development":"production";return ze(i??"dev")}function En(n,i,s,l){const a=M=>Object.entries(n).find(([v])=>v.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===M)?.[1];const r=[];const c=a("env");if(i?.length&&c?.createEnvTool&&c.createEnvVarConfig){r.push($(c.createEnvTool({requiredEnvVars:c.createEnvVarConfig(i)})))}const p=a("storage");if(s?.length&&p?.createStorageTool){r.push($(p.createStorageTool({requiredStorageKeys:s})))}const A=a("ask-buoy");const b=l==="hosted"?A?.hostedAskBuoy?.():l;if(b&&A?.createAskBuoyTool)r.push($(A.createAskBuoyTool(b)));return r}function wn({environment:n,userRole:i="admin",availableEnvironments:s,onEnvironmentSwitch:l,apps:a,modules:r=be,externalSync:c,requiredEnvVars:p,sentryGetClient:A,disableHints:b=false,headless:M=false,hidden:v=false,defaultFloatingTools:Ie,defaultDialTools:L,zustandStores:F,requiredStorageKeys:G,askBuoy:Q}){const j=n??An();const Ce=g(()=>L?he(L):void 0,[L]);const[m,E]=U(false);const[O,P]=U(false);const N=me(false);const T=ve();const J=g(()=>En(r,p,G,Q),[r,p,G,Q]);const{allowedTools:S}=de();const f=g(()=>Ge(Ye([...an(r),...a??[],...J]),S),[a,r,J,S]);const{openApps:X,close:Z}=T;d(()=>{if(!S)return;for(const e of X){if(!Qe(e.id,S))Z(e.instanceId)}},[X,S,Z]);const V=g(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);d(()=>{if(!F||typeof V?.watchStores!=="function")return;const e=V.watchStores(F);return typeof e==="function"?e:void 0},[F,V]);const k=gn();const q=T.openApps.some(e=>!e.minimized);d(()=>{k.setDialOpen(m)},[m,k.setDialOpen]);d(()=>{k.setToolOpen(q||O)},[q,O,k.setToolOpen]);const{registerApps:ee}=T;d(()=>{ee(f.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:u})=>o(u):o}}))},[ee,f]);const De=g(()=>f.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[f]);We({availableTools:De,storage:bn});d(()=>{let e=false;const o=async()=>{const[u,y]=await Promise.all([h.getItem(B.dial.isOpen()),h.getItem(B.settings.modalOpen())]);if(e)return;if(u==="true")E(true);if(y==="true"){E(true);P(true)}N.current=true};void o();return()=>{e=true}},[]);d(()=>{if(!N.current)return;void h.setItem(B.dial.isOpen(),m?"true":"false")},[m]);d(()=>{if(!N.current)return;void h.setItem(B.settings.modalOpen(),O?"true":"false")},[O]);const w=D(e=>{void nn(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();return}if(e.component){const o=typeof e.icon==="function"?e.icon(20):e.icon;T.open({id:e.id,title:e.name||R(e.id),component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:o,color:e.color||ge(e.id)})}else{e.onPress?.()}},[T]);const ne=me({tools:f,openApps:T.openApps,openTool:w});ne.current={tools:f,openApps:T.openApps,openTool:w};d(()=>pe(e=>{const{tools:o,openApps:u,openTool:y}=ne.current;if(u.some(W=>W.id===e))return false;const K=o.find(W=>W.id===e);if(!K||K.launchMode==="toggle-only")return false;y(K);return true}),[]);const x=g(()=>{const e=Te(f,"dial");return e.map(o=>{const u=o.color||ge(o.id);let y;if(typeof o.icon==="string"){y=o.icon}else if(typeof o.icon==="function"){y=o.icon(32)}else{y=null}return{id:o.id,name:o.name||R(o.id),icon:y,unavailable:!o.component&&!o.onPress,color:u,onPress:()=>{w(o);E(false)}}})},[f,w]);const oe=g(()=>{if(!m)return x;const e=new Map(x.map(o=>[o.id,o]));return en(x.map(o=>o.id)).map(o=>e.get(o)).filter(o=>Boolean(o))},[m,x]);const{settings:z}=vn();const Ae=g(()=>Te(f,"row").filter(e=>(z.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,z.floatingTools]);const Ee=g(()=>f.map(e=>({id:e.id,name:e.name||R(e.id),description:e.description||He(e.id),slot:e.slot,icon:e.icon,color:e.color})),[f]);const[we,te]=U(false);const ie=T.openApps.some(e=>!e.minimized);d(()=>{if(b)return;let e=false;const o=setTimeout(async()=>{const u=await h.getItem(Oe);if(!e&&!u)te(true)},1e3);return()=>{e=true;clearTimeout(o)}},[b]);const I=D(()=>{te(false);void h.setItem(Oe,"true")},[]);const se=D(()=>{I();E(true)},[I]);const _e=D(()=>{E(false);P(false)},[]);const Me=D(()=>{P(e=>!e)},[]);const Pe=D(()=>P(false),[]);const re=Boolean(s?.length&&l);const le=z.floatingTools.environment!==false;const C=we&&!m&&!ie&&!v;d(()=>{if(!C)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))I()};const o=u=>{if(u.key==="Escape")I()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[C,I]);const ae=T.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const ce=t(cn,{modules:r,apps:a,requiredEnvVars:p,externalSync:c,headless:M,sentryGetClient:A});if(M)return ce;return _("div",{"data-buoy-root":"",style:{display:"contents"},children:[ce,t(Dn,{}),C&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),t("div",{style:v?{visibility:"hidden"}:{display:"contents"},"aria-hidden":v||void 0,children:_(Xe,{enablePositionPersistence:!C,pushToSide:m||ie,suspendPointerEvents:m,centerOnboarding:C,minimizedStack:ae?t(ln,{}):void 0,hasMinimizedStack:ae,children:[j&&le&&!re&&t(Ue,{environment:j}),re&&le&&t($e,{currentEnvironment:j??"local",availableEnvironments:s,onSelect:l}),i?t(Ze,{userRole:i,onPress:se}):t("button",{"aria-label":"Open dev tools",onClick:se,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:t(On,{})}),Ae.map(e=>t("button",{"aria-label":e.name||R(e.id),title:e.description,onClick:()=>w(e),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof e.icon==="function"?e.icon(16):e.icon},e.id))]})}),C&&t(on,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:I}),m&&!v&&t(qe,{icons:oe,onClose:_e,centerLabel:"BUOY",onCenterPress:Me,settingsOpen:O,hintsDisabled:b,emptyNote:S&&oe.length===0?Je:void 0}),O&&!v&&t(tn,{visible:true,onClose:Pe,availableTools:Ee,defaultFloatingTools:Ie,defaultDialTools:Ce,onSettingsChange:e=>{}}),!v&&_(Y,{children:[t(rn,{}),t(xe,{})]})]})}function _n(n){const i=n&&typeof n==="object"?n.appId:void 0;const s=!!n;d(()=>{if(!s)return;let l=false;const a=Re.SessionManager;if(!a)return;const r=c=>{if(l||!c)return;a.configure({audience:`app:${c}`});void a.load().catch(()=>{})};if(i)r(i);else void fe().then(c=>r(c?.bundleId)).catch(()=>{});return()=>{l=true}},[s,i])}function Mn(n){const i=n&&typeof n==="object"?n.appId:void 0;d(()=>{let s=false;if(i){H(i)}else if(ue()){void fe().then(l=>{if(!s)H(l?.bundleId)}).catch(()=>{})}else if(typeof location!=="undefined"&&location.origin&&location.origin!=="null"){H(location.origin)}return()=>{s=true}},[i])}let Se=false;function Pn(n){if(n.modules)return n;if(!hn&&!Se&&typeof console!=="undefined"){Se=true;console.info("[Buoy] No tools loaded. Add buoy() from '@buoy-gg/core/vite' to your Vite plugins, or pass modules to FloatingDevTools.")}return{...n,modules:yn}}export function FloatingDevTools(n){return t(ke,{children:t(kn,{...Pn(n)})})}function kn(n){const{access:i,isPro:s,licenseKey:l}=de();d(()=>{void Be.configure(n.licenseKey??pn())},[n.licenseKey]);const a=n.licenseKey===void 0||Le(n.licenseKey,l);const r=Fe(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const c=a&&i.status==="admitted";d(()=>{if(c)Ke()},[c]);d(()=>{if(r||i.status==="initializing")return;if(s&&c)un();else dn()},[r,s,c,i.status]);const p=ue();_n(p?n.signIn:void 0);Mn(n.signIn);if(!r&&!s){if(!n.signIn||n.headless)return null;return p?t(ye,{needsPlan:true}):t(fn,{})}if(!c){return _(Y,{children:[i.status==="initializing"&&t(Cn,{modules:n.modules}),n.headless?null:n.signIn&&p?t(ye,{}):t(Ne,{})]})}return t(Sn,{...n})}
1
+ "use strict";import{BuoyPortal as xe,FloatingToolHost as Re}from"@buoy-gg/shared-ui/floating";import*as Be from"@buoy-gg/license";import{LicenseManager as Le,useLicense as ue,sameLicenseKey as Fe,resolveDevBuild as je,capacitorDebug as Ne,isCapacitorNative as fe,loadCapacitorAppHost as pe}from"@buoy-gg/license";import{AccountSetup as Ve,HintsProvider as ze,normalizeEnvironment as Ke,registerToolOpener as me,setBuoyAppId as U,startSettingsSync as We}from"@buoy-gg/shared-ui";import{useState as R,useMemo as g,useCallback as D,useEffect as c,useRef as ge}from"react";import{useSettings as He,getToolLabel as B,getToolDescription as Ue,getToolColor as Te}from"@buoy-gg/floating-tools-react";import{persistentStorage as h,devToolsStorageKeys as L,EnvironmentIndicator as $e,EnvironmentSelectorInline as Ye}from"@buoy-gg/shared-ui";import{autoDiscoverWithCustom as Ge,getToolsBySlot as ye}from"../utils/autoDiscoverPresets.web.js";import{filterTeamTools as Qe,isTeamToolAllowed as Je}from"@buoy-gg/floating-tools-core";import{NO_TEAM_TOOLS_NOTE as Xe}from"./teamToolsNote.js";import{FloatingTools as Ze,UserStatus as qe}from"./floatingTools.web.js";import{DialMenu as en}from"./dial/DialDevTools.web.js";import{getRankedToolIds as nn,recordToolUsage as on}from"./dial/dialUsageStore.js";import{OnboardingTooltip as tn}from"./dial/OnboardingTooltip.web.js";import{SettingsModal as sn}from"./DevToolsSettingsModal.web.js";import{AppHostProvider as rn,AppOverlay as an,useAppHost as ve}from"./AppHost.web.js";import{MinimizedToolsStack as ln}from"./MinimizedToolsStack.web.js";import{toggleStateManager as cn}from"./ToggleStateManager.js";import{createWebTools as dn}from"../utils/createWebTools.js";import{BrowserToolRuntime as un}from"./BrowserToolRuntime.js";import{clearReleaseOptIn as fn,markReleaseOptIn as pn}from"../releaseOptIn.js";import{BuoySignIn as mn}from"./BuoySignIn.web.js";import{defaultLicenseKey as gn}from"../Buoy.js";import{BuoySignIn as he}from"./BuoyCodeSignIn.js";import{DevToolsVisibilityProvider as Tn,useDevToolsVisibility as yn}from"./DevToolsVisibilityContext.js";import{createWebTool as $}from"../utils/createWebTool.js";import{DefaultConfigProvider as vn}from"./DefaultConfigContext.js";import{useDevToolsSettings as hn}from"./DevToolsSettingsModal.shared.js";import{validateDialConfig as be}from"./defaultConfig.js";import{installedTools as bn,installedToolsFound as On}from"../installedTools.js";import{jsx as i,jsxs as _,Fragment as Y}from"react/jsx-runtime";const Oe={};const Se="@react_buoy_floating_menu_tooltip_shown";const Sn=h;function In({size:n=14,color:t="#20C997"}){const s=Math.max(2,n/4);const a=Math.max(1,n/16);return i("div",{style:{display:"grid",gridTemplateColumns:`repeat(3, ${s}px)`,gap:a,width:n,height:n,alignContent:"center",justifyContent:"center"},children:Array.from({length:9}).map((l,r)=>i("div",{style:{width:s,height:s,borderRadius:s/2,backgroundColor:t}},r))})}function Cn(n){const{defaultFloatingTools:t,defaultDialTools:s,disableHints:a=false,children:l}=n;const r=g(()=>s?be(s):s,[s]);return i(vn,{defaultFloatingTools:t,defaultDialTools:r,children:i(ze,{disableHints:a,children:_(Tn,{children:[i(rn,{children:i(kn,{...n})}),l]})})})}const Dn=["ReduxAutoInstrument","ConsoleRoot","RouteTracker","ReactQueryTracker"];function An({modules:n=Oe}){return i(Y,{children:Object.entries(n).flatMap(([t,s])=>Dn.map(a=>{const l=s[a];return l?i(l,{},`${t}:${a}`):null}))})}function En(){const{openApps:n,restore:t}=ve();c(()=>me(s=>{const a=n.find(l=>l.id===s);if(!a)return false;t(a.instanceId);return true}),[n,t]);return null}function wn(){const n=Ne();const t=n===null?process.env.NODE_ENV:n?"development":"production";return Ke(t??"dev")}function _n(n,t,s,a){const l=M=>Object.entries(n).find(([y])=>y.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")===M)?.[1];const r=[];const d=l("env");if(t?.length&&d?.createEnvTool&&d.createEnvVarConfig){r.push($(d.createEnvTool({requiredEnvVars:d.createEnvVarConfig(t)})))}const p=l("storage");if(s?.length&&p?.createStorageTool){r.push($(p.createStorageTool({requiredStorageKeys:s})))}const A=l("ask-buoy");const b=a==="hosted"?A?.hostedAskBuoy?.():a;if(b&&A?.createAskBuoyTool)r.push($(A.createAskBuoyTool(b)));return r}function Mn(n){if(n.launchMode!=="toggle-only")return void 0;const t=n.isOn;return typeof t==="function"?t():void 0}function kn({environment:n,userRole:t="admin",availableEnvironments:s,onEnvironmentSwitch:a,apps:l,modules:r=Oe,externalSync:d,requiredEnvVars:p,sentryGetClient:A,disableHints:b=false,headless:M=false,hidden:y=false,defaultFloatingTools:Ce,defaultDialTools:F,zustandStores:j,requiredStorageKeys:G,askBuoy:Q}){const N=n??wn();const De=g(()=>F?be(F):void 0,[F]);const[m,E]=R(false);const[O,k]=R(false);const[,J]=R(0);c(()=>cn.subscribe(()=>J(e=>e+1)),[]);const V=ge(false);const T=ve();const X=g(()=>_n(r,p,G,Q),[r,p,G,Q]);const{allowedTools:S}=ue();const f=g(()=>Qe(Ge([...dn(r),...l??[],...X]),S),[l,r,X,S]);const{openApps:Z,close:q}=T;c(()=>{if(!S)return;for(const e of Z){if(!Je(e.id,S))q(e.instanceId)}},[Z,S,q]);const z=g(()=>Object.entries(r).find(([e])=>e.replace(/^@buoy-gg\//,"").replace(/\/web$/,"")==="zustand")?.[1],[r]);c(()=>{if(!j||typeof z?.watchStores!=="function")return;const e=z.watchStores(j);return typeof e==="function"?e:void 0},[j,z]);const P=yn();const ee=T.openApps.some(e=>!e.minimized);c(()=>{P.setDialOpen(m)},[m,P.setDialOpen]);c(()=>{P.setToolOpen(ee||O)},[ee,O,P.setToolOpen]);const{registerApps:ne}=T;c(()=>{ne(f.map(e=>{const o=e.icon;return{...e,icon:typeof o==="function"?({size:u})=>o(u):o}}))},[ne,f]);const Ae=g(()=>f.map(e=>({id:e.id,name:e.name,description:e.description,slot:e.slot})),[f]);He({availableTools:Ae,storage:Sn});c(()=>{let e=false;const o=async()=>{const[u,v]=await Promise.all([h.getItem(L.dial.isOpen()),h.getItem(L.settings.modalOpen())]);if(e)return;if(u==="true")E(true);if(v==="true"){E(true);k(true)}V.current=true};void o();return()=>{e=true}},[]);c(()=>{if(!V.current)return;void h.setItem(L.dial.isOpen(),m?"true":"false")},[m]);c(()=>{if(!V.current)return;void h.setItem(L.settings.modalOpen(),O?"true":"false")},[O]);const w=D(e=>{void on(e.id);if(e.launchMode==="toggle-only"){e.onPress?.();J(o=>o+1);return}if(e.component){const o=typeof e.icon==="function"?e.icon(20):e.icon;T.open({id:e.id,title:e.name||B(e.id),component:e.component,props:e.props,modal:e.modal,launchMode:e.launchMode||"self-modal",singleton:e.singleton??true,icon:o,color:e.color||Te(e.id)})}else{e.onPress?.()}},[T]);const oe=ge({tools:f,openApps:T.openApps,openTool:w});oe.current={tools:f,openApps:T.openApps,openTool:w};c(()=>me(e=>{const{tools:o,openApps:u,openTool:v}=oe.current;if(u.some(H=>H.id===e))return false;const W=o.find(H=>H.id===e);if(!W||W.launchMode==="toggle-only")return false;v(W);return true}),[]);const x=g(()=>{const e=ye(f,"dial");return e.map(o=>{const u=o.color||Te(o.id);let v;if(typeof o.icon==="string"){v=o.icon}else if(typeof o.icon==="function"){v=o.icon(32)}else{v=null}return{id:o.id,name:o.name||B(o.id),icon:v,unavailable:!o.component&&!o.onPress,color:u,onPress:()=>{w(o);E(false)}}})},[f,w]);const te=g(()=>{if(!m)return x;const e=new Map(x.map(o=>[o.id,o]));return nn(x.map(o=>o.id)).map(o=>e.get(o)).filter(o=>Boolean(o))},[m,x]);const{settings:K}=hn();const Ee=g(()=>ye(f,"row").filter(e=>(K.floatingTools[e.id]??false)===true&&(e.component||e.onPress)),[f,K.floatingTools]);const we=g(()=>f.map(e=>({id:e.id,name:e.name||B(e.id),description:e.description||Ue(e.id),slot:e.slot,icon:e.icon,color:e.color})),[f]);const[_e,ie]=R(false);const se=T.openApps.some(e=>!e.minimized);c(()=>{if(b)return;let e=false;const o=setTimeout(async()=>{const u=await h.getItem(Se);if(!e&&!u)ie(true)},1e3);return()=>{e=true;clearTimeout(o)}},[b]);const I=D(()=>{ie(false);void h.setItem(Se,"true")},[]);const re=D(()=>{I();E(true)},[I]);const Me=D(()=>{E(false);k(false)},[]);const ke=D(()=>{k(e=>!e)},[]);const Pe=D(()=>k(false),[]);const ae=Boolean(s?.length&&a);const le=K.floatingTools.environment!==false;const C=_e&&!m&&!se&&!y;c(()=>{if(!C)return;const e=u=>{if(!(u.target instanceof Element)||!u.target.closest("[data-buoy-root]"))I()};const o=u=>{if(u.key==="Escape")I()};document.addEventListener("pointerdown",e,true);document.addEventListener("keydown",o);return()=>{document.removeEventListener("pointerdown",e,true);document.removeEventListener("keydown",o)}},[C,I]);const ce=T.openApps.some(e=>e.minimized&&e.launchMode!=="toggle-only");const de=i(un,{modules:r,apps:l,requiredEnvVars:p,externalSync:d,headless:M,sentryGetClient:A});if(M)return de;return _("div",{"data-buoy-root":"",style:{display:"contents"},children:[de,i(En,{}),C&&i("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.85)",zIndex:1e4,pointerEvents:"none"}}),i("div",{style:y?{visibility:"hidden"}:{display:"contents"},"aria-hidden":y||void 0,children:_(Ze,{enablePositionPersistence:!C,pushToSide:m||se,suspendPointerEvents:m,centerOnboarding:C,minimizedStack:ce?i(ln,{}):void 0,hasMinimizedStack:ce,children:[N&&le&&!ae&&i($e,{environment:N}),ae&&le&&i(Ye,{currentEnvironment:N??"local",availableEnvironments:s,onSelect:a}),t?i(qe,{userRole:t,onPress:re}):i("button",{"aria-label":"Open dev tools",onClick:re,style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"6px 8px",background:"none",border:"none",cursor:"pointer"},children:i(In,{})}),Ee.map(e=>i("button",{"aria-label":e.name||B(e.id),"aria-pressed":Mn(e),title:e.description,onClick:()=>w(e),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px 6px",borderRadius:6,background:"none",border:"none",cursor:"pointer"},children:typeof e.icon==="function"?e.icon(16):e.icon},e.id))]})}),C&&i(tn,{title:"Welcome to Buoy!",message:"Grab and position this menu wherever you want, then tap the icon to open your tools.",onDismiss:I}),m&&!y&&i(en,{icons:te,onClose:Me,centerLabel:"BUOY",onCenterPress:ke,settingsOpen:O,hintsDisabled:b,emptyNote:S&&te.length===0?Xe:void 0}),O&&!y&&i(sn,{visible:true,onClose:Pe,availableTools:we,defaultFloatingTools:Ce,defaultDialTools:De,onSettingsChange:e=>{}}),!y&&_(Y,{children:[i(an,{}),i(Re,{})]})]})}function Pn(n){const t=n&&typeof n==="object"?n.appId:void 0;const s=!!n;c(()=>{if(!s)return;let a=false;const l=Be.SessionManager;if(!l)return;const r=d=>{if(a||!d)return;l.configure({audience:`app:${d}`});void l.load().catch(()=>{})};if(t)r(t);else void pe().then(d=>r(d?.bundleId)).catch(()=>{});return()=>{a=true}},[s,t])}function xn(n){const t=n&&typeof n==="object"?n.appId:void 0;c(()=>{let s=false;if(t){U(t)}else if(fe()){void pe().then(a=>{if(!s)U(a?.bundleId)}).catch(()=>{})}else if(typeof location!=="undefined"&&location.origin&&location.origin!=="null"){U(location.origin)}return()=>{s=true}},[t])}let Ie=false;function Rn(n){if(n.modules)return n;if(!On&&!Ie&&typeof console!=="undefined"){Ie=true;console.info("[Buoy] No tools loaded. Add buoy() from '@buoy-gg/core/vite' to your Vite plugins, or pass modules to FloatingDevTools.")}return{...n,modules:bn}}export function FloatingDevTools(n){return i(xe,{children:i(Bn,{...Rn(n)})})}function Bn(n){const{access:t,isPro:s,licenseKey:a}=ue();c(()=>{void Le.configure(n.licenseKey??gn())},[n.licenseKey]);const l=n.licenseKey===void 0||Fe(n.licenseKey,a);const r=je(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const d=l&&t.status==="admitted";c(()=>{if(d)We()},[d]);c(()=>{if(r||t.status==="initializing")return;if(s&&d)pn();else fn()},[r,s,d,t.status]);const p=fe();Pn(p?n.signIn:void 0);xn(n.signIn);if(!r&&!s){if(!n.signIn||n.headless)return null;return p?i(he,{needsPlan:true}):i(mn,{})}if(!d){return _(Y,{children:[t.status==="initializing"&&i(An,{modules:n.modules}),n.headless?null:n.signIn&&p?i(he,{}):i(Ve,{})]})}return i(Cn,{...n})}
@@ -1 +1 @@
1
- "use strict";import{reportOptionalRequireError as r}from"./optionalRequire.js";export function autoDiscoverPresets(){const u=[];const n=[{name:"@buoy-gg/env",loader:()=>{try{const{envToolPreset:e}=require("@buoy-gg/env");return e}catch(e){r("@buoy-gg/env",e);return null}}},{name:"@buoy-gg/network",loader:()=>{try{const{networkToolPreset:e}=require("@buoy-gg/network");return e}catch(e){r("@buoy-gg/network",e);return null}}},{name:"@buoy-gg/storage",loader:()=>{try{const{storageToolPreset:e}=require("@buoy-gg/storage");return e}catch(e){r("@buoy-gg/storage",e);return null}}},{name:"@buoy-gg/react-query",loader:()=>{try{const{reactQueryToolPreset:e,wifiTogglePreset:o}=require("@buoy-gg/react-query");return[e,o]}catch(e){r("@buoy-gg/react-query",e);return null}}},{name:"@buoy-gg/route-events",loader:()=>{try{const{routeEventsToolPreset:e}=require("@buoy-gg/route-events");return e}catch(e){r("@buoy-gg/route-events",e);return null}}},{name:"@buoy-gg/debug-borders",loader:()=>{try{const{debugBordersToolPreset:e}=require("@buoy-gg/debug-borders");return e}catch(e){r("@buoy-gg/debug-borders",e);return null}}},{name:"@buoy-gg/highlight-updates",loader:()=>{try{const{highlightUpdatesPreset:e,highlightUpdatesModalPreset:o}=require("@buoy-gg/highlight-updates");return[o,e]}catch(e){r("@buoy-gg/highlight-updates",e);return null}}},{name:"@buoy-gg/console",loader:()=>{try{const{consoleToolPreset:e}=require("@buoy-gg/console");return e}catch(e){r("@buoy-gg/console",e);return null}}},{name:"@buoy-gg/notifications",loader:()=>{try{return require("@buoy-gg/notifications").notificationToolPreset}catch(e){r("@buoy-gg/notifications",e);return null}}},{name:"@buoy-gg/sentry",loader:()=>{try{const{sentryToolPreset:e}=require("@buoy-gg/sentry");return e}catch(e){r("@buoy-gg/sentry",e);return null}}},{name:"@buoy-gg/time-machine",loader:()=>{try{const{timeMachineToolPreset:e}=require("@buoy-gg/time-machine");return e}catch(e){r("@buoy-gg/time-machine",e);return null}}},{name:"@buoy-gg/clock",loader:()=>{try{const{clockToolPreset:e}=require("@buoy-gg/clock");return e}catch(e){r("@buoy-gg/clock",e);return null}}},{name:"@buoy-gg/lifecycle",loader:()=>{try{const{lifecycleToolPreset:e}=require("@buoy-gg/lifecycle");return e}catch(e){r("@buoy-gg/lifecycle",e);return null}}},{name:"@buoy-gg/location",loader:()=>{try{const{locationToolPreset:e}=require("@buoy-gg/location");return e}catch(e){r("@buoy-gg/location",e);return null}}},{name:"@buoy-gg/permissions",loader:()=>{try{const{permissionsToolPreset:e}=require("@buoy-gg/permissions");return e}catch(e){r("@buoy-gg/permissions",e);return null}}},{name:"@buoy-gg/scenarios",loader:()=>{try{const{scenariosToolPreset:e}=require("@buoy-gg/scenarios");return e}catch(e){r("@buoy-gg/scenarios",e);return null}}},{name:"@buoy-gg/ask-buoy",loader:()=>{try{const{askBuoyToolPreset:e}=require("@buoy-gg/ask-buoy");return e}catch(e){r("@buoy-gg/ask-buoy",e);return null}}},{name:"@buoy-gg/redux",loader:()=>{try{const{reduxToolPreset:e}=require("@buoy-gg/redux");return e}catch(e){r("@buoy-gg/redux",e);return null}}},{name:"@buoy-gg/zustand",loader:()=>{try{const{zustandToolPreset:e}=require("@buoy-gg/zustand");return e}catch(e){r("@buoy-gg/zustand",e);return null}}},{name:"@buoy-gg/events",loader:()=>{try{const{eventsToolPreset:e}=require("@buoy-gg/events");return e}catch(e){r("@buoy-gg/events",e);return null}}},{name:"@buoy-gg/jotai",loader:()=>{try{const{jotaiToolPreset:e}=require("@buoy-gg/jotai");return e}catch(e){r("@buoy-gg/jotai",e);return null}}},{name:"@buoy-gg/image-overlay",loader:()=>{try{const{imageOverlayToolPreset:e}=require("@buoy-gg/image-overlay");return e}catch(e){r("@buoy-gg/image-overlay",e);return null}}},{name:"@buoy-gg/perf-monitor",loader:()=>{try{const{perfMonitorPreset:e,perfMonitorModalPreset:o}=require("@buoy-gg/perf-monitor");return[e,o]}catch(e){r("@buoy-gg/perf-monitor",e);return null}}},{name:"@buoy-gg/js-top",loader:()=>{try{const{jsTopPreset:e,jsTopModalPreset:o}=require("@buoy-gg/js-top");return[o,e]}catch(e){r("@buoy-gg/js-top",e);return null}}},{name:"@buoy-gg/images",loader:()=>{try{const{imagesToolPreset:e}=require("@buoy-gg/images");return e}catch(e){r("@buoy-gg/images",e);return null}}},{name:"@buoy-gg/assets",loader:()=>{try{const{assetsToolPreset:e}=require("@buoy-gg/assets");return e}catch(e){r("@buoy-gg/assets",e);return null}}}];for(const{name:e,loader:o}of n){try{const t=o();if(t){if(Array.isArray(t)){u.push(...t)}else{u.push(t)}}}catch(t){r(e,t)}}return u}export function autoDiscoverPresetsWithCustom(u){const n=autoDiscoverPresets();const e=new Set(u.map(t=>t.id));const o=n.filter(t=>!e.has(t.id));return[...u,...o]}
1
+ "use strict";import{reportOptionalRequireError as r}from"./optionalRequire.js";export function autoDiscoverPresets(){const u=[];const n=[{name:"@buoy-gg/env",loader:()=>{try{const{envToolPreset:e}=require("@buoy-gg/env");return e}catch(e){r("@buoy-gg/env",e);return null}}},{name:"@buoy-gg/network",loader:()=>{try{const{networkToolPreset:e}=require("@buoy-gg/network");return e}catch(e){r("@buoy-gg/network",e);return null}}},{name:"@buoy-gg/storage",loader:()=>{try{const{storageToolPreset:e}=require("@buoy-gg/storage");return e}catch(e){r("@buoy-gg/storage",e);return null}}},{name:"@buoy-gg/react-query",loader:()=>{try{const{reactQueryToolPreset:e,wifiTogglePreset:o}=require("@buoy-gg/react-query");return[e,o]}catch(e){r("@buoy-gg/react-query",e);return null}}},{name:"@buoy-gg/route-events",loader:()=>{try{const{routeEventsToolPreset:e}=require("@buoy-gg/route-events");return e}catch(e){r("@buoy-gg/route-events",e);return null}}},{name:"@buoy-gg/debug-borders",loader:()=>{try{const{debugBordersToolPreset:e}=require("@buoy-gg/debug-borders");return e}catch(e){r("@buoy-gg/debug-borders",e);return null}}},{name:"@buoy-gg/highlight-updates",loader:()=>{try{const{highlightUpdatesPreset:e,highlightUpdatesModalPreset:o}=require("@buoy-gg/highlight-updates");return[o,e]}catch(e){r("@buoy-gg/highlight-updates",e);return null}}},{name:"@buoy-gg/console",loader:()=>{try{const{consoleToolPreset:e}=require("@buoy-gg/console");return e}catch(e){r("@buoy-gg/console",e);return null}}},{name:"@buoy-gg/notifications",loader:()=>{try{return require("@buoy-gg/notifications").notificationToolPreset}catch(e){r("@buoy-gg/notifications",e);return null}}},{name:"@buoy-gg/sentry",loader:()=>{try{const{sentryToolPreset:e}=require("@buoy-gg/sentry");return e}catch(e){r("@buoy-gg/sentry",e);return null}}},{name:"@buoy-gg/time-machine",loader:()=>{try{const{timeMachineToolPreset:e}=require("@buoy-gg/time-machine");return e}catch(e){r("@buoy-gg/time-machine",e);return null}}},{name:"@buoy-gg/clock",loader:()=>{try{const{clockToolPreset:e}=require("@buoy-gg/clock");return e}catch(e){r("@buoy-gg/clock",e);return null}}},{name:"@buoy-gg/bug-links",loader:()=>{try{const{reportBugToolPreset:e,bugLinksToolPreset:o}=require("@buoy-gg/bug-links");return[e,o]}catch(e){r("@buoy-gg/bug-links",e);return null}}},{name:"@buoy-gg/memory-leaks",loader:()=>{try{const{memoryLeaksToolPreset:e}=require("@buoy-gg/memory-leaks");return e}catch(e){r("@buoy-gg/memory-leaks",e);return null}}},{name:"@buoy-gg/lifecycle",loader:()=>{try{const{lifecycleToolPreset:e}=require("@buoy-gg/lifecycle");return e}catch(e){r("@buoy-gg/lifecycle",e);return null}}},{name:"@buoy-gg/ota-inspector",loader:()=>{try{const{otaInspectorToolPreset:e}=require("@buoy-gg/ota-inspector");return e}catch(e){r("@buoy-gg/ota-inspector",e);return null}}},{name:"@buoy-gg/location",loader:()=>{try{const{locationToolPreset:e}=require("@buoy-gg/location");return e}catch(e){r("@buoy-gg/location",e);return null}}},{name:"@buoy-gg/permissions",loader:()=>{try{const{permissionsToolPreset:e}=require("@buoy-gg/permissions");return e}catch(e){r("@buoy-gg/permissions",e);return null}}},{name:"@buoy-gg/scenarios",loader:()=>{try{const{scenariosToolPreset:e}=require("@buoy-gg/scenarios");return e}catch(e){r("@buoy-gg/scenarios",e);return null}}},{name:"@buoy-gg/ask-buoy",loader:()=>{try{const{askBuoyToolPreset:e}=require("@buoy-gg/ask-buoy");return e}catch(e){r("@buoy-gg/ask-buoy",e);return null}}},{name:"@buoy-gg/redux",loader:()=>{try{const{reduxToolPreset:e}=require("@buoy-gg/redux");return e}catch(e){r("@buoy-gg/redux",e);return null}}},{name:"@buoy-gg/zustand",loader:()=>{try{const{zustandToolPreset:e}=require("@buoy-gg/zustand");return e}catch(e){r("@buoy-gg/zustand",e);return null}}},{name:"@buoy-gg/events",loader:()=>{try{const{eventsToolPreset:e}=require("@buoy-gg/events");return e}catch(e){r("@buoy-gg/events",e);return null}}},{name:"@buoy-gg/jotai",loader:()=>{try{const{jotaiToolPreset:e}=require("@buoy-gg/jotai");return e}catch(e){r("@buoy-gg/jotai",e);return null}}},{name:"@buoy-gg/image-overlay",loader:()=>{try{const{imageOverlayToolPreset:e}=require("@buoy-gg/image-overlay");return e}catch(e){r("@buoy-gg/image-overlay",e);return null}}},{name:"@buoy-gg/perf-monitor",loader:()=>{try{const{perfMonitorPreset:e,perfMonitorModalPreset:o}=require("@buoy-gg/perf-monitor");return[e,o]}catch(e){r("@buoy-gg/perf-monitor",e);return null}}},{name:"@buoy-gg/js-top",loader:()=>{try{const{jsTopPreset:e,jsTopModalPreset:o}=require("@buoy-gg/js-top");return[o,e]}catch(e){r("@buoy-gg/js-top",e);return null}}},{name:"@buoy-gg/images",loader:()=>{try{const{imagesToolPreset:e}=require("@buoy-gg/images");return e}catch(e){r("@buoy-gg/images",e);return null}}},{name:"@buoy-gg/assets",loader:()=>{try{const{assetsToolPreset:e}=require("@buoy-gg/assets");return e}catch(e){r("@buoy-gg/assets",e);return null}}}];for(const{name:e,loader:o}of n){try{const t=o();if(t){if(Array.isArray(t)){u.push(...t)}else{u.push(t)}}}catch(t){r(e,t)}}return u}export function autoDiscoverPresetsWithCustom(u){const n=autoDiscoverPresets();const e=new Set(u.map(t=>t.id));const o=n.filter(t=>!e.has(t.id));return[...u,...o]}
@@ -1 +1 @@
1
- "use strict";import{useEffect as O,useMemo as Q,useRef as V}from"react";import{Platform as H}from"react-native";import{LicenseManager as $}from"@buoy-gg/license";import{reportOptionalRequireError as r}from"./optionalRequire.js";import{appSyncAdapter as W}from"./sync/appSyncAdapter.js";import{useDeviceIdentity as X}from"./deviceIdentity.js";import{applyReleaseActionPolicy as Y}from"./externalSyncGate.js";import{applyDefaultLicenseKey as Z}from"../Buoy.js";import{registerToolAdapters as ee}from"@buoy-gg/shared-ui";Z();let s=null;let g=null;let d=null;let p=null;let f=null;let b=null;let m=null;let S=null;let A=null;let h=null;let M=null;let v=null;let q=null;let k=null;let x=null;let R=null;try{R=require("@buoy-gg/notifications")}catch(e){r("@buoy-gg/notifications",e)}let j=null;let E=null;let L=null;let I=null;let w=null;let T=null;let _=null;let z=null;let B=null;let D=null;let i=null;try{s=require("@buoy-gg/external-sync")}catch(e){r("@buoy-gg/external-sync",e)}try{g=require("@buoy-gg/storage")}catch(e){r("@buoy-gg/storage",e)}try{d=require("@buoy-gg/network")}catch(e){r("@buoy-gg/network",e)}try{p=require("@buoy-gg/react-query")}catch(e){r("@buoy-gg/react-query",e)}try{f=require("@buoy-gg/route-events")}catch(e){r("@buoy-gg/route-events",e)}try{b=require("@buoy-gg/redux")}catch(e){r("@buoy-gg/redux",e)}try{m=require("@buoy-gg/zustand")}catch(e){r("@buoy-gg/zustand",e)}try{S=require("@buoy-gg/jotai")}catch(e){r("@buoy-gg/jotai",e)}try{A=require("@buoy-gg/events")}catch(e){r("@buoy-gg/events",e)}try{h=require("@buoy-gg/console")}catch(e){r("@buoy-gg/console",e)}try{M=require("@buoy-gg/clock")}catch(e){r("@buoy-gg/clock",e)}try{q=require("@buoy-gg/lifecycle")}catch(e){r("@buoy-gg/lifecycle",e)}try{k=require("@buoy-gg/location")}catch(e){r("@buoy-gg/location",e)}try{v=require("@buoy-gg/permissions")}catch(e){r("@buoy-gg/permissions",e)}try{x=require("@buoy-gg/sentry")}catch(e){r("@buoy-gg/sentry",e)}try{j=require("@buoy-gg/env")}catch(e){r("@buoy-gg/env",e)}try{E=require("@buoy-gg/highlight-updates")}catch(e){r("@buoy-gg/highlight-updates",e)}try{L=require("@buoy-gg/debug-borders")}catch(e){r("@buoy-gg/debug-borders",e)}try{I=require("@buoy-gg/impersonate")}catch(e){r("@buoy-gg/impersonate",e)}try{w=require("@buoy-gg/perf-monitor")}catch(e){r("@buoy-gg/perf-monitor",e)}try{T=require("@buoy-gg/js-top")}catch(e){r("@buoy-gg/js-top",e)}try{_=require("@buoy-gg/images")}catch(e){r("@buoy-gg/images",e)}try{z=require("@buoy-gg/assets")}catch(e){r("@buoy-gg/assets",e)}try{B=require("@buoy-gg/tv-remote")}catch(e){r("@buoy-gg/tv-remote",e)}try{D=require("@buoy-gg/focus-inspector")}catch(e){r("@buoy-gg/focus-inspector",e)}try{i=require("expo-constants")}catch(e){r("expo-constants",e)}export function isExternalSyncAvailable(){return!!s?.useExternalSyncSocket}function te(){const e=i?.default??i;return e?.expoConfig?.name??e?.manifest2?.extra?.expoClient?.name??null}function re(){const e=i?.default??i;const n=e?.deviceName;return typeof n==="string"&&n.length>0?n:null}export function useToolAdapterMap({requiredEnvVars:e,customApps:n}){const c=p?.useReactQuerySyncAdapter?p.useReactQuerySyncAdapter():null;return oe(c,e,n)}export function ToolRegistryPublisher({requiredEnvVars:e,customApps:n}){const c=useToolAdapterMap({requiredEnvVars:e,customApps:n});const t=V(c);t.current=c;O(()=>ee(()=>t.current),[]);return null}export function AutoExternalSync({options:e,requiredEnvVars:n,isPro:c,tier:t,licenseKey:o,customApps:F}){const{useExternalSyncSocket:G,useExternalSync:J}=s;const N=useToolAdapterMap({requiredEnvVars:n,customApps:F});const U=X(e,{appName:te(),hardwareName:re(),platform:H.OS});const P=U?.deviceId??null;const{socket:u}=G({deviceName:U?.deviceName??"Buoy Device",socketURL:e?.socketURL??s.getDefaultSocketURL?.()??"http://localhost:42831",persistentDeviceId:P,platform:H.OS,enableLogs:e?.enableLogs});const a=V({isPro:c,tier:t,licenseKey:o});a.current={isPro:c,tier:t,licenseKey:o};O(()=>{if(!u)return;const y=()=>{if(!$.hasAccountAccess()||!u.connected)return;const C=$.getState();if(!a.current.isPro&&(C.isInitialized===false||C.isValidating===true))return;u.emit("device-license",{isPro:a.current.isPro?"1":"0",tier:a.current.tier??(a.current.isPro?"pro":"free")})};if(u.connected)y();u.on("connect",y);return()=>{u.off("connect",y)}},[u,c,t,o]);const l=e?.releaseActions?.join(",")??"";const K=Q(()=>Y(N,typeof __DEV__!=="undefined"&&__DEV__,l?l.split(","):void 0),[N,l]);J({tools:K,socket:u,deviceId:P,enableLogs:e?.enableLogs});return null}function oe(e,n,c){return Q(()=>{const t={app:W};if(g?.storageSyncAdapter){t.storage=g.storageSyncAdapter}if(d?.networkSyncAdapter){t.network=d.networkSyncAdapter}if(e){t.query=e}if(f?.routeEventsSyncAdapter){t["route-events"]=f.routeEventsSyncAdapter}if(b?.reduxSyncAdapter){t.redux=b.reduxSyncAdapter}if(m?.zustandSyncAdapter){t.zustand=m.zustandSyncAdapter}if(S?.jotaiSyncAdapter){t.jotai=S.jotaiSyncAdapter}if(A?.eventsSyncAdapter){t.events=A.eventsSyncAdapter}if(h?.consoleSyncAdapter){t.console=h.consoleSyncAdapter}if(M?.clockSyncAdapter){t.clock=M.clockSyncAdapter}if(v?.permissionsSyncAdapter){t.permissions=v.permissionsSyncAdapter}if(q?.lifecycleSyncAdapter){t.lifecycle=q.lifecycleSyncAdapter}if(k?.locationSyncAdapter){t.location=k.locationSyncAdapter}if(R?.notificationSyncAdapter){t["push-notifications"]=R.notificationSyncAdapter}if(x?.sentrySyncAdapter){t.sentry=x.sentrySyncAdapter}try{const o=require("@buoy-gg/time-machine");if(o?.timeMachineSyncAdapter){t["time-machine"]=o.timeMachineSyncAdapter}}catch(o){r("@buoy-gg/time-machine",o)}try{const o=require("@buoy-gg/scenarios");if(o?.scenariosSyncAdapter){t.scenarios=o.scenariosSyncAdapter}}catch(o){r("@buoy-gg/scenarios",o)}try{const o=require("@buoy-gg/ask-buoy");if(o?.askBuoySyncAdapter){t["ask-buoy"]=o.askBuoySyncAdapter}}catch(o){r("@buoy-gg/ask-buoy",o)}if(j?.createEnvSyncAdapter){t.env=j.createEnvSyncAdapter(n??[])}if(E?.highlightUpdatesSyncAdapter){t["highlight-updates"]=E.highlightUpdatesSyncAdapter}if(L?.debugBordersSyncAdapter){t["debug-borders"]=L.debugBordersSyncAdapter}if(I?.impersonateSyncAdapter){t.impersonate=I.impersonateSyncAdapter}if(w?.perfMonitorSyncAdapter){t["perf-monitor"]=w.perfMonitorSyncAdapter}if(T?.jsTopSyncAdapter){t["js-top"]=T.jsTopSyncAdapter}if(_?.imagesSyncAdapter){t.images=_.imagesSyncAdapter}if(z?.assetsSyncAdapter){t.assets=z.assetsSyncAdapter}if(B?.tvRemoteSyncAdapter){t["tv-remote"]=B.tvRemoteSyncAdapter}if(D?.focusInspectorSyncAdapter){t["focus-inspector"]=D.focusInspectorSyncAdapter}for(const o of c??[]){if(o?.sync){t[`custom:${o.id}`]=o.sync}}return t},[e,n,c])}
1
+ "use strict";import{useEffect as H,useMemo as $,useRef as F}from"react";import{Platform as G}from"react-native";import{LicenseManager as J}from"@buoy-gg/license";import{reportOptionalRequireError as r}from"./optionalRequire.js";import{appSyncAdapter as Z}from"./sync/appSyncAdapter.js";import{useDeviceIdentity as ee}from"./deviceIdentity.js";import{applyReleaseActionPolicy as te}from"./externalSyncGate.js";import{applyDefaultLicenseKey as re}from"../Buoy.js";import{registerToolAdapters as oe}from"@buoy-gg/shared-ui";re();let i=null;let g=null;let d=null;let p=null;let f=null;let b=null;let m=null;let S=null;let A=null;let h=null;let M=null;let k=null;let q=null;try{q=require("@buoy-gg/memory-leaks")}catch(e){r("@buoy-gg/memory-leaks",e)}let v=null;let x=null;let L=null;let R=null;let j=null;let E=null;try{E=require("@buoy-gg/notifications")}catch(e){r("@buoy-gg/notifications",e)}let I=null;let w=null;let T=null;let _=null;let z=null;let B=null;let D=null;let N=null;let U=null;let P=null;let s=null;try{i=require("@buoy-gg/external-sync")}catch(e){r("@buoy-gg/external-sync",e)}try{g=require("@buoy-gg/storage")}catch(e){r("@buoy-gg/storage",e)}try{d=require("@buoy-gg/network")}catch(e){r("@buoy-gg/network",e)}try{p=require("@buoy-gg/react-query")}catch(e){r("@buoy-gg/react-query",e)}try{f=require("@buoy-gg/route-events")}catch(e){r("@buoy-gg/route-events",e)}try{b=require("@buoy-gg/redux")}catch(e){r("@buoy-gg/redux",e)}try{m=require("@buoy-gg/zustand")}catch(e){r("@buoy-gg/zustand",e)}try{S=require("@buoy-gg/jotai")}catch(e){r("@buoy-gg/jotai",e)}try{A=require("@buoy-gg/events")}catch(e){r("@buoy-gg/events",e)}try{h=require("@buoy-gg/console")}catch(e){r("@buoy-gg/console",e)}try{M=require("@buoy-gg/clock")}catch(e){r("@buoy-gg/clock",e)}try{k=require("@buoy-gg/bug-links")}catch(e){r("@buoy-gg/bug-links",e)}try{x=require("@buoy-gg/lifecycle")}catch(e){r("@buoy-gg/lifecycle",e)}try{L=require("@buoy-gg/ota-inspector")}catch(e){r("@buoy-gg/ota-inspector",e)}try{R=require("@buoy-gg/location")}catch(e){r("@buoy-gg/location",e)}try{v=require("@buoy-gg/permissions")}catch(e){r("@buoy-gg/permissions",e)}try{j=require("@buoy-gg/sentry")}catch(e){r("@buoy-gg/sentry",e)}try{I=require("@buoy-gg/env")}catch(e){r("@buoy-gg/env",e)}try{w=require("@buoy-gg/highlight-updates")}catch(e){r("@buoy-gg/highlight-updates",e)}try{T=require("@buoy-gg/debug-borders")}catch(e){r("@buoy-gg/debug-borders",e)}try{_=require("@buoy-gg/impersonate")}catch(e){r("@buoy-gg/impersonate",e)}try{z=require("@buoy-gg/perf-monitor")}catch(e){r("@buoy-gg/perf-monitor",e)}try{B=require("@buoy-gg/js-top")}catch(e){r("@buoy-gg/js-top",e)}try{D=require("@buoy-gg/images")}catch(e){r("@buoy-gg/images",e)}try{N=require("@buoy-gg/assets")}catch(e){r("@buoy-gg/assets",e)}try{U=require("@buoy-gg/tv-remote")}catch(e){r("@buoy-gg/tv-remote",e)}try{P=require("@buoy-gg/focus-inspector")}catch(e){r("@buoy-gg/focus-inspector",e)}try{s=require("expo-constants")}catch(e){r("expo-constants",e)}export function isExternalSyncAvailable(){return!!i?.useExternalSyncSocket}function ne(){const e=s?.default??s;return e?.expoConfig?.name??e?.manifest2?.extra?.expoClient?.name??null}function ce(){const e=s?.default??s;const n=e?.deviceName;return typeof n==="string"&&n.length>0?n:null}export function useToolAdapterMap({requiredEnvVars:e,customApps:n}){const c=p?.useReactQuerySyncAdapter?p.useReactQuerySyncAdapter():null;return ue(c,e,n)}export function ToolRegistryPublisher({requiredEnvVars:e,customApps:n}){const c=useToolAdapterMap({requiredEnvVars:e,customApps:n});const t=F(c);t.current=c;H(()=>oe(()=>t.current),[]);return null}export function AutoExternalSync({options:e,requiredEnvVars:n,isPro:c,tier:t,licenseKey:o,customApps:K}){const{useExternalSyncSocket:W,useExternalSync:X}=i;const C=useToolAdapterMap({requiredEnvVars:n,customApps:K});const O=ee(e,{appName:ne(),hardwareName:ce(),platform:G.OS});const Q=O?.deviceId??null;const{socket:u}=W({deviceName:O?.deviceName??"Buoy Device",socketURL:e?.socketURL??i.getDefaultSocketURL?.()??"http://localhost:42831",persistentDeviceId:Q,platform:G.OS,enableLogs:e?.enableLogs});const a=F({isPro:c,tier:t,licenseKey:o});a.current={isPro:c,tier:t,licenseKey:o};H(()=>{if(!u)return;const y=()=>{if(!J.hasAccountAccess()||!u.connected)return;const V=J.getState();if(!a.current.isPro&&(V.isInitialized===false||V.isValidating===true))return;u.emit("device-license",{isPro:a.current.isPro?"1":"0",tier:a.current.tier??(a.current.isPro?"pro":"free")})};if(u.connected)y();u.on("connect",y);return()=>{u.off("connect",y)}},[u,c,t,o]);const l=e?.releaseActions?.join(",")??"";const Y=$(()=>te(C,typeof __DEV__!=="undefined"&&__DEV__,l?l.split(","):void 0),[C,l]);X({tools:Y,socket:u,deviceId:Q,enableLogs:e?.enableLogs});return null}function ue(e,n,c){return $(()=>{const t={app:Z};if(g?.storageSyncAdapter){t.storage=g.storageSyncAdapter}if(d?.networkSyncAdapter){t.network=d.networkSyncAdapter}if(e){t.query=e}if(f?.routeEventsSyncAdapter){t["route-events"]=f.routeEventsSyncAdapter}if(b?.reduxSyncAdapter){t.redux=b.reduxSyncAdapter}if(m?.zustandSyncAdapter){t.zustand=m.zustandSyncAdapter}if(S?.jotaiSyncAdapter){t.jotai=S.jotaiSyncAdapter}if(A?.eventsSyncAdapter){t.events=A.eventsSyncAdapter}if(h?.consoleSyncAdapter){t.console=h.consoleSyncAdapter}if(q?.memoryLeaksSyncAdapter)t["memory-leaks"]=q.memoryLeaksSyncAdapter;if(M?.clockSyncAdapter){t.clock=M.clockSyncAdapter}if(v?.permissionsSyncAdapter){t.permissions=v.permissionsSyncAdapter}if(k?.bugLinksSyncAdapter){t["bug-links"]=k.bugLinksSyncAdapter}if(L?.otaInspectorSyncAdapter)t["ota-update-inspector"]=L.otaInspectorSyncAdapter;if(x?.lifecycleSyncAdapter){t.lifecycle=x.lifecycleSyncAdapter}if(R?.locationSyncAdapter){t.location=R.locationSyncAdapter}if(E?.notificationSyncAdapter){t["push-notifications"]=E.notificationSyncAdapter}if(j?.sentrySyncAdapter){t.sentry=j.sentrySyncAdapter}try{const o=require("@buoy-gg/time-machine");if(o?.timeMachineSyncAdapter){t["time-machine"]=o.timeMachineSyncAdapter}}catch(o){r("@buoy-gg/time-machine",o)}try{const o=require("@buoy-gg/scenarios");if(o?.scenariosSyncAdapter){t.scenarios=o.scenariosSyncAdapter}}catch(o){r("@buoy-gg/scenarios",o)}try{const o=require("@buoy-gg/ask-buoy");if(o?.askBuoySyncAdapter){t["ask-buoy"]=o.askBuoySyncAdapter}}catch(o){r("@buoy-gg/ask-buoy",o)}if(I?.createEnvSyncAdapter){t.env=I.createEnvSyncAdapter(n??[])}if(w?.highlightUpdatesSyncAdapter){t["highlight-updates"]=w.highlightUpdatesSyncAdapter}if(T?.debugBordersSyncAdapter){t["debug-borders"]=T.debugBordersSyncAdapter}if(_?.impersonateSyncAdapter){t.impersonate=_.impersonateSyncAdapter}if(z?.perfMonitorSyncAdapter){t["perf-monitor"]=z.perfMonitorSyncAdapter}if(B?.jsTopSyncAdapter){t["js-top"]=B.jsTopSyncAdapter}if(D?.imagesSyncAdapter){t.images=D.imagesSyncAdapter}if(N?.assetsSyncAdapter){t.assets=N.assetsSyncAdapter}if(U?.tvRemoteSyncAdapter){t["tv-remote"]=U.tvRemoteSyncAdapter}if(P?.focusInspectorSyncAdapter){t["focus-inspector"]=P.focusInspectorSyncAdapter}for(const o of c??[]){if(o?.sync){t[`custom:${o.id}`]=o.sync}}return t},[e,n,c])}
@@ -0,0 +1 @@
1
+ "use strict";export function resolveBackTarget(n,l){if(l)return{kind:"dial"};for(let t=n.length-1;t>=0;t--){const i=n[t];if(i.launchMode!=="toggle-only"&&!i.minimized){return{kind:"tool",instanceId:i.instanceId}}}const e=n[n.length-1];return e?{kind:"tool",instanceId:e.instanceId}:null}
@@ -1 +1 @@
1
- "use strict";import{useEffect as s,useRef as l}from"react";import{capacitorPlatform as f,capacitorPlugin as _}from"@buoy-gg/license";export function isBuoyHoldingBackButton(){return globalThis.__BUOY_HOLDS_BACK__===true}export const BUOY_BACK_PRIORITY=99.5;export function ionicHandlesBack(){if(typeof document==="undefined")return false;const e=globalThis.Ionic;if(!e&&!document.querySelector("ion-app"))return false;try{return e?.config?.get?.("hardwareBackButton",true)!==false}catch{return true}}export function useCapacitorBackButton(e,u){const n=l(u);n.current=u;s(()=>{if(!e||f()!=="android")return;const o=globalThis;o.__BUOY_HOLDS_BACK__=true;let i;if(ionicHandlesBack()){const t=r=>{r.detail?.register?.(BUOY_BACK_PRIORITY,()=>{n.current()})};document.addEventListener("ionBackButton",t);i=()=>document.removeEventListener("ionBackButton",t)}else{const t=_("App");if(!t?.addListener){o.__BUOY_HOLDS_BACK__=false;return}let r=false;let c=null;void Promise.resolve(t.addListener("backButton",()=>n.current())).then(a=>{if(r)void a.remove();else c=a}).catch(()=>{});i=()=>{r=true;if(c)void c.remove()}}return()=>{i();o.__BUOY_HOLDS_BACK__=false}},[e])}
1
+ "use strict";import{useEffect as f,useRef as B}from"react";import{capacitorPlatform as _,capacitorPlugin as p}from"@buoy-gg/license";export function isBuoyHoldingBackButton(){return globalThis.__BUOY_HOLDS_BACK__===true}export const BUOY_BACK_PRIORITY=99.5;export const BUOY_DIAL_BACK_PRIORITY=99.6;let n=0;export function ionicHandlesBack(){if(typeof document==="undefined")return false;const e=globalThis.Ionic;if(!e&&!document.querySelector("ion-app"))return false;try{return e?.config?.get?.("hardwareBackButton",true)!==false}catch{return true}}export function useCapacitorBackButton(e,u,a=BUOY_BACK_PRIORITY){const o=B(u);o.current=u;f(()=>{if(!e||_()!=="android")return;const s=globalThis;n+=1;s.__BUOY_HOLDS_BACK__=true;const l=()=>{n=Math.max(0,n-1);s.__BUOY_HOLDS_BACK__=n>0};let c;if(ionicHandlesBack()){const t=r=>{r.detail?.register?.(a,()=>{o.current()})};document.addEventListener("ionBackButton",t);c=()=>document.removeEventListener("ionBackButton",t)}else{const t=p("App");if(!t?.addListener){l();return}let r=false;let i=null;void Promise.resolve(t.addListener("backButton",()=>o.current())).then(d=>{if(r)void d.remove();else i=d}).catch(()=>{});c=()=>{r=true;if(i)void i.remove()}}return()=>{c();l()}},[e,a])}
@@ -1 +1 @@
1
- "use strict";import{useEffect as S,useMemo as v,useRef as f,useState as w}from"react";import{Pressable as Le,StyleSheet as Be,TouchableOpacity as Oe,View as l,useWindowDimensions as Re,Text as L,Animated as o,Easing as c}from"react-native";import{absoluteFill as u,monoFont as F}from"@buoy-gg/shared-ui";import{DialIcon as ie}from"./DialIcon.js";import{DialHyperspace as Pe}from"./DialHyperspace.js";import{DialPagination as Ae}from"./DialPagination.js";import{getRankedToolIds as j,isDialUsageLoaded as Ve,loadDialUsage as Ne,recordToolUsage as Ge}from"./dialUsageStore.js";import{persistentStorage as P,useHintsDisabled as Me,devToolsStorageKeys as re,buoyColors as ae,ToolBackground as _e,useToolBackground as Ee}from"@buoy-gg/shared-ui";import{DevToolsSettingsModal as Fe,useDevToolsSettings as je}from"../DevToolsSettingsModal";import{useProAccess as ze}from"@buoy-gg/license";import{renderAppIcon as se}from"../AppIcon";import{useAppHost as Ue}from"../AppHost";import{OnboardingTooltip as We}from"./OnboardingTooltip";import{getDialLayout as $e,MAX_DIAL_SLOTS as T,DIAL_BUTTON_SIZE as qe,dialAnimationConfig as z,dialColors as a}from"@buoy-gg/floating-tools-core";import{jsx as i,jsxs as h,Fragment as le}from"react/jsx-runtime";const d=qe;const He={x:.5,y:.5};const Ke=d*.75+6;const Ye=false;const ce="@react_buoy_settings_tooltip_shown";const Ze=y=>({id:`empty-${y}`,name:`empty-${y}`,icon:null,color:"transparent",onPress:()=>{}});export const DialDevTools=({onClose:y,onSettingsPress:de,autoOpenSettings:U=false,apps:B,emptyNote:W,state:Xe,actions:$})=>{const[ue,ge]=w(-1);const[g,k]=w(false);const[q,pe]=w(false);const[H,K]=w(false);const A=f(false);const Y=Me();const{refreshSettings:me}=je();const{open:Z}=Ue();const{isPro:fe,isWeekendFree:X}=ze();const{width:V,height:he}=Re();const s=$e({screenWidth:V}).circleSize;const{id:ye}=Ee();const p=v(()=>({parent:{width:s,height:s},circle:{width:s,height:s,borderRadius:s/2},rounded:{borderRadius:s/2},gridLine:{width:s},spoke:{width:s/2-Ke}}),[s]);S(()=>{const t=async()=>{try{const e=await P.getItem(re.settings.modalOpen());if(e==="true"){k(true)}}catch(e){}finally{pe(true)}};t()},[]);S(()=>{if(!q)return;P.setItem(re.settings.modalOpen(),g?"true":"false").catch(t=>{console.warn("[Buoy]","Failed to save settings modal state:",t)})},[g,q]);S(()=>{if(U&&!g){k(true)}},[U,g]);S(()=>{if(Y){return}const t=async()=>{try{const e=await P.getItem(ce);if(!e){setTimeout(()=>{K(true)},1200)}}catch(e){}};t()},[Y]);const N=f(new o.Value(0)).current;const D=f(new o.Value(0)).current;const G=f(new o.Value(0)).current;const x=f(new o.Value(0)).current;const O=f(new o.Value(0)).current;const M=f(new o.Value(1)).current;const be=v(()=>B.map(({id:t,name:e,slot:r,description:I,icon:Ce,color:Ie})=>({id:t,name:e,slot:r,description:I,icon:Ce,color:Ie})),[B]);const C=f(null);const Se=()=>{if(g){k(false);return}k(true);if(H&&!A.current){te()}de?.()};const b=v(()=>B.filter(t=>(t.slot??"both")!=="row"),[B]);const J=v(()=>{const t=new Map;for(const e of b){t.set(e.id,{id:e.id,name:e.name,icon:typeof e.icon==="function"?null:se(e.icon,{slot:"dial",size:20,color:e.color}),iconComponent:typeof e.icon==="function"?e.icon:void 0,color:e.color??ae.primary,onPress:()=>{void Ge(e.id);e?.onPress?.($);if(e.launchMode!=="toggle-only"){const r=se(e.icon,{slot:"dial",size:20,color:e.color});Z({id:e.id,title:e.name,component:e.component,props:e.props,launchMode:e.launchMode??"self-modal",singleton:e.singleton??true,icon:r,color:e.color,modal:e.modal})}y?.()}})}return t},[b,$,Z,y]);const[_,Q]=w(()=>j(b.map(t=>t.id)));S(()=>{const t=b.map(r=>r.id);if(Ve()){Q(j(t));return}let e=false;Ne().then(()=>{if(!e)Q(j(t))});return()=>{e=true}},[b]);const R=Math.max(1,Math.ceil(_.length/T));const[ve,we]=w(0);const m=Math.min(ve,R-1);const E=v(()=>{return _.map(t=>J.get(t)).filter(t=>Boolean(t)).map((t,e)=>({icon:t,page:Math.floor(e/T),slot:e%T}))},[_,J]);const Te=v(()=>{const t=E.filter(r=>r.page===m).length;const e=[];for(let r=t;r<T;r+=1)e.push(r);return e},[E,m]);const ee=t=>{const e=Math.max(0,Math.min(t,R-1));if(e!==m)we(e)};S(()=>{const t=z??{entrance:{backdrop:{duration:400},dial:{scale:{damping:15,stiffness:150,mass:1},rotation:{duration:800}},centerButton:{delay:150,damping:10,stiffness:200},icons:{delay:200,duration:400},circuitTraces:{delay:600,duration:1e3}},continuous:{glitch:{interval:3e3,offset:2,stepDuration:50},pulse:{maxScale:1.02,minScale:.98,duration:1e3},floating:{maxY:-8,minY:0,duration:3e3},breathing:{maxScale:1.05,minScale:.98,duration:2500}}};const{entrance:e,continuous:r}=t;o.timing(N,{toValue:1,duration:e.backdrop.duration,useNativeDriver:true}).start();o.spring(D,{toValue:1,damping:e.dial.scale.damping,stiffness:e.dial.scale.stiffness,mass:e.dial.scale.mass,useNativeDriver:true}).start();o.sequence([o.timing(G,{toValue:1,duration:e.dial.rotation.duration,easing:c.out(c.cubic),useNativeDriver:true}),o.timing(G,{toValue:0,duration:0,useNativeDriver:true})]).start();o.sequence([o.delay(e.centerButton.delay),o.spring(x,{toValue:1,damping:e.centerButton.damping,stiffness:e.centerButton.stiffness,useNativeDriver:true})]).start();o.sequence([o.delay(e.icons.delay),o.timing(O,{toValue:1,duration:e.icons.duration,easing:c.out(c.cubic),useNativeDriver:true})]).start();if(!Ye)return;C.current=o.loop(o.sequence([o.timing(M,{toValue:r.pulse.maxScale,duration:r.pulse.duration,easing:c.inOut(c.ease),useNativeDriver:true}),o.timing(M,{toValue:r.pulse.minScale,duration:r.pulse.duration,easing:c.inOut(c.ease),useNativeDriver:true})]));C.current.start();return()=>{C.current?.stop()}},[]);const te=()=>{A.current=true;K(false);P.setItem(ce,"true").catch(t=>{console.warn("[Buoy]","Failed to save dial onboarding state:",t)})};const oe=()=>{if(C.current){C.current.stop()}const t=z?.exit??{icons:{duration:300},centerButton:{duration:200},dialScale:{duration:250},backdrop:{duration:200}};o.sequence([o.timing(O,{toValue:0,duration:t.icons.duration,easing:c.in(c.cubic),useNativeDriver:true}),o.parallel([o.timing(x,{toValue:0,duration:t.centerButton.duration,easing:c.in(c.cubic),useNativeDriver:true}),o.timing(D,{toValue:0,duration:t.dialScale.duration,easing:c.in(c.cubic),useNativeDriver:true})]),o.timing(N,{toValue:0,duration:t.backdrop.duration,useNativeDriver:true})]).start(()=>{if(y){setTimeout(()=>{y()},0)}})};const ne=t=>{ge(1);const e=z?.interaction??{iconSelect:{pulse:[{scale:.9,damping:15,stiffness:500},{scale:1,damping:10,stiffness:200}],actionDelay:50}};const[r,I]=e.iconSelect.pulse;o.sequence([o.spring(x,{toValue:r.scale,damping:r.damping,stiffness:r.stiffness,useNativeDriver:true}),o.spring(x,{toValue:I.scale,damping:I.damping,stiffness:I.stiffness,useNativeDriver:true})]).start();setTimeout(()=>{t.onPress();if(t.id!=="wifi"){oe()}},e.iconSelect.actionDelay)};const ke={opacity:N};const De={transform:[{scale:x}]};const xe={transform:[{scale:ue>=0?1:M}]};return h(l,{style:n.container,nativeID:"dial-devtools-root",children:[i(o.View,{style:[n.backdrop,ke],children:i(Le,{style:u,onPress:oe})}),b.length===0&&W?i(L,{style:[n.emptyNote,{bottom:80+s+16}],accessibilityLiveRegion:"polite",testID:"buoy-dial-empty-note",children:W}):null,h(o.View,{style:[n.parent,p.parent,{position:"absolute",left:(V-s)/2,bottom:80,transform:[{scale:D},{rotate:G.interpolate({inputRange:[0,1],outputRange:["0deg","360deg"]})}]}],children:[h(o.View,{style:[n.circle,p.circle],children:[h(l,{style:[n.gradientBackground,p.rounded],children:[i(l,{style:[n.gradientLayer1,p.rounded]}),i(l,{style:[n.gradientLayer2,p.rounded]}),i(l,{style:[n.gradientLayer3,p.rounded]}),i(l,{style:n.gridPattern,children:Array.from({length:6}).map((t,e)=>h(l,{style:[n.gridLine,p.gridLine,{transform:[{rotate:`${e*60}deg`}]}],children:[i(l,{style:[n.spoke,p.spoke,n.spokeLeft]}),i(l,{style:[n.spoke,p.spoke,n.spokeRight]})]},e))}),ye==="hyperspace"?i(Pe,{size:s}):i(_e,{focus:He})]}),E.filter(({page:t})=>t===m).map(({icon:t,slot:e})=>i(ie,{onPress:ne,iconsProgress:O,icon:t,index:e,totalIcons:T,active:true},`${t.id??"icon"}:${m}:${e}`)),Te.map(t=>i(ie,{onPress:ne,iconsProgress:O,icon:Ze(t),index:t,totalIcons:T,active:true},`empty-${t}`))]}),i(o.View,{style:[n.buttonContainer,De],children:h(l,{style:n.buttonGradient,children:[i(l,{style:n.buttonGradientLayer1}),i(l,{style:n.buttonGradientLayer2}),i(l,{style:n.buttonGradientLayer3}),i(l,{style:n.buttonBorder,children:i(o.View,{style:[n.button,xe],children:i(Oe,{accessibilityRole:"button",accessibilityLabel:g?"Close Settings":"Open Dev Tools Settings",onPress:Se,activeOpacity:.5,style:n.buttonPressable,children:g?h(le,{children:[i(L,{style:[n.centerText,n.closeTextTop],children:"CLOSE"}),i(L,{style:[n.centerText,n.closeTextBottom],children:"SETTINGS"})]}):h(le,{children:[i(L,{style:n.centerText,children:"BUOY"}),fe&&i(L,{style:[n.proText,X&&n.weekendText],children:X?"WEEKEND":"PRO"})]})})})})]})})]}),R>1&&i(Ae,{page:m,pageCount:R,onPrev:()=>ee(m-1),onNext:()=>ee(m+1),animatedStyle:{position:"absolute",left:(V-s)/2,top:he-80+16,width:s,opacity:D,transform:[{scale:D}]}}),g&&i(Fe,{visible:true,onClose:()=>{k(false);me()},availableApps:be}),H&&!g&&!A.current&&i(We,{visible:true,onDismiss:te})]})};const n=Be.create({container:{...u,zIndex:9999},backdrop:{...u,backgroundColor:a.dialBackdrop},parent:{alignItems:"center",justifyContent:"center"},circle:{position:"absolute",backgroundColor:"transparent",borderWidth:1,borderColor:a.dialBorder,shadowColor:a.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.5,shadowRadius:20,elevation:10},gradientBackground:{width:"100%",height:"100%",position:"relative",backgroundColor:a.dialBackground,overflow:"hidden"},gradientLayer1:{...u,backgroundColor:a.dialGradient1,opacity:.6},gradientLayer2:{...u,backgroundColor:a.dialGradient2,opacity:.4,top:"30%",left:"30%"},gradientLayer3:{...u,backgroundColor:a.dialGradient3,opacity:.3,top:"50%",left:"50%"},gridPattern:{...u,alignItems:"center",justifyContent:"center"},gridLine:{position:"absolute",height:1},spoke:{position:"absolute",top:0,height:1,backgroundColor:a.dialGridLine},spokeLeft:{left:0},spokeRight:{right:0},buttonContainer:{zIndex:1,backgroundColor:"transparent",alignItems:"center",justifyContent:"center",position:"absolute",width:d*1.5,height:d*1.5,borderRadius:d},buttonGradient:{width:"100%",height:"100%",borderRadius:d,alignItems:"center",justifyContent:"center",padding:4,backgroundColor:a.hubHalo,position:"relative",overflow:"hidden"},buttonGradientLayer1:{...u,backgroundColor:a.dialGradient1,opacity:.5,borderRadius:d},buttonGradientLayer2:{...u,backgroundColor:a.dialGradient2,opacity:.3,top:"20%",left:"20%",borderRadius:d},buttonGradientLayer3:{...u,backgroundColor:a.dialGradient3,opacity:.2,top:"40%",left:"40%",borderRadius:d},buttonBorder:{backgroundColor:a.hubFill,alignItems:"center",justifyContent:"center",width:d*1.2,height:d*1.2,borderRadius:d*.6},button:{width:d,height:d,borderRadius:d/2,justifyContent:"center",alignItems:"center",position:"relative",overflow:"hidden"},buttonPressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},centerText:{color:a.centerText,fontSize:10,fontWeight:"900",fontFamily:F,letterSpacing:1,textAlign:"center",textTransform:"uppercase",textShadowColor:a.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},closeTextTop:{marginBottom:-2},emptyNote:{position:"absolute",left:16,right:16,color:a.iconLabel,fontSize:12,fontFamily:F,textAlign:"center"},closeTextBottom:{marginTop:-2},proText:{color:ae.warning,fontSize:8,fontWeight:"900",fontFamily:F,letterSpacing:2,textAlign:"center",textShadowColor:a.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},weekendText:{color:"#BF5AF2",letterSpacing:1}});
1
+ "use strict";import{useEffect as w,useMemo as v,useRef as m,useState as T}from"react";import{Pressable as Be,StyleSheet as Oe,TouchableOpacity as Re,View as l,useWindowDimensions as Pe,Text as L,Animated as o,Easing as c}from"react-native";import{absoluteFill as g,monoFont as j}from"@buoy-gg/shared-ui";import{DialIcon as ae}from"./DialIcon.js";import{DialHyperspace as Ae}from"./DialHyperspace.js";import{DialPagination as Ve}from"./DialPagination.js";import{getRankedToolIds as z,isDialUsageLoaded as Ne,loadDialUsage as Ge,recordToolUsage as Me}from"./dialUsageStore.js";import{persistentStorage as P,useHintsDisabled as _e,devToolsStorageKeys as se,buoyColors as le,ToolBackground as Ee,useToolBackground as Fe}from"@buoy-gg/shared-ui";import{DevToolsSettingsModal as je,useDevToolsSettings as ze}from"../DevToolsSettingsModal";import{useProAccess as Ue}from"@buoy-gg/license";import{renderAppIcon as ce}from"../AppIcon";import{useAppHost as He}from"../AppHost";import{useHardwareBack as We}from"../hardwareBack.js";import{OnboardingTooltip as $e}from"./OnboardingTooltip";import{getDialLayout as qe,MAX_DIAL_SLOTS as k,DIAL_BUTTON_SIZE as Ke,dialAnimationConfig as U,dialColors as a}from"@buoy-gg/floating-tools-core";import{jsx as i,jsxs as h,Fragment as de}from"react/jsx-runtime";const d=Ke;const Ye={x:.5,y:.5};const Ze=d*.75+6;const Xe=false;const ue="@react_buoy_settings_tooltip_shown";const Je=y=>({id:`empty-${y}`,name:`empty-${y}`,icon:null,color:"transparent",onPress:()=>{}});export const DialDevTools=({onClose:y,onSettingsPress:ge,autoOpenSettings:H=false,apps:B,emptyNote:W,state:Qe,actions:$})=>{const[pe,me]=T(-1);const[u,b]=T(false);const[q,fe]=T(false);const[K,Y]=T(false);const A=m(false);const Z=_e();const{refreshSettings:X}=ze();const{open:J}=He();const{isPro:he,isWeekendFree:Q}=Ue();const{width:V,height:ye}=Pe();const s=qe({screenWidth:V}).circleSize;const{id:be}=Fe();const p=v(()=>({parent:{width:s,height:s},circle:{width:s,height:s,borderRadius:s/2},rounded:{borderRadius:s/2},gridLine:{width:s},spoke:{width:s/2-Ze}}),[s]);w(()=>{const t=async()=>{try{const e=await P.getItem(se.settings.modalOpen());if(e==="true"){b(true)}}catch(e){}finally{fe(true)}};t()},[]);w(()=>{if(!q)return;P.setItem(se.settings.modalOpen(),u?"true":"false").catch(t=>{console.warn("[Buoy]","Failed to save settings modal state:",t)})},[u,q]);w(()=>{if(H&&!u){b(true)}},[H,u]);w(()=>{if(Z){return}const t=async()=>{try{const e=await P.getItem(ue);if(!e){setTimeout(()=>{Y(true)},1200)}}catch(e){}};t()},[Z]);const N=m(new o.Value(0)).current;const D=m(new o.Value(0)).current;const G=m(new o.Value(0)).current;const x=m(new o.Value(0)).current;const O=m(new o.Value(0)).current;const M=m(new o.Value(1)).current;const Se=v(()=>B.map(({id:t,name:e,slot:r,description:I,icon:Ie,color:Le})=>({id:t,name:e,slot:r,description:I,icon:Ie,color:Le})),[B]);const ee=m(false);const C=m(null);const we=()=>{if(u){b(false);return}b(true);if(K&&!A.current){ie()}ge?.()};const S=v(()=>B.filter(t=>(t.slot??"both")!=="row"),[B]);const te=v(()=>{const t=new Map;for(const e of S){t.set(e.id,{id:e.id,name:e.name,icon:typeof e.icon==="function"?null:ce(e.icon,{slot:"dial",size:20,color:e.color}),iconComponent:typeof e.icon==="function"?e.icon:void 0,color:e.color??le.primary,onPress:()=>{void Me(e.id);e?.onPress?.($);if(e.launchMode!=="toggle-only"){const r=ce(e.icon,{slot:"dial",size:20,color:e.color});J({id:e.id,title:e.name,component:e.component,props:e.props,launchMode:e.launchMode??"self-modal",singleton:e.singleton??true,icon:r,color:e.color,modal:e.modal})}y?.()}})}return t},[S,$,J,y]);const[_,oe]=T(()=>z(S.map(t=>t.id)));w(()=>{const t=S.map(r=>r.id);if(Ne()){oe(z(t));return}let e=false;Ge().then(()=>{if(!e)oe(z(t))});return()=>{e=true}},[S]);const R=Math.max(1,Math.ceil(_.length/k));const[ve,Te]=T(0);const f=Math.min(ve,R-1);const E=v(()=>{return _.map(t=>te.get(t)).filter(t=>Boolean(t)).map((t,e)=>({icon:t,page:Math.floor(e/k),slot:e%k}))},[_,te]);const ke=v(()=>{const t=E.filter(r=>r.page===f).length;const e=[];for(let r=t;r<k;r+=1)e.push(r);return e},[E,f]);const ne=t=>{const e=Math.max(0,Math.min(t,R-1));if(e!==f)Te(e)};w(()=>{const t=U??{entrance:{backdrop:{duration:400},dial:{scale:{damping:15,stiffness:150,mass:1},rotation:{duration:800}},centerButton:{delay:150,damping:10,stiffness:200},icons:{delay:200,duration:400},circuitTraces:{delay:600,duration:1e3}},continuous:{glitch:{interval:3e3,offset:2,stepDuration:50},pulse:{maxScale:1.02,minScale:.98,duration:1e3},floating:{maxY:-8,minY:0,duration:3e3},breathing:{maxScale:1.05,minScale:.98,duration:2500}}};const{entrance:e,continuous:r}=t;o.timing(N,{toValue:1,duration:e.backdrop.duration,useNativeDriver:true}).start();o.spring(D,{toValue:1,damping:e.dial.scale.damping,stiffness:e.dial.scale.stiffness,mass:e.dial.scale.mass,useNativeDriver:true}).start();o.sequence([o.timing(G,{toValue:1,duration:e.dial.rotation.duration,easing:c.out(c.cubic),useNativeDriver:true}),o.timing(G,{toValue:0,duration:0,useNativeDriver:true})]).start();o.sequence([o.delay(e.centerButton.delay),o.spring(x,{toValue:1,damping:e.centerButton.damping,stiffness:e.centerButton.stiffness,useNativeDriver:true})]).start();o.sequence([o.delay(e.icons.delay),o.timing(O,{toValue:1,duration:e.icons.duration,easing:c.out(c.cubic),useNativeDriver:true})]).start();if(!Xe)return;C.current=o.loop(o.sequence([o.timing(M,{toValue:r.pulse.maxScale,duration:r.pulse.duration,easing:c.inOut(c.ease),useNativeDriver:true}),o.timing(M,{toValue:r.pulse.minScale,duration:r.pulse.duration,easing:c.inOut(c.ease),useNativeDriver:true})]));C.current.start();return()=>{C.current?.stop()}},[]);const ie=()=>{A.current=true;Y(false);P.setItem(ue,"true").catch(t=>{console.warn("[Buoy]","Failed to save dial onboarding state:",t)})};const F=()=>{ee.current=true;if(C.current){C.current.stop()}const t=U?.exit??{icons:{duration:300},centerButton:{duration:200},dialScale:{duration:250},backdrop:{duration:200}};o.sequence([o.timing(O,{toValue:0,duration:t.icons.duration,easing:c.in(c.cubic),useNativeDriver:true}),o.parallel([o.timing(x,{toValue:0,duration:t.centerButton.duration,easing:c.in(c.cubic),useNativeDriver:true}),o.timing(D,{toValue:0,duration:t.dialScale.duration,easing:c.in(c.cubic),useNativeDriver:true})]),o.timing(N,{toValue:0,duration:t.backdrop.duration,useNativeDriver:true})]).start(()=>{if(y){setTimeout(()=>{y()},0)}})};We(true,()=>{if(ee.current)return true;if(u){b(false);X();return true}F();return true});const re=t=>{me(1);const e=U?.interaction??{iconSelect:{pulse:[{scale:.9,damping:15,stiffness:500},{scale:1,damping:10,stiffness:200}],actionDelay:50}};const[r,I]=e.iconSelect.pulse;o.sequence([o.spring(x,{toValue:r.scale,damping:r.damping,stiffness:r.stiffness,useNativeDriver:true}),o.spring(x,{toValue:I.scale,damping:I.damping,stiffness:I.stiffness,useNativeDriver:true})]).start();setTimeout(()=>{t.onPress();if(t.id!=="wifi"){F()}},e.iconSelect.actionDelay)};const De={opacity:N};const xe={transform:[{scale:x}]};const Ce={transform:[{scale:pe>=0?1:M}]};return h(l,{style:n.container,nativeID:"dial-devtools-root",children:[i(o.View,{style:[n.backdrop,De],children:i(Be,{style:g,onPress:F})}),S.length===0&&W?i(L,{style:[n.emptyNote,{bottom:80+s+16}],accessibilityLiveRegion:"polite",testID:"buoy-dial-empty-note",children:W}):null,h(o.View,{style:[n.parent,p.parent,{position:"absolute",left:(V-s)/2,bottom:80,transform:[{scale:D},{rotate:G.interpolate({inputRange:[0,1],outputRange:["0deg","360deg"]})}]}],children:[h(o.View,{style:[n.circle,p.circle],children:[h(l,{style:[n.gradientBackground,p.rounded],children:[i(l,{style:[n.gradientLayer1,p.rounded]}),i(l,{style:[n.gradientLayer2,p.rounded]}),i(l,{style:[n.gradientLayer3,p.rounded]}),i(l,{style:n.gridPattern,children:Array.from({length:6}).map((t,e)=>h(l,{style:[n.gridLine,p.gridLine,{transform:[{rotate:`${e*60}deg`}]}],children:[i(l,{style:[n.spoke,p.spoke,n.spokeLeft]}),i(l,{style:[n.spoke,p.spoke,n.spokeRight]})]},e))}),be==="hyperspace"?i(Ae,{size:s}):i(Ee,{focus:Ye})]}),E.filter(({page:t})=>t===f).map(({icon:t,slot:e})=>i(ae,{onPress:re,iconsProgress:O,icon:t,index:e,totalIcons:k,active:true},`${t.id??"icon"}:${f}:${e}`)),ke.map(t=>i(ae,{onPress:re,iconsProgress:O,icon:Je(t),index:t,totalIcons:k,active:true},`empty-${t}`))]}),i(o.View,{style:[n.buttonContainer,xe],children:h(l,{style:n.buttonGradient,children:[i(l,{style:n.buttonGradientLayer1}),i(l,{style:n.buttonGradientLayer2}),i(l,{style:n.buttonGradientLayer3}),i(l,{style:n.buttonBorder,children:i(o.View,{style:[n.button,Ce],children:i(Re,{accessibilityRole:"button",accessibilityLabel:u?"Close Settings":"Open Dev Tools Settings",onPress:we,activeOpacity:.5,style:n.buttonPressable,children:u?h(de,{children:[i(L,{style:[n.centerText,n.closeTextTop],children:"CLOSE"}),i(L,{style:[n.centerText,n.closeTextBottom],children:"SETTINGS"})]}):h(de,{children:[i(L,{style:n.centerText,children:"BUOY"}),he&&i(L,{style:[n.proText,Q&&n.weekendText],children:Q?"WEEKEND":"PRO"})]})})})})]})})]}),R>1&&i(Ve,{page:f,pageCount:R,onPrev:()=>ne(f-1),onNext:()=>ne(f+1),animatedStyle:{position:"absolute",left:(V-s)/2,top:ye-80+16,width:s,opacity:D,transform:[{scale:D}]}}),u&&i(je,{visible:true,onClose:()=>{b(false);X()},availableApps:Se}),K&&!u&&!A.current&&i($e,{visible:true,onDismiss:ie})]})};const n=Oe.create({container:{...g,zIndex:9999},backdrop:{...g,backgroundColor:a.dialBackdrop},parent:{alignItems:"center",justifyContent:"center"},circle:{position:"absolute",backgroundColor:"transparent",borderWidth:1,borderColor:a.dialBorder,shadowColor:a.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.5,shadowRadius:20,elevation:10},gradientBackground:{width:"100%",height:"100%",position:"relative",backgroundColor:a.dialBackground,overflow:"hidden"},gradientLayer1:{...g,backgroundColor:a.dialGradient1,opacity:.6},gradientLayer2:{...g,backgroundColor:a.dialGradient2,opacity:.4,top:"30%",left:"30%"},gradientLayer3:{...g,backgroundColor:a.dialGradient3,opacity:.3,top:"50%",left:"50%"},gridPattern:{...g,alignItems:"center",justifyContent:"center"},gridLine:{position:"absolute",height:1},spoke:{position:"absolute",top:0,height:1,backgroundColor:a.dialGridLine},spokeLeft:{left:0},spokeRight:{right:0},buttonContainer:{zIndex:1,backgroundColor:"transparent",alignItems:"center",justifyContent:"center",position:"absolute",width:d*1.5,height:d*1.5,borderRadius:d},buttonGradient:{width:"100%",height:"100%",borderRadius:d,alignItems:"center",justifyContent:"center",padding:4,backgroundColor:a.hubHalo,position:"relative",overflow:"hidden"},buttonGradientLayer1:{...g,backgroundColor:a.dialGradient1,opacity:.5,borderRadius:d},buttonGradientLayer2:{...g,backgroundColor:a.dialGradient2,opacity:.3,top:"20%",left:"20%",borderRadius:d},buttonGradientLayer3:{...g,backgroundColor:a.dialGradient3,opacity:.2,top:"40%",left:"40%",borderRadius:d},buttonBorder:{backgroundColor:a.hubFill,alignItems:"center",justifyContent:"center",width:d*1.2,height:d*1.2,borderRadius:d*.6},button:{width:d,height:d,borderRadius:d/2,justifyContent:"center",alignItems:"center",position:"relative",overflow:"hidden"},buttonPressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},centerText:{color:a.centerText,fontSize:10,fontWeight:"900",fontFamily:j,letterSpacing:1,textAlign:"center",textTransform:"uppercase",textShadowColor:a.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},closeTextTop:{marginBottom:-2},emptyNote:{position:"absolute",left:16,right:16,color:a.iconLabel,fontSize:12,fontFamily:j,textAlign:"center"},closeTextBottom:{marginTop:-2},proText:{color:le.warning,fontSize:8,fontWeight:"900",fontFamily:j,letterSpacing:2,textAlign:"center",textShadowColor:a.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},weekendText:{color:"#BF5AF2",letterSpacing:1}});