@buoy-gg/storage 7.0.77 → 7.0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/storage/components/GameUIStorageBrowser.js +2 -2
- package/lib/commonjs/storage/components/MMKVInstanceSelector.js +1 -1
- package/lib/commonjs/storage/components/StorageModalWithTabs.js +1 -1
- package/lib/commonjs/storage/utils/snapshotProvider.js +1 -1
- package/lib/module/storage/components/GameUIStorageBrowser.js +1 -1
- package/lib/module/storage/components/MMKVInstanceSelector.js +1 -1
- package/lib/module/storage/components/StorageModalWithTabs.js +1 -1
- package/lib/module/storage/utils/snapshotProvider.js +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 Uo=Object.defineProperty;var Hi=Object.getOwnPropertyDescriptor;var qi=Object.getOwnPropertyNames;var ji=Object.prototype.hasOwnProperty;var no=(e,t)=>()=>(e&&(t=e(e=0)),t);var Fn=(e,t)=>{for(var r in t)Uo(e,r,{get:t[r],enumerable:true})},Go=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of qi(t))!ji.call(e,n)&&n!==r&&Uo(e,n,{get:()=>t[n],enumerable:!(o=Hi(t,n))||o.enumerable});return e},Ui=(e,t,r)=>(Go(e,t,"default"),r&&Go(r,t,"default"));var Gi=e=>Go(Uo({},"__esModule",{value:true}),e);var Ji,E=no(()=>{"use strict";Ji=(()=>{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 Yi,installCapacitorBridge as Qi,interceptCapacitor as Zi,isCapacitorNative as Xi}from"@buoy-gg/license/web";function zr(){return Xi()&&Yi(ft)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Kr))try{o(r)}catch{}}function el(e){return Kr.add(e),tl(),()=>{Kr.delete(e)}}async function lr(e){let{value:t}=await Gt(ft,"get",{key:e});return t??null}async function Jo(){let{keys:e}=await Gt(ft,"keys");return Array.isArray(e)?e:[]}async function ao(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function tl(){Yo||!zr()||!Qi()||(Yo=true,Zi({plugin:ft,methods:["set","remove","clear"],promise:async(e,t)=>{if(Kr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Jo().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 Wn(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?Wn(r[o],n):n;return r}function $n(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var ft,Kr,Yo,io,lo=no(()=>{"use strict";E();ft="Preferences";Kr=new Set;Yo=false;io={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(ft,"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(ft,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await ao(await Jo()).catch(()=>{});await Gt(ft,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Jo()},multiGet(e){return ao(e)},async multiSet(e){let t=ao(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(ft,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=ao(e).catch(()=>{});await Promise.all(e.map(r=>Gt(ft,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await io.setItem(e,JSON.stringify(Wn($n(r),$n(t))))},async multiMerge(e){for(let[t,r]of e)await io.mergeItem(t,r)}}});import rl from"@buoy-gg/shared-ui/web/asyncStorage";var lt,_n,oe,mt=no(()=>{"use strict";E();lo();lt=()=>zr()?io:rl,_n={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=_n});var Nn={};Fn(Nn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>Hn,default:()=>qn,readMany:()=>so,removeMany:()=>sr,writeMany:()=>Or});async function so(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 Or(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,Hn,qn,Jt=no(()=>{"use strict";E();mt();Fe=oe,Hn={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};qn=Fe});E();E();mt();Jt();import{classifyPreviewItem as ol,createRestoreScope as nl,emptyRestoreResult as jn,failedRestore as al,isDevToolsStorageKey as we,registerStateSnapshotProvider as il,unionKeys as co,wontApply as Lr}from"@buoy-gg/shared-ui/web";E();mt();Jt();import{isDevToolsStorageKey as ll}from"@buoy-gg/shared-ui/web";async function uo(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!ll(r));t.length!==0&&await sr(t)}async function sl(){await oe.clear()}E();E();import{isDevToolsStorageKey as cl}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 dl(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 Qo(e,t){return e===t}var ul=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(cl(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}},Zo=new ul;var Un=e=>Zo.addListener(e);var yl=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}},Le=new yl;function Gn(e,t,r){Le.register(e,t,r),Zo.addInstance(t,e)}function Jn(e){Zo.removeInstance(e),Le.unregister(e)}E();var gl=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)}},ee=new gl;function pl(e,t){ee.register(e,t)}function fl(e){ee.unregister(e)}function Yn(e,t){e.remove?e.remove(t):e.delete?.(t)}function ml(){return{canCapture:true,canRestore:true}}async function Qn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await so(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:y}of Le.getAll().filter(({id:d})=>!we(d)))try{o[i]=y.getAllKeys().filter(d=>!we(d)).map(d=>{let{value:p,type:s}=kt(y,d);return s==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:p,valueType:s}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=ee.getModule();for(let{key:i,options:y}of ee.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 hl(){let{data:e,warnings:t}=await Qn();return{data:e,warnings:t}}async function bl(e,t){let r=e,o=nl(t),n=o.touch,a=jn();if(!r)return al("empty storage snapshot");try{let d=(r.async??[]).filter(([g])=>!we(g)&&n(`async:${g}`)),p=new Set(d.map(([g])=>g)),s=(await oe.getAllKeys()).filter(g=>!we(g)).filter(g=>!p.has(g)&&n(`async:${g}`));o.countExcluded((r.async??[]).length-d.length),s.length>0&&await sr(s),d.length>0&&await Or(d),a.applied+=d.length+s.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,p]of Object.entries(r.mmkv??{})){if(we(d))continue;let s=Le.get(d);if(!s){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(s.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:g}=s;try{let f=new Set(p.map(m=>m.key)),C=g.getAllKeys().filter(m=>!we(m));for(let m of C)o.allows(`mmkv:${d}/${m}`)&&(f.has(m)||(Yn(g,m),a.applied+=1));for(let m of p)if(!we(m.key)&&n(`mmkv:${d}/${m.key}`)){if(m.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${m.key}`,reason:"ArrayBuffer values cannot be restored"});continue}g.set(m.key,m.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:p}of ee.getAll().filter(({key:s})=>!we(s)))if(o.allows(`secure:${d}`)){if(p.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let s=i[d];s===null?await ee.deleteValue(d):await ee.setValue(d,s)}else await ee.deleteValue(d);a.applied+=1}catch(s){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(s)}`)}}for(let d of Object.keys(i))we(d)||n(`secure:${d}`)&&(ee.getAll().filter(({key:p})=>!we(p)).some(p=>p.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 vl(){let e=jn();try{await uo(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Le.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)))Yn(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 ee.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 ee.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var Sl=256*1024;function Xo(e,t,r,o,n,a){return ol({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>Sl,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function wl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Qn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],y=new Map(n.async??[]),d=new Map(r.async??[]);for(let f of co(y,d))we(f)||a.push(Xo(`async:${f}`,f,y.get(f),d.get(f),y.has(f),d.has(f)));for(let f of co(n.mmkv,r.mmkv)){if(we(f))continue;let C=o?Le.get(f):null,m=o&&!C,b=o&&C?.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 co(S,w)){if(we(T))continue;let I=`mmkv:${f}/${T}`,R=`${f} \xB7 ${T}`,D=S.get(T),x=w.get(T),B=Xo(I,R,D?.value,x?.value,S.has(T),w.has(T));m?B=Lr(B,"MMKV instance not registered"):b?B=Lr(B,"MMKV instance registered read-only"):(x?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Lr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let p=n.secure??{},s=r.secure??{},g=o?new Map(ee.getAll().filter(({key:f})=>!we(f)).map(f=>[f.key,f])):null;for(let f of co(p,s)){if(we(f))continue;let C=Xo(`secure:${f}`,f,p[f],s[f],f in p,f in s);if(o){let m=g?.get(f);m?m.options.requireAuthentication&&(C=Lr(C,"biometric-protected keys are never written")):C=Lr(C,"key no longer registered with registerSecureStoreKeys")}a.push(C)}return{items:a,notes:i}}il({id:"storage",label:"Storage",status:ml,capture:hl,restore:bl,clear:vl,previewItems:wl});E();import{StorageIcon as kl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as Cl,defineToolPreset as xl}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as en,useRef as Zn,useMemo as st}from"react";var Xn={};Fn(Xn,{AccessibilityInfo:()=>Rl,ActivityIndicator:()=>Es,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Vl,AppState:()=>Al,Appearance:()=>Bl,BackHandler:()=>Dl,Button:()=>Rs,CheckBox:()=>Ul,Clipboard:()=>Ml,DeviceEventEmitter:()=>ss,Dimensions:()=>zl,Easing:()=>Pr,FlatList:()=>tn,I18nManager:()=>Kl,Image:()=>Gl,ImageBackground:()=>Jl,InteractionManager:()=>Ll,Keyboard:()=>Ol,KeyboardAvoidingView:()=>Yl,LayoutAnimation:()=>Pl,Linking:()=>Fl,LogBox:()=>ls,Modal:()=>aa,NativeEventEmitter:()=>Wl,NativeModules:()=>El,PanResponder:()=>$l,Picker:()=>Ql,PixelRatio:()=>_l,Platform:()=>Nl,Pressable:()=>Ts,ProgressBar:()=>Zl,RefreshControl:()=>Xl,SafeAreaView:()=>es,ScrollView:()=>Wr,SectionList:()=>ts,Share:()=>Hl,StatusBar:()=>rs,StyleSheet:()=>pe,Switch:()=>Is,Text:()=>u,TextInput:()=>ks,Touchable:()=>os,TouchableHighlight:()=>Cs,TouchableNativeFeedback:()=>ns,TouchableOpacity:()=>O,TouchableWithoutFeedback:()=>xs,UIManager:()=>ql,Vibration:()=>jl,View:()=>l,VirtualizedList:()=>as,YellowBox:()=>is,findNodeHandle:()=>Bs,unstable_createElement:()=>Il,useColorScheme:()=>cs,useLocaleContext:()=>ds,useWindowDimensions:()=>us});E();Ui(Xn,Tl);import*as Tl from"react-native-web";import{unstable_createElement as Il,NativeModules as El,AccessibilityInfo as Rl,Appearance as Bl,AppRegistry as Vl,AppState as Al,BackHandler as Dl,Clipboard as Ml,Dimensions as zl,Easing as Pr,I18nManager as Kl,Keyboard as Ol,InteractionManager as Ll,LayoutAnimation as Pl,Linking as Fl,NativeEventEmitter as Wl,PanResponder as $l,PixelRatio as _l,Platform as Nl,Share as Hl,UIManager as ql,Vibration as jl,CheckBox as Ul,FlatList as tn,Image as Gl,ImageBackground as Jl,KeyboardAvoidingView as Yl,Picker as Ql,ProgressBar as Zl,RefreshControl as Xl,SafeAreaView as es,SectionList as ts,StatusBar as rs,Touchable as os,TouchableNativeFeedback as ns,VirtualizedList as as,YellowBox as is,LogBox as ls,DeviceEventEmitter as ss,useColorScheme as cs,useLocaleContext as ds,useWindowDimensions as us}from"react-native-web";import*as We from"react-native-web";import{createElement as rn,forwardRef as ea,useCallback as ys,useRef as gs}from"react";E();import{useEffect as ps,useState as fs}from"react";import{createPortal as ms}from"react-dom";E();var hs='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as bs}from"react/jsx-runtime";var Fr=Symbol.for("@buoy-gg/portal-host"),ta=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 ra(){let e=document;if(e[Fr])return e[Fr].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:hs});let r=()=>{let s=document.fullscreenElement,g=s&&s.tagName!=="CANVAS"?s:document.body;t.parentElement!==g&&g.appendChild(t)},o=new Map,n=s=>{(!t.contains(s.target)||!ta(s.target))&&o.set(s.code||s.key,{key:s.key,code:s.code,location:s.location,keyCode:s.keyCode,which:s.which,altKey:s.altKey,ctrlKey:s.ctrlKey,metaKey:s.metaKey,shiftKey:s.shiftKey})},a=s=>{o.delete(s.code||s.key)},i=()=>o.clear(),y=()=>{let s=[...o.values()];o.clear();for(let g of s)document.dispatchEvent(new KeyboardEvent("keyup",{...g,bubbles:true}))},d=s=>{ta(s.target)&&s.stopPropagation()},p=s=>s.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",p,{passive:true}),e[Fr]={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[Fr]}},t}function vs({children:e}){let[t,r]=fs(null);return ps(()=>{let o=ra(),n=document[Fr];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?ms(bs("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}var cr=We,Ss=["shadowColor","shadowOffset","shadowOpacity","shadowRadius","textShadowColor","textShadowOffset","textShadowRadius"],dr=e=>typeof e=="number"?`${e}px`:e;function on(e){if(Array.isArray(e)){let g=e.map(on);return g.some((f,C)=>f!==e[C])?g:e}if(!e||typeof e!="object"||!Ss.some(g=>e[g]!=null))return e;let{shadowColor:t,shadowOffset:r,shadowOpacity:o,shadowRadius:n,textShadowColor:a,textShadowOffset:i,textShadowRadius:y,...d}=e;if(t!=null||r!=null||o!=null||n!=null){let g=t??"black",f=o==null?g:`color-mix(in srgb, ${g} ${Math.min(o,1)*100}%, transparent)`,C=`${dr(r?.width??0)} ${dr(r?.height??0)} ${dr(n??0)} ${f}`;d.boxShadow=typeof d.boxShadow=="string"?`${d.boxShadow}, ${C}`:d.boxShadow??C}let{width:p=0,height:s=0}=i??{};if(a&&(p||s||y)){let g=`${dr(p)} ${dr(s)} ${dr(y??0)} ${a}`;d.textShadow=d.textShadow?`${d.textShadow}, ${g}`:g}return d}var ws=cr.StyleSheet.create({auto:{pointerEvents:"auto"},none:{pointerEvents:"none"},"box-none":{pointerEvents:"box-none"},"box-only":{pointerEvents:"box-only"}});function oa(e,t){if(typeof e=="function")return o=>oa(e(o),t);let r=on(e);return t?[r,ws[t]]:r}var pe={...cr.StyleSheet,create:e=>cr.StyleSheet.create(Object.fromEntries(Object.entries(e).map(([t,r])=>[t,on(r)])))};function nt(e){let t=ea((o,n)=>{let{accessibilityState:a,accessibilityValue:i,pointerEvents:y,...d}=o;for(let s of["busy","checked","disabled","expanded","selected"])a?.[s]!==void 0&&d[`aria-${s}`]===void 0&&(d[`aria-${s}`]=a[s]);for(let[s,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[s]!==void 0&&d[`aria-${g}`]===void 0&&(d[`aria-${g}`]=i[s]);let p=oa(d.style,y);return p!==d.style&&(d.style=p),rn(e,{...d,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=nt(We.View),u=nt(We.Text),Yt={...cr.Animated,View:cr.Animated.createAnimatedComponent(l),Text:cr.Animated.createAnimatedComponent(u)},ks=nt(We.TextInput),O=nt(We.TouchableOpacity),Cs=nt(We.TouchableHighlight),xs=nt(We.TouchableWithoutFeedback),Ts=nt(We.Pressable),Wr=nt(We.ScrollView),na=ea((e,t)=>{let r=gs(null),o=ys(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"}),ra().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return rn(vs,null,rn(We.Modal,{...e,ref:o}))});na.displayName="Modal";var aa=nt(na),Is=nt(We.Switch),Es=nt(We.ActivityIndicator),Rs=nt(We.Button),Bs=We.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 p=document.createElement("p");p.textContent=t,p.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(p)}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 p of y){let s=document.createElement("button");s.type="button",s.textContent=p.text??"OK",s.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${p.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,s.onclick=()=>{d(),p.onPress?.()},i.appendChild(s)}n.addEventListener("cancel",p=>{p.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};mt();import{JsModal as Vs,ModalHeader as Me,TabSelector as As,parseValue as Ds,devToolsStorageKeys as ur,macOSColors as Ms,night as $e,ToolEmptyState as zs,Filter as Ks,RefreshCw as Os,Search as Ls,SearchBar as Ps,PowerToggleButton as Fs,ToolbarCopyButton as ia,ToolbarClearButton as Ws,truncatePayload as yo,TickProvider as la,useLimit as $s,TIER_LIMITS as _s,windowDragProps as Ns,usePersistedState as go,monoFont as po}from"@buoy-gg/shared-ui/web";E();E();E();lo();var ae=zr()?{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 Xe,useState as Qt,useEffect as yr,useRef as nn}from"react";import{absoluteFill as sa,useLimit as ca,TIER_LIMITS as Hs,monoFont as $r}from"@buoy-gg/shared-ui/web";import{Database as da,Zap as qs,ProBadge as ua,ProUpgradeModal as js,ToolEmptyState as Us,resolveListEmptyState as Gs}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";E();import{useCallback as ya,useState as Js}from"react";E();import{memo as Ys}from"react";import{macOSColors as fe,night as ce,CompactRow as Qs,TypeBadge as ga,HardDrive as Zs,Square as Xs,CheckSquare as ec,Edit3 as tc,EyeOff as rc,Pin as pa,Trash2 as oc,ExpandedInfoRow as an,PillBadge as _r,monoFont as gr}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as fo}from"@buoy-gg/shared-ui/web";var nc=new Set(["sessionStorage","localStorage"]);function ln(e,t){switch(e){case"mmkv":return t&&!nc.has(t)?"MMKV":ae.mmkv;case"async":return ae.async;case"secure":return"Secure";default:return e}}function fa(e){switch(e){case"mmkv":return fo.info;case"async":return fo.warning;case"secure":return fo.success;default:return fo.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 ma(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 ac=40;function ic(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>ac?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function lc(e){let t=Dt(e),r=ic(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as sc}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as cc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var ha=[fe.semantic.info,fe.semantic.success,fe.semantic.warning,fe.semantic.debug,"#FF6B9D","#00D9FF"];function ba(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ha[t%ha.length]}var va=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)}}},dc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),uc=Ys(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:y,onHideKey:d,isPinned:p=false,onTogglePin:s,onEditKey:g,onToggleKey:f,onDeleteKey:C,editBlockedReason:m}){let b=g!=null&&m==null,S=va(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=ln(e.storageType,e.instanceId),D=ma(e.value),x=D!==null&&typeof D=="object",B=Ve(l,{style:$.expandedContainer,children:[W(an,{label:"Storage",children:W(_r,{color:sn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(an,{label:"Instance",children:W(_r,{color:ba(e.instanceId),icon:W(Zs,{size:9,color:ba(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(an,{label:"Updates",children:[W(_r,{color:fe.semantic.warning,children:String(i)}),i>1&&y&&W(O,{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"})})]}),x?W(l,{style:$.dataViewerContainer,children:W(sc,{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:dc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(cc,{children:[Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Type:"}),W(ga,{type:Dt(e.value)})]}),Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Expected:"}),W(ga,{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,m?Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Edit:"}),W(u,{style:$.expandedDescription,children:m})]}):null,s||d||b?Ve(l,{style:$.actionRow,children:[b?Ve(O,{style:$.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&f?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&f?f(e):g?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(tc,{size:13,color:ce.color.onAccent}),W(u,{style:$.editButtonText,children:T&&f?"Toggle":"Edit"})]}):null,s?Ve(O,{style:[$.actionChip,p&&$.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:p?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>s(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(pa,{size:12,active:p,color:ce.color.accent}),W(u,{style:[$.actionChipText,{color:ce.color.accent}],children:p?"Unpin":"Pin to top"})]}):null,d?Ve(O,{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(rc,{size:12,color:ce.color.warning}),W(u,{style:[$.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&C?Ve(O,{style:[$.actionChip,$.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>C(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(oc,{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(O,{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(ec,{size:18,color:ce.color.accent}):W(Xs,{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):lc(e.value):void 0,secondaryAccessory:T?W(_r,{size:"sm",color:e.value?fe.semantic.success:fe.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:$.badgeRow,children:[p&&W(pa,{size:12,active:true,color:ce.color.accent}),W(_r,{color:sn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${R} ${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(u,{style:[$.absCountText,{color:fe.semantic.warning}],children:String(i)})})]})]})}),sn=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:gr},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:gr,flex:1},expandedExpected:{fontSize:11,color:fe.semantic.warning,fontFamily:gr,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:gr},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:gr},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:gr,color:ce.color.accent}});import{SectionHeader as pr,night as cn}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as mo}from"react/jsx-runtime";function dn(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function Sa({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:y,eventCountByKey:d,onViewHistory:p,onHideKey:s,pinnedKeys:g,onTogglePin:f,onEditKey:C,onToggleKey:m,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=ya(B=>dn(B),[]),[R,D]=Js(null),x=ya(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"?mo(l,{style:Nr.sectionContainer,children:[mo(pr,{children:[Ct(pr.Title,{children:e}),Ct(pr.Badge,{count:0,color:n})]}),Ct(l,{style:Nr.emptySection,children:Ct(u,{style:Nr.emptySectionText,children:o})})]}):r.length===0?null:mo(l,{style:Nr.sectionContainer,children:[e?mo(pr,{children:[Ct(pr.Title,{children:e}),t>=0&&Ct(pr.Badge,{count:t,color:n})]}):null,Ct(l,{style:Nr.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(uc,{storageKey:B,isExpanded:!a&&R===Q,onPress:x,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:y,eventCount:d?.[B.key],onViewHistory:p?()=>p(B.key):void 0,onHideKey:s,onEditKey:C,onToggleKey:m,onDeleteKey:b,editBlockedReason:S?.(B),isPinned:g?.has(B.key),onTogglePin:f})},Q)})})]})}var Nr=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:cn.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:cn.color.border,alignItems:"center"},emptySectionText:{color:cn.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as yc,useMemo as wa,useRef as ka,useState as Ca}from"react";import{EyeOff as gc,FileJson as pc,HardDrive as fc,night as J,macOSColors as fr,Pin as mc,PillBadge as ho,Trash2 as hc,TypeBadge as bc,useSafeAreaInsets as vc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as Sc,LiveExplorer as wc,ValueEditModal as kc,updateNestedDataByPath as Cc,deleteNestedDataByPath as xc}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as L,jsxs as me}from"react/jsx-runtime";var Tc=300,ht="buoy-storage-detail";function Ic(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 xa=[fr.semantic.info,fr.semantic.success,fr.semantic.warning,fr.semantic.debug,"#FF6B9D","#00D9FF"];function Ta(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return xa[t%xa.length]}function Ec({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:y=false,onTogglePin:d,applySafeAreaInset:p}){let s=vc(),g=p?s.bottom:0,f=t==null,C=va(e.status),m=ln(e.storageType,e.instanceId),[b,S]=Ca(false),[w,T]=Ca(0),I=ka(null),R=wa(()=>ma(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 x=I.current?I.current.value:R,B=yc(q=>{let ue=typeof q=="string"?q:JSON.stringify(q);I.current={raw:ue,value:q},o(ue).catch(te=>{I.current=null,Ie.alert("Couldn't save",te instanceof Error?te.message:String(te))})},[o]),Q=ka(x);Q.current=x;let ve=wa(()=>{if(f)return{update:(q,ue)=>{let te=q.length===0?ue:Cc(Q.current,q,ue);B(te)},remove:q=>{q.length!==0&&B(xc(Q.current,q))}}},[f,B]),Se=d||i||f&&a;return me(l,{style:A.screen,children:[L(l,{testID:`${ht}-key`,accessibilityLabel:e.key}),me(Wr,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+g}],keyboardShouldPersistTaps:"handled",children:[L(l,{style:A.section,children:me(l,{style:A.editorContainer,children:[me(l,{style:A.sectionHeaderRow,children:[L(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),f?me(O,{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:[L(pc,{size:13,color:J.color.accent}),L(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),me(l,{style:A.sectionBody,children:[L(wc,{editable:f,label:"Value",value:x,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:Ic,debounceMs:Tc}),f?L(u,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):L(u,{style:A.blockedText,testID:`${ht}-edit-blocked`,children:t})]})]})}),L(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[L(u,{style:A.sectionHeaderPlain,children:"Key Details"}),me(l,{style:A.infoBody,children:[me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Status:"}),L(ho,{color:C.color,testID:`${ht}-status`,children:C.label}),L(u,{style:A.infoDim,children:C.sublabel})]}),me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Storage:"}),L(ho,{color:sn(e.storageType),testID:`${ht}-backend`,children:m}),L(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Instance:"}),L(ho,{color:Ta(e.instanceId),icon:L(fc,{size:9,color:Ta(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Updates:"}),L(ho,{color:fr.semantic.warning,children:String(r)}),r>1&&n&&L(O,{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:L(u,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Expected:"}),L(bc,{type:e.expectedType}),me(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Expected:"}),L(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Info:"}),L(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),L(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[L(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),L(l,{style:A.viewerBody,testID:`${ht}-viewer`,children:x!==null&&typeof x=="object"?L(Sc,{title:"",data:x,showTypeFilter:true,rawMode:true,initialExpanded:false}):L(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?me(l,{style:A.actionRow,children:[d?me(O,{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:[L(mc,{size:12,active:y,color:J.color.accent}),L(u,{style:[A.actionChipText,{color:J.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,i?me(O,{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:[L(gc,{size:12,color:J.color.warning}),L(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,f&&a?me(O,{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:[L(hc,{size:12,color:J.color.danger}),L(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&f?L(kc,{path:[],value:x,onSave:q=>{B(q),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:fr.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();E();function Ia(){return ae.hasSecure||ee.count()>0}import{macOSColors as un,night as zt,monoFont as Rc}from"@buoy-gg/shared-ui/web";import{jsx as yn,jsxs as Bc}from"react/jsx-runtime";var Vc=[{id:"all",label:"All Types",color:null},{id:"async",label:ae.async,color:un.semantic.warning},{id:"mmkv",label:ae.mmkv,color:un.semantic.info},{id:"secure",label:"Secure",color:un.semantic.success}];function gn({active:e,onChange:t,counts:r}){return yn(l,{style:Hr.row,children:Vc.filter(o=>Ia()||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??zt.color.accent;return Bc(O,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[Hr.pill,{borderColor:zt.color.border},n&&[Hr.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:zt.color.accentSoft,borderColor:zt.color.accentBorderStrong}]],children:[yn(u,{style:[Hr.label,n&&{color:a,fontWeight:"600"}],children:o.label}),yn(u,{style:[Hr.value,{color:n?a:zt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function Ea(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var Hr=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:Rc,lineHeight:14}});import{macOSColors as Kt,night as Pe,monoFont as Ac}from"@buoy-gg/shared-ui/web";E();function pn(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function Dc(){return null}function Ra(){return"Session storage is unavailable in this browser context."}import{jsx as Zt,jsxs as qr}from"react/jsx-runtime";var jy=pn();function Mc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:y="all",onStorageTypeChange:d,showStatus:p=true}){let s=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 qr(l,{style:Ne.container,children:[p?qr(l,{style:Ne.filtersRow,children:[qr(O,{style:[Ne.filterChip,a==="all"&&[Ne.filterChipActive,{backgroundColor:Pe.color.accentSoft,borderColor:Pe.color.accentBorderStrong,shadowColor:Pe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Zt(u,{style:[Ne.filterValue,{color:Pe.color.text}],children:s.validCount}),Zt(u,{style:Ne.filterLabel,children:"Valid"})]}),qr(O,{style:[Ne.filterChip,a==="missing"&&[Ne.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:[Zt(u,{style:[Ne.filterValue,{color:s.missingCount>0?Kt.semantic.error:Pe.color.textTertiary}],children:s.missingCount}),Zt(u,{style:Ne.filterLabel,children:"Missing"})]}),qr(O,{style:[Ne.filterChip,a==="issues"&&[Ne.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:[Zt(u,{style:[Ne.filterValue,{color:s.issuesCount>0?Kt.semantic.warning:Pe.color.textTertiary}],children:s.issuesCount}),Zt(u,{style:Ne.filterLabel,children:"Issues"})]})]}):null,d&&Zt(gn,{active:y,onChange:d,counts:{all:s.totalCount,async:s.asyncCount,mmkv:s.mmkvCount,secure:s.secureCount}})]})}var Ne=pe.create({container:{backgroundColor:Pe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Pe.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:Pe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Pe.color.border,marginHorizontal:4},subtitleText:{color:Pe.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:Pe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Pe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Pe.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:Pe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Ac,lineHeight:20}});E();mt();Jt();import{isDevToolsStorageKey as zc}from"@buoy-gg/shared-ui/web";import{useState as fn,useEffect as Kc,useCallback as Oc,useRef as Lc}from"react";E();function Ot(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function mn(e=[]){let[t,r]=fn([]),[o,n]=fn(true),[a,i]=fn(null),y=JSON.stringify(e),d=Lc(e);d.current=e;let p=Oc(async()=>{let s=d.current;n(true),i(null);try{let g=(await oe.getAllKeys()).filter(m=>!zc(m));if(!g||g.length===0){r([]),n(false);return}let f=await so(g),C=[];f.forEach(([m,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=s.find(R=>Ot(R,"async")?typeof R=="string"?R===m:R.key===m: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:m,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}};C.push(I)}),s.forEach(m=>{if(!Ot(m,"async"))return;let b=typeof m=="string"?m:m.key;C.some(S=>S.key===b)||C.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof m=="object"&&m.expectedValue!==void 0&&{expectedValue:m.expectedValue},...typeof m=="object"&&m.expectedType!==void 0&&{expectedType:m.expectedType},...typeof m=="object"&&m.description!==void 0&&{description:m.description}})}),r(C)}catch(g){i(g instanceof Error?g:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[y]);return Kc(()=>{p()},[p]),{storageKeys:t,isLoading:o,error:a,refresh:p}}E();lo();import{isDevToolsStorageKey as Pc,appStorageEvent as Fc}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as Wc}from"@buoy-gg/shared-ui/web/utils";var hn=new Set,bo,Ba=false,$c=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Va=e=>Pc(e)||[...$c].some(t=>e.startsWith(t));function Aa(e){let t=Fc(e);if(t){e=t;for(let r of[...hn])try{r(e)}catch{}}}async function _c(){if(!(bo||typeof window>"u")){if(zr()){bo=el(e=>{Ba||Aa(e)});return}bo=Wc(e=>{if(Ba||e.area!=="localStorage"||e.key!==void 0&&Va(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!Va(n))),Aa({action:r,data:o,timestamp:new Date})})}}function Da(e){return hn.add(e),()=>{hn.delete(e)}}function Nc(){return!!bo}E();import{isDevToolsStorageKey as Ma}from"@buoy-gg/shared-ui/web";import{useState as mr,useEffect as za,useCallback as Ka,useRef as Oa}from"react";function Hc(e,t,r=[]){let[o,n]=mr([]),[a,i]=mr(true),[y,d]=mr(null),p=JSON.stringify(r),s=Oa(r);s.current=r;let g=Ka(()=>{let f=s.current;i(true),d(null);try{if(!e){n([]),i(false);return}let C=e.getAllKeys().filter(b=>!Ma(b));if(!C||C.length===0){let b=f.filter(S=>Ot(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 m=[];C.forEach(b=>{let{value:S,type:w}=kt(e,b),T=f.find(D=>Ot(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=Qo(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}};m.push(R)}),f.forEach(b=>{if(!Ot(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;m.some(w=>w.key===S)||m.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(m)}catch(C){d(C instanceof Error?C:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,p]);return za(()=>{g()},[g]),{storageKeys:o,isLoading:a,error:y,refresh:g}}function La(e,t=[]){let[r,o]=mr([]),[n,a]=mr(true),[i,y]=mr(null),d=JSON.stringify(t),p=Oa(t);p.current=t;let s=Ka(()=>{let g=p.current;a(true),y(null);try{let f=[];e.forEach(({instance:C,id:m})=>{let b=C.getAllKeys().filter(S=>!Ma(S));!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=kt(C,S),I=g.find(x=>Ot(x,"mmkv")?typeof x=="string"?x===S:x.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=Qo(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:m,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}};f.push(D)})}),g.forEach(C=>{if(!Ot(C,"mmkv"))return;let m=typeof C=="string"?C:C.key;if(!f.some(b=>b.key===m)){let b=e[0]?.id||"mmkv.default";f.push({key:m,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof C=="object"&&C.expectedValue!==void 0&&{expectedValue:C.expectedValue},...typeof C=="object"&&C.expectedType!==void 0&&{expectedType:C.expectedType},...typeof C=="object"&&C.description!==void 0&&{description:C.description}})}}),o(f)}catch(f){y(f instanceof Error?f:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return za(()=>{s()},[s]),{storageKeys:r,isLoading:n,error:i,refresh:s}}E();import{isDevToolsStorageKey as qc}from"@buoy-gg/shared-ui/web";import{useState as bn,useEffect as jc,useCallback as Pa,useRef as vo}from"react";var Uc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Gc=3e3;function Fa(e){return JSON.stringify(e)}function Jc(e=[],t={}){let{pollMs:r=Gc}=t,o=vo(e);o.current=e;let n=JSON.stringify(e),[a,i]=bn([]),[y,d]=bn(true),[p,s]=bn(null),g=vo(Fa([])),f=vo(false),C=vo(false),m=Pa(S=>{let w=Fa(S);w!==g.current&&(g.current=w,i(S))},[]),b=Pa(async()=>{if(!C.current){C.current=true;try{let S=ee.getModule(),w=ee.getAll().filter(({key:x})=>!qc(x)),T=o.current.filter(x=>Ot(x,"secure")),I=x=>T.find(B=>(typeof B=="string"?B:B.key)===x);if(!S||w.length===0&&T.length===0){m([]),f.current=true,d(false);return}f.current||d(true),s(null);let R=[],D=[...w,...T.map(x=>typeof x=="string"?x:x.key).filter(x=>!w.some(B=>B.key===x)).map(x=>({key:x,options:{},description:void 0}))];for(let x of D){let B=I(x.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??x.description;if(x.options.requireAuthentication){R.push({key:x.key,value:Uc,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,...x.options.keychainService&&{instanceId:x.options.keychainService}});continue}let q=null;try{q=await S.getItemAsync(x.key,x.options)}catch{}if(q===null&&!B)continue;let ue=q;if(q)try{ue=JSON.parse(q)}catch{ue=q}let te="optional_present";if(B)if(q===null)te="required_missing";else if(Q?.expectedValue!==void 0)te=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,Ge=Q.expectedType.toLowerCase();te=se===Ge||Ge==="string"&&typeof q=="string"?"required_present":"required_wrong_type"}else te="required_present";R.push({key:x.key,value:q===null?void 0:ue,storageType:"secure",status:te,category:B?"required":"optional",...Se&&{description:Se},...ve,...x.options.keychainService&&{instanceId:x.options.keychainService}})}m(R)}catch(S){s(S instanceof Error?S:new Error("Failed to read SecureStore")),m([])}finally{f.current=true,C.current=false,d(false)}}},[m,n]);return jc(()=>{b();let S=ee.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:y,error:p,refresh:b}}E();import{isDevToolsStorageKey as vn}from"@buoy-gg/shared-ui/web";import{useState as So,useEffect as wo}from"react";function Sn(e=false){let[t,r]=So([]),[o,n]=So(true),a=()=>{n(true);try{let i=Le.getAll().filter(({id:y})=>!vn(y)).map(y=>{let{instance:d,id:p,encrypted:s,readOnly:g}=y,f=d.getAllKeys().filter(C=>!vn(C))?.length||0;return{id:p,instance:d,encrypted:s,readOnly:g,keyCount:f,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return wo(()=>{a()},[]),wo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Wa(e){let[t,r]=So(null);return wo(()=>{if(!Le){r(null);return}let o=Le.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!vn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function Yc(e){let[t,r]=So(false);return wo(()=>{if(!Le){r(false);return}r(Le.has(e))},[e]),t}E();import{useEffect as Qc,useRef as $a}from"react";import{Check as Zc,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as hr,jsxs as Xc}from"react/jsx-runtime";var ed=2600,_a=180;function td({onDone:e}){let t=$a(new Yt.Value(0)).current,r=$a(e);return r.current=e,Qc(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:_a,easing:Pr.out(Pr.quad),useNativeDriver:true}),Yt.delay(ed),Yt.timing(t,{toValue:0,duration:_a,easing:Pr.in(Pr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),hr(Yt.View,{pointerEvents:"box-none",style:[br.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Xc(O,{activeOpacity:.85,onPress:()=>r.current(),style:br.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[hr(l,{style:br.tick,children:hr(Zc,{size:10,color:Xt.semantic.success})}),hr(u,{style:br.saved,children:"Saved"}),hr(l,{style:br.divider}),hr(u,{style:br.detail,children:"applies on next launch"})]})})}var br=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}});E();import{useState as rd,useEffect as od}from"react";mt();import{Trash2 as ko,CopyButton as nd,SquareDashed as ad,X as id,ProUpgradeModal as ld,monoFont as sd}from"@buoy-gg/shared-ui/web";import{macOSColors as Na,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as cd}from"@buoy-gg/license/web";import{jsx as He,jsxs as Ha}from"react/jsx-runtime";function dd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[y,d]=rd(false),p=cd();od(()=>{y&&p&&d(false)},[y,p]);let s=()=>{if(!p){d(true);return}Ie.alert(`Clear ${ae.asyncFull}`,`Delete all ${ae.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}`)}}}])},g=(R,D)=>{if(!p){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 x=t.find(B=>B.id===R);x&&(x.instance.clearAll(),o?.())}catch(x){Ie.alert("Error",`Failed: ${x}`)}}}])},f=()=>{if(!p){d(true);return}Ie.alert(`Clear All ${ae.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}`)}}}])},C=()=>{if(!p){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}`)}}}])},m=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=m&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Ha(l,{style:bt.container,children:[a&&He(O,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Ha(l,{style:bt.selectModeActiveContainer,children:[He(id,{size:14,color:at.color.accent}),i>0&&He(u,{style:bt.selectedCountText,children:i})]}):He(ad,{size:16,color:at.color.textSecondary})}),!n&&He(nd,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:Na.semantic.success,error:Na.semantic.error}}),!n&&S&&He(O,{onPress:C,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),!n&&w&&He(O,{onPress:s,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ae.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),!n&&I&&He(O,{onPress:f,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ae.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&He(O,{onPress:()=>g(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ae.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),He(ld,{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:sd}});E();import{useState as ud,useEffect as yd}from"react";import{Trash2 as gd,CopyButton as pd,CheckSquare as fd,EyeOff as md,ProUpgradeModal as hd,monoFont as bd}from"@buoy-gg/shared-ui/web";import{macOSColors as qa,night as qe}from"@buoy-gg/shared-ui/web";import{useIsPro as vd}from"@buoy-gg/license/web";E();Jt();function Sd(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 ja(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 ee.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(p=>p.id===i);d&&y.forEach(p=>Sd(d.instance,p))})}}import{jsx as xt,jsxs as jr}from"react/jsx-runtime";function wd({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[y,d]=ud(false),p=vd();yd(()=>{y&&p&&d(false)},[y,p]);let s=e.length,g=s===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:s,keys:b,timestamp:new Date().toISOString()}},C=()=>{s!==0&&o?.(e)},m=()=>{if(s!==0){if(!p){d(true);return}Ie.alert("Delete Selected Keys",`Delete ${s} selected key${s>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await ja(e,t),r?.()}catch(b){Ie.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return s===0?null:jr(l,{style:vt.container,children:[jr(l,{style:vt.leftSection,children:[jr(O,{style:vt.selectAllButton,onPress:g?a:n,testID:"buoy-storage-select-all",accessibilityLabel:g?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(fd,{size:14,color:g?qe.color.accent:qe.color.textSecondary}),xt(u,{style:vt.selectAllText,children:g?"Deselect All":"Select All"})]}),xt(l,{style:vt.countBadge,children:jr(u,{style:vt.countText,children:[s," selected"]})})]}),jr(l,{style:vt.actionsSection,children:[xt(pd,{value:f(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:qe.color.accent,success:qa.semantic.success,error:qa.semantic.error}}),o&&xt(O,{style:vt.actionButton,onPress:C,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(md,{size:14,color:qe.color.warning})}),xt(O,{style:vt.actionButton,onPress:m,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(gd,{size:14,color:qe.color.danger})})]}),xt(hd,{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:bd},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 wn=new Set;function kd(e){return wn.add(e),()=>{wn.delete(e)}}function Cd(){wn.forEach(e=>{try{e()}catch{}})}E();mt();function kn(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(ee.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(!ee.getModule())return"No SecureStore module is registered."}return null}function Ua(e,t){if(e.storageType==="mmkv"){let r=Qa(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(Ja(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function xd(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 Ga(e,t,r=[]){let o=kn(e,r);if(o)throw new Error(o);let n=Ua(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Ya(e,t));return}case"secure":{await ee.setValue(e.key,Ya(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,Td(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function Ja(e){return e!==null&&typeof e=="object"}function Ya(e,t){return Ja(e.value)?JSON.stringify(JSON.parse(t)):t}function Qa(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function Td(e,t){switch(Qa(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as vr,macOSColors as Co,night as F,HardDrive as Za}from"@buoy-gg/shared-ui/web";import{useIsPro as Id}from"@buoy-gg/license/web";import{Fragment as Ed,jsx as H,jsxs as Ee}from"react/jsx-runtime";var Xa=[Co.semantic.info,Co.semantic.success,Co.semantic.warning,Co.semantic.debug,"#FF6B9D","#00D9FF"];function Sr(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Xa[t%Xa.length]}var vg=Hs["storage.keys"].free;function Rd({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:p,enabledStorageTypes:s,statusFilter:g,onStatusFilterChange:f,onStatusCountsChange:C,pinnedKeys:m,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let x=Id(),B=ca("storage.keys"),Q=ca("storage.mmkvInstances"),[ve,Se]=Qt(false);yr(()=>{ve&&x&&Se(false)},[ve,x]);let[q,ue]=Qt("all"),te=g!=null&&f!=null,se=te?g:q,Ge=te?f:ue,[Je,wt]=Qt("all"),Rt=S!=null&&w!=null,ye=Rt?S:Je,or=Rt?w:wt,[re,$t]=Qt(null),Ye=nn(null),xr=nn(0),ne=nn(new Map),gt=Xe((c,h)=>{h?ne.current.set(c,h):ne.current.delete(c)},[]),[_t,Tr]=Qt(0),[Nt,Ir]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=Sn(false),{storageKeys:Qr,isLoading:Zr,error:Xr,refresh:Ht}=mn(e),Po=_e(()=>xe.map(c=>({instance:c.instance,id:c.id})),[xe]),{storageKeys:Er,isLoading:Fo,error:Rr,refresh:ar}=La(Po,e),Wo=_e(()=>re?Er.filter(c=>c.instanceId===re):Er,[Er,re]),{storageKeys:qt,isLoading:eo,error:$o,refresh:to}=Jc(e),N=_e(()=>[...Qr,...Wo,...qt].filter(c=>!ze(c.key)),[Qr,Wo,qt]),ke=_e(()=>{if(!I)return null;let c=dn(I);return N.find(h=>dn(h)===c)??I},[I,N]),_o=Zr||Fo||eo,ro=Xr||Rr||$o,Te=Xe(()=>{Ht(),ar(),to()},[Ht,ar,to]),tt=Xe(c=>c.instanceId?`${c.storageType}-${c.instanceId}-${c.key}`:`${c.storageType}-${c.key}`,[]),No=Xe(()=>{Ir(c=>(c&&Bt(new Set),!c))},[]),rt=Xe((c,h)=>{let U=tt(c);Bt(Z=>{let Ze=new Set(Z);return h?Ze.add(U):Ze.delete(U),Ze})},[tt]),Ho=Xe(()=>{Bt(new Set),Ir(false),Te()},[Te]),Br=Xe(c=>{c.forEach(h=>n?.(h.key)),Bt(new Set),Ir(false)},[n]),jt=Xe(async(c,h)=>{if(!x)throw Se(true),new Error("Editing storage values is a Pro feature.");await Ga(c,h,xe),Te(),Tr(U=>U+1)},[x,xe,Te]),qo=Xe(c=>{jt(c,JSON.stringify(!c.value)).catch(h=>{Ie.alert("Couldn't save",h instanceof Error?h.message:String(h))})},[jt]),oo=Xe((c,h)=>{if(!x){Se(true);return}Ie.alert("Delete key",`Delete "${c.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await ja([c],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),h?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[x,xe,Te]),Vr=Xe(c=>kn(c,xe),[xe]),jo=_e(()=>{let c=N,h={valid:c.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:c.filter(G=>G.status==="required_missing").length,issues:c.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:c.length},U=c.filter(G=>G.storageType==="async"),Z=c.filter(G=>G.storageType==="mmkv"),Ze=c.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:Z.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Ze.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);yr(()=>{i&&(i.current=N)},[N,i]),yr(()=>{let c,h=Da(U=>{clearTimeout(c),c=setTimeout(()=>{Ht()},100)});return()=>{clearTimeout(c),h()}},[Ht]),yr(()=>{let c,h=kd(()=>{clearTimeout(c),c=setTimeout(Te,100)});return()=>{clearTimeout(c),h()}},[Te]),yr(()=>{let c,h=Un(U=>{(re===null||U.instanceId===re)&&(clearTimeout(c),c=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(c),h()}},[ar,re]);let Ut=_e(()=>{let c=N,h=c.filter(Z=>!ze(Z.key)),U=c.filter(Z=>ze(Z.key));return{totalCount:c.length,requiredCount:h.filter(Z=>Z.category==="required").length,missingCount:h.filter(Z=>Z.status==="required_missing").length,wrongValueCount:h.filter(Z=>Z.status==="required_wrong_value").length,wrongTypeCount:h.filter(Z=>Z.status==="required_wrong_type").length,presentRequiredCount:h.filter(Z=>Z.status==="required_present").length,optionalCount:h.filter(Z=>Z.category==="optional").length,mmkvCount:c.filter(Z=>Z.storageType==="mmkv").length,asyncCount:c.filter(Z=>Z.storageType==="async").length,secureCount:c.filter(Z=>Z.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let c=N.filter(V=>!ze(V.key));ye!=="all"&&(c=c.filter(V=>V.storageType===ye));let h=c.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=c.filter(V=>V.status==="required_missing").length,Z=c.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Ze=0,G=0,Be=0,Vt=0;return se==="all"?(Ze=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=Ze+G+Be):se==="missing"?(Ze=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=Ze+G+Be):se==="issues"&&(Ze=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=Ze+G+Be),{validCount:h,missingCount:U,issuesCount:Z,asyncCount:Ze,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);yr(()=>{C?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[C,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((c,h)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[c.status]||999)-(U[h.status]||999)}),[N]),Pn=_e(()=>Array.from(new Set(N.map(c=>c.key))).sort(),[N]),Oe=_e(()=>{let c=ir;if(s&&s.size>0&&(c=c.filter(h=>s.has(h.storageType))),c=c.filter(h=>!Array.from(r).some(U=>h.key.includes(U))),a){let h=a.toLowerCase();c=c.filter(U=>U.key.toLowerCase().includes(h))}switch(se){case"all":c=c.filter(h=>h.status==="required_present"||h.status==="optional_present");break;case"missing":c=c.filter(h=>h.status==="required_missing");break;case"issues":c=c.filter(h=>h.status==="required_wrong_type"||h.status==="required_wrong_value");break}if(ye!=="all"&&(c=c.filter(h=>h.storageType===ye)),m&&m.size>0){let h=c.filter(Z=>m.has(Z.key)),U=c.filter(Z=>!m.has(Z.key));c=[...h,...U]}return c},[ir,se,ye,r,a,re,s,m]),v=_e(()=>Oe.slice(0,B),[Oe,B]),k=_e(()=>Math.max(0,Oe.length-B),[Oe.length,B]),z=k>0,j=_e(()=>{let c=Oe.filter(h=>!ze(h.key));return{totalCount:Oe.length,requiredCount:c.filter(h=>h.category==="required").length,missingCount:c.filter(h=>h.status==="required_missing").length,wrongValueCount:c.filter(h=>h.status==="required_wrong_value").length,wrongTypeCount:c.filter(h=>h.status==="required_wrong_type").length,presentRequiredCount:c.filter(h=>h.status==="required_present").length,optionalCount:c.filter(h=>h.category==="optional").length,mmkvCount:Oe.filter(h=>h.storageType==="mmkv").length,asyncCount:Oe.filter(h=>h.storageType==="async").length,secureCount:Oe.filter(h=>h.storageType==="secure").length,devToolsCount:Oe.filter(h=>ze(h.key)).length}},[Oe]),Qe=_e(()=>v.filter(c=>nr.has(tt(c))),[v,nr,tt]),Ar=Xe(()=>{let c=new Set(v.map(tt));Bt(c)},[v,tt]),Dr=Xe(()=>{Bt(new Set)},[]),Mr=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Oi=Mr>=90?"OPTIMAL":Mr>=70?"WARNING":"CRITICAL",Li=Mr>=90?vr.success:Mr>=70?vr.warning:vr.error;if(ke)return H(l,{style:P.root,children:H(Ec,{storageKey:ke,editBlockedReason:Vr(ke),eventCount:y?.[ke.key],onSave:c=>jt(ke,c),onViewHistory:p?()=>p(ke.key):void 0,onDeleteKey:c=>oo(c,()=>D?.()),onHideKey:c=>{Br([c]),D?.()},isPinned:m?.has(ke.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(_o&&N.length===0)return Ee(l,{style:P.emptyState,children:[H(da,{size:48,color:F.color.textTertiary}),H(u,{style:P.emptyTitle,children:"Loading storage keys..."})]});if(ro)return Ee(l,{style:P.emptyState,children:[H(da,{size:48,color:vr.error}),H(u,{style:[P.emptyTitle,{color:vr.error}],children:"Error loading storage"}),H(u,{style:P.emptySubtitle,children:ro.message})]});let Pi=Ee(Ed,{children:[ye==="mmkv"&&xe.length===0&&Ee(l,{style:P.emptyMMKVState,children:[H(u,{style:P.emptyMMKVTitle,children:"No MMKV Instances Detected"}),H(u,{style:P.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),H(u,{style:P.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
1
|
+
"use client";var Jo=Object.defineProperty;var Ui=Object.getOwnPropertyDescriptor;var Gi=Object.getOwnPropertyNames;var Ji=Object.prototype.hasOwnProperty;var io=(e,t)=>()=>(e&&(t=e(e=0)),t);var $n=(e,t)=>{for(var r in t)Jo(e,r,{get:t[r],enumerable:true})},Yo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Gi(t))!Ji.call(e,n)&&n!==r&&Jo(e,n,{get:()=>t[n],enumerable:!(o=Ui(t,n))||o.enumerable});return e},Yi=(e,t,r)=>(Yo(e,t,"default"),r&&Yo(r,t,"default"));var Qi=e=>Yo(Jo({},"__esModule",{value:true}),e);var Zi,E=io(()=>{"use strict";Zi=(()=>{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 Xi,installCapacitorBridge as el,interceptCapacitor as tl,isCapacitorNative as rl}from"@buoy-gg/license/web";function zr(){return rl()&&Xi(ft)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Or))try{o(r)}catch{}}function ol(e){return Or.add(e),nl(),()=>{Or.delete(e)}}async function lr(e){let{value:t}=await Gt(ft,"get",{key:e});return t??null}async function Qo(){let{keys:e}=await Gt(ft,"keys");return Array.isArray(e)?e:[]}async function lo(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function nl(){Zo||!zr()||!el()||(Zo=true,tl({plugin:ft,methods:["set","remove","clear"],promise:async(e,t)=>{if(Or.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Qo().catch(()=>[]),d=await t();return At("clear",{keys:await i}),d}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 _n(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?_n(r[o],n):n;return r}function Nn(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var ft,Or,Zo,so,co=io(()=>{"use strict";E();ft="Preferences";Or=new Set;Zo=false;so={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(ft,"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(ft,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await lo(await Qo()).catch(()=>{});await Gt(ft,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Qo()},multiGet(e){return lo(e)},async multiSet(e){let t=lo(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(ft,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=lo(e).catch(()=>{});await Promise.all(e.map(r=>Gt(ft,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await so.setItem(e,JSON.stringify(_n(Nn(r),Nn(t))))},async multiMerge(e){for(let[t,r]of e)await so.mergeItem(t,r)}}});import al from"@buoy-gg/shared-ui/web/asyncStorage";var lt,Hn,oe,mt=io(()=>{"use strict";E();co();lt=()=>zr()?so:al,Hn={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=Hn});var qn={};$n(qn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>jn,default:()=>Un,readMany:()=>uo,removeMany:()=>sr,writeMany:()=>Pr});async function uo(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 Pr(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,jn,Un,Jt=io(()=>{"use strict";E();mt();Fe=oe,jn={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};Un=Fe});E();E();mt();Jt();import{classifyPreviewItem as il,createRestoreScope as ll,emptyRestoreResult as Gn,failedRestore as sl,isDevToolsStorageKey as we,registerStateSnapshotProvider as cl,unionKeys as yo,wontApply as Lr}from"@buoy-gg/shared-ui/web";E();mt();Jt();import{isDevToolsStorageKey as dl}from"@buoy-gg/shared-ui/web";async function go(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!dl(r));t.length!==0&&await sr(t)}async function ul(){await oe.clear()}E();E();import{isDevToolsStorageKey as yl}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 gl(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 Xo(e,t){return e===t}var pl=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(yl(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),d=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let p={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:d,success:true}};this.emit(p)}else{o.set(n,a);let p={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:d,valueType:i,success:true}};this.emit(p)}})}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}},en=new pl;var Jn=e=>en.addListener(e);var fl=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 fl;function Yn(e,t,r){Pe.register(e,t,r),en.addInstance(t,e)}function Qn(e){en.removeInstance(e),Pe.unregister(e)}E();var ml=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)}},ee=new ml;function hl(e,t){ee.register(e,t)}function bl(e){ee.unregister(e)}function Zn(e,t){e.remove?e.remove(t):e.delete?.(t)}function vl(){return{canCapture:true,canRestore:true}}async function Xn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await uo(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:d}of Pe.getAll().filter(({id:p})=>!we(p)))try{o[i]=d.getAllKeys().filter(p=>!we(p)).map(p=>{let{value:f,type:l}=kt(d,p);return l==="buffer"&&e.push(`mmkv "${i}"/"${p}": ArrayBuffer value not capturable`),{key:p,value:f,valueType:l}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=ee.getModule();for(let{key:i,options:d}of ee.getAll().filter(({key:p})=>!we(p))){if(d.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let p=null;if(a)try{p=await a.getItemAsync(i,d)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=p}return{data:{async:r,mmkv:o,secure:n},warnings:e}}function Fr(e){return`mmkv:${e.replace(/%/g,"%25").replace(/\//g,"%2F")}`}function cr(e,t){return`${Fr(e)}/${t}`}function ea(e,t){if(!e)return;let r=Object.keys(t).filter(a=>Fr(a)!==`mmkv:${a}`);if(r.length===0)return[...e];let o=new Set(Object.entries(t).flatMap(([a,i])=>i.map(d=>cr(a,d.key)))),n=new Set(e);for(let a of e)if(!o.has(a))for(let i of r){let d=`mmkv:${i}/`;a.startsWith(d)&&n.add(cr(i,a.slice(d.length)))}return[...n]}async function Sl(){let{data:e,warnings:t}=await Xn();return{data:e,warnings:t}}async function wl(e,t){let r=e,o=r?.mmkv??{},n=ll({excludeKeys:ea(t?.excludeKeys,o),includeKeys:ea(t?.includeKeys,o)}),a=n.touch,i=Gn();if(!r)return sl("empty storage snapshot");try{let l=(r.async??[]).filter(([v])=>!we(v)&&a(`async:${v}`)),y=new Set(l.map(([v])=>v)),g=(await oe.getAllKeys()).filter(v=>!we(v)).filter(v=>!y.has(v)&&a(`async:${v}`));n.countExcluded((r.async??[]).length-l.length),g.length>0&&await sr(g),l.length>0&&await Pr(l),i.applied+=l.length+g.length}catch(l){i.ok=false,i.warnings.push(`asyncstorage restore failed: ${String(l)}`)}for(let[l,y]of Object.entries(r.mmkv??{})){if(we(l))continue;let g=Pe.get(l);if(!g){i.skipped.push({id:Fr(l),reason:"instance not registered"});continue}if(g.instance.isReadOnly){i.skipped.push({id:Fr(l),reason:"instance registered read-only"});continue}let{instance:v}=g;try{let C=new Set(y.map(m=>m.key)),h=v.getAllKeys().filter(m=>!we(m));for(let m of h)n.allows(cr(l,m))&&(C.has(m)||(Zn(v,m),i.applied+=1));for(let m of y)if(!we(m.key)&&a(cr(l,m.key))){if(m.valueType==="buffer"){i.skipped.push({id:cr(l,m.key),reason:"ArrayBuffer values cannot be restored"});continue}v.set(m.key,m.value),i.applied+=1}}catch(C){i.ok=false,i.warnings.push(`mmkv "${l}" restore failed: ${String(C)}`)}}let d=r.secure??{},p=r.secure===void 0;for(let{key:l,options:y}of p?[]:ee.getAll().filter(({key:g})=>!we(g)))if(n.allows(`secure:${l}`)){if(y.requireAuthentication){l in d&&i.skipped.push({id:`secure:${l}`,reason:"biometric-protected keys are never written"});continue}try{if(l in d){let g=d[l];g===null?await ee.deleteValue(l):await ee.setValue(l,g)}else await ee.deleteValue(l);i.applied+=1}catch(g){i.ok=false,i.warnings.push(`secure "${l}" restore failed: ${String(g)}`)}}for(let l of Object.keys(d))we(l)||a(`secure:${l}`)&&(ee.getAll().filter(({key:y})=>!we(y)).some(y=>y.key===l)||i.skipped.push({id:`secure:${l}`,reason:"key no longer registered with registerSecureStoreKeys"}));let f=n.excludedWarning("item(s)");return f&&i.warnings.push(f),i}async function kl(){let e=Gn();try{await go(),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:Fr(t),reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!we(n)))Zn(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 ee.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 ee.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var Cl=256*1024;function tn(e,t,r,o,n,a){return il({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>Cl,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function xl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Xn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],d=new Map(n.async??[]),p=new Map(r.async??[]);for(let g of yo(d,p))we(g)||a.push(tn(`async:${g}`,g,d.get(g),p.get(g),d.has(g),p.has(g)));for(let g of yo(n.mmkv,r.mmkv)){if(we(g))continue;let v=o?Pe.get(g):null,C=o&&!v,h=o&&v?.instance.isReadOnly===true,m=new Map((n.mmkv?.[g]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[g]??[]).map(T=>[T.key,T]));for(let T of yo(m,w)){if(we(T))continue;let I=cr(g,T),R=`${g} \xB7 ${T}`,D=m.get(T),x=w.get(T),B=tn(I,R,D?.value,x?.value,m.has(T),w.has(T));C?B=Lr(B,"MMKV instance not registered"):h?B=Lr(B,"MMKV instance registered read-only"):(x?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Lr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let f=n.secure??{},l=r.secure??{},y=o?new Map(ee.getAll().filter(({key:g})=>!we(g)).map(g=>[g.key,g])):null;for(let g of yo(f,l)){if(we(g))continue;let v=tn(`secure:${g}`,g,f[g],l[g],g in f,g in l);if(o){let C=y?.get(g);C?C.options.requireAuthentication&&(v=Lr(v,"biometric-protected keys are never written")):v=Lr(v,"key no longer registered with registerSecureStoreKeys")}a.push(v)}return{items:a,notes:i}}cl({id:"storage",label:"Storage",status:vl,capture:Sl,restore:wl,clear:kl,previewItems:xl});E();import{StorageIcon as Tl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as Il,defineToolPreset as El}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as rn,useRef as ta,useMemo as st}from"react";var ra={};$n(ra,{AccessibilityInfo:()=>Al,ActivityIndicator:()=>Vs,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Ml,AppState:()=>Kl,Appearance:()=>Dl,BackHandler:()=>zl,Button:()=>As,CheckBox:()=>Yl,Clipboard:()=>Ol,DeviceEventEmitter:()=>us,Dimensions:()=>Pl,Easing:()=>Wr,FlatList:()=>on,I18nManager:()=>Ll,Image:()=>Ql,ImageBackground:()=>Zl,InteractionManager:()=>Wl,Keyboard:()=>Fl,KeyboardAvoidingView:()=>Xl,LayoutAnimation:()=>$l,Linking:()=>_l,LogBox:()=>ds,Modal:()=>sa,NativeEventEmitter:()=>Nl,NativeModules:()=>Vl,PanResponder:()=>Hl,Picker:()=>es,PixelRatio:()=>ql,Platform:()=>jl,Pressable:()=>Rs,ProgressBar:()=>ts,RefreshControl:()=>rs,SafeAreaView:()=>os,ScrollView:()=>_r,SectionList:()=>ns,Share:()=>Ul,StatusBar:()=>as,StyleSheet:()=>pe,Switch:()=>Bs,Text:()=>u,TextInput:()=>Ts,Touchable:()=>is,TouchableHighlight:()=>Is,TouchableNativeFeedback:()=>ls,TouchableOpacity:()=>O,TouchableWithoutFeedback:()=>Es,UIManager:()=>Gl,Vibration:()=>Jl,View:()=>s,VirtualizedList:()=>ss,YellowBox:()=>cs,findNodeHandle:()=>Ds,unstable_createElement:()=>Bl,useColorScheme:()=>ys,useLocaleContext:()=>gs,useWindowDimensions:()=>ps});E();Yi(ra,Rl);import*as Rl from"react-native-web";import{unstable_createElement as Bl,NativeModules as Vl,AccessibilityInfo as Al,Appearance as Dl,AppRegistry as Ml,AppState as Kl,BackHandler as zl,Clipboard as Ol,Dimensions as Pl,Easing as Wr,I18nManager as Ll,Keyboard as Fl,InteractionManager as Wl,LayoutAnimation as $l,Linking as _l,NativeEventEmitter as Nl,PanResponder as Hl,PixelRatio as ql,Platform as jl,Share as Ul,UIManager as Gl,Vibration as Jl,CheckBox as Yl,FlatList as on,Image as Ql,ImageBackground as Zl,KeyboardAvoidingView as Xl,Picker as es,ProgressBar as ts,RefreshControl as rs,SafeAreaView as os,SectionList as ns,StatusBar as as,Touchable as is,TouchableNativeFeedback as ls,VirtualizedList as ss,YellowBox as cs,LogBox as ds,DeviceEventEmitter as us,useColorScheme as ys,useLocaleContext as gs,useWindowDimensions as ps}from"react-native-web";import*as We from"react-native-web";import{createElement as nn,forwardRef as oa,useCallback as fs,useRef as ms}from"react";E();import{useEffect as hs,useState as bs}from"react";import{createPortal as vs}from"react-dom";E();var Ss='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as ws}from"react/jsx-runtime";var $r=Symbol.for("@buoy-gg/portal-host"),na=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 aa(){let e=document;if(e[$r])return e[$r].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:Ss});let r=()=>{let l=document.fullscreenElement,y=l&&l.tagName!=="CANVAS"?l:document.body;t.parentElement!==y&&y.appendChild(t)},o=new Map,n=l=>{(!t.contains(l.target)||!na(l.target))&&o.set(l.code||l.key,{key:l.key,code:l.code,location:l.location,keyCode:l.keyCode,which:l.which,altKey:l.altKey,ctrlKey:l.ctrlKey,metaKey:l.metaKey,shiftKey:l.shiftKey})},a=l=>{o.delete(l.code||l.key)},i=()=>o.clear(),d=()=>{let l=[...o.values()];o.clear();for(let y of l)document.dispatchEvent(new KeyboardEvent("keyup",{...y,bubbles:true}))},p=l=>{na(l.target)&&l.stopPropagation()},f=l=>l.stopPropagation();return r(),document.addEventListener("fullscreenchange",r),document.addEventListener("keydown",n,true),document.addEventListener("keyup",a,true),window.addEventListener("blur",i),t.addEventListener("focusin",d),t.addEventListener("keydown",p),t.addEventListener("keyup",p),t.addEventListener("keypress",p),t.addEventListener("wheel",f,{passive:true}),e[$r]={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[$r]}},t}function ks({children:e}){let[t,r]=bs(null);return hs(()=>{let o=aa(),n=document[$r];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?vs(ws("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}var dr=We,Cs=["shadowColor","shadowOffset","shadowOpacity","shadowRadius","textShadowColor","textShadowOffset","textShadowRadius"],ur=e=>typeof e=="number"?`${e}px`:e;function an(e){if(Array.isArray(e)){let y=e.map(an);return y.some((g,v)=>g!==e[v])?y:e}if(!e||typeof e!="object"||!Cs.some(y=>e[y]!=null))return e;let{shadowColor:t,shadowOffset:r,shadowOpacity:o,shadowRadius:n,textShadowColor:a,textShadowOffset:i,textShadowRadius:d,...p}=e;if(t!=null||r!=null||o!=null||n!=null){let y=t??"black",g=o==null?y:`color-mix(in srgb, ${y} ${Math.min(o,1)*100}%, transparent)`,v=`${ur(r?.width??0)} ${ur(r?.height??0)} ${ur(n??0)} ${g}`;p.boxShadow=typeof p.boxShadow=="string"?`${p.boxShadow}, ${v}`:p.boxShadow??v}let{width:f=0,height:l=0}=i??{};if(a&&(f||l||d)){let y=`${ur(f)} ${ur(l)} ${ur(d??0)} ${a}`;p.textShadow=p.textShadow?`${p.textShadow}, ${y}`:y}return p}var xs=dr.StyleSheet.create({auto:{pointerEvents:"auto"},none:{pointerEvents:"none"},"box-none":{pointerEvents:"box-none"},"box-only":{pointerEvents:"box-only"}});function ia(e,t){if(typeof e=="function")return o=>ia(e(o),t);let r=an(e);return t?[r,xs[t]]:r}var pe={...dr.StyleSheet,create:e=>dr.StyleSheet.create(Object.fromEntries(Object.entries(e).map(([t,r])=>[t,an(r)])))};function nt(e){let t=oa((o,n)=>{let{accessibilityState:a,accessibilityValue:i,pointerEvents:d,...p}=o;for(let l of["busy","checked","disabled","expanded","selected"])a?.[l]!==void 0&&p[`aria-${l}`]===void 0&&(p[`aria-${l}`]=a[l]);for(let[l,y]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[l]!==void 0&&p[`aria-${y}`]===void 0&&(p[`aria-${y}`]=i[l]);let f=ia(p.style,d);return f!==p.style&&(p.style=f),nn(e,{...p,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var s=nt(We.View),u=nt(We.Text),Yt={...dr.Animated,View:dr.Animated.createAnimatedComponent(s),Text:dr.Animated.createAnimatedComponent(u)},Ts=nt(We.TextInput),O=nt(We.TouchableOpacity),Is=nt(We.TouchableHighlight),Es=nt(We.TouchableWithoutFeedback),Rs=nt(We.Pressable),_r=nt(We.ScrollView),la=oa((e,t)=>{let r=ms(null),o=fs(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"}),aa().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return nn(ks,null,nn(We.Modal,{...e,ref:o}))});la.displayName="Modal";var sa=nt(la),Bs=nt(We.Switch),Vs=nt(We.ActivityIndicator),As=nt(We.Button),Ds=We.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 f=document.createElement("p");f.textContent=t,f.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(f)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let d=r?.length?r:[{text:"OK"}],p=()=>{n.close?.(),n.remove()};for(let f of d){let l=document.createElement("button");l.type="button",l.textContent=f.text??"OK",l.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${f.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,l.onclick=()=>{p(),f.onPress?.()},i.appendChild(l)}n.addEventListener("cancel",f=>{f.preventDefault(),o?.cancelable!==false&&(p(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};mt();import{JsModal as Ms,ModalHeader as Me,TabSelector as Ks,parseValue as zs,devToolsStorageKeys as yr,macOSColors as Os,night as $e,ToolEmptyState as Ps,Filter as Ls,RefreshCw as Fs,Search as Ws,SearchBar as $s,PowerToggleButton as _s,ToolbarCopyButton as ca,ToolbarClearButton as Ns,truncatePayload as po,TickProvider as da,useLimit as Hs,TIER_LIMITS as qs,windowDragProps as js,usePersistedState as fo,monoFont as mo}from"@buoy-gg/shared-ui/web";E();E();E();co();var ae=zr()?{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 Xe,useState as Qt,useEffect as gr,useRef as ln}from"react";import{absoluteFill as ua,useLimit as ya,TIER_LIMITS as Us,monoFont as Nr}from"@buoy-gg/shared-ui/web";import{Database as ga,Zap as Gs,ProBadge as pa,ProUpgradeModal as Js,ToolEmptyState as Ys,resolveListEmptyState as Qs}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Ke}from"@buoy-gg/shared-ui/web";E();import{useCallback as fa,useState as Zs}from"react";E();import{memo as Xs}from"react";import{macOSColors as fe,night as ce,CompactRow as ec,TypeBadge as ma,HardDrive as tc,Square as rc,CheckSquare as oc,Edit3 as nc,EyeOff as ac,Pin as ha,Trash2 as ic,ExpandedInfoRow as sn,PillBadge as Hr,monoFont as pr}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as ho}from"@buoy-gg/shared-ui/web";var lc=new Set(["sessionStorage","localStorage"]);function cn(e,t){switch(e){case"mmkv":return t&&!lc.has(t)?"MMKV":ae.mmkv;case"async":return ae.async;case"secure":return"Secure";default:return e}}function ba(e){switch(e){case"mmkv":return ho.info;case"async":return ho.warning;case"secure":return ho.success;default:return ho.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 va(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 sc=40;function cc(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>sc?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function dc(e){let t=Dt(e),r=cc(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as uc}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as yc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var Sa=[fe.semantic.info,fe.semantic.success,fe.semantic.warning,fe.semantic.debug,"#FF6B9D","#00D9FF"];function wa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Sa[t%Sa.length]}var ka=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)}}},gc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),pc=Xs(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:d,onHideKey:p,isPinned:f=false,onTogglePin:l,onEditKey:y,onToggleKey:g,onDeleteKey:v,editBlockedReason:C}){let h=y!=null&&C==null,m=ka(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=cn(e.storageType,e.instanceId),D=va(e.value),x=D!==null&&typeof D=="object",B=Ve(s,{style:$.expandedContainer,children:[W(sn,{label:"Storage",children:W(Hr,{color:dn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(sn,{label:"Instance",children:W(Hr,{color:wa(e.instanceId),icon:W(tc,{size:9,color:wa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(sn,{label:"Updates",children:[W(Hr,{color:fe.semantic.warning,children:String(i)}),i>1&&d&&W(O,{onPress:d,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"})})]}),x?W(s,{style:$.dataViewerContainer,children:W(uc,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(s,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Value:"}),W(u,{style:$.expandedValue,numberOfLines:3,children:gc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(yc,{children:[Ve(s,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Type:"}),W(ma,{type:Dt(e.value)})]}),Ve(s,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Expected:"}),W(ma,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(s,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Expected:"}),W(u,{style:$.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(s,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Info:"}),W(u,{style:$.expandedDescription,children:e.description})]}):null,C?Ve(s,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Edit:"}),W(u,{style:$.expandedDescription,children:C})]}):null,l||p||h?Ve(s,{style:$.actionRow,children:[h?Ve(O,{style:$.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&g?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&g?g(e):y?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(nc,{size:13,color:ce.color.onAccent}),W(u,{style:$.editButtonText,children:T&&g?"Toggle":"Edit"})]}):null,l?Ve(O,{style:[$.actionChip,f&&$.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:f?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>l(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(ha,{size:12,active:f,color:ce.color.accent}),W(u,{style:[$.actionChipText,{color:ce.color.accent}],children:f?"Unpin":"Pin to top"})]}):null,p?Ve(O,{style:$.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>p(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(ac,{size:12,color:ce.color.warning}),W(u,{style:[$.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,h&&v?Ve(O,{style:[$.actionChip,$.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>v(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(ic,{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(O,{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(oc,{size:18,color:ce.color.accent}):W(rc,{size:18,color:ce.color.textTertiary})}):null;return Ve(s,{style:[$.rowContainer,n&&$.rowContainerSelected],children:[ve,Ve(s,{style:$.compactRowWrapper,children:[W(ec,{statusDotColor:m.color,statusLabel:m.label,statusSublabel:m.sublabel,primaryText:I,secondaryText:w?T?Dt(e.value):dc(e.value):void 0,secondaryAccessory:T?W(Hr,{size:"sm",color:e.value?fe.semantic.success:fe.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:m.color,customBadge:Ve(s,{style:$.badgeRow,children:[f&&W(ha,{size:12,active:true,color:ce.color.accent}),W(Hr,{color:dn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${R} ${e.key}`}),i!=null&&i>1&&W(s,{style:[$.absCountBadge,t&&$.absCountBadgeExpanded,{backgroundColor:fe.semantic.warning+"22",borderColor:fe.semantic.warning+"55"}],pointerEvents:"none",children:W(u,{style:[$.absCountText,{color:fe.semantic.warning}],children:String(i)})})]})]})}),dn=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:pr},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:pr,flex:1},expandedExpected:{fontSize:11,color:fe.semantic.warning,fontFamily:pr,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:pr},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:pr},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:pr,color:ce.color.accent}});import{SectionHeader as fr,night as un}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as bo}from"react/jsx-runtime";function yn(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function Ca({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:d,eventCountByKey:p,onViewHistory:f,onHideKey:l,pinnedKeys:y,onTogglePin:g,onEditKey:v,onToggleKey:C,onDeleteKey:h,editBlockedFor:m,onRowRef:w,onOpenKey:T}){let I=fa(B=>yn(B),[]),[R,D]=Zs(null),x=fa(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"?bo(s,{style:qr.sectionContainer,children:[bo(fr,{children:[Ct(fr.Title,{children:e}),Ct(fr.Badge,{count:0,color:n})]}),Ct(s,{style:qr.emptySection,children:Ct(u,{style:qr.emptySectionText,children:o})})]}):r.length===0?null:bo(s,{style:qr.sectionContainer,children:[e?bo(fr,{children:[Ct(fr.Title,{children:e}),t>=0&&Ct(fr.Badge,{count:t,color:n})]}):null,Ct(s,{style:qr.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(s,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(pc,{storageKey:B,isExpanded:!a&&R===Q,onPress:x,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:d,eventCount:p?.[B.key],onViewHistory:f?()=>f(B.key):void 0,onHideKey:l,onEditKey:v,onToggleKey:C,onDeleteKey:h,editBlockedReason:m?.(B),isPinned:y?.has(B.key),onTogglePin:g})},Q)})})]})}var qr=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:un.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:un.color.border,alignItems:"center"},emptySectionText:{color:un.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as fc,useMemo as xa,useRef as Ta,useState as Ia}from"react";import{EyeOff as mc,FileJson as hc,HardDrive as bc,night as J,macOSColors as mr,Pin as vc,PillBadge as vo,Trash2 as Sc,TypeBadge as wc,useSafeAreaInsets as kc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as Cc,LiveExplorer as xc,ValueEditModal as Tc,updateNestedDataByPath as Ic,deleteNestedDataByPath as Ec}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as P,jsxs as me}from"react/jsx-runtime";var Rc=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 Ea=[mr.semantic.info,mr.semantic.success,mr.semantic.warning,mr.semantic.debug,"#FF6B9D","#00D9FF"];function Ra(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ea[t%Ea.length]}function Vc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:d=false,onTogglePin:p,applySafeAreaInset:f}){let l=kc(),y=f?l.bottom:0,g=t==null,v=ka(e.status),C=cn(e.storageType,e.instanceId),[h,m]=Ia(false),[w,T]=Ia(0),I=Ta(null),R=xa(()=>va(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 x=I.current?I.current.value:R,B=fc(q=>{let ue=typeof q=="string"?q:JSON.stringify(q);I.current={raw:ue,value:q},o(ue).catch(te=>{I.current=null,Ie.alert("Couldn't save",te instanceof Error?te.message:String(te))})},[o]),Q=Ta(x);Q.current=x;let ve=xa(()=>{if(g)return{update:(q,ue)=>{let te=q.length===0?ue:Ic(Q.current,q,ue);B(te)},remove:q=>{q.length!==0&&B(Ec(Q.current,q))}}},[g,B]),Se=p||i||g&&a;return me(s,{style:A.screen,children:[P(s,{testID:`${ht}-key`,accessibilityLabel:e.key}),me(_r,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+y}],keyboardShouldPersistTaps:"handled",children:[P(s,{style:A.section,children:me(s,{style:A.editorContainer,children:[me(s,{style:A.sectionHeaderRow,children:[P(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),g?me(O,{onPress:()=>m(true),testID:`${ht}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(hc,{size:13,color:J.color.accent}),P(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),me(s,{style:A.sectionBody,children:[P(xc,{editable:g,label:"Value",value:x,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:Bc,debounceMs:Rc}),g?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(s,{style:A.section,children:me(s,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Key Details"}),me(s,{style:A.infoBody,children:[me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Status:"}),P(vo,{color:v.color,testID:`${ht}-status`,children:v.label}),P(u,{style:A.infoDim,children:v.sublabel})]}),me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Storage:"}),P(vo,{color:dn(e.storageType),testID:`${ht}-backend`,children:C}),P(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Instance:"}),P(vo,{color:Ra(e.instanceId),icon:P(bc,{size:9,color:Ra(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Updates:"}),P(vo,{color:mr.semantic.warning,children:String(r)}),r>1&&n&&P(O,{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&&me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(wc,{type:e.expectedType}),me(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?me(s,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Info:"}),P(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),P(s,{style:A.section,children:me(s,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),P(s,{style:A.viewerBody,testID:`${ht}-viewer`,children:x!==null&&typeof x=="object"?P(Cc,{title:"",data:x,showTypeFilter:true,rawMode:true,initialExpanded:false}):P(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?me(s,{style:A.actionRow,children:[p?me(O,{style:[A.actionChip,d&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:d?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>p(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(vc,{size:12,active:d,color:J.color.accent}),P(u,{style:[A.actionChipText,{color:J.color.accent}],children:d?"Unpin":"Pin to top"})]}):null,i?me(O,{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(mc,{size:12,color:J.color.warning}),P(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,g&&a?me(O,{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(Sc,{size:12,color:J.color.danger}),P(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),h&&g?P(Tc,{path:[],value:x,onSave:q=>{B(q),T(ue=>ue+1),m(false)},onCancel:()=>m(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:mr.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();E();function Ba(){return ae.hasSecure||ee.count()>0}import{macOSColors as gn,night as Kt,monoFont as Ac}from"@buoy-gg/shared-ui/web";import{jsx as pn,jsxs as Dc}from"react/jsx-runtime";var Mc=[{id:"all",label:"All Types",color:null},{id:"async",label:ae.async,color:gn.semantic.warning},{id:"mmkv",label:ae.mmkv,color:gn.semantic.info},{id:"secure",label:"Secure",color:gn.semantic.success}];function fn({active:e,onChange:t,counts:r}){return pn(s,{style:jr.row,children:Mc.filter(o=>Ba()||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??Kt.color.accent;return Dc(O,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[jr.pill,{borderColor:Kt.color.border},n&&[jr.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:Kt.color.accentSoft,borderColor:Kt.color.accentBorderStrong}]],children:[pn(u,{style:[jr.label,n&&{color:a,fontWeight:"600"}],children:o.label}),pn(u,{style:[jr.value,{color:n?a:Kt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function Va(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var jr=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:Kt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Kt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:Kt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:Ac,lineHeight:14}});import{macOSColors as zt,night as Le,monoFont as Kc}from"@buoy-gg/shared-ui/web";E();function mn(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function zc(){return null}function Aa(){return"Session storage is unavailable in this browser context."}import{jsx as Zt,jsxs as Ur}from"react/jsx-runtime";var Jy=mn();function Oc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:d="all",onStorageTypeChange:p,showStatus:f=true}){let l=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 Ur(s,{style:Ne.container,children:[f?Ur(s,{style:Ne.filtersRow,children:[Ur(O,{style:[Ne.filterChip,a==="all"&&[Ne.filterChipActive,{backgroundColor:Le.color.accentSoft,borderColor:Le.color.accentBorderStrong,shadowColor:Le.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Zt(u,{style:[Ne.filterValue,{color:Le.color.text}],children:l.validCount}),Zt(u,{style:Ne.filterLabel,children:"Valid"})]}),Ur(O,{style:[Ne.filterChip,a==="missing"&&[Ne.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:[Zt(u,{style:[Ne.filterValue,{color:l.missingCount>0?zt.semantic.error:Le.color.textTertiary}],children:l.missingCount}),Zt(u,{style:Ne.filterLabel,children:"Missing"})]}),Ur(O,{style:[Ne.filterChip,a==="issues"&&[Ne.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:[Zt(u,{style:[Ne.filterValue,{color:l.issuesCount>0?zt.semantic.warning:Le.color.textTertiary}],children:l.issuesCount}),Zt(u,{style:Ne.filterLabel,children:"Issues"})]})]}):null,p&&Zt(fn,{active:d,onChange:p,counts:{all:l.totalCount,async:l.asyncCount,mmkv:l.mmkvCount,secure:l.secureCount}})]})}var Ne=pe.create({container:{backgroundColor:Le.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Le.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:Le.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Le.color.border,marginHorizontal:4},subtitleText:{color:Le.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:Le.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Le.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Le.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:Le.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Kc,lineHeight:20}});E();mt();Jt();import{isDevToolsStorageKey as Pc}from"@buoy-gg/shared-ui/web";import{useState as hn,useEffect as Lc,useCallback as Fc,useRef as Wc}from"react";E();function Ot(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function bn(e=[]){let[t,r]=hn([]),[o,n]=hn(true),[a,i]=hn(null),d=JSON.stringify(e),p=Wc(e);p.current=e;let f=Fc(async()=>{let l=p.current;n(true),i(null);try{let y=(await oe.getAllKeys()).filter(C=>!Pc(C));if(!y||y.length===0){r([]),n(false);return}let g=await uo(y),v=[];g.forEach(([C,h])=>{let m=h;if(h)try{m=JSON.parse(h)}catch{m=h}let w=l.find(R=>Ot(R,"async")?typeof R=="string"?R===C:R.key===C:false),T="optional_present";w&&(m==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=m===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(m===null?"null":typeof m).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:C,value:m,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}};v.push(I)}),l.forEach(C=>{if(!Ot(C,"async"))return;let h=typeof C=="string"?C:C.key;v.some(m=>m.key===h)||v.push({key:h,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof C=="object"&&C.expectedValue!==void 0&&{expectedValue:C.expectedValue},...typeof C=="object"&&C.expectedType!==void 0&&{expectedType:C.expectedType},...typeof C=="object"&&C.description!==void 0&&{description:C.description}})}),r(v)}catch(y){i(y instanceof Error?y:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[d]);return Lc(()=>{f()},[f]),{storageKeys:t,isLoading:o,error:a,refresh:f}}E();co();import{isDevToolsStorageKey as $c,appStorageEvent as _c}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as Nc}from"@buoy-gg/shared-ui/web/utils";var vn=new Set,So,Da=false,Hc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Ma=e=>$c(e)||[...Hc].some(t=>e.startsWith(t));function Ka(e){let t=_c(e);if(t){e=t;for(let r of[...vn])try{r(e)}catch{}}}async function qc(){if(!(So||typeof window>"u")){if(zr()){So=ol(e=>{Da||Ka(e)});return}So=Nc(e=>{if(Da||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))),Ka({action:r,data:o,timestamp:new Date})})}}function za(e){return vn.add(e),()=>{vn.delete(e)}}function jc(){return!!So}E();import{isDevToolsStorageKey as Oa}from"@buoy-gg/shared-ui/web";import{useState as hr,useEffect as Pa,useCallback as La,useRef as Fa}from"react";function Uc(e,t,r=[]){let[o,n]=hr([]),[a,i]=hr(true),[d,p]=hr(null),f=JSON.stringify(r),l=Fa(r);l.current=r;let y=La(()=>{let g=l.current;i(true),p(null);try{if(!e){n([]),i(false);return}let v=e.getAllKeys().filter(h=>!Oa(h));if(!v||v.length===0){let h=g.filter(m=>Ot(m,"mmkv")).map(m=>{let w=typeof m=="string"?m:m.key,T=typeof m=="object"?m.description:void 0,I=typeof m=="object"?m.expectedValue:void 0,R=typeof m=="object"?m.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(h),i(false);return}let C=[];v.forEach(h=>{let{value:m,type:w}=kt(e,h),T=g.find(D=>Ot(D,"mmkv")?typeof D=="string"?D===h:D.key===h:false),I="optional_present";T&&(m===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(m)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Xo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let R={key:h,value:m,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}};C.push(R)}),g.forEach(h=>{if(!Ot(h,"mmkv"))return;let m=typeof h=="string"?h:h.key;C.some(w=>w.key===m)||C.push({key:m,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,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}})}),n(C)}catch(v){p(v instanceof Error?v:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,f]);return Pa(()=>{y()},[y]),{storageKeys:o,isLoading:a,error:d,refresh:y}}function Wa(e,t=[]){let[r,o]=hr([]),[n,a]=hr(true),[i,d]=hr(null),p=JSON.stringify(t),f=Fa(t);f.current=t;let l=La(()=>{let y=f.current;a(true),d(null);try{let g=[];e.forEach(({instance:v,id:C})=>{let h=v.getAllKeys().filter(m=>!Oa(m));!h||h.length===0||h.forEach(m=>{let{value:w,type:T}=kt(v,m),I=y.find(x=>Ot(x,"mmkv")?typeof x=="string"?x===m:x.key===m: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=Xo(T,I.expectedType)?"required_present":"required_wrong_type":R="required_present");let D={key:m,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:C,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}};g.push(D)})}),y.forEach(v=>{if(!Ot(v,"mmkv"))return;let C=typeof v=="string"?v:v.key;if(!g.some(h=>h.key===C)){let h=e[0]?.id||"mmkv.default";g.push({key:C,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:h,status:"required_missing",category:"required",...typeof v=="object"&&v.expectedValue!==void 0&&{expectedValue:v.expectedValue},...typeof v=="object"&&v.expectedType!==void 0&&{expectedType:v.expectedType},...typeof v=="object"&&v.description!==void 0&&{description:v.description}})}}),o(g)}catch(g){d(g instanceof Error?g:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,p]);return Pa(()=>{l()},[l]),{storageKeys:r,isLoading:n,error:i,refresh:l}}E();import{isDevToolsStorageKey as Gc}from"@buoy-gg/shared-ui/web";import{useState as Sn,useEffect as Jc,useCallback as $a,useRef as wo}from"react";var Yc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Qc=3e3;function _a(e){return JSON.stringify(e)}function Zc(e=[],t={}){let{pollMs:r=Qc}=t,o=wo(e);o.current=e;let n=JSON.stringify(e),[a,i]=Sn([]),[d,p]=Sn(true),[f,l]=Sn(null),y=wo(_a([])),g=wo(false),v=wo(false),C=$a(m=>{let w=_a(m);w!==y.current&&(y.current=w,i(m))},[]),h=$a(async()=>{if(!v.current){v.current=true;try{let m=ee.getModule(),w=ee.getAll().filter(({key:x})=>!Gc(x)),T=o.current.filter(x=>Ot(x,"secure")),I=x=>T.find(B=>(typeof B=="string"?B:B.key)===x);if(!m||w.length===0&&T.length===0){C([]),g.current=true,p(false);return}g.current||p(true),l(null);let R=[],D=[...w,...T.map(x=>typeof x=="string"?x:x.key).filter(x=>!w.some(B=>B.key===x)).map(x=>({key:x,options:{},description:void 0}))];for(let x of D){let B=I(x.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??x.description;if(x.options.requireAuthentication){R.push({key:x.key,value:Yc,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,...x.options.keychainService&&{instanceId:x.options.keychainService}});continue}let q=null;try{q=await m.getItemAsync(x.key,x.options)}catch{}if(q===null&&!B)continue;let ue=q;if(q)try{ue=JSON.parse(q)}catch{ue=q}let te="optional_present";if(B)if(q===null)te="required_missing";else if(Q?.expectedValue!==void 0)te=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,Ge=Q.expectedType.toLowerCase();te=se===Ge||Ge==="string"&&typeof q=="string"?"required_present":"required_wrong_type"}else te="required_present";R.push({key:x.key,value:q===null?void 0:ue,storageType:"secure",status:te,category:B?"required":"optional",...Se&&{description:Se},...ve,...x.options.keychainService&&{instanceId:x.options.keychainService}})}C(R)}catch(m){l(m instanceof Error?m:new Error("Failed to read SecureStore")),C([])}finally{g.current=true,v.current=false,p(false)}}},[C,n]);return Jc(()=>{h();let m=ee.subscribe(()=>{h()});if(r<=0)return m;let w=setInterval(h,r);return()=>{m(),clearInterval(w)}},[h,r]),{storageKeys:a,isLoading:d,error:f,refresh:h}}E();import{isDevToolsStorageKey as wn}from"@buoy-gg/shared-ui/web";import{useState as ko,useEffect as Co}from"react";function kn(e=false){let[t,r]=ko([]),[o,n]=ko(true),a=()=>{n(true);try{let i=Pe.getAll().filter(({id:d})=>!wn(d)).map(d=>{let{instance:p,id:f,encrypted:l,readOnly:y}=d,g=p.getAllKeys().filter(v=>!wn(v))?.length||0;return{id:f,instance:p,encrypted:l,readOnly:y,keyCount:g,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return Co(()=>{a()},[]),Co(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Na(e){let[t,r]=ko(null);return Co(()=>{if(!Pe){r(null);return}let o=Pe.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!wn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function Xc(e){let[t,r]=ko(false);return Co(()=>{if(!Pe){r(false);return}r(Pe.has(e))},[e]),t}E();import{useEffect as ed,useRef as Ha}from"react";import{Check as td,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as br,jsxs as rd}from"react/jsx-runtime";var od=2600,qa=180;function nd({onDone:e}){let t=Ha(new Yt.Value(0)).current,r=Ha(e);return r.current=e,ed(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:qa,easing:Wr.out(Wr.quad),useNativeDriver:true}),Yt.delay(od),Yt.timing(t,{toValue:0,duration:qa,easing:Wr.in(Wr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),br(Yt.View,{pointerEvents:"box-none",style:[vr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:rd(O,{activeOpacity:.85,onPress:()=>r.current(),style:vr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[br(s,{style:vr.tick,children:br(td,{size:10,color:Xt.semantic.success})}),br(u,{style:vr.saved,children:"Saved"}),br(s,{style:vr.divider}),br(u,{style:vr.detail,children:"applies on next launch"})]})})}var vr=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}});E();import{useState as ad,useEffect as id}from"react";mt();import{Trash2 as xo,CopyButton as ld,SquareDashed as sd,X as cd,ProUpgradeModal as dd,monoFont as ud}from"@buoy-gg/shared-ui/web";import{macOSColors as ja,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as yd}from"@buoy-gg/license/web";import{jsx as He,jsxs as Ua}from"react/jsx-runtime";function gd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[d,p]=ad(false),f=yd();id(()=>{d&&f&&p(false)},[d,f]);let l=()=>{if(!f){p(true);return}Ie.alert(`Clear ${ae.asyncFull}`,`Delete all ${ae.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}`)}}}])},y=(R,D)=>{if(!f){p(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 x=t.find(B=>B.id===R);x&&(x.instance.clearAll(),o?.())}catch(x){Ie.alert("Error",`Failed: ${x}`)}}}])},g=()=>{if(!f){p(true);return}Ie.alert(`Clear All ${ae.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}`)}}}])},v=()=>{if(!f){p(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}`)}}}])},C=r==="all"||r==="async",h=r==="all"||r==="mmkv",m=r==="all",w=C&&!m,T=h&&!m,I=h&&t.length>1&&!m;return Ua(s,{style:bt.container,children:[a&&He(O,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Ua(s,{style:bt.selectModeActiveContainer,children:[He(cd,{size:14,color:at.color.accent}),i>0&&He(u,{style:bt.selectedCountText,children:i})]}):He(sd,{size:16,color:at.color.textSecondary})}),!n&&He(ld,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:ja.semantic.success,error:ja.semantic.error}}),!n&&m&&He(O,{onPress:v,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:He(xo,{size:16,color:at.color.danger})}),!n&&w&&He(O,{onPress:l,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ae.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:He(xo,{size:16,color:at.color.danger})}),!n&&I&&He(O,{onPress:g,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ae.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:He(xo,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&He(O,{onPress:()=>y(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ae.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:He(xo,{size:16,color:at.color.danger})}),He(dd,{visible:d,onClose:()=>p(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:ud}});E();import{useState as pd,useEffect as fd}from"react";import{Trash2 as md,CopyButton as hd,CheckSquare as bd,EyeOff as vd,ProUpgradeModal as Sd,monoFont as wd}from"@buoy-gg/shared-ui/web";import{macOSColors as Ga,night as qe}from"@buoy-gg/shared-ui/web";import{useIsPro as kd}from"@buoy-gg/license/web";E();Jt();function Cd(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 Ja(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 ee.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let d=i.instanceId||"default";a[d]||(a[d]=[]),a[d].push(i.key)}),Object.entries(a).forEach(([i,d])=>{let p=t.find(f=>f.id===i);p&&d.forEach(f=>Cd(p.instance,f))})}}import{jsx as xt,jsxs as Gr}from"react/jsx-runtime";function xd({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[d,p]=pd(false),f=kd();fd(()=>{d&&f&&p(false)},[d,f]);let l=e.length,y=l===i&&i>0,g=()=>{let h={};return e.forEach(m=>{let w=m.instanceId?`[${m.storageType}:${m.instanceId}]`:`[${m.storageType}]`;h[`${w} ${m.key}`]=m.value}),{selectedCount:l,keys:h,timestamp:new Date().toISOString()}},v=()=>{l!==0&&o?.(e)},C=()=>{if(l!==0){if(!f){p(true);return}Ie.alert("Delete Selected Keys",`Delete ${l} selected key${l>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await Ja(e,t),r?.()}catch(h){Ie.alert("Error",`Failed to delete keys: ${h}`)}}}])}};return l===0?null:Gr(s,{style:vt.container,children:[Gr(s,{style:vt.leftSection,children:[Gr(O,{style:vt.selectAllButton,onPress:y?a:n,testID:"buoy-storage-select-all",accessibilityLabel:y?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(bd,{size:14,color:y?qe.color.accent:qe.color.textSecondary}),xt(u,{style:vt.selectAllText,children:y?"Deselect All":"Select All"})]}),xt(s,{style:vt.countBadge,children:Gr(u,{style:vt.countText,children:[l," selected"]})})]}),Gr(s,{style:vt.actionsSection,children:[xt(hd,{value:g(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:qe.color.accent,success:Ga.semantic.success,error:Ga.semantic.error}}),o&&xt(O,{style:vt.actionButton,onPress:v,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(vd,{size:14,color:qe.color.warning})}),xt(O,{style:vt.actionButton,onPress:C,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(md,{size:14,color:qe.color.danger})})]}),xt(Sd,{visible:d,onClose:()=>p(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:wd},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 Cn=new Set;function Td(e){return Cn.add(e),()=>{Cn.delete(e)}}function Id(){Cn.forEach(e=>{try{e()}catch{}})}E();mt();function xn(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(ee.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(!ee.getModule())return"No SecureStore module is registered."}return null}function Ya(e,t){if(e.storageType==="mmkv"){let r=ei(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 Ed(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 Qa(e,t,r=[]){let o=xn(e,r);if(o)throw new Error(o);let n=Ya(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Xa(e,t));return}case"secure":{await ee.setValue(e.key,Xa(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(d=>d.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,Rd(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function Za(e){return e!==null&&typeof e=="object"}function Xa(e,t){return Za(e.value)?JSON.stringify(JSON.parse(t)):t}function ei(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function Rd(e,t){switch(ei(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as Sr,macOSColors as To,night as F,HardDrive as ti}from"@buoy-gg/shared-ui/web";import{useIsPro as Bd}from"@buoy-gg/license/web";import{Fragment as Vd,jsx as H,jsxs as Ee}from"react/jsx-runtime";var ri=[To.semantic.info,To.semantic.success,To.semantic.warning,To.semantic.debug,"#FF6B9D","#00D9FF"];function wr(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ri[t%ri.length]}var kg=Us["storage.keys"].free;function Ad({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:d,lastWriteByKey:p,onViewHistory:f,enabledStorageTypes:l,statusFilter:y,onStatusFilterChange:g,onStatusCountsChange:v,pinnedKeys:C,onTogglePin:h,storageTypeFilter:m,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let x=Bd(),B=ya("storage.keys"),Q=ya("storage.mmkvInstances"),[ve,Se]=Qt(false);gr(()=>{ve&&x&&Se(false)},[ve,x]);let[q,ue]=Qt("all"),te=y!=null&&g!=null,se=te?y:q,Ge=te?g:ue,[Je,wt]=Qt("all"),Rt=m!=null&&w!=null,ye=Rt?m:Je,or=Rt?w:wt,[re,$t]=Qt(null),Ye=ln(null),Tr=ln(0),ne=ln(new Map),gt=Xe((c,b)=>{b?ne.current.set(c,b):ne.current.delete(c)},[]),[_t,Ir]=Qt(0),[Nt,Er]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=kn(false),{storageKeys:Xr,isLoading:eo,error:to,refresh:Ht}=bn(e),Wo=_e(()=>xe.map(c=>({instance:c.instance,id:c.id})),[xe]),{storageKeys:Rr,isLoading:$o,error:Br,refresh:ar}=Wa(Wo,e),_o=_e(()=>re?Rr.filter(c=>c.instanceId===re):Rr,[Rr,re]),{storageKeys:qt,isLoading:ro,error:No,refresh:oo}=Zc(e),N=_e(()=>[...Xr,..._o,...qt].filter(c=>!Ke(c.key)),[Xr,_o,qt]),ke=_e(()=>{if(!I)return null;let c=yn(I);return N.find(b=>yn(b)===c)??I},[I,N]),Ho=eo||$o||ro,no=to||Br||No,Te=Xe(()=>{Ht(),ar(),oo()},[Ht,ar,oo]),tt=Xe(c=>c.instanceId?`${c.storageType}-${c.instanceId}-${c.key}`:`${c.storageType}-${c.key}`,[]),qo=Xe(()=>{Er(c=>(c&&Bt(new Set),!c))},[]),rt=Xe((c,b)=>{let U=tt(c);Bt(Z=>{let Ze=new Set(Z);return b?Ze.add(U):Ze.delete(U),Ze})},[tt]),jo=Xe(()=>{Bt(new Set),Er(false),Te()},[Te]),Vr=Xe(c=>{c.forEach(b=>n?.(b.key)),Bt(new Set),Er(false)},[n]),jt=Xe(async(c,b)=>{if(!x)throw Se(true),new Error("Editing storage values is a Pro feature.");await Qa(c,b,xe),Te(),Ir(U=>U+1)},[x,xe,Te]),Uo=Xe(c=>{jt(c,JSON.stringify(!c.value)).catch(b=>{Ie.alert("Couldn't save",b instanceof Error?b.message:String(b))})},[jt]),ao=Xe((c,b)=>{if(!x){Se(true);return}Ie.alert("Delete key",`Delete "${c.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await Ja([c],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),b?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[x,xe,Te]),Ar=Xe(c=>xn(c,xe),[xe]),Go=_e(()=>{let c=N,b={valid:c.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:c.filter(G=>G.status==="required_missing").length,issues:c.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:c.length},U=c.filter(G=>G.storageType==="async"),Z=c.filter(G=>G.storageType==="mmkv"),Ze=c.filter(G=>G.storageType==="secure");return{summary:{valid:b.valid,missing:b.missing,issues:b.issues,total:b.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:Z.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Ze.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);gr(()=>{i&&(i.current=N)},[N,i]),gr(()=>{let c,b=za(U=>{clearTimeout(c),c=setTimeout(()=>{Ht()},100)});return()=>{clearTimeout(c),b()}},[Ht]),gr(()=>{let c,b=Td(()=>{clearTimeout(c),c=setTimeout(Te,100)});return()=>{clearTimeout(c),b()}},[Te]),gr(()=>{let c,b=Jn(U=>{(re===null||U.instanceId===re)&&(clearTimeout(c),c=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(c),b()}},[ar,re]);let Ut=_e(()=>{let c=N,b=c.filter(Z=>!Ke(Z.key)),U=c.filter(Z=>Ke(Z.key));return{totalCount:c.length,requiredCount:b.filter(Z=>Z.category==="required").length,missingCount:b.filter(Z=>Z.status==="required_missing").length,wrongValueCount:b.filter(Z=>Z.status==="required_wrong_value").length,wrongTypeCount:b.filter(Z=>Z.status==="required_wrong_type").length,presentRequiredCount:b.filter(Z=>Z.status==="required_present").length,optionalCount:b.filter(Z=>Z.category==="optional").length,mmkvCount:c.filter(Z=>Z.storageType==="mmkv").length,asyncCount:c.filter(Z=>Z.storageType==="async").length,secureCount:c.filter(Z=>Z.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let c=N.filter(V=>!Ke(V.key));ye!=="all"&&(c=c.filter(V=>V.storageType===ye));let b=c.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=c.filter(V=>V.status==="required_missing").length,Z=c.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Ze=0,G=0,Be=0,Vt=0;return se==="all"?(Ze=N.filter(V=>!Ke(V.key)&&V.storageType==="async"&&(V.status==="required_present"||V.status==="optional_present")).length,G=N.filter(V=>!Ke(V.key)&&V.storageType==="mmkv"&&(V.status==="required_present"||V.status==="optional_present")).length,Be=N.filter(V=>!Ke(V.key)&&V.storageType==="secure"&&(V.status==="required_present"||V.status==="optional_present")).length,Vt=Ze+G+Be):se==="missing"?(Ze=N.filter(V=>!Ke(V.key)&&V.storageType==="async"&&V.status==="required_missing").length,G=N.filter(V=>!Ke(V.key)&&V.storageType==="mmkv"&&V.status==="required_missing").length,Be=N.filter(V=>!Ke(V.key)&&V.storageType==="secure"&&V.status==="required_missing").length,Vt=Ze+G+Be):se==="issues"&&(Ze=N.filter(V=>!Ke(V.key)&&V.storageType==="async"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,G=N.filter(V=>!Ke(V.key)&&V.storageType==="mmkv"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Be=N.filter(V=>!Ke(V.key)&&V.storageType==="secure"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Vt=Ze+G+Be),{validCount:b,missingCount:U,issuesCount:Z,asyncCount:Ze,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);gr(()=>{v?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[v,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((c,b)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[c.status]||999)-(U[b.status]||999)}),[N]),Wn=_e(()=>Array.from(new Set(N.map(c=>c.key))).sort(),[N]),Oe=_e(()=>{let c=ir;if(l&&l.size>0&&(c=c.filter(b=>l.has(b.storageType))),c=c.filter(b=>!Array.from(r).some(U=>b.key.includes(U))),a){let b=a.toLowerCase();c=c.filter(U=>U.key.toLowerCase().includes(b))}switch(se){case"all":c=c.filter(b=>b.status==="required_present"||b.status==="optional_present");break;case"missing":c=c.filter(b=>b.status==="required_missing");break;case"issues":c=c.filter(b=>b.status==="required_wrong_type"||b.status==="required_wrong_value");break}if(ye!=="all"&&(c=c.filter(b=>b.storageType===ye)),C&&C.size>0){let b=c.filter(Z=>C.has(Z.key)),U=c.filter(Z=>!C.has(Z.key));c=[...b,...U]}return c},[ir,se,ye,r,a,re,l,C]),S=_e(()=>Oe.slice(0,B),[Oe,B]),k=_e(()=>Math.max(0,Oe.length-B),[Oe.length,B]),K=k>0,j=_e(()=>{let c=Oe.filter(b=>!Ke(b.key));return{totalCount:Oe.length,requiredCount:c.filter(b=>b.category==="required").length,missingCount:c.filter(b=>b.status==="required_missing").length,wrongValueCount:c.filter(b=>b.status==="required_wrong_value").length,wrongTypeCount:c.filter(b=>b.status==="required_wrong_type").length,presentRequiredCount:c.filter(b=>b.status==="required_present").length,optionalCount:c.filter(b=>b.category==="optional").length,mmkvCount:Oe.filter(b=>b.storageType==="mmkv").length,asyncCount:Oe.filter(b=>b.storageType==="async").length,secureCount:Oe.filter(b=>b.storageType==="secure").length,devToolsCount:Oe.filter(b=>Ke(b.key)).length}},[Oe]),Qe=_e(()=>S.filter(c=>nr.has(tt(c))),[S,nr,tt]),Dr=Xe(()=>{let c=new Set(S.map(tt));Bt(c)},[S,tt]),Mr=Xe(()=>{Bt(new Set)},[]),Kr=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Fi=Kr>=90?"OPTIMAL":Kr>=70?"WARNING":"CRITICAL",Wi=Kr>=90?Sr.success:Kr>=70?Sr.warning:Sr.error;if(ke)return H(s,{style:L.root,children:H(Vc,{storageKey:ke,editBlockedReason:Ar(ke),eventCount:d?.[ke.key],onSave:c=>jt(ke,c),onViewHistory:f?()=>f(ke.key):void 0,onDeleteKey:c=>ao(c,()=>D?.()),onHideKey:c=>{Vr([c]),D?.()},isPinned:C?.has(ke.key)??false,onTogglePin:h,applySafeAreaInset:T})});if(Ho&&N.length===0)return Ee(s,{style:L.emptyState,children:[H(ga,{size:48,color:F.color.textTertiary}),H(u,{style:L.emptyTitle,children:"Loading storage keys..."})]});if(no)return Ee(s,{style:L.emptyState,children:[H(ga,{size:48,color:Sr.error}),H(u,{style:[L.emptyTitle,{color:Sr.error}],children:"Error loading storage"}),H(u,{style:L.emptySubtitle,children:no.message})]});let $i=Ee(Vd,{children:[ye==="mmkv"&&xe.length===0&&Ee(s,{style:L.emptyMMKVState,children:[H(u,{style:L.emptyMMKVTitle,children:"No MMKV Instances Detected"}),H(u,{style:L.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),H(u,{style:L.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
2
2
|
|
|
3
3
|
const storage = createMMKV();
|
|
4
|
-
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(l,{style:P.instanceNavbar,children:[Ee(l,{style:P.instanceNavbarHeader,children:[H(u,{style:P.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&H(ua,{style:{transform:[{scale:.85}]}})]}),Ee(Wr,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:P.instanceNavbarScroll,children:[(x||xe.length===1)&&Ee(O,{onPress:()=>$t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ae.mmkv} instances`,style:[P.instanceNavbarButton,re===null&&P.instanceNavbarButtonActive],children:[H(Za,{size:12,color:re===null?F.color.text:F.color.textSecondary}),H(u,{style:[P.instanceNavbarButtonText,re===null&&P.instanceNavbarButtonTextActive],children:"All"}),H(l,{style:P.instanceNavbarBadge,children:H(u,{style:P.instanceNavbarBadgeText,children:xe.reduce((c,h)=>c+h.keyCount,0)})})]}),xe.map((c,h)=>{let U=h>=Q;return Ee(O,{testID:`buoy-storage-instance-${c.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${c.id}`,onPress:()=>{U?Se(true):$t(c.id)},style:[P.instanceNavbarButton,c.id===re&&P.instanceNavbarButtonActive,{borderColor:U?F.color.border:Sr(c.id)+"40",backgroundColor:c.id===re?Sr(c.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[H(Za,{size:12,color:c.id===re?Sr(c.id):F.color.textSecondary}),H(u,{style:[P.instanceNavbarButtonText,c.id===re&&{color:Sr(c.id),fontWeight:"700"}],children:c.id}),H(l,{style:[P.instanceNavbarBadge,c.id===re&&{backgroundColor:Sr(c.id)+"30"}],children:H(u,{style:[P.instanceNavbarBadgeText,c.id===re&&{color:Sr(c.id)}],children:c.keyCount})})]},c.id)})]})]})]}),Fi=H(dd,{copyValue:jo,mmkvInstances:xe.map(c=>({id:c.id,instance:c.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:No,selectedCount:nr.size}),Wi=Nt?H(wd,{selectedKeys:Qe,mmkvInstances:xe.map(c=>({id:c.id,instance:c.instance})),onDeleteComplete:Ho,onHideKeys:Br,onSelectAll:Ar,onClearSelection:Dr,totalVisibleKeys:v.length}):null,$i=z?Ee(O,{style:P.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(l,{style:P.limitBannerContent,children:[Ee(l,{style:P.limitBannerLeft,children:[H(qs,{size:16,color:F.color.accent}),H(u,{style:P.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),H(ua,{})]}),H(u,{style:P.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,_i=(()=>{let c=N.some(U=>!ze(U.key)),h;return a||!c?(h=Gs({subject:"keys",verb:"registered",search:a,total:c?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&c&&(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"},H(Us,{...h,testID:"buoy-storage-keys-empty"})})(),Ni=H(js,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(l,{style:P.root,children:[_t>0?H(td,{onDone:()=>Tr(0)},_t):null,Ee(Wr,{testID:"buoy-storage-scroll",ref:Ye,onScroll:c=>{xr.current=c.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:P.scrollContainer,contentContainerStyle:P.container,showsVerticalScrollIndicator:false,children:[H(l,{style:P.backgroundGrid}),H(Mc,{stats:Ut,tabStats:pt,healthPercentage:Mr,healthStatus:Oi,healthColor:Li,activeFilter:se,onFilterChange:Ge,activeStorageType:ye,onStorageTypeChange:or,showStatus:!te}),Pi,Oe.length>0?Ee(l,{style:P.keysSection,children:[Ee(l,{style:P.sectionHeader,children:[Ee(l,{style:P.sectionHeaderLeft,children:[Ee(u,{style:P.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),H(l,{style:P.countBadge,children:H(u,{style:P.countText,children:v.length})})]}),Fi]}),Wi,H(Sa,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:y,onViewHistory:p,onHideKey:c=>Br([c]),onToggleKey:qo,onDeleteKey:oo,editBlockedFor:Vr,pinnedKeys:m,onTogglePin:b,onRowRef:gt,onOpenKey:R}),$i]}):_i,H(u,{style:P.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Ni]})]})}var P=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...sa,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...sa,opacity:.006,backgroundColor:vr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:$r,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:$r},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:$r,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:$r,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:$r},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 Bd}from"react/jsx-runtime";function ei({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:p,enabledStorageTypes:s,statusFilter:g,onStatusFilterChange:f,onStatusCountsChange:C,pinnedKeys:m,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return Bd(Rd,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:p,enabledStorageTypes:s,statusFilter:g,onStatusFilterChange:f,onStatusCountsChange:C,pinnedKeys:m,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as Vd}from"@buoy-gg/shared-ui/web";E();import{useMemo as Ad}from"react";import{useEventStoreEvents as Dd}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Md,appStorageEvent as Cn}from"@buoy-gg/shared-ui/web";function Ur(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function xo(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function ti(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=xo(e);return Ur(t.value)||Ur(t.prevValue)||Ur(r)||Ur(o)}var zd=0;function To(){return`se-${Date.now()}-${++zd}`}var Kd=class extends Md{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Cn(e);t&&super.addEvent(t)}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Le.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:To()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Gi(Nn));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:To()})}}}catch{}}async startCapturing(){Nc()||await _c(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=Da(e=>{let t={...e,storageType:"async",id:To()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Un(e=>{let t={...e,storageType:"mmkv",id:To()};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)ti(o)||t.set(o.id,o);let r=e.map(Cn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!ti(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...xo(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Cn(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)}},Lt=new Kd;function ri(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Ad(()=>t==="all"?void 0:d=>d.filter(p=>p.storageType===t),[t]),{events:a,clearEvents:i,isActive:y}=Dd(Lt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:y}}E();mt();import{useState as Io,useCallback as ct,useMemo as Pt,useEffect as oi,useRef as Od}from"react";import{formatRelativeTime as Eo,macOSColors as Ro,night as er,parseValue as Bo,devToolsStorageKeys as ni,GitBranch as Ld,EventStepperFooter as Pd,EventHistoryViewer as Fd,copyToClipboard as Wd,ProUpgradeModal as $d,monoFont as ai}from"@buoy-gg/shared-ui/web";import{useIsPro as _d}from"@buoy-gg/license/web";E();import{computeLineDiff as Bg,DiffType as Vg,ABSENT_VALUE as Nd,isAbsent as Ag}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Hd}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as qd,gitClassicTheme as zg,devToolsDefaultTheme as Kg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ii}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as jd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as li}from"react/jsx-runtime";function Ud({oldValue:e,newValue:t,scrollEnabled:r=true}){return li(l,{style:r?si.container:si.containerInline,children:li(jd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var si=pe.create({container:{flex:1,backgroundColor:ii.color.bg},containerInline:{backgroundColor:ii.color.bg}});E();function xn(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 Gd,monoFont as Jd}from"@buoy-gg/shared-ui/web";import{jsx as Tn,jsxs as Yd}from"react/jsx-runtime";var Qd={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 In({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=Qd[r],i=o||n;return Yd(O,{disabled:i,onPress:e,style:[Vo.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?Tn(Gd,{size:10,color:Re.color.textTertiary,style:Vo.lockIcon}):Tn(l,{style:[Vo.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),Tn(u,{style:[Vo.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Vo=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:Jd,height:12}});E();mt();Jt();import{isDevToolsStorageKey as Zd}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function En(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 Or(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Rn(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++)eu(e[i],r);let o=new Set;for(let i of e)Xd(i,o);let n=[],a=[];for(let i of o){if(Zd(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 Or(n)}function Xd(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 eu(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),p={...y,...d};t.set(n,JSON.stringify(p))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function Bn(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 tu,jsx as je,jsxs as ci}from"react/jsx-runtime";var wr=-1,Ao={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 Do(e){switch(e){case"setItem":case"multiSet":return Ro.semantic.success;case"removeItem":case"multiRemove":case"clear":return Ro.semantic.error;case"mergeItem":case"multiMerge":return Ro.semantic.info;default:return Ro.text.muted}}function di(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 ru={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},ou=[];function Vn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=_d(),[a,i]=Io(false),[y,d]=Io("split"),[p,s]=Io(Math.max(wr,t-1)),[g,f]=Io(t),C=Od(false),m=Pt(()=>e.events.sort((ne,gt)=>ne.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),b=m.length;oi(()=>{if(C.current)return;(async()=>{try{let ne=await oe.getItem(ni.storage.diffViewerMode());(ne==="split"||ne==="tree")&&d(ne),C.current=true}catch{}})()},[]),oi(()=>{let ne=Math.min(b-1,Math.max(0,t)),gt=Math.max(wr,Math.min(ne-1,t-1));s(gt),f(ne)},[t,b]);let S=ct(async ne=>{d(ne);try{await oe.setItem(ni.storage.diffViewerMode(),ne)}catch{}},[]),w=m[t],T=w?.action,I=p===wr,R=I?void 0:m[Math.max(0,Math.min(b-1,p))],D=m[Math.max(0,Math.min(b-1,g))],x=Pt(()=>{let ne=D?.data;return ne?.initialScan?"scanned":ne?.prevValue===null||ne?.prevValue===void 0?"absent":"prior"},[D]),B=Pt(()=>x==="absent"?Nd:x==="scanned"?Bo(D?.data?.value):Bo(D?.data?.prevValue),[x,D]),Q=Pt(()=>I?{index:wr,label:Ao[x].label,timestamp:Ao[x].timestamp,relativeTime:Ao[x].relativeTime,badge:je(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:je(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Ao[x].badge})})}:{index:p,label:`#${p+1} / ${b}`,timestamp:R?di(R.timestamp):"",relativeTime:R?Eo(R.timestamp):"",badge:R?je(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Do(R.action)}20`}],children:je(u,{style:[tr.actionTextSmall,{color:Do(R.action)}],children:xn(R.action)})}):void 0},[p,R,b,I,x]),ve=Pt(()=>({index:g,label:`#${g+1} / ${b}`,timestamp:D?di(D.timestamp):"",relativeTime:D?Eo(D.timestamp):"",badge:D?je(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Do(D.action)}20`}],children:je(u,{style:[tr.actionTextSmall,{color:Do(D.action)}],children:xn(D.action)})}):void 0}),[g,D,b]),Se=Pt(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),q=ct(()=>{p>wr&&s(p-1)},[p]),ue=ct(()=>{p<g-1&&s(p+1)},[p,g]),te=ct(()=>{g>p+1&&f(g-1)},[g,p]),se=ct(()=>{g<b-1&&f(g+1)},[g,b]),Ge=Pt(()=>I?B:Bo(R?.data?.value??null),[I,B,R]),Je=Pt(()=>Bo(D?.data?.value),[D]),wt=ct(()=>y==="split"?je(Hd,{oldValue:Ge,newValue:Je,differences:ou,theme:qd.devToolsDefault,options:ru,showThemeName:false,scrollEnabled:false}):je(Ud,{oldValue:Ge,newValue:Je,scrollEnabled:false}),[Ge,Je,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 En(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ne=m.filter(_t=>_t.storageType!=="mmkv"),gt=ne.findIndex(_t=>_t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Rn(ne,gt)}catch{}},[w,m,n]),$t=ct(async()=>{if(!w)return;let ne={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await Wd(ne)},[w]),Ye=w?.storageType!=="mmkv",xr=Ye&&w&&Bn(w);return ci(tu,{children:[Ye&&ci(l,{style:tr.actionButtonsContainer,children:[je(In,{type:"undo",text:"UNDO",onPress:or,disabled:!xr,locked:!n}),je(In,{type:"jump",text:"JUMP",onPress:re,locked:!n}),je(In,{type:"copy",text:"COPY",onPress:$t})]}),je(Fd,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Ld,diffModeTabs:Se,activeDiffMode:y,onDiffModeChange:S,renderDiffContent:wt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:q,onLeftNext:ue,onRightPrevious:te,onRightNext:se,canLeftPrevious:p>wr,canLeftNext:p<g-1,canRightPrevious:g>p+1,canRightNext:g<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:Eo(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),je($d,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function An({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 je(Pd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:Eo(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:ai,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:ai}});E();import{Filter as ui,DynamicFilterView as nu,Database as au,HardDrive as iu,Shield as lu,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as kr}from"react/jsx-runtime";function su({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:ui},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 ${ae.asyncFull}: show or hide captured events`,`\u2022 ${ae.mmkv}: show or hide captured events`],icon:ui},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return kr(l,{style:et.container,children:[kr(l,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),kr(l,{style:et.storageTypeButtons,children:[kr(O,{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 ${ae.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(au,{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:ae.asyncFull})]}),kr(O,{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 ${ae.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(iu,{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:ae.mmkv})]}),Ia()&&kr(O,{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(lu,{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(nu,{...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 cu}from"react";import{RelativeTime as du,macOSColors as Gr,parseValue as uu,CompactRow as yu}from"@buoy-gg/shared-ui/web";import{jsx as yi}from"react/jsx-runtime";function gu(e){let t=uu(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 pu(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return Gr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return Gr.semantic.error;case"mergeItem":case"multiMerge":return Gr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return Gr.semantic.warning;default:return Gr.text.muted}}function fu(e,t){return`${Array.from(e).map(r=>r==="async"?ae.async:ae.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Dn=cu(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=pu(e.lastAction),i=xn(e.lastAction),y=e.totalOperations??1;return yi(yu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:fu(e.storageTypes,y),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:yi(du,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as mu}from"@buoy-gg/license/web";import{Fragment as gi,jsx as M,jsxs as dt}from"react/jsx-runtime";var Yg=_s["storage.events"].free,Mn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},hu={storage:Mn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},bu={storage:Mn,parse:e=>e==="true",serialize:e=>e.toString()},pi={storage:Mn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},vu={...pi,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function zn({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:y,onRefresh:d,onEventSelect:p}){let s=mu(),g=$s("storage.events"),[f,C]=go(ur.storage.activeTab(),"browser",hu);en(()=>{y?.(f)},[f,y]);let[m,b]=ot(""),[S,w]=ot(null),[T,I]=ot(false),[R,D]=go(ur.storage.isMonitoring(),true,bu),{events:x,clearEvents:B,isCapturing:Q}=ri({enabled:R}),[ve,Se]=ot(null),[q,ue]=ot(null),[te,se]=ot(null),[Ge,Je]=ot(0),[wt,Rt]=ot(false),[ye,or]=go(ur.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),vu),[re,$t]=ot("all"),[Ye,xr]=ot(new Set(["async","mmkv","secure"])),[ne,gt]=go(ur.storage.pinnedKeys(),new Set,pi),_t=Zn(null),Tr=R&&Q,[Nt,Ir]=ot("bottomSheet"),nr=De(v=>{Ir(v)},[]),Bt=De(()=>{D(v=>!v)},[]),xe=De(()=>{B(),Se(null),Je(0)},[B]),Qr=De(v=>{ue(v),se(null)},[]),Zr=De(()=>{ue(null),se(null)},[]),Xr=De(v=>{or(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ht=De(v=>{or(k=>new Set([...k,v]))},[]),Po=De(v=>{gt(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Er=De(()=>{Rt(!wt)},[wt]),Fo=De(v=>{xr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Rr=Zn([]),ar=De(()=>{let v=Rr.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=yo(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]=yo(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=yo(z.value),k),{})}},[]),Wo=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await uo()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await sl()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),qt=v=>{let k=Ds(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"},[eo,$o]=ot([]);en(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();$o([...v].sort())}catch{}})()},[e]);let to=st(()=>{let v=new Set(eo);return x.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[x,eo]),N=st(()=>{let v=new Map;return x.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Ye.has(k.storageType)||Array.from(ye).some(Qe=>z.includes(Qe)))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())},[x,ye,Ye]),ke=st(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),_o=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),ro=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Te=st(()=>q&&N.find(v=>v.key===q)||null,[q,N]);en(()=>{if(!p)return;let v=ke||(te!==null?Te:null),k=ke?Ge:te;if(!v||k==null)return;let z=[...v.events].sort((Ar,Dr)=>Ar.timestamp.getTime()-Dr.timestamp.getTime()),j=z[k],Qe=z[k-1];j&&p(j),Qe&&p(Qe)},[p,ke,Ge,Te,te]);let tt=st(()=>x.filter(v=>{if(!v.data?.key||!Ye.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[x,ye,Ye]),No=st(()=>Ea(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(v=>v.storageType===re),[tt,re]),Ho=De(()=>rt.map(v=>({key:v.data?.key,action:v.action,value:yo(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[rt]),Br=st(()=>rt.slice(0,g),[rt,g]),jt=st(()=>Math.max(0,rt.length-g),[rt.length,g]),qo=.8,oo=De(v=>v.id,[]),Vr=De(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Qe)=>j.timestamp.getTime()-Qe.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Je(z>=0?z:0)},[N]),jo=De(({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(Dn,{data:k,onPress:()=>Vr(v),testID:`buoy-storage-event-${v.id}`})},[Vr]);if(!e)return null;let Ut=n?ur.modal.root():ur.storage.modal(),pt=()=>{if(wt)return M(su,{ignoredPatterns:ye,onTogglePattern:Xr,onAddPattern:Ht,availableKeys:to,enabledStorageTypes:Ye,onToggleStorageType:Fo});if(f==="browser"){if(q&&Te){if(te!==null)return M(l,{style:he.contentWrapper,children:M(Vn,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Qe)=>j.timestamp.getTime()-Qe.timestamp.getTime()),z=[...k].reverse();return M(tn,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Qe=k.findIndex(Dr=>Dr.timestamp.getTime()===j.timestamp.getTime()),Ar={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Dn,{data:Ar,onPress:()=>se(Qe>=0?Qe:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(ei,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Xr,onAddPattern:Ht,searchQuery:m,storageDataRef:Rr,eventCountByKey:_o,lastWriteByKey:ro,onViewHistory:Qr,enabledStorageTypes:Ye,pinnedKeys:ne,onTogglePin:Po,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:$t,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(l,{style:he.contentWrapper,children:M(Vn,{conversation:ke,selectedEventIndex:Ge,onEventIndexChange:Je,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(gn,{active:re,onChange:$t,counts:No})});if(rt.length===0){let k=re!=="all";return dt(l,{style:he.flexFill,children:[v,M(zs,{testID:"buoy-storage-events-empty",...Tr?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(tn,{testID:"buoy-storage-events-list",style:he.flexFill,data:Br,renderItem:jo,keyExtractor:oo,onEndReachedThreshold:qo,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(l,{style:he.lockedBannerContainer,children:M(Vd,{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(An,{conversation:ke,selectedEventIndex:Ge,onEventIndexChange:Je,applySafeAreaInset:Nt==="bottomSheet"}):Te&&te!==null&&Te.events.length>1?M(An,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Pn=wt?()=>Rt(false):te!==null?()=>se(null):q?Zr:ke?()=>{Se(null),Je(0)}:r,Oe=wt?dt(Me,{children:[M(Me.Navigation,{onBack:()=>Rt(false)}),M(Me.Content,{title:"Filters"})]}):q?dt(Me,{children:[M(Me.Navigation,{onBack:te!==null?()=>se(null):Zr}),M(Me.Content,{title:`${q} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Je(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(Ps,{value:m,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(As,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:f,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{C(v),ue(null),se(null),Se(null),Je(0),w(null)}})}),dt(Me.Actions,{children:[d&&!T?M(O,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Os,{size:14,color:$e.color.textSecondary})}):null,M(O,{onPress:Er,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Ye.size<3)&&he.activeFilterButton],children:M(Ks,{size:14,color:ye.size>0||Ye.size<3?$e.color.accent:$e.color.textSecondary})}),f==="browser"&&!T&&dt(gi,{children:[M(O,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(Ls,{size:14,color:$e.color.textSecondary})}),M(ia,{value:ar,disabled:Rr.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),f==="events"&&dt(gi,{children:[M(ia,{value:Ho,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(Fs,{isEnabled:Tr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(Ws,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(la,{children:dt(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ns,children:Oe}),pt(),ir]})}):M(la,{children:M(Vs,{visible:e,onClose:t,onBack:Pn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Oe},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function Su(e={}){return M(zn,{...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:Ms.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:$e.color.buttonSurface,borderWidth:1,borderColor:$e.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:$e.color.accentSoft,borderColor:$e.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:$e.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:po,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:$e.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:po},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:$e.color.text,fontSize:12,fontWeight:"600",fontFamily:po,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:$e.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:$e.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:$e.color.accent,fontFamily:po,letterSpacing:.5},contentWrapper:{flex:1}});E();mt();Jt();import{approxJsonSize as fi,isDevToolsStorageKey as ut,isOverWireBudget as mi,isJsonSerializable as wu}from"@buoy-gg/shared-ui/web";var Mo=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),ku=16*1024,Kn=1.25*1024*1024,hi=8*1024*1024;function On(e){return e===void 0?e:mi(e,ku)?Mo:e}function zo(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=xo(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 bi(e){return e===void 0||!mi(e,hi)?e:wu(e)?{__buoyTruncated:true,note:`Exceeds the ${hi/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Mo}var vi=new WeakMap,Si=new WeakMap;function Cu(e){let t=vi.get(e);if(t)return t;let r;try{let o=zo(e,On);r={event:o,bytes:fi(o,Kn).bytes}}catch{r={event:zo(e,()=>Mo),bytes:1024}}return vi.set(e,r),r}function xu(e){let t=Si.get(e);if(t)return t;let r=zo(e,n=>n===void 0?void 0:Mo),o={event:r,bytes:fi(r,Kn).bytes};return Si.set(e,o),o}function Tu(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=Cu(e[o]);if(r+n.bytes<=Kn)t[o]=n.event,r+=n.bytes;else{let a=xu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function wi(e){let t=Le.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 ki=[];function Iu(e){ki=e}var Eu={version:3,getSnapshot:()=>Tu(Lt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&ut(t))})),subscribe:e=>Lt.subscribeToEvents(e),actions:{clearEvents:()=>{Lt.clearEvents()},getRequiredKeys:()=>ki,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Lt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=zo(r,bi);return{found:true,id:t,event:o}},clearAppStorage:()=>uo(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Lt.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(!Bn(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await En(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=Lt.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 Rn(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 so(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=>Or(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Le.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:On(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=Le.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:bi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;wi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=wi(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=ee.getModule();return Promise.all(ee.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=ee.getModule(),t=ee.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:On(i)})}return r},"secure.get":e=>{let{key:t}=e;if(ut(t))return null;let r=ee.getAll().find(n=>n.key===t),o=ee.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 ee.setValue(t,r)},"secure.delete":e=>ee.deleteValue(e.key)}};import{jsx as Ru}from"react/jsx-runtime";var Ci=xl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>Ru(kl,{size:e}),component:zn,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),Bu=Cl(Ci,e=>(Iu(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as Vu,CyberpunkSectionButton as Au}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Du}from"@buoy-gg/shared-ui/web";import{jsx as Mu}from"react/jsx-runtime";function zu({onPress:e}){let{storageKeys:t}=mn(),r=t.filter(n=>!Du(n.key)).length,o=r;return Mu(Au,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:Vu,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as xi,CheckCircle2 as Ku,Eye as Ti,XCircle as Ii,HardDrive as Ei,Database as Ri,Shield as Ou,gameUIColors as Ko,macOSColors as ie,night as be,monoFont as Oo}from"@buoy-gg/shared-ui/web";import{DataViewer as Lu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var Bi=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Lo(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Bi[t%Bi.length]}var Pu=e=>{switch(e){case"required_present":return{icon:Ku,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:xi,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:Ii,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:Ii,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:Ti,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},Fu=e=>{switch(e){case"mmkv":return Ei;case"async":return Ri;case"secure":return Ou;default:return Ri}};function Wu({storageKey:e,isExpanded:t,onToggle:r}){let o=Pu(e.status),n=o.icon,a=Fu(e.storageType),i=e.value!==void 0&&e.value!==null,y=e.expectedValue!==void 0,d=e.expectedType!==void 0,p=fa(e.storageType),s=ln(e.storageType,e.instanceId);return Ae(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(O,{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:`${p}15`}],children:[Y(a,{size:10,color:p}),Y(u,{style:[K.storageText,{color:p}],children:s})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(l,{style:[K.instanceBadge,{backgroundColor:Lo(e.instanceId)+"20",borderColor:Lo(e.instanceId)+"40"}],children:[Y(Ei,{size:9,color:Lo(e.instanceId)}),Y(u,{style:[K.instanceText,{color:Lo(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(Ti,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let g=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof g=="string"||typeof g=="number"||typeof g=="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(g)})}),Ae(u,{style:K.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Lu,{title:"Current Value",data:g,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(xi,{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:Oo,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:Ko.success,fontSize:12,fontFamily:Oo,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:Oo,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:Oo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Ko.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Ko.warning+"1A"},emptyValueText:{color:Ko.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 $u,CheckCircle2 as _u,XCircle as Vi,Eye as Nu,Database as Ai,Shield as Hu}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as Ue}from"react/jsx-runtime";var qu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:_u,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:$u,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Vi,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Vi,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Nu,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],ju=[{key:"mmkv",label:ae.mmkv,description:ae.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ai},{key:"async",label:ae.asyncFull,description:ae.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ai},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Hu}];function Uu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:y,asyncCount:d,secureCount:p}=e;return t===0?Ue(l,{style:X.statsContainer,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE BREAKDOWN"}),Ce(l,{style:X.emptyState,children:Ce(u,{style:X.emptyStateText,children:"No storage keys detected"})})]}):Ue(l,{style:X.statsContainer,children:[Ue(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:qu.map(s=>{let g=0,f=false;switch(s.key){case"valid":g=a,f=g>0;break;case"missing":g=r,f=g>0;break;case"wrongValue":g=o,f=g>0;break;case"wrongType":g=n,f=g>0;break;case"optional":g=i,f=g>0;break}if(!f)return null;let C=t>0?(g/t*100).toFixed(1):"0",m=s.icon;return Ce(l,{style:X.breakdownItem,children:Ue(l,{style:X.breakdownItemRow,children:[Ue(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:s.bgColor}],children:Ce(m,{size:14,color:s.color})}),Ue(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:s.label}),Ce(u,{style:X.breakdownItemDesc,children:s.description})]})]}),Ue(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:s.textColor}],children:g}),Ue(u,{style:X.breakdownPercentage,children:[C,"%"]})]})]})},s.key)})})]}),(y>0||d>0||p>0)&&Ue(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:ju.map(s=>{let g=0,f=false;switch(s.key){case"mmkv":g=y,f=g>0;break;case"async":g=d,f=g>0;break;case"secure":g=p,f=g>0;break}if(!f)return null;let C=t>0?(g/t*100).toFixed(1):"0",m=s.icon,b=fa(s.key);return Ce(l,{style:X.breakdownItem,children:Ue(l,{style:X.breakdownItemRow,children:[Ue(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:`${b}15`}],children:Ce(m,{size:14,color:b})}),Ue(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:s.label}),Ce(u,{style:X.breakdownItemDesc,children:s.description})]})]}),Ue(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:b}],children:g}),Ue(u,{style:X.breakdownPercentage,children:[C,"%"]})]})]})},s.key)})})]})]})}var X=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 Gu,CyberpunkSectionButton as Ju}from"@buoy-gg/shared-ui/web";import{jsx as Yu}from"react/jsx-runtime";function Qu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return Yu(Ju,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Gu,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Jr}from"@buoy-gg/shared-ui/web";var Zu=["SET","GET","MERGE","DELETE","CLEAR"],Xu={SET:Jr.semantic.info,GET:Jr.text.muted,MERGE:Jr.semantic.debug,DELETE:Jr.semantic.error,CLEAR:Jr.semantic.warning};function ey(e){return Xu[e]}function ty(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 ry(e){return!!e.data?.initialScan}E();import{useState as oy}from"react";import{macOSColors as rr,night as de,monoFont as Di}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function ny({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=oy(false),{instances:a,instanceCount:i,refresh:y}=Sn(false),d=a.find(s=>s.id===e),p=s=>{t(s),n(false)};return pn()?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(O,{style:_.refreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:_.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(l,{style:_.container,children:[it(O,{style:_.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:_.selectorContent,children:d?le(Mi,{instance:d,isSelected:true}):le(u,{style:_.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:_.dropdownArrow,children:"\u25BC"})]}),le(aa,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(O,{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(O,{style:_.headerRefreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:_.headerRefreshText,children:"\u21BB"})})]}),le(Wr,{style:_.dropdownList,children:a.map(s=>le(O,{style:[_.dropdownItem,s.id===e&&_.dropdownItemSelected],onPress:()=>p(s.id),activeOpacity:.7,children:le(Mi,{instance:s,isSelected:s.id===e})},s.id))})]})})})]}):le(l,{style:_.container,children:it(l,{style:_.unavailableState,children:[it(u,{style:_.unavailableTitle,children:[ae.mmkv," Not Available"]}),le(u,{style:_.unavailableDescription,children:Ra()})]})})}function Mi({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:Di},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:Di},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as ay}from"@buoy-gg/shared-ui/web";import{jsx as Ke,jsxs as Cr}from"react/jsx-runtime";function iy({instanceId:e}){let t=Wa(e);return t?Ke(l,{style:ge.container,children:Cr(l,{style:ge.panel,children:[Ke(l,{style:ge.header,children:Ke(u,{style:ge.headerTitle,children:"Instance Details"})}),Cr(l,{style:ge.infoGrid,children:[Ke(Yr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Ke(Yr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Ke(Yr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),Ke(Yr,{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(Yr,{label:"Size",value:ly(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&Cr(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&&Cr(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:Cr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Yr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return Cr(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 ly(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:ay},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 zi,subscribeToBrowserStorage as sy}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as Ln}from"@buoy-gg/shared-ui/web";lo();var Ki=0;function cy(e){let t=()=>zi(e),r=()=>Array.from({length:t().length},(n,a)=>t().key(a)).filter(n=>n!==null&&!Ln(n)),o=n=>{try{return JSON.parse(t().getItem(n)??"")}catch{return}};return{set(n,a){t().setItem(n,String(a))},getString(n){let a=typeof o(n);return a==="number"||a==="boolean"?void 0:t().getItem(n)??void 0},getNumber(n){let a=o(n);return typeof a=="number"?a:void 0},getBoolean(n){let a=o(n);return typeof a=="boolean"?a:void 0},getBuffer(){},contains(n){return t().getItem(n)!==null},delete(n){let a=this.contains(n);return t().removeItem(n),a},getAllKeys:r,clearAll(){for(let n of r())t().removeItem(n)},get size(){return r().reduce((n,a)=>n+2*(a.length+(t().getItem(a)?.length??0)),0)},addOnValueChangedListener(n){return{remove:sy(a=>{a.area===e&&(a.key!==void 0?Ln(a.key)||n(a.key):a.prevPairs?.forEach(([i])=>{Ln(i)||n(i)}))})}}}}function dy(){return zr()?["localStorage","sessionStorage"]:["sessionStorage"]}function uy(){if(typeof window>"u")return()=>{};try{zi("sessionStorage")}catch{return()=>{}}let e=dy();if(++Ki===1)for(let r of e)Gn(r,cy(r));let t=true;return()=>{if(t&&(t=false,--Ki===0))for(let r of e)Jn(r)}}export{iy as MMKVInstanceInfoPanel,ny as MMKVInstanceSelector,Zu as STORAGE_OPS,ei as StorageBrowserMode,Dn as StorageEventCard,Vn as StorageEventDetailContent,An as StorageEventDetailFooter,Qu as StorageEventsSection,Wu as StorageKeyCard,Sa as StorageKeySection,Uu as StorageKeyStatsSection,zn as StorageModalWithTabs,zu as StorageSection,Su as StorageToolView,gn as StorageTypeFilterBar,xo as batchPairsOf,Bn as canUndo,uo as clearAllAppStorage,Ea as countByStorageType,Bu as createStorageTool,kt as detectMMKVType,dl as formatMMKVValue,Dc as getMMKVClass,Ra as getMMKVUnavailableMessage,gu as getValueType,ry as isInitialScan,pn as isMMKVAvailable,Qo as isTypeMatch,Ur as isValueOnDevice,Rn as jumpToState,Gn as registerMMKVInstance,pl as registerSecureStoreKeys,Cd as requestStorageBrowserRefresh,Ga as setStorageValue,uy as startBrowserStorageCapture,kn as storageEditBlockedReason,Lt as storageEventStore,ey as storageOpDot,ty as storageOpOf,Eu as storageSyncAdapter,Ci as storageToolPreset,xd as storageValueToEditableText,En as undoOperation,Jn as unregisterMMKVInstance,fl as unregisterSecureStoreKey,mn as useAsyncStorageKeys,Wa as useMMKVInstance,Yc as useMMKVInstanceExists,Sn as useMMKVInstances,Hc as useMMKVKeys,La as useMultiMMKVKeys,ri as useStorageEvents,Ua as validateStorageValue};
|
|
4
|
+
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(s,{style:L.instanceNavbar,children:[Ee(s,{style:L.instanceNavbarHeader,children:[H(u,{style:L.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&H(pa,{style:{transform:[{scale:.85}]}})]}),Ee(_r,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:L.instanceNavbarScroll,children:[(x||xe.length===1)&&Ee(O,{onPress:()=>$t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ae.mmkv} instances`,style:[L.instanceNavbarButton,re===null&&L.instanceNavbarButtonActive],children:[H(ti,{size:12,color:re===null?F.color.text:F.color.textSecondary}),H(u,{style:[L.instanceNavbarButtonText,re===null&&L.instanceNavbarButtonTextActive],children:"All"}),H(s,{style:L.instanceNavbarBadge,children:H(u,{style:L.instanceNavbarBadgeText,children:xe.reduce((c,b)=>c+b.keyCount,0)})})]}),xe.map((c,b)=>{let U=b>=Q;return Ee(O,{testID:`buoy-storage-instance-${c.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${c.id}`,onPress:()=>{U?Se(true):$t(c.id)},style:[L.instanceNavbarButton,c.id===re&&L.instanceNavbarButtonActive,{borderColor:U?F.color.border:wr(c.id)+"40",backgroundColor:c.id===re?wr(c.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[H(ti,{size:12,color:c.id===re?wr(c.id):F.color.textSecondary}),H(u,{style:[L.instanceNavbarButtonText,c.id===re&&{color:wr(c.id),fontWeight:"700"}],children:c.id}),H(s,{style:[L.instanceNavbarBadge,c.id===re&&{backgroundColor:wr(c.id)+"30"}],children:H(u,{style:[L.instanceNavbarBadgeText,c.id===re&&{color:wr(c.id)}],children:c.keyCount})})]},c.id)})]})]})]}),_i=H(gd,{copyValue:Go,mmkvInstances:xe.map(c=>({id:c.id,instance:c.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:qo,selectedCount:nr.size}),Ni=Nt?H(xd,{selectedKeys:Qe,mmkvInstances:xe.map(c=>({id:c.id,instance:c.instance})),onDeleteComplete:jo,onHideKeys:Vr,onSelectAll:Dr,onClearSelection:Mr,totalVisibleKeys:S.length}):null,Hi=K?Ee(O,{style:L.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(s,{style:L.limitBannerContent,children:[Ee(s,{style:L.limitBannerLeft,children:[H(Gs,{size:16,color:F.color.accent}),H(u,{style:L.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),H(pa,{})]}),H(u,{style:L.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,qi=(()=>{let c=N.some(U=>!Ke(U.key)),b;return a||!c?(b=Qs({subject:"keys",verb:"registered",search:a,total:c?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&c&&(b={...b,message:"No keys match. Clear the search to see them."})):se==="missing"?b={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?b={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:b={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},H(Ys,{...b,testID:"buoy-storage-keys-empty"})})(),ji=H(Js,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(s,{style:L.root,children:[_t>0?H(nd,{onDone:()=>Ir(0)},_t):null,Ee(_r,{keyboardShouldPersistTaps:"handled",testID:"buoy-storage-scroll",ref:Ye,onScroll:c=>{Tr.current=c.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:L.scrollContainer,contentContainerStyle:L.container,showsVerticalScrollIndicator:false,children:[H(s,{style:L.backgroundGrid}),H(Oc,{stats:Ut,tabStats:pt,healthPercentage:Kr,healthStatus:Fi,healthColor:Wi,activeFilter:se,onFilterChange:Ge,activeStorageType:ye,onStorageTypeChange:or,showStatus:!te}),$i,Oe.length>0?Ee(s,{style:L.keysSection,children:[Ee(s,{style:L.sectionHeader,children:[Ee(s,{style:L.sectionHeaderLeft,children:[Ee(u,{style:L.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),H(s,{style:L.countBadge,children:H(u,{style:L.countText,children:S.length})})]}),_i]}),Ni,H(Ca,{title:"",count:-1,keys:S,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:d,onViewHistory:f,onHideKey:c=>Vr([c]),onToggleKey:Uo,onDeleteKey:ao,editBlockedFor:Ar,pinnedKeys:C,onTogglePin:h,onRowRef:gt,onOpenKey:R}),Hi]}):qi,H(u,{style:L.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),ji]})]})}var L=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...ua,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...ua,opacity:.006,backgroundColor:Sr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:Nr,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:Nr},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:Nr,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:Nr,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:Nr},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 Dd}from"react/jsx-runtime";function oi({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:d,lastWriteByKey:p,onViewHistory:f,enabledStorageTypes:l,statusFilter:y,onStatusFilterChange:g,onStatusCountsChange:v,pinnedKeys:C,onTogglePin:h,applySafeAreaInset:m,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return Dd(Ad,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:d,lastWriteByKey:p,onViewHistory:f,enabledStorageTypes:l,statusFilter:y,onStatusFilterChange:g,onStatusCountsChange:v,pinnedKeys:C,onTogglePin:h,applySafeAreaInset:m,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as Md}from"@buoy-gg/shared-ui/web";E();import{useMemo as Kd}from"react";import{useEventStoreEvents as zd}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Od,appStorageEvent as Tn}from"@buoy-gg/shared-ui/web";function Jr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function Io(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function ni(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=Io(e);return Jr(t.value)||Jr(t.prevValue)||Jr(r)||Jr(o)}var Pd=0;function Eo(){return`se-${Date.now()}-${++Pd}`}var Ld=class extends Od{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Tn(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:d}=kt(o,a),p={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[d]??"set.string";this.addEvent({action:p,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:d,initialScan:true},storageType:"mmkv",id:Eo()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Qi(qn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,d]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:d??void 0,initialScan:true},storageType:"async",id:Eo()})}}}catch{}}async startCapturing(){jc()||await qc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=za(e=>{let t={...e,storageType:"async",id:Eo()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Jn(e=>{let t={...e,storageType:"mmkv",id:Eo()};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)ni(o)||t.set(o.id,o);let r=e.map(Tn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!ni(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...Io(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Tn(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 Ld;function ai(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Kd(()=>t==="all"?void 0:p=>p.filter(f=>f.storageType===t),[t]),{events:a,clearEvents:i,isActive:d}=zd(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:d}}E();mt();import{useState as Ro,useCallback as ct,useMemo as Lt,useEffect as ii,useRef as Fd}from"react";import{formatRelativeTime as Bo,macOSColors as Vo,night as er,parseValue as Ao,devToolsStorageKeys as li,GitBranch as Wd,EventStepperFooter as $d,EventHistoryViewer as _d,copyToClipboard as Nd,ProUpgradeModal as Hd,monoFont as si}from"@buoy-gg/shared-ui/web";import{useIsPro as qd}from"@buoy-gg/license/web";E();import{computeLineDiff as Dg,DiffType as Mg,ABSENT_VALUE as jd,isAbsent as Kg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Ud}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as Gd,gitClassicTheme as Pg,devToolsDefaultTheme as Lg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ci}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as Jd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as di}from"react/jsx-runtime";function Yd({oldValue:e,newValue:t,scrollEnabled:r=true}){return di(s,{style:r?ui.container:ui.containerInline,children:di(Jd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var ui=pe.create({container:{flex:1,backgroundColor:ci.color.bg},containerInline:{backgroundColor:ci.color.bg}});E();function In(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 Qd,monoFont as Zd}from"@buoy-gg/shared-ui/web";import{jsx as En,jsxs as Xd}from"react/jsx-runtime";var eu={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 Rn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=eu[r],i=o||n;return Xd(O,{disabled:i,onPress:e,style:[Do.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?En(Qd,{size:10,color:Re.color.textTertiary,style:Do.lockIcon}):En(s,{style:[Do.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),En(u,{style:[Do.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Do=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:Zd,height:12}});E();mt();Jt();import{isDevToolsStorageKey as tu}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function Bn(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 Pr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Vn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let d=i.data;if(Ft(d?.value)||Ft(d?.prevValue)||Ft(d?.pairs)||Ft(d?.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++)ou(e[i],r);let o=new Set;for(let i of e)ru(i,o);let n=[],a=[];for(let i of o){if(tu(i))continue;let d=r.get(i);d==null?a.push(i):n.push([i,d])}a.length>0&&await sr(a),n.length>0&&await Pr(n)}function ru(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 ou(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),d={...a,...i};t.set(o.key,JSON.stringify(d))}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 d=JSON.parse(i),p=JSON.parse(a),f={...d,...p};t.set(n,JSON.stringify(f))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function An(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 nu,jsx as je,jsxs as yi}from"react/jsx-runtime";var kr=-1,Mo={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 Ko(e){switch(e){case"setItem":case"multiSet":return Vo.semantic.success;case"removeItem":case"multiRemove":case"clear":return Vo.semantic.error;case"mergeItem":case"multiMerge":return Vo.semantic.info;default:return Vo.text.muted}}function gi(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 au={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},iu=[];function Dn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=qd(),[a,i]=Ro(false),[d,p]=Ro("split"),[f,l]=Ro(Math.max(kr,t-1)),[y,g]=Ro(t),v=Fd(false),C=Lt(()=>e.events.sort((ne,gt)=>ne.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),h=C.length;ii(()=>{if(v.current)return;(async()=>{try{let ne=await oe.getItem(li.storage.diffViewerMode());(ne==="split"||ne==="tree")&&p(ne),v.current=true}catch{}})()},[]),ii(()=>{let ne=Math.min(h-1,Math.max(0,t)),gt=Math.max(kr,Math.min(ne-1,t-1));l(gt),g(ne)},[t,h]);let m=ct(async ne=>{p(ne);try{await oe.setItem(li.storage.diffViewerMode(),ne)}catch{}},[]),w=C[t],T=w?.action,I=f===kr,R=I?void 0:C[Math.max(0,Math.min(h-1,f))],D=C[Math.max(0,Math.min(h-1,y))],x=Lt(()=>{let ne=D?.data;return ne?.initialScan?"scanned":ne?.prevValue===null||ne?.prevValue===void 0?"absent":"prior"},[D]),B=Lt(()=>x==="absent"?jd:x==="scanned"?Ao(D?.data?.value):Ao(D?.data?.prevValue),[x,D]),Q=Lt(()=>I?{index:kr,label:Mo[x].label,timestamp:Mo[x].timestamp,relativeTime:Mo[x].relativeTime,badge:je(s,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:je(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Mo[x].badge})})}:{index:f,label:`#${f+1} / ${h}`,timestamp:R?gi(R.timestamp):"",relativeTime:R?Bo(R.timestamp):"",badge:R?je(s,{style:[tr.actionBadgeSmall,{backgroundColor:`${Ko(R.action)}20`}],children:je(u,{style:[tr.actionTextSmall,{color:Ko(R.action)}],children:In(R.action)})}):void 0},[f,R,h,I,x]),ve=Lt(()=>({index:y,label:`#${y+1} / ${h}`,timestamp:D?gi(D.timestamp):"",relativeTime:D?Bo(D.timestamp):"",badge:D?je(s,{style:[tr.actionBadgeSmall,{backgroundColor:`${Ko(D.action)}20`}],children:je(u,{style:[tr.actionTextSmall,{color:Ko(D.action)}],children:In(D.action)})}):void 0}),[y,D,h]),Se=Lt(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),q=ct(()=>{f>kr&&l(f-1)},[f]),ue=ct(()=>{f<y-1&&l(f+1)},[f,y]),te=ct(()=>{y>f+1&&g(y-1)},[y,f]),se=ct(()=>{y<h-1&&g(y+1)},[y,h]),Ge=Lt(()=>I?B:Ao(R?.data?.value??null),[I,B,R]),Je=Lt(()=>Ao(D?.data?.value),[D]),wt=ct(()=>d==="split"?je(Ud,{oldValue:Ge,newValue:Je,differences:iu,theme:Gd.devToolsDefault,options:au,showThemeName:false,scrollEnabled:false}):je(Yd,{oldValue:Ge,newValue:Je,scrollEnabled:false}),[Ge,Je,d]),Rt=ct(()=>{r(Math.max(0,t-1))},[t,r]),ye=ct(()=>{r(Math.min(h-1,t+1))},[t,h,r]),or=ct(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await Bn(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ne=C.filter(_t=>_t.storageType!=="mmkv"),gt=ne.findIndex(_t=>_t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Vn(ne,gt)}catch{}},[w,C,n]),$t=ct(async()=>{if(!w)return;let ne={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await Nd(ne)},[w]),Ye=w?.storageType!=="mmkv",Tr=Ye&&w&&An(w);return yi(nu,{children:[Ye&&yi(s,{style:tr.actionButtonsContainer,children:[je(Rn,{type:"undo",text:"UNDO",onPress:or,disabled:!Tr,locked:!n}),je(Rn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),je(Rn,{type:"copy",text:"COPY",onPress:$t})]}),je(_d,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Wd,diffModeTabs:Se,activeDiffMode:d,onDiffModeChange:m,renderDiffContent:wt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:q,onLeftNext:ue,onRightPrevious:te,onRightNext:se,canLeftPrevious:f>kr,canLeftNext:f<y-1,canRightPrevious:y>f+1,canRightNext:y<h-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:h,footerItemLabel:"Event",footerSubtitle:Bo(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),je(Hd,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function Mn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,d)=>i.timestamp.getTime()-d.timestamp.getTime()),a=n.length;return je($d,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:Bo(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:si,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:si}});E();import{Filter as pi,DynamicFilterView as lu,Database as su,HardDrive as cu,Shield as du,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as Cr}from"react/jsx-runtime";function uu({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:pi},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 ${ae.asyncFull}: show or hide captured events`,`\u2022 ${ae.mmkv}: show or hide captured events`],icon:pi},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return Cr(s,{style:et.container,children:[Cr(s,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),Cr(s,{style:et.storageTypeButtons,children:[Cr(O,{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 ${ae.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(su,{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:ae.asyncFull})]}),Cr(O,{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 ${ae.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(cu,{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:ae.mmkv})]}),Ba()&&Cr(O,{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(du,{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(lu,{...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 yu}from"react";import{RelativeTime as gu,macOSColors as Yr,parseValue as pu,CompactRow as fu}from"@buoy-gg/shared-ui/web";import{jsx as fi}from"react/jsx-runtime";function mu(e){let t=pu(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 hu(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return Yr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return Yr.semantic.error;case"mergeItem":case"multiMerge":return Yr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return Yr.semantic.warning;default:return Yr.text.muted}}function bu(e,t){return`${Array.from(e).map(r=>r==="async"?ae.async:ae.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Kn=yu(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=hu(e.lastAction),i=In(e.lastAction),d=e.totalOperations??1;return fi(fu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:bu(e.storageTypes,d),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:fi(gu,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as vu}from"@buoy-gg/license/web";import{Fragment as mi,jsx as M,jsxs as dt}from"react/jsx-runtime";var Xg=qs["storage.events"].free,zn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},Su={storage:zn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},wu={storage:zn,parse:e=>e==="true",serialize:e=>e.toString()},hi={storage:zn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},ku={...hi,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function On({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:d,onRefresh:p,onEventSelect:f}){let l=vu(),y=Hs("storage.events"),[g,v]=fo(yr.storage.activeTab(),"browser",Su);rn(()=>{d?.(g)},[g,d]);let[C,h]=ot(""),[m,w]=ot(null),[T,I]=ot(false),[R,D]=fo(yr.storage.isMonitoring(),true,wu),{events:x,clearEvents:B,isCapturing:Q}=ai({enabled:R}),[ve,Se]=ot(null),[q,ue]=ot(null),[te,se]=ot(null),[Ge,Je]=ot(0),[wt,Rt]=ot(false),[ye,or]=fo(yr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),ku),[re,$t]=ot("all"),[Ye,Tr]=ot(new Set(["async","mmkv","secure"])),[ne,gt]=fo(yr.storage.pinnedKeys(),new Set,hi),_t=ta(null),Ir=R&&Q,[Nt,Er]=ot("bottomSheet"),nr=De(S=>{Er(S)},[]),Bt=De(()=>{D(S=>!S)},[]),xe=De(()=>{B(),Se(null),Je(0)},[B]),Xr=De(S=>{ue(S),se(null)},[]),eo=De(()=>{ue(null),se(null)},[]),to=De(S=>{or(k=>{let K=new Set(k);return K.has(S)?K.delete(S):K.add(S),K})},[]),Ht=De(S=>{or(k=>new Set([...k,S]))},[]),Wo=De(S=>{gt(k=>{let K=new Set(k);return K.has(S)?K.delete(S):K.add(S),K})},[]),Rr=De(()=>{Rt(!wt)},[wt]),$o=De(S=>{Tr(k=>{let K=new Set(k);return K.has(S)?K.delete(S):K.add(S),K})},[]),Br=ta([]),ar=De(()=>{let S=Br.current;return{timestamp:new Date().toISOString(),totalKeys:S.length,asyncStorage:S.filter(k=>k.storageType==="async").reduce((k,K)=>(k[K.key]=po(K.value),k),{}),mmkv:S.filter(k=>k.storageType==="mmkv").reduce((k,K)=>{let j=K.instanceId||"default";return k[j]||(k[j]={}),k[j][K.key]=po(K.value),k},{}),secure:S.filter(k=>k.storageType==="secure").reduce((k,K)=>(k[K.key]=po(K.value),k),{})}},[]),_o=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await go()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await ul()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),qt=S=>{let k=zs(S);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"},[ro,No]=ot([]);rn(()=>{e&&(async()=>{try{let S=await oe.getAllKeys();No([...S].sort())}catch{}})()},[e]);let oo=st(()=>{let S=new Set(ro);return x.forEach(k=>{k.data?.key&&S.add(k.data.key)}),Array.from(S).sort()},[x,ro]),N=st(()=>{let S=new Map;return x.forEach(k=>{if(!k.data?.key)return;let K=k.data.key;if(!Ye.has(k.storageType)||Array.from(ye).some(Qe=>K.includes(Qe)))return;let j=S.get(K);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))):S.set(K,{key:K,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:qt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(S.values()).sort((k,K)=>K.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[x,ye,Ye]),ke=st(()=>ve&&N.find(S=>S.key===ve)||null,[ve,N]),Ho=st(()=>{let S={};return N.forEach(k=>{S[k.key]=k.totalOperations}),S},[N]),no=st(()=>{let S={};return N.forEach(k=>{S[k.key]=k.lastEvent.timestamp.getTime()}),S},[N]),Te=st(()=>q&&N.find(S=>S.key===q)||null,[q,N]);rn(()=>{if(!f)return;let S=ke||(te!==null?Te:null),k=ke?Ge:te;if(!S||k==null)return;let K=[...S.events].sort((Dr,Mr)=>Dr.timestamp.getTime()-Mr.timestamp.getTime()),j=K[k],Qe=K[k-1];j&&f(j),Qe&&f(Qe)},[f,ke,Ge,Te,te]);let tt=st(()=>x.filter(S=>{if(!S.data?.key||!Ye.has(S.storageType))return false;let k=S.data.key;return!Array.from(ye).some(K=>k.includes(K))}),[x,ye,Ye]),qo=st(()=>Va(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(S=>S.storageType===re),[tt,re]),jo=De(()=>rt.map(S=>({key:S.data?.key,action:S.action,value:po(S.data?.value),storageType:S.storageType,timestamp:S.timestamp.toISOString()})),[rt]),Vr=st(()=>rt.slice(0,y),[rt,y]),jt=st(()=>Math.max(0,rt.length-y),[rt.length,y]),Uo=.8,ao=De(S=>S.id,[]),Ar=De(S=>{let k=N.find(j=>j.key===S.data?.key);if(!k)return;let K=[...k.events].sort((j,Qe)=>j.timestamp.getTime()-Qe.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===S.timestamp.getTime());Se(k.key),Je(K>=0?K:0)},[N]),Go=De(({item:S})=>{let k={key:S.data?.key||"",lastAction:S.action,totalOperations:1,lastEventTimestamp:S.timestamp,storageTypes:new Set([S.storageType]),valueType:qt(S.data?.value)};return M(Kn,{data:k,onPress:()=>Ar(S),testID:`buoy-storage-event-${S.id}`})},[Ar]);if(!e)return null;let Ut=n?yr.modal.root():yr.storage.modal(),pt=()=>{if(wt)return M(uu,{ignoredPatterns:ye,onTogglePattern:to,onAddPattern:Ht,availableKeys:oo,enabledStorageTypes:Ye,onToggleStorageType:$o});if(g==="browser"){if(q&&Te){if(te!==null)return M(s,{style:he.contentWrapper,children:M(Dn,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Qe)=>j.timestamp.getTime()-Qe.timestamp.getTime()),K=[...k].reverse();return M(on,{keyboardShouldPersistTaps:"handled",testID:"buoy-storage-history-list",style:he.flexFill,data:K,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Qe=k.findIndex(Mr=>Mr.timestamp.getTime()===j.timestamp.getTime()),Dr={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Kn,{data:Dr,onPress:()=>se(Qe>=0?Qe:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(s,{style:he.separator}),initialNumToRender:20})}return M(oi,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:to,onAddPattern:Ht,searchQuery:C,storageDataRef:Br,eventCountByKey:Ho,lastWriteByKey:no,onViewHistory:Xr,enabledStorageTypes:Ye,pinnedKeys:ne,onTogglePin:Wo,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:$t,detailKey:m,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(s,{style:he.contentWrapper,children:M(Dn,{conversation:ke,selectedEventIndex:Ge,onEventIndexChange:Je,disableInternalFooter:true})});let S=M(s,{style:he.eventFilterBar,children:M(fn,{active:re,onChange:$t,counts:qo})});if(rt.length===0){let k=re!=="all";return dt(s,{style:he.flexFill,children:[S,M(Ps,{testID:"buoy-storage-events-empty",...Ir?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(s,{style:he.flexFill,children:[S,M(on,{keyboardShouldPersistTaps:"handled",testID:"buoy-storage-events-list",style:he.flexFill,data:Vr,renderItem:Go,keyExtractor:ao,onEndReachedThreshold:Uo,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(s,{style:he.lockedBannerContainer,children:M(Md,{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(Mn,{conversation:ke,selectedEventIndex:Ge,onEventIndexChange:Je,applySafeAreaInset:Nt==="bottomSheet"}):Te&&te!==null&&Te.events.length>1?M(Mn,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Wn=wt?()=>Rt(false):te!==null?()=>se(null):q?eo:ke?()=>{Se(null),Je(0)}:r,Oe=wt?dt(Me,{children:[M(Me.Navigation,{onBack:()=>Rt(false)}),M(Me.Content,{title:"Filters"})]}):q?dt(Me,{children:[M(Me.Navigation,{onBack:te!==null?()=>se(null):eo}),M(Me.Content,{title:`${q} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Je(0)}}),M(Me.Content,{title:ke.key})]}):m?dt(Me,{children:[M(Me.Navigation,{onBack:()=>w(null)}),M(Me.Content,{title:m.key,centered:true,testID:"buoy-storage-detail-title"})]}):dt(Me,{children:[r&&M(Me.Navigation,{onBack:r}),M(Me.Content,{title:"",children:T?M($s,{value:C,onChange:h,onClear:()=>{h(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(Ks,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:g,testIDPrefix:"buoy-storage-tab",onTabChange:S=>{v(S),ue(null),se(null),Se(null),Je(0),w(null)}})}),dt(Me.Actions,{children:[p&&!T?M(O,{onPress:p,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Fs,{size:14,color:$e.color.textSecondary})}):null,M(O,{onPress:Rr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Ye.size<3)&&he.activeFilterButton],children:M(Ls,{size:14,color:ye.size>0||Ye.size<3?$e.color.accent:$e.color.textSecondary})}),g==="browser"&&!T&&dt(mi,{children:[M(O,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(Ws,{size:14,color:$e.color.textSecondary})}),M(ca,{value:ar,disabled:Br.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),g==="events"&&dt(mi,{children:[M(ca,{value:jo,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(_s,{isEnabled:Ir,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(Ns,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(da,{children:dt(s,{style:he.inlineRoot,children:[M(s,{style:he.inlineHeader,...js,children:Oe}),pt(),ir]})}):M(da,{children:M(Ms,{visible:e,onClose:t,onBack:Wn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Oe},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function Cu(e={}){return M(On,{...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:Os.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:$e.color.buttonSurface,borderWidth:1,borderColor:$e.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:$e.color.accentSoft,borderColor:$e.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:$e.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:mo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:$e.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:mo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:$e.color.text,fontSize:12,fontWeight:"600",fontFamily:mo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:$e.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:$e.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:$e.color.accent,fontFamily:mo,letterSpacing:.5},contentWrapper:{flex:1}});E();mt();Jt();import{approxJsonSize as bi,isDevToolsStorageKey as ut,isOverWireBudget as vi,isJsonSerializable as xu}from"@buoy-gg/shared-ui/web";var zo=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),Tu=16*1024,Pn=1.25*1024*1024,Si=8*1024*1024;function Ln(e){return e===void 0?e:vi(e,Tu)?zo:e}function Oo(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=Io(e),i=t(a.pairs),d=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&d===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:d}:{}}}}function wi(e){return e===void 0||!vi(e,Si)?e:xu(e)?{__buoyTruncated:true,note:`Exceeds the ${Si/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:zo}var ki=new WeakMap,Ci=new WeakMap;function Iu(e){let t=ki.get(e);if(t)return t;let r;try{let o=Oo(e,Ln);r={event:o,bytes:bi(o,Pn).bytes}}catch{r={event:Oo(e,()=>zo),bytes:1024}}return ki.set(e,r),r}function Eu(e){let t=Ci.get(e);if(t)return t;let r=Oo(e,n=>n===void 0?void 0:zo),o={event:r,bytes:bi(r,Pn).bytes};return Ci.set(e,o),o}function Ru(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=Iu(e[o]);if(r+n.bytes<=Pn)t[o]=n.event,r+=n.bytes;else{let a=Eu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function xi(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 Ti=[];function Bu(e){Ti=e}var Vu={version:3,getSnapshot:()=>Ru(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:()=>Ti,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=Oo(r,wi);return{found:true,id:t,event:o}},clearAppStorage:()=>go(),"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(!An(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await Bn(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(d=>d.storageType!=="mmkv").slice().reverse(),n=o.find(d=>d.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(d=>d.data?.key===n.data?.key),i=a.findIndex(d=>d.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await Vn(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 uo(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=>Pr(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:d}=kt(t,a);return{key:a,value:Ln(i),valueType:d}})}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:wi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;xi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=xi(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=ee.getModule();return Promise.all(ee.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=ee.getModule(),t=ee.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:Ln(i)})}return r},"secure.get":e=>{let{key:t}=e;if(ut(t))return null;let r=ee.getAll().find(n=>n.key===t),o=ee.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 ee.setValue(t,r)},"secure.delete":e=>ee.deleteValue(e.key)}};import{jsx as Au}from"react/jsx-runtime";var Ii=El({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>Au(Tl,{size:e}),component:On,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),Du=Il(Ii,e=>(Bu(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as Mu,CyberpunkSectionButton as Ku}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as zu}from"@buoy-gg/shared-ui/web";import{jsx as Ou}from"react/jsx-runtime";function Pu({onPress:e}){let{storageKeys:t}=bn(),r=t.filter(n=>!zu(n.key)).length,o=r;return Ou(Ku,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:Mu,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as Ei,CheckCircle2 as Lu,Eye as Ri,XCircle as Bi,HardDrive as Vi,Database as Ai,Shield as Fu,gameUIColors as Po,macOSColors as ie,night as be,monoFont as Lo}from"@buoy-gg/shared-ui/web";import{DataViewer as Wu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var Di=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Fo(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Di[t%Di.length]}var $u=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:Ei,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:Bi,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:Bi,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:Ri,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},_u=e=>{switch(e){case"mmkv":return Vi;case"async":return Ai;case"secure":return Fu;default:return Ai}};function Nu({storageKey:e,isExpanded:t,onToggle:r}){let o=$u(e.status),n=o.icon,a=_u(e.storageType),i=e.value!==void 0&&e.value!==null,d=e.expectedValue!==void 0,p=e.expectedType!==void 0,f=ba(e.storageType),l=cn(e.storageType,e.instanceId);return Ae(s,{style:[z.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(O,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:z.cardHeader,onPress:r,children:[Ae(s,{style:z.cardHeaderLeft,children:[Y(s,{style:[z.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ae(s,{style:z.cardHeaderInfo,children:[Y(u,{style:z.storageKeyText,children:e.key}),e.description?Y(u,{style:z.descriptionText,children:e.description}):null,Ae(s,{style:z.cardHeaderMeta,children:[Y(s,{style:[z.statusBadge,{backgroundColor:o.bgColor}],children:Y(u,{style:[z.statusText,{color:o.labelColor}],children:o.label})}),Ae(s,{style:[z.storageBadge,{backgroundColor:`${f}15`}],children:[Y(a,{size:10,color:f}),Y(u,{style:[z.storageText,{color:f}],children:l})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(s,{style:[z.instanceBadge,{backgroundColor:Fo(e.instanceId)+"20",borderColor:Fo(e.instanceId)+"40"}],children:[Y(Vi,{size:9,color:Fo(e.instanceId)}),Y(u,{style:[z.instanceText,{color:Fo(e.instanceId)}],children:e.instanceId})]}),i&&Y(s,{style:z.valueBadge,children:Y(u,{style:z.valueText,children:e.valueType?e.valueType.toUpperCase():Dt(e.value)})})]})]})]}),Y(s,{style:z.cardHeaderRight,children:Y(s,{style:z.actionButton,children:Y(Ri,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(s,{style:z.cardBody,children:[Y(s,{style:z.dataViewerContainer,children:(()=>{let y=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof y=="string"||typeof y=="number"||typeof y=="boolean"?Ae(s,{style:z.simpleValueContainer,children:[Y(u,{style:z.simpleValueLabel,children:"Current Value:"}),Y(s,{style:z.simpleValueBox,children:Y(u,{style:z.simpleValueContent,selectable:true,children:String(y)})}),Ae(u,{style:z.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Wu,{title:"Current Value",data:y,showTypeFilter:false,rawMode:true})})()}),d&&Ae(s,{style:z.valueContainer,children:[Y(u,{style:z.valueLabel,children:"Expected Value:"}),Y(s,{style:z.expectedValueBox,children:Y(u,{style:z.expectedValueContent,selectable:true,children:e.expectedValue})})]}),p&&e.expectedType&&Ae(s,{style:z.valueContainer,children:[Y(u,{style:z.valueLabel,children:"Expected Type:"}),Y(s,{style:z.expectedValueBox,children:Y(u,{style:z.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ae(u,{style:z.typeHelperText,children:["Current type: ",Dt(e.value)]})]}),e.lastUpdated?Y(s,{style:z.metaInfo,children:Ae(u,{style:z.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ae(s,{style:z.cardBody,children:[Ae(s,{style:z.emptyValueContainer,children:[Y(Ei,{size:16,color:ie.semantic.warning}),Y(u,{style:z.emptyValueText,children:"Storage key not found or empty"})]}),d&&Ae(s,{style:z.valueContainer,children:[Y(u,{style:z.valueLabel,children:"Expected Value:"}),Y(s,{style:z.expectedValueBox,children:Y(u,{style:z.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var z=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:Lo,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:Po.success,fontSize:12,fontFamily:Lo,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:Lo,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:Lo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Po.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Po.warning+"1A"},emptyValueText:{color:Po.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 Hu,CheckCircle2 as qu,XCircle as Mi,Eye as ju,Database as Ki,Shield as Uu}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as Ue}from"react/jsx-runtime";var Gu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:qu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:Hu,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Mi,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Mi,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:ju,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],Ju=[{key:"mmkv",label:ae.mmkv,description:ae.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ki},{key:"async",label:ae.asyncFull,description:ae.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ki},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Uu}];function Yu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:d,asyncCount:p,secureCount:f}=e;return t===0?Ue(s,{style:X.statsContainer,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE BREAKDOWN"}),Ce(s,{style:X.emptyState,children:Ce(u,{style:X.emptyStateText,children:"No storage keys detected"})})]}):Ue(s,{style:X.statsContainer,children:[Ue(s,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(s,{style:X.breakdownList,children:Gu.map(l=>{let y=0,g=false;switch(l.key){case"valid":y=a,g=y>0;break;case"missing":y=r,g=y>0;break;case"wrongValue":y=o,g=y>0;break;case"wrongType":y=n,g=y>0;break;case"optional":y=i,g=y>0;break}if(!g)return null;let v=t>0?(y/t*100).toFixed(1):"0",C=l.icon;return Ce(s,{style:X.breakdownItem,children:Ue(s,{style:X.breakdownItemRow,children:[Ue(s,{style:X.breakdownItemLeft,children:[Ce(s,{style:[X.breakdownIcon,{backgroundColor:l.bgColor}],children:Ce(C,{size:14,color:l.color})}),Ue(s,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:l.label}),Ce(u,{style:X.breakdownItemDesc,children:l.description})]})]}),Ue(s,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:l.textColor}],children:y}),Ue(u,{style:X.breakdownPercentage,children:[v,"%"]})]})]})},l.key)})})]}),(d>0||p>0||f>0)&&Ue(s,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(s,{style:X.breakdownList,children:Ju.map(l=>{let y=0,g=false;switch(l.key){case"mmkv":y=d,g=y>0;break;case"async":y=p,g=y>0;break;case"secure":y=f,g=y>0;break}if(!g)return null;let v=t>0?(y/t*100).toFixed(1):"0",C=l.icon,h=ba(l.key);return Ce(s,{style:X.breakdownItem,children:Ue(s,{style:X.breakdownItemRow,children:[Ue(s,{style:X.breakdownItemLeft,children:[Ce(s,{style:[X.breakdownIcon,{backgroundColor:`${h}15`}],children:Ce(C,{size:14,color:h})}),Ue(s,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:l.label}),Ce(u,{style:X.breakdownItemDesc,children:l.description})]})]}),Ue(s,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:h}],children:y}),Ue(u,{style:X.breakdownPercentage,children:[v,"%"]})]})]})},l.key)})})]})]})}var X=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 Qu,CyberpunkSectionButton as Zu}from"@buoy-gg/shared-ui/web";import{jsx as Xu}from"react/jsx-runtime";function ey({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return Xu(Zu,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Qu,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Qr}from"@buoy-gg/shared-ui/web";var ty=["SET","GET","MERGE","DELETE","CLEAR"],ry={SET:Qr.semantic.info,GET:Qr.text.muted,MERGE:Qr.semantic.debug,DELETE:Qr.semantic.error,CLEAR:Qr.semantic.warning};function oy(e){return ry[e]}function ny(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 ay(e){return!!e.data?.initialScan}E();import{useState as iy}from"react";import{macOSColors as rr,night as de,monoFont as zi}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function ly({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=iy(false),{instances:a,instanceCount:i,refresh:d}=kn(false),p=a.find(l=>l.id===e),f=l=>{t(l),n(false)};return mn()?i===0?le(s,{style:_.container,children:it(s,{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(O,{style:_.refreshButton,onPress:d,activeOpacity:.7,children:le(u,{style:_.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(s,{style:_.container,children:[it(O,{style:_.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(s,{style:_.selectorContent,children:p?le(Oi,{instance:p,isSelected:true}):le(u,{style:_.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:_.dropdownArrow,children:"\u25BC"})]}),le(sa,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(O,{style:_.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:it(s,{style:_.dropdownContainer,children:[it(s,{style:_.dropdownHeader,children:[it(u,{style:_.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(O,{style:_.headerRefreshButton,onPress:d,activeOpacity:.7,children:le(u,{style:_.headerRefreshText,children:"\u21BB"})})]}),le(_r,{keyboardShouldPersistTaps:"handled",style:_.dropdownList,children:a.map(l=>le(O,{style:[_.dropdownItem,l.id===e&&_.dropdownItemSelected],onPress:()=>f(l.id),activeOpacity:.7,children:le(Oi,{instance:l,isSelected:l.id===e})},l.id))})]})})})]}):le(s,{style:_.container,children:it(s,{style:_.unavailableState,children:[it(u,{style:_.unavailableTitle,children:[ae.mmkv," Not Available"]}),le(u,{style:_.unavailableDescription,children:Aa()})]})})}function Oi({instance:e,isSelected:t}){return it(s,{style:_.instanceRow,children:[it(s,{style:_.instanceLeft,children:[le(u,{style:[_.instanceId,t&&_.instanceIdSelected],numberOfLines:1,children:e.id}),it(s,{style:_.instanceBadges,children:[e.encrypted&&le(s,{style:[_.badge,_.badgeEncrypted],children:le(u,{style:_.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(s,{style:[_.badge,_.badgeReadOnly],children:le(u,{style:_.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),it(s,{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:zi},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:zi},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as sy}from"@buoy-gg/shared-ui/web";import{jsx as ze,jsxs as xr}from"react/jsx-runtime";function cy({instanceId:e}){let t=Na(e);return t?ze(s,{style:ge.container,children:xr(s,{style:ge.panel,children:[ze(s,{style:ge.header,children:ze(u,{style:ge.headerTitle,children:"Instance Details"})}),xr(s,{style:ge.infoGrid,children:[ze(Zr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),ze(Zr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),ze(Zr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),ze(Zr,{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&&ze(Zr,{label:"Size",value:dy(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&xr(s,{style:ge.notice,children:[ze(u,{style:ge.noticeIcon,children:"\u{1F512}"}),ze(u,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&xr(s,{style:[ge.notice,ge.noticeWarning],children:[ze(u,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),ze(u,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):ze(s,{style:ge.container,children:ze(s,{style:ge.errorState,children:xr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Zr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return xr(s,{style:ge.infoItem,children:[ze(u,{style:ge.infoLabel,children:e}),ze(u,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function dy(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:sy},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 Pi,subscribeToBrowserStorage as uy}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as Fn}from"@buoy-gg/shared-ui/web";co();var Li=0;function yy(e){let t=()=>Pi(e),r=()=>Array.from({length:t().length},(n,a)=>t().key(a)).filter(n=>n!==null&&!Fn(n)),o=n=>{try{return JSON.parse(t().getItem(n)??"")}catch{return}};return{set(n,a){t().setItem(n,String(a))},getString(n){let a=typeof o(n);return a==="number"||a==="boolean"?void 0:t().getItem(n)??void 0},getNumber(n){let a=o(n);return typeof a=="number"?a:void 0},getBoolean(n){let a=o(n);return typeof a=="boolean"?a:void 0},getBuffer(){},contains(n){return t().getItem(n)!==null},delete(n){let a=this.contains(n);return t().removeItem(n),a},getAllKeys:r,clearAll(){for(let n of r())t().removeItem(n)},get size(){return r().reduce((n,a)=>n+2*(a.length+(t().getItem(a)?.length??0)),0)},addOnValueChangedListener(n){return{remove:uy(a=>{a.area===e&&(a.key!==void 0?Fn(a.key)||n(a.key):a.prevPairs?.forEach(([i])=>{Fn(i)||n(i)}))})}}}}function gy(){return zr()?["localStorage","sessionStorage"]:["sessionStorage"]}function py(){if(typeof window>"u")return()=>{};try{Pi("sessionStorage")}catch{return()=>{}}let e=gy();if(++Li===1)for(let r of e)Yn(r,yy(r));let t=true;return()=>{if(t&&(t=false,--Li===0))for(let r of e)Qn(r)}}export{cy as MMKVInstanceInfoPanel,ly as MMKVInstanceSelector,ty as STORAGE_OPS,oi as StorageBrowserMode,Kn as StorageEventCard,Dn as StorageEventDetailContent,Mn as StorageEventDetailFooter,ey as StorageEventsSection,Nu as StorageKeyCard,Ca as StorageKeySection,Yu as StorageKeyStatsSection,On as StorageModalWithTabs,Pu as StorageSection,Cu as StorageToolView,fn as StorageTypeFilterBar,Io as batchPairsOf,An as canUndo,go as clearAllAppStorage,Va as countByStorageType,Du as createStorageTool,kt as detectMMKVType,gl as formatMMKVValue,zc as getMMKVClass,Aa as getMMKVUnavailableMessage,mu as getValueType,ay as isInitialScan,mn as isMMKVAvailable,Xo as isTypeMatch,Jr as isValueOnDevice,Vn as jumpToState,Yn as registerMMKVInstance,hl as registerSecureStoreKeys,Id as requestStorageBrowserRefresh,Qa as setStorageValue,py as startBrowserStorageCapture,xn as storageEditBlockedReason,Pt as storageEventStore,oy as storageOpDot,ny as storageOpOf,Vu as storageSyncAdapter,Ii as storageToolPreset,Ed as storageValueToEditableText,Bn as undoOperation,Qn as unregisterMMKVInstance,bl as unregisterSecureStoreKey,bn as useAsyncStorageKeys,Na as useMMKVInstance,Xc as useMMKVInstanceExists,kn as useMMKVInstances,Uc as useMMKVKeys,Wa as useMultiMMKVKeys,ai as useStorageEvents,Ya as validateStorageValue};
|