@buoy-gg/storage 7.0.62 → 7.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/lib/commonjs/storage/components/GameUIStorageBrowser.js +2 -2
- package/lib/commonjs/storage/hooks/useAsyncStorageKeys.js +1 -1
- package/lib/commonjs/storage/hooks/useMMKVInstances.js +1 -1
- package/lib/commonjs/storage/hooks/useMMKVKeys.js +1 -1
- package/lib/commonjs/storage/hooks/useSecureStoreKeys.js +1 -1
- package/lib/commonjs/storage/stores/storageEventStore.js +1 -1
- package/lib/commonjs/storage/sync/storageSyncAdapter.js +1 -1
- package/lib/commonjs/storage/utils/AsyncStorageListener.js +1 -1
- package/lib/commonjs/storage/utils/AsyncStorageListener.web.js +1 -1
- package/lib/commonjs/storage/utils/MMKVListener.js +1 -1
- package/lib/commonjs/storage/utils/browserStorageLifecycle.web.js +1 -1
- package/lib/commonjs/storage/utils/snapshotProvider.js +1 -1
- package/lib/module/storage/components/GameUIStorageBrowser.js +2 -2
- package/lib/module/storage/hooks/useAsyncStorageKeys.js +1 -1
- package/lib/module/storage/hooks/useMMKVInstances.js +1 -1
- package/lib/module/storage/hooks/useMMKVKeys.js +1 -1
- package/lib/module/storage/hooks/useSecureStoreKeys.js +1 -1
- package/lib/module/storage/stores/storageEventStore.js +1 -1
- package/lib/module/storage/sync/storageSyncAdapter.js +1 -1
- package/lib/module/storage/utils/AsyncStorageListener.js +1 -1
- package/lib/module/storage/utils/AsyncStorageListener.web.js +1 -1
- package/lib/module/storage/utils/MMKVListener.js +1 -1
- package/lib/module/storage/utils/browserStorageLifecycle.web.js +1 -1
- package/lib/module/storage/utils/snapshotProvider.js +1 -1
- package/lib/typescript/storage/hooks/useMMKVInstances.d.ts +0 -13
- package/lib/typescript/storage/hooks/useMMKVKeys.d.ts +0 -12
- package/lib/typescript/storage/stores/storageEventStore.d.ts +1 -0
- package/lib/typescript/storage/sync/storageSyncAdapter.d.ts +1 -1
- package/lib/web/index.mjs +2 -2
- package/package.json +5 -5
package/lib/web/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";var qo=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var Ai=Object.getOwnPropertyNames;var Di=Object.prototype.hasOwnProperty;var to=(e,t)=>()=>(e&&(t=e(e=0)),t);var An=(e,t)=>{for(var r in t)qo(e,r,{get:t[r],enumerable:true})},Ho=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ai(t))!Di.call(e,n)&&n!==r&&qo(e,n,{get:()=>t[n],enumerable:!(o=Ri(t,n))||o.enumerable});return e},Mi=(e,t,r)=>(Ho(e,t,"default"),r&&Ho(r,t,"default"));var zi=e=>Ho(qo({},"__esModule",{value:true}),e);var Ki,B=to(()=>{"use strict";Ki=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Ut,hasCapacitorPlugin as Pi,installCapacitorBridge as Fi,interceptCapacitor as Oi,isCapacitorNative as Li}from"@buoy-gg/license/web";function Ar(){return Li()&&Pi(gt)}function Rt(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Dr))try{o(r)}catch{}}function Wi(e){return Dr.add(e),_i(),()=>{Dr.delete(e)}}async function ir(e){let{value:t}=await Ut(gt,"get",{key:e});return t??null}async function jo(){let{keys:e}=await Ut(gt,"keys");return Array.isArray(e)?e:[]}async function ro(e){return Promise.all(e.map(async t=>[t,await ir(t)]))}function _i(){Uo||!Ar()||!Fi()||(Uo=true,Oi({plugin:gt,methods:["set","remove","clear"],promise:async(e,t)=>{if(Dr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=jo().catch(()=>[]),u=await t();return Rt("clear",{keys:await i}),u}if(r===void 0)return t();let o=ir(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?Rt("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):Rt("removeItem",{key:r,prevValue:a}),n}}))}function Dn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Dn(r[o],n):n;return r}function Mn(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var gt,Dr,Uo,oo,no=to(()=>{"use strict";B();gt="Preferences";Dr=new Set;Uo=false;oo={getItem(e){return ir(e)},async setItem(e,t){let r=ir(e).catch(()=>null);await Ut(gt,"set",{key:e,value:String(t)}),Rt("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=ir(e).catch(()=>null);await Ut(gt,"remove",{key:e}),Rt("removeItem",{key:e,prevValue:await t})},async clear(){let e=await ro(await jo()).catch(()=>{});await Ut(gt,"clear"),Rt("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return jo()},multiGet(e){return ro(e)},async multiSet(e){let t=ro(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Ut(gt,"set",{key:r,value:String(o)}))),Rt("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=ro(e).catch(()=>{});await Promise.all(e.map(r=>Ut(gt,"remove",{key:r}))),Rt("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await ir(e);await oo.setItem(e,JSON.stringify(Dn(Mn(r),Mn(t))))},async multiMerge(e){for(let[t,r]of e)await oo.mergeItem(t,r)}}});import $i from"@buoy-gg/shared-ui/web/asyncStorage";var it,zn,oe,pt=to(()=>{"use strict";B();no();it=()=>Ar()?oo:$i,zn={getItem:e=>it().getItem(e),setItem:(e,t)=>it().setItem(e,t),removeItem:e=>it().removeItem(e),clear:()=>it().clear(),getAllKeys:()=>it().getAllKeys(),multiGet:e=>it().multiGet(e),multiSet:e=>it().multiSet(e),multiRemove:e=>it().multiRemove(e),mergeItem:(e,t)=>it().mergeItem(e,t),multiMerge:e=>it().multiMerge(e)},oe=zn});var Kn={};An(Kn,{asyncStorage:()=>Oe,asyncStorageCaps:()=>Pn,default:()=>Fn,readMany:()=>ao,removeMany:()=>lr,writeMany:()=>Mr});async function ao(e){if(typeof Oe.multiGet=="function")return await Oe.multiGet(e);let t=await Oe.getMany(e);return e.map(r=>[r,t[r]??null])}async function Mr(e){if(typeof Oe.multiSet=="function")return Oe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Oe.setMany(t)}async function lr(e){return typeof Oe.multiRemove=="function"?Oe.multiRemove(e):Oe.removeMany(e)}var Oe,Pn,Fn,Gt=to(()=>{"use strict";B();pt();Oe=oe,Pn={hasLegacyMultiApi:typeof Oe?.multiGet=="function",hasMergeApi:typeof Oe?.mergeItem=="function"};Fn=Oe});B();B();pt();Gt();import{classifyPreviewItem as Ni,createRestoreScope as qi,emptyRestoreResult as On,failedRestore as Hi,isDevToolsStorageKey as St,registerStateSnapshotProvider as ji,unionKeys as io,wontApply as zr}from"@buoy-gg/shared-ui/web";B();pt();Gt();import{isDevToolsStorageKey as Ui}from"@buoy-gg/shared-ui/web";async function lo(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!Ui(r));t.length!==0&&await lr(t)}async function Gi(){await oe.clear()}B();B();B();function wt(e,t){let r=e.getString(t);if(r!==void 0&&r!=="")return{value:r,type:"string"};let o=e.getNumber(t);if(o!==void 0)return{value:o,type:"number"};let n=e.getBoolean(t);if(n!==void 0)return{value:n,type:"boolean"};if(r==="")return{value:"",type:"string"};let a=e.getBuffer(t);return a!==void 0?{value:`<ArrayBuffer ${a.byteLength} bytes>`,type:"buffer"}:{value:void 0,type:"unknown"}}function Ji(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Go(e,t){return e===t}var Yi=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,wt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=wt(e,n),u=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:u,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:u,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Jo=new Yi;var Ln=e=>Jo.addListener(e);var Qi=class{constructor(){this.instances=new Map}register(e,t,r){let o={id:e,instance:t,encrypted:r?.encrypted??false,readOnly:t.isReadOnly??false};this.instances.set(e,o)}unregister(e){this.instances.delete(e)}get(e){return this.instances.get(e)}getAll(){return Array.from(this.instances.values())}has(e){return this.instances.has(e)}count(){return this.instances.size}},Ke=new Qi;function Wn(e,t,r){Ke.register(e,t,r),Jo.addInstance(t,e)}function _n(e){Jo.removeInstance(e),Ke.unregister(e)}B();var Xi=class{constructor(){this.module=null;this.keys=new Map;this.listeners=new Set}register(e,t){let r=this.signature();this.module=e;for(let o of t){let n=typeof o=="string"?{key:o,options:{}}:{key:o.key,description:o.description,options:{keychainService:o.keychainService,requireAuthentication:o.requireAuthentication,authenticationPrompt:o.authenticationPrompt}};this.keys.set(n.key,n)}this.signature()!==r&&this.notify()}unregister(e){this.keys.delete(e)&&this.notify()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){let t=this.keys.get(e);!this.module||!t||await this.module.deleteItemAsync(e,t.options)}async setValue(e,t){let r=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!r)throw new Error(`SecureStore key "${e}" is not registered`);if(r.options.requireAuthentication)throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`);await this.module.setItemAsync(e,t,r.options)}},te=new Xi;function Zi(e,t){te.register(e,t)}function el(e){te.unregister(e)}function $n(e,t){e.remove?e.remove(t):e.delete?.(t)}function tl(){return{canCapture:true,canRestore:true}}async function Nn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!St(i)),r=(await ao(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:u}of Ke.getAll())try{o[i]=u.getAllKeys().filter(d=>!St(d)).map(d=>{let{value:y,type:g}=wt(u,d);return g==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:y,valueType:g}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=te.getModule();for(let{key:i,options:u}of te.getAll()){if(u.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,u)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function rl(){let{data:e,warnings:t}=await Nn();return{data:e,warnings:t}}async function ol(e,t){let r=e,o=qi(t),n=o.touch,a=On();if(!r)return Hi("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!St(p)&&n(`async:${p}`)),y=new Set(d.map(([p])=>p)),g=(await oe.getAllKeys()).filter(p=>!St(p)).filter(p=>!y.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),g.length>0&&await lr(g),d.length>0&&await Mr(d),a.applied+=d.length+g.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,y]of Object.entries(r.mmkv??{})){let g=Ke.get(d);if(!g){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(g.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=g;try{let f=new Set(y.map(h=>h.key)),x=p.getAllKeys().filter(h=>!St(h));for(let h of x)o.allows(`mmkv:${d}/${h}`)&&(f.has(h)||($n(p,h),a.applied+=1));for(let h of y)if(!St(h.key)&&n(`mmkv:${d}/${h.key}`)){if(h.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${h.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(h.key,h.value),a.applied+=1}}catch(f){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(f)}`)}}let i=r.secure??{};for(let{key:d,options:y}of te.getAll())if(o.allows(`secure:${d}`)){if(y.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let g=i[d];g===null?await te.deleteValue(d):await te.setValue(d,g)}else await te.deleteValue(d);a.applied+=1}catch(g){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(g)}`)}}for(let d of Object.keys(i))n(`secure:${d}`)&&(te.getAll().some(y=>y.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let u=o.excludedWarning("item(s)");return u&&a.warnings.push(u),a}async function nl(){let e=On();try{await lo(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Ke.getAll()){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!St(n)))$n(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of te.getAll()){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await te.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var al=256*1024;function Yo(e,t,r,o,n,a){return Ni({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>al,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function il(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Nn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],u=new Map(n.async??[]),d=new Map(r.async??[]);for(let f of io(u,d))St(f)||a.push(Yo(`async:${f}`,f,u.get(f),d.get(f),u.has(f),d.has(f)));for(let f of io(n.mmkv,r.mmkv)){let x=o?Ke.get(f):null,h=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[f]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[f]??[]).map(T=>[T.key,T]));for(let T of io(S,w)){if(St(T))continue;let I=`mmkv:${f}/${T}`,E=`${f} \xB7 ${T}`,D=S.get(T),C=w.get(T),V=Yo(I,E,D?.value,C?.value,S.has(T),w.has(T));h?V=zr(V,"MMKV instance not registered"):b?V=zr(V,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(V=zr(V,"ArrayBuffer values cannot be restored")),a.push(V)}}let y=n.secure??{},g=r.secure??{},p=o?new Map(te.getAll().map(f=>[f.key,f])):null;for(let f of io(y,g)){let x=Yo(`secure:${f}`,f,y[f],g[f],f in y,f in g);if(o){let h=p?.get(f);h?h.options.requireAuthentication&&(x=zr(x,"biometric-protected keys are never written")):x=zr(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}ji({id:"storage",label:"Storage",status:tl,capture:rl,restore:ol,clear:nl,previewItems:il});B();import{StorageIcon as ll}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as sl,defineToolPreset as cl}from"@buoy-gg/shared-ui/web";B();import{useState as rt,useCallback as Ae,useEffect as Qo,useRef as qn,useMemo as lt}from"react";var Hn={};An(Hn,{AccessibilityInfo:()=>gl,ActivityIndicator:()=>ns,Alert:()=>Te,Animated:()=>Jt,AppRegistry:()=>fl,AppState:()=>ml,Appearance:()=>pl,BackHandler:()=>hl,Button:()=>as,CheckBox:()=>Dl,Clipboard:()=>bl,DeviceEventEmitter:()=>Ul,Dimensions:()=>vl,Easing:()=>Kr,FlatList:()=>Xo,I18nManager:()=>Sl,Image:()=>Ml,ImageBackground:()=>zl,InteractionManager:()=>kl,Keyboard:()=>wl,KeyboardAvoidingView:()=>Kl,LayoutAnimation:()=>Cl,Linking:()=>xl,LogBox:()=>jl,Modal:()=>jn,NativeEventEmitter:()=>Tl,NativeModules:()=>yl,PanResponder:()=>Il,Picker:()=>Pl,PixelRatio:()=>El,Platform:()=>Bl,Pressable:()=>rs,ProgressBar:()=>Fl,RefreshControl:()=>Ol,SafeAreaView:()=>Ll,ScrollView:()=>Pr,SectionList:()=>Wl,Share:()=>Vl,StatusBar:()=>_l,StyleSheet:()=>pe,Switch:()=>os,Text:()=>c,TextInput:()=>Zl,Touchable:()=>$l,TouchableHighlight:()=>es,TouchableNativeFeedback:()=>Nl,TouchableOpacity:()=>P,TouchableWithoutFeedback:()=>ts,UIManager:()=>Rl,Vibration:()=>Al,View:()=>l,VirtualizedList:()=>ql,YellowBox:()=>Hl,findNodeHandle:()=>is,unstable_createElement:()=>ul,useColorScheme:()=>Gl,useLocaleContext:()=>Jl,useWindowDimensions:()=>Yl});B();Mi(Hn,dl);import*as dl from"react-native-web";import{unstable_createElement as ul,NativeModules as yl,AccessibilityInfo as gl,Animated as Jt,Appearance as pl,AppRegistry as fl,AppState as ml,BackHandler as hl,Clipboard as bl,Dimensions as vl,Easing as Kr,I18nManager as Sl,Keyboard as wl,InteractionManager as kl,LayoutAnimation as Cl,Linking as xl,NativeEventEmitter as Tl,PanResponder as Il,PixelRatio as El,Platform as Bl,Share as Vl,StyleSheet as pe,UIManager as Rl,Vibration as Al,CheckBox as Dl,FlatList as Xo,Image as Ml,ImageBackground as zl,KeyboardAvoidingView as Kl,Picker as Pl,ProgressBar as Fl,RefreshControl as Ol,SafeAreaView as Ll,SectionList as Wl,StatusBar as _l,Touchable as $l,TouchableNativeFeedback as Nl,VirtualizedList as ql,YellowBox as Hl,LogBox as jl,DeviceEventEmitter as Ul,useColorScheme as Gl,useLocaleContext as Jl,useWindowDimensions as Yl}from"react-native-web";import*as Qe from"react-native-web";import{createElement as Ql,forwardRef as Xl}from"react";function ot(e){let t=Xl((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...u}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&u[`aria-${d}`]===void 0&&(u[`aria-${d}`]=a[d]);for(let[d,y]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&u[`aria-${y}`]===void 0&&(u[`aria-${y}`]=i[d]);return Ql(e,{...u,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=ot(Qe.View),c=ot(Qe.Text),Zl=ot(Qe.TextInput),P=ot(Qe.TouchableOpacity),es=ot(Qe.TouchableHighlight),ts=ot(Qe.TouchableWithoutFeedback),rs=ot(Qe.Pressable),Pr=ot(Qe.ScrollView),jn=ot(Qe.Modal),os=ot(Qe.Switch),ns=ot(Qe.ActivityIndicator),as=ot(Qe.Button),is=Qe.findNodeHandle,Te={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let y=document.createElement("p");y.textContent=t,y.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(y)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let u=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let y of u){let g=document.createElement("button");g.type="button",g.textContent=y.text??"OK",g.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${y.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,g.onclick=()=>{d(),y.onPress?.()},i.appendChild(g)}n.addEventListener("cancel",y=>{y.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};pt();import{JsModal as ls,ModalHeader as De,TabSelector as ss,parseValue as cs,devToolsStorageKeys as sr,macOSColors as ds,night as Le,ToolEmptyState as us,Filter as ys,RefreshCw as gs,Search as ps,SearchBar as fs,PowerToggleButton as ms,ToolbarCopyButton as Un,ToolbarClearButton as hs,truncatePayload as so,TickProvider as Gn,useLimit as bs,TIER_LIMITS as vs,windowDragProps as Ss,usePersistedState as co,monoFont as uo}from"@buoy-gg/shared-ui/web";B();B();B();no();var ne=Ar()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as We,useCallback as Xe,useState as Yt,useEffect as cr,useRef as Zo}from"react";import{absoluteFill as Jn,useLimit as Yn,TIER_LIMITS as ws,monoFont as Fr}from"@buoy-gg/shared-ui/web";import{Database as Qn,Zap as ks,ProBadge as Xn,ProUpgradeModal as Cs,ToolEmptyState as xs,resolveListEmptyState as Ts}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Pe}from"@buoy-gg/shared-ui/web";B();import{useCallback as Zn,useState as Is}from"react";B();import{memo as Es}from"react";import{macOSColors as fe,night as ce,CompactRow as Bs,TypeBadge as ea,HardDrive as Vs,Square as Rs,CheckSquare as As,Edit3 as Ds,EyeOff as Ms,Pin as ta,Trash2 as zs,ExpandedInfoRow as en,PillBadge as Or,monoFont as dr}from"@buoy-gg/shared-ui/web";B();import{gameUIColors as yo}from"@buoy-gg/shared-ui/web";function tn(e){switch(e){case"mmkv":return ne.mmkv;case"async":return ne.async;case"secure":return"Secure";default:return e}}function ra(e){switch(e){case"mmkv":return yo.info;case"async":return yo.warning;case"secure":return yo.success;default:return yo.muted}}B();function At(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function oa(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var Ks=40;function Ps(e){switch(typeof e){case"boolean":return e?"true":"false";case"number":return Number.isFinite(e)?String(e):null;case"string":return e.length===0?'""':e.length>Ks?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function Fs(e){let t=At(e),r=Ps(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as Os}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as Ls,jsx as W,jsxs as Ve}from"react/jsx-runtime";var na=[fe.semantic.info,fe.semantic.success,fe.semantic.warning,fe.semantic.debug,"#FF6B9D","#00D9FF"];function aa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return na[t%na.length]}var ia=e=>{switch(e){case"required_present":return{label:"Valid",color:fe.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:fe.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:fe.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:fe.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:fe.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:fe.text.secondary,sublabel:String(e)}}},Ws=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),_s=Es(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:u,onHideKey:d,isPinned:y=false,onTogglePin:g,onEditKey:p,onToggleKey:f,onDeleteKey:x,editBlockedReason:h}){let b=p!=null&&h==null,S=ia(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,E=tn(e.storageType),D=oa(e.value),C=D!==null&&typeof D=="object",V=Ve(l,{style:_.expandedContainer,children:[W(en,{label:"Storage",children:W(Or,{color:rn(e.storageType),children:E})}),e.storageType==="mmkv"&&e.instanceId&&W(en,{label:"Instance",children:W(Or,{color:aa(e.instanceId),icon:W(Vs,{size:9,color:aa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(en,{label:"Updates",children:[W(Or,{color:fe.semantic.warning,children:String(i)}),i>1&&u&&W(P,{onPress:u,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(c,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(Os,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Value:"}),W(c,{style:_.expandedValue,numberOfLines:3,children:Ws(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(Ls,{children:[Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Type:"}),W(ea,{type:At(e.value)})]}),Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Expected:"}),W(ea,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Expected:"}),W(c,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Info:"}),W(c,{style:_.expandedDescription,children:e.description})]}):null,h?Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Edit:"}),W(c,{style:_.expandedDescription,children:h})]}):null,g||d||b?Ve(l,{style:_.actionRow,children:[b?Ve(P,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&f?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&f?f(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ds,{size:13,color:ce.color.onAccent}),W(c,{style:_.editButtonText,children:T&&f?"Toggle":"Edit"})]}):null,g?Ve(P,{style:[_.actionChip,y&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>g(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(ta,{size:12,active:y,color:ce.color.accent}),W(c,{style:[_.actionChipText,{color:ce.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,d?Ve(P,{style:_.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ms,{size:12,color:ce.color.warning}),W(c,{style:[_.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&x?Ve(P,{style:[_.actionChip,_.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>x(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(zs,{size:12,color:ce.color.danger}),W(c,{style:[_.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(P,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:_.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(As,{size:18,color:ce.color.accent}):W(Rs,{size:18,color:ce.color.textTertiary})}):null;return Ve(l,{style:[_.rowContainer,n&&_.rowContainerSelected],children:[ve,Ve(l,{style:_.compactRowWrapper,children:[W(Bs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?At(e.value):Fs(e.value):void 0,secondaryAccessory:T?W(Or,{size:"sm",color:e.value?fe.semantic.success:fe.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:V,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:_.badgeRow,children:[y&&W(ta,{size:12,active:true,color:ce.color.accent}),W(Or,{color:rn(e.storageType),children:E})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:fe.semantic.warning+"22",borderColor:fe.semantic.warning+"55"}],pointerEvents:"none",children:W(c,{style:[_.absCountText,{color:fe.semantic.warning}],children:String(i)})})]})]})}),rn=e=>{switch(e){case"mmkv":return fe.semantic.info;case"async":return fe.semantic.warning;case"secure":return fe.semantic.success;default:return fe.text.secondary}},_=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:dr},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:dr,flex:1},expandedExpected:{fontSize:11,color:fe.semantic.warning,fontFamily:dr,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:dr},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:dr},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:dr,color:ce.color.accent}});import{SectionHeader as ur,night as on}from"@buoy-gg/shared-ui/web";import{jsx as kt,jsxs as go}from"react/jsx-runtime";function nn(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function la({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:u,eventCountByKey:d,onViewHistory:y,onHideKey:g,pinnedKeys:p,onTogglePin:f,onEditKey:x,onToggleKey:h,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=Zn(V=>nn(V),[]),[E,D]=Is(null),C=Zn(V=>{if(!V||typeof V.key!="string")return;if(T){T(V);return}let Q=I(V);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?go(l,{style:Lr.sectionContainer,children:[go(ur,{children:[kt(ur.Title,{children:e}),kt(ur.Badge,{count:0,color:n})]}),kt(l,{style:Lr.emptySection,children:kt(c,{style:Lr.emptySectionText,children:o})})]}):r.length===0?null:go(l,{style:Lr.sectionContainer,children:[e?go(ur,{children:[kt(ur.Title,{children:e}),t>=0&&kt(ur.Badge,{count:t,color:n})]}):null,kt(l,{style:Lr.sectionContent,children:r.map(V=>{let Q=I(V);return kt(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:kt(_s,{storageKey:V,isExpanded:!a&&E===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:u,eventCount:d?.[V.key],onViewHistory:y?()=>y(V.key):void 0,onHideKey:g,onEditKey:x,onToggleKey:h,onDeleteKey:b,editBlockedReason:S?.(V),isPinned:p?.has(V.key),onTogglePin:f})},Q)})})]})}var Lr=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:on.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:on.color.border,alignItems:"center"},emptySectionText:{color:on.color.textTertiary,fontSize:11,textAlign:"center"}});B();import{useCallback as $s,useMemo as sa,useRef as ca,useState as da}from"react";import{EyeOff as Ns,FileJson as qs,HardDrive as Hs,night as J,macOSColors as yr,Pin as js,PillBadge as po,Trash2 as Us,TypeBadge as Gs,useSafeAreaInsets as Js,monoFont as Dt}from"@buoy-gg/shared-ui/web";import{DataViewer as Ys,LiveExplorer as Qs,ValueEditModal as Xs,updateNestedDataByPath as Zs,deleteNestedDataByPath as ec}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as F,jsxs as me}from"react/jsx-runtime";var tc=300,ft="buoy-storage-detail";function rc(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ft}-explorer-root`:`${ft}-explorer-${e.map(t).filter(Boolean).join("-")}`}var ua=[yr.semantic.info,yr.semantic.success,yr.semantic.warning,yr.semantic.debug,"#FF6B9D","#00D9FF"];function ya(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ua[t%ua.length]}function oc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:u=false,onTogglePin:d,applySafeAreaInset:y}){let g=Js(),p=y?g.bottom:0,f=t==null,x=ia(e.status),h=tn(e.storageType),[b,S]=da(false),[w,T]=da(0),I=ca(null),E=sa(()=>oa(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:E,V=$s(H=>{let ue=typeof H=="string"?H:JSON.stringify(H);I.current={raw:ue,value:H},o(ue).catch(ee=>{I.current=null,Te.alert("Couldn't save",ee instanceof Error?ee.message:String(ee))})},[o]),Q=ca(C);Q.current=C;let ve=sa(()=>{if(f)return{update:(H,ue)=>{let ee=H.length===0?ue:Zs(Q.current,H,ue);V(ee)},remove:H=>{H.length!==0&&V(ec(Q.current,H))}}},[f,V]),Se=d||i||f&&a;return me(l,{style:A.screen,children:[F(l,{testID:`${ft}-key`,accessibilityLabel:e.key}),me(Pr,{testID:`${ft}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[F(l,{style:A.section,children:me(l,{style:A.editorContainer,children:[me(l,{style:A.sectionHeaderRow,children:[F(c,{testID:`${ft}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),f?me(P,{onPress:()=>S(true),testID:`${ft}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(qs,{size:13,color:J.color.accent}),F(c,{style:A.rawButtonText,children:"Raw"})]}):null]}),me(l,{style:A.sectionBody,children:[F(Qs,{editable:f,label:"Value",value:C,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:rc,debounceMs:tc}),f?F(c,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):F(c,{style:A.blockedText,testID:`${ft}-edit-blocked`,children:t})]})]})}),F(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[F(c,{style:A.sectionHeaderPlain,children:"Key Details"}),me(l,{style:A.infoBody,children:[me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Status:"}),F(po,{color:x.color,testID:`${ft}-status`,children:x.label}),F(c,{style:A.infoDim,children:x.sublabel})]}),me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Storage:"}),F(po,{color:rn(e.storageType),testID:`${ft}-backend`,children:h}),F(c,{style:A.infoDim,children:At(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Instance:"}),F(po,{color:ya(e.instanceId),icon:F(Hs,{size:9,color:ya(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Updates:"}),F(po,{color:yr.semantic.warning,children:String(r)}),r>1&&n&&F(P,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:F(c,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Expected:"}),F(Gs,{type:e.expectedType}),me(c,{style:A.infoDim,children:["got ",At(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Expected:"}),F(c,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Info:"}),F(c,{style:A.infoDescription,children:e.description})]}):null]})]})}),F(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[F(c,{style:A.sectionHeaderPlain,children:"Value Explorer"}),F(l,{style:A.viewerBody,testID:`${ft}-viewer`,children:C!==null&&typeof C=="object"?F(Ys,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):F(c,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?me(l,{style:A.actionRow,children:[d?me(P,{style:[A.actionChip,u&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:u?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(js,{size:12,active:u,color:J.color.accent}),F(c,{style:[A.actionChipText,{color:J.color.accent}],children:u?"Unpin":"Pin to top"})]}):null,i?me(P,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Ns,{size:12,color:J.color.warning}),F(c,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,f&&a?me(P,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Us,{size:12,color:J.color.danger}),F(c,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&f?F(Xs,{path:[],value:C,onSave:H=>{V(H),T(ue=>ue+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=pe.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.accent+"4D",overflow:"hidden",shadowColor:J.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:J.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:J.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:J.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Dt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:J.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:J.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:J.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:J.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:J.color.textSecondary,borderBottomWidth:1,borderBottomColor:J.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Dt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:J.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Dt},infoDim:{color:J.color.textTertiary,fontSize:10,fontFamily:Dt},infoExpected:{fontSize:11,color:yr.semantic.warning,fontFamily:Dt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Dt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Dt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Dt}});B();B();import{macOSColors as an,night as Mt,monoFont as nc}from"@buoy-gg/shared-ui/web";import{jsx as ln,jsxs as ac}from"react/jsx-runtime";var ic=[{id:"all",label:"All Types",color:null},{id:"async",label:ne.async,color:an.semantic.warning},{id:"mmkv",label:ne.mmkv,color:an.semantic.info},{id:"secure",label:"Secure",color:an.semantic.success}];function sn({active:e,onChange:t,counts:r}){return ln(l,{style:Wr.row,children:ic.filter(o=>ne.hasSecure||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??Mt.color.accent;return ac(P,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[Wr.pill,{borderColor:Mt.color.border},n&&[Wr.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:Mt.color.accentSoft,borderColor:Mt.color.accentBorderStrong}]],children:[ln(c,{style:[Wr.label,n&&{color:a,fontWeight:"600"}],children:o.label}),ln(c,{style:[Wr.value,{color:n?a:Mt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function ga(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var Wr=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:Mt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Mt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:Mt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:nc,lineHeight:14}});import{macOSColors as zt,night as Fe,monoFont as lc}from"@buoy-gg/shared-ui/web";B();function cn(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function sc(){return null}function pa(){return"Session storage is unavailable in this browser context."}import{jsx as Qt,jsxs as _r}from"react/jsx-runtime";var py=cn();function cc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:u="all",onStorageTypeChange:d,showStatus:y=true}){let g=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return _r(l,{style:_e.container,children:[y?_r(l,{style:_e.filtersRow,children:[_r(P,{style:[_e.filterChip,a==="all"&&[_e.filterChipActive,{backgroundColor:Fe.color.accentSoft,borderColor:Fe.color.accentBorderStrong,shadowColor:Fe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Qt(c,{style:[_e.filterValue,{color:Fe.color.text}],children:g.validCount}),Qt(c,{style:_e.filterLabel,children:"Valid"})]}),_r(P,{style:[_e.filterChip,a==="missing"&&[_e.filterChipActive,{backgroundColor:zt.semantic.error+"10",borderColor:zt.semantic.error+"30",shadowColor:zt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Qt(c,{style:[_e.filterValue,{color:g.missingCount>0?zt.semantic.error:Fe.color.textTertiary}],children:g.missingCount}),Qt(c,{style:_e.filterLabel,children:"Missing"})]}),_r(P,{style:[_e.filterChip,a==="issues"&&[_e.filterChipActive,{backgroundColor:zt.semantic.warning+"10",borderColor:zt.semantic.warning+"30",shadowColor:zt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Qt(c,{style:[_e.filterValue,{color:g.issuesCount>0?zt.semantic.warning:Fe.color.textTertiary}],children:g.issuesCount}),Qt(c,{style:_e.filterLabel,children:"Issues"})]})]}):null,d&&Qt(sn,{active:u,onChange:d,counts:{all:g.totalCount,async:g.asyncCount,mmkv:g.mmkvCount,secure:g.secureCount}})]})}var _e=pe.create({container:{backgroundColor:Fe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Fe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Fe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Fe.color.border,marginHorizontal:4},subtitleText:{color:Fe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Fe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Fe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Fe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Fe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:lc,lineHeight:20}});B();pt();Gt();import{useState as dn,useEffect as dc,useCallback as uc,useRef as yc}from"react";B();function Kt(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function un(e=[]){let[t,r]=dn([]),[o,n]=dn(true),[a,i]=dn(null),u=JSON.stringify(e),d=yc(e);d.current=e;let y=uc(async()=>{let g=d.current;n(true),i(null);try{let p=await oe.getAllKeys();if(!p||p.length===0){r([]),n(false);return}let f=await ao(p),x=[];f.forEach(([h,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=g.find(E=>Kt(E,"async")?typeof E=="string"?E===h:E.key===h:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:h,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),g.forEach(h=>{if(!Kt(h,"async"))return;let b=typeof h=="string"?h:h.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof h=="object"&&h.expectedValue!==void 0&&{expectedValue:h.expectedValue},...typeof h=="object"&&h.expectedType!==void 0&&{expectedType:h.expectedType},...typeof h=="object"&&h.description!==void 0&&{description:h.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[u]);return dc(()=>{y()},[y]),{storageKeys:t,isLoading:o,error:a,refresh:y}}B();no();import{subscribeToBrowserStorage as gc}from"@buoy-gg/shared-ui/web/utils";var yn=new Set,fo,fa=false,pc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),ma=e=>[...pc].some(t=>e.startsWith(t));function ha(e){for(let t of[...yn])try{t(e)}catch{}}async function fc(){if(!(fo||typeof window>"u")){if(Ar()){fo=Wi(e=>{fa||ha(e)});return}fo=gc(e=>{if(fa||e.area!=="localStorage"||e.key!==void 0&&ma(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!ma(n))),ha({action:r,data:o,timestamp:new Date})})}}function ba(e){return yn.add(e),()=>{yn.delete(e)}}function mc(){return!!fo}B();import{useState as gr,useEffect as va,useCallback as Sa,useRef as wa}from"react";function hc(e,t,r=[]){let[o,n]=gr([]),[a,i]=gr(true),[u,d]=gr(null),y=JSON.stringify(r),g=wa(r);g.current=r;let p=Sa(()=>{let f=g.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys();if(!x||x.length===0){let b=f.filter(S=>Kt(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,E=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:E}});n(b),i(false);return}let h=[];x.forEach(b=>{let{value:S,type:w}=wt(e,b),T=f.find(D=>Kt(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Go(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let E={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};h.push(E)}),f.forEach(b=>{if(!Kt(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;h.some(w=>w.key===S)||h.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(h)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,y]);return va(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:u,refresh:p}}function ka(e,t=[]){let[r,o]=gr([]),[n,a]=gr(true),[i,u]=gr(null),d=JSON.stringify(t),y=wa(t);y.current=t;let g=Sa(()=>{let p=y.current;a(true),u(null);try{let f=[];e.forEach(({instance:x,id:h})=>{let b=x.getAllKeys();!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=wt(x,S),I=p.find(C=>Kt(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),E="optional_present";I&&(w===void 0?E="required_missing":typeof I=="object"&&I.expectedValue!==void 0?E=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?E=Go(T,I.expectedType)?"required_present":"required_wrong_type":E="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:h,status:E,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};f.push(D)})}),p.forEach(x=>{if(!Kt(x,"mmkv"))return;let h=typeof x=="string"?x:x.key;if(!f.some(b=>b.key===h)){let b=e[0]?.id||"mmkv.default";f.push({key:h,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(f)}catch(f){u(f instanceof Error?f:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return va(()=>{g()},[g]),{storageKeys:r,isLoading:n,error:i,refresh:g}}B();import{useState as gn,useEffect as bc,useCallback as Ca,useRef as mo}from"react";var vc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Sc=3e3;function xa(e){return JSON.stringify(e)}function wc(e=[],t={}){let{pollMs:r=Sc}=t,o=mo(e);o.current=e;let n=JSON.stringify(e),[a,i]=gn([]),[u,d]=gn(true),[y,g]=gn(null),p=mo(xa([])),f=mo(false),x=mo(false),h=Ca(S=>{let w=xa(S);w!==p.current&&(p.current=w,i(S))},[]),b=Ca(async()=>{if(!x.current){x.current=true;try{let S=te.getModule(),w=te.getAll(),T=o.current.filter(C=>Kt(C,"secure")),I=C=>T.find(V=>(typeof V=="string"?V:V.key)===C);if(!S||w.length===0&&T.length===0){h([]),f.current=true,d(false);return}f.current||d(true),g(null);let E=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(V=>V.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let V=I(C.key),Q=typeof V=="object"?V:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??C.description;if(C.options.requireAuthentication){E.push({key:C.key,value:vc,storageType:"secure",status:V?"required_present":"optional_present",category:V?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let H=null;try{H=await S.getItemAsync(C.key,C.options)}catch{}if(H===null&&!V)continue;let ue=H;if(H)try{ue=JSON.parse(H)}catch{ue=H}let ee="optional_present";if(V)if(H===null)ee="required_missing";else if(Q?.expectedValue!==void 0)ee=String(ue)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let se=ue===null?"null":Array.isArray(ue)?"array":typeof ue,je=Q.expectedType.toLowerCase();ee=se===je||je==="string"&&typeof H=="string"?"required_present":"required_wrong_type"}else ee="required_present";E.push({key:C.key,value:H===null?void 0:ue,storageType:"secure",status:ee,category:V?"required":"optional",...Se&&{description:Se},...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}})}h(E)}catch(S){g(S instanceof Error?S:new Error("Failed to read SecureStore")),h([])}finally{f.current=true,x.current=false,d(false)}}},[h,n]);return bc(()=>{b();let S=te.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:u,error:y,refresh:b}}B();import{useState as ho,useEffect as bo}from"react";function pn(e=false){let[t,r]=ho([]),[o,n]=ho(true),a=()=>{n(true);try{let i=Ke.getAll().map(u=>{let{instance:d,id:y,encrypted:g,readOnly:p}=u,f=d.getAllKeys()?.length||0;return{id:y,instance:d,encrypted:g,readOnly:p,keyCount:f,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return bo(()=>{a()},[]),bo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Ta(e){let[t,r]=ho(null);return bo(()=>{if(!Ke){r(null);return}let o=Ke.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys()?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function kc(e){let[t,r]=ho(false);return bo(()=>{if(!Ke){r(false);return}r(Ke.has(e))},[e]),t}B();import{useEffect as Cc,useRef as Ia}from"react";import{Check as xc,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as pr,jsxs as Tc}from"react/jsx-runtime";var Ic=2600,Ea=180;function Ec({onDone:e}){let t=Ia(new Jt.Value(0)).current,r=Ia(e);return r.current=e,Cc(()=>{let o=Jt.sequence([Jt.timing(t,{toValue:1,duration:Ea,easing:Kr.out(Kr.quad),useNativeDriver:true}),Jt.delay(Ic),Jt.timing(t,{toValue:0,duration:Ea,easing:Kr.in(Kr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),pr(Jt.View,{pointerEvents:"box-none",style:[fr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Tc(P,{activeOpacity:.85,onPress:()=>r.current(),style:fr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[pr(l,{style:fr.tick,children:pr(xc,{size:10,color:Xt.semantic.success})}),pr(c,{style:fr.saved,children:"Saved"}),pr(l,{style:fr.divider}),pr(c,{style:fr.detail,children:"applies on next launch"})]})})}var fr=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor:Xt.background.card,borderWidth:pe.hairlineWidth,borderColor:Xt.border.default,shadowColor:"#000",shadowOpacity:.4,shadowRadius:14,shadowOffset:{width:0,height:5}},tick:{width:16,height:16,borderRadius:8,marginRight:7,alignItems:"center",justifyContent:"center",backgroundColor:Xt.semantic.successBackground},saved:{color:Xt.text.primary,fontSize:12,fontWeight:"600"},divider:{width:pe.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Xt.border.default},detail:{color:Xt.text.muted,fontSize:12}});B();import{useState as Bc,useEffect as Vc}from"react";pt();import{Trash2 as vo,CopyButton as Rc,SquareDashed as Ac,X as Dc,ProUpgradeModal as Mc,monoFont as zc}from"@buoy-gg/shared-ui/web";import{macOSColors as Ba,night as nt}from"@buoy-gg/shared-ui/web";import{useIsPro as Kc}from"@buoy-gg/license/web";import{jsx as $e,jsxs as Va}from"react/jsx-runtime";function Pc({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[u,d]=Bc(false),y=Kc();Vc(()=>{u&&y&&d(false)},[u,y]);let g=()=>{if(!y){d(true);return}Te.alert(`Clear ${ne.asyncFull}`,`Delete all ${ne.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await oe.clear(),o?.()}catch(E){Te.alert("Error",`Failed: ${E}`)}}}])},p=(E,D)=>{if(!y){d(true);return}Te.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let C=t.find(V=>V.id===E);C&&(C.instance.clearAll(),o?.())}catch(C){Te.alert("Error",`Failed: ${C}`)}}}])},f=()=>{if(!y){d(true);return}Te.alert(`Clear All ${ne.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(E=>E.instance.clearAll()),o?.()}catch(E){Te.alert("Error",`Failed: ${E}`)}}}])},x=()=>{if(!y){d(true);return}Te.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(E=>E.instance.clearAll()),o?.()}catch(E){Te.alert("Error",`Failed: ${E}`)}}}])},h=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=h&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Va(l,{style:mt.container,children:[a&&$e(P,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[mt.actionButton,n&&mt.actionButtonActive],children:n?Va(l,{style:mt.selectModeActiveContainer,children:[$e(Dc,{size:14,color:nt.color.accent}),i>0&&$e(c,{style:mt.selectedCountText,children:i})]}):$e(Ac,{size:16,color:nt.color.textSecondary})}),!n&&$e(Rc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:mt.actionButton,colors:{idle:nt.color.textSecondary,success:Ba.semantic.success,error:Ba.semantic.error}}),!n&&S&&$e(P,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),!n&&w&&$e(P,{onPress:g,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ne.asyncFull}`,accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),!n&&I&&$e(P,{onPress:f,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ne.mmkv} instances`,accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),!n&&T&&t.length===1&&$e(P,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ne.mmkv} instance`,accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),$e(Mc,{visible:u,onClose:()=>d(false),featureName:"Storage Editing"})]})}var mt=pe.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:nt.color.buttonSurface,borderWidth:1,borderColor:nt.color.border},actionButtonActive:{backgroundColor:nt.color.accentSoft,borderColor:nt.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:nt.color.accent,fontFamily:zc}});B();import{useState as Fc,useEffect as Oc}from"react";import{Trash2 as Lc,CopyButton as Wc,CheckSquare as _c,EyeOff as $c,ProUpgradeModal as Nc,monoFont as qc}from"@buoy-gg/shared-ui/web";import{macOSColors as Ra,night as Ne}from"@buoy-gg/shared-ui/web";import{useIsPro as Hc}from"@buoy-gg/license/web";B();Gt();function jc(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function Aa(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await lr(r.map(a=>a.key));for(let a of n)await te.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let u=i.instanceId||"default";a[u]||(a[u]=[]),a[u].push(i.key)}),Object.entries(a).forEach(([i,u])=>{let d=t.find(y=>y.id===i);d&&u.forEach(y=>jc(d.instance,y))})}}import{jsx as Ct,jsxs as $r}from"react/jsx-runtime";function Uc({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[u,d]=Fc(false),y=Hc();Oc(()=>{u&&y&&d(false)},[u,y]);let g=e.length,p=g===i&&i>0,f=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:g,keys:b,timestamp:new Date().toISOString()}},x=()=>{g!==0&&o?.(e)},h=()=>{if(g!==0){if(!y){d(true);return}Te.alert("Delete Selected Keys",`Delete ${g} selected key${g>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await Aa(e,t),r?.()}catch(b){Te.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return g===0?null:$r(l,{style:ht.container,children:[$r(l,{style:ht.leftSection,children:[$r(P,{style:ht.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[Ct(_c,{size:14,color:p?Ne.color.accent:Ne.color.textSecondary}),Ct(c,{style:ht.selectAllText,children:p?"Deselect All":"Select All"})]}),Ct(l,{style:ht.countBadge,children:$r(c,{style:ht.countText,children:[g," selected"]})})]}),$r(l,{style:ht.actionsSection,children:[Ct(Wc,{value:f(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:ht.actionButton,colors:{idle:Ne.color.accent,success:Ra.semantic.success,error:Ra.semantic.error}}),o&&Ct(P,{style:ht.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:Ct($c,{size:14,color:Ne.color.warning})}),Ct(P,{style:ht.actionButton,onPress:h,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:Ct(Lc,{size:14,color:Ne.color.danger})})]}),Ct(Nc,{visible:u,onClose:()=>d(false),featureName:"Storage Editing"})]})}var ht=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:Ne.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:Ne.color.accentBorderStrong,paddingHorizontal:12,paddingVertical:8,marginBottom:10},leftSection:{flexDirection:"row",alignItems:"center",gap:12},selectAllButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,paddingHorizontal:8,backgroundColor:Ne.color.surface,borderRadius:6,borderWidth:1,borderColor:Ne.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:Ne.color.textSecondary},countBadge:{backgroundColor:Ne.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:Ne.color.accent,fontFamily:qc},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:Ne.color.surface,borderWidth:1,borderColor:Ne.color.border}});B();var fn=new Set;function Gc(e){return fn.add(e),()=>{fn.delete(e)}}function Jc(){fn.forEach(e=>{try{e()}catch{}})}B();pt();function mn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(te.getAll().find(r=>r.key===e.key)?.options.requireAuthentication)return"Biometric-protected keys can't be edited \u2014 writing one would fire an auth prompt.";if(!te.getModule())return"No SecureStore module is registered."}return null}function Da(e,t){if(e.storageType==="mmkv"){let r=Pa(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(za(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function Yc(e){if(e==null)return"";if(typeof e=="string"){let t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return e}return typeof e=="object"?JSON.stringify(e,null,2):String(e)}async function Ma(e,t,r=[]){let o=mn(e,r);if(o)throw new Error(o);let n=Da(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Ka(e,t));return}case"secure":{await te.setValue(e.key,Ka(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(u=>u.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,Qc(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function za(e){return e!==null&&typeof e=="object"}function Ka(e,t){return za(e.value)?JSON.stringify(JSON.parse(t)):t}function Pa(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function Qc(e,t){switch(Pa(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as mr,macOSColors as So,night as L,HardDrive as Fa}from"@buoy-gg/shared-ui/web";import{useIsPro as Xc}from"@buoy-gg/license/web";import{Fragment as Zc,jsx as q,jsxs as Ie}from"react/jsx-runtime";var Oa=[So.semantic.info,So.semantic.success,So.semantic.warning,So.semantic.debug,"#FF6B9D","#00D9FF"];function hr(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Oa[t%Oa.length]}var Py=ws["storage.keys"].free;function ed({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:E,onCloseDetail:D}){let C=Xc(),V=Yn("storage.keys"),Q=Yn("storage.mmkvInstances"),[ve,Se]=Yt(false);cr(()=>{ve&&C&&Se(false)},[ve,C]);let[H,ue]=Yt("all"),ee=p!=null&&f!=null,se=ee?p:H,je=ee?f:ue,[Ue,vt]=Yt("all"),Et=S!=null&&w!=null,ye=Et?S:Ue,rr=Et?w:vt,[re,Wt]=Yt(null),Ge=Zo(null),wr=Zo(0),ae=Zo(new Map),ut=Xe((s,m)=>{m?ae.current.set(s,m):ae.current.delete(s)},[]),[_t,kr]=Yt(0),[$t,Cr]=Yt(false),[or,Bt]=Yt(new Set),{instances:Ce}=pn(false),{storageKeys:Gr,isLoading:Jr,error:Yr,refresh:Nt}=un(e),Ko=We(()=>Ce.map(s=>({instance:s.instance,id:s.id})),[Ce]),{storageKeys:xr,isLoading:Po,error:Tr,refresh:nr}=ka(Ko,e),Fo=We(()=>re?xr.filter(s=>s.instanceId===re):xr,[xr,re]),{storageKeys:qt,isLoading:Qr,error:Oo,refresh:Xr}=wc(e),N=We(()=>[...Gr,...Fo,...qt],[Gr,Fo,qt]),we=We(()=>{if(!I)return null;let s=nn(I);return N.find(m=>nn(m)===s)??I},[I,N]),Lo=Jr||Po||Qr,Zr=Yr||Tr||Oo,xe=Xe(()=>{Nt(),nr(),Xr()},[Nt,nr,Xr]),et=Xe(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),Wo=Xe(()=>{Cr(s=>(s&&Bt(new Set),!s))},[]),tt=Xe((s,m)=>{let U=et(s);Bt(X=>{let Ye=new Set(X);return m?Ye.add(U):Ye.delete(U),Ye})},[et]),_o=Xe(()=>{Bt(new Set),Cr(false),xe()},[xe]),Ir=Xe(s=>{s.forEach(m=>n?.(m.key)),Bt(new Set),Cr(false)},[n]),Ht=Xe(async(s,m)=>{if(!C)throw Se(true),new Error("Editing storage values is a Pro feature.");await Ma(s,m,Ce),xe(),kr(U=>U+1)},[C,Ce,xe]),$o=Xe(s=>{Ht(s,JSON.stringify(!s.value)).catch(m=>{Te.alert("Couldn't save",m instanceof Error?m.message:String(m))})},[Ht]),eo=Xe((s,m)=>{if(!C){Se(true);return}Te.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await Aa([s],Ce.map(U=>({id:U.id,instance:U.instance}))),xe(),m?.()}catch(U){Te.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,Ce,xe]),Er=Xe(s=>mn(s,Ce),[Ce]),No=We(()=>{let s=N,m={valid:s.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:s.filter(G=>G.status==="required_missing").length,issues:s.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:s.length},U=s.filter(G=>G.storageType==="async"),X=s.filter(G=>G.storageType==="mmkv"),Ye=s.filter(G=>G.storageType==="secure");return{summary:{valid:m.valid,missing:m.missing,issues:m.issues,total:m.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:X.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Ye.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);cr(()=>{i&&(i.current=N)},[N,i]),cr(()=>{let s,m=ba(U=>{clearTimeout(s),s=setTimeout(()=>{Nt()},100)});return()=>{clearTimeout(s),m()}},[Nt]),cr(()=>{let s,m=Gc(()=>{clearTimeout(s),s=setTimeout(xe,100)});return()=>{clearTimeout(s),m()}},[xe]),cr(()=>{let s,m=Ln(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{nr()},100))});return()=>{clearTimeout(s),m()}},[nr,re]);let jt=We(()=>{let s=N,m=s.filter(X=>!Pe(X.key)),U=s.filter(X=>Pe(X.key));return{totalCount:s.length,requiredCount:m.filter(X=>X.category==="required").length,missingCount:m.filter(X=>X.status==="required_missing").length,wrongValueCount:m.filter(X=>X.status==="required_wrong_value").length,wrongTypeCount:m.filter(X=>X.status==="required_wrong_type").length,presentRequiredCount:m.filter(X=>X.status==="required_present").length,optionalCount:m.filter(X=>X.category==="optional").length,mmkvCount:s.filter(X=>X.storageType==="mmkv").length,asyncCount:s.filter(X=>X.storageType==="async").length,secureCount:s.filter(X=>X.storageType==="secure").length,devToolsCount:U.length}},[N]),yt=We(()=>{let s=N.filter(R=>!Pe(R.key));ye!=="all"&&(s=s.filter(R=>R.storageType===ye));let m=s.filter(R=>R.status==="required_present"||R.status==="optional_present").length,U=s.filter(R=>R.status==="required_missing").length,X=s.filter(R=>R.status==="required_wrong_type"||R.status==="required_wrong_value").length,Ye=0,G=0,Be=0,Vt=0;return se==="all"?(Ye=N.filter(R=>!Pe(R.key)&&R.storageType==="async"&&(R.status==="required_present"||R.status==="optional_present")).length,G=N.filter(R=>!Pe(R.key)&&R.storageType==="mmkv"&&(R.status==="required_present"||R.status==="optional_present")).length,Be=N.filter(R=>!Pe(R.key)&&R.storageType==="secure"&&(R.status==="required_present"||R.status==="optional_present")).length,Vt=Ye+G+Be):se==="missing"?(Ye=N.filter(R=>!Pe(R.key)&&R.storageType==="async"&&R.status==="required_missing").length,G=N.filter(R=>!Pe(R.key)&&R.storageType==="mmkv"&&R.status==="required_missing").length,Be=N.filter(R=>!Pe(R.key)&&R.storageType==="secure"&&R.status==="required_missing").length,Vt=Ye+G+Be):se==="issues"&&(Ye=N.filter(R=>!Pe(R.key)&&R.storageType==="async"&&(R.status==="required_wrong_type"||R.status==="required_wrong_value")).length,G=N.filter(R=>!Pe(R.key)&&R.storageType==="mmkv"&&(R.status==="required_wrong_type"||R.status==="required_wrong_value")).length,Be=N.filter(R=>!Pe(R.key)&&R.storageType==="secure"&&(R.status==="required_wrong_type"||R.status==="required_wrong_value")).length,Vt=Ye+G+Be),{validCount:m,missingCount:U,issuesCount:X,asyncCount:Ye,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);cr(()=>{x?.({validCount:yt.validCount,missingCount:yt.missingCount,issuesCount:yt.issuesCount})},[x,yt.validCount,yt.missingCount,yt.issuesCount]);let ar=We(()=>[...N].sort((s,m)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[m.status]||999)}),[N]),Rn=We(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),ze=We(()=>{let s=ar;if(g&&g.size>0&&(s=s.filter(m=>g.has(m.storageType))),s=s.filter(m=>!Array.from(r).some(U=>m.key.includes(U))),a){let m=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(m))}switch(se){case"all":s=s.filter(m=>m.status==="required_present"||m.status==="optional_present");break;case"missing":s=s.filter(m=>m.status==="required_missing");break;case"issues":s=s.filter(m=>m.status==="required_wrong_type"||m.status==="required_wrong_value");break}if(ye!=="all"&&(s=s.filter(m=>m.storageType===ye)),h&&h.size>0){let m=s.filter(X=>h.has(X.key)),U=s.filter(X=>!h.has(X.key));s=[...m,...U]}return s},[ar,se,ye,r,a,re,g,h]),v=We(()=>ze.slice(0,V),[ze,V]),k=We(()=>Math.max(0,ze.length-V),[ze.length,V]),z=k>0,j=We(()=>{let s=ze.filter(m=>!Pe(m.key));return{totalCount:ze.length,requiredCount:s.filter(m=>m.category==="required").length,missingCount:s.filter(m=>m.status==="required_missing").length,wrongValueCount:s.filter(m=>m.status==="required_wrong_value").length,wrongTypeCount:s.filter(m=>m.status==="required_wrong_type").length,presentRequiredCount:s.filter(m=>m.status==="required_present").length,optionalCount:s.filter(m=>m.category==="optional").length,mmkvCount:ze.filter(m=>m.storageType==="mmkv").length,asyncCount:ze.filter(m=>m.storageType==="async").length,secureCount:ze.filter(m=>m.storageType==="secure").length,devToolsCount:ze.filter(m=>Pe(m.key)).length}},[ze]),Je=We(()=>v.filter(s=>or.has(et(s))),[v,or,et]),Br=Xe(()=>{let s=new Set(v.map(et));Bt(s)},[v,et]),Vr=Xe(()=>{Bt(new Set)},[]),Rr=jt.requiredCount>0?Math.round(jt.presentRequiredCount/jt.requiredCount*100):jt.totalCount>0?100:0,ki=Rr>=90?"OPTIMAL":Rr>=70?"WARNING":"CRITICAL",Ci=Rr>=90?mr.success:Rr>=70?mr.warning:mr.error;if(we)return q(l,{style:O.root,children:q(oc,{storageKey:we,editBlockedReason:Er(we),eventCount:u?.[we.key],onSave:s=>Ht(we,s),onViewHistory:y?()=>y(we.key):void 0,onDeleteKey:s=>eo(s,()=>D?.()),onHideKey:s=>{Ir([s]),D?.()},isPinned:h?.has(we.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Lo&&N.length===0)return Ie(l,{style:O.emptyState,children:[q(Qn,{size:48,color:L.color.textTertiary}),q(c,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(Zr)return Ie(l,{style:O.emptyState,children:[q(Qn,{size:48,color:mr.error}),q(c,{style:[O.emptyTitle,{color:mr.error}],children:"Error loading storage"}),q(c,{style:O.emptySubtitle,children:Zr.message})]});let xi=Ie(Zc,{children:[ye==="mmkv"&&Ce.length===0&&Ie(l,{style:O.emptyMMKVState,children:[q(c,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),q(c,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),q(c,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
1
|
+
"use client";var Ho=Object.defineProperty;var Fi=Object.getOwnPropertyDescriptor;var Wi=Object.getOwnPropertyNames;var _i=Object.prototype.hasOwnProperty;var ro=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ln=(e,t)=>{for(var r in t)Ho(e,r,{get:t[r],enumerable:true})},jo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Wi(t))!_i.call(e,n)&&n!==r&&Ho(e,n,{get:()=>t[n],enumerable:!(o=Fi(t,n))||o.enumerable});return e},$i=(e,t,r)=>(jo(e,t,"default"),r&&jo(r,t,"default"));var Ni=e=>jo(Ho({},"__esModule",{value:true}),e);var qi,E=ro(()=>{"use strict";qi=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Gt,hasCapacitorPlugin as Hi,installCapacitorBridge as ji,interceptCapacitor as Ui,isCapacitorNative as Gi}from"@buoy-gg/license/web";function Dr(){return Gi()&&Hi(mt)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Mr))try{o(r)}catch{}}function Ji(e){return Mr.add(e),Yi(),()=>{Mr.delete(e)}}async function lr(e){let{value:t}=await Gt(mt,"get",{key:e});return t??null}async function Uo(){let{keys:e}=await Gt(mt,"keys");return Array.isArray(e)?e:[]}async function oo(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function Yi(){Go||!Dr()||!ji()||(Go=true,Ui({plugin:mt,methods:["set","remove","clear"],promise:async(e,t)=>{if(Mr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Uo().catch(()=>[]),y=await t();return At("clear",{keys:await i}),y}if(r===void 0)return t();let o=lr(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?At("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):At("removeItem",{key:r,prevValue:a}),n}}))}function Pn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Pn(r[o],n):n;return r}function On(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var mt,Mr,Go,no,ao=ro(()=>{"use strict";E();mt="Preferences";Mr=new Set;Go=false;no={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(mt,"set",{key:e,value:String(t)}),At("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=lr(e).catch(()=>null);await Gt(mt,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await oo(await Uo()).catch(()=>{});await Gt(mt,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Uo()},multiGet(e){return oo(e)},async multiSet(e){let t=oo(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(mt,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=oo(e).catch(()=>{});await Promise.all(e.map(r=>Gt(mt,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await no.setItem(e,JSON.stringify(Pn(On(r),On(t))))},async multiMerge(e){for(let[t,r]of e)await no.mergeItem(t,r)}}});import Qi from"@buoy-gg/shared-ui/web/asyncStorage";var lt,Fn,oe,ft=ro(()=>{"use strict";E();ao();lt=()=>Dr()?no:Qi,Fn={getItem:e=>lt().getItem(e),setItem:(e,t)=>lt().setItem(e,t),removeItem:e=>lt().removeItem(e),clear:()=>lt().clear(),getAllKeys:()=>lt().getAllKeys(),multiGet:e=>lt().multiGet(e),multiSet:e=>lt().multiSet(e),multiRemove:e=>lt().multiRemove(e),mergeItem:(e,t)=>lt().mergeItem(e,t),multiMerge:e=>lt().multiMerge(e)},oe=Fn});var Wn={};Ln(Wn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>_n,default:()=>$n,readMany:()=>io,removeMany:()=>sr,writeMany:()=>zr});async function io(e){if(typeof Fe.multiGet=="function")return await Fe.multiGet(e);let t=await Fe.getMany(e);return e.map(r=>[r,t[r]??null])}async function zr(e){if(typeof Fe.multiSet=="function")return Fe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Fe.setMany(t)}async function sr(e){return typeof Fe.multiRemove=="function"?Fe.multiRemove(e):Fe.removeMany(e)}var Fe,_n,$n,Jt=ro(()=>{"use strict";E();ft();Fe=oe,_n={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};$n=Fe});E();E();ft();Jt();import{classifyPreviewItem as Xi,createRestoreScope as Zi,emptyRestoreResult as Nn,failedRestore as el,isDevToolsStorageKey as we,registerStateSnapshotProvider as tl,unionKeys as lo,wontApply as Kr}from"@buoy-gg/shared-ui/web";E();ft();Jt();import{isDevToolsStorageKey as rl}from"@buoy-gg/shared-ui/web";async function so(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!rl(r));t.length!==0&&await sr(t)}async function ol(){await oe.clear()}E();E();import{isDevToolsStorageKey as nl}from"@buoy-gg/shared-ui/web";E();function kt(e,t){let r=e.getString(t);if(r!==void 0&&r!=="")return{value:r,type:"string"};let o=e.getNumber(t);if(o!==void 0)return{value:o,type:"number"};let n=e.getBoolean(t);if(n!==void 0)return{value:n,type:"boolean"};if(r==="")return{value:"",type:"string"};let a=e.getBuffer(t);return a!==void 0?{value:`<ArrayBuffer ${a.byteLength} bytes>`,type:"buffer"}:{value:void 0,type:"unknown"}}function al(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Jo(e,t){return e===t}var il=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(nl(e)||this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,kt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=kt(e,n),y=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:y,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:y,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Yo=new il;var qn=e=>Yo.addListener(e);var ll=class{constructor(){this.instances=new Map}register(e,t,r){let o={id:e,instance:t,encrypted:r?.encrypted??false,readOnly:t.isReadOnly??false};this.instances.set(e,o)}unregister(e){this.instances.delete(e)}get(e){return this.instances.get(e)}getAll(){return Array.from(this.instances.values())}has(e){return this.instances.has(e)}count(){return this.instances.size}},Pe=new ll;function Hn(e,t,r){Pe.register(e,t,r),Yo.addInstance(t,e)}function jn(e){Yo.removeInstance(e),Pe.unregister(e)}E();var sl=class{constructor(){this.module=null;this.keys=new Map;this.listeners=new Set}register(e,t){let r=this.signature();this.module=e;for(let o of t){let n=typeof o=="string"?{key:o,options:{}}:{key:o.key,description:o.description,options:{keychainService:o.keychainService,requireAuthentication:o.requireAuthentication,authenticationPrompt:o.authenticationPrompt}};this.keys.set(n.key,n)}this.signature()!==r&&this.notify()}unregister(e){this.keys.delete(e)&&this.notify()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){let t=this.keys.get(e);!this.module||!t||await this.module.deleteItemAsync(e,t.options)}async setValue(e,t){let r=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!r)throw new Error(`SecureStore key "${e}" is not registered`);if(r.options.requireAuthentication)throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`);await this.module.setItemAsync(e,t,r.options)}},te=new sl;function cl(e,t){te.register(e,t)}function dl(e){te.unregister(e)}function Un(e,t){e.remove?e.remove(t):e.delete?.(t)}function ul(){return{canCapture:true,canRestore:true}}async function Gn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await io(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:y}of Pe.getAll().filter(({id:d})=>!we(d)))try{o[i]=y.getAllKeys().filter(d=>!we(d)).map(d=>{let{value:g,type:c}=kt(y,d);return c==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:g,valueType:c}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=te.getModule();for(let{key:i,options:y}of te.getAll().filter(({key:d})=>!we(d))){if(y.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,y)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function yl(){let{data:e,warnings:t}=await Gn();return{data:e,warnings:t}}async function gl(e,t){let r=e,o=Zi(t),n=o.touch,a=Nn();if(!r)return el("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!we(p)&&n(`async:${p}`)),g=new Set(d.map(([p])=>p)),c=(await oe.getAllKeys()).filter(p=>!we(p)).filter(p=>!g.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),c.length>0&&await sr(c),d.length>0&&await zr(d),a.applied+=d.length+c.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,g]of Object.entries(r.mmkv??{})){if(we(d))continue;let c=Pe.get(d);if(!c){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(c.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=c;try{let m=new Set(g.map(f=>f.key)),x=p.getAllKeys().filter(f=>!we(f));for(let f of x)o.allows(`mmkv:${d}/${f}`)&&(m.has(f)||(Un(p,f),a.applied+=1));for(let f of g)if(!we(f.key)&&n(`mmkv:${d}/${f.key}`)){if(f.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${f.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(f.key,f.value),a.applied+=1}}catch(m){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(m)}`)}}let i=r.secure??{};for(let{key:d,options:g}of te.getAll().filter(({key:c})=>!we(c)))if(o.allows(`secure:${d}`)){if(g.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let c=i[d];c===null?await te.deleteValue(d):await te.setValue(d,c)}else await te.deleteValue(d);a.applied+=1}catch(c){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(c)}`)}}for(let d of Object.keys(i))we(d)||n(`secure:${d}`)&&(te.getAll().filter(({key:g})=>!we(g)).some(g=>g.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let y=o.excludedWarning("item(s)");return y&&a.warnings.push(y),a}async function pl(){let e=Nn();try{await so(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Pe.getAll().filter(({id:o})=>!we(o))){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!we(n)))Un(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of te.getAll().filter(({key:o})=>!we(o))){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await te.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var ml=256*1024;function Qo(e,t,r,o,n,a){return Xi({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>ml,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function fl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Gn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],y=new Map(n.async??[]),d=new Map(r.async??[]);for(let m of lo(y,d))we(m)||a.push(Qo(`async:${m}`,m,y.get(m),d.get(m),y.has(m),d.has(m)));for(let m of lo(n.mmkv,r.mmkv)){if(we(m))continue;let x=o?Pe.get(m):null,f=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[m]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[m]??[]).map(T=>[T.key,T]));for(let T of lo(S,w)){if(we(T))continue;let I=`mmkv:${m}/${T}`,R=`${m} \xB7 ${T}`,D=S.get(T),C=w.get(T),B=Qo(I,R,D?.value,C?.value,S.has(T),w.has(T));f?B=Kr(B,"MMKV instance not registered"):b?B=Kr(B,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Kr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let g=n.secure??{},c=r.secure??{},p=o?new Map(te.getAll().filter(({key:m})=>!we(m)).map(m=>[m.key,m])):null;for(let m of lo(g,c)){if(we(m))continue;let x=Qo(`secure:${m}`,m,g[m],c[m],m in g,m in c);if(o){let f=p?.get(m);f?f.options.requireAuthentication&&(x=Kr(x,"biometric-protected keys are never written")):x=Kr(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}tl({id:"storage",label:"Storage",status:ul,capture:yl,restore:gl,clear:pl,previewItems:fl});E();import{StorageIcon as hl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as bl,defineToolPreset as vl}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as Xo,useRef as Jn,useMemo as st}from"react";var Yn={};Ln(Yn,{AccessibilityInfo:()=>Cl,ActivityIndicator:()=>Ss,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Tl,AppState:()=>Il,Appearance:()=>xl,BackHandler:()=>El,Button:()=>ws,CheckBox:()=>$l,Clipboard:()=>Rl,DeviceEventEmitter:()=>os,Dimensions:()=>Bl,Easing:()=>Lr,FlatList:()=>Zo,I18nManager:()=>Vl,Image:()=>Nl,ImageBackground:()=>ql,InteractionManager:()=>Dl,Keyboard:()=>Al,KeyboardAvoidingView:()=>Hl,LayoutAnimation:()=>Ml,Linking:()=>zl,LogBox:()=>rs,Modal:()=>ta,NativeEventEmitter:()=>Kl,NativeModules:()=>kl,PanResponder:()=>Ll,Picker:()=>jl,PixelRatio:()=>Pl,Platform:()=>Ol,Pressable:()=>bs,ProgressBar:()=>Ul,RefreshControl:()=>Gl,SafeAreaView:()=>Jl,ScrollView:()=>Or,SectionList:()=>Yl,Share:()=>Fl,StatusBar:()=>Ql,StyleSheet:()=>pe,Switch:()=>vs,Text:()=>u,TextInput:()=>ms,Touchable:()=>Xl,TouchableHighlight:()=>fs,TouchableNativeFeedback:()=>Zl,TouchableOpacity:()=>L,TouchableWithoutFeedback:()=>hs,UIManager:()=>Wl,Vibration:()=>_l,View:()=>l,VirtualizedList:()=>es,YellowBox:()=>ts,findNodeHandle:()=>ks,unstable_createElement:()=>wl,useColorScheme:()=>ns,useLocaleContext:()=>as,useWindowDimensions:()=>is});E();$i(Yn,Sl);import*as Sl from"react-native-web";import{unstable_createElement as wl,NativeModules as kl,AccessibilityInfo as Cl,Animated as Yt,Appearance as xl,AppRegistry as Tl,AppState as Il,BackHandler as El,Clipboard as Rl,Dimensions as Bl,Easing as Lr,I18nManager as Vl,Keyboard as Al,InteractionManager as Dl,LayoutAnimation as Ml,Linking as zl,NativeEventEmitter as Kl,PanResponder as Ll,PixelRatio as Pl,Platform as Ol,Share as Fl,StyleSheet as pe,UIManager as Wl,Vibration as _l,CheckBox as $l,FlatList as Zo,Image as Nl,ImageBackground as ql,KeyboardAvoidingView as Hl,Picker as jl,ProgressBar as Ul,RefreshControl as Gl,SafeAreaView as Jl,SectionList as Yl,StatusBar as Ql,Touchable as Xl,TouchableNativeFeedback as Zl,VirtualizedList as es,YellowBox as ts,LogBox as rs,DeviceEventEmitter as os,useColorScheme as ns,useLocaleContext as as,useWindowDimensions as is}from"react-native-web";import*as Xe from"react-native-web";import{createElement as en,forwardRef as Qn,useCallback as ls,useRef as ss}from"react";E();import{useEffect as cs,useState as ds}from"react";import{createPortal as us}from"react-dom";E();var ys='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as gs}from"react/jsx-runtime";var Pr=Symbol.for("@buoy-gg/portal-host"),Xn=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function Zn(){let e=document;if(e[Pr])return e[Pr].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:ys});let r=()=>{let c=document.fullscreenElement,p=c&&c.tagName!=="CANVAS"?c:document.body;t.parentElement!==p&&p.appendChild(t)},o=new Map,n=c=>{(!t.contains(c.target)||!Xn(c.target))&&o.set(c.code||c.key,{key:c.key,code:c.code,location:c.location,keyCode:c.keyCode,which:c.which,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey})},a=c=>{o.delete(c.code||c.key)},i=()=>o.clear(),y=()=>{let c=[...o.values()];o.clear();for(let p of c)document.dispatchEvent(new KeyboardEvent("keyup",{...p,bubbles:true}))},d=c=>{Xn(c.target)&&c.stopPropagation()},g=c=>c.stopPropagation();return r(),document.addEventListener("fullscreenchange",r),document.addEventListener("keydown",n,true),document.addEventListener("keyup",a,true),window.addEventListener("blur",i),t.addEventListener("focusin",y),t.addEventListener("keydown",d),t.addEventListener("keyup",d),t.addEventListener("keypress",d),t.addEventListener("wheel",g,{passive:true}),e[Pr]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",r),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",a,true),window.removeEventListener("blur",i),t.remove(),delete e[Pr]}},t}function ps({children:e}){let[t,r]=ds(null);return cs(()=>{let o=Zn(),n=document[Pr];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?us(gs("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}function nt(e){let t=Qn((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...y}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&y[`aria-${d}`]===void 0&&(y[`aria-${d}`]=a[d]);for(let[d,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&y[`aria-${g}`]===void 0&&(y[`aria-${g}`]=i[d]);return en(e,{...y,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=nt(Xe.View),u=nt(Xe.Text),ms=nt(Xe.TextInput),L=nt(Xe.TouchableOpacity),fs=nt(Xe.TouchableHighlight),hs=nt(Xe.TouchableWithoutFeedback),bs=nt(Xe.Pressable),Or=nt(Xe.ScrollView),ea=Qn((e,t)=>{let r=ss(null),o=ls(n=>{if(n){let a=n;for(;a.parentElement&&a.parentElement!==document.body;)a=a.parentElement;a.parentElement===document.body&&(r.current=a,Object.assign(a.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),Zn().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return en(ps,null,en(Xe.Modal,{...e,ref:o}))});ea.displayName="Modal";var ta=nt(ea),vs=nt(Xe.Switch),Ss=nt(Xe.ActivityIndicator),ws=nt(Xe.Button),ks=Xe.findNodeHandle,Ie={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let g=document.createElement("p");g.textContent=t,g.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(g)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let y=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let g of y){let c=document.createElement("button");c.type="button",c.textContent=g.text??"OK",c.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${g.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,c.onclick=()=>{d(),g.onPress?.()},i.appendChild(c)}n.addEventListener("cancel",g=>{g.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};ft();import{JsModal as Cs,ModalHeader as Me,TabSelector as xs,parseValue as Ts,devToolsStorageKeys as cr,macOSColors as Is,night as We,ToolEmptyState as Es,Filter as Rs,RefreshCw as Bs,Search as Vs,SearchBar as As,PowerToggleButton as Ds,ToolbarCopyButton as ra,ToolbarClearButton as Ms,truncatePayload as co,TickProvider as oa,useLimit as zs,TIER_LIMITS as Ks,windowDragProps as Ls,usePersistedState as uo,monoFont as yo}from"@buoy-gg/shared-ui/web";E();E();E();ao();var ne=Dr()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as _e,useCallback as Ze,useState as Qt,useEffect as dr,useRef as tn}from"react";import{absoluteFill as na,useLimit as aa,TIER_LIMITS as Ps,monoFont as Fr}from"@buoy-gg/shared-ui/web";import{Database as ia,Zap as Os,ProBadge as la,ProUpgradeModal as Fs,ToolEmptyState as Ws,resolveListEmptyState as _s}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";E();import{useCallback as sa,useState as $s}from"react";E();import{memo as Ns}from"react";import{macOSColors as me,night as ce,CompactRow as qs,TypeBadge as ca,HardDrive as Hs,Square as js,CheckSquare as Us,Edit3 as Gs,EyeOff as Js,Pin as da,Trash2 as Ys,ExpandedInfoRow as rn,PillBadge as Wr,monoFont as ur}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as go}from"@buoy-gg/shared-ui/web";function on(e){switch(e){case"mmkv":return ne.mmkv;case"async":return ne.async;case"secure":return"Secure";default:return e}}function ua(e){switch(e){case"mmkv":return go.info;case"async":return go.warning;case"secure":return go.success;default:return go.muted}}E();function Dt(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function ya(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var Qs=40;function Xs(e){switch(typeof e){case"boolean":return e?"true":"false";case"number":return Number.isFinite(e)?String(e):null;case"string":return e.length===0?'""':e.length>Qs?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function Zs(e){let t=Dt(e),r=Xs(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as ec}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as tc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var ga=[me.semantic.info,me.semantic.success,me.semantic.warning,me.semantic.debug,"#FF6B9D","#00D9FF"];function pa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ga[t%ga.length]}var ma=e=>{switch(e){case"required_present":return{label:"Valid",color:me.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:me.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:me.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:me.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:me.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:me.text.secondary,sublabel:String(e)}}},rc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),oc=Ns(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:y,onHideKey:d,isPinned:g=false,onTogglePin:c,onEditKey:p,onToggleKey:m,onDeleteKey:x,editBlockedReason:f}){let b=p!=null&&f==null,S=ma(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=on(e.storageType),D=ya(e.value),C=D!==null&&typeof D=="object",B=Ve(l,{style:_.expandedContainer,children:[W(rn,{label:"Storage",children:W(Wr,{color:nn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(rn,{label:"Instance",children:W(Wr,{color:pa(e.instanceId),icon:W(Hs,{size:9,color:pa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(rn,{label:"Updates",children:[W(Wr,{color:me.semantic.warning,children:String(i)}),i>1&&y&&W(L,{onPress:y,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(u,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(ec,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Value:"}),W(u,{style:_.expandedValue,numberOfLines:3,children:rc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(tc,{children:[Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Type:"}),W(ca,{type:Dt(e.value)})]}),Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(ca,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(u,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Info:"}),W(u,{style:_.expandedDescription,children:e.description})]}):null,f?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Edit:"}),W(u,{style:_.expandedDescription,children:f})]}):null,c||d||b?Ve(l,{style:_.actionRow,children:[b?Ve(L,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&m?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&m?m(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Gs,{size:13,color:ce.color.onAccent}),W(u,{style:_.editButtonText,children:T&&m?"Toggle":"Edit"})]}):null,c?Ve(L,{style:[_.actionChip,g&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:g?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>c(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(da,{size:12,active:g,color:ce.color.accent}),W(u,{style:[_.actionChipText,{color:ce.color.accent}],children:g?"Unpin":"Pin to top"})]}):null,d?Ve(L,{style:_.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Js,{size:12,color:ce.color.warning}),W(u,{style:[_.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&x?Ve(L,{style:[_.actionChip,_.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>x(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ys,{size:12,color:ce.color.danger}),W(u,{style:[_.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(L,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:_.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(Us,{size:18,color:ce.color.accent}):W(js,{size:18,color:ce.color.textTertiary})}):null;return Ve(l,{style:[_.rowContainer,n&&_.rowContainerSelected],children:[ve,Ve(l,{style:_.compactRowWrapper,children:[W(qs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?Dt(e.value):Zs(e.value):void 0,secondaryAccessory:T?W(Wr,{size:"sm",color:e.value?me.semantic.success:me.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:_.badgeRow,children:[g&&W(da,{size:12,active:true,color:ce.color.accent}),W(Wr,{color:nn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:me.semantic.warning+"22",borderColor:me.semantic.warning+"55"}],pointerEvents:"none",children:W(u,{style:[_.absCountText,{color:me.semantic.warning}],children:String(i)})})]})]})}),nn=e=>{switch(e){case"mmkv":return me.semantic.info;case"async":return me.semantic.warning;case"secure":return me.semantic.success;default:return me.text.secondary}},_=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:ur},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:ur,flex:1},expandedExpected:{fontSize:11,color:me.semantic.warning,fontFamily:ur,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:ur},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:ur},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:ur,color:ce.color.accent}});import{SectionHeader as yr,night as an}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as po}from"react/jsx-runtime";function ln(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function fa({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:y,eventCountByKey:d,onViewHistory:g,onHideKey:c,pinnedKeys:p,onTogglePin:m,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=sa(B=>ln(B),[]),[R,D]=$s(null),C=sa(B=>{if(!B||typeof B.key!="string")return;if(T){T(B);return}let Q=I(B);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?po(l,{style:_r.sectionContainer,children:[po(yr,{children:[Ct(yr.Title,{children:e}),Ct(yr.Badge,{count:0,color:n})]}),Ct(l,{style:_r.emptySection,children:Ct(u,{style:_r.emptySectionText,children:o})})]}):r.length===0?null:po(l,{style:_r.sectionContainer,children:[e?po(yr,{children:[Ct(yr.Title,{children:e}),t>=0&&Ct(yr.Badge,{count:t,color:n})]}):null,Ct(l,{style:_r.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(oc,{storageKey:B,isExpanded:!a&&R===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:y,eventCount:d?.[B.key],onViewHistory:g?()=>g(B.key):void 0,onHideKey:c,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedReason:S?.(B),isPinned:p?.has(B.key),onTogglePin:m})},Q)})})]})}var _r=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:an.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:an.color.border,alignItems:"center"},emptySectionText:{color:an.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as nc,useMemo as ha,useRef as ba,useState as va}from"react";import{EyeOff as ac,FileJson as ic,HardDrive as lc,night as J,macOSColors as gr,Pin as sc,PillBadge as mo,Trash2 as cc,TypeBadge as dc,useSafeAreaInsets as uc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as yc,LiveExplorer as gc,ValueEditModal as pc,updateNestedDataByPath as mc,deleteNestedDataByPath as fc}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as P,jsxs as fe}from"react/jsx-runtime";var hc=300,ht="buoy-storage-detail";function bc(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ht}-explorer-root`:`${ht}-explorer-${e.map(t).filter(Boolean).join("-")}`}var Sa=[gr.semantic.info,gr.semantic.success,gr.semantic.warning,gr.semantic.debug,"#FF6B9D","#00D9FF"];function wa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Sa[t%Sa.length]}function vc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:y=false,onTogglePin:d,applySafeAreaInset:g}){let c=uc(),p=g?c.bottom:0,m=t==null,x=ma(e.status),f=on(e.storageType),[b,S]=va(false),[w,T]=va(0),I=ba(null),R=ha(()=>ya(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:R,B=nc(H=>{let ue=typeof H=="string"?H:JSON.stringify(H);I.current={raw:ue,value:H},o(ue).catch(ee=>{I.current=null,Ie.alert("Couldn't save",ee instanceof Error?ee.message:String(ee))})},[o]),Q=ba(C);Q.current=C;let ve=ha(()=>{if(m)return{update:(H,ue)=>{let ee=H.length===0?ue:mc(Q.current,H,ue);B(ee)},remove:H=>{H.length!==0&&B(fc(Q.current,H))}}},[m,B]),Se=d||i||m&&a;return fe(l,{style:A.screen,children:[P(l,{testID:`${ht}-key`,accessibilityLabel:e.key}),fe(Or,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[P(l,{style:A.section,children:fe(l,{style:A.editorContainer,children:[fe(l,{style:A.sectionHeaderRow,children:[P(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),m?fe(L,{onPress:()=>S(true),testID:`${ht}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(ic,{size:13,color:J.color.accent}),P(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),fe(l,{style:A.sectionBody,children:[P(gc,{editable:m,label:"Value",value:C,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:bc,debounceMs:hc}),m?P(u,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):P(u,{style:A.blockedText,testID:`${ht}-edit-blocked`,children:t})]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Key Details"}),fe(l,{style:A.infoBody,children:[fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Status:"}),P(mo,{color:x.color,testID:`${ht}-status`,children:x.label}),P(u,{style:A.infoDim,children:x.sublabel})]}),fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Storage:"}),P(mo,{color:nn(e.storageType),testID:`${ht}-backend`,children:f}),P(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Instance:"}),P(mo,{color:wa(e.instanceId),icon:P(lc,{size:9,color:wa(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Updates:"}),P(mo,{color:gr.semantic.warning,children:String(r)}),r>1&&n&&P(L,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:P(u,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(dc,{type:e.expectedType}),fe(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Info:"}),P(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),P(l,{style:A.viewerBody,testID:`${ht}-viewer`,children:C!==null&&typeof C=="object"?P(yc,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):P(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?fe(l,{style:A.actionRow,children:[d?fe(L,{style:[A.actionChip,y&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(sc,{size:12,active:y,color:J.color.accent}),P(u,{style:[A.actionChipText,{color:J.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,i?fe(L,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(ac,{size:12,color:J.color.warning}),P(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,m&&a?fe(L,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(cc,{size:12,color:J.color.danger}),P(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&m?P(pc,{path:[],value:C,onSave:H=>{B(H),T(ue=>ue+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=pe.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.accent+"4D",overflow:"hidden",shadowColor:J.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:J.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:J.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:J.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:J.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:J.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:J.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:J.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:J.color.textSecondary,borderBottomWidth:1,borderBottomColor:J.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:J.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Mt},infoDim:{color:J.color.textTertiary,fontSize:10,fontFamily:Mt},infoExpected:{fontSize:11,color:gr.semantic.warning,fontFamily:Mt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Mt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Mt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Mt}});E();E();import{macOSColors as sn,night as zt,monoFont as Sc}from"@buoy-gg/shared-ui/web";import{jsx as cn,jsxs as wc}from"react/jsx-runtime";var kc=[{id:"all",label:"All Types",color:null},{id:"async",label:ne.async,color:sn.semantic.warning},{id:"mmkv",label:ne.mmkv,color:sn.semantic.info},{id:"secure",label:"Secure",color:sn.semantic.success}];function dn({active:e,onChange:t,counts:r}){return cn(l,{style:$r.row,children:kc.filter(o=>ne.hasSecure||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??zt.color.accent;return wc(L,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[$r.pill,{borderColor:zt.color.border},n&&[$r.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:zt.color.accentSoft,borderColor:zt.color.accentBorderStrong}]],children:[cn(u,{style:[$r.label,n&&{color:a,fontWeight:"600"}],children:o.label}),cn(u,{style:[$r.value,{color:n?a:zt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function ka(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var $r=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:zt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:zt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:zt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:Sc,lineHeight:14}});import{macOSColors as Kt,night as Oe,monoFont as Cc}from"@buoy-gg/shared-ui/web";E();function un(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function xc(){return null}function Ca(){return"Session storage is unavailable in this browser context."}import{jsx as Xt,jsxs as Nr}from"react/jsx-runtime";var Oy=un();function Tc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:y="all",onStorageTypeChange:d,showStatus:g=true}){let c=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return Nr(l,{style:$e.container,children:[g?Nr(l,{style:$e.filtersRow,children:[Nr(L,{style:[$e.filterChip,a==="all"&&[$e.filterChipActive,{backgroundColor:Oe.color.accentSoft,borderColor:Oe.color.accentBorderStrong,shadowColor:Oe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Xt(u,{style:[$e.filterValue,{color:Oe.color.text}],children:c.validCount}),Xt(u,{style:$e.filterLabel,children:"Valid"})]}),Nr(L,{style:[$e.filterChip,a==="missing"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.error+"10",borderColor:Kt.semantic.error+"30",shadowColor:Kt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Xt(u,{style:[$e.filterValue,{color:c.missingCount>0?Kt.semantic.error:Oe.color.textTertiary}],children:c.missingCount}),Xt(u,{style:$e.filterLabel,children:"Missing"})]}),Nr(L,{style:[$e.filterChip,a==="issues"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.warning+"10",borderColor:Kt.semantic.warning+"30",shadowColor:Kt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Xt(u,{style:[$e.filterValue,{color:c.issuesCount>0?Kt.semantic.warning:Oe.color.textTertiary}],children:c.issuesCount}),Xt(u,{style:$e.filterLabel,children:"Issues"})]})]}):null,d&&Xt(dn,{active:y,onChange:d,counts:{all:c.totalCount,async:c.asyncCount,mmkv:c.mmkvCount,secure:c.secureCount}})]})}var $e=pe.create({container:{backgroundColor:Oe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Oe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Oe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Oe.color.border,marginHorizontal:4},subtitleText:{color:Oe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Oe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Oe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Oe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Oe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Cc,lineHeight:20}});E();ft();Jt();import{isDevToolsStorageKey as Ic}from"@buoy-gg/shared-ui/web";import{useState as yn,useEffect as Ec,useCallback as Rc,useRef as Bc}from"react";E();function Lt(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function gn(e=[]){let[t,r]=yn([]),[o,n]=yn(true),[a,i]=yn(null),y=JSON.stringify(e),d=Bc(e);d.current=e;let g=Rc(async()=>{let c=d.current;n(true),i(null);try{let p=(await oe.getAllKeys()).filter(f=>!Ic(f));if(!p||p.length===0){r([]),n(false);return}let m=await io(p),x=[];m.forEach(([f,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=c.find(R=>Lt(R,"async")?typeof R=="string"?R===f:R.key===f:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:f,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),c.forEach(f=>{if(!Lt(f,"async"))return;let b=typeof f=="string"?f:f.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof f=="object"&&f.expectedValue!==void 0&&{expectedValue:f.expectedValue},...typeof f=="object"&&f.expectedType!==void 0&&{expectedType:f.expectedType},...typeof f=="object"&&f.description!==void 0&&{description:f.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[y]);return Ec(()=>{g()},[g]),{storageKeys:t,isLoading:o,error:a,refresh:g}}E();ao();import{isDevToolsStorageKey as Vc,appStorageEvent as Ac}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as Dc}from"@buoy-gg/shared-ui/web/utils";var pn=new Set,fo,xa=false,Mc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Ta=e=>Vc(e)||[...Mc].some(t=>e.startsWith(t));function Ia(e){let t=Ac(e);if(t){e=t;for(let r of[...pn])try{r(e)}catch{}}}async function zc(){if(!(fo||typeof window>"u")){if(Dr()){fo=Ji(e=>{xa||Ia(e)});return}fo=Dc(e=>{if(xa||e.area!=="localStorage"||e.key!==void 0&&Ta(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!Ta(n))),Ia({action:r,data:o,timestamp:new Date})})}}function Ea(e){return pn.add(e),()=>{pn.delete(e)}}function Kc(){return!!fo}E();import{isDevToolsStorageKey as Ra}from"@buoy-gg/shared-ui/web";import{useState as pr,useEffect as Ba,useCallback as Va,useRef as Aa}from"react";function Lc(e,t,r=[]){let[o,n]=pr([]),[a,i]=pr(true),[y,d]=pr(null),g=JSON.stringify(r),c=Aa(r);c.current=r;let p=Va(()=>{let m=c.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys().filter(b=>!Ra(b));if(!x||x.length===0){let b=m.filter(S=>Lt(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,R=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:R}});n(b),i(false);return}let f=[];x.forEach(b=>{let{value:S,type:w}=kt(e,b),T=m.find(D=>Lt(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Jo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let R={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};f.push(R)}),m.forEach(b=>{if(!Lt(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;f.some(w=>w.key===S)||f.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(f)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,g]);return Ba(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:y,refresh:p}}function Da(e,t=[]){let[r,o]=pr([]),[n,a]=pr(true),[i,y]=pr(null),d=JSON.stringify(t),g=Aa(t);g.current=t;let c=Va(()=>{let p=g.current;a(true),y(null);try{let m=[];e.forEach(({instance:x,id:f})=>{let b=x.getAllKeys().filter(S=>!Ra(S));!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=kt(x,S),I=p.find(C=>Lt(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),R="optional_present";I&&(w===void 0?R="required_missing":typeof I=="object"&&I.expectedValue!==void 0?R=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?R=Jo(T,I.expectedType)?"required_present":"required_wrong_type":R="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:f,status:R,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};m.push(D)})}),p.forEach(x=>{if(!Lt(x,"mmkv"))return;let f=typeof x=="string"?x:x.key;if(!m.some(b=>b.key===f)){let b=e[0]?.id||"mmkv.default";m.push({key:f,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(m)}catch(m){y(m instanceof Error?m:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return Ba(()=>{c()},[c]),{storageKeys:r,isLoading:n,error:i,refresh:c}}E();import{isDevToolsStorageKey as Pc}from"@buoy-gg/shared-ui/web";import{useState as mn,useEffect as Oc,useCallback as Ma,useRef as ho}from"react";var Fc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Wc=3e3;function za(e){return JSON.stringify(e)}function _c(e=[],t={}){let{pollMs:r=Wc}=t,o=ho(e);o.current=e;let n=JSON.stringify(e),[a,i]=mn([]),[y,d]=mn(true),[g,c]=mn(null),p=ho(za([])),m=ho(false),x=ho(false),f=Ma(S=>{let w=za(S);w!==p.current&&(p.current=w,i(S))},[]),b=Ma(async()=>{if(!x.current){x.current=true;try{let S=te.getModule(),w=te.getAll().filter(({key:C})=>!Pc(C)),T=o.current.filter(C=>Lt(C,"secure")),I=C=>T.find(B=>(typeof B=="string"?B:B.key)===C);if(!S||w.length===0&&T.length===0){f([]),m.current=true,d(false);return}m.current||d(true),c(null);let R=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(B=>B.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let B=I(C.key),Q=typeof B=="object"?B:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??C.description;if(C.options.requireAuthentication){R.push({key:C.key,value:Fc,storageType:"secure",status:B?"required_present":"optional_present",category:B?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let H=null;try{H=await S.getItemAsync(C.key,C.options)}catch{}if(H===null&&!B)continue;let ue=H;if(H)try{ue=JSON.parse(H)}catch{ue=H}let ee="optional_present";if(B)if(H===null)ee="required_missing";else if(Q?.expectedValue!==void 0)ee=String(ue)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let se=ue===null?"null":Array.isArray(ue)?"array":typeof ue,Ue=Q.expectedType.toLowerCase();ee=se===Ue||Ue==="string"&&typeof H=="string"?"required_present":"required_wrong_type"}else ee="required_present";R.push({key:C.key,value:H===null?void 0:ue,storageType:"secure",status:ee,category:B?"required":"optional",...Se&&{description:Se},...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}})}f(R)}catch(S){c(S instanceof Error?S:new Error("Failed to read SecureStore")),f([])}finally{m.current=true,x.current=false,d(false)}}},[f,n]);return Oc(()=>{b();let S=te.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:y,error:g,refresh:b}}E();import{isDevToolsStorageKey as fn}from"@buoy-gg/shared-ui/web";import{useState as bo,useEffect as vo}from"react";function hn(e=false){let[t,r]=bo([]),[o,n]=bo(true),a=()=>{n(true);try{let i=Pe.getAll().filter(({id:y})=>!fn(y)).map(y=>{let{instance:d,id:g,encrypted:c,readOnly:p}=y,m=d.getAllKeys().filter(x=>!fn(x))?.length||0;return{id:g,instance:d,encrypted:c,readOnly:p,keyCount:m,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return vo(()=>{a()},[]),vo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Ka(e){let[t,r]=bo(null);return vo(()=>{if(!Pe){r(null);return}let o=Pe.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!fn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function $c(e){let[t,r]=bo(false);return vo(()=>{if(!Pe){r(false);return}r(Pe.has(e))},[e]),t}E();import{useEffect as Nc,useRef as La}from"react";import{Check as qc,macOSColors as Zt}from"@buoy-gg/shared-ui/web";import{jsx as mr,jsxs as Hc}from"react/jsx-runtime";var jc=2600,Pa=180;function Uc({onDone:e}){let t=La(new Yt.Value(0)).current,r=La(e);return r.current=e,Nc(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:Pa,easing:Lr.out(Lr.quad),useNativeDriver:true}),Yt.delay(jc),Yt.timing(t,{toValue:0,duration:Pa,easing:Lr.in(Lr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),mr(Yt.View,{pointerEvents:"box-none",style:[fr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Hc(L,{activeOpacity:.85,onPress:()=>r.current(),style:fr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[mr(l,{style:fr.tick,children:mr(qc,{size:10,color:Zt.semantic.success})}),mr(u,{style:fr.saved,children:"Saved"}),mr(l,{style:fr.divider}),mr(u,{style:fr.detail,children:"applies on next launch"})]})})}var fr=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor:Zt.background.card,borderWidth:pe.hairlineWidth,borderColor:Zt.border.default,shadowColor:"#000",shadowOpacity:.4,shadowRadius:14,shadowOffset:{width:0,height:5}},tick:{width:16,height:16,borderRadius:8,marginRight:7,alignItems:"center",justifyContent:"center",backgroundColor:Zt.semantic.successBackground},saved:{color:Zt.text.primary,fontSize:12,fontWeight:"600"},divider:{width:pe.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Zt.border.default},detail:{color:Zt.text.muted,fontSize:12}});E();import{useState as Gc,useEffect as Jc}from"react";ft();import{Trash2 as So,CopyButton as Yc,SquareDashed as Qc,X as Xc,ProUpgradeModal as Zc,monoFont as ed}from"@buoy-gg/shared-ui/web";import{macOSColors as Oa,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as td}from"@buoy-gg/license/web";import{jsx as Ne,jsxs as Fa}from"react/jsx-runtime";function rd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[y,d]=Gc(false),g=td();Jc(()=>{y&&g&&d(false)},[y,g]);let c=()=>{if(!g){d(true);return}Ie.alert(`Clear ${ne.asyncFull}`,`Delete all ${ne.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await oe.clear(),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},p=(R,D)=>{if(!g){d(true);return}Ie.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let C=t.find(B=>B.id===R);C&&(C.instance.clearAll(),o?.())}catch(C){Ie.alert("Error",`Failed: ${C}`)}}}])},m=()=>{if(!g){d(true);return}Ie.alert(`Clear All ${ne.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},x=()=>{if(!g){d(true);return}Ie.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},f=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=f&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Fa(l,{style:bt.container,children:[a&&Ne(L,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Fa(l,{style:bt.selectModeActiveContainer,children:[Ne(Xc,{size:14,color:at.color.accent}),i>0&&Ne(u,{style:bt.selectedCountText,children:i})]}):Ne(Qc,{size:16,color:at.color.textSecondary})}),!n&&Ne(Yc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:Oa.semantic.success,error:Oa.semantic.error}}),!n&&S&&Ne(L,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&w&&Ne(L,{onPress:c,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ne.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&I&&Ne(L,{onPress:m,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ne.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&Ne(L,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ne.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),Ne(Zc,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var bt=pe.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:at.color.buttonSurface,borderWidth:1,borderColor:at.color.border},actionButtonActive:{backgroundColor:at.color.accentSoft,borderColor:at.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:at.color.accent,fontFamily:ed}});E();import{useState as od,useEffect as nd}from"react";import{Trash2 as ad,CopyButton as id,CheckSquare as ld,EyeOff as sd,ProUpgradeModal as cd,monoFont as dd}from"@buoy-gg/shared-ui/web";import{macOSColors as Wa,night as qe}from"@buoy-gg/shared-ui/web";import{useIsPro as ud}from"@buoy-gg/license/web";E();Jt();function yd(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function _a(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await sr(r.map(a=>a.key));for(let a of n)await te.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let y=i.instanceId||"default";a[y]||(a[y]=[]),a[y].push(i.key)}),Object.entries(a).forEach(([i,y])=>{let d=t.find(g=>g.id===i);d&&y.forEach(g=>yd(d.instance,g))})}}import{jsx as xt,jsxs as qr}from"react/jsx-runtime";function gd({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[y,d]=od(false),g=ud();nd(()=>{y&&g&&d(false)},[y,g]);let c=e.length,p=c===i&&i>0,m=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:c,keys:b,timestamp:new Date().toISOString()}},x=()=>{c!==0&&o?.(e)},f=()=>{if(c!==0){if(!g){d(true);return}Ie.alert("Delete Selected Keys",`Delete ${c} selected key${c>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await _a(e,t),r?.()}catch(b){Ie.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return c===0?null:qr(l,{style:vt.container,children:[qr(l,{style:vt.leftSection,children:[qr(L,{style:vt.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(ld,{size:14,color:p?qe.color.accent:qe.color.textSecondary}),xt(u,{style:vt.selectAllText,children:p?"Deselect All":"Select All"})]}),xt(l,{style:vt.countBadge,children:qr(u,{style:vt.countText,children:[c," selected"]})})]}),qr(l,{style:vt.actionsSection,children:[xt(id,{value:m(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:qe.color.accent,success:Wa.semantic.success,error:Wa.semantic.error}}),o&&xt(L,{style:vt.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(sd,{size:14,color:qe.color.warning})}),xt(L,{style:vt.actionButton,onPress:f,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(ad,{size:14,color:qe.color.danger})})]}),xt(cd,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var vt=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:qe.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:qe.color.accentBorderStrong,paddingHorizontal:12,paddingVertical:8,marginBottom:10},leftSection:{flexDirection:"row",alignItems:"center",gap:12},selectAllButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,paddingHorizontal:8,backgroundColor:qe.color.surface,borderRadius:6,borderWidth:1,borderColor:qe.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:qe.color.textSecondary},countBadge:{backgroundColor:qe.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:qe.color.accent,fontFamily:dd},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:qe.color.surface,borderWidth:1,borderColor:qe.color.border}});E();var bn=new Set;function pd(e){return bn.add(e),()=>{bn.delete(e)}}function md(){bn.forEach(e=>{try{e()}catch{}})}E();ft();function vn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(te.getAll().find(r=>r.key===e.key)?.options.requireAuthentication)return"Biometric-protected keys can't be edited \u2014 writing one would fire an auth prompt.";if(!te.getModule())return"No SecureStore module is registered."}return null}function $a(e,t){if(e.storageType==="mmkv"){let r=ja(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(qa(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function fd(e){if(e==null)return"";if(typeof e=="string"){let t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return e}return typeof e=="object"?JSON.stringify(e,null,2):String(e)}async function Na(e,t,r=[]){let o=vn(e,r);if(o)throw new Error(o);let n=$a(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Ha(e,t));return}case"secure":{await te.setValue(e.key,Ha(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(y=>y.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,hd(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function qa(e){return e!==null&&typeof e=="object"}function Ha(e,t){return qa(e.value)?JSON.stringify(JSON.parse(t)):t}function ja(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function hd(e,t){switch(ja(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as hr,macOSColors as wo,night as F,HardDrive as Ua}from"@buoy-gg/shared-ui/web";import{useIsPro as bd}from"@buoy-gg/license/web";import{Fragment as vd,jsx as q,jsxs as Ee}from"react/jsx-runtime";var Ga=[wo.semantic.info,wo.semantic.success,wo.semantic.warning,wo.semantic.debug,"#FF6B9D","#00D9FF"];function br(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ga[t%Ga.length]}var ug=Ps["storage.keys"].free;function Sd({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let C=bd(),B=aa("storage.keys"),Q=aa("storage.mmkvInstances"),[ve,Se]=Qt(false);dr(()=>{ve&&C&&Se(false)},[ve,C]);let[H,ue]=Qt("all"),ee=p!=null&&m!=null,se=ee?p:H,Ue=ee?m:ue,[Ge,wt]=Qt("all"),Rt=S!=null&&w!=null,ye=Rt?S:Ge,or=Rt?w:wt,[re,_t]=Qt(null),Je=tn(null),kr=tn(0),ae=tn(new Map),gt=Ze((s,h)=>{h?ae.current.set(s,h):ae.current.delete(s)},[]),[$t,Cr]=Qt(0),[Nt,xr]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=hn(false),{storageKeys:Jr,isLoading:Yr,error:Qr,refresh:qt}=gn(e),Lo=_e(()=>xe.map(s=>({instance:s.instance,id:s.id})),[xe]),{storageKeys:Tr,isLoading:Po,error:Ir,refresh:ar}=Da(Lo,e),Oo=_e(()=>re?Tr.filter(s=>s.instanceId===re):Tr,[Tr,re]),{storageKeys:Ht,isLoading:Xr,error:Fo,refresh:Zr}=_c(e),N=_e(()=>[...Jr,...Oo,...Ht].filter(s=>!ze(s.key)),[Jr,Oo,Ht]),ke=_e(()=>{if(!I)return null;let s=ln(I);return N.find(h=>ln(h)===s)??I},[I,N]),Wo=Yr||Po||Xr,eo=Qr||Ir||Fo,Te=Ze(()=>{qt(),ar(),Zr()},[qt,ar,Zr]),tt=Ze(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),_o=Ze(()=>{xr(s=>(s&&Bt(new Set),!s))},[]),rt=Ze((s,h)=>{let U=tt(s);Bt(X=>{let Qe=new Set(X);return h?Qe.add(U):Qe.delete(U),Qe})},[tt]),$o=Ze(()=>{Bt(new Set),xr(false),Te()},[Te]),Er=Ze(s=>{s.forEach(h=>n?.(h.key)),Bt(new Set),xr(false)},[n]),jt=Ze(async(s,h)=>{if(!C)throw Se(true),new Error("Editing storage values is a Pro feature.");await Na(s,h,xe),Te(),Cr(U=>U+1)},[C,xe,Te]),No=Ze(s=>{jt(s,JSON.stringify(!s.value)).catch(h=>{Ie.alert("Couldn't save",h instanceof Error?h.message:String(h))})},[jt]),to=Ze((s,h)=>{if(!C){Se(true);return}Ie.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await _a([s],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),h?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,xe,Te]),Rr=Ze(s=>vn(s,xe),[xe]),qo=_e(()=>{let s=N,h={valid:s.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:s.filter(G=>G.status==="required_missing").length,issues:s.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:s.length},U=s.filter(G=>G.storageType==="async"),X=s.filter(G=>G.storageType==="mmkv"),Qe=s.filter(G=>G.storageType==="secure");return{summary:{valid:h.valid,missing:h.missing,issues:h.issues,total:h.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:X.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Qe.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);dr(()=>{i&&(i.current=N)},[N,i]),dr(()=>{let s,h=Ea(U=>{clearTimeout(s),s=setTimeout(()=>{qt()},100)});return()=>{clearTimeout(s),h()}},[qt]),dr(()=>{let s,h=pd(()=>{clearTimeout(s),s=setTimeout(Te,100)});return()=>{clearTimeout(s),h()}},[Te]),dr(()=>{let s,h=qn(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(s),h()}},[ar,re]);let Ut=_e(()=>{let s=N,h=s.filter(X=>!ze(X.key)),U=s.filter(X=>ze(X.key));return{totalCount:s.length,requiredCount:h.filter(X=>X.category==="required").length,missingCount:h.filter(X=>X.status==="required_missing").length,wrongValueCount:h.filter(X=>X.status==="required_wrong_value").length,wrongTypeCount:h.filter(X=>X.status==="required_wrong_type").length,presentRequiredCount:h.filter(X=>X.status==="required_present").length,optionalCount:h.filter(X=>X.category==="optional").length,mmkvCount:s.filter(X=>X.storageType==="mmkv").length,asyncCount:s.filter(X=>X.storageType==="async").length,secureCount:s.filter(X=>X.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let s=N.filter(V=>!ze(V.key));ye!=="all"&&(s=s.filter(V=>V.storageType===ye));let h=s.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=s.filter(V=>V.status==="required_missing").length,X=s.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Qe=0,G=0,Be=0,Vt=0;return se==="all"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_present"||V.status==="optional_present")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_present"||V.status==="optional_present")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_present"||V.status==="optional_present")).length,Vt=Qe+G+Be):se==="missing"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&V.status==="required_missing").length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&V.status==="required_missing").length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&V.status==="required_missing").length,Vt=Qe+G+Be):se==="issues"&&(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Vt=Qe+G+Be),{validCount:h,missingCount:U,issuesCount:X,asyncCount:Qe,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);dr(()=>{x?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[x,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((s,h)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[h.status]||999)}),[N]),Kn=_e(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),Le=_e(()=>{let s=ir;if(c&&c.size>0&&(s=s.filter(h=>c.has(h.storageType))),s=s.filter(h=>!Array.from(r).some(U=>h.key.includes(U))),a){let h=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(h))}switch(se){case"all":s=s.filter(h=>h.status==="required_present"||h.status==="optional_present");break;case"missing":s=s.filter(h=>h.status==="required_missing");break;case"issues":s=s.filter(h=>h.status==="required_wrong_type"||h.status==="required_wrong_value");break}if(ye!=="all"&&(s=s.filter(h=>h.storageType===ye)),f&&f.size>0){let h=s.filter(X=>f.has(X.key)),U=s.filter(X=>!f.has(X.key));s=[...h,...U]}return s},[ir,se,ye,r,a,re,c,f]),v=_e(()=>Le.slice(0,B),[Le,B]),k=_e(()=>Math.max(0,Le.length-B),[Le.length,B]),z=k>0,j=_e(()=>{let s=Le.filter(h=>!ze(h.key));return{totalCount:Le.length,requiredCount:s.filter(h=>h.category==="required").length,missingCount:s.filter(h=>h.status==="required_missing").length,wrongValueCount:s.filter(h=>h.status==="required_wrong_value").length,wrongTypeCount:s.filter(h=>h.status==="required_wrong_type").length,presentRequiredCount:s.filter(h=>h.status==="required_present").length,optionalCount:s.filter(h=>h.category==="optional").length,mmkvCount:Le.filter(h=>h.storageType==="mmkv").length,asyncCount:Le.filter(h=>h.storageType==="async").length,secureCount:Le.filter(h=>h.storageType==="secure").length,devToolsCount:Le.filter(h=>ze(h.key)).length}},[Le]),Ye=_e(()=>v.filter(s=>nr.has(tt(s))),[v,nr,tt]),Br=Ze(()=>{let s=new Set(v.map(tt));Bt(s)},[v,tt]),Vr=Ze(()=>{Bt(new Set)},[]),Ar=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Ai=Ar>=90?"OPTIMAL":Ar>=70?"WARNING":"CRITICAL",Di=Ar>=90?hr.success:Ar>=70?hr.warning:hr.error;if(ke)return q(l,{style:O.root,children:q(vc,{storageKey:ke,editBlockedReason:Rr(ke),eventCount:y?.[ke.key],onSave:s=>jt(ke,s),onViewHistory:g?()=>g(ke.key):void 0,onDeleteKey:s=>to(s,()=>D?.()),onHideKey:s=>{Er([s]),D?.()},isPinned:f?.has(ke.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Wo&&N.length===0)return Ee(l,{style:O.emptyState,children:[q(ia,{size:48,color:F.color.textTertiary}),q(u,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(eo)return Ee(l,{style:O.emptyState,children:[q(ia,{size:48,color:hr.error}),q(u,{style:[O.emptyTitle,{color:hr.error}],children:"Error loading storage"}),q(u,{style:O.emptySubtitle,children:eo.message})]});let Mi=Ee(vd,{children:[ye==="mmkv"&&xe.length===0&&Ee(l,{style:O.emptyMMKVState,children:[q(u,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),q(u,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),q(u,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
2
2
|
|
|
3
3
|
const storage = createMMKV();
|
|
4
|
-
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&Ce.length>0&&Ie(l,{style:O.instanceNavbar,children:[Ie(l,{style:O.instanceNavbarHeader,children:[q(c,{style:O.instanceNavbarLabel,children:"INSTANCES"}),Ce.length>Q&&q(Xn,{style:{transform:[{scale:.85}]}})]}),Ie(Pr,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||Ce.length===1)&&Ie(P,{onPress:()=>Wt(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ne.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[q(Fa,{size:12,color:re===null?L.color.text:L.color.textSecondary}),q(c,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),q(l,{style:O.instanceNavbarBadge,children:q(c,{style:O.instanceNavbarBadgeText,children:Ce.reduce((s,m)=>s+m.keyCount,0)})})]}),Ce.map((s,m)=>{let U=m>=Q;return Ie(P,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?Se(true):Wt(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?L.color.border:hr(s.id)+"40",backgroundColor:s.id===re?hr(s.id)+"20":L.color.surfaceElevated,opacity:U?.5:1}],children:[q(Fa,{size:12,color:s.id===re?hr(s.id):L.color.textSecondary}),q(c,{style:[O.instanceNavbarButtonText,s.id===re&&{color:hr(s.id),fontWeight:"700"}],children:s.id}),q(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:hr(s.id)+"30"}],children:q(c,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:hr(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),Ti=q(Pc,{copyValue:No,mmkvInstances:Ce.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ye,onClearComplete:xe,isSelectMode:$t,onToggleSelectMode:Wo,selectedCount:or.size}),Ii=$t?q(Uc,{selectedKeys:Je,mmkvInstances:Ce.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:_o,onHideKeys:Ir,onSelectAll:Br,onClearSelection:Vr,totalVisibleKeys:v.length}):null,Ei=z?Ie(P,{style:O.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ie(l,{style:O.limitBannerContent,children:[Ie(l,{style:O.limitBannerLeft,children:[q(ks,{size:16,color:L.color.accent}),q(c,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),q(Xn,{})]}),q(c,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,Bi=(()=>{let s=N.some(U=>!Pe(U.key)),m;return a||!s?(m=Ts({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(m={...m,message:"No keys match. Clear the search to see them."})):se==="missing"?m={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?m={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:m={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},q(xs,{...m,testID:"buoy-storage-keys-empty"})})(),Vi=q(Cs,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ie(l,{style:O.root,children:[_t>0?q(Ec,{onDone:()=>kr(0)},_t):null,Ie(Pr,{testID:"buoy-storage-scroll",ref:Ge,onScroll:s=>{wr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[q(l,{style:O.backgroundGrid}),q(cc,{stats:jt,tabStats:yt,healthPercentage:Rr,healthStatus:ki,healthColor:Ci,activeFilter:se,onFilterChange:je,activeStorageType:ye,onStorageTypeChange:rr,showStatus:!ee}),xi,ze.length>0?Ie(l,{style:O.keysSection,children:[Ie(l,{style:O.sectionHeader,children:[Ie(l,{style:O.sectionHeaderLeft,children:[Ie(c,{style:O.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),q(l,{style:O.countBadge,children:q(c,{style:O.countText,children:v.length})})]}),Ti]}),Ii,q(la,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:$t,selectedKeys:or,onSelectionChange:tt,eventCountByKey:u,onViewHistory:y,onHideKey:s=>Ir([s]),onToggleKey:$o,onDeleteKey:eo,editBlockedFor:Er,pinnedKeys:h,onTogglePin:b,onRowRef:ut,onOpenKey:E}),Ei]}):Bi,q(c,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Vi]})]})}var O=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...Jn,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...Jn,opacity:.006,backgroundColor:mr.info},techFooter:{fontSize:8,color:L.color.textTertiary,fontFamily:Fr,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:L.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:L.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:L.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:L.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:L.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:L.color.border},countText:{fontSize:11,fontWeight:"600",color:L.color.text,fontFamily:Fr},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:L.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:L.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:L.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:L.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:L.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:L.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Fr,color:L.color.accent,backgroundColor:L.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:L.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:L.color.surface,borderRadius:10,borderWidth:1,borderColor:L.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:L.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:L.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:L.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:L.color.textSecondary,fontFamily:Fr,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:L.color.text},instanceNavbarBadge:{backgroundColor:L.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:L.color.textSecondary,fontFamily:Fr},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:L.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:L.color.border},clearSearchText:{fontSize:13,color:L.color.text,fontWeight:"500"},limitBanner:{backgroundColor:L.color.surface,borderRadius:10,borderWidth:1,borderColor:L.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:L.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:L.color.textTertiary,fontSize:11}});import{jsx as td}from"react/jsx-runtime";function La({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:E,onCloseDetail:D}){return td(ed,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:E,onCloseDetail:D})}import{ProFeatureBanner as rd}from"@buoy-gg/shared-ui/web";B();import{useMemo as od}from"react";import{useEventStoreEvents as nd}from"@buoy-gg/shared-ui/web";B();import{BaseEventStore as ad}from"@buoy-gg/shared-ui/web";function Nr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function wo(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Wa(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=wo(e);return Nr(t.value)||Nr(t.prevValue)||Nr(r)||Nr(o)}var id=0;function ko(){return`se-${Date.now()}-${++id}`}var ld=class extends ad{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Ke.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:u}=wt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[u]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:u,initialScan:true},storageType:"mmkv",id:ko()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Gt(),zi(Kn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,u]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:u??void 0,initialScan:true},storageType:"async",id:ko()})}}}catch{}}async startCapturing(){mc()||await fc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=ba(e=>{let t={...e,storageType:"async",id:ko()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Ln(e=>{let t={...e,storageType:"mmkv",id:ko()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)Wa(o)||t.set(o.id,o);let r=e.map(o=>{let n=t.get(o.id);return!n||!Wa(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...wo(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=this.events.findIndex(n=>n.id===e.id);if(t===-1)return;let r=this.events[t],o=this.events.slice();o[t]={...r,...e,timestamp:r.timestamp,data:{...r.data,...e.data}},super.replaceEvents(o)}},Pt=new ld;function _a(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=od(()=>t==="all"?void 0:d=>d.filter(y=>y.storageType===t),[t]),{events:a,clearEvents:i,isActive:u}=nd(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:u}}B();pt();import{useState as Co,useCallback as st,useMemo as Ft,useEffect as $a,useRef as sd}from"react";import{formatRelativeTime as xo,macOSColors as To,night as Zt,parseValue as Io,devToolsStorageKeys as Na,GitBranch as cd,EventStepperFooter as dd,EventHistoryViewer as ud,copyToClipboard as yd,ProUpgradeModal as gd,monoFont as qa}from"@buoy-gg/shared-ui/web";import{useIsPro as pd}from"@buoy-gg/license/web";B();import{computeLineDiff as jy,DiffType as Uy,ABSENT_VALUE as fd,isAbsent as Gy}from"@buoy-gg/shared-ui/web/dataViewer";B();import{ThemedSplitView as md}from"@buoy-gg/shared-ui/web/dataViewer";B();import{diffThemes as hd,gitClassicTheme as Qy,devToolsDefaultTheme as Xy}from"@buoy-gg/shared-ui/web/dataViewer";B();import{night as Ha}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as bd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as ja}from"react/jsx-runtime";function vd({oldValue:e,newValue:t,scrollEnabled:r=true}){return ja(l,{style:r?Ua.container:Ua.containerInline,children:ja(bd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var Ua=pe.create({container:{flex:1,backgroundColor:Ha.color.bg},containerInline:{backgroundColor:Ha.color.bg}});B();function hn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}B();import{night as Ee,Lock as Sd,monoFont as wd}from"@buoy-gg/shared-ui/web";import{jsx as bn,jsxs as kd}from"react/jsx-runtime";var Cd={copy:{color:Ee.color.accent,backgroundColor:Ee.color.accentSoft,borderColor:Ee.color.accentBorderStrong,textColor:Ee.color.accent},jump:{color:Ee.color.warning,backgroundColor:Ee.color.warningSoft,borderColor:Ee.color.warning+"40",textColor:Ee.color.warning},undo:{color:Ee.color.info,backgroundColor:Ee.color.infoSoft,borderColor:Ee.color.info+"40",textColor:Ee.color.info}};function vn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=Cd[r],i=o||n;return kd(P,{disabled:i,onPress:e,style:[Eo.button,{backgroundColor:i?Ee.color.fill:a.backgroundColor,borderColor:i?Ee.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?bn(Sd,{size:10,color:Ee.color.textTertiary,style:Eo.lockIcon}):bn(l,{style:[Eo.dot,{backgroundColor:i?Ee.color.textTertiary:a.color}]}),bn(c,{style:[Eo.text,{color:i?Ee.color.textTertiary:a.textColor}],children:t})]})}var Eo=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Ee.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:wd,height:12}});B();pt();Gt();import{isDevToolsStorageKey as xd}from"@buoy-gg/shared-ui/web";function Ot(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function Sn(e){let{action:t,data:r}=e;if(Ot(r?.prevValue)||Ot(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await Mr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function wn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let u=i.data;if(Ot(u?.value)||Ot(u?.prevValue)||Ot(u?.pairs)||Ot(u?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)Id(e[i],r);let o=new Set;for(let i of e)Td(i,o);let n=[],a=[];for(let i of o){if(xd(i))continue;let u=r.get(i);u==null?a.push(i):n.push([i,u])}a.length>0&&await lr(a),n.length>0&&await Mr(n)}function Td(e,t){let{data:r}=e;if(r){if(r.key&&t.add(r.key),r.keys)for(let o of r.keys)t.add(o);if(r.pairs)for(let[o]of r.pairs)t.add(o);if(r.prevPairs)for(let[o]of r.prevPairs)t.add(o)}}function Id(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),u={...a,...i};t.set(o.key,JSON.stringify(u))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let u=JSON.parse(i),d=JSON.parse(a),y={...u,...d};t.set(n,JSON.stringify(y))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function kn(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ot(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ot(r.prevPairs);default:return false}}import{Fragment as Ed,jsx as qe,jsxs as Ga}from"react/jsx-runtime";var br=-1,Bo={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Vo(e){switch(e){case"setItem":case"multiSet":return To.semantic.success;case"removeItem":case"multiRemove":case"clear":return To.semantic.error;case"mergeItem":case"multiMerge":return To.semantic.info;default:return To.text.muted}}function Ja(e){let t=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),n=String(e.getMilliseconds()).padStart(3,"0");return`${t}:${r}:${o}.${n}`}var Bd={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},Vd=[];function Cn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=pd(),[a,i]=Co(false),[u,d]=Co("split"),[y,g]=Co(Math.max(br,t-1)),[p,f]=Co(t),x=sd(false),h=Ft(()=>e.events.sort((ae,ut)=>ae.timestamp.getTime()-ut.timestamp.getTime()),[e.events]),b=h.length;$a(()=>{if(x.current)return;(async()=>{try{let ae=await oe.getItem(Na.storage.diffViewerMode());(ae==="split"||ae==="tree")&&d(ae),x.current=true}catch{}})()},[]),$a(()=>{let ae=Math.min(b-1,Math.max(0,t)),ut=Math.max(br,Math.min(ae-1,t-1));g(ut),f(ae)},[t,b]);let S=st(async ae=>{d(ae);try{await oe.setItem(Na.storage.diffViewerMode(),ae)}catch{}},[]),w=h[t],T=w?.action,I=y===br,E=I?void 0:h[Math.max(0,Math.min(b-1,y))],D=h[Math.max(0,Math.min(b-1,p))],C=Ft(()=>{let ae=D?.data;return ae?.initialScan?"scanned":ae?.prevValue===null||ae?.prevValue===void 0?"absent":"prior"},[D]),V=Ft(()=>C==="absent"?fd:C==="scanned"?Io(D?.data?.value):Io(D?.data?.prevValue),[C,D]),Q=Ft(()=>I?{index:br,label:Bo[C].label,timestamp:Bo[C].timestamp,relativeTime:Bo[C].relativeTime,badge:qe(l,{style:[er.actionBadgeSmall,{backgroundColor:`${Zt.color.textTertiary}20`}],children:qe(c,{style:[er.actionTextSmall,{color:Zt.color.textTertiary}],children:Bo[C].badge})})}:{index:y,label:`#${y+1} / ${b}`,timestamp:E?Ja(E.timestamp):"",relativeTime:E?xo(E.timestamp):"",badge:E?qe(l,{style:[er.actionBadgeSmall,{backgroundColor:`${Vo(E.action)}20`}],children:qe(c,{style:[er.actionTextSmall,{color:Vo(E.action)}],children:hn(E.action)})}):void 0},[y,E,b,I,C]),ve=Ft(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?Ja(D.timestamp):"",relativeTime:D?xo(D.timestamp):"",badge:D?qe(l,{style:[er.actionBadgeSmall,{backgroundColor:`${Vo(D.action)}20`}],children:qe(c,{style:[er.actionTextSmall,{color:Vo(D.action)}],children:hn(D.action)})}):void 0}),[p,D,b]),Se=Ft(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),H=st(()=>{y>br&&g(y-1)},[y]),ue=st(()=>{y<p-1&&g(y+1)},[y,p]),ee=st(()=>{p>y+1&&f(p-1)},[p,y]),se=st(()=>{p<b-1&&f(p+1)},[p,b]),je=Ft(()=>I?V:Io(E?.data?.value??null),[I,V,E]),Ue=Ft(()=>Io(D?.data?.value),[D]),vt=st(()=>u==="split"?qe(md,{oldValue:je,newValue:Ue,differences:Vd,theme:hd.devToolsDefault,options:Bd,showThemeName:false,scrollEnabled:false}):qe(vd,{oldValue:je,newValue:Ue,scrollEnabled:false}),[je,Ue,u]),Et=st(()=>{r(Math.max(0,t-1))},[t,r]),ye=st(()=>{r(Math.min(b-1,t+1))},[t,b,r]),rr=st(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await Sn(w)}catch{}},[w,n]),re=st(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ae=h.filter(_t=>_t.storageType!=="mmkv"),ut=ae.findIndex(_t=>_t.timestamp.getTime()===w.timestamp.getTime());if(ut!==-1)try{await wn(ae,ut)}catch{}},[w,h,n]),Wt=st(async()=>{if(!w)return;let ae={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await yd(ae)},[w]),Ge=w?.storageType!=="mmkv",wr=Ge&&w&&kn(w);return Ga(Ed,{children:[Ge&&Ga(l,{style:er.actionButtonsContainer,children:[qe(vn,{type:"undo",text:"UNDO",onPress:rr,disabled:!wr,locked:!n}),qe(vn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),qe(vn,{type:"copy",text:"COPY",onPress:Wt})]}),qe(ud,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:cd,diffModeTabs:Se,activeDiffMode:u,onDiffModeChange:S,renderDiffContent:vt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:H,onLeftNext:ue,onRightPrevious:ee,onRightNext:se,canLeftPrevious:y>br,canLeftNext:y<p-1,canRightPrevious:p>y+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:xo(w?.timestamp),onFooterPrevious:Et,onFooterNext:ye}),qe(gd,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function xn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,u)=>i.timestamp.getTime()-u.timestamp.getTime()),a=n.length;return qe(dd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:xo(n[t]?.timestamp),applySafeAreaInset:o})}var er=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:Zt.color.surface,borderBottomWidth:1,borderBottomColor:Zt.color.border},valueBox:{backgroundColor:Zt.color.bg,borderRadius:6,borderWidth:1,borderColor:Zt.color.border,padding:8},valueText:{fontSize:12,color:Zt.color.text,fontFamily:qa,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:qa}});B();import{Filter as Ya,DynamicFilterView as Rd,Database as Ad,HardDrive as Dd,Shield as Md,macOSColors as xt,night as Tt}from"@buoy-gg/shared-ui/web";import{jsx as Lt,jsxs as vr}from"react/jsx-runtime";function zd({ignoredPatterns:e,onTogglePattern:t,onAddPattern:r,availableKeys:o=[],enabledStorageTypes:n,onToggleStorageType:a}){let i={addFilterSection:{enabled:true,placeholder:"Enter key pattern to hide...",title:"KEY FILTERS",icon:Ya},availableItemsSection:{enabled:true,title:"AVAILABLE EVENT KEYS",emptyMessage:"No storage event keys available. Events will appear here once captured.",items:o},howItWorksSection:{enabled:true,title:"HOW EVENT FILTERS WORK",description:"Patterns hide matching storage keys from the event list. Storage type toggles control which storage backends are monitored.",examples:["\u2022 react_buoy \u2192 hides keys containing react_buoy","\u2022 @temp \u2192 hides @temp_user, @temp_data","\u2022 redux \u2192 hides redux-persist:root",`\u2022 ${ne.asyncFull}: show or hide captured events`,`\u2022 ${ne.mmkv}: show or hide captured events`],icon:Ya},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return vr(l,{style:Ze.container,children:[vr(l,{style:Ze.storageTypeSection,children:[Lt(c,{style:Ze.sectionTitle,children:"STORAGE TYPES"}),vr(l,{style:Ze.storageTypeButtons,children:[vr(P,{style:[Ze.storageTypeButton,n.has("async")&&Ze.storageTypeButtonActive,{borderColor:xt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Lt(Ad,{size:16,color:n.has("async")?xt.semantic.warning:Tt.color.textTertiary}),Lt(c,{style:[Ze.storageTypeButtonText,n.has("async")&&{color:xt.semantic.warning}],children:ne.asyncFull})]}),vr(P,{style:[Ze.storageTypeButton,n.has("mmkv")&&Ze.storageTypeButtonActive,{borderColor:xt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Lt(Dd,{size:16,color:n.has("mmkv")?xt.semantic.info:Tt.color.textTertiary}),Lt(c,{style:[Ze.storageTypeButtonText,n.has("mmkv")&&{color:xt.semantic.info}],children:ne.mmkv})]}),ne.hasSecure&&vr(P,{style:[Ze.storageTypeButton,n.has("secure")&&Ze.storageTypeButtonActive,{borderColor:xt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Lt(Md,{size:16,color:n.has("secure")?xt.semantic.success:Tt.color.textTertiary}),Lt(c,{style:[Ze.storageTypeButtonText,n.has("secure")&&{color:xt.semantic.success}],children:"Secure Storage"})]})]})]}),Lt(Rd,{...i})]})}var Ze=pe.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:Tt.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:Tt.color.textSecondary,letterSpacing:.8,marginBottom:12},storageTypeButtons:{flexDirection:"row",gap:8},storageTypeButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:10,paddingHorizontal:12,backgroundColor:Tt.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:Tt.color.border},storageTypeButtonActive:{backgroundColor:Tt.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:Tt.color.textTertiary}});B();import{memo as Kd}from"react";import{RelativeTime as Pd,macOSColors as qr,parseValue as Fd,CompactRow as Od}from"@buoy-gg/shared-ui/web";import{jsx as Qa}from"react/jsx-runtime";function Ld(e){let t=Fd(e);return t===null?"null":t===void 0?"undefined":Array.isArray(t)?"array":typeof t=="boolean"?"boolean":typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="object"?"object":"undefined"}function Wd(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return qr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return qr.semantic.error;case"mergeItem":case"multiMerge":return qr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return qr.semantic.warning;default:return qr.text.muted}}function _d(e,t){return`${Array.from(e).map(r=>r==="async"?ne.async:ne.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Tn=Kd(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=Wd(e.lastAction),i=hn(e.lastAction),u=e.totalOperations??1;return Qa(Od,{statusDotColor:a,statusLabel:"Storage",statusSublabel:_d(e.storageTypes,u),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:Qa(Pd,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as $d}from"@buoy-gg/license/web";import{Fragment as Xa,jsx as M,jsxs as ct}from"react/jsx-runtime";var gg=vs["storage.events"].free,In={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},Nd={storage:In,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},qd={storage:In,parse:e=>e==="true",serialize:e=>e.toString()},Za={storage:In,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},Hd={...Za,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function En({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:u,onRefresh:d,onEventSelect:y}){let g=$d(),p=bs("storage.events"),[f,x]=co(sr.storage.activeTab(),"browser",Nd);Qo(()=>{u?.(f)},[f,u]);let[h,b]=rt(""),[S,w]=rt(null),[T,I]=rt(false),[E,D]=co(sr.storage.isMonitoring(),true,qd),{events:C,clearEvents:V,isCapturing:Q}=_a({enabled:E}),[ve,Se]=rt(null),[H,ue]=rt(null),[ee,se]=rt(null),[je,Ue]=rt(0),[vt,Et]=rt(false),[ye,rr]=co(sr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),Hd),[re,Wt]=rt("all"),[Ge,wr]=rt(new Set(["async","mmkv","secure"])),[ae,ut]=co(sr.storage.pinnedKeys(),new Set,Za),_t=qn(null),kr=E&&Q,[$t,Cr]=rt("bottomSheet"),or=Ae(v=>{Cr(v)},[]),Bt=Ae(()=>{D(v=>!v)},[]),Ce=Ae(()=>{V(),Se(null),Ue(0)},[V]),Gr=Ae(v=>{ue(v),se(null)},[]),Jr=Ae(()=>{ue(null),se(null)},[]),Yr=Ae(v=>{rr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Nt=Ae(v=>{rr(k=>new Set([...k,v]))},[]),Ko=Ae(v=>{ut(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),xr=Ae(()=>{Et(!vt)},[vt]),Po=Ae(v=>{wr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Tr=qn([]),nr=Ae(()=>{let v=Tr.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=so(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=so(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=so(z.value),k),{})}},[]),Fo=Ae(async()=>{Te.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await lo()}catch{Te.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await Gi()}catch{Te.alert("Error","Failed to clear all storage")}}}])},[]),qt=v=>{let k=cs(v);return k===null?"null":k===void 0?"undefined":Array.isArray(k)?"array":typeof k=="boolean"?"boolean":typeof k=="number"?"number":typeof k=="string"?"string":typeof k=="object"?"object":"undefined"},[Qr,Oo]=rt([]);Qo(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();Oo([...v].sort())}catch{}})()},[e]);let Xr=lt(()=>{let v=new Set(Qr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Qr]),N=lt(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Ge.has(k.storageType)||Array.from(ye).some(Je=>z.includes(Je)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=qt(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:qt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ye,Ge]),we=lt(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),Lo=lt(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),Zr=lt(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),xe=lt(()=>H&&N.find(v=>v.key===H)||null,[H,N]);Qo(()=>{if(!y)return;let v=we||(ee!==null?xe:null),k=we?je:ee;if(!v||k==null)return;let z=[...v.events].sort((Br,Vr)=>Br.timestamp.getTime()-Vr.timestamp.getTime()),j=z[k],Je=z[k-1];j&&y(j),Je&&y(Je)},[y,we,je,xe,ee]);let et=lt(()=>C.filter(v=>{if(!v.data?.key||!Ge.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[C,ye,Ge]),Wo=lt(()=>ga(et),[et]),tt=lt(()=>re==="all"?et:et.filter(v=>v.storageType===re),[et,re]),_o=Ae(()=>tt.map(v=>({key:v.data?.key,action:v.action,value:so(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[tt]),Ir=lt(()=>tt.slice(0,p),[tt,p]),Ht=lt(()=>Math.max(0,tt.length-p),[tt.length,p]),$o=.8,eo=Ae(v=>v.id,[]),Er=Ae(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Je)=>j.timestamp.getTime()-Je.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Ue(z>=0?z:0)},[N]),No=Ae(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:qt(v.data?.value)};return M(Tn,{data:k,onPress:()=>Er(v),testID:`buoy-storage-event-${v.id}`})},[Er]);if(!e)return null;let jt=n?sr.modal.root():sr.storage.modal(),yt=()=>{if(vt)return M(zd,{ignoredPatterns:ye,onTogglePattern:Yr,onAddPattern:Nt,availableKeys:Xr,enabledStorageTypes:Ge,onToggleStorageType:Po});if(f==="browser"){if(H&&xe){if(ee!==null)return M(l,{style:he.contentWrapper,children:M(Cn,{conversation:xe,selectedEventIndex:ee,onEventIndexChange:se,disableInternalFooter:true})});let k=[...xe.events].sort((j,Je)=>j.timestamp.getTime()-Je.timestamp.getTime()),z=[...k].reverse();return M(Xo,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Je=k.findIndex(Vr=>Vr.timestamp.getTime()===j.timestamp.getTime()),Br={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Tn,{data:Br,onPress:()=>se(Je>=0?Je:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(La,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Yr,onAddPattern:Nt,searchQuery:h,storageDataRef:Tr,eventCountByKey:Lo,lastWriteByKey:Zr,onViewHistory:Gr,enabledStorageTypes:Ge,pinnedKeys:ae,onTogglePin:Ko,applySafeAreaInset:$t==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:Wt,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(we)return M(l,{style:he.contentWrapper,children:M(Cn,{conversation:we,selectedEventIndex:je,onEventIndexChange:Ue,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(sn,{active:re,onChange:Wt,counts:Wo})});if(tt.length===0){let k=re!=="all";return ct(l,{style:he.flexFill,children:[v,M(us,{testID:"buoy-storage-events-empty",...kr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return ct(l,{style:he.flexFill,children:[v,M(Xo,{testID:"buoy-storage-events-list",style:he.flexFill,data:Ir,renderItem:No,keyExtractor:eo,onEndReachedThreshold:$o,contentContainerStyle:he.listContent,ListFooterComponent:Ht>0?M(l,{style:he.lockedBannerContainer,children:M(rd,{featureName:`${Ht} event${Ht>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ar=we&&we.events.length>1?M(xn,{conversation:we,selectedEventIndex:je,onEventIndexChange:Ue,applySafeAreaInset:$t==="bottomSheet"}):xe&&ee!==null&&xe.events.length>1?M(xn,{conversation:xe,selectedEventIndex:ee,onEventIndexChange:se,applySafeAreaInset:$t==="bottomSheet"}):null,Rn=vt?()=>Et(false):ee!==null?()=>se(null):H?Jr:we?()=>{Se(null),Ue(0)}:r,ze=vt?ct(De,{children:[M(De.Navigation,{onBack:()=>Et(false)}),M(De.Content,{title:"Filters"})]}):H?ct(De,{children:[M(De.Navigation,{onBack:ee!==null?()=>se(null):Jr}),M(De.Content,{title:`${H} History`,centered:true})]}):we?ct(De,{children:[M(De.Navigation,{onBack:()=>{Se(null),Ue(0)}}),M(De.Content,{title:we.key})]}):S?ct(De,{children:[M(De.Navigation,{onBack:()=>w(null)}),M(De.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):ct(De,{children:[r&&M(De.Navigation,{onBack:r}),M(De.Content,{title:"",children:T?M(fs,{value:h,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(ss,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${tt.length>0?` (${tt.length})`:""}`}],activeTab:f,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),ue(null),se(null),Se(null),Ue(0),w(null)}})}),ct(De.Actions,{children:[d&&!T?M(P,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(gs,{size:14,color:Le.color.textSecondary})}):null,M(P,{onPress:xr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Ge.size<3)&&he.activeFilterButton],children:M(ys,{size:14,color:ye.size>0||Ge.size<3?Le.color.accent:Le.color.textSecondary})}),f==="browser"&&!T&&ct(Xa,{children:[M(P,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(ps,{size:14,color:Le.color.textSecondary})}),M(Un,{value:nr,disabled:Tr.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),f==="events"&&ct(Xa,{children:[M(Un,{value:_o,disabled:tt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(ms,{isEnabled:kr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(hs,{onPress:Ce,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(Gn,{children:ct(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ss,children:ze}),yt(),ar]})}):M(Gn,{children:M(ls,{visible:e,onClose:t,onBack:Rn,onMinimize:o,persistenceKey:jt,header:{showToggleButton:true,customContent:ze},onModeChange:or,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ar,footerHeight:ar?68:0,disableScrollWrapper:true,children:yt()})})}function jd(e={}){return M(En,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:ds.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:Le.color.buttonSurface,borderWidth:1,borderColor:Le.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:Le.color.accentSoft,borderColor:Le.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:Le.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:uo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:Le.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:uo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:Le.color.text,fontSize:12,fontWeight:"600",fontFamily:uo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:Le.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:Le.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:Le.color.accent,fontFamily:uo,letterSpacing:.5},contentWrapper:{flex:1}});B();pt();Gt();import{approxJsonSize as ei,isDevToolsStorageKey as Hr,isOverWireBudget as ti,isJsonSerializable as Ud}from"@buoy-gg/shared-ui/web";var Ro=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),Gd=16*1024,Bn=1.25*1024*1024,ri=8*1024*1024;function Vn(e){return e===void 0?e:ti(e,Gd)?Ro:e}function Ao(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=wo(e),i=t(a.pairs),u=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&u===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:u}:{}}}}function oi(e){return e===void 0||!ti(e,ri)?e:Ud(e)?{__buoyTruncated:true,note:`Exceeds the ${ri/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Ro}var ni=new WeakMap,ai=new WeakMap;function Jd(e){let t=ni.get(e);if(t)return t;let r;try{let o=Ao(e,Vn);r={event:o,bytes:ei(o,Bn).bytes}}catch{r={event:Ao(e,()=>Ro),bytes:1024}}return ni.set(e,r),r}function Yd(e){let t=ai.get(e);if(t)return t;let r=Ao(e,n=>n===void 0?void 0:Ro),o={event:r,bytes:ei(r,Bn).bytes};return ai.set(e,o),o}function Qd(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=Jd(e[o]);if(r+n.bytes<=Bn)t[o]=n.event,r+=n.bytes;else{let a=Yd(e[o]);t[o]=a.event,r+=a.bytes}}return t}function ii(e){let t=Ke.get(e);if(!t)throw new Error(`No MMKV instance registered as "${e}"`);if(t.instance?.isReadOnly)throw new Error(`MMKV instance "${e}" is registered read-only`);return t.instance}var li=[];function Xd(e){li=e}var Zd={version:3,getSnapshot:()=>Qd(Pt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&Hr(t))})),subscribe:e=>Pt.subscribeToEvents(e),actions:{clearEvents:()=>{Pt.clearEvents()},getRequiredKeys:()=>li,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Pt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=Ao(r,oi);return{found:true,id:t,event:o}},clearAppStorage:()=>lo(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Pt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!kn(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await Sn(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Pt.getEvents().filter(u=>u.storageType!=="mmkv").slice().reverse(),n=o.find(u=>u.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(u=>u.data?.key===n.data?.key),i=a.findIndex(u=>u.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await wn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!Hr(e)),"async.multiGet":async e=>(await ao(e.keys)).filter(([t])=>!Hr(t)),"async.getItem":e=>{let{key:t}=e;return Hr(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>lr(e.keys),"async.multiSet":e=>Mr(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Ke.getAll().map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!Hr(a)).map(a=>{let{value:i,type:u}=wt(t,a);return{key:a,value:Vn(i),valueType:u}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r)return{found:false,reason:"missing instanceId/key"};let o=Ke.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=wt(o.instance,r);return{found:true,instanceId:t,key:r,value:oi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;ii(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=ii(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=te.getModule();return Promise.all(te.getAll().map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=te.getModule(),t=te.getAll(),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:Vn(i)})}return r},"secure.get":e=>{let{key:t}=e,r=te.getAll().find(n=>n.key===t),o=te.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return te.setValue(t,r)},"secure.delete":e=>te.deleteValue(e.key)}};import{jsx as eu}from"react/jsx-runtime";var si=cl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>eu(ll,{size:e}),component:En,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),tu=sl(si,e=>(Xd(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));B();import{HardDrive as ru,CyberpunkSectionButton as ou}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as nu}from"@buoy-gg/shared-ui/web";import{jsx as au}from"react/jsx-runtime";function iu({onPress:e}){let{storageKeys:t}=un(),r=t.filter(n=>!nu(n.key)).length,o=r;return au(ou,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:ru,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}B();import{AlertCircle as ci,CheckCircle2 as lu,Eye as di,XCircle as ui,HardDrive as yi,Database as gi,Shield as su,gameUIColors as Do,macOSColors as ie,night as be,monoFont as Mo}from"@buoy-gg/shared-ui/web";import{DataViewer as cu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Re}from"react/jsx-runtime";var pi=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function zo(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return pi[t%pi.length]}var du=e=>{switch(e){case"required_present":return{icon:lu,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:ci,color:ie.semantic.error,bgColor:ie.semantic.errorBackground,borderColor:ie.semantic.error+"50",label:"MISSING",labelColor:ie.semantic.error};case"required_wrong_value":return{icon:ui,color:ie.semantic.warning,bgColor:ie.semantic.warningBackground,borderColor:ie.semantic.warning+"50",label:"WRONG S",labelColor:ie.semantic.warning};case"required_wrong_type":return{icon:ui,color:ie.semantic.info,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.info+"50",label:"WRONG TYPE",labelColor:ie.semantic.info};case"optional_present":return{icon:di,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},uu=e=>{switch(e){case"mmkv":return yi;case"async":return gi;case"secure":return su;default:return gi}};function yu({storageKey:e,isExpanded:t,onToggle:r}){let o=du(e.status),n=o.icon,a=uu(e.storageType),i=e.value!==void 0&&e.value!==null,u=e.expectedValue!==void 0,d=e.expectedType!==void 0,y=ra(e.storageType),g=tn(e.storageType);return Re(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Re(P,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Re(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Re(l,{style:K.cardHeaderInfo,children:[Y(c,{style:K.storageKeyText,children:e.key}),e.description?Y(c,{style:K.descriptionText,children:e.description}):null,Re(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(c,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Re(l,{style:[K.storageBadge,{backgroundColor:`${y}15`}],children:[Y(a,{size:10,color:y}),Y(c,{style:[K.storageText,{color:y}],children:g})]}),e.storageType==="mmkv"&&e.instanceId&&Re(l,{style:[K.instanceBadge,{backgroundColor:zo(e.instanceId)+"20",borderColor:zo(e.instanceId)+"40"}],children:[Y(yi,{size:9,color:zo(e.instanceId)}),Y(c,{style:[K.instanceText,{color:zo(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(c,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():At(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(di,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Re(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let p=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof p=="string"||typeof p=="number"||typeof p=="boolean"?Re(l,{style:K.simpleValueContainer,children:[Y(c,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(c,{style:K.simpleValueContent,selectable:true,children:String(p)})}),Re(c,{style:K.valueTypeText,children:["Type: ",At(e.value)]})]}):Y(cu,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),u&&Re(l,{style:K.valueContainer,children:[Y(c,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(c,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Re(l,{style:K.valueContainer,children:[Y(c,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(c,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Re(c,{style:K.typeHelperText,children:["Current type: ",At(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Re(c,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Re(l,{style:K.cardBody,children:[Re(l,{style:K.emptyValueContainer,children:[Y(ci,{size:16,color:ie.semantic.warning}),Y(c,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),u&&Re(l,{style:K.valueContainer,children:[Y(c,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(c,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:Mo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Do.success,fontSize:12,fontFamily:Mo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:Mo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:Mo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Do.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Do.warning+"1A"},emptyValueText:{color:Do.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});B();import{AlertCircle as gu,CheckCircle2 as pu,XCircle as fi,Eye as fu,Database as mi,Shield as mu}from"@buoy-gg/shared-ui/web";import{night as bt}from"@buoy-gg/shared-ui/web";import{jsx as ke,jsxs as He}from"react/jsx-runtime";var hu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:pu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:gu,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:fi,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:fi,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:fu,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],bu=[{key:"mmkv",label:ne.mmkv,description:ne.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:mi},{key:"async",label:ne.asyncFull,description:ne.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:mi},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:mu}];function vu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:u,asyncCount:d,secureCount:y}=e;return t===0?He(l,{style:Z.statsContainer,children:[ke(c,{style:Z.sectionTitle,children:"STORAGE BREAKDOWN"}),ke(l,{style:Z.emptyState,children:ke(c,{style:Z.emptyStateText,children:"No storage keys detected"})})]}):He(l,{style:Z.statsContainer,children:[He(l,{style:Z.breakdownSection,children:[ke(c,{style:Z.sectionTitle,children:"KEY STATUS BREAKDOWN"}),ke(l,{style:Z.breakdownList,children:hu.map(g=>{let p=0,f=false;switch(g.key){case"valid":p=a,f=p>0;break;case"missing":p=r,f=p>0;break;case"wrongValue":p=o,f=p>0;break;case"wrongType":p=n,f=p>0;break;case"optional":p=i,f=p>0;break}if(!f)return null;let x=t>0?(p/t*100).toFixed(1):"0",h=g.icon;return ke(l,{style:Z.breakdownItem,children:He(l,{style:Z.breakdownItemRow,children:[He(l,{style:Z.breakdownItemLeft,children:[ke(l,{style:[Z.breakdownIcon,{backgroundColor:g.bgColor}],children:ke(h,{size:14,color:g.color})}),He(l,{style:Z.breakdownItemInfo,children:[ke(c,{style:Z.breakdownItemLabel,children:g.label}),ke(c,{style:Z.breakdownItemDesc,children:g.description})]})]}),He(l,{style:Z.breakdownItemRight,children:[ke(c,{style:[Z.breakdownCount,{color:g.textColor}],children:p}),He(c,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},g.key)})})]}),(u>0||d>0||y>0)&&He(l,{style:Z.breakdownSection,children:[ke(c,{style:Z.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),ke(l,{style:Z.breakdownList,children:bu.map(g=>{let p=0,f=false;switch(g.key){case"mmkv":p=u,f=p>0;break;case"async":p=d,f=p>0;break;case"secure":p=y,f=p>0;break}if(!f)return null;let x=t>0?(p/t*100).toFixed(1):"0",h=g.icon,b=ra(g.key);return ke(l,{style:Z.breakdownItem,children:He(l,{style:Z.breakdownItemRow,children:[He(l,{style:Z.breakdownItemLeft,children:[ke(l,{style:[Z.breakdownIcon,{backgroundColor:`${b}15`}],children:ke(h,{size:14,color:b})}),He(l,{style:Z.breakdownItemInfo,children:[ke(c,{style:Z.breakdownItemLabel,children:g.label}),ke(c,{style:Z.breakdownItemDesc,children:g.description})]})]}),He(l,{style:Z.breakdownItemRight,children:[ke(c,{style:[Z.breakdownCount,{color:b}],children:p}),He(c,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},g.key)})})]})]})}var Z=pe.create({statsContainer:{marginBottom:24,backgroundColor:bt.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:bt.color.border},sectionTitle:{color:bt.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:bt.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:bt.color.border},breakdownItemRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breakdownItemLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1,minWidth:0},breakdownIcon:{padding:8,borderRadius:8},breakdownItemInfo:{flex:1,minWidth:0},breakdownItemLabel:{color:bt.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:bt.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:bt.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:bt.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:bt.color.textTertiary,fontSize:11,textAlign:"center"}});B();import{Database as Su,CyberpunkSectionButton as wu}from"@buoy-gg/shared-ui/web";import{jsx as ku}from"react/jsx-runtime";function Cu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return ku(wu,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Su,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}B();import{macOSColors as jr}from"@buoy-gg/shared-ui/web";var xu=["SET","GET","MERGE","DELETE","CLEAR"],Tu={SET:jr.semantic.info,GET:jr.text.muted,MERGE:jr.semantic.debug,DELETE:jr.semantic.error,CLEAR:jr.semantic.warning};function Iu(e){return Tu[e]}function Eu(e){let t=e.action;return t==="clear"||t==="clearAll"?"CLEAR":t.startsWith("get.")?"GET":t==="removeItem"||t==="multiRemove"||t==="delete"?"DELETE":t==="mergeItem"||t==="multiMerge"?"MERGE":"SET"}function Bu(e){return!!e.data?.initialScan}B();import{useState as Vu}from"react";import{macOSColors as tr,night as de,monoFont as hi}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as at}from"react/jsx-runtime";function Ru({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=Vu(false),{instances:a,instanceCount:i,refresh:u}=pn(false),d=a.find(g=>g.id===e),y=g=>{t(g),n(false)};return cn()?i===0?le(l,{style:$.container,children:at(l,{style:$.emptyState,children:[le(c,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),le(c,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(P,{style:$.refreshButton,onPress:u,activeOpacity:.7,children:le(c,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):at(l,{style:$.container,children:[at(P,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:$.selectorContent,children:d?le(bi,{instance:d,isSelected:true}):le(c,{style:$.placeholderText,children:"Select MMKV Instance"})}),le(c,{style:$.dropdownArrow,children:"\u25BC"})]}),le(jn,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(P,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:at(l,{style:$.dropdownContainer,children:[at(l,{style:$.dropdownHeader,children:[at(c,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(P,{style:$.headerRefreshButton,onPress:u,activeOpacity:.7,children:le(c,{style:$.headerRefreshText,children:"\u21BB"})})]}),le(Pr,{style:$.dropdownList,children:a.map(g=>le(P,{style:[$.dropdownItem,g.id===e&&$.dropdownItemSelected],onPress:()=>y(g.id),activeOpacity:.7,children:le(bi,{instance:g,isSelected:g.id===e})},g.id))})]})})})]}):le(l,{style:$.container,children:at(l,{style:$.unavailableState,children:[at(c,{style:$.unavailableTitle,children:[ne.mmkv," Not Available"]}),le(c,{style:$.unavailableDescription,children:pa()})]})})}function bi({instance:e,isSelected:t}){return at(l,{style:$.instanceRow,children:[at(l,{style:$.instanceLeft,children:[le(c,{style:[$.instanceId,t&&$.instanceIdSelected],numberOfLines:1,children:e.id}),at(l,{style:$.instanceBadges,children:[e.encrypted&&le(l,{style:[$.badge,$.badgeEncrypted],children:le(c,{style:$.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(l,{style:[$.badge,$.badgeReadOnly],children:le(c,{style:$.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),at(l,{style:$.instanceRight,children:[le(c,{style:$.keyCount,children:e.keyCount}),le(c,{style:$.keyCountLabel,children:"keys"})]})]})}var $=pe.create({container:{marginBottom:12},unavailableState:{backgroundColor:tr.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:tr.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:tr.semantic.warning},unavailableDescription:{fontSize:12,color:de.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:de.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:de.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:de.color.text},emptyStateDescription:{fontSize:12,color:de.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:de.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:de.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:de.color.accent},selectorButton:{backgroundColor:de.color.surface,borderRadius:12,borderWidth:1,borderColor:de.color.border,padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},selectorContent:{flex:1},placeholderText:{fontSize:13,color:de.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:de.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:de.color.surface,borderRadius:16,borderWidth:1,borderColor:de.color.border,width:"100%",maxWidth:500,maxHeight:"70%",shadowColor:"#000000",shadowOpacity:.2,shadowRadius:20,shadowOffset:{width:0,height:10},overflow:"hidden"},dropdownHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:16,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:de.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:de.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownItemSelected:{backgroundColor:de.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:de.color.text,fontFamily:hi},instanceIdSelected:{fontWeight:"600",color:de.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:tr.semantic.success+"15",borderColor:tr.semantic.success+"40"},badgeReadOnly:{backgroundColor:tr.semantic.warning+"15",borderColor:tr.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:de.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:de.color.text,fontFamily:hi},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});B();import{macOSColors as dt,night as It,monoFont as Au}from"@buoy-gg/shared-ui/web";import{jsx as Me,jsxs as Sr}from"react/jsx-runtime";function Du({instanceId:e}){let t=Ta(e);return t?Me(l,{style:ge.container,children:Sr(l,{style:ge.panel,children:[Me(l,{style:ge.header,children:Me(c,{style:ge.headerTitle,children:"Instance Details"})}),Sr(l,{style:ge.infoGrid,children:[Me(Ur,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Me(Ur,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Me(Ur,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?dt.semantic.success:It.color.textTertiary}),Me(Ur,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?dt.semantic.warning:It.color.textTertiary}),t.size!==void 0&&Me(Ur,{label:"Size",value:Mu(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&Sr(l,{style:ge.notice,children:[Me(c,{style:ge.noticeIcon,children:"\u{1F512}"}),Me(c,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&Sr(l,{style:[ge.notice,ge.noticeWarning],children:[Me(c,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Me(c,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Me(l,{style:ge.container,children:Me(l,{style:ge.errorState,children:Sr(c,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Ur({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return Sr(l,{style:ge.infoItem,children:[Me(c,{style:ge.infoLabel,children:e}),Me(c,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function Mu(e){if(e===0)return"0 Bytes";let t=1024,r=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,o)).toFixed(2))} ${r[o]}`}var ge=pe.create({container:{marginBottom:12},errorState:{backgroundColor:dt.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:dt.semantic.error+"40"},errorText:{fontSize:12,color:dt.semantic.error,textAlign:"center"},panel:{backgroundColor:It.color.surface,borderRadius:12,borderWidth:1,borderColor:It.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:It.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:It.color.text,textTransform:"uppercase",letterSpacing:.5},infoGrid:{padding:12,gap:10},infoItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4},infoLabel:{fontSize:12,color:It.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:It.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:It.color.accent},monoValue:{fontFamily:Au},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:dt.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:dt.semantic.success+"30"},noticeWarning:{backgroundColor:dt.semantic.warning+"10",borderColor:dt.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:dt.semantic.success,lineHeight:16},noticeTextWarning:{color:dt.semantic.warning}});B();import{getBrowserStorage as vi,subscribeToBrowserStorage as zu}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as Si}from"@buoy-gg/shared-ui/web";no();var wi=0;function Ku(e){let t=()=>vi(e),r=()=>Array.from({length:t().length},(o,n)=>t().key(n)).filter(o=>o!==null&&!(e==="localStorage"&&Si(o)));return{set(o,n){t().setItem(o,String(n))},getString(o){return t().getItem(o)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(o){return t().getItem(o)!==null},delete(o){let n=this.contains(o);return t().removeItem(o),n},getAllKeys:r,clearAll(){for(let o of r())t().removeItem(o)},get size(){return r().reduce((o,n)=>o+2*(n.length+(t().getItem(n)?.length??0)),0)},addOnValueChangedListener(o){return{remove:zu(n=>{n.area===e&&(n.key!==void 0?e==="localStorage"&&Si(n.key)||o(n.key):n.prevPairs?.forEach(([a])=>o(a)))})}}}}function Pu(){return Ar()?["localStorage","sessionStorage"]:["sessionStorage"]}function Fu(){if(typeof window>"u")return()=>{};try{vi("sessionStorage")}catch{return()=>{}}let e=Pu();if(++wi===1)for(let r of e)Wn(r,Ku(r));let t=true;return()=>{if(t&&(t=false,--wi===0))for(let r of e)_n(r)}}export{Du as MMKVInstanceInfoPanel,Ru as MMKVInstanceSelector,xu as STORAGE_OPS,La as StorageBrowserMode,Tn as StorageEventCard,Cn as StorageEventDetailContent,xn as StorageEventDetailFooter,Cu as StorageEventsSection,yu as StorageKeyCard,la as StorageKeySection,vu as StorageKeyStatsSection,En as StorageModalWithTabs,iu as StorageSection,jd as StorageToolView,sn as StorageTypeFilterBar,wo as batchPairsOf,kn as canUndo,lo as clearAllAppStorage,ga as countByStorageType,tu as createStorageTool,wt as detectMMKVType,Ji as formatMMKVValue,sc as getMMKVClass,pa as getMMKVUnavailableMessage,Ld as getValueType,Bu as isInitialScan,cn as isMMKVAvailable,Go as isTypeMatch,Nr as isValueOnDevice,wn as jumpToState,Wn as registerMMKVInstance,Zi as registerSecureStoreKeys,Jc as requestStorageBrowserRefresh,Ma as setStorageValue,Fu as startBrowserStorageCapture,mn as storageEditBlockedReason,Pt as storageEventStore,Iu as storageOpDot,Eu as storageOpOf,Zd as storageSyncAdapter,si as storageToolPreset,Yc as storageValueToEditableText,Sn as undoOperation,_n as unregisterMMKVInstance,el as unregisterSecureStoreKey,un as useAsyncStorageKeys,Ta as useMMKVInstance,kc as useMMKVInstanceExists,pn as useMMKVInstances,hc as useMMKVKeys,ka as useMultiMMKVKeys,_a as useStorageEvents,Da as validateStorageValue};
|
|
4
|
+
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(l,{style:O.instanceNavbar,children:[Ee(l,{style:O.instanceNavbarHeader,children:[q(u,{style:O.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&q(la,{style:{transform:[{scale:.85}]}})]}),Ee(Or,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||xe.length===1)&&Ee(L,{onPress:()=>_t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ne.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[q(Ua,{size:12,color:re===null?F.color.text:F.color.textSecondary}),q(u,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),q(l,{style:O.instanceNavbarBadge,children:q(u,{style:O.instanceNavbarBadgeText,children:xe.reduce((s,h)=>s+h.keyCount,0)})})]}),xe.map((s,h)=>{let U=h>=Q;return Ee(L,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?Se(true):_t(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?F.color.border:br(s.id)+"40",backgroundColor:s.id===re?br(s.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[q(Ua,{size:12,color:s.id===re?br(s.id):F.color.textSecondary}),q(u,{style:[O.instanceNavbarButtonText,s.id===re&&{color:br(s.id),fontWeight:"700"}],children:s.id}),q(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:br(s.id)+"30"}],children:q(u,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:br(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),zi=q(rd,{copyValue:qo,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:_o,selectedCount:nr.size}),Ki=Nt?q(gd,{selectedKeys:Ye,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:$o,onHideKeys:Er,onSelectAll:Br,onClearSelection:Vr,totalVisibleKeys:v.length}):null,Li=z?Ee(L,{style:O.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(l,{style:O.limitBannerContent,children:[Ee(l,{style:O.limitBannerLeft,children:[q(Os,{size:16,color:F.color.accent}),q(u,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),q(la,{})]}),q(u,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,Pi=(()=>{let s=N.some(U=>!ze(U.key)),h;return a||!s?(h=_s({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(h={...h,message:"No keys match. Clear the search to see them."})):se==="missing"?h={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?h={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:h={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},q(Ws,{...h,testID:"buoy-storage-keys-empty"})})(),Oi=q(Fs,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(l,{style:O.root,children:[$t>0?q(Uc,{onDone:()=>Cr(0)},$t):null,Ee(Or,{testID:"buoy-storage-scroll",ref:Je,onScroll:s=>{kr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[q(l,{style:O.backgroundGrid}),q(Tc,{stats:Ut,tabStats:pt,healthPercentage:Ar,healthStatus:Ai,healthColor:Di,activeFilter:se,onFilterChange:Ue,activeStorageType:ye,onStorageTypeChange:or,showStatus:!ee}),Mi,Le.length>0?Ee(l,{style:O.keysSection,children:[Ee(l,{style:O.sectionHeader,children:[Ee(l,{style:O.sectionHeaderLeft,children:[Ee(u,{style:O.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),q(l,{style:O.countBadge,children:q(u,{style:O.countText,children:v.length})})]}),zi]}),Ki,q(fa,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:y,onViewHistory:g,onHideKey:s=>Er([s]),onToggleKey:No,onDeleteKey:to,editBlockedFor:Rr,pinnedKeys:f,onTogglePin:b,onRowRef:gt,onOpenKey:R}),Li]}):Pi,q(u,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Oi]})]})}var O=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...na,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...na,opacity:.006,backgroundColor:hr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:Fr,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:F.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:F.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:F.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:F.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:F.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:F.color.border},countText:{fontSize:11,fontWeight:"600",color:F.color.text,fontFamily:Fr},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:F.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:F.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:F.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:F.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:F.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:F.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Fr,color:F.color.accent,backgroundColor:F.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:F.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:F.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:F.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:F.color.textSecondary,fontFamily:Fr,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:F.color.text},instanceNavbarBadge:{backgroundColor:F.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:F.color.textSecondary,fontFamily:Fr},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:F.color.border},clearSearchText:{fontSize:13,color:F.color.text,fontWeight:"500"},limitBanner:{backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:F.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:F.color.textTertiary,fontSize:11}});import{jsx as wd}from"react/jsx-runtime";function Ja({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return wd(Sd,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as kd}from"@buoy-gg/shared-ui/web";E();import{useMemo as Cd}from"react";import{useEventStoreEvents as xd}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Td,appStorageEvent as Sn}from"@buoy-gg/shared-ui/web";function Hr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function ko(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Ya(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=ko(e);return Hr(t.value)||Hr(t.prevValue)||Hr(r)||Hr(o)}var Id=0;function Co(){return`se-${Date.now()}-${++Id}`}var Ed=class extends Td{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Sn(e);t&&super.addEvent(t)}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Pe.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:y}=kt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[y]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:y,initialScan:true},storageType:"mmkv",id:Co()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Ni(Wn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,y]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:y??void 0,initialScan:true},storageType:"async",id:Co()})}}}catch{}}async startCapturing(){Kc()||await zc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=Ea(e=>{let t={...e,storageType:"async",id:Co()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=qn(e=>{let t={...e,storageType:"mmkv",id:Co()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)Ya(o)||t.set(o.id,o);let r=e.map(Sn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!Ya(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...ko(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Sn(e);if(!t)return;e=t;let r=this.events.findIndex(a=>a.id===e.id);if(r===-1)return;let o=this.events[r],n=this.events.slice();n[r]={...o,...e,timestamp:o.timestamp,data:{...o.data,...e.data}},super.replaceEvents(n)}},Pt=new Ed;function Qa(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Cd(()=>t==="all"?void 0:d=>d.filter(g=>g.storageType===t),[t]),{events:a,clearEvents:i,isActive:y}=xd(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:y}}E();ft();import{useState as xo,useCallback as ct,useMemo as Ot,useEffect as Xa,useRef as Rd}from"react";import{formatRelativeTime as To,macOSColors as Io,night as er,parseValue as Eo,devToolsStorageKeys as Za,GitBranch as Bd,EventStepperFooter as Vd,EventHistoryViewer as Ad,copyToClipboard as Dd,ProUpgradeModal as Md,monoFont as ei}from"@buoy-gg/shared-ui/web";import{useIsPro as zd}from"@buoy-gg/license/web";E();import{computeLineDiff as wg,DiffType as kg,ABSENT_VALUE as Kd,isAbsent as Cg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Ld}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as Pd,gitClassicTheme as Ig,devToolsDefaultTheme as Eg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ti}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as Od}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as ri}from"react/jsx-runtime";function Fd({oldValue:e,newValue:t,scrollEnabled:r=true}){return ri(l,{style:r?oi.container:oi.containerInline,children:ri(Od,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var oi=pe.create({container:{flex:1,backgroundColor:ti.color.bg},containerInline:{backgroundColor:ti.color.bg}});E();function wn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}E();import{night as Re,Lock as Wd,monoFont as _d}from"@buoy-gg/shared-ui/web";import{jsx as kn,jsxs as $d}from"react/jsx-runtime";var Nd={copy:{color:Re.color.accent,backgroundColor:Re.color.accentSoft,borderColor:Re.color.accentBorderStrong,textColor:Re.color.accent},jump:{color:Re.color.warning,backgroundColor:Re.color.warningSoft,borderColor:Re.color.warning+"40",textColor:Re.color.warning},undo:{color:Re.color.info,backgroundColor:Re.color.infoSoft,borderColor:Re.color.info+"40",textColor:Re.color.info}};function Cn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=Nd[r],i=o||n;return $d(L,{disabled:i,onPress:e,style:[Ro.button,{backgroundColor:i?Re.color.fill:a.backgroundColor,borderColor:i?Re.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?kn(Wd,{size:10,color:Re.color.textTertiary,style:Ro.lockIcon}):kn(l,{style:[Ro.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),kn(u,{style:[Ro.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Ro=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Re.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:_d,height:12}});E();ft();Jt();import{isDevToolsStorageKey as qd}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function xn(e){let{action:t,data:r}=e;if(Ft(r?.prevValue)||Ft(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await zr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Tn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let y=i.data;if(Ft(y?.value)||Ft(y?.prevValue)||Ft(y?.pairs)||Ft(y?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)jd(e[i],r);let o=new Set;for(let i of e)Hd(i,o);let n=[],a=[];for(let i of o){if(qd(i))continue;let y=r.get(i);y==null?a.push(i):n.push([i,y])}a.length>0&&await sr(a),n.length>0&&await zr(n)}function Hd(e,t){let{data:r}=e;if(r){if(r.key&&t.add(r.key),r.keys)for(let o of r.keys)t.add(o);if(r.pairs)for(let[o]of r.pairs)t.add(o);if(r.prevPairs)for(let[o]of r.prevPairs)t.add(o)}}function jd(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),y={...a,...i};t.set(o.key,JSON.stringify(y))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let y=JSON.parse(i),d=JSON.parse(a),g={...y,...d};t.set(n,JSON.stringify(g))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function In(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ft(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ft(r.prevPairs);default:return false}}import{Fragment as Ud,jsx as He,jsxs as ni}from"react/jsx-runtime";var vr=-1,Bo={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Vo(e){switch(e){case"setItem":case"multiSet":return Io.semantic.success;case"removeItem":case"multiRemove":case"clear":return Io.semantic.error;case"mergeItem":case"multiMerge":return Io.semantic.info;default:return Io.text.muted}}function ai(e){let t=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),n=String(e.getMilliseconds()).padStart(3,"0");return`${t}:${r}:${o}.${n}`}var Gd={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},Jd=[];function En({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=zd(),[a,i]=xo(false),[y,d]=xo("split"),[g,c]=xo(Math.max(vr,t-1)),[p,m]=xo(t),x=Rd(false),f=Ot(()=>e.events.sort((ae,gt)=>ae.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),b=f.length;Xa(()=>{if(x.current)return;(async()=>{try{let ae=await oe.getItem(Za.storage.diffViewerMode());(ae==="split"||ae==="tree")&&d(ae),x.current=true}catch{}})()},[]),Xa(()=>{let ae=Math.min(b-1,Math.max(0,t)),gt=Math.max(vr,Math.min(ae-1,t-1));c(gt),m(ae)},[t,b]);let S=ct(async ae=>{d(ae);try{await oe.setItem(Za.storage.diffViewerMode(),ae)}catch{}},[]),w=f[t],T=w?.action,I=g===vr,R=I?void 0:f[Math.max(0,Math.min(b-1,g))],D=f[Math.max(0,Math.min(b-1,p))],C=Ot(()=>{let ae=D?.data;return ae?.initialScan?"scanned":ae?.prevValue===null||ae?.prevValue===void 0?"absent":"prior"},[D]),B=Ot(()=>C==="absent"?Kd:C==="scanned"?Eo(D?.data?.value):Eo(D?.data?.prevValue),[C,D]),Q=Ot(()=>I?{index:vr,label:Bo[C].label,timestamp:Bo[C].timestamp,relativeTime:Bo[C].relativeTime,badge:He(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:He(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Bo[C].badge})})}:{index:g,label:`#${g+1} / ${b}`,timestamp:R?ai(R.timestamp):"",relativeTime:R?To(R.timestamp):"",badge:R?He(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(R.action)}20`}],children:He(u,{style:[tr.actionTextSmall,{color:Vo(R.action)}],children:wn(R.action)})}):void 0},[g,R,b,I,C]),ve=Ot(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?ai(D.timestamp):"",relativeTime:D?To(D.timestamp):"",badge:D?He(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(D.action)}20`}],children:He(u,{style:[tr.actionTextSmall,{color:Vo(D.action)}],children:wn(D.action)})}):void 0}),[p,D,b]),Se=Ot(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),H=ct(()=>{g>vr&&c(g-1)},[g]),ue=ct(()=>{g<p-1&&c(g+1)},[g,p]),ee=ct(()=>{p>g+1&&m(p-1)},[p,g]),se=ct(()=>{p<b-1&&m(p+1)},[p,b]),Ue=Ot(()=>I?B:Eo(R?.data?.value??null),[I,B,R]),Ge=Ot(()=>Eo(D?.data?.value),[D]),wt=ct(()=>y==="split"?He(Ld,{oldValue:Ue,newValue:Ge,differences:Jd,theme:Pd.devToolsDefault,options:Gd,showThemeName:false,scrollEnabled:false}):He(Fd,{oldValue:Ue,newValue:Ge,scrollEnabled:false}),[Ue,Ge,y]),Rt=ct(()=>{r(Math.max(0,t-1))},[t,r]),ye=ct(()=>{r(Math.min(b-1,t+1))},[t,b,r]),or=ct(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await xn(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ae=f.filter($t=>$t.storageType!=="mmkv"),gt=ae.findIndex($t=>$t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Tn(ae,gt)}catch{}},[w,f,n]),_t=ct(async()=>{if(!w)return;let ae={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await Dd(ae)},[w]),Je=w?.storageType!=="mmkv",kr=Je&&w&&In(w);return ni(Ud,{children:[Je&&ni(l,{style:tr.actionButtonsContainer,children:[He(Cn,{type:"undo",text:"UNDO",onPress:or,disabled:!kr,locked:!n}),He(Cn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),He(Cn,{type:"copy",text:"COPY",onPress:_t})]}),He(Ad,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Bd,diffModeTabs:Se,activeDiffMode:y,onDiffModeChange:S,renderDiffContent:wt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:H,onLeftNext:ue,onRightPrevious:ee,onRightNext:se,canLeftPrevious:g>vr,canLeftNext:g<p-1,canRightPrevious:p>g+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:To(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),He(Md,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function Rn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,y)=>i.timestamp.getTime()-y.timestamp.getTime()),a=n.length;return He(Vd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:To(n[t]?.timestamp),applySafeAreaInset:o})}var tr=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:er.color.surface,borderBottomWidth:1,borderBottomColor:er.color.border},valueBox:{backgroundColor:er.color.bg,borderRadius:6,borderWidth:1,borderColor:er.color.border,padding:8},valueText:{fontSize:12,color:er.color.text,fontFamily:ei,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:ei}});E();import{Filter as ii,DynamicFilterView as Yd,Database as Qd,HardDrive as Xd,Shield as Zd,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as Sr}from"react/jsx-runtime";function eu({ignoredPatterns:e,onTogglePattern:t,onAddPattern:r,availableKeys:o=[],enabledStorageTypes:n,onToggleStorageType:a}){let i={addFilterSection:{enabled:true,placeholder:"Enter key pattern to hide...",title:"KEY FILTERS",icon:ii},availableItemsSection:{enabled:true,title:"AVAILABLE EVENT KEYS",emptyMessage:"No storage event keys available. Events will appear here once captured.",items:o},howItWorksSection:{enabled:true,title:"HOW EVENT FILTERS WORK",description:"Patterns hide matching storage keys from the event list. Storage type toggles control which storage backends are monitored.",examples:["\u2022 react_buoy \u2192 hides keys containing react_buoy","\u2022 @temp \u2192 hides @temp_user, @temp_data","\u2022 redux \u2192 hides redux-persist:root",`\u2022 ${ne.asyncFull}: show or hide captured events`,`\u2022 ${ne.mmkv}: show or hide captured events`],icon:ii},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return Sr(l,{style:et.container,children:[Sr(l,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),Sr(l,{style:et.storageTypeButtons,children:[Sr(L,{style:[et.storageTypeButton,n.has("async")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(Qd,{size:16,color:n.has("async")?Tt.semantic.warning:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("async")&&{color:Tt.semantic.warning}],children:ne.asyncFull})]}),Sr(L,{style:[et.storageTypeButton,n.has("mmkv")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(Xd,{size:16,color:n.has("mmkv")?Tt.semantic.info:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("mmkv")&&{color:Tt.semantic.info}],children:ne.mmkv})]}),ne.hasSecure&&Sr(L,{style:[et.storageTypeButton,n.has("secure")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Wt(Zd,{size:16,color:n.has("secure")?Tt.semantic.success:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("secure")&&{color:Tt.semantic.success}],children:"Secure Storage"})]})]})]}),Wt(Yd,{...i})]})}var et=pe.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:It.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:It.color.textSecondary,letterSpacing:.8,marginBottom:12},storageTypeButtons:{flexDirection:"row",gap:8},storageTypeButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:10,paddingHorizontal:12,backgroundColor:It.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:It.color.border},storageTypeButtonActive:{backgroundColor:It.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:It.color.textTertiary}});E();import{memo as tu}from"react";import{RelativeTime as ru,macOSColors as jr,parseValue as ou,CompactRow as nu}from"@buoy-gg/shared-ui/web";import{jsx as li}from"react/jsx-runtime";function au(e){let t=ou(e);return t===null?"null":t===void 0?"undefined":Array.isArray(t)?"array":typeof t=="boolean"?"boolean":typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="object"?"object":"undefined"}function iu(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return jr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return jr.semantic.error;case"mergeItem":case"multiMerge":return jr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return jr.semantic.warning;default:return jr.text.muted}}function lu(e,t){return`${Array.from(e).map(r=>r==="async"?ne.async:ne.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Bn=tu(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=iu(e.lastAction),i=wn(e.lastAction),y=e.totalOperations??1;return li(nu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:lu(e.storageTypes,y),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:li(ru,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as su}from"@buoy-gg/license/web";import{Fragment as si,jsx as M,jsxs as dt}from"react/jsx-runtime";var $g=Ks["storage.events"].free,Vn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},cu={storage:Vn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},du={storage:Vn,parse:e=>e==="true",serialize:e=>e.toString()},ci={storage:Vn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},uu={...ci,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function An({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:y,onRefresh:d,onEventSelect:g}){let c=su(),p=zs("storage.events"),[m,x]=uo(cr.storage.activeTab(),"browser",cu);Xo(()=>{y?.(m)},[m,y]);let[f,b]=ot(""),[S,w]=ot(null),[T,I]=ot(false),[R,D]=uo(cr.storage.isMonitoring(),true,du),{events:C,clearEvents:B,isCapturing:Q}=Qa({enabled:R}),[ve,Se]=ot(null),[H,ue]=ot(null),[ee,se]=ot(null),[Ue,Ge]=ot(0),[wt,Rt]=ot(false),[ye,or]=uo(cr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),uu),[re,_t]=ot("all"),[Je,kr]=ot(new Set(["async","mmkv","secure"])),[ae,gt]=uo(cr.storage.pinnedKeys(),new Set,ci),$t=Jn(null),Cr=R&&Q,[Nt,xr]=ot("bottomSheet"),nr=De(v=>{xr(v)},[]),Bt=De(()=>{D(v=>!v)},[]),xe=De(()=>{B(),Se(null),Ge(0)},[B]),Jr=De(v=>{ue(v),se(null)},[]),Yr=De(()=>{ue(null),se(null)},[]),Qr=De(v=>{or(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),qt=De(v=>{or(k=>new Set([...k,v]))},[]),Lo=De(v=>{gt(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Tr=De(()=>{Rt(!wt)},[wt]),Po=De(v=>{kr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ir=Jn([]),ar=De(()=>{let v=Ir.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=co(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=co(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=co(z.value),k),{})}},[]),Oo=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await so()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await ol()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),Ht=v=>{let k=Ts(v);return k===null?"null":k===void 0?"undefined":Array.isArray(k)?"array":typeof k=="boolean"?"boolean":typeof k=="number"?"number":typeof k=="string"?"string":typeof k=="object"?"object":"undefined"},[Xr,Fo]=ot([]);Xo(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();Fo([...v].sort())}catch{}})()},[e]);let Zr=st(()=>{let v=new Set(Xr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Xr]),N=st(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Je.has(k.storageType)||Array.from(ye).some(Ye=>z.includes(Ye)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=Ht(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:Ht(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ye,Je]),ke=st(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),Wo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),eo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Te=st(()=>H&&N.find(v=>v.key===H)||null,[H,N]);Xo(()=>{if(!g)return;let v=ke||(ee!==null?Te:null),k=ke?Ue:ee;if(!v||k==null)return;let z=[...v.events].sort((Br,Vr)=>Br.timestamp.getTime()-Vr.timestamp.getTime()),j=z[k],Ye=z[k-1];j&&g(j),Ye&&g(Ye)},[g,ke,Ue,Te,ee]);let tt=st(()=>C.filter(v=>{if(!v.data?.key||!Je.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[C,ye,Je]),_o=st(()=>ka(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(v=>v.storageType===re),[tt,re]),$o=De(()=>rt.map(v=>({key:v.data?.key,action:v.action,value:co(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[rt]),Er=st(()=>rt.slice(0,p),[rt,p]),jt=st(()=>Math.max(0,rt.length-p),[rt.length,p]),No=.8,to=De(v=>v.id,[]),Rr=De(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Ge(z>=0?z:0)},[N]),qo=De(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:Ht(v.data?.value)};return M(Bn,{data:k,onPress:()=>Rr(v),testID:`buoy-storage-event-${v.id}`})},[Rr]);if(!e)return null;let Ut=n?cr.modal.root():cr.storage.modal(),pt=()=>{if(wt)return M(eu,{ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:qt,availableKeys:Zr,enabledStorageTypes:Je,onToggleStorageType:Po});if(m==="browser"){if(H&&Te){if(ee!==null)return M(l,{style:he.contentWrapper,children:M(En,{conversation:Te,selectedEventIndex:ee,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()),z=[...k].reverse();return M(Zo,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Ye=k.findIndex(Vr=>Vr.timestamp.getTime()===j.timestamp.getTime()),Br={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:Ht(j.data?.value)};return M(Bn,{data:Br,onPress:()=>se(Ye>=0?Ye:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(Ja,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:qt,searchQuery:f,storageDataRef:Ir,eventCountByKey:Wo,lastWriteByKey:eo,onViewHistory:Jr,enabledStorageTypes:Je,pinnedKeys:ae,onTogglePin:Lo,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:_t,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(l,{style:he.contentWrapper,children:M(En,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(dn,{active:re,onChange:_t,counts:_o})});if(rt.length===0){let k=re!=="all";return dt(l,{style:he.flexFill,children:[v,M(Es,{testID:"buoy-storage-events-empty",...Cr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return dt(l,{style:he.flexFill,children:[v,M(Zo,{testID:"buoy-storage-events-list",style:he.flexFill,data:Er,renderItem:qo,keyExtractor:to,onEndReachedThreshold:No,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(l,{style:he.lockedBannerContainer,children:M(kd,{featureName:`${jt} event${jt>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ir=ke&&ke.events.length>1?M(Rn,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,applySafeAreaInset:Nt==="bottomSheet"}):Te&&ee!==null&&Te.events.length>1?M(Rn,{conversation:Te,selectedEventIndex:ee,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Kn=wt?()=>Rt(false):ee!==null?()=>se(null):H?Yr:ke?()=>{Se(null),Ge(0)}:r,Le=wt?dt(Me,{children:[M(Me.Navigation,{onBack:()=>Rt(false)}),M(Me.Content,{title:"Filters"})]}):H?dt(Me,{children:[M(Me.Navigation,{onBack:ee!==null?()=>se(null):Yr}),M(Me.Content,{title:`${H} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Ge(0)}}),M(Me.Content,{title:ke.key})]}):S?dt(Me,{children:[M(Me.Navigation,{onBack:()=>w(null)}),M(Me.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):dt(Me,{children:[r&&M(Me.Navigation,{onBack:r}),M(Me.Content,{title:"",children:T?M(As,{value:f,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(xs,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:m,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),ue(null),se(null),Se(null),Ge(0),w(null)}})}),dt(Me.Actions,{children:[d&&!T?M(L,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Bs,{size:14,color:We.color.textSecondary})}):null,M(L,{onPress:Tr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Je.size<3)&&he.activeFilterButton],children:M(Rs,{size:14,color:ye.size>0||Je.size<3?We.color.accent:We.color.textSecondary})}),m==="browser"&&!T&&dt(si,{children:[M(L,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(Vs,{size:14,color:We.color.textSecondary})}),M(ra,{value:ar,disabled:Ir.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),m==="events"&&dt(si,{children:[M(ra,{value:$o,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(Ds,{isEnabled:Cr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(Ms,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(oa,{children:dt(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ls,children:Le}),pt(),ir]})}):M(oa,{children:M(Cs,{visible:e,onClose:t,onBack:Kn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Le},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function yu(e={}){return M(An,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:Is.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:We.color.buttonSurface,borderWidth:1,borderColor:We.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:We.color.accentSoft,borderColor:We.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:We.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:yo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:We.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:yo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:We.color.text,fontSize:12,fontWeight:"600",fontFamily:yo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:We.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:We.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:We.color.accent,fontFamily:yo,letterSpacing:.5},contentWrapper:{flex:1}});E();ft();Jt();import{approxJsonSize as di,isDevToolsStorageKey as ut,isOverWireBudget as ui,isJsonSerializable as gu}from"@buoy-gg/shared-ui/web";var Ao=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),pu=16*1024,Dn=1.25*1024*1024,yi=8*1024*1024;function Mn(e){return e===void 0?e:ui(e,pu)?Ao:e}function Do(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=ko(e),i=t(a.pairs),y=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&y===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:y}:{}}}}function gi(e){return e===void 0||!ui(e,yi)?e:gu(e)?{__buoyTruncated:true,note:`Exceeds the ${yi/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Ao}var pi=new WeakMap,mi=new WeakMap;function mu(e){let t=pi.get(e);if(t)return t;let r;try{let o=Do(e,Mn);r={event:o,bytes:di(o,Dn).bytes}}catch{r={event:Do(e,()=>Ao),bytes:1024}}return pi.set(e,r),r}function fu(e){let t=mi.get(e);if(t)return t;let r=Do(e,n=>n===void 0?void 0:Ao),o={event:r,bytes:di(r,Dn).bytes};return mi.set(e,o),o}function hu(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=mu(e[o]);if(r+n.bytes<=Dn)t[o]=n.event,r+=n.bytes;else{let a=fu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function fi(e){let t=Pe.get(e);if(!t)throw new Error(`No MMKV instance registered as "${e}"`);if(t.instance?.isReadOnly)throw new Error(`MMKV instance "${e}" is registered read-only`);return t.instance}var hi=[];function bu(e){hi=e}var vu={version:3,getSnapshot:()=>hu(Pt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&ut(t))})),subscribe:e=>Pt.subscribeToEvents(e),actions:{clearEvents:()=>{Pt.clearEvents()},getRequiredKeys:()=>hi,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Pt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=Do(r,gi);return{found:true,id:t,event:o}},clearAppStorage:()=>so(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Pt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!In(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await xn(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Pt.getEvents().filter(y=>y.storageType!=="mmkv").slice().reverse(),n=o.find(y=>y.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(y=>y.data?.key===n.data?.key),i=a.findIndex(y=>y.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await Tn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!ut(e)),"async.multiGet":async e=>(await io(e.keys)).filter(([t])=>!ut(t)),"async.getItem":e=>{let{key:t}=e;return ut(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>sr(e.keys),"async.multiSet":e=>zr(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Pe.getAll().filter(({id:e})=>!ut(e)).map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!ut(a)).map(a=>{let{value:i,type:y}=kt(t,a);return{key:a,value:Mn(i),valueType:y}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r||ut(r)||ut(t))return{found:false,reason:"missing instanceId/key"};let o=Pe.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=kt(o.instance,r);return{found:true,instanceId:t,key:r,value:gi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;fi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=fi(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=te.getModule();return Promise.all(te.getAll().filter(({key:t})=>!ut(t)).map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=te.getModule(),t=te.getAll().filter(({key:o})=>!ut(o)),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:Mn(i)})}return r},"secure.get":e=>{let{key:t}=e;if(ut(t))return null;let r=te.getAll().find(n=>n.key===t),o=te.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return te.setValue(t,r)},"secure.delete":e=>te.deleteValue(e.key)}};import{jsx as Su}from"react/jsx-runtime";var bi=vl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>Su(hl,{size:e}),component:An,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),wu=bl(bi,e=>(bu(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as ku,CyberpunkSectionButton as Cu}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as xu}from"@buoy-gg/shared-ui/web";import{jsx as Tu}from"react/jsx-runtime";function Iu({onPress:e}){let{storageKeys:t}=gn(),r=t.filter(n=>!xu(n.key)).length,o=r;return Tu(Cu,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:ku,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as vi,CheckCircle2 as Eu,Eye as Si,XCircle as wi,HardDrive as ki,Database as Ci,Shield as Ru,gameUIColors as Mo,macOSColors as ie,night as be,monoFont as zo}from"@buoy-gg/shared-ui/web";import{DataViewer as Bu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var xi=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Ko(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return xi[t%xi.length]}var Vu=e=>{switch(e){case"required_present":return{icon:Eu,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:vi,color:ie.semantic.error,bgColor:ie.semantic.errorBackground,borderColor:ie.semantic.error+"50",label:"MISSING",labelColor:ie.semantic.error};case"required_wrong_value":return{icon:wi,color:ie.semantic.warning,bgColor:ie.semantic.warningBackground,borderColor:ie.semantic.warning+"50",label:"WRONG S",labelColor:ie.semantic.warning};case"required_wrong_type":return{icon:wi,color:ie.semantic.info,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.info+"50",label:"WRONG TYPE",labelColor:ie.semantic.info};case"optional_present":return{icon:Si,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},Au=e=>{switch(e){case"mmkv":return ki;case"async":return Ci;case"secure":return Ru;default:return Ci}};function Du({storageKey:e,isExpanded:t,onToggle:r}){let o=Vu(e.status),n=o.icon,a=Au(e.storageType),i=e.value!==void 0&&e.value!==null,y=e.expectedValue!==void 0,d=e.expectedType!==void 0,g=ua(e.storageType),c=on(e.storageType);return Ae(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(L,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Ae(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ae(l,{style:K.cardHeaderInfo,children:[Y(u,{style:K.storageKeyText,children:e.key}),e.description?Y(u,{style:K.descriptionText,children:e.description}):null,Ae(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(u,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Ae(l,{style:[K.storageBadge,{backgroundColor:`${g}15`}],children:[Y(a,{size:10,color:g}),Y(u,{style:[K.storageText,{color:g}],children:c})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(l,{style:[K.instanceBadge,{backgroundColor:Ko(e.instanceId)+"20",borderColor:Ko(e.instanceId)+"40"}],children:[Y(ki,{size:9,color:Ko(e.instanceId)}),Y(u,{style:[K.instanceText,{color:Ko(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(u,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():Dt(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(Si,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let p=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof p=="string"||typeof p=="number"||typeof p=="boolean"?Ae(l,{style:K.simpleValueContainer,children:[Y(u,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(u,{style:K.simpleValueContent,selectable:true,children:String(p)})}),Ae(u,{style:K.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Bu,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ae(u,{style:K.typeHelperText,children:["Current type: ",Dt(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Ae(u,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ae(l,{style:K.cardBody,children:[Ae(l,{style:K.emptyValueContainer,children:[Y(vi,{size:16,color:ie.semantic.warning}),Y(u,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:zo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Mo.success,fontSize:12,fontFamily:zo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Mo.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Mo.warning+"1A"},emptyValueText:{color:Mo.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});E();import{AlertCircle as Mu,CheckCircle2 as zu,XCircle as Ti,Eye as Ku,Database as Ii,Shield as Lu}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as je}from"react/jsx-runtime";var Pu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:zu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:Mu,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Ti,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Ti,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Ku,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],Ou=[{key:"mmkv",label:ne.mmkv,description:ne.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ii},{key:"async",label:ne.asyncFull,description:ne.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ii},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Lu}];function Fu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:y,asyncCount:d,secureCount:g}=e;return t===0?je(l,{style:Z.statsContainer,children:[Ce(u,{style:Z.sectionTitle,children:"STORAGE BREAKDOWN"}),Ce(l,{style:Z.emptyState,children:Ce(u,{style:Z.emptyStateText,children:"No storage keys detected"})})]}):je(l,{style:Z.statsContainer,children:[je(l,{style:Z.breakdownSection,children:[Ce(u,{style:Z.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(l,{style:Z.breakdownList,children:Pu.map(c=>{let p=0,m=false;switch(c.key){case"valid":p=a,m=p>0;break;case"missing":p=r,m=p>0;break;case"wrongValue":p=o,m=p>0;break;case"wrongType":p=n,m=p>0;break;case"optional":p=i,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon;return Ce(l,{style:Z.breakdownItem,children:je(l,{style:Z.breakdownItemRow,children:[je(l,{style:Z.breakdownItemLeft,children:[Ce(l,{style:[Z.breakdownIcon,{backgroundColor:c.bgColor}],children:Ce(f,{size:14,color:c.color})}),je(l,{style:Z.breakdownItemInfo,children:[Ce(u,{style:Z.breakdownItemLabel,children:c.label}),Ce(u,{style:Z.breakdownItemDesc,children:c.description})]})]}),je(l,{style:Z.breakdownItemRight,children:[Ce(u,{style:[Z.breakdownCount,{color:c.textColor}],children:p}),je(u,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]}),(y>0||d>0||g>0)&&je(l,{style:Z.breakdownSection,children:[Ce(u,{style:Z.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(l,{style:Z.breakdownList,children:Ou.map(c=>{let p=0,m=false;switch(c.key){case"mmkv":p=y,m=p>0;break;case"async":p=d,m=p>0;break;case"secure":p=g,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon,b=ua(c.key);return Ce(l,{style:Z.breakdownItem,children:je(l,{style:Z.breakdownItemRow,children:[je(l,{style:Z.breakdownItemLeft,children:[Ce(l,{style:[Z.breakdownIcon,{backgroundColor:`${b}15`}],children:Ce(f,{size:14,color:b})}),je(l,{style:Z.breakdownItemInfo,children:[Ce(u,{style:Z.breakdownItemLabel,children:c.label}),Ce(u,{style:Z.breakdownItemDesc,children:c.description})]})]}),je(l,{style:Z.breakdownItemRight,children:[Ce(u,{style:[Z.breakdownCount,{color:b}],children:p}),je(u,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]})]})}var Z=pe.create({statsContainer:{marginBottom:24,backgroundColor:St.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:St.color.border},sectionTitle:{color:St.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:St.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:St.color.border},breakdownItemRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breakdownItemLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1,minWidth:0},breakdownIcon:{padding:8,borderRadius:8},breakdownItemInfo:{flex:1,minWidth:0},breakdownItemLabel:{color:St.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:St.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:St.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:St.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:St.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{Database as Wu,CyberpunkSectionButton as _u}from"@buoy-gg/shared-ui/web";import{jsx as $u}from"react/jsx-runtime";function Nu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return $u(_u,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Wu,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Ur}from"@buoy-gg/shared-ui/web";var qu=["SET","GET","MERGE","DELETE","CLEAR"],Hu={SET:Ur.semantic.info,GET:Ur.text.muted,MERGE:Ur.semantic.debug,DELETE:Ur.semantic.error,CLEAR:Ur.semantic.warning};function ju(e){return Hu[e]}function Uu(e){let t=e.action;return t==="clear"||t==="clearAll"?"CLEAR":t.startsWith("get.")?"GET":t==="removeItem"||t==="multiRemove"||t==="delete"?"DELETE":t==="mergeItem"||t==="multiMerge"?"MERGE":"SET"}function Gu(e){return!!e.data?.initialScan}E();import{useState as Ju}from"react";import{macOSColors as rr,night as de,monoFont as Ei}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function Yu({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=Ju(false),{instances:a,instanceCount:i,refresh:y}=hn(false),d=a.find(c=>c.id===e),g=c=>{t(c),n(false)};return un()?i===0?le(l,{style:$.container,children:it(l,{style:$.emptyState,children:[le(u,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),le(u,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(L,{style:$.refreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(l,{style:$.container,children:[it(L,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:$.selectorContent,children:d?le(Ri,{instance:d,isSelected:true}):le(u,{style:$.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:$.dropdownArrow,children:"\u25BC"})]}),le(ta,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(L,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:it(l,{style:$.dropdownContainer,children:[it(l,{style:$.dropdownHeader,children:[it(u,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(L,{style:$.headerRefreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.headerRefreshText,children:"\u21BB"})})]}),le(Or,{style:$.dropdownList,children:a.map(c=>le(L,{style:[$.dropdownItem,c.id===e&&$.dropdownItemSelected],onPress:()=>g(c.id),activeOpacity:.7,children:le(Ri,{instance:c,isSelected:c.id===e})},c.id))})]})})})]}):le(l,{style:$.container,children:it(l,{style:$.unavailableState,children:[it(u,{style:$.unavailableTitle,children:[ne.mmkv," Not Available"]}),le(u,{style:$.unavailableDescription,children:Ca()})]})})}function Ri({instance:e,isSelected:t}){return it(l,{style:$.instanceRow,children:[it(l,{style:$.instanceLeft,children:[le(u,{style:[$.instanceId,t&&$.instanceIdSelected],numberOfLines:1,children:e.id}),it(l,{style:$.instanceBadges,children:[e.encrypted&&le(l,{style:[$.badge,$.badgeEncrypted],children:le(u,{style:$.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(l,{style:[$.badge,$.badgeReadOnly],children:le(u,{style:$.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),it(l,{style:$.instanceRight,children:[le(u,{style:$.keyCount,children:e.keyCount}),le(u,{style:$.keyCountLabel,children:"keys"})]})]})}var $=pe.create({container:{marginBottom:12},unavailableState:{backgroundColor:rr.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:rr.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:rr.semantic.warning},unavailableDescription:{fontSize:12,color:de.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:de.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:de.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:de.color.text},emptyStateDescription:{fontSize:12,color:de.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:de.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:de.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:de.color.accent},selectorButton:{backgroundColor:de.color.surface,borderRadius:12,borderWidth:1,borderColor:de.color.border,padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},selectorContent:{flex:1},placeholderText:{fontSize:13,color:de.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:de.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:de.color.surface,borderRadius:16,borderWidth:1,borderColor:de.color.border,width:"100%",maxWidth:500,maxHeight:"70%",shadowColor:"#000000",shadowOpacity:.2,shadowRadius:20,shadowOffset:{width:0,height:10},overflow:"hidden"},dropdownHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:16,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:de.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:de.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownItemSelected:{backgroundColor:de.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:de.color.text,fontFamily:Ei},instanceIdSelected:{fontWeight:"600",color:de.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:rr.semantic.success+"15",borderColor:rr.semantic.success+"40"},badgeReadOnly:{backgroundColor:rr.semantic.warning+"15",borderColor:rr.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:de.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:de.color.text,fontFamily:Ei},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as Qu}from"@buoy-gg/shared-ui/web";import{jsx as Ke,jsxs as wr}from"react/jsx-runtime";function Xu({instanceId:e}){let t=Ka(e);return t?Ke(l,{style:ge.container,children:wr(l,{style:ge.panel,children:[Ke(l,{style:ge.header,children:Ke(u,{style:ge.headerTitle,children:"Instance Details"})}),wr(l,{style:ge.infoGrid,children:[Ke(Gr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Ke(Gr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Ke(Gr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),Ke(Gr,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?yt.semantic.warning:Et.color.textTertiary}),t.size!==void 0&&Ke(Gr,{label:"Size",value:Zu(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&wr(l,{style:ge.notice,children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F512}"}),Ke(u,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&wr(l,{style:[ge.notice,ge.noticeWarning],children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Ke(u,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Ke(l,{style:ge.container,children:Ke(l,{style:ge.errorState,children:wr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Gr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return wr(l,{style:ge.infoItem,children:[Ke(u,{style:ge.infoLabel,children:e}),Ke(u,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function Zu(e){if(e===0)return"0 Bytes";let t=1024,r=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,o)).toFixed(2))} ${r[o]}`}var ge=pe.create({container:{marginBottom:12},errorState:{backgroundColor:yt.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:yt.semantic.error+"40"},errorText:{fontSize:12,color:yt.semantic.error,textAlign:"center"},panel:{backgroundColor:Et.color.surface,borderRadius:12,borderWidth:1,borderColor:Et.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:Et.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:Et.color.text,textTransform:"uppercase",letterSpacing:.5},infoGrid:{padding:12,gap:10},infoItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4},infoLabel:{fontSize:12,color:Et.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:Et.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:Et.color.accent},monoValue:{fontFamily:Qu},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:yt.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:yt.semantic.success+"30"},noticeWarning:{backgroundColor:yt.semantic.warning+"10",borderColor:yt.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:yt.semantic.success,lineHeight:16},noticeTextWarning:{color:yt.semantic.warning}});E();import{getBrowserStorage as Bi,subscribeToBrowserStorage as ey}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as zn}from"@buoy-gg/shared-ui/web";ao();var Vi=0;function ty(e){let t=()=>Bi(e),r=()=>Array.from({length:t().length},(o,n)=>t().key(n)).filter(o=>o!==null&&!zn(o));return{set(o,n){t().setItem(o,String(n))},getString(o){return t().getItem(o)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(o){return t().getItem(o)!==null},delete(o){let n=this.contains(o);return t().removeItem(o),n},getAllKeys:r,clearAll(){for(let o of r())t().removeItem(o)},get size(){return r().reduce((o,n)=>o+2*(n.length+(t().getItem(n)?.length??0)),0)},addOnValueChangedListener(o){return{remove:ey(n=>{n.area===e&&(n.key!==void 0?zn(n.key)||o(n.key):n.prevPairs?.forEach(([a])=>{zn(a)||o(a)}))})}}}}function ry(){return Dr()?["localStorage","sessionStorage"]:["sessionStorage"]}function oy(){if(typeof window>"u")return()=>{};try{Bi("sessionStorage")}catch{return()=>{}}let e=ry();if(++Vi===1)for(let r of e)Hn(r,ty(r));let t=true;return()=>{if(t&&(t=false,--Vi===0))for(let r of e)jn(r)}}export{Xu as MMKVInstanceInfoPanel,Yu as MMKVInstanceSelector,qu as STORAGE_OPS,Ja as StorageBrowserMode,Bn as StorageEventCard,En as StorageEventDetailContent,Rn as StorageEventDetailFooter,Nu as StorageEventsSection,Du as StorageKeyCard,fa as StorageKeySection,Fu as StorageKeyStatsSection,An as StorageModalWithTabs,Iu as StorageSection,yu as StorageToolView,dn as StorageTypeFilterBar,ko as batchPairsOf,In as canUndo,so as clearAllAppStorage,ka as countByStorageType,wu as createStorageTool,kt as detectMMKVType,al as formatMMKVValue,xc as getMMKVClass,Ca as getMMKVUnavailableMessage,au as getValueType,Gu as isInitialScan,un as isMMKVAvailable,Jo as isTypeMatch,Hr as isValueOnDevice,Tn as jumpToState,Hn as registerMMKVInstance,cl as registerSecureStoreKeys,md as requestStorageBrowserRefresh,Na as setStorageValue,oy as startBrowserStorageCapture,vn as storageEditBlockedReason,Pt as storageEventStore,ju as storageOpDot,Uu as storageOpOf,vu as storageSyncAdapter,bi as storageToolPreset,fd as storageValueToEditableText,xn as undoOperation,jn as unregisterMMKVInstance,dl as unregisterSecureStoreKey,gn as useAsyncStorageKeys,Ka as useMMKVInstance,$c as useMMKVInstanceExists,hn as useMMKVInstances,Lc as useMMKVKeys,Da as useMultiMMKVKeys,Qa as useStorageEvents,$a as validateStorageValue};
|