@buoy-gg/core 7.0.78 → 7.0.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundlers/vite.d.ts +1 -1
- package/bundlers/vite.mjs +3 -3
- package/lib/commonjs/earlyNetwork.js +1 -1
- package/lib/commonjs/floatingMenu/AppHost.js +1 -1
- package/lib/commonjs/floatingMenu/AppHost.web.js +1 -1
- package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -1
- package/lib/commonjs/floatingMenu/BrowserToolRuntime.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
- package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -1
- package/lib/commonjs/floatingMenu/ToolHost.js +1 -1
- package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -1
- package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -1
- package/lib/commonjs/floatingMenu/backTarget.js +1 -0
- package/lib/commonjs/floatingMenu/capacitorBackButton.js +1 -1
- package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -1
- package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -1
- package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -1
- package/lib/commonjs/floatingMenu/hardwareBack.js +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/module/earlyNetwork.js +1 -1
- package/lib/module/floatingMenu/AppHost.js +1 -1
- package/lib/module/floatingMenu/AppHost.web.js +1 -1
- package/lib/module/floatingMenu/AppHostLogic.js +1 -1
- package/lib/module/floatingMenu/BrowserToolRuntime.js +1 -1
- package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
- package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -1
- package/lib/module/floatingMenu/ToolHost.js +1 -1
- package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -1
- package/lib/module/floatingMenu/autoExternalSync.js +1 -1
- package/lib/module/floatingMenu/backTarget.js +1 -0
- package/lib/module/floatingMenu/capacitorBackButton.js +1 -1
- package/lib/module/floatingMenu/dial/DialDevTools.js +1 -1
- package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -1
- package/lib/module/floatingMenu/externalSyncGate.js +1 -1
- package/lib/module/floatingMenu/hardwareBack.js +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/earlyNetwork.d.ts +19 -4
- package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts +6 -0
- package/lib/typescript/commonjs/floatingMenu/backTarget.d.ts +17 -0
- package/lib/typescript/commonjs/floatingMenu/capacitorBackButton.d.ts +5 -3
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/commonjs/floatingMenu/hardwareBack.d.ts +8 -0
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/earlyNetwork.d.ts +19 -4
- package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts +6 -0
- package/lib/typescript/module/floatingMenu/backTarget.d.ts +17 -0
- package/lib/typescript/module/floatingMenu/capacitorBackButton.d.ts +5 -3
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/module/floatingMenu/hardwareBack.d.ts +8 -0
- package/lib/typescript/module/version.d.ts +1 -1
- package/lib/web/auto.mjs +1 -1
- package/lib/web/chunks/{FloatingDevTools.web-FB3F35HU.mjs → FloatingDevTools.web-ESKLKOSQ.mjs} +1 -1
- package/lib/web/chunks/{FloatingDevTools.web-IIOOVSUC.mjs → FloatingDevTools.web-QLTO5FXP.mjs} +1 -1
- package/lib/web/chunks/chunk-H4EIRXRJ.mjs +10 -0
- package/lib/web/chunks/chunk-JXTHZBMM.mjs +10 -0
- package/lib/web/chunks/chunk-OXRZOHYP.mjs +1 -0
- package/lib/web/index.mjs +1 -1
- package/lib/web/register-network.mjs +1 -1
- package/lib/web/register.mjs +1 -1
- package/package.json +5 -5
- package/lib/web/chunks/chunk-5EUMNDI5.mjs +0 -1
- package/lib/web/chunks/chunk-A6DQ5EDK.mjs +0 -10
- package/lib/web/chunks/chunk-LAJ3HKAL.mjs +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialDevTools=void 0;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _DialIcon=require("./DialIcon.js");var _DialHyperspace=require("./DialHyperspace.js");var _DialPagination=require("./DialPagination.js");var _dialUsageStore=require("./dialUsageStore.js");var _DevToolsSettingsModal=require("../DevToolsSettingsModal");var _license=require("@buoy-gg/license");var _AppIcon=require("../AppIcon");var _AppHost=require("../AppHost");var _OnboardingTooltip=require("./OnboardingTooltip");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _jsxRuntime=require("react/jsx-runtime");const BUTTON_SIZE=_floatingToolsCore.DIAL_BUTTON_SIZE;const DIAL_BACKGROUND_FOCUS={x:.5,y:.5};const HUB_CLEARANCE=BUTTON_SIZE*.75+6;const DIAL_IDLE_PULSE=false;const ONBOARDING_STORAGE_KEY="@react_buoy_settings_tooltip_shown";const createEmptySlot=r=>({id:`empty-${r}`,name:`empty-${r}`,icon:null,color:"transparent",onPress:()=>{}});const DialDevTools=({onClose:r,onSettingsPress:F,autoOpenSettings:T=false,apps:m,emptyNote:D,state:ie,actions:C})=>{const[N,G]=(0,_react.useState)(-1);const[n,d]=(0,_react.useState)(false);const[I,q]=(0,_react.useState)(false);const[j,k]=(0,_react.useState)(false);const y=(0,_react.useRef)(false);const L=(0,_sharedUi.useHintsDisabled)();const{refreshSettings:U}=(0,_DevToolsSettingsModal.useDevToolsSettings)();const{open:_}=(0,_AppHost.useAppHost)();const{isPro:z,isWeekendFree:O}=(0,_license.useProAccess)();const{width:b,height:H}=(0,_reactNative.useWindowDimensions)();const i=(0,_floatingToolsCore.getDialLayout)({screenWidth:b}).circleSize;const{id:W}=(0,_sharedUi.useToolBackground)();const a=(0,_react.useMemo)(()=>({parent:{width:i,height:i},circle:{width:i,height:i,borderRadius:i/2},rounded:{borderRadius:i/2},gridLine:{width:i},spoke:{width:i/2-HUB_CLEARANCE}}),[i]);(0,_react.useEffect)(()=>{const t=async()=>{try{const e=await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen());if(e==="true"){d(true)}}catch(e){}finally{q(true)}};t()},[]);(0,_react.useEffect)(()=>{if(!I)return;_sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),n?"true":"false").catch(t=>{console.warn("[Buoy]","Failed to save settings modal state:",t)})},[n,I]);(0,_react.useEffect)(()=>{if(T&&!n){d(true)}},[T,n]);(0,_react.useEffect)(()=>{if(L){return}const t=async()=>{try{const e=await _sharedUi.persistentStorage.getItem(ONBOARDING_STORAGE_KEY);if(!e){setTimeout(()=>{k(true)},1200)}}catch(e){}};t()},[L]);const S=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const c=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const x=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const u=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const f=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const v=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current;const $=(0,_react.useMemo)(()=>m.map(({id:t,name:e,slot:o,description:p,icon:te,color:oe})=>({id:t,name:e,slot:o,description:p,icon:te,color:oe})),[m]);const g=(0,_react.useRef)(null);const X=()=>{if(n){d(false);return}d(true);if(j&&!y.current){M()}F?.()};const l=(0,_react.useMemo)(()=>m.filter(t=>(t.slot??"both")!=="row"),[m]);const R=(0,_react.useMemo)(()=>{const t=new Map;for(const e of l){t.set(e.id,{id:e.id,name:e.name,icon:typeof e.icon==="function"?null:(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color}),iconComponent:typeof e.icon==="function"?e.icon:void 0,color:e.color??_sharedUi.buoyColors.primary,onPress:()=>{void(0,_dialUsageStore.recordToolUsage)(e.id);e?.onPress?.(C);if(e.launchMode!=="toggle-only"){const o=(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color});_({id:e.id,title:e.name,component:e.component,props:e.props,launchMode:e.launchMode??"self-modal",singleton:e.singleton??true,icon:o,color:e.color,modal:e.modal})}r?.()}})}return t},[l,C,_,r]);const[A,V]=(0,_react.useState)(()=>(0,_dialUsageStore.getRankedToolIds)(l.map(t=>t.id)));(0,_react.useEffect)(()=>{const t=l.map(o=>o.id);if((0,_dialUsageStore.isDialUsageLoaded)()){V((0,_dialUsageStore.getRankedToolIds)(t));return}let e=false;(0,_dialUsageStore.loadDialUsage)().then(()=>{if(!e)V((0,_dialUsageStore.getRankedToolIds)(t))});return()=>{e=true}},[l]);const h=Math.max(1,Math.ceil(A.length/_floatingToolsCore.MAX_DIAL_SLOTS));const[K,Y]=(0,_react.useState)(0);const s=Math.min(K,h-1);const w=(0,_react.useMemo)(()=>{return A.map(t=>R.get(t)).filter(t=>Boolean(t)).map((t,e)=>({icon:t,page:Math.floor(e/_floatingToolsCore.MAX_DIAL_SLOTS),slot:e%_floatingToolsCore.MAX_DIAL_SLOTS}))},[A,R]);const Z=(0,_react.useMemo)(()=>{const t=w.filter(o=>o.page===s).length;const e=[];for(let o=t;o<_floatingToolsCore.MAX_DIAL_SLOTS;o+=1)e.push(o);return e},[w,s]);const E=t=>{const e=Math.max(0,Math.min(t,h-1));if(e!==s)Y(e)};(0,_react.useEffect)(()=>{const t=_floatingToolsCore.dialAnimationConfig??{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:o}=t;_reactNative.Animated.timing(S,{toValue:1,duration:e.backdrop.duration,useNativeDriver:true}).start();_reactNative.Animated.spring(c,{toValue:1,damping:e.dial.scale.damping,stiffness:e.dial.scale.stiffness,mass:e.dial.scale.mass,useNativeDriver:true}).start();_reactNative.Animated.sequence([_reactNative.Animated.timing(x,{toValue:1,duration:e.dial.rotation.duration,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:true}),_reactNative.Animated.timing(x,{toValue:0,duration:0,useNativeDriver:true})]).start();_reactNative.Animated.sequence([_reactNative.Animated.delay(e.centerButton.delay),_reactNative.Animated.spring(u,{toValue:1,damping:e.centerButton.damping,stiffness:e.centerButton.stiffness,useNativeDriver:true})]).start();_reactNative.Animated.sequence([_reactNative.Animated.delay(e.icons.delay),_reactNative.Animated.timing(f,{toValue:1,duration:e.icons.duration,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:true})]).start();if(!DIAL_IDLE_PULSE)return;g.current=_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.timing(v,{toValue:o.pulse.maxScale,duration:o.pulse.duration,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:true}),_reactNative.Animated.timing(v,{toValue:o.pulse.minScale,duration:o.pulse.duration,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:true})]));g.current.start();return()=>{g.current?.stop()}},[]);const M=()=>{y.current=true;k(false);_sharedUi.persistentStorage.setItem(ONBOARDING_STORAGE_KEY,"true").catch(t=>{console.warn("[Buoy]","Failed to save dial onboarding state:",t)})};const B=()=>{if(g.current){g.current.stop()}const t=_floatingToolsCore.dialAnimationConfig?.exit??{icons:{duration:300},centerButton:{duration:200},dialScale:{duration:250},backdrop:{duration:200}};_reactNative.Animated.sequence([_reactNative.Animated.timing(f,{toValue:0,duration:t.icons.duration,easing:_reactNative.Easing.in(_reactNative.Easing.cubic),useNativeDriver:true}),_reactNative.Animated.parallel([_reactNative.Animated.timing(u,{toValue:0,duration:t.centerButton.duration,easing:_reactNative.Easing.in(_reactNative.Easing.cubic),useNativeDriver:true}),_reactNative.Animated.timing(c,{toValue:0,duration:t.dialScale.duration,easing:_reactNative.Easing.in(_reactNative.Easing.cubic),useNativeDriver:true})]),_reactNative.Animated.timing(S,{toValue:0,duration:t.backdrop.duration,useNativeDriver:true})]).start(()=>{if(r){setTimeout(()=>{r()},0)}})};const P=t=>{G(1);const e=_floatingToolsCore.dialAnimationConfig?.interaction??{iconSelect:{pulse:[{scale:.9,damping:15,stiffness:500},{scale:1,damping:10,stiffness:200}],actionDelay:50}};const[o,p]=e.iconSelect.pulse;_reactNative.Animated.sequence([_reactNative.Animated.spring(u,{toValue:o.scale,damping:o.damping,stiffness:o.stiffness,useNativeDriver:true}),_reactNative.Animated.spring(u,{toValue:p.scale,damping:p.damping,stiffness:p.stiffness,useNativeDriver:true})]).start();setTimeout(()=>{t.onPress();if(t.id!=="wifi"){B()}},e.iconSelect.actionDelay)};const J={opacity:S};const Q={transform:[{scale:u}]};const ee={transform:[{scale:N>=0?1:v}]};return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.container,nativeID:"dial-devtools-root",children:[(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.backdrop,J],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_sharedUi.absoluteFill,onPress:B})}),l.length===0&&D?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.emptyNote,{bottom:80+i+16}],accessibilityLiveRegion:"polite",testID:"buoy-dial-empty-note",children:D}):null,(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[styles.parent,a.parent,{position:"absolute",left:(b-i)/2,bottom:80,transform:[{scale:c},{rotate:x.interpolate({inputRange:[0,1],outputRange:["0deg","360deg"]})}]}],children:[(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[styles.circle,a.circle],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.gradientBackground,a.rounded],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.gradientLayer1,a.rounded]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.gradientLayer2,a.rounded]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.gradientLayer3,a.rounded]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.gridPattern,children:Array.from({length:6}).map((t,e)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.gridLine,a.gridLine,{transform:[{rotate:`${e*60}deg`}]}],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.spoke,a.spoke,styles.spokeLeft]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.spoke,a.spoke,styles.spokeRight]})]},e))}),W==="hyperspace"?(0,_jsxRuntime.jsx)(_DialHyperspace.DialHyperspace,{size:i}):(0,_jsxRuntime.jsx)(_sharedUi.ToolBackground,{focus:DIAL_BACKGROUND_FOCUS})]}),w.filter(({page:t})=>t===s).map(({icon:t,slot:e})=>(0,_jsxRuntime.jsx)(_DialIcon.DialIcon,{onPress:P,iconsProgress:f,icon:t,index:e,totalIcons:_floatingToolsCore.MAX_DIAL_SLOTS,active:true},`${t.id??"icon"}:${s}:${e}`)),Z.map(t=>(0,_jsxRuntime.jsx)(_DialIcon.DialIcon,{onPress:P,iconsProgress:f,icon:createEmptySlot(t),index:t,totalIcons:_floatingToolsCore.MAX_DIAL_SLOTS,active:true},`empty-${t}`))]}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.buttonContainer,Q],children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.buttonGradient,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonGradientLayer1}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonGradientLayer2}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonGradientLayer3}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonBorder,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.button,ee],children:(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{accessibilityRole:"button",accessibilityLabel:n?"Close Settings":"Open Dev Tools Settings",onPress:X,activeOpacity:.5,style:styles.buttonPressable,children:n?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.centerText,styles.closeTextTop],children:"CLOSE"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.centerText,styles.closeTextBottom],children:"SETTINGS"})]}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.centerText,children:"BUOY"}),z&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.proText,O&&styles.weekendText],children:O?"WEEKEND":"PRO"})]})})})})]})})]}),h>1&&(0,_jsxRuntime.jsx)(_DialPagination.DialPagination,{page:s,pageCount:h,onPrev:()=>E(s-1),onNext:()=>E(s+1),animatedStyle:{position:"absolute",left:(b-i)/2,top:H-80+16,width:i,opacity:c,transform:[{scale:c}]}}),n&&(0,_jsxRuntime.jsx)(_DevToolsSettingsModal.DevToolsSettingsModal,{visible:true,onClose:()=>{d(false);U()},availableApps:$}),j&&!n&&!y.current&&(0,_jsxRuntime.jsx)(_OnboardingTooltip.OnboardingTooltip,{visible:true,onDismiss:M})]})};exports.DialDevTools=DialDevTools;const styles=_reactNative.StyleSheet.create({container:{..._sharedUi.absoluteFill,zIndex:9999},backdrop:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialBackdrop},parent:{alignItems:"center",justifyContent:"center"},circle:{position:"absolute",backgroundColor:"transparent",borderWidth:1,borderColor:_floatingToolsCore.dialColors.dialBorder,shadowColor:_floatingToolsCore.dialColors.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.5,shadowRadius:20,elevation:10},gradientBackground:{width:"100%",height:"100%",position:"relative",backgroundColor:_floatingToolsCore.dialColors.dialBackground,overflow:"hidden"},gradientLayer1:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient1,opacity:.6},gradientLayer2:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient2,opacity:.4,top:"30%",left:"30%"},gradientLayer3:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient3,opacity:.3,top:"50%",left:"50%"},gridPattern:{..._sharedUi.absoluteFill,alignItems:"center",justifyContent:"center"},gridLine:{position:"absolute",height:1},spoke:{position:"absolute",top:0,height:1,backgroundColor:_floatingToolsCore.dialColors.dialGridLine},spokeLeft:{left:0},spokeRight:{right:0},buttonContainer:{zIndex:1,backgroundColor:"transparent",alignItems:"center",justifyContent:"center",position:"absolute",width:BUTTON_SIZE*1.5,height:BUTTON_SIZE*1.5,borderRadius:BUTTON_SIZE},buttonGradient:{width:"100%",height:"100%",borderRadius:BUTTON_SIZE,alignItems:"center",justifyContent:"center",padding:4,backgroundColor:_floatingToolsCore.dialColors.hubHalo,position:"relative",overflow:"hidden"},buttonGradientLayer1:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient1,opacity:.5,borderRadius:BUTTON_SIZE},buttonGradientLayer2:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient2,opacity:.3,top:"20%",left:"20%",borderRadius:BUTTON_SIZE},buttonGradientLayer3:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient3,opacity:.2,top:"40%",left:"40%",borderRadius:BUTTON_SIZE},buttonBorder:{backgroundColor:_floatingToolsCore.dialColors.hubFill,alignItems:"center",justifyContent:"center",width:BUTTON_SIZE*1.2,height:BUTTON_SIZE*1.2,borderRadius:BUTTON_SIZE*.6},button:{width:BUTTON_SIZE,height:BUTTON_SIZE,borderRadius:BUTTON_SIZE/2,justifyContent:"center",alignItems:"center",position:"relative",overflow:"hidden"},buttonPressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},centerText:{color:_floatingToolsCore.dialColors.centerText,fontSize:10,fontWeight:"900",fontFamily:_sharedUi.monoFont,letterSpacing:1,textAlign:"center",textTransform:"uppercase",textShadowColor:_floatingToolsCore.dialColors.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},closeTextTop:{marginBottom:-2},emptyNote:{position:"absolute",left:16,right:16,color:_floatingToolsCore.dialColors.iconLabel,fontSize:12,fontFamily:_sharedUi.monoFont,textAlign:"center"},closeTextBottom:{marginTop:-2},proText:{color:_sharedUi.buoyColors.warning,fontSize:8,fontWeight:"900",fontFamily:_sharedUi.monoFont,letterSpacing:2,textAlign:"center",textShadowColor:_floatingToolsCore.dialColors.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},weekendText:{color:"#BF5AF2",letterSpacing:1}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DialDevTools=void 0;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _DialIcon=require("./DialIcon.js");var _DialHyperspace=require("./DialHyperspace.js");var _DialPagination=require("./DialPagination.js");var _dialUsageStore=require("./dialUsageStore.js");var _DevToolsSettingsModal=require("../DevToolsSettingsModal");var _license=require("@buoy-gg/license");var _AppIcon=require("../AppIcon");var _AppHost=require("../AppHost");var _hardwareBack=require("../hardwareBack.js");var _OnboardingTooltip=require("./OnboardingTooltip");var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _jsxRuntime=require("react/jsx-runtime");const BUTTON_SIZE=_floatingToolsCore.DIAL_BUTTON_SIZE;const DIAL_BACKGROUND_FOCUS={x:.5,y:.5};const HUB_CLEARANCE=BUTTON_SIZE*.75+6;const DIAL_IDLE_PULSE=false;const ONBOARDING_STORAGE_KEY="@react_buoy_settings_tooltip_shown";const createEmptySlot=r=>({id:`empty-${r}`,name:`empty-${r}`,icon:null,color:"transparent",onPress:()=>{}});const DialDevTools=({onClose:r,onSettingsPress:q,autoOpenSettings:D=false,apps:m,emptyNote:C,state:ne,actions:I})=>{const[G,U]=(0,_react.useState)(-1);const[n,l]=(0,_react.useState)(false);const[j,z]=(0,_react.useState)(false);const[k,L]=(0,_react.useState)(false);const y=(0,_react.useRef)(false);const _=(0,_sharedUi.useHintsDisabled)();const{refreshSettings:R}=(0,_DevToolsSettingsModal.useDevToolsSettings)();const{open:O}=(0,_AppHost.useAppHost)();const{isPro:H,isWeekendFree:V}=(0,_license.useProAccess)();const{width:b,height:W}=(0,_reactNative.useWindowDimensions)();const i=(0,_floatingToolsCore.getDialLayout)({screenWidth:b}).circleSize;const{id:$}=(0,_sharedUi.useToolBackground)();const a=(0,_react.useMemo)(()=>({parent:{width:i,height:i},circle:{width:i,height:i,borderRadius:i/2},rounded:{borderRadius:i/2},gridLine:{width:i},spoke:{width:i/2-HUB_CLEARANCE}}),[i]);(0,_react.useEffect)(()=>{const t=async()=>{try{const e=await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.settings.modalOpen());if(e==="true"){l(true)}}catch(e){}finally{z(true)}};t()},[]);(0,_react.useEffect)(()=>{if(!j)return;_sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.settings.modalOpen(),n?"true":"false").catch(t=>{console.warn("[Buoy]","Failed to save settings modal state:",t)})},[n,j]);(0,_react.useEffect)(()=>{if(D&&!n){l(true)}},[D,n]);(0,_react.useEffect)(()=>{if(_){return}const t=async()=>{try{const e=await _sharedUi.persistentStorage.getItem(ONBOARDING_STORAGE_KEY);if(!e){setTimeout(()=>{L(true)},1200)}}catch(e){}};t()},[_]);const S=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const c=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const x=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const u=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const f=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const v=(0,_react.useRef)(new _reactNative.Animated.Value(1)).current;const X=(0,_react.useMemo)(()=>m.map(({id:t,name:e,slot:o,description:p,icon:oe,color:ie})=>({id:t,name:e,slot:o,description:p,icon:oe,color:ie})),[m]);const B=(0,_react.useRef)(false);const g=(0,_react.useRef)(null);const K=()=>{if(n){l(false);return}l(true);if(k&&!y.current){F()}q?.()};const d=(0,_react.useMemo)(()=>m.filter(t=>(t.slot??"both")!=="row"),[m]);const E=(0,_react.useMemo)(()=>{const t=new Map;for(const e of d){t.set(e.id,{id:e.id,name:e.name,icon:typeof e.icon==="function"?null:(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color}),iconComponent:typeof e.icon==="function"?e.icon:void 0,color:e.color??_sharedUi.buoyColors.primary,onPress:()=>{void(0,_dialUsageStore.recordToolUsage)(e.id);e?.onPress?.(I);if(e.launchMode!=="toggle-only"){const o=(0,_AppIcon.renderAppIcon)(e.icon,{slot:"dial",size:20,color:e.color});O({id:e.id,title:e.name,component:e.component,props:e.props,launchMode:e.launchMode??"self-modal",singleton:e.singleton??true,icon:o,color:e.color,modal:e.modal})}r?.()}})}return t},[d,I,O,r]);const[A,M]=(0,_react.useState)(()=>(0,_dialUsageStore.getRankedToolIds)(d.map(t=>t.id)));(0,_react.useEffect)(()=>{const t=d.map(o=>o.id);if((0,_dialUsageStore.isDialUsageLoaded)()){M((0,_dialUsageStore.getRankedToolIds)(t));return}let e=false;(0,_dialUsageStore.loadDialUsage)().then(()=>{if(!e)M((0,_dialUsageStore.getRankedToolIds)(t))});return()=>{e=true}},[d]);const h=Math.max(1,Math.ceil(A.length/_floatingToolsCore.MAX_DIAL_SLOTS));const[Y,Z]=(0,_react.useState)(0);const s=Math.min(Y,h-1);const w=(0,_react.useMemo)(()=>{return A.map(t=>E.get(t)).filter(t=>Boolean(t)).map((t,e)=>({icon:t,page:Math.floor(e/_floatingToolsCore.MAX_DIAL_SLOTS),slot:e%_floatingToolsCore.MAX_DIAL_SLOTS}))},[A,E]);const J=(0,_react.useMemo)(()=>{const t=w.filter(o=>o.page===s).length;const e=[];for(let o=t;o<_floatingToolsCore.MAX_DIAL_SLOTS;o+=1)e.push(o);return e},[w,s]);const P=t=>{const e=Math.max(0,Math.min(t,h-1));if(e!==s)Z(e)};(0,_react.useEffect)(()=>{const t=_floatingToolsCore.dialAnimationConfig??{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:o}=t;_reactNative.Animated.timing(S,{toValue:1,duration:e.backdrop.duration,useNativeDriver:true}).start();_reactNative.Animated.spring(c,{toValue:1,damping:e.dial.scale.damping,stiffness:e.dial.scale.stiffness,mass:e.dial.scale.mass,useNativeDriver:true}).start();_reactNative.Animated.sequence([_reactNative.Animated.timing(x,{toValue:1,duration:e.dial.rotation.duration,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:true}),_reactNative.Animated.timing(x,{toValue:0,duration:0,useNativeDriver:true})]).start();_reactNative.Animated.sequence([_reactNative.Animated.delay(e.centerButton.delay),_reactNative.Animated.spring(u,{toValue:1,damping:e.centerButton.damping,stiffness:e.centerButton.stiffness,useNativeDriver:true})]).start();_reactNative.Animated.sequence([_reactNative.Animated.delay(e.icons.delay),_reactNative.Animated.timing(f,{toValue:1,duration:e.icons.duration,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:true})]).start();if(!DIAL_IDLE_PULSE)return;g.current=_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.timing(v,{toValue:o.pulse.maxScale,duration:o.pulse.duration,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:true}),_reactNative.Animated.timing(v,{toValue:o.pulse.minScale,duration:o.pulse.duration,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:true})]));g.current.start();return()=>{g.current?.stop()}},[]);const F=()=>{y.current=true;L(false);_sharedUi.persistentStorage.setItem(ONBOARDING_STORAGE_KEY,"true").catch(t=>{console.warn("[Buoy]","Failed to save dial onboarding state:",t)})};const T=()=>{B.current=true;if(g.current){g.current.stop()}const t=_floatingToolsCore.dialAnimationConfig?.exit??{icons:{duration:300},centerButton:{duration:200},dialScale:{duration:250},backdrop:{duration:200}};_reactNative.Animated.sequence([_reactNative.Animated.timing(f,{toValue:0,duration:t.icons.duration,easing:_reactNative.Easing.in(_reactNative.Easing.cubic),useNativeDriver:true}),_reactNative.Animated.parallel([_reactNative.Animated.timing(u,{toValue:0,duration:t.centerButton.duration,easing:_reactNative.Easing.in(_reactNative.Easing.cubic),useNativeDriver:true}),_reactNative.Animated.timing(c,{toValue:0,duration:t.dialScale.duration,easing:_reactNative.Easing.in(_reactNative.Easing.cubic),useNativeDriver:true})]),_reactNative.Animated.timing(S,{toValue:0,duration:t.backdrop.duration,useNativeDriver:true})]).start(()=>{if(r){setTimeout(()=>{r()},0)}})};(0,_hardwareBack.useHardwareBack)(true,()=>{if(B.current)return true;if(n){l(false);R();return true}T();return true});const N=t=>{U(1);const e=_floatingToolsCore.dialAnimationConfig?.interaction??{iconSelect:{pulse:[{scale:.9,damping:15,stiffness:500},{scale:1,damping:10,stiffness:200}],actionDelay:50}};const[o,p]=e.iconSelect.pulse;_reactNative.Animated.sequence([_reactNative.Animated.spring(u,{toValue:o.scale,damping:o.damping,stiffness:o.stiffness,useNativeDriver:true}),_reactNative.Animated.spring(u,{toValue:p.scale,damping:p.damping,stiffness:p.stiffness,useNativeDriver:true})]).start();setTimeout(()=>{t.onPress();if(t.id!=="wifi"){T()}},e.iconSelect.actionDelay)};const Q={opacity:S};const ee={transform:[{scale:u}]};const te={transform:[{scale:G>=0?1:v}]};return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.container,nativeID:"dial-devtools-root",children:[(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.backdrop,Q],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_sharedUi.absoluteFill,onPress:T})}),d.length===0&&C?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.emptyNote,{bottom:80+i+16}],accessibilityLiveRegion:"polite",testID:"buoy-dial-empty-note",children:C}):null,(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[styles.parent,a.parent,{position:"absolute",left:(b-i)/2,bottom:80,transform:[{scale:c},{rotate:x.interpolate({inputRange:[0,1],outputRange:["0deg","360deg"]})}]}],children:[(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[styles.circle,a.circle],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.gradientBackground,a.rounded],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.gradientLayer1,a.rounded]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.gradientLayer2,a.rounded]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.gradientLayer3,a.rounded]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.gridPattern,children:Array.from({length:6}).map((t,e)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.gridLine,a.gridLine,{transform:[{rotate:`${e*60}deg`}]}],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.spoke,a.spoke,styles.spokeLeft]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.spoke,a.spoke,styles.spokeRight]})]},e))}),$==="hyperspace"?(0,_jsxRuntime.jsx)(_DialHyperspace.DialHyperspace,{size:i}):(0,_jsxRuntime.jsx)(_sharedUi.ToolBackground,{focus:DIAL_BACKGROUND_FOCUS})]}),w.filter(({page:t})=>t===s).map(({icon:t,slot:e})=>(0,_jsxRuntime.jsx)(_DialIcon.DialIcon,{onPress:N,iconsProgress:f,icon:t,index:e,totalIcons:_floatingToolsCore.MAX_DIAL_SLOTS,active:true},`${t.id??"icon"}:${s}:${e}`)),J.map(t=>(0,_jsxRuntime.jsx)(_DialIcon.DialIcon,{onPress:N,iconsProgress:f,icon:createEmptySlot(t),index:t,totalIcons:_floatingToolsCore.MAX_DIAL_SLOTS,active:true},`empty-${t}`))]}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.buttonContainer,ee],children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.buttonGradient,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonGradientLayer1}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonGradientLayer2}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonGradientLayer3}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.buttonBorder,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.button,te],children:(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{accessibilityRole:"button",accessibilityLabel:n?"Close Settings":"Open Dev Tools Settings",onPress:K,activeOpacity:.5,style:styles.buttonPressable,children:n?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.centerText,styles.closeTextTop],children:"CLOSE"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.centerText,styles.closeTextBottom],children:"SETTINGS"})]}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.centerText,children:"BUOY"}),H&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.proText,V&&styles.weekendText],children:V?"WEEKEND":"PRO"})]})})})})]})})]}),h>1&&(0,_jsxRuntime.jsx)(_DialPagination.DialPagination,{page:s,pageCount:h,onPrev:()=>P(s-1),onNext:()=>P(s+1),animatedStyle:{position:"absolute",left:(b-i)/2,top:W-80+16,width:i,opacity:c,transform:[{scale:c}]}}),n&&(0,_jsxRuntime.jsx)(_DevToolsSettingsModal.DevToolsSettingsModal,{visible:true,onClose:()=>{l(false);R()},availableApps:X}),k&&!n&&!y.current&&(0,_jsxRuntime.jsx)(_OnboardingTooltip.OnboardingTooltip,{visible:true,onDismiss:F})]})};exports.DialDevTools=DialDevTools;const styles=_reactNative.StyleSheet.create({container:{..._sharedUi.absoluteFill,zIndex:9999},backdrop:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialBackdrop},parent:{alignItems:"center",justifyContent:"center"},circle:{position:"absolute",backgroundColor:"transparent",borderWidth:1,borderColor:_floatingToolsCore.dialColors.dialBorder,shadowColor:_floatingToolsCore.dialColors.dialShadow,shadowOffset:{width:0,height:0},shadowOpacity:.5,shadowRadius:20,elevation:10},gradientBackground:{width:"100%",height:"100%",position:"relative",backgroundColor:_floatingToolsCore.dialColors.dialBackground,overflow:"hidden"},gradientLayer1:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient1,opacity:.6},gradientLayer2:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient2,opacity:.4,top:"30%",left:"30%"},gradientLayer3:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient3,opacity:.3,top:"50%",left:"50%"},gridPattern:{..._sharedUi.absoluteFill,alignItems:"center",justifyContent:"center"},gridLine:{position:"absolute",height:1},spoke:{position:"absolute",top:0,height:1,backgroundColor:_floatingToolsCore.dialColors.dialGridLine},spokeLeft:{left:0},spokeRight:{right:0},buttonContainer:{zIndex:1,backgroundColor:"transparent",alignItems:"center",justifyContent:"center",position:"absolute",width:BUTTON_SIZE*1.5,height:BUTTON_SIZE*1.5,borderRadius:BUTTON_SIZE},buttonGradient:{width:"100%",height:"100%",borderRadius:BUTTON_SIZE,alignItems:"center",justifyContent:"center",padding:4,backgroundColor:_floatingToolsCore.dialColors.hubHalo,position:"relative",overflow:"hidden"},buttonGradientLayer1:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient1,opacity:.5,borderRadius:BUTTON_SIZE},buttonGradientLayer2:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient2,opacity:.3,top:"20%",left:"20%",borderRadius:BUTTON_SIZE},buttonGradientLayer3:{..._sharedUi.absoluteFill,backgroundColor:_floatingToolsCore.dialColors.dialGradient3,opacity:.2,top:"40%",left:"40%",borderRadius:BUTTON_SIZE},buttonBorder:{backgroundColor:_floatingToolsCore.dialColors.hubFill,alignItems:"center",justifyContent:"center",width:BUTTON_SIZE*1.2,height:BUTTON_SIZE*1.2,borderRadius:BUTTON_SIZE*.6},button:{width:BUTTON_SIZE,height:BUTTON_SIZE,borderRadius:BUTTON_SIZE/2,justifyContent:"center",alignItems:"center",position:"relative",overflow:"hidden"},buttonPressable:{width:"100%",height:"100%",justifyContent:"center",alignItems:"center"},centerText:{color:_floatingToolsCore.dialColors.centerText,fontSize:10,fontWeight:"900",fontFamily:_sharedUi.monoFont,letterSpacing:1,textAlign:"center",textTransform:"uppercase",textShadowColor:_floatingToolsCore.dialColors.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},closeTextTop:{marginBottom:-2},emptyNote:{position:"absolute",left:16,right:16,color:_floatingToolsCore.dialColors.iconLabel,fontSize:12,fontFamily:_sharedUi.monoFont,textAlign:"center"},closeTextBottom:{marginTop:-2},proText:{color:_sharedUi.buoyColors.warning,fontSize:8,fontWeight:"900",fontFamily:_sharedUi.monoFont,letterSpacing:2,textAlign:"center",textShadowColor:_floatingToolsCore.dialColors.centerTextGlow,textShadowOffset:{width:0,height:0},textShadowRadius:4},weekendText:{color:"#BF5AF2",letterSpacing:1}});
|
|
@@ -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])}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;const SDK_VERSION=exports.SDK_VERSION="7.0.80";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const
|
|
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
|
|
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:p,wasMinimized:N}=$(o,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);i=p;if(N){setTimeout(()=>g(p),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(p=>p.id===i);if(r){const p=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:p,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(p=>({id:p,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 I=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;I(n.instanceId);return true});const D=V(()=>({openApps:s,isAnyOpen:s.filter(n=>n.launchMode!=="toggle-only"&&!n.minimized).length>0,open:z,close:I,closeAll:M,registerApps:h,minimize:A,restore:b,isMinimized:T}),[s,z,I,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,{nativeID:"buoy-tool-host",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(I=>I.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(I=>I.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 I=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:I,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
|
|
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=(
|
|
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{useEffect as _,useMemo as b,useRef as
|
|
1
|
+
"use strict";import{useEffect as _,useMemo as b,useRef as D}from"react";import{LicenseManager as E,installCapacitorBridge as h,resolveDevBuild as L,useLicense as T}from"@buoy-gg/license";import{registerToolAdapters as w}from"@buoy-gg/shared-ui";import{RELEASE_DEFAULT_SOCKET_URL as x,applyReleaseActionPolicy as j,externalSyncOptions as N,releaseTransportProblem as U,shouldMountExternalSync as C}from"./externalSyncGate.js";import{useDeviceIdentity as M}from"./deviceIdentity.js";import{capacitorBrokerURL as P,capacitorTransportProblem as V,useHostInfo as $}from"./capacitorHostInfo.js";import{appSyncAdapter as F}from"./sync/appSyncAdapter.js";import{jsx as p,Fragment as Q,jsxs as q}from"react/jsx-runtime";const H=["ConsoleRoot","RouteTracker","ReactQueryTracker","ReduxAutoInstrument","PerfMonitorRoot","AutomationResumer","ImagesRoot"];const K=["DebugBordersStandaloneOverlay","HighlightUpdatesOverlay","ImageOverlayStandalone","PerfMonitorOverlay","JsTopHudOverlay","ImpersonateOverlay","ScenariosOverlay","BugLinksOverlay"];export function BrowserToolRuntime(e){const a=b(()=>Object.fromEntries(Object.entries(e.modules).map(([u,y])=>[u.replace(/^@buoy-gg\//,"").replace(/\/web$/,""),y])),[e.modules]);const s=a["react-query"];return s?.useReactQuerySyncAdapter?p(z,{...e,modules:a,query:s}):p(I,{...e,modules:a})}function z(e){const a=e.query.useReactQuerySyncAdapter();return p(I,{...e,queryAdapter:a})}function I({modules:e,apps:a,requiredEnvVars:s,externalSync:u,headless:y,sentryGetClient:d,queryAdapter:r}){const{isPro:m,tier:g}=T();const n=b(()=>{const c={app:F};for(const[t,o]of Object.entries(e)){for(const[l,O]of Object.entries(o)){if(l.endsWith("SyncAdapter")&&O&&typeof O==="object")c[t]=O}}if(r)c.query=r;if(e.env?.createEnvSyncAdapter)c.env=e.env.createEnvSyncAdapter(s??[]);for(const t of a??[])if(t.sync)c[`custom:${t.id}`]=t.sync;return c},[e,a,s,r]);const v=D(n);v.current=n;_(()=>w(()=>v.current),[]);_(()=>{const c=[];const t=o=>{const l=o?.();if(typeof l==="function")c.push(l)};t(e.network?.startNetworkCapture);t(e.storage?.startBrowserStorageCapture);t(e.assets?.startBrowserAssetCapture);t(e.three?.startThreeCapture);if(L(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production")){t(e["time-machine"]?.startTimeMachineFloatingToolPersistence)}if(e.storage?.storageSyncAdapter?.subscribe)t(()=>e.storage.storageSyncAdapter.subscribe(()=>{}));if(e["focus-inspector"]?.focusInspectorSyncAdapter?.subscribe)t(()=>e["focus-inspector"].focusInspectorSyncAdapter.subscribe(()=>{}));return()=>{for(const o of c.reverse())o()}},[e]);const S=e["external-sync"];const i=L(typeof __DEV__!=="undefined"?__DEV__:process.env.NODE_ENV!=="production");const f=C({isDevelopment:i,isLicensed:m,externalSync:u,isAvailable:Boolean(S)});const R=N(u);h({release:!i&&Boolean(R?.enableInRelease)});if(!i&&R?.enableInRelease)k(U(R.socketURL,R));const A=e.sentry?.SentryRoot;return q(Q,{children:[Object.entries(e).flatMap(([c,t])=>H.map(o=>{const l=t[o];return l?p(l,{},`${c}:${o}`):null})),A&&p(A,{getClient:d}),Object.entries(e).flatMap(([c,t])=>K.map(o=>{const l=t[o];return l&&(!y||o==="ScenariosOverlay"||o==="ImpersonateOverlay"||o==="BugLinksOverlay")?p(l,{},`${c}:${o}`):null})),f&&p(J,{module:S,tools:n,options:R,isPro:m,tier:g,dev:i})]})}let B=null;function k(e){if(!e||e===B)return;B=e;console.warn("[Buoy]",e)}function J({module:e,tools:a,options:s,isPro:u,tier:y,dev:d}){const r=$();const m=M(s,{appName:r.appName,hardwareName:r.hardwareName,platform:r.platform});const g=b(()=>P(s?.socketURL??(d?e.getDefaultSocketURL():x),Boolean(s?.socketURL),r.platform),[s?.socketURL,d,e,r.platform]);const{socket:n}=e.useExternalSyncSocket({deviceName:m?.deviceName??"Buoy Browser",socketURL:g,persistentDeviceId:r.ready?m?.deviceId??null:null,platform:r.platform,extraDeviceInfo:r.extraDeviceInfo,enableLogs:s?.enableLogs});_(()=>{const i=V(g,r.platform);if(!n||!i)return;const f=()=>k(i);n.on("connect_error",f);return()=>{n.off("connect_error",f)}},[n,g,r.platform]);_(()=>{if(!n)return;const i=()=>{if(!n.connected||!E.hasAccountAccess())return;const f=E.getState();if(!u&&(f.isInitialized===false||f.isValidating===true))return;n.emit("device-license",{isPro:u?"1":"0",tier:y})};i();n.on("connect",i);return()=>{n.off("connect",i)}},[n,u,y]);const v=s?.releaseActions?.join(",")??"";const S=b(()=>j(a,d,v?v.split(","):void 0),[a,d,v]);e.useExternalSync({tools:S,socket:n,deviceId:r.ready?m?.deviceId??null:null,enableLogs:s?.enableLogs});return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{FloatingToolHost as
|
|
1
|
+
"use strict";import{FloatingToolHost as ge}from"@buoy-gg/shared-ui";import{AccountSetup as ye,FiberRootAnchor as pe,setBuoyAppId as de,startSettingsSync as me}from"@buoy-gg/shared-ui";import Xe,{useMemo as t,useCallback as fe,useEffect as b}from"react";import{View as X,StyleSheet as Y}from"react-native";import{AppHostProvider as be}from"./AppHost";import{TeamToolCloser as ve}from"./TeamToolCloser.js";import{NO_TEAM_TOOLS_NOTE as he}from"./teamToolsNote.js";import{FloatingMenu as Oe}from"./FloatingMenu.js";import{AppOverlay as Te}from"./AppHost";import{ToolOpenerBridge as Ae}from"./ToolOpenerBridge.js";import{autoDiscoverPresets as Re,autoDiscoverPresetsWithCustom as qe}from"./autoDiscoverPresets.js";import{sendInstallPing as Ie}from"../telemetry/installPing.js";import{defaultLicenseKey as _e,isTelemetryEnabled as Ee}from"../Buoy.js";import{renderAppIcon as ke}from"./AppIcon";import{DevToolsVisibilityProvider as xe}from"./DevToolsVisibilityContext.js";import{reportOptionalRequireError as o}from"./optionalRequire.js";import{HintsProvider as Pe,normalizeEnvironment as Se}from"@buoy-gg/shared-ui";import{MinimizedToolsProvider as De}from"./MinimizedToolsContext.js";import{validateDialConfig as Le}from"./defaultConfig.js";import{DefaultConfigProvider as Me}from"./DefaultConfigContext.js";import{LicenseManager as Ce,useProAccess as ze,useLicense as Fe,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 He,isExternalSyncAvailable as Ne}from"./autoExternalSync.js";import{externalSyncOptions as j,releaseTransportProblem as Ve,shouldMountExternalSync as Ue}from"./externalSyncGate.js";import{jsx as r,Fragment as O,jsxs as l}from"react/jsx-runtime";let re=null;function Je(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 a=(u?.default??u)?.expoConfig;const v=s.OS==="android"?a?.android?.package:a?.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:a,children:v,disableHints:oe=false,defaultFloatingTools:ne,defaultDialTools:T,requireLicense:We,licenseKey:A,zustandStores:k,environment:ie,externalSync:R=true,headless:x=false,signIn:q,...w})=>{const se=ie??Se(process.env.NODE_ENV??"dev");const{isLicensed:I}=ze();const{licenseKey:P,isInitialized:B,tier:_,access:c,allowedTools:E}=Fe();const ue=A===void 0||je(A,P);const S=ue&&c.status==="admitted";b(()=>{if(!B||c.status==="initializing")return;void Ie({tier:c.status==="admitted"?_:"locked",enabled:Ee()})},[B,c.status,_]);const h=q?te(q):null;b(()=>{if(!h)return;const e=we.SessionManager;if(!e)return;e.configure({audience:`app:${h}`});void e.load().catch(()=>{})},[h]);b(()=>{de(h??te(true))},[h]);b(()=>{void Ce.configure(A??_e()).catch(()=>{})},[A]);b(()=>{if(S)me()},[S]);b(()=>{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(T){return Le(T)}return T},[T]);const D=t(()=>{const e=[];if(s&&s.length>0){try{const{createEnvTool:n,createEnvVarConfig:F}=require("@buoy-gg/env");e.push(n({requiredEnvVars:F(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(a){try{const{createAskBuoyTool:n}=require("@buoy-gg/ask-buoy");e.push(n(a))}catch(n){o("@buoy-gg/ask-buoy",n)}}return e},[s,u,a]);const L=t(()=>{if(!i&&D.length===0)return void 0;return[...i||[],...D]},[i,D]);const g=t(()=>L?qe(L):Re(),[L]);const M=t(()=>g.filter(e=>e.sync),[g]);const le=t(()=>Be(g,E),[g,E]);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 y=t(()=>{try{const{RouteTracker:e}=require("@buoy-gg/route-events");return e}catch(e){o("@buoy-gg/route-events",e);return null}},[]);const p=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 d=t(()=>{try{const{ReduxAutoInstrument:e}=require("@buoy-gg/redux");return e??null}catch(e){o("@buoy-gg/redux",e);return null}},[]);const m=t(()=>{try{const{ConsoleRoot:e}=require("@buoy-gg/console");return e??null}catch(e){o("@buoy-gg/console",e);return null}},[]);const f=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=fe(e=>{const n=g.find(F=>F.id===e);if(!n)return null;return ke(n.icon,{slot:"dial",size:20,color:n.color})},[g]);const C=typeof __DEV__!=="undefined"&&__DEV__;if(!C&&!I){return q&&!x?r(Z,{needsPlan:true}):null}const G=Ue({isDevelopment:C,isLicensed:I,externalSync:R,isAvailable:Ne()});const z=j(R);if(!C&&z?.enableInRelease){Je(Ve(z.socketURL,z))}const K=l(O,{children:[r(He,{requiredEnvVars:s,customApps:M}),r(pe,{})]});if(!S){return l(O,{children:[c.status==="initializing"&&l(O,{children:[d&&r(d,{}),m&&r(m,{}),f&&r(f,{}),y&&r(y,{}),p&&r(p,{})]}),!x&&(q?r(Z,{}):r(ye,{}))]})}if(x){return l(O,{children:[d&&r(d,{}),m&&r(m,{}),f&&r(f,{}),y&&r(y,{}),p&&r(p,{}),K,G&&r(ee,{options:j(R),requiredEnvVars:s,isPro:I,tier:_,licenseKey:P,customApps:M})]})}return r(Me,{defaultFloatingTools:ne,defaultDialTools:ce,children:r(Pe,{disableHints:oe,children:r(X,{style:Qe.container,pointerEvents:"box-none",__buoyDevToolsRoot:true,children:l(xe,{children:[V&&r(X,{style:Y.absoluteFill,pointerEvents:"box-none",collapsable:false,children:r(V,{})}),r(be,{children:l(De,{getToolIcon:ae,children:[r(Oe,{...w,apps:le,emptyNote:E?he:void 0,environment:se}),w.hidden?null:l(O,{children:[r(Te,{}),r(ge,{})]}),r(Ae,{}),r(ve,{allowedTools:E??null})]})}),v,H&&r(H,{}),N&&r(N,{}),U&&r(U,{}),J&&r(J,{}),Q&&r(Q,{}),W&&r(W,{}),$&&r($,{}),d&&r(d,{}),m&&r(m,{}),f&&r(f,{}),y&&r(y,{}),p&&r(p,{}),K,G&&r(ee,{options:j(R),requiredEnvVars:s,isPro:I,tier:_,licenseKey:P,customApps:M})]})})})})};const Qe=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 ie,{createContext as J,useCallback as I,useContext as X,useEffect as T,useMemo as G,useRef as R,useState as b}from"react";import{Animated as i,StyleSheet as Q,Text as Y,View as k}from"react-native";import{JsModal as Z,ModalHeader as u,HeaderSearchButton as ee,TickProvider as te,ToolScreenHeaderContext as oe,devToolsStorageKeys as
|
|
1
|
+
"use strict";import ie,{createContext as J,useCallback as I,useContext as X,useEffect as T,useMemo as G,useRef as R,useState as b}from"react";import{Animated as i,StyleSheet as Q,Text as Y,View as k}from"react-native";import{JsModal as Z,ModalHeader as u,HeaderSearchButton as ee,TickProvider as te,ToolScreenHeaderContext as oe,devToolsStorageKeys as D,buoyColors as V,gameUIColors as g}from"@buoy-gg/shared-ui";import{jsx as t,jsxs as f}from"react/jsx-runtime";const h=()=>{};const re={search:"",isSearchActive:false,clearSearch:h,close:h,minimize:h,showToast:h,setHeaderOverride:h};const B=J(null);export function useToolHost(){return X(B)??re}export function useToolHeader(e,o){const{setHeaderOverride:n}=useToolHost();T(()=>{n(e);return()=>n(null)},o)}const M=2200;const se={success:g.success,error:g.error,info:g.info};function ne({message:e,type:o,nonce:n}){const s=R(new i.Value(0)).current;T(()=>{s.setValue(0);i.sequence([i.timing(s,{toValue:1,duration:150,useNativeDriver:true}),i.delay(M-450),i.timing(s,{toValue:0,duration:300,useNativeDriver:true})]).start()},[n,s]);const a=se[o];return f(i.View,{pointerEvents:"none",style:[v.toast,{opacity:s,borderColor:a+"60"}],children:[t(k,{style:[v.toastDot,{backgroundColor:a}]}),t(Y,{style:v.toastText,numberOfLines:2,children:e})]})}export function ToolModalShell({app:e,config:o,visible:n,zIndex:s,onClose:a,onMinimize:S,initialModalState:P,enableSharedModalDimensions:_,bodyProps:N}){const j=e.component;const[r,w]=b(false);const[x,O]=b("");const[c,p]=b(null);const[m,A]=b(null);const l=R(null);const d=I(()=>{w(false);O("")},[]);const H=I(($,q="info")=>{if(l.current)clearTimeout(l.current);A(F=>({message:$,type:q,nonce:(F?.nonce??0)+1}));l.current=setTimeout(()=>A(null),M)},[]);T(()=>{return()=>{if(l.current)clearTimeout(l.current)}},[]);const z=G(()=>({search:r?x:"",isSearchActive:r,clearSearch:d,close:a,minimize:()=>S(),showToast:H,setHeaderOverride:p,instanceId:e.instanceId}),[x,r,d,a,S,H,e.instanceId]);const K=c?.title??o.title??e.title??e.id;const L=c?.subtitle??o.subtitle;const y=c?.onBack;const E=c?.actions??o.headerActions;const C=c?.searchable??o.searchable;T(()=>{if(!C&&r)d()},[C,r,d]);const W=_?D.modal.root():D.custom(e.id).modal();const U=f(u,{children:[y&&!r&&t(u.Navigation,{onBack:y}),r?t(u.Search,{value:x,onChangeText:O,onCancel:d,placeholder:o.searchPlaceholder,testID:`tool-search-field-${e.id}`}):t(u.Content,{title:K,subtitle:L}),f(u.Actions,{children:[!r&&E,C&&!r&&t(ee,{variant:"chip",testID:`tool-search-${e.id}`,onPress:()=>w(true)})]})]});return t(B.Provider,{value:z,children:t(Z,{visible:n,onClose:a,onBack:y,onMinimize:S,initialModalState:P,zIndex:s,persistenceKey:W,enablePersistence:true,initialMode:o.initialMode??"bottomSheet",header:{customContent:U,showToggleButton:true},disableScrollWrapper:true,styles:{},children:f(k,{nativeID:"buoy-tool-host",style:v.bodyRoot,children:[t(te,{children:t(oe.Provider,{value:p,children:t(j,{...N})})}),m&&t(ne,{message:m.message,type:m.type,nonce:m.nonce})]})})})}const v=Q.create({bodyRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},toast:{position:"absolute",bottom:16,alignSelf:"center",flexDirection:"row",alignItems:"center",gap:8,maxWidth:"86%",backgroundColor:V.card,borderWidth:1,borderRadius:8,paddingHorizontal:12,paddingVertical:8,shadowColor:"#000",shadowOpacity:.4,shadowRadius:8,shadowOffset:{width:0,height:2},elevation:6},toastDot:{width:6,height:6,borderRadius:3},toastText:{flex:1,fontSize:12,color:V.text}});
|
|
@@ -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
|
|
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 l=null;let d=null;let s=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 i=null;try{l=require("@buoy-gg/external-sync")}catch(e){r("@buoy-gg/external-sync",e)}try{d=require("@buoy-gg/storage")}catch(e){r("@buoy-gg/storage",e)}try{s=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{i=require("expo-constants")}catch(e){r("expo-constants",e)}export function isExternalSyncAvailable(){return!!l?.useExternalSyncSocket}function ne(){const e=i?.default??i;return e?.expoConfig?.name??e?.manifest2?.extra?.expoClient?.name??null}function ce(){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 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}=l;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??l.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 g=()=>{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)g();u.on("connect",g);return()=>{u.off("connect",g)}},[u,c,t,o]);const y=e?.releaseActions?.join(",")??"";const Y=$(()=>te(C,typeof __DEV__!=="undefined"&&__DEV__,y?y.split(","):void 0),[C,y]);X({tools:Y,socket:u,deviceId:Q,enableLogs:e?.enableLogs});return null}function ue(e,n,c){return $(()=>{const t={app:Z};if(d?.storageSyncAdapter){t.storage=d.storageSyncAdapter}if(s?.networkSyncAdapter){t.network=s.networkSyncAdapter}if(s?.socketsSyncAdapter){t.sockets=s.socketsSyncAdapter}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}
|