@buoy-gg/storage 7.0.68 → 7.0.69
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/StorageEventFilterView.js +1 -1
- package/lib/commonjs/storage/components/StorageKeyCard.js +1 -1
- package/lib/commonjs/storage/components/StorageKeyDetailScreen.js +1 -1
- package/lib/commonjs/storage/components/StorageKeyRow.js +1 -1
- package/lib/commonjs/storage/components/StorageTypeFilterBar.js +1 -1
- package/lib/commonjs/storage/utils/showsSecureStorage.js +1 -0
- package/lib/commonjs/storage/utils/storageQueryUtils.js +1 -1
- package/lib/module/storage/components/StorageEventFilterView.js +1 -1
- package/lib/module/storage/components/StorageKeyCard.js +1 -1
- package/lib/module/storage/components/StorageKeyDetailScreen.js +1 -1
- package/lib/module/storage/components/StorageKeyRow.js +1 -1
- package/lib/module/storage/components/StorageTypeFilterBar.js +1 -1
- package/lib/module/storage/utils/showsSecureStorage.js +1 -0
- package/lib/module/storage/utils/storageQueryUtils.js +1 -1
- package/lib/typescript/storage/utils/showsSecureStorage.d.ts +7 -0
- package/lib/typescript/storage/utils/storageQueryUtils.d.ts +1 -2
- 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 Ho=Object.defineProperty;var Fi=Object.getOwnPropertyDescriptor;var Wi=Object.getOwnPropertyNames;var _i=Object.prototype.hasOwnProperty;var ro=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ln=(e,t)=>{for(var r in t)Ho(e,r,{get:t[r],enumerable:true})},jo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Wi(t))!_i.call(e,n)&&n!==r&&Ho(e,n,{get:()=>t[n],enumerable:!(o=Fi(t,n))||o.enumerable});return e},$i=(e,t,r)=>(jo(e,t,"default"),r&&jo(r,t,"default"));var Ni=e=>jo(Ho({},"__esModule",{value:true}),e);var qi,E=ro(()=>{"use strict";qi=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Gt,hasCapacitorPlugin as Hi,installCapacitorBridge as ji,interceptCapacitor as Ui,isCapacitorNative as Gi}from"@buoy-gg/license/web";function Dr(){return Gi()&&Hi(mt)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Mr))try{o(r)}catch{}}function Ji(e){return Mr.add(e),Yi(),()=>{Mr.delete(e)}}async function lr(e){let{value:t}=await Gt(mt,"get",{key:e});return t??null}async function Uo(){let{keys:e}=await Gt(mt,"keys");return Array.isArray(e)?e:[]}async function oo(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function Yi(){Go||!Dr()||!ji()||(Go=true,Ui({plugin:mt,methods:["set","remove","clear"],promise:async(e,t)=>{if(Mr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Uo().catch(()=>[]),y=await t();return At("clear",{keys:await i}),y}if(r===void 0)return t();let o=lr(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?At("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):At("removeItem",{key:r,prevValue:a}),n}}))}function Pn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Pn(r[o],n):n;return r}function On(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var mt,Mr,Go,no,ao=ro(()=>{"use strict";E();mt="Preferences";Mr=new Set;Go=false;no={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(mt,"set",{key:e,value:String(t)}),At("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=lr(e).catch(()=>null);await Gt(mt,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await oo(await Uo()).catch(()=>{});await Gt(mt,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Uo()},multiGet(e){return oo(e)},async multiSet(e){let t=oo(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(mt,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=oo(e).catch(()=>{});await Promise.all(e.map(r=>Gt(mt,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await no.setItem(e,JSON.stringify(Pn(On(r),On(t))))},async multiMerge(e){for(let[t,r]of e)await no.mergeItem(t,r)}}});import Qi from"@buoy-gg/shared-ui/web/asyncStorage";var lt,Fn,oe,ft=ro(()=>{"use strict";E();ao();lt=()=>Dr()?no:Qi,Fn={getItem:e=>lt().getItem(e),setItem:(e,t)=>lt().setItem(e,t),removeItem:e=>lt().removeItem(e),clear:()=>lt().clear(),getAllKeys:()=>lt().getAllKeys(),multiGet:e=>lt().multiGet(e),multiSet:e=>lt().multiSet(e),multiRemove:e=>lt().multiRemove(e),mergeItem:(e,t)=>lt().mergeItem(e,t),multiMerge:e=>lt().multiMerge(e)},oe=Fn});var Wn={};Ln(Wn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>_n,default:()=>$n,readMany:()=>io,removeMany:()=>sr,writeMany:()=>zr});async function io(e){if(typeof Fe.multiGet=="function")return await Fe.multiGet(e);let t=await Fe.getMany(e);return e.map(r=>[r,t[r]??null])}async function zr(e){if(typeof Fe.multiSet=="function")return Fe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Fe.setMany(t)}async function sr(e){return typeof Fe.multiRemove=="function"?Fe.multiRemove(e):Fe.removeMany(e)}var Fe,_n,$n,Jt=ro(()=>{"use strict";E();ft();Fe=oe,_n={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};$n=Fe});E();E();ft();Jt();import{classifyPreviewItem as Xi,createRestoreScope as Zi,emptyRestoreResult as Nn,failedRestore as el,isDevToolsStorageKey as we,registerStateSnapshotProvider as tl,unionKeys as lo,wontApply as Kr}from"@buoy-gg/shared-ui/web";E();ft();Jt();import{isDevToolsStorageKey as rl}from"@buoy-gg/shared-ui/web";async function so(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!rl(r));t.length!==0&&await sr(t)}async function ol(){await oe.clear()}E();E();import{isDevToolsStorageKey as nl}from"@buoy-gg/shared-ui/web";E();function kt(e,t){let r=e.getString(t);if(r!==void 0&&r!=="")return{value:r,type:"string"};let o=e.getNumber(t);if(o!==void 0)return{value:o,type:"number"};let n=e.getBoolean(t);if(n!==void 0)return{value:n,type:"boolean"};if(r==="")return{value:"",type:"string"};let a=e.getBuffer(t);return a!==void 0?{value:`<ArrayBuffer ${a.byteLength} bytes>`,type:"buffer"}:{value:void 0,type:"unknown"}}function al(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Jo(e,t){return e===t}var il=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(nl(e)||this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,kt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=kt(e,n),y=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:y,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:y,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Yo=new il;var qn=e=>Yo.addListener(e);var ll=class{constructor(){this.instances=new Map}register(e,t,r){let o={id:e,instance:t,encrypted:r?.encrypted??false,readOnly:t.isReadOnly??false};this.instances.set(e,o)}unregister(e){this.instances.delete(e)}get(e){return this.instances.get(e)}getAll(){return Array.from(this.instances.values())}has(e){return this.instances.has(e)}count(){return this.instances.size}},Pe=new ll;function Hn(e,t,r){Pe.register(e,t,r),Yo.addInstance(t,e)}function jn(e){Yo.removeInstance(e),Pe.unregister(e)}E();var sl=class{constructor(){this.module=null;this.keys=new Map;this.listeners=new Set}register(e,t){let r=this.signature();this.module=e;for(let o of t){let n=typeof o=="string"?{key:o,options:{}}:{key:o.key,description:o.description,options:{keychainService:o.keychainService,requireAuthentication:o.requireAuthentication,authenticationPrompt:o.authenticationPrompt}};this.keys.set(n.key,n)}this.signature()!==r&&this.notify()}unregister(e){this.keys.delete(e)&&this.notify()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){let t=this.keys.get(e);!this.module||!t||await this.module.deleteItemAsync(e,t.options)}async setValue(e,t){let r=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!r)throw new Error(`SecureStore key "${e}" is not registered`);if(r.options.requireAuthentication)throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`);await this.module.setItemAsync(e,t,r.options)}},te=new sl;function cl(e,t){te.register(e,t)}function dl(e){te.unregister(e)}function Un(e,t){e.remove?e.remove(t):e.delete?.(t)}function ul(){return{canCapture:true,canRestore:true}}async function Gn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await io(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:y}of Pe.getAll().filter(({id:d})=>!we(d)))try{o[i]=y.getAllKeys().filter(d=>!we(d)).map(d=>{let{value:g,type:c}=kt(y,d);return c==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:g,valueType:c}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=te.getModule();for(let{key:i,options:y}of te.getAll().filter(({key:d})=>!we(d))){if(y.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,y)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function yl(){let{data:e,warnings:t}=await Gn();return{data:e,warnings:t}}async function gl(e,t){let r=e,o=Zi(t),n=o.touch,a=Nn();if(!r)return el("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!we(p)&&n(`async:${p}`)),g=new Set(d.map(([p])=>p)),c=(await oe.getAllKeys()).filter(p=>!we(p)).filter(p=>!g.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),c.length>0&&await sr(c),d.length>0&&await zr(d),a.applied+=d.length+c.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,g]of Object.entries(r.mmkv??{})){if(we(d))continue;let c=Pe.get(d);if(!c){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(c.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=c;try{let m=new Set(g.map(f=>f.key)),x=p.getAllKeys().filter(f=>!we(f));for(let f of x)o.allows(`mmkv:${d}/${f}`)&&(m.has(f)||(Un(p,f),a.applied+=1));for(let f of g)if(!we(f.key)&&n(`mmkv:${d}/${f.key}`)){if(f.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${f.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(f.key,f.value),a.applied+=1}}catch(m){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(m)}`)}}let i=r.secure??{};for(let{key:d,options:g}of te.getAll().filter(({key:c})=>!we(c)))if(o.allows(`secure:${d}`)){if(g.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let c=i[d];c===null?await te.deleteValue(d):await te.setValue(d,c)}else await te.deleteValue(d);a.applied+=1}catch(c){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(c)}`)}}for(let d of Object.keys(i))we(d)||n(`secure:${d}`)&&(te.getAll().filter(({key:g})=>!we(g)).some(g=>g.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let y=o.excludedWarning("item(s)");return y&&a.warnings.push(y),a}async function pl(){let e=Nn();try{await so(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Pe.getAll().filter(({id:o})=>!we(o))){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!we(n)))Un(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of te.getAll().filter(({key:o})=>!we(o))){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await te.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var ml=256*1024;function Qo(e,t,r,o,n,a){return Xi({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>ml,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function fl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Gn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],y=new Map(n.async??[]),d=new Map(r.async??[]);for(let m of lo(y,d))we(m)||a.push(Qo(`async:${m}`,m,y.get(m),d.get(m),y.has(m),d.has(m)));for(let m of lo(n.mmkv,r.mmkv)){if(we(m))continue;let x=o?Pe.get(m):null,f=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[m]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[m]??[]).map(T=>[T.key,T]));for(let T of lo(S,w)){if(we(T))continue;let I=`mmkv:${m}/${T}`,R=`${m} \xB7 ${T}`,D=S.get(T),C=w.get(T),B=Qo(I,R,D?.value,C?.value,S.has(T),w.has(T));f?B=Kr(B,"MMKV instance not registered"):b?B=Kr(B,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Kr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let g=n.secure??{},c=r.secure??{},p=o?new Map(te.getAll().filter(({key:m})=>!we(m)).map(m=>[m.key,m])):null;for(let m of lo(g,c)){if(we(m))continue;let x=Qo(`secure:${m}`,m,g[m],c[m],m in g,m in c);if(o){let f=p?.get(m);f?f.options.requireAuthentication&&(x=Kr(x,"biometric-protected keys are never written")):x=Kr(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}tl({id:"storage",label:"Storage",status:ul,capture:yl,restore:gl,clear:pl,previewItems:fl});E();import{StorageIcon as hl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as bl,defineToolPreset as vl}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as Xo,useRef as Jn,useMemo as st}from"react";var Yn={};Ln(Yn,{AccessibilityInfo:()=>Cl,ActivityIndicator:()=>Ss,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Tl,AppState:()=>Il,Appearance:()=>xl,BackHandler:()=>El,Button:()=>ws,CheckBox:()=>$l,Clipboard:()=>Rl,DeviceEventEmitter:()=>os,Dimensions:()=>Bl,Easing:()=>Lr,FlatList:()=>Zo,I18nManager:()=>Vl,Image:()=>Nl,ImageBackground:()=>ql,InteractionManager:()=>Dl,Keyboard:()=>Al,KeyboardAvoidingView:()=>Hl,LayoutAnimation:()=>Ml,Linking:()=>zl,LogBox:()=>rs,Modal:()=>ta,NativeEventEmitter:()=>Kl,NativeModules:()=>kl,PanResponder:()=>Ll,Picker:()=>jl,PixelRatio:()=>Pl,Platform:()=>Ol,Pressable:()=>bs,ProgressBar:()=>Ul,RefreshControl:()=>Gl,SafeAreaView:()=>Jl,ScrollView:()=>Or,SectionList:()=>Yl,Share:()=>Fl,StatusBar:()=>Ql,StyleSheet:()=>pe,Switch:()=>vs,Text:()=>u,TextInput:()=>ms,Touchable:()=>Xl,TouchableHighlight:()=>fs,TouchableNativeFeedback:()=>Zl,TouchableOpacity:()=>L,TouchableWithoutFeedback:()=>hs,UIManager:()=>Wl,Vibration:()=>_l,View:()=>l,VirtualizedList:()=>es,YellowBox:()=>ts,findNodeHandle:()=>ks,unstable_createElement:()=>wl,useColorScheme:()=>ns,useLocaleContext:()=>as,useWindowDimensions:()=>is});E();$i(Yn,Sl);import*as Sl from"react-native-web";import{unstable_createElement as wl,NativeModules as kl,AccessibilityInfo as Cl,Animated as Yt,Appearance as xl,AppRegistry as Tl,AppState as Il,BackHandler as El,Clipboard as Rl,Dimensions as Bl,Easing as Lr,I18nManager as Vl,Keyboard as Al,InteractionManager as Dl,LayoutAnimation as Ml,Linking as zl,NativeEventEmitter as Kl,PanResponder as Ll,PixelRatio as Pl,Platform as Ol,Share as Fl,StyleSheet as pe,UIManager as Wl,Vibration as _l,CheckBox as $l,FlatList as Zo,Image as Nl,ImageBackground as ql,KeyboardAvoidingView as Hl,Picker as jl,ProgressBar as Ul,RefreshControl as Gl,SafeAreaView as Jl,SectionList as Yl,StatusBar as Ql,Touchable as Xl,TouchableNativeFeedback as Zl,VirtualizedList as es,YellowBox as ts,LogBox as rs,DeviceEventEmitter as os,useColorScheme as ns,useLocaleContext as as,useWindowDimensions as is}from"react-native-web";import*as Xe from"react-native-web";import{createElement as en,forwardRef as Qn,useCallback as ls,useRef as ss}from"react";E();import{useEffect as cs,useState as ds}from"react";import{createPortal as us}from"react-dom";E();var ys='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as gs}from"react/jsx-runtime";var Pr=Symbol.for("@buoy-gg/portal-host"),Xn=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function Zn(){let e=document;if(e[Pr])return e[Pr].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:ys});let r=()=>{let c=document.fullscreenElement,p=c&&c.tagName!=="CANVAS"?c:document.body;t.parentElement!==p&&p.appendChild(t)},o=new Map,n=c=>{(!t.contains(c.target)||!Xn(c.target))&&o.set(c.code||c.key,{key:c.key,code:c.code,location:c.location,keyCode:c.keyCode,which:c.which,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey})},a=c=>{o.delete(c.code||c.key)},i=()=>o.clear(),y=()=>{let c=[...o.values()];o.clear();for(let p of c)document.dispatchEvent(new KeyboardEvent("keyup",{...p,bubbles:true}))},d=c=>{Xn(c.target)&&c.stopPropagation()},g=c=>c.stopPropagation();return r(),document.addEventListener("fullscreenchange",r),document.addEventListener("keydown",n,true),document.addEventListener("keyup",a,true),window.addEventListener("blur",i),t.addEventListener("focusin",y),t.addEventListener("keydown",d),t.addEventListener("keyup",d),t.addEventListener("keypress",d),t.addEventListener("wheel",g,{passive:true}),e[Pr]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",r),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",a,true),window.removeEventListener("blur",i),t.remove(),delete e[Pr]}},t}function ps({children:e}){let[t,r]=ds(null);return cs(()=>{let o=Zn(),n=document[Pr];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?us(gs("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}function nt(e){let t=Qn((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...y}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&y[`aria-${d}`]===void 0&&(y[`aria-${d}`]=a[d]);for(let[d,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&y[`aria-${g}`]===void 0&&(y[`aria-${g}`]=i[d]);return en(e,{...y,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=nt(Xe.View),u=nt(Xe.Text),ms=nt(Xe.TextInput),L=nt(Xe.TouchableOpacity),fs=nt(Xe.TouchableHighlight),hs=nt(Xe.TouchableWithoutFeedback),bs=nt(Xe.Pressable),Or=nt(Xe.ScrollView),ea=Qn((e,t)=>{let r=ss(null),o=ls(n=>{if(n){let a=n;for(;a.parentElement&&a.parentElement!==document.body;)a=a.parentElement;a.parentElement===document.body&&(r.current=a,Object.assign(a.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),Zn().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return en(ps,null,en(Xe.Modal,{...e,ref:o}))});ea.displayName="Modal";var ta=nt(ea),vs=nt(Xe.Switch),Ss=nt(Xe.ActivityIndicator),ws=nt(Xe.Button),ks=Xe.findNodeHandle,Ie={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let g=document.createElement("p");g.textContent=t,g.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(g)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let y=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let g of y){let c=document.createElement("button");c.type="button",c.textContent=g.text??"OK",c.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${g.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,c.onclick=()=>{d(),g.onPress?.()},i.appendChild(c)}n.addEventListener("cancel",g=>{g.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};ft();import{JsModal as Cs,ModalHeader as Me,TabSelector as xs,parseValue as Ts,devToolsStorageKeys as cr,macOSColors as Is,night as We,ToolEmptyState as Es,Filter as Rs,RefreshCw as Bs,Search as Vs,SearchBar as As,PowerToggleButton as Ds,ToolbarCopyButton as ra,ToolbarClearButton as Ms,truncatePayload as co,TickProvider as oa,useLimit as zs,TIER_LIMITS as Ks,windowDragProps as Ls,usePersistedState as uo,monoFont as yo}from"@buoy-gg/shared-ui/web";E();E();E();ao();var ne=Dr()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as _e,useCallback as Ze,useState as Qt,useEffect as dr,useRef as tn}from"react";import{absoluteFill as na,useLimit as aa,TIER_LIMITS as Ps,monoFont as Fr}from"@buoy-gg/shared-ui/web";import{Database as ia,Zap as Os,ProBadge as la,ProUpgradeModal as Fs,ToolEmptyState as Ws,resolveListEmptyState as _s}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";E();import{useCallback as sa,useState as $s}from"react";E();import{memo as Ns}from"react";import{macOSColors as me,night as ce,CompactRow as qs,TypeBadge as ca,HardDrive as Hs,Square as js,CheckSquare as Us,Edit3 as Gs,EyeOff as Js,Pin as da,Trash2 as Ys,ExpandedInfoRow as rn,PillBadge as Wr,monoFont as ur}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as go}from"@buoy-gg/shared-ui/web";function on(e){switch(e){case"mmkv":return ne.mmkv;case"async":return ne.async;case"secure":return"Secure";default:return e}}function ua(e){switch(e){case"mmkv":return go.info;case"async":return go.warning;case"secure":return go.success;default:return go.muted}}E();function Dt(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function ya(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var Qs=40;function Xs(e){switch(typeof e){case"boolean":return e?"true":"false";case"number":return Number.isFinite(e)?String(e):null;case"string":return e.length===0?'""':e.length>Qs?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function Zs(e){let t=Dt(e),r=Xs(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as ec}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as tc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var ga=[me.semantic.info,me.semantic.success,me.semantic.warning,me.semantic.debug,"#FF6B9D","#00D9FF"];function pa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ga[t%ga.length]}var ma=e=>{switch(e){case"required_present":return{label:"Valid",color:me.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:me.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:me.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:me.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:me.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:me.text.secondary,sublabel:String(e)}}},rc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),oc=Ns(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:y,onHideKey:d,isPinned:g=false,onTogglePin:c,onEditKey:p,onToggleKey:m,onDeleteKey:x,editBlockedReason:f}){let b=p!=null&&f==null,S=ma(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=on(e.storageType),D=ya(e.value),C=D!==null&&typeof D=="object",B=Ve(l,{style:_.expandedContainer,children:[W(rn,{label:"Storage",children:W(Wr,{color:nn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(rn,{label:"Instance",children:W(Wr,{color:pa(e.instanceId),icon:W(Hs,{size:9,color:pa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(rn,{label:"Updates",children:[W(Wr,{color:me.semantic.warning,children:String(i)}),i>1&&y&&W(L,{onPress:y,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(u,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(ec,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Value:"}),W(u,{style:_.expandedValue,numberOfLines:3,children:rc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(tc,{children:[Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Type:"}),W(ca,{type:Dt(e.value)})]}),Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(ca,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(u,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Info:"}),W(u,{style:_.expandedDescription,children:e.description})]}):null,f?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Edit:"}),W(u,{style:_.expandedDescription,children:f})]}):null,c||d||b?Ve(l,{style:_.actionRow,children:[b?Ve(L,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&m?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&m?m(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Gs,{size:13,color:ce.color.onAccent}),W(u,{style:_.editButtonText,children:T&&m?"Toggle":"Edit"})]}):null,c?Ve(L,{style:[_.actionChip,g&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:g?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>c(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(da,{size:12,active:g,color:ce.color.accent}),W(u,{style:[_.actionChipText,{color:ce.color.accent}],children:g?"Unpin":"Pin to top"})]}):null,d?Ve(L,{style:_.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Js,{size:12,color:ce.color.warning}),W(u,{style:[_.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&x?Ve(L,{style:[_.actionChip,_.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>x(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ys,{size:12,color:ce.color.danger}),W(u,{style:[_.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(L,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:_.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(Us,{size:18,color:ce.color.accent}):W(js,{size:18,color:ce.color.textTertiary})}):null;return Ve(l,{style:[_.rowContainer,n&&_.rowContainerSelected],children:[ve,Ve(l,{style:_.compactRowWrapper,children:[W(qs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?Dt(e.value):Zs(e.value):void 0,secondaryAccessory:T?W(Wr,{size:"sm",color:e.value?me.semantic.success:me.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:_.badgeRow,children:[g&&W(da,{size:12,active:true,color:ce.color.accent}),W(Wr,{color:nn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:me.semantic.warning+"22",borderColor:me.semantic.warning+"55"}],pointerEvents:"none",children:W(u,{style:[_.absCountText,{color:me.semantic.warning}],children:String(i)})})]})]})}),nn=e=>{switch(e){case"mmkv":return me.semantic.info;case"async":return me.semantic.warning;case"secure":return me.semantic.success;default:return me.text.secondary}},_=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:ur},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:ur,flex:1},expandedExpected:{fontSize:11,color:me.semantic.warning,fontFamily:ur,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:ur},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:ur},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:ur,color:ce.color.accent}});import{SectionHeader as yr,night as an}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as po}from"react/jsx-runtime";function ln(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function fa({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:y,eventCountByKey:d,onViewHistory:g,onHideKey:c,pinnedKeys:p,onTogglePin:m,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=sa(B=>ln(B),[]),[R,D]=$s(null),C=sa(B=>{if(!B||typeof B.key!="string")return;if(T){T(B);return}let Q=I(B);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?po(l,{style:_r.sectionContainer,children:[po(yr,{children:[Ct(yr.Title,{children:e}),Ct(yr.Badge,{count:0,color:n})]}),Ct(l,{style:_r.emptySection,children:Ct(u,{style:_r.emptySectionText,children:o})})]}):r.length===0?null:po(l,{style:_r.sectionContainer,children:[e?po(yr,{children:[Ct(yr.Title,{children:e}),t>=0&&Ct(yr.Badge,{count:t,color:n})]}):null,Ct(l,{style:_r.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(oc,{storageKey:B,isExpanded:!a&&R===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:y,eventCount:d?.[B.key],onViewHistory:g?()=>g(B.key):void 0,onHideKey:c,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedReason:S?.(B),isPinned:p?.has(B.key),onTogglePin:m})},Q)})})]})}var _r=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:an.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:an.color.border,alignItems:"center"},emptySectionText:{color:an.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as nc,useMemo as ha,useRef as ba,useState as va}from"react";import{EyeOff as ac,FileJson as ic,HardDrive as lc,night as J,macOSColors as gr,Pin as sc,PillBadge as mo,Trash2 as cc,TypeBadge as dc,useSafeAreaInsets as uc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as yc,LiveExplorer as gc,ValueEditModal as pc,updateNestedDataByPath as mc,deleteNestedDataByPath as fc}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as P,jsxs as fe}from"react/jsx-runtime";var hc=300,ht="buoy-storage-detail";function bc(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ht}-explorer-root`:`${ht}-explorer-${e.map(t).filter(Boolean).join("-")}`}var Sa=[gr.semantic.info,gr.semantic.success,gr.semantic.warning,gr.semantic.debug,"#FF6B9D","#00D9FF"];function wa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Sa[t%Sa.length]}function vc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:y=false,onTogglePin:d,applySafeAreaInset:g}){let c=uc(),p=g?c.bottom:0,m=t==null,x=ma(e.status),f=on(e.storageType),[b,S]=va(false),[w,T]=va(0),I=ba(null),R=ha(()=>ya(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:R,B=nc(H=>{let ue=typeof H=="string"?H:JSON.stringify(H);I.current={raw:ue,value:H},o(ue).catch(ee=>{I.current=null,Ie.alert("Couldn't save",ee instanceof Error?ee.message:String(ee))})},[o]),Q=ba(C);Q.current=C;let ve=ha(()=>{if(m)return{update:(H,ue)=>{let ee=H.length===0?ue:mc(Q.current,H,ue);B(ee)},remove:H=>{H.length!==0&&B(fc(Q.current,H))}}},[m,B]),Se=d||i||m&&a;return fe(l,{style:A.screen,children:[P(l,{testID:`${ht}-key`,accessibilityLabel:e.key}),fe(Or,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[P(l,{style:A.section,children:fe(l,{style:A.editorContainer,children:[fe(l,{style:A.sectionHeaderRow,children:[P(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),m?fe(L,{onPress:()=>S(true),testID:`${ht}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(ic,{size:13,color:J.color.accent}),P(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),fe(l,{style:A.sectionBody,children:[P(gc,{editable:m,label:"Value",value:C,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:bc,debounceMs:hc}),m?P(u,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):P(u,{style:A.blockedText,testID:`${ht}-edit-blocked`,children:t})]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Key Details"}),fe(l,{style:A.infoBody,children:[fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Status:"}),P(mo,{color:x.color,testID:`${ht}-status`,children:x.label}),P(u,{style:A.infoDim,children:x.sublabel})]}),fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Storage:"}),P(mo,{color:nn(e.storageType),testID:`${ht}-backend`,children:f}),P(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Instance:"}),P(mo,{color:wa(e.instanceId),icon:P(lc,{size:9,color:wa(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Updates:"}),P(mo,{color:gr.semantic.warning,children:String(r)}),r>1&&n&&P(L,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:P(u,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(dc,{type:e.expectedType}),fe(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Info:"}),P(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),P(l,{style:A.viewerBody,testID:`${ht}-viewer`,children:C!==null&&typeof C=="object"?P(yc,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):P(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?fe(l,{style:A.actionRow,children:[d?fe(L,{style:[A.actionChip,y&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(sc,{size:12,active:y,color:J.color.accent}),P(u,{style:[A.actionChipText,{color:J.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,i?fe(L,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(ac,{size:12,color:J.color.warning}),P(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,m&&a?fe(L,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(cc,{size:12,color:J.color.danger}),P(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&m?P(pc,{path:[],value:C,onSave:H=>{B(H),T(ue=>ue+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=pe.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.accent+"4D",overflow:"hidden",shadowColor:J.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:J.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:J.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:J.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:J.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:J.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:J.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:J.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:J.color.textSecondary,borderBottomWidth:1,borderBottomColor:J.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:J.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Mt},infoDim:{color:J.color.textTertiary,fontSize:10,fontFamily:Mt},infoExpected:{fontSize:11,color:gr.semantic.warning,fontFamily:Mt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Mt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Mt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Mt}});E();E();import{macOSColors as sn,night as zt,monoFont as Sc}from"@buoy-gg/shared-ui/web";import{jsx as cn,jsxs as wc}from"react/jsx-runtime";var kc=[{id:"all",label:"All Types",color:null},{id:"async",label:ne.async,color:sn.semantic.warning},{id:"mmkv",label:ne.mmkv,color:sn.semantic.info},{id:"secure",label:"Secure",color:sn.semantic.success}];function dn({active:e,onChange:t,counts:r}){return cn(l,{style:$r.row,children:kc.filter(o=>ne.hasSecure||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??zt.color.accent;return wc(L,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[$r.pill,{borderColor:zt.color.border},n&&[$r.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:zt.color.accentSoft,borderColor:zt.color.accentBorderStrong}]],children:[cn(u,{style:[$r.label,n&&{color:a,fontWeight:"600"}],children:o.label}),cn(u,{style:[$r.value,{color:n?a:zt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function ka(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var $r=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:zt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:zt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:zt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:Sc,lineHeight:14}});import{macOSColors as Kt,night as Oe,monoFont as Cc}from"@buoy-gg/shared-ui/web";E();function un(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function xc(){return null}function Ca(){return"Session storage is unavailable in this browser context."}import{jsx as Xt,jsxs as Nr}from"react/jsx-runtime";var Oy=un();function Tc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:y="all",onStorageTypeChange:d,showStatus:g=true}){let c=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return Nr(l,{style:$e.container,children:[g?Nr(l,{style:$e.filtersRow,children:[Nr(L,{style:[$e.filterChip,a==="all"&&[$e.filterChipActive,{backgroundColor:Oe.color.accentSoft,borderColor:Oe.color.accentBorderStrong,shadowColor:Oe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Xt(u,{style:[$e.filterValue,{color:Oe.color.text}],children:c.validCount}),Xt(u,{style:$e.filterLabel,children:"Valid"})]}),Nr(L,{style:[$e.filterChip,a==="missing"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.error+"10",borderColor:Kt.semantic.error+"30",shadowColor:Kt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Xt(u,{style:[$e.filterValue,{color:c.missingCount>0?Kt.semantic.error:Oe.color.textTertiary}],children:c.missingCount}),Xt(u,{style:$e.filterLabel,children:"Missing"})]}),Nr(L,{style:[$e.filterChip,a==="issues"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.warning+"10",borderColor:Kt.semantic.warning+"30",shadowColor:Kt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Xt(u,{style:[$e.filterValue,{color:c.issuesCount>0?Kt.semantic.warning:Oe.color.textTertiary}],children:c.issuesCount}),Xt(u,{style:$e.filterLabel,children:"Issues"})]})]}):null,d&&Xt(dn,{active:y,onChange:d,counts:{all:c.totalCount,async:c.asyncCount,mmkv:c.mmkvCount,secure:c.secureCount}})]})}var $e=pe.create({container:{backgroundColor:Oe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Oe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Oe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Oe.color.border,marginHorizontal:4},subtitleText:{color:Oe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Oe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Oe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Oe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Oe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Cc,lineHeight:20}});E();ft();Jt();import{isDevToolsStorageKey as Ic}from"@buoy-gg/shared-ui/web";import{useState as yn,useEffect as Ec,useCallback as Rc,useRef as Bc}from"react";E();function Lt(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function gn(e=[]){let[t,r]=yn([]),[o,n]=yn(true),[a,i]=yn(null),y=JSON.stringify(e),d=Bc(e);d.current=e;let g=Rc(async()=>{let c=d.current;n(true),i(null);try{let p=(await oe.getAllKeys()).filter(f=>!Ic(f));if(!p||p.length===0){r([]),n(false);return}let m=await io(p),x=[];m.forEach(([f,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=c.find(R=>Lt(R,"async")?typeof R=="string"?R===f:R.key===f:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:f,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),c.forEach(f=>{if(!Lt(f,"async"))return;let b=typeof f=="string"?f:f.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof f=="object"&&f.expectedValue!==void 0&&{expectedValue:f.expectedValue},...typeof f=="object"&&f.expectedType!==void 0&&{expectedType:f.expectedType},...typeof f=="object"&&f.description!==void 0&&{description:f.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[y]);return Ec(()=>{g()},[g]),{storageKeys:t,isLoading:o,error:a,refresh:g}}E();ao();import{isDevToolsStorageKey as Vc,appStorageEvent as Ac}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as Dc}from"@buoy-gg/shared-ui/web/utils";var pn=new Set,fo,xa=false,Mc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Ta=e=>Vc(e)||[...Mc].some(t=>e.startsWith(t));function Ia(e){let t=Ac(e);if(t){e=t;for(let r of[...pn])try{r(e)}catch{}}}async function zc(){if(!(fo||typeof window>"u")){if(Dr()){fo=Ji(e=>{xa||Ia(e)});return}fo=Dc(e=>{if(xa||e.area!=="localStorage"||e.key!==void 0&&Ta(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!Ta(n))),Ia({action:r,data:o,timestamp:new Date})})}}function Ea(e){return pn.add(e),()=>{pn.delete(e)}}function Kc(){return!!fo}E();import{isDevToolsStorageKey as Ra}from"@buoy-gg/shared-ui/web";import{useState as pr,useEffect as Ba,useCallback as Va,useRef as Aa}from"react";function Lc(e,t,r=[]){let[o,n]=pr([]),[a,i]=pr(true),[y,d]=pr(null),g=JSON.stringify(r),c=Aa(r);c.current=r;let p=Va(()=>{let m=c.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys().filter(b=>!Ra(b));if(!x||x.length===0){let b=m.filter(S=>Lt(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,R=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:R}});n(b),i(false);return}let f=[];x.forEach(b=>{let{value:S,type:w}=kt(e,b),T=m.find(D=>Lt(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Jo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let R={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};f.push(R)}),m.forEach(b=>{if(!Lt(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;f.some(w=>w.key===S)||f.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(f)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,g]);return Ba(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:y,refresh:p}}function Da(e,t=[]){let[r,o]=pr([]),[n,a]=pr(true),[i,y]=pr(null),d=JSON.stringify(t),g=Aa(t);g.current=t;let c=Va(()=>{let p=g.current;a(true),y(null);try{let m=[];e.forEach(({instance:x,id:f})=>{let b=x.getAllKeys().filter(S=>!Ra(S));!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=kt(x,S),I=p.find(C=>Lt(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),R="optional_present";I&&(w===void 0?R="required_missing":typeof I=="object"&&I.expectedValue!==void 0?R=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?R=Jo(T,I.expectedType)?"required_present":"required_wrong_type":R="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:f,status:R,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};m.push(D)})}),p.forEach(x=>{if(!Lt(x,"mmkv"))return;let f=typeof x=="string"?x:x.key;if(!m.some(b=>b.key===f)){let b=e[0]?.id||"mmkv.default";m.push({key:f,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(m)}catch(m){y(m instanceof Error?m:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return Ba(()=>{c()},[c]),{storageKeys:r,isLoading:n,error:i,refresh:c}}E();import{isDevToolsStorageKey as Pc}from"@buoy-gg/shared-ui/web";import{useState as mn,useEffect as Oc,useCallback as Ma,useRef as ho}from"react";var Fc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Wc=3e3;function za(e){return JSON.stringify(e)}function _c(e=[],t={}){let{pollMs:r=Wc}=t,o=ho(e);o.current=e;let n=JSON.stringify(e),[a,i]=mn([]),[y,d]=mn(true),[g,c]=mn(null),p=ho(za([])),m=ho(false),x=ho(false),f=Ma(S=>{let w=za(S);w!==p.current&&(p.current=w,i(S))},[]),b=Ma(async()=>{if(!x.current){x.current=true;try{let S=te.getModule(),w=te.getAll().filter(({key:C})=>!Pc(C)),T=o.current.filter(C=>Lt(C,"secure")),I=C=>T.find(B=>(typeof B=="string"?B:B.key)===C);if(!S||w.length===0&&T.length===0){f([]),m.current=true,d(false);return}m.current||d(true),c(null);let R=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(B=>B.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let B=I(C.key),Q=typeof B=="object"?B:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??C.description;if(C.options.requireAuthentication){R.push({key:C.key,value:Fc,storageType:"secure",status:B?"required_present":"optional_present",category:B?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let H=null;try{H=await S.getItemAsync(C.key,C.options)}catch{}if(H===null&&!B)continue;let ue=H;if(H)try{ue=JSON.parse(H)}catch{ue=H}let ee="optional_present";if(B)if(H===null)ee="required_missing";else if(Q?.expectedValue!==void 0)ee=String(ue)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let se=ue===null?"null":Array.isArray(ue)?"array":typeof ue,Ue=Q.expectedType.toLowerCase();ee=se===Ue||Ue==="string"&&typeof H=="string"?"required_present":"required_wrong_type"}else ee="required_present";R.push({key:C.key,value:H===null?void 0:ue,storageType:"secure",status:ee,category:B?"required":"optional",...Se&&{description:Se},...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}})}f(R)}catch(S){c(S instanceof Error?S:new Error("Failed to read SecureStore")),f([])}finally{m.current=true,x.current=false,d(false)}}},[f,n]);return Oc(()=>{b();let S=te.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:y,error:g,refresh:b}}E();import{isDevToolsStorageKey as fn}from"@buoy-gg/shared-ui/web";import{useState as bo,useEffect as vo}from"react";function hn(e=false){let[t,r]=bo([]),[o,n]=bo(true),a=()=>{n(true);try{let i=Pe.getAll().filter(({id:y})=>!fn(y)).map(y=>{let{instance:d,id:g,encrypted:c,readOnly:p}=y,m=d.getAllKeys().filter(x=>!fn(x))?.length||0;return{id:g,instance:d,encrypted:c,readOnly:p,keyCount:m,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return vo(()=>{a()},[]),vo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Ka(e){let[t,r]=bo(null);return vo(()=>{if(!Pe){r(null);return}let o=Pe.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!fn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function $c(e){let[t,r]=bo(false);return vo(()=>{if(!Pe){r(false);return}r(Pe.has(e))},[e]),t}E();import{useEffect as Nc,useRef as La}from"react";import{Check as qc,macOSColors as Zt}from"@buoy-gg/shared-ui/web";import{jsx as mr,jsxs as Hc}from"react/jsx-runtime";var jc=2600,Pa=180;function Uc({onDone:e}){let t=La(new Yt.Value(0)).current,r=La(e);return r.current=e,Nc(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:Pa,easing:Lr.out(Lr.quad),useNativeDriver:true}),Yt.delay(jc),Yt.timing(t,{toValue:0,duration:Pa,easing:Lr.in(Lr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),mr(Yt.View,{pointerEvents:"box-none",style:[fr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Hc(L,{activeOpacity:.85,onPress:()=>r.current(),style:fr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[mr(l,{style:fr.tick,children:mr(qc,{size:10,color:Zt.semantic.success})}),mr(u,{style:fr.saved,children:"Saved"}),mr(l,{style:fr.divider}),mr(u,{style:fr.detail,children:"applies on next launch"})]})})}var fr=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor:Zt.background.card,borderWidth:pe.hairlineWidth,borderColor:Zt.border.default,shadowColor:"#000",shadowOpacity:.4,shadowRadius:14,shadowOffset:{width:0,height:5}},tick:{width:16,height:16,borderRadius:8,marginRight:7,alignItems:"center",justifyContent:"center",backgroundColor:Zt.semantic.successBackground},saved:{color:Zt.text.primary,fontSize:12,fontWeight:"600"},divider:{width:pe.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Zt.border.default},detail:{color:Zt.text.muted,fontSize:12}});E();import{useState as Gc,useEffect as Jc}from"react";ft();import{Trash2 as So,CopyButton as Yc,SquareDashed as Qc,X as Xc,ProUpgradeModal as Zc,monoFont as ed}from"@buoy-gg/shared-ui/web";import{macOSColors as Oa,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as td}from"@buoy-gg/license/web";import{jsx as Ne,jsxs as Fa}from"react/jsx-runtime";function rd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[y,d]=Gc(false),g=td();Jc(()=>{y&&g&&d(false)},[y,g]);let c=()=>{if(!g){d(true);return}Ie.alert(`Clear ${ne.asyncFull}`,`Delete all ${ne.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await oe.clear(),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},p=(R,D)=>{if(!g){d(true);return}Ie.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let C=t.find(B=>B.id===R);C&&(C.instance.clearAll(),o?.())}catch(C){Ie.alert("Error",`Failed: ${C}`)}}}])},m=()=>{if(!g){d(true);return}Ie.alert(`Clear All ${ne.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},x=()=>{if(!g){d(true);return}Ie.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},f=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=f&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Fa(l,{style:bt.container,children:[a&&Ne(L,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Fa(l,{style:bt.selectModeActiveContainer,children:[Ne(Xc,{size:14,color:at.color.accent}),i>0&&Ne(u,{style:bt.selectedCountText,children:i})]}):Ne(Qc,{size:16,color:at.color.textSecondary})}),!n&&Ne(Yc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:Oa.semantic.success,error:Oa.semantic.error}}),!n&&S&&Ne(L,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&w&&Ne(L,{onPress:c,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ne.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&I&&Ne(L,{onPress:m,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ne.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&Ne(L,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ne.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),Ne(Zc,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var bt=pe.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:at.color.buttonSurface,borderWidth:1,borderColor:at.color.border},actionButtonActive:{backgroundColor:at.color.accentSoft,borderColor:at.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:at.color.accent,fontFamily:ed}});E();import{useState as od,useEffect as nd}from"react";import{Trash2 as ad,CopyButton as id,CheckSquare as ld,EyeOff as sd,ProUpgradeModal as cd,monoFont as dd}from"@buoy-gg/shared-ui/web";import{macOSColors as Wa,night as qe}from"@buoy-gg/shared-ui/web";import{useIsPro as ud}from"@buoy-gg/license/web";E();Jt();function yd(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function _a(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await sr(r.map(a=>a.key));for(let a of n)await te.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let y=i.instanceId||"default";a[y]||(a[y]=[]),a[y].push(i.key)}),Object.entries(a).forEach(([i,y])=>{let d=t.find(g=>g.id===i);d&&y.forEach(g=>yd(d.instance,g))})}}import{jsx as xt,jsxs as qr}from"react/jsx-runtime";function gd({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[y,d]=od(false),g=ud();nd(()=>{y&&g&&d(false)},[y,g]);let c=e.length,p=c===i&&i>0,m=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:c,keys:b,timestamp:new Date().toISOString()}},x=()=>{c!==0&&o?.(e)},f=()=>{if(c!==0){if(!g){d(true);return}Ie.alert("Delete Selected Keys",`Delete ${c} selected key${c>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await _a(e,t),r?.()}catch(b){Ie.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return c===0?null:qr(l,{style:vt.container,children:[qr(l,{style:vt.leftSection,children:[qr(L,{style:vt.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(ld,{size:14,color:p?qe.color.accent:qe.color.textSecondary}),xt(u,{style:vt.selectAllText,children:p?"Deselect All":"Select All"})]}),xt(l,{style:vt.countBadge,children:qr(u,{style:vt.countText,children:[c," selected"]})})]}),qr(l,{style:vt.actionsSection,children:[xt(id,{value:m(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:qe.color.accent,success:Wa.semantic.success,error:Wa.semantic.error}}),o&&xt(L,{style:vt.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(sd,{size:14,color:qe.color.warning})}),xt(L,{style:vt.actionButton,onPress:f,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(ad,{size:14,color:qe.color.danger})})]}),xt(cd,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var vt=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:qe.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:qe.color.accentBorderStrong,paddingHorizontal:12,paddingVertical:8,marginBottom:10},leftSection:{flexDirection:"row",alignItems:"center",gap:12},selectAllButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,paddingHorizontal:8,backgroundColor:qe.color.surface,borderRadius:6,borderWidth:1,borderColor:qe.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:qe.color.textSecondary},countBadge:{backgroundColor:qe.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:qe.color.accent,fontFamily:dd},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:qe.color.surface,borderWidth:1,borderColor:qe.color.border}});E();var bn=new Set;function pd(e){return bn.add(e),()=>{bn.delete(e)}}function md(){bn.forEach(e=>{try{e()}catch{}})}E();ft();function vn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(te.getAll().find(r=>r.key===e.key)?.options.requireAuthentication)return"Biometric-protected keys can't be edited \u2014 writing one would fire an auth prompt.";if(!te.getModule())return"No SecureStore module is registered."}return null}function $a(e,t){if(e.storageType==="mmkv"){let r=ja(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(qa(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function fd(e){if(e==null)return"";if(typeof e=="string"){let t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return e}return typeof e=="object"?JSON.stringify(e,null,2):String(e)}async function Na(e,t,r=[]){let o=vn(e,r);if(o)throw new Error(o);let n=$a(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Ha(e,t));return}case"secure":{await te.setValue(e.key,Ha(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(y=>y.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,hd(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function qa(e){return e!==null&&typeof e=="object"}function Ha(e,t){return qa(e.value)?JSON.stringify(JSON.parse(t)):t}function ja(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function hd(e,t){switch(ja(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as hr,macOSColors as wo,night as F,HardDrive as Ua}from"@buoy-gg/shared-ui/web";import{useIsPro as bd}from"@buoy-gg/license/web";import{Fragment as vd,jsx as q,jsxs as Ee}from"react/jsx-runtime";var Ga=[wo.semantic.info,wo.semantic.success,wo.semantic.warning,wo.semantic.debug,"#FF6B9D","#00D9FF"];function br(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ga[t%Ga.length]}var ug=Ps["storage.keys"].free;function Sd({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let C=bd(),B=aa("storage.keys"),Q=aa("storage.mmkvInstances"),[ve,Se]=Qt(false);dr(()=>{ve&&C&&Se(false)},[ve,C]);let[H,ue]=Qt("all"),ee=p!=null&&m!=null,se=ee?p:H,Ue=ee?m:ue,[Ge,wt]=Qt("all"),Rt=S!=null&&w!=null,ye=Rt?S:Ge,or=Rt?w:wt,[re,_t]=Qt(null),Je=tn(null),kr=tn(0),ae=tn(new Map),gt=Ze((s,h)=>{h?ae.current.set(s,h):ae.current.delete(s)},[]),[$t,Cr]=Qt(0),[Nt,xr]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=hn(false),{storageKeys:Jr,isLoading:Yr,error:Qr,refresh:qt}=gn(e),Lo=_e(()=>xe.map(s=>({instance:s.instance,id:s.id})),[xe]),{storageKeys:Tr,isLoading:Po,error:Ir,refresh:ar}=Da(Lo,e),Oo=_e(()=>re?Tr.filter(s=>s.instanceId===re):Tr,[Tr,re]),{storageKeys:Ht,isLoading:Xr,error:Fo,refresh:Zr}=_c(e),N=_e(()=>[...Jr,...Oo,...Ht].filter(s=>!ze(s.key)),[Jr,Oo,Ht]),ke=_e(()=>{if(!I)return null;let s=ln(I);return N.find(h=>ln(h)===s)??I},[I,N]),Wo=Yr||Po||Xr,eo=Qr||Ir||Fo,Te=Ze(()=>{qt(),ar(),Zr()},[qt,ar,Zr]),tt=Ze(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),_o=Ze(()=>{xr(s=>(s&&Bt(new Set),!s))},[]),rt=Ze((s,h)=>{let U=tt(s);Bt(X=>{let Qe=new Set(X);return h?Qe.add(U):Qe.delete(U),Qe})},[tt]),$o=Ze(()=>{Bt(new Set),xr(false),Te()},[Te]),Er=Ze(s=>{s.forEach(h=>n?.(h.key)),Bt(new Set),xr(false)},[n]),jt=Ze(async(s,h)=>{if(!C)throw Se(true),new Error("Editing storage values is a Pro feature.");await Na(s,h,xe),Te(),Cr(U=>U+1)},[C,xe,Te]),No=Ze(s=>{jt(s,JSON.stringify(!s.value)).catch(h=>{Ie.alert("Couldn't save",h instanceof Error?h.message:String(h))})},[jt]),to=Ze((s,h)=>{if(!C){Se(true);return}Ie.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await _a([s],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),h?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,xe,Te]),Rr=Ze(s=>vn(s,xe),[xe]),qo=_e(()=>{let s=N,h={valid:s.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:s.filter(G=>G.status==="required_missing").length,issues:s.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:s.length},U=s.filter(G=>G.storageType==="async"),X=s.filter(G=>G.storageType==="mmkv"),Qe=s.filter(G=>G.storageType==="secure");return{summary:{valid:h.valid,missing:h.missing,issues:h.issues,total:h.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:X.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Qe.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);dr(()=>{i&&(i.current=N)},[N,i]),dr(()=>{let s,h=Ea(U=>{clearTimeout(s),s=setTimeout(()=>{qt()},100)});return()=>{clearTimeout(s),h()}},[qt]),dr(()=>{let s,h=pd(()=>{clearTimeout(s),s=setTimeout(Te,100)});return()=>{clearTimeout(s),h()}},[Te]),dr(()=>{let s,h=qn(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(s),h()}},[ar,re]);let Ut=_e(()=>{let s=N,h=s.filter(X=>!ze(X.key)),U=s.filter(X=>ze(X.key));return{totalCount:s.length,requiredCount:h.filter(X=>X.category==="required").length,missingCount:h.filter(X=>X.status==="required_missing").length,wrongValueCount:h.filter(X=>X.status==="required_wrong_value").length,wrongTypeCount:h.filter(X=>X.status==="required_wrong_type").length,presentRequiredCount:h.filter(X=>X.status==="required_present").length,optionalCount:h.filter(X=>X.category==="optional").length,mmkvCount:s.filter(X=>X.storageType==="mmkv").length,asyncCount:s.filter(X=>X.storageType==="async").length,secureCount:s.filter(X=>X.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let s=N.filter(V=>!ze(V.key));ye!=="all"&&(s=s.filter(V=>V.storageType===ye));let h=s.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=s.filter(V=>V.status==="required_missing").length,X=s.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Qe=0,G=0,Be=0,Vt=0;return se==="all"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_present"||V.status==="optional_present")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_present"||V.status==="optional_present")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_present"||V.status==="optional_present")).length,Vt=Qe+G+Be):se==="missing"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&V.status==="required_missing").length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&V.status==="required_missing").length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&V.status==="required_missing").length,Vt=Qe+G+Be):se==="issues"&&(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Vt=Qe+G+Be),{validCount:h,missingCount:U,issuesCount:X,asyncCount:Qe,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);dr(()=>{x?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[x,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((s,h)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[h.status]||999)}),[N]),Kn=_e(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),Le=_e(()=>{let s=ir;if(c&&c.size>0&&(s=s.filter(h=>c.has(h.storageType))),s=s.filter(h=>!Array.from(r).some(U=>h.key.includes(U))),a){let h=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(h))}switch(se){case"all":s=s.filter(h=>h.status==="required_present"||h.status==="optional_present");break;case"missing":s=s.filter(h=>h.status==="required_missing");break;case"issues":s=s.filter(h=>h.status==="required_wrong_type"||h.status==="required_wrong_value");break}if(ye!=="all"&&(s=s.filter(h=>h.storageType===ye)),f&&f.size>0){let h=s.filter(X=>f.has(X.key)),U=s.filter(X=>!f.has(X.key));s=[...h,...U]}return s},[ir,se,ye,r,a,re,c,f]),v=_e(()=>Le.slice(0,B),[Le,B]),k=_e(()=>Math.max(0,Le.length-B),[Le.length,B]),z=k>0,j=_e(()=>{let s=Le.filter(h=>!ze(h.key));return{totalCount:Le.length,requiredCount:s.filter(h=>h.category==="required").length,missingCount:s.filter(h=>h.status==="required_missing").length,wrongValueCount:s.filter(h=>h.status==="required_wrong_value").length,wrongTypeCount:s.filter(h=>h.status==="required_wrong_type").length,presentRequiredCount:s.filter(h=>h.status==="required_present").length,optionalCount:s.filter(h=>h.category==="optional").length,mmkvCount:Le.filter(h=>h.storageType==="mmkv").length,asyncCount:Le.filter(h=>h.storageType==="async").length,secureCount:Le.filter(h=>h.storageType==="secure").length,devToolsCount:Le.filter(h=>ze(h.key)).length}},[Le]),Ye=_e(()=>v.filter(s=>nr.has(tt(s))),[v,nr,tt]),Br=Ze(()=>{let s=new Set(v.map(tt));Bt(s)},[v,tt]),Vr=Ze(()=>{Bt(new Set)},[]),Ar=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Ai=Ar>=90?"OPTIMAL":Ar>=70?"WARNING":"CRITICAL",Di=Ar>=90?hr.success:Ar>=70?hr.warning:hr.error;if(ke)return q(l,{style:O.root,children:q(vc,{storageKey:ke,editBlockedReason:Rr(ke),eventCount:y?.[ke.key],onSave:s=>jt(ke,s),onViewHistory:g?()=>g(ke.key):void 0,onDeleteKey:s=>to(s,()=>D?.()),onHideKey:s=>{Er([s]),D?.()},isPinned:f?.has(ke.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Wo&&N.length===0)return Ee(l,{style:O.emptyState,children:[q(ia,{size:48,color:F.color.textTertiary}),q(u,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(eo)return Ee(l,{style:O.emptyState,children:[q(ia,{size:48,color:hr.error}),q(u,{style:[O.emptyTitle,{color:hr.error}],children:"Error loading storage"}),q(u,{style:O.emptySubtitle,children:eo.message})]});let Mi=Ee(vd,{children:[ye==="mmkv"&&xe.length===0&&Ee(l,{style:O.emptyMMKVState,children:[q(u,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),q(u,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),q(u,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
1
|
+
"use client";var qo=Object.defineProperty;var Wi=Object.getOwnPropertyDescriptor;var _i=Object.getOwnPropertyNames;var $i=Object.prototype.hasOwnProperty;var ro=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ln=(e,t)=>{for(var r in t)qo(e,r,{get:t[r],enumerable:true})},jo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of _i(t))!$i.call(e,n)&&n!==r&&qo(e,n,{get:()=>t[n],enumerable:!(o=Wi(t,n))||o.enumerable});return e},Ni=(e,t,r)=>(jo(e,t,"default"),r&&jo(r,t,"default"));var Hi=e=>jo(qo({},"__esModule",{value:true}),e);var qi,E=ro(()=>{"use strict";qi=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Gt,hasCapacitorPlugin as ji,installCapacitorBridge as Ui,interceptCapacitor as Gi,isCapacitorNative as Ji}from"@buoy-gg/license/web";function Dr(){return Ji()&&ji(mt)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Mr))try{o(r)}catch{}}function Yi(e){return Mr.add(e),Qi(),()=>{Mr.delete(e)}}async function lr(e){let{value:t}=await Gt(mt,"get",{key:e});return t??null}async function Uo(){let{keys:e}=await Gt(mt,"keys");return Array.isArray(e)?e:[]}async function oo(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function Qi(){Go||!Dr()||!Ui()||(Go=true,Gi({plugin:mt,methods:["set","remove","clear"],promise:async(e,t)=>{if(Mr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Uo().catch(()=>[]),y=await t();return At("clear",{keys:await i}),y}if(r===void 0)return t();let o=lr(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?At("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):At("removeItem",{key:r,prevValue:a}),n}}))}function Pn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Pn(r[o],n):n;return r}function On(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var mt,Mr,Go,no,ao=ro(()=>{"use strict";E();mt="Preferences";Mr=new Set;Go=false;no={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(mt,"set",{key:e,value:String(t)}),At("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=lr(e).catch(()=>null);await Gt(mt,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await oo(await Uo()).catch(()=>{});await Gt(mt,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Uo()},multiGet(e){return oo(e)},async multiSet(e){let t=oo(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(mt,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=oo(e).catch(()=>{});await Promise.all(e.map(r=>Gt(mt,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await no.setItem(e,JSON.stringify(Pn(On(r),On(t))))},async multiMerge(e){for(let[t,r]of e)await no.mergeItem(t,r)}}});import Zi from"@buoy-gg/shared-ui/web/asyncStorage";var lt,Fn,oe,ft=ro(()=>{"use strict";E();ao();lt=()=>Dr()?no:Zi,Fn={getItem:e=>lt().getItem(e),setItem:(e,t)=>lt().setItem(e,t),removeItem:e=>lt().removeItem(e),clear:()=>lt().clear(),getAllKeys:()=>lt().getAllKeys(),multiGet:e=>lt().multiGet(e),multiSet:e=>lt().multiSet(e),multiRemove:e=>lt().multiRemove(e),mergeItem:(e,t)=>lt().mergeItem(e,t),multiMerge:e=>lt().multiMerge(e)},oe=Fn});var Wn={};Ln(Wn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>_n,default:()=>$n,readMany:()=>io,removeMany:()=>sr,writeMany:()=>zr});async function io(e){if(typeof Fe.multiGet=="function")return await Fe.multiGet(e);let t=await Fe.getMany(e);return e.map(r=>[r,t[r]??null])}async function zr(e){if(typeof Fe.multiSet=="function")return Fe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Fe.setMany(t)}async function sr(e){return typeof Fe.multiRemove=="function"?Fe.multiRemove(e):Fe.removeMany(e)}var Fe,_n,$n,Jt=ro(()=>{"use strict";E();ft();Fe=oe,_n={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};$n=Fe});E();E();ft();Jt();import{classifyPreviewItem as Xi,createRestoreScope as el,emptyRestoreResult as Nn,failedRestore as tl,isDevToolsStorageKey as we,registerStateSnapshotProvider as rl,unionKeys as lo,wontApply as Kr}from"@buoy-gg/shared-ui/web";E();ft();Jt();import{isDevToolsStorageKey as ol}from"@buoy-gg/shared-ui/web";async function so(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!ol(r));t.length!==0&&await sr(t)}async function nl(){await oe.clear()}E();E();import{isDevToolsStorageKey as al}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 il(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Jo(e,t){return e===t}var ll=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(al(e)||this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,kt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=kt(e,n),y=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:y,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:y,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Yo=new ll;var Hn=e=>Yo.addListener(e);var sl=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 sl;function qn(e,t,r){Pe.register(e,t,r),Yo.addInstance(t,e)}function jn(e){Yo.removeInstance(e),Pe.unregister(e)}E();var cl=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 cl;function dl(e,t){ee.register(e,t)}function ul(e){ee.unregister(e)}function Un(e,t){e.remove?e.remove(t):e.delete?.(t)}function yl(){return{canCapture:true,canRestore:true}}async function Gn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await io(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:y}of Pe.getAll().filter(({id:d})=>!we(d)))try{o[i]=y.getAllKeys().filter(d=>!we(d)).map(d=>{let{value:g,type:c}=kt(y,d);return c==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:g,valueType:c}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=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 gl(){let{data:e,warnings:t}=await Gn();return{data:e,warnings:t}}async function pl(e,t){let r=e,o=el(t),n=o.touch,a=Nn();if(!r)return tl("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!we(p)&&n(`async:${p}`)),g=new Set(d.map(([p])=>p)),c=(await oe.getAllKeys()).filter(p=>!we(p)).filter(p=>!g.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),c.length>0&&await sr(c),d.length>0&&await zr(d),a.applied+=d.length+c.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,g]of Object.entries(r.mmkv??{})){if(we(d))continue;let c=Pe.get(d);if(!c){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(c.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=c;try{let m=new Set(g.map(f=>f.key)),x=p.getAllKeys().filter(f=>!we(f));for(let f of x)o.allows(`mmkv:${d}/${f}`)&&(m.has(f)||(Un(p,f),a.applied+=1));for(let f of g)if(!we(f.key)&&n(`mmkv:${d}/${f.key}`)){if(f.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${f.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(f.key,f.value),a.applied+=1}}catch(m){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(m)}`)}}let i=r.secure??{};for(let{key:d,options:g}of ee.getAll().filter(({key:c})=>!we(c)))if(o.allows(`secure:${d}`)){if(g.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let c=i[d];c===null?await ee.deleteValue(d):await ee.setValue(d,c)}else await ee.deleteValue(d);a.applied+=1}catch(c){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(c)}`)}}for(let d of Object.keys(i))we(d)||n(`secure:${d}`)&&(ee.getAll().filter(({key:g})=>!we(g)).some(g=>g.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let y=o.excludedWarning("item(s)");return y&&a.warnings.push(y),a}async function ml(){let e=Nn();try{await so(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Pe.getAll().filter(({id:o})=>!we(o))){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!we(n)))Un(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of 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 fl=256*1024;function Qo(e,t,r,o,n,a){return Xi({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>fl,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function hl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Gn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],y=new Map(n.async??[]),d=new Map(r.async??[]);for(let m of lo(y,d))we(m)||a.push(Qo(`async:${m}`,m,y.get(m),d.get(m),y.has(m),d.has(m)));for(let m of lo(n.mmkv,r.mmkv)){if(we(m))continue;let x=o?Pe.get(m):null,f=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[m]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[m]??[]).map(T=>[T.key,T]));for(let T of lo(S,w)){if(we(T))continue;let I=`mmkv:${m}/${T}`,R=`${m} \xB7 ${T}`,D=S.get(T),C=w.get(T),B=Qo(I,R,D?.value,C?.value,S.has(T),w.has(T));f?B=Kr(B,"MMKV instance not registered"):b?B=Kr(B,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Kr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let g=n.secure??{},c=r.secure??{},p=o?new Map(ee.getAll().filter(({key:m})=>!we(m)).map(m=>[m.key,m])):null;for(let m of lo(g,c)){if(we(m))continue;let x=Qo(`secure:${m}`,m,g[m],c[m],m in g,m in c);if(o){let f=p?.get(m);f?f.options.requireAuthentication&&(x=Kr(x,"biometric-protected keys are never written")):x=Kr(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}rl({id:"storage",label:"Storage",status:yl,capture:gl,restore:pl,clear:ml,previewItems:hl});E();import{StorageIcon as bl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as vl,defineToolPreset as Sl}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as Zo,useRef as Jn,useMemo as st}from"react";var Yn={};Ln(Yn,{AccessibilityInfo:()=>xl,ActivityIndicator:()=>ws,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Il,AppState:()=>El,Appearance:()=>Tl,BackHandler:()=>Rl,Button:()=>ks,CheckBox:()=>Nl,Clipboard:()=>Bl,DeviceEventEmitter:()=>ns,Dimensions:()=>Vl,Easing:()=>Lr,FlatList:()=>Xo,I18nManager:()=>Al,Image:()=>Hl,ImageBackground:()=>ql,InteractionManager:()=>Ml,Keyboard:()=>Dl,KeyboardAvoidingView:()=>jl,LayoutAnimation:()=>zl,Linking:()=>Kl,LogBox:()=>os,Modal:()=>ta,NativeEventEmitter:()=>Ll,NativeModules:()=>Cl,PanResponder:()=>Pl,Picker:()=>Ul,PixelRatio:()=>Ol,Platform:()=>Fl,Pressable:()=>vs,ProgressBar:()=>Gl,RefreshControl:()=>Jl,SafeAreaView:()=>Yl,ScrollView:()=>Or,SectionList:()=>Ql,Share:()=>Wl,StatusBar:()=>Zl,StyleSheet:()=>pe,Switch:()=>Ss,Text:()=>u,TextInput:()=>fs,Touchable:()=>Xl,TouchableHighlight:()=>hs,TouchableNativeFeedback:()=>es,TouchableOpacity:()=>L,TouchableWithoutFeedback:()=>bs,UIManager:()=>_l,Vibration:()=>$l,View:()=>l,VirtualizedList:()=>ts,YellowBox:()=>rs,findNodeHandle:()=>Cs,unstable_createElement:()=>kl,useColorScheme:()=>as,useLocaleContext:()=>is,useWindowDimensions:()=>ls});E();Ni(Yn,wl);import*as wl from"react-native-web";import{unstable_createElement as kl,NativeModules as Cl,AccessibilityInfo as xl,Animated as Yt,Appearance as Tl,AppRegistry as Il,AppState as El,BackHandler as Rl,Clipboard as Bl,Dimensions as Vl,Easing as Lr,I18nManager as Al,Keyboard as Dl,InteractionManager as Ml,LayoutAnimation as zl,Linking as Kl,NativeEventEmitter as Ll,PanResponder as Pl,PixelRatio as Ol,Platform as Fl,Share as Wl,StyleSheet as pe,UIManager as _l,Vibration as $l,CheckBox as Nl,FlatList as Xo,Image as Hl,ImageBackground as ql,KeyboardAvoidingView as jl,Picker as Ul,ProgressBar as Gl,RefreshControl as Jl,SafeAreaView as Yl,SectionList as Ql,StatusBar as Zl,Touchable as Xl,TouchableNativeFeedback as es,VirtualizedList as ts,YellowBox as rs,LogBox as os,DeviceEventEmitter as ns,useColorScheme as as,useLocaleContext as is,useWindowDimensions as ls}from"react-native-web";import*as Ze from"react-native-web";import{createElement as en,forwardRef as Qn,useCallback as ss,useRef as cs}from"react";E();import{useEffect as ds,useState as us}from"react";import{createPortal as ys}from"react-dom";E();var gs='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as ps}from"react/jsx-runtime";var Pr=Symbol.for("@buoy-gg/portal-host"),Zn=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 Xn(){let e=document;if(e[Pr])return e[Pr].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:gs});let r=()=>{let c=document.fullscreenElement,p=c&&c.tagName!=="CANVAS"?c:document.body;t.parentElement!==p&&p.appendChild(t)},o=new Map,n=c=>{(!t.contains(c.target)||!Zn(c.target))&&o.set(c.code||c.key,{key:c.key,code:c.code,location:c.location,keyCode:c.keyCode,which:c.which,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey})},a=c=>{o.delete(c.code||c.key)},i=()=>o.clear(),y=()=>{let c=[...o.values()];o.clear();for(let p of c)document.dispatchEvent(new KeyboardEvent("keyup",{...p,bubbles:true}))},d=c=>{Zn(c.target)&&c.stopPropagation()},g=c=>c.stopPropagation();return r(),document.addEventListener("fullscreenchange",r),document.addEventListener("keydown",n,true),document.addEventListener("keyup",a,true),window.addEventListener("blur",i),t.addEventListener("focusin",y),t.addEventListener("keydown",d),t.addEventListener("keyup",d),t.addEventListener("keypress",d),t.addEventListener("wheel",g,{passive:true}),e[Pr]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",r),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",a,true),window.removeEventListener("blur",i),t.remove(),delete e[Pr]}},t}function ms({children:e}){let[t,r]=us(null);return ds(()=>{let o=Xn(),n=document[Pr];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?ys(ps("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}function nt(e){let t=Qn((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...y}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&y[`aria-${d}`]===void 0&&(y[`aria-${d}`]=a[d]);for(let[d,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&y[`aria-${g}`]===void 0&&(y[`aria-${g}`]=i[d]);return en(e,{...y,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=nt(Ze.View),u=nt(Ze.Text),fs=nt(Ze.TextInput),L=nt(Ze.TouchableOpacity),hs=nt(Ze.TouchableHighlight),bs=nt(Ze.TouchableWithoutFeedback),vs=nt(Ze.Pressable),Or=nt(Ze.ScrollView),ea=Qn((e,t)=>{let r=cs(null),o=ss(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"}),Xn().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return en(ms,null,en(Ze.Modal,{...e,ref:o}))});ea.displayName="Modal";var ta=nt(ea),Ss=nt(Ze.Switch),ws=nt(Ze.ActivityIndicator),ks=nt(Ze.Button),Cs=Ze.findNodeHandle,Ie={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let g=document.createElement("p");g.textContent=t,g.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(g)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let y=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let g of y){let c=document.createElement("button");c.type="button",c.textContent=g.text??"OK",c.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${g.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,c.onclick=()=>{d(),g.onPress?.()},i.appendChild(c)}n.addEventListener("cancel",g=>{g.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};ft();import{JsModal as xs,ModalHeader as Me,TabSelector as Ts,parseValue as Is,devToolsStorageKeys as cr,macOSColors as Es,night as We,ToolEmptyState as Rs,Filter as Bs,RefreshCw as Vs,Search as As,SearchBar as Ds,PowerToggleButton as Ms,ToolbarCopyButton as ra,ToolbarClearButton as zs,truncatePayload as co,TickProvider as oa,useLimit as Ks,TIER_LIMITS as Ls,windowDragProps as Ps,usePersistedState as uo,monoFont as yo}from"@buoy-gg/shared-ui/web";E();E();E();ao();var ae=Dr()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as _e,useCallback as Xe,useState as Qt,useEffect as dr,useRef as tn}from"react";import{absoluteFill as na,useLimit as aa,TIER_LIMITS as Os,monoFont as Fr}from"@buoy-gg/shared-ui/web";import{Database as ia,Zap as Fs,ProBadge as la,ProUpgradeModal as Ws,ToolEmptyState as _s,resolveListEmptyState as $s}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";E();import{useCallback as sa,useState as Ns}from"react";E();import{memo as Hs}from"react";import{macOSColors as me,night as ce,CompactRow as qs,TypeBadge as ca,HardDrive as js,Square as Us,CheckSquare as Gs,Edit3 as Js,EyeOff as Ys,Pin as da,Trash2 as Qs,ExpandedInfoRow as rn,PillBadge as Wr,monoFont as ur}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as go}from"@buoy-gg/shared-ui/web";var Zs=new Set(["sessionStorage","localStorage"]);function on(e,t){switch(e){case"mmkv":return t&&!Zs.has(t)?"MMKV":ae.mmkv;case"async":return ae.async;case"secure":return"Secure";default:return e}}function ua(e){switch(e){case"mmkv":return go.info;case"async":return go.warning;case"secure":return go.success;default:return go.muted}}E();function Dt(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function ya(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var Xs=40;function ec(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>Xs?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function tc(e){let t=Dt(e),r=ec(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as rc}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as oc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var ga=[me.semantic.info,me.semantic.success,me.semantic.warning,me.semantic.debug,"#FF6B9D","#00D9FF"];function pa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ga[t%ga.length]}var ma=e=>{switch(e){case"required_present":return{label:"Valid",color:me.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:me.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:me.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:me.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:me.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:me.text.secondary,sublabel:String(e)}}},nc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),ac=Hs(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:y,onHideKey:d,isPinned:g=false,onTogglePin:c,onEditKey:p,onToggleKey:m,onDeleteKey:x,editBlockedReason:f}){let b=p!=null&&f==null,S=ma(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=on(e.storageType,e.instanceId),D=ya(e.value),C=D!==null&&typeof D=="object",B=Ve(l,{style:_.expandedContainer,children:[W(rn,{label:"Storage",children:W(Wr,{color:nn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(rn,{label:"Instance",children:W(Wr,{color:pa(e.instanceId),icon:W(js,{size:9,color:pa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(rn,{label:"Updates",children:[W(Wr,{color:me.semantic.warning,children:String(i)}),i>1&&y&&W(L,{onPress:y,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(u,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(rc,{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:nc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(oc,{children:[Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Type:"}),W(ca,{type:Dt(e.value)})]}),Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(ca,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(u,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Info:"}),W(u,{style:_.expandedDescription,children:e.description})]}):null,f?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Edit:"}),W(u,{style:_.expandedDescription,children:f})]}):null,c||d||b?Ve(l,{style:_.actionRow,children:[b?Ve(L,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&m?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&m?m(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Js,{size:13,color:ce.color.onAccent}),W(u,{style:_.editButtonText,children:T&&m?"Toggle":"Edit"})]}):null,c?Ve(L,{style:[_.actionChip,g&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:g?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>c(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(da,{size:12,active:g,color:ce.color.accent}),W(u,{style:[_.actionChipText,{color:ce.color.accent}],children:g?"Unpin":"Pin to top"})]}):null,d?Ve(L,{style:_.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ys,{size:12,color:ce.color.warning}),W(u,{style:[_.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&x?Ve(L,{style:[_.actionChip,_.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>x(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Qs,{size:12,color:ce.color.danger}),W(u,{style:[_.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(L,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:_.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(Gs,{size:18,color:ce.color.accent}):W(Us,{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):tc(e.value):void 0,secondaryAccessory:T?W(Wr,{size:"sm",color:e.value?me.semantic.success:me.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:_.badgeRow,children:[g&&W(da,{size:12,active:true,color:ce.color.accent}),W(Wr,{color:nn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:me.semantic.warning+"22",borderColor:me.semantic.warning+"55"}],pointerEvents:"none",children:W(u,{style:[_.absCountText,{color:me.semantic.warning}],children:String(i)})})]})]})}),nn=e=>{switch(e){case"mmkv":return me.semantic.info;case"async":return me.semantic.warning;case"secure":return me.semantic.success;default:return me.text.secondary}},_=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:ur},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:ur,flex:1},expandedExpected:{fontSize:11,color:me.semantic.warning,fontFamily:ur,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:ur},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:ur},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:ur,color:ce.color.accent}});import{SectionHeader as yr,night as an}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as po}from"react/jsx-runtime";function ln(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function fa({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:y,eventCountByKey:d,onViewHistory:g,onHideKey:c,pinnedKeys:p,onTogglePin:m,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=sa(B=>ln(B),[]),[R,D]=Ns(null),C=sa(B=>{if(!B||typeof B.key!="string")return;if(T){T(B);return}let Q=I(B);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?po(l,{style:_r.sectionContainer,children:[po(yr,{children:[Ct(yr.Title,{children:e}),Ct(yr.Badge,{count:0,color:n})]}),Ct(l,{style:_r.emptySection,children:Ct(u,{style:_r.emptySectionText,children:o})})]}):r.length===0?null:po(l,{style:_r.sectionContainer,children:[e?po(yr,{children:[Ct(yr.Title,{children:e}),t>=0&&Ct(yr.Badge,{count:t,color:n})]}):null,Ct(l,{style:_r.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(ac,{storageKey:B,isExpanded:!a&&R===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:y,eventCount:d?.[B.key],onViewHistory:g?()=>g(B.key):void 0,onHideKey:c,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedReason:S?.(B),isPinned:p?.has(B.key),onTogglePin:m})},Q)})})]})}var _r=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:an.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:an.color.border,alignItems:"center"},emptySectionText:{color:an.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as ic,useMemo as ha,useRef as ba,useState as va}from"react";import{EyeOff as lc,FileJson as sc,HardDrive as cc,night as J,macOSColors as gr,Pin as dc,PillBadge as mo,Trash2 as uc,TypeBadge as yc,useSafeAreaInsets as gc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as pc,LiveExplorer as mc,ValueEditModal as fc,updateNestedDataByPath as hc,deleteNestedDataByPath as bc}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as P,jsxs as fe}from"react/jsx-runtime";var vc=300,ht="buoy-storage-detail";function Sc(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ht}-explorer-root`:`${ht}-explorer-${e.map(t).filter(Boolean).join("-")}`}var Sa=[gr.semantic.info,gr.semantic.success,gr.semantic.warning,gr.semantic.debug,"#FF6B9D","#00D9FF"];function wa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Sa[t%Sa.length]}function wc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:y=false,onTogglePin:d,applySafeAreaInset:g}){let c=gc(),p=g?c.bottom:0,m=t==null,x=ma(e.status),f=on(e.storageType,e.instanceId),[b,S]=va(false),[w,T]=va(0),I=ba(null),R=ha(()=>ya(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:R,B=ic(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=ba(C);Q.current=C;let ve=ha(()=>{if(m)return{update:(q,ue)=>{let te=q.length===0?ue:hc(Q.current,q,ue);B(te)},remove:q=>{q.length!==0&&B(bc(Q.current,q))}}},[m,B]),Se=d||i||m&&a;return fe(l,{style:A.screen,children:[P(l,{testID:`${ht}-key`,accessibilityLabel:e.key}),fe(Or,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[P(l,{style:A.section,children:fe(l,{style:A.editorContainer,children:[fe(l,{style:A.sectionHeaderRow,children:[P(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),m?fe(L,{onPress:()=>S(true),testID:`${ht}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(sc,{size:13,color:J.color.accent}),P(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),fe(l,{style:A.sectionBody,children:[P(mc,{editable:m,label:"Value",value:C,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:Sc,debounceMs:vc}),m?P(u,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):P(u,{style:A.blockedText,testID:`${ht}-edit-blocked`,children:t})]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Key Details"}),fe(l,{style:A.infoBody,children:[fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Status:"}),P(mo,{color:x.color,testID:`${ht}-status`,children:x.label}),P(u,{style:A.infoDim,children:x.sublabel})]}),fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Storage:"}),P(mo,{color:nn(e.storageType),testID:`${ht}-backend`,children:f}),P(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Instance:"}),P(mo,{color:wa(e.instanceId),icon:P(cc,{size:9,color:wa(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Updates:"}),P(mo,{color:gr.semantic.warning,children:String(r)}),r>1&&n&&P(L,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:P(u,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(yc,{type:e.expectedType}),fe(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Info:"}),P(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),P(l,{style:A.viewerBody,testID:`${ht}-viewer`,children:C!==null&&typeof C=="object"?P(pc,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):P(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?fe(l,{style:A.actionRow,children:[d?fe(L,{style:[A.actionChip,y&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(dc,{size:12,active:y,color:J.color.accent}),P(u,{style:[A.actionChipText,{color:J.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,i?fe(L,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(lc,{size:12,color:J.color.warning}),P(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,m&&a?fe(L,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(uc,{size:12,color:J.color.danger}),P(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&m?P(fc,{path:[],value:C,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:gr.semantic.warning,fontFamily:Mt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Mt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Mt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Mt}});E();E();E();function ka(){return ae.hasSecure||ee.count()>0}import{macOSColors as sn,night as zt,monoFont as kc}from"@buoy-gg/shared-ui/web";import{jsx as cn,jsxs as Cc}from"react/jsx-runtime";var xc=[{id:"all",label:"All Types",color:null},{id:"async",label:ae.async,color:sn.semantic.warning},{id:"mmkv",label:ae.mmkv,color:sn.semantic.info},{id:"secure",label:"Secure",color:sn.semantic.success}];function dn({active:e,onChange:t,counts:r}){return cn(l,{style:$r.row,children:xc.filter(o=>ka()||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??zt.color.accent;return Cc(L,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[$r.pill,{borderColor:zt.color.border},n&&[$r.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:zt.color.accentSoft,borderColor:zt.color.accentBorderStrong}]],children:[cn(u,{style:[$r.label,n&&{color:a,fontWeight:"600"}],children:o.label}),cn(u,{style:[$r.value,{color:n?a:zt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function Ca(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var $r=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:zt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:zt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:zt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:kc,lineHeight:14}});import{macOSColors as Kt,night as Oe,monoFont as Tc}from"@buoy-gg/shared-ui/web";E();function un(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function Ic(){return null}function xa(){return"Session storage is unavailable in this browser context."}import{jsx as Zt,jsxs as Nr}from"react/jsx-runtime";var Wy=un();function Ec({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:y="all",onStorageTypeChange:d,showStatus:g=true}){let c=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return Nr(l,{style:$e.container,children:[g?Nr(l,{style:$e.filtersRow,children:[Nr(L,{style:[$e.filterChip,a==="all"&&[$e.filterChipActive,{backgroundColor:Oe.color.accentSoft,borderColor:Oe.color.accentBorderStrong,shadowColor:Oe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Zt(u,{style:[$e.filterValue,{color:Oe.color.text}],children:c.validCount}),Zt(u,{style:$e.filterLabel,children:"Valid"})]}),Nr(L,{style:[$e.filterChip,a==="missing"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.error+"10",borderColor:Kt.semantic.error+"30",shadowColor:Kt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Zt(u,{style:[$e.filterValue,{color:c.missingCount>0?Kt.semantic.error:Oe.color.textTertiary}],children:c.missingCount}),Zt(u,{style:$e.filterLabel,children:"Missing"})]}),Nr(L,{style:[$e.filterChip,a==="issues"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.warning+"10",borderColor:Kt.semantic.warning+"30",shadowColor:Kt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Zt(u,{style:[$e.filterValue,{color:c.issuesCount>0?Kt.semantic.warning:Oe.color.textTertiary}],children:c.issuesCount}),Zt(u,{style:$e.filterLabel,children:"Issues"})]})]}):null,d&&Zt(dn,{active:y,onChange:d,counts:{all:c.totalCount,async:c.asyncCount,mmkv:c.mmkvCount,secure:c.secureCount}})]})}var $e=pe.create({container:{backgroundColor:Oe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Oe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Oe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Oe.color.border,marginHorizontal:4},subtitleText:{color:Oe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Oe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Oe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Oe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Oe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Tc,lineHeight:20}});E();ft();Jt();import{isDevToolsStorageKey as Rc}from"@buoy-gg/shared-ui/web";import{useState as yn,useEffect as Bc,useCallback as Vc,useRef as Ac}from"react";E();function Lt(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function gn(e=[]){let[t,r]=yn([]),[o,n]=yn(true),[a,i]=yn(null),y=JSON.stringify(e),d=Ac(e);d.current=e;let g=Vc(async()=>{let c=d.current;n(true),i(null);try{let p=(await oe.getAllKeys()).filter(f=>!Rc(f));if(!p||p.length===0){r([]),n(false);return}let m=await io(p),x=[];m.forEach(([f,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=c.find(R=>Lt(R,"async")?typeof R=="string"?R===f:R.key===f:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:f,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),c.forEach(f=>{if(!Lt(f,"async"))return;let b=typeof f=="string"?f:f.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof f=="object"&&f.expectedValue!==void 0&&{expectedValue:f.expectedValue},...typeof f=="object"&&f.expectedType!==void 0&&{expectedType:f.expectedType},...typeof f=="object"&&f.description!==void 0&&{description:f.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[y]);return Bc(()=>{g()},[g]),{storageKeys:t,isLoading:o,error:a,refresh:g}}E();ao();import{isDevToolsStorageKey as Dc,appStorageEvent as Mc}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as zc}from"@buoy-gg/shared-ui/web/utils";var pn=new Set,fo,Ta=false,Kc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Ia=e=>Dc(e)||[...Kc].some(t=>e.startsWith(t));function Ea(e){let t=Mc(e);if(t){e=t;for(let r of[...pn])try{r(e)}catch{}}}async function Lc(){if(!(fo||typeof window>"u")){if(Dr()){fo=Yi(e=>{Ta||Ea(e)});return}fo=zc(e=>{if(Ta||e.area!=="localStorage"||e.key!==void 0&&Ia(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!Ia(n))),Ea({action:r,data:o,timestamp:new Date})})}}function Ra(e){return pn.add(e),()=>{pn.delete(e)}}function Pc(){return!!fo}E();import{isDevToolsStorageKey as Ba}from"@buoy-gg/shared-ui/web";import{useState as pr,useEffect as Va,useCallback as Aa,useRef as Da}from"react";function Oc(e,t,r=[]){let[o,n]=pr([]),[a,i]=pr(true),[y,d]=pr(null),g=JSON.stringify(r),c=Da(r);c.current=r;let p=Aa(()=>{let m=c.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys().filter(b=>!Ba(b));if(!x||x.length===0){let b=m.filter(S=>Lt(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,R=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:R}});n(b),i(false);return}let f=[];x.forEach(b=>{let{value:S,type:w}=kt(e,b),T=m.find(D=>Lt(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Jo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let R={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};f.push(R)}),m.forEach(b=>{if(!Lt(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;f.some(w=>w.key===S)||f.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(f)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,g]);return Va(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:y,refresh:p}}function Ma(e,t=[]){let[r,o]=pr([]),[n,a]=pr(true),[i,y]=pr(null),d=JSON.stringify(t),g=Da(t);g.current=t;let c=Aa(()=>{let p=g.current;a(true),y(null);try{let m=[];e.forEach(({instance:x,id:f})=>{let b=x.getAllKeys().filter(S=>!Ba(S));!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=kt(x,S),I=p.find(C=>Lt(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),R="optional_present";I&&(w===void 0?R="required_missing":typeof I=="object"&&I.expectedValue!==void 0?R=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?R=Jo(T,I.expectedType)?"required_present":"required_wrong_type":R="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:f,status:R,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};m.push(D)})}),p.forEach(x=>{if(!Lt(x,"mmkv"))return;let f=typeof x=="string"?x:x.key;if(!m.some(b=>b.key===f)){let b=e[0]?.id||"mmkv.default";m.push({key:f,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(m)}catch(m){y(m instanceof Error?m:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return Va(()=>{c()},[c]),{storageKeys:r,isLoading:n,error:i,refresh:c}}E();import{isDevToolsStorageKey as Fc}from"@buoy-gg/shared-ui/web";import{useState as mn,useEffect as Wc,useCallback as za,useRef as ho}from"react";var _c="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",$c=3e3;function Ka(e){return JSON.stringify(e)}function Nc(e=[],t={}){let{pollMs:r=$c}=t,o=ho(e);o.current=e;let n=JSON.stringify(e),[a,i]=mn([]),[y,d]=mn(true),[g,c]=mn(null),p=ho(Ka([])),m=ho(false),x=ho(false),f=za(S=>{let w=Ka(S);w!==p.current&&(p.current=w,i(S))},[]),b=za(async()=>{if(!x.current){x.current=true;try{let S=ee.getModule(),w=ee.getAll().filter(({key:C})=>!Fc(C)),T=o.current.filter(C=>Lt(C,"secure")),I=C=>T.find(B=>(typeof B=="string"?B:B.key)===C);if(!S||w.length===0&&T.length===0){f([]),m.current=true,d(false);return}m.current||d(true),c(null);let R=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(B=>B.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let B=I(C.key),Q=typeof B=="object"?B:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??C.description;if(C.options.requireAuthentication){R.push({key:C.key,value:_c,storageType:"secure",status:B?"required_present":"optional_present",category:B?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let q=null;try{q=await S.getItemAsync(C.key,C.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,Ue=Q.expectedType.toLowerCase();te=se===Ue||Ue==="string"&&typeof q=="string"?"required_present":"required_wrong_type"}else te="required_present";R.push({key:C.key,value:q===null?void 0:ue,storageType:"secure",status:te,category:B?"required":"optional",...Se&&{description:Se},...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}})}f(R)}catch(S){c(S instanceof Error?S:new Error("Failed to read SecureStore")),f([])}finally{m.current=true,x.current=false,d(false)}}},[f,n]);return Wc(()=>{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:g,refresh:b}}E();import{isDevToolsStorageKey as fn}from"@buoy-gg/shared-ui/web";import{useState as bo,useEffect as vo}from"react";function hn(e=false){let[t,r]=bo([]),[o,n]=bo(true),a=()=>{n(true);try{let i=Pe.getAll().filter(({id:y})=>!fn(y)).map(y=>{let{instance:d,id:g,encrypted:c,readOnly:p}=y,m=d.getAllKeys().filter(x=>!fn(x))?.length||0;return{id:g,instance:d,encrypted:c,readOnly:p,keyCount:m,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return vo(()=>{a()},[]),vo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function La(e){let[t,r]=bo(null);return vo(()=>{if(!Pe){r(null);return}let o=Pe.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!fn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function Hc(e){let[t,r]=bo(false);return vo(()=>{if(!Pe){r(false);return}r(Pe.has(e))},[e]),t}E();import{useEffect as qc,useRef as Pa}from"react";import{Check as jc,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as mr,jsxs as Uc}from"react/jsx-runtime";var Gc=2600,Oa=180;function Jc({onDone:e}){let t=Pa(new Yt.Value(0)).current,r=Pa(e);return r.current=e,qc(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:Oa,easing:Lr.out(Lr.quad),useNativeDriver:true}),Yt.delay(Gc),Yt.timing(t,{toValue:0,duration:Oa,easing:Lr.in(Lr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),mr(Yt.View,{pointerEvents:"box-none",style:[fr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Uc(L,{activeOpacity:.85,onPress:()=>r.current(),style:fr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[mr(l,{style:fr.tick,children:mr(jc,{size:10,color:Xt.semantic.success})}),mr(u,{style:fr.saved,children:"Saved"}),mr(l,{style:fr.divider}),mr(u,{style:fr.detail,children:"applies on next launch"})]})})}var fr=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor: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 Yc,useEffect as Qc}from"react";ft();import{Trash2 as So,CopyButton as Zc,SquareDashed as Xc,X as ed,ProUpgradeModal as td,monoFont as rd}from"@buoy-gg/shared-ui/web";import{macOSColors as Fa,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as od}from"@buoy-gg/license/web";import{jsx as Ne,jsxs as Wa}from"react/jsx-runtime";function nd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[y,d]=Yc(false),g=od();Qc(()=>{y&&g&&d(false)},[y,g]);let c=()=>{if(!g){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}`)}}}])},p=(R,D)=>{if(!g){d(true);return}Ie.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let C=t.find(B=>B.id===R);C&&(C.instance.clearAll(),o?.())}catch(C){Ie.alert("Error",`Failed: ${C}`)}}}])},m=()=>{if(!g){d(true);return}Ie.alert(`Clear All ${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}`)}}}])},x=()=>{if(!g){d(true);return}Ie.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},f=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=f&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Wa(l,{style:bt.container,children:[a&&Ne(L,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Wa(l,{style:bt.selectModeActiveContainer,children:[Ne(ed,{size:14,color:at.color.accent}),i>0&&Ne(u,{style:bt.selectedCountText,children:i})]}):Ne(Xc,{size:16,color:at.color.textSecondary})}),!n&&Ne(Zc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:Fa.semantic.success,error:Fa.semantic.error}}),!n&&S&&Ne(L,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&w&&Ne(L,{onPress:c,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ae.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&I&&Ne(L,{onPress:m,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ae.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&Ne(L,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ae.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),Ne(td,{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:rd}});E();import{useState as ad,useEffect as id}from"react";import{Trash2 as ld,CopyButton as sd,CheckSquare as cd,EyeOff as dd,ProUpgradeModal as ud,monoFont as yd}from"@buoy-gg/shared-ui/web";import{macOSColors as _a,night as He}from"@buoy-gg/shared-ui/web";import{useIsPro as gd}from"@buoy-gg/license/web";E();Jt();function pd(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function $a(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await sr(r.map(a=>a.key));for(let a of n)await 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(g=>g.id===i);d&&y.forEach(g=>pd(d.instance,g))})}}import{jsx as xt,jsxs as Hr}from"react/jsx-runtime";function md({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[y,d]=ad(false),g=gd();id(()=>{y&&g&&d(false)},[y,g]);let c=e.length,p=c===i&&i>0,m=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:c,keys:b,timestamp:new Date().toISOString()}},x=()=>{c!==0&&o?.(e)},f=()=>{if(c!==0){if(!g){d(true);return}Ie.alert("Delete Selected Keys",`Delete ${c} selected key${c>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await $a(e,t),r?.()}catch(b){Ie.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return c===0?null:Hr(l,{style:vt.container,children:[Hr(l,{style:vt.leftSection,children:[Hr(L,{style:vt.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(cd,{size:14,color:p?He.color.accent:He.color.textSecondary}),xt(u,{style:vt.selectAllText,children:p?"Deselect All":"Select All"})]}),xt(l,{style:vt.countBadge,children:Hr(u,{style:vt.countText,children:[c," selected"]})})]}),Hr(l,{style:vt.actionsSection,children:[xt(sd,{value:m(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:He.color.accent,success:_a.semantic.success,error:_a.semantic.error}}),o&&xt(L,{style:vt.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(dd,{size:14,color:He.color.warning})}),xt(L,{style:vt.actionButton,onPress:f,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(ld,{size:14,color:He.color.danger})})]}),xt(ud,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var vt=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:He.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:He.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:He.color.surface,borderRadius:6,borderWidth:1,borderColor:He.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:He.color.textSecondary},countBadge:{backgroundColor:He.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:He.color.accent,fontFamily:yd},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:He.color.surface,borderWidth:1,borderColor:He.color.border}});E();var bn=new Set;function fd(e){return bn.add(e),()=>{bn.delete(e)}}function hd(){bn.forEach(e=>{try{e()}catch{}})}E();ft();function vn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(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 Na(e,t){if(e.storageType==="mmkv"){let r=Ua(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(qa(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function bd(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 Ha(e,t,r=[]){let o=vn(e,r);if(o)throw new Error(o);let n=Na(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,ja(e,t));return}case"secure":{await ee.setValue(e.key,ja(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,vd(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function qa(e){return e!==null&&typeof e=="object"}function ja(e,t){return qa(e.value)?JSON.stringify(JSON.parse(t)):t}function Ua(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function vd(e,t){switch(Ua(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as hr,macOSColors as wo,night as F,HardDrive as Ga}from"@buoy-gg/shared-ui/web";import{useIsPro as Sd}from"@buoy-gg/license/web";import{Fragment as wd,jsx as H,jsxs as Ee}from"react/jsx-runtime";var Ja=[wo.semantic.info,wo.semantic.success,wo.semantic.warning,wo.semantic.debug,"#FF6B9D","#00D9FF"];function br(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ja[t%Ja.length]}var gg=Os["storage.keys"].free;function kd({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let C=Sd(),B=aa("storage.keys"),Q=aa("storage.mmkvInstances"),[ve,Se]=Qt(false);dr(()=>{ve&&C&&Se(false)},[ve,C]);let[q,ue]=Qt("all"),te=p!=null&&m!=null,se=te?p:q,Ue=te?m:ue,[Ge,wt]=Qt("all"),Rt=S!=null&&w!=null,ye=Rt?S:Ge,or=Rt?w:wt,[re,_t]=Qt(null),Je=tn(null),kr=tn(0),ne=tn(new Map),gt=Xe((s,h)=>{h?ne.current.set(s,h):ne.current.delete(s)},[]),[$t,Cr]=Qt(0),[Nt,xr]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=hn(false),{storageKeys:Jr,isLoading:Yr,error:Qr,refresh:Ht}=gn(e),Lo=_e(()=>xe.map(s=>({instance:s.instance,id:s.id})),[xe]),{storageKeys:Tr,isLoading:Po,error:Ir,refresh:ar}=Ma(Lo,e),Oo=_e(()=>re?Tr.filter(s=>s.instanceId===re):Tr,[Tr,re]),{storageKeys:qt,isLoading:Zr,error:Fo,refresh:Xr}=Nc(e),N=_e(()=>[...Jr,...Oo,...qt].filter(s=>!ze(s.key)),[Jr,Oo,qt]),ke=_e(()=>{if(!I)return null;let s=ln(I);return N.find(h=>ln(h)===s)??I},[I,N]),Wo=Yr||Po||Zr,eo=Qr||Ir||Fo,Te=Xe(()=>{Ht(),ar(),Xr()},[Ht,ar,Xr]),tt=Xe(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),_o=Xe(()=>{xr(s=>(s&&Bt(new Set),!s))},[]),rt=Xe((s,h)=>{let U=tt(s);Bt(Z=>{let Qe=new Set(Z);return h?Qe.add(U):Qe.delete(U),Qe})},[tt]),$o=Xe(()=>{Bt(new Set),xr(false),Te()},[Te]),Er=Xe(s=>{s.forEach(h=>n?.(h.key)),Bt(new Set),xr(false)},[n]),jt=Xe(async(s,h)=>{if(!C)throw Se(true),new Error("Editing storage values is a Pro feature.");await Ha(s,h,xe),Te(),Cr(U=>U+1)},[C,xe,Te]),No=Xe(s=>{jt(s,JSON.stringify(!s.value)).catch(h=>{Ie.alert("Couldn't save",h instanceof Error?h.message:String(h))})},[jt]),to=Xe((s,h)=>{if(!C){Se(true);return}Ie.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await $a([s],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),h?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,xe,Te]),Rr=Xe(s=>vn(s,xe),[xe]),Ho=_e(()=>{let s=N,h={valid:s.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:s.filter(G=>G.status==="required_missing").length,issues:s.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:s.length},U=s.filter(G=>G.storageType==="async"),Z=s.filter(G=>G.storageType==="mmkv"),Qe=s.filter(G=>G.storageType==="secure");return{summary:{valid:h.valid,missing:h.missing,issues:h.issues,total:h.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:Z.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Qe.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);dr(()=>{i&&(i.current=N)},[N,i]),dr(()=>{let s,h=Ra(U=>{clearTimeout(s),s=setTimeout(()=>{Ht()},100)});return()=>{clearTimeout(s),h()}},[Ht]),dr(()=>{let s,h=fd(()=>{clearTimeout(s),s=setTimeout(Te,100)});return()=>{clearTimeout(s),h()}},[Te]),dr(()=>{let s,h=Hn(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(s),h()}},[ar,re]);let Ut=_e(()=>{let s=N,h=s.filter(Z=>!ze(Z.key)),U=s.filter(Z=>ze(Z.key));return{totalCount:s.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:s.filter(Z=>Z.storageType==="mmkv").length,asyncCount:s.filter(Z=>Z.storageType==="async").length,secureCount:s.filter(Z=>Z.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let s=N.filter(V=>!ze(V.key));ye!=="all"&&(s=s.filter(V=>V.storageType===ye));let h=s.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=s.filter(V=>V.status==="required_missing").length,Z=s.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Qe=0,G=0,Be=0,Vt=0;return se==="all"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_present"||V.status==="optional_present")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_present"||V.status==="optional_present")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_present"||V.status==="optional_present")).length,Vt=Qe+G+Be):se==="missing"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&V.status==="required_missing").length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&V.status==="required_missing").length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&V.status==="required_missing").length,Vt=Qe+G+Be):se==="issues"&&(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Vt=Qe+G+Be),{validCount:h,missingCount:U,issuesCount:Z,asyncCount:Qe,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);dr(()=>{x?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[x,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((s,h)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[h.status]||999)}),[N]),Kn=_e(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),Le=_e(()=>{let s=ir;if(c&&c.size>0&&(s=s.filter(h=>c.has(h.storageType))),s=s.filter(h=>!Array.from(r).some(U=>h.key.includes(U))),a){let h=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(h))}switch(se){case"all":s=s.filter(h=>h.status==="required_present"||h.status==="optional_present");break;case"missing":s=s.filter(h=>h.status==="required_missing");break;case"issues":s=s.filter(h=>h.status==="required_wrong_type"||h.status==="required_wrong_value");break}if(ye!=="all"&&(s=s.filter(h=>h.storageType===ye)),f&&f.size>0){let h=s.filter(Z=>f.has(Z.key)),U=s.filter(Z=>!f.has(Z.key));s=[...h,...U]}return s},[ir,se,ye,r,a,re,c,f]),v=_e(()=>Le.slice(0,B),[Le,B]),k=_e(()=>Math.max(0,Le.length-B),[Le.length,B]),z=k>0,j=_e(()=>{let s=Le.filter(h=>!ze(h.key));return{totalCount:Le.length,requiredCount:s.filter(h=>h.category==="required").length,missingCount:s.filter(h=>h.status==="required_missing").length,wrongValueCount:s.filter(h=>h.status==="required_wrong_value").length,wrongTypeCount:s.filter(h=>h.status==="required_wrong_type").length,presentRequiredCount:s.filter(h=>h.status==="required_present").length,optionalCount:s.filter(h=>h.category==="optional").length,mmkvCount:Le.filter(h=>h.storageType==="mmkv").length,asyncCount:Le.filter(h=>h.storageType==="async").length,secureCount:Le.filter(h=>h.storageType==="secure").length,devToolsCount:Le.filter(h=>ze(h.key)).length}},[Le]),Ye=_e(()=>v.filter(s=>nr.has(tt(s))),[v,nr,tt]),Br=Xe(()=>{let s=new Set(v.map(tt));Bt(s)},[v,tt]),Vr=Xe(()=>{Bt(new Set)},[]),Ar=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Di=Ar>=90?"OPTIMAL":Ar>=70?"WARNING":"CRITICAL",Mi=Ar>=90?hr.success:Ar>=70?hr.warning:hr.error;if(ke)return H(l,{style:O.root,children:H(wc,{storageKey:ke,editBlockedReason:Rr(ke),eventCount:y?.[ke.key],onSave:s=>jt(ke,s),onViewHistory:g?()=>g(ke.key):void 0,onDeleteKey:s=>to(s,()=>D?.()),onHideKey:s=>{Er([s]),D?.()},isPinned:f?.has(ke.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Wo&&N.length===0)return Ee(l,{style:O.emptyState,children:[H(ia,{size:48,color:F.color.textTertiary}),H(u,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(eo)return Ee(l,{style:O.emptyState,children:[H(ia,{size:48,color:hr.error}),H(u,{style:[O.emptyTitle,{color:hr.error}],children:"Error loading storage"}),H(u,{style:O.emptySubtitle,children:eo.message})]});let zi=Ee(wd,{children:[ye==="mmkv"&&xe.length===0&&Ee(l,{style:O.emptyMMKVState,children:[H(u,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),H(u,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),H(u,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
2
2
|
|
|
3
3
|
const storage = createMMKV();
|
|
4
|
-
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(l,{style:O.instanceNavbar,children:[Ee(l,{style:O.instanceNavbarHeader,children:[q(u,{style:O.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&q(la,{style:{transform:[{scale:.85}]}})]}),Ee(Or,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||xe.length===1)&&Ee(L,{onPress:()=>_t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ne.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[q(Ua,{size:12,color:re===null?F.color.text:F.color.textSecondary}),q(u,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),q(l,{style:O.instanceNavbarBadge,children:q(u,{style:O.instanceNavbarBadgeText,children:xe.reduce((s,h)=>s+h.keyCount,0)})})]}),xe.map((s,h)=>{let U=h>=Q;return Ee(L,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?Se(true):_t(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?F.color.border:br(s.id)+"40",backgroundColor:s.id===re?br(s.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[q(Ua,{size:12,color:s.id===re?br(s.id):F.color.textSecondary}),q(u,{style:[O.instanceNavbarButtonText,s.id===re&&{color:br(s.id),fontWeight:"700"}],children:s.id}),q(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:br(s.id)+"30"}],children:q(u,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:br(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),zi=q(rd,{copyValue:qo,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:_o,selectedCount:nr.size}),Ki=Nt?q(gd,{selectedKeys:Ye,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:$o,onHideKeys:Er,onSelectAll:Br,onClearSelection:Vr,totalVisibleKeys:v.length}):null,Li=z?Ee(L,{style:O.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(l,{style:O.limitBannerContent,children:[Ee(l,{style:O.limitBannerLeft,children:[q(Os,{size:16,color:F.color.accent}),q(u,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),q(la,{})]}),q(u,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,Pi=(()=>{let s=N.some(U=>!ze(U.key)),h;return a||!s?(h=_s({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(h={...h,message:"No keys match. Clear the search to see them."})):se==="missing"?h={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?h={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:h={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},q(Ws,{...h,testID:"buoy-storage-keys-empty"})})(),Oi=q(Fs,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(l,{style:O.root,children:[$t>0?q(Uc,{onDone:()=>Cr(0)},$t):null,Ee(Or,{testID:"buoy-storage-scroll",ref:Je,onScroll:s=>{kr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[q(l,{style:O.backgroundGrid}),q(Tc,{stats:Ut,tabStats:pt,healthPercentage:Ar,healthStatus:Ai,healthColor:Di,activeFilter:se,onFilterChange:Ue,activeStorageType:ye,onStorageTypeChange:or,showStatus:!ee}),Mi,Le.length>0?Ee(l,{style:O.keysSection,children:[Ee(l,{style:O.sectionHeader,children:[Ee(l,{style:O.sectionHeaderLeft,children:[Ee(u,{style:O.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),q(l,{style:O.countBadge,children:q(u,{style:O.countText,children:v.length})})]}),zi]}),Ki,q(fa,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:y,onViewHistory:g,onHideKey:s=>Er([s]),onToggleKey:No,onDeleteKey:to,editBlockedFor:Rr,pinnedKeys:f,onTogglePin:b,onRowRef:gt,onOpenKey:R}),Li]}):Pi,q(u,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Oi]})]})}var O=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...na,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...na,opacity:.006,backgroundColor:hr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:Fr,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:F.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:F.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:F.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:F.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:F.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:F.color.border},countText:{fontSize:11,fontWeight:"600",color:F.color.text,fontFamily:Fr},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:F.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:F.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:F.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:F.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:F.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:F.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Fr,color:F.color.accent,backgroundColor:F.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:F.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:F.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:F.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:F.color.textSecondary,fontFamily:Fr,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:F.color.text},instanceNavbarBadge:{backgroundColor:F.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:F.color.textSecondary,fontFamily:Fr},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:F.color.border},clearSearchText:{fontSize:13,color:F.color.text,fontWeight:"500"},limitBanner:{backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:F.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:F.color.textTertiary,fontSize:11}});import{jsx as wd}from"react/jsx-runtime";function Ja({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return wd(Sd,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as kd}from"@buoy-gg/shared-ui/web";E();import{useMemo as Cd}from"react";import{useEventStoreEvents as xd}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Td,appStorageEvent as Sn}from"@buoy-gg/shared-ui/web";function Hr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function ko(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Ya(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=ko(e);return Hr(t.value)||Hr(t.prevValue)||Hr(r)||Hr(o)}var Id=0;function Co(){return`se-${Date.now()}-${++Id}`}var Ed=class extends Td{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Sn(e);t&&super.addEvent(t)}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Pe.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:y}=kt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[y]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:y,initialScan:true},storageType:"mmkv",id:Co()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Ni(Wn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,y]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:y??void 0,initialScan:true},storageType:"async",id:Co()})}}}catch{}}async startCapturing(){Kc()||await zc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=Ea(e=>{let t={...e,storageType:"async",id:Co()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=qn(e=>{let t={...e,storageType:"mmkv",id:Co()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)Ya(o)||t.set(o.id,o);let r=e.map(Sn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!Ya(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...ko(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Sn(e);if(!t)return;e=t;let r=this.events.findIndex(a=>a.id===e.id);if(r===-1)return;let o=this.events[r],n=this.events.slice();n[r]={...o,...e,timestamp:o.timestamp,data:{...o.data,...e.data}},super.replaceEvents(n)}},Pt=new Ed;function Qa(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Cd(()=>t==="all"?void 0:d=>d.filter(g=>g.storageType===t),[t]),{events:a,clearEvents:i,isActive:y}=xd(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:y}}E();ft();import{useState as xo,useCallback as ct,useMemo as Ot,useEffect as Xa,useRef as Rd}from"react";import{formatRelativeTime as To,macOSColors as Io,night as er,parseValue as Eo,devToolsStorageKeys as Za,GitBranch as Bd,EventStepperFooter as Vd,EventHistoryViewer as Ad,copyToClipboard as Dd,ProUpgradeModal as Md,monoFont as ei}from"@buoy-gg/shared-ui/web";import{useIsPro as zd}from"@buoy-gg/license/web";E();import{computeLineDiff as wg,DiffType as kg,ABSENT_VALUE as Kd,isAbsent as Cg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Ld}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as Pd,gitClassicTheme as Ig,devToolsDefaultTheme as Eg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ti}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as Od}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as ri}from"react/jsx-runtime";function Fd({oldValue:e,newValue:t,scrollEnabled:r=true}){return ri(l,{style:r?oi.container:oi.containerInline,children:ri(Od,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var oi=pe.create({container:{flex:1,backgroundColor:ti.color.bg},containerInline:{backgroundColor:ti.color.bg}});E();function wn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}E();import{night as Re,Lock as Wd,monoFont as _d}from"@buoy-gg/shared-ui/web";import{jsx as kn,jsxs as $d}from"react/jsx-runtime";var Nd={copy:{color:Re.color.accent,backgroundColor:Re.color.accentSoft,borderColor:Re.color.accentBorderStrong,textColor:Re.color.accent},jump:{color:Re.color.warning,backgroundColor:Re.color.warningSoft,borderColor:Re.color.warning+"40",textColor:Re.color.warning},undo:{color:Re.color.info,backgroundColor:Re.color.infoSoft,borderColor:Re.color.info+"40",textColor:Re.color.info}};function Cn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=Nd[r],i=o||n;return $d(L,{disabled:i,onPress:e,style:[Ro.button,{backgroundColor:i?Re.color.fill:a.backgroundColor,borderColor:i?Re.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?kn(Wd,{size:10,color:Re.color.textTertiary,style:Ro.lockIcon}):kn(l,{style:[Ro.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),kn(u,{style:[Ro.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Ro=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Re.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:_d,height:12}});E();ft();Jt();import{isDevToolsStorageKey as qd}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function xn(e){let{action:t,data:r}=e;if(Ft(r?.prevValue)||Ft(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await zr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Tn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let y=i.data;if(Ft(y?.value)||Ft(y?.prevValue)||Ft(y?.pairs)||Ft(y?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)jd(e[i],r);let o=new Set;for(let i of e)Hd(i,o);let n=[],a=[];for(let i of o){if(qd(i))continue;let y=r.get(i);y==null?a.push(i):n.push([i,y])}a.length>0&&await sr(a),n.length>0&&await zr(n)}function Hd(e,t){let{data:r}=e;if(r){if(r.key&&t.add(r.key),r.keys)for(let o of r.keys)t.add(o);if(r.pairs)for(let[o]of r.pairs)t.add(o);if(r.prevPairs)for(let[o]of r.prevPairs)t.add(o)}}function jd(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),y={...a,...i};t.set(o.key,JSON.stringify(y))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let y=JSON.parse(i),d=JSON.parse(a),g={...y,...d};t.set(n,JSON.stringify(g))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function In(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ft(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ft(r.prevPairs);default:return false}}import{Fragment as Ud,jsx as He,jsxs as ni}from"react/jsx-runtime";var vr=-1,Bo={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Vo(e){switch(e){case"setItem":case"multiSet":return Io.semantic.success;case"removeItem":case"multiRemove":case"clear":return Io.semantic.error;case"mergeItem":case"multiMerge":return Io.semantic.info;default:return Io.text.muted}}function ai(e){let t=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),n=String(e.getMilliseconds()).padStart(3,"0");return`${t}:${r}:${o}.${n}`}var Gd={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},Jd=[];function En({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=zd(),[a,i]=xo(false),[y,d]=xo("split"),[g,c]=xo(Math.max(vr,t-1)),[p,m]=xo(t),x=Rd(false),f=Ot(()=>e.events.sort((ae,gt)=>ae.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),b=f.length;Xa(()=>{if(x.current)return;(async()=>{try{let ae=await oe.getItem(Za.storage.diffViewerMode());(ae==="split"||ae==="tree")&&d(ae),x.current=true}catch{}})()},[]),Xa(()=>{let ae=Math.min(b-1,Math.max(0,t)),gt=Math.max(vr,Math.min(ae-1,t-1));c(gt),m(ae)},[t,b]);let S=ct(async ae=>{d(ae);try{await oe.setItem(Za.storage.diffViewerMode(),ae)}catch{}},[]),w=f[t],T=w?.action,I=g===vr,R=I?void 0:f[Math.max(0,Math.min(b-1,g))],D=f[Math.max(0,Math.min(b-1,p))],C=Ot(()=>{let ae=D?.data;return ae?.initialScan?"scanned":ae?.prevValue===null||ae?.prevValue===void 0?"absent":"prior"},[D]),B=Ot(()=>C==="absent"?Kd:C==="scanned"?Eo(D?.data?.value):Eo(D?.data?.prevValue),[C,D]),Q=Ot(()=>I?{index:vr,label:Bo[C].label,timestamp:Bo[C].timestamp,relativeTime:Bo[C].relativeTime,badge:He(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:He(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Bo[C].badge})})}:{index:g,label:`#${g+1} / ${b}`,timestamp:R?ai(R.timestamp):"",relativeTime:R?To(R.timestamp):"",badge:R?He(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(R.action)}20`}],children:He(u,{style:[tr.actionTextSmall,{color:Vo(R.action)}],children:wn(R.action)})}):void 0},[g,R,b,I,C]),ve=Ot(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?ai(D.timestamp):"",relativeTime:D?To(D.timestamp):"",badge:D?He(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(D.action)}20`}],children:He(u,{style:[tr.actionTextSmall,{color:Vo(D.action)}],children:wn(D.action)})}):void 0}),[p,D,b]),Se=Ot(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),H=ct(()=>{g>vr&&c(g-1)},[g]),ue=ct(()=>{g<p-1&&c(g+1)},[g,p]),ee=ct(()=>{p>g+1&&m(p-1)},[p,g]),se=ct(()=>{p<b-1&&m(p+1)},[p,b]),Ue=Ot(()=>I?B:Eo(R?.data?.value??null),[I,B,R]),Ge=Ot(()=>Eo(D?.data?.value),[D]),wt=ct(()=>y==="split"?He(Ld,{oldValue:Ue,newValue:Ge,differences:Jd,theme:Pd.devToolsDefault,options:Gd,showThemeName:false,scrollEnabled:false}):He(Fd,{oldValue:Ue,newValue:Ge,scrollEnabled:false}),[Ue,Ge,y]),Rt=ct(()=>{r(Math.max(0,t-1))},[t,r]),ye=ct(()=>{r(Math.min(b-1,t+1))},[t,b,r]),or=ct(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await xn(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ae=f.filter($t=>$t.storageType!=="mmkv"),gt=ae.findIndex($t=>$t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Tn(ae,gt)}catch{}},[w,f,n]),_t=ct(async()=>{if(!w)return;let ae={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await Dd(ae)},[w]),Je=w?.storageType!=="mmkv",kr=Je&&w&&In(w);return ni(Ud,{children:[Je&&ni(l,{style:tr.actionButtonsContainer,children:[He(Cn,{type:"undo",text:"UNDO",onPress:or,disabled:!kr,locked:!n}),He(Cn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),He(Cn,{type:"copy",text:"COPY",onPress:_t})]}),He(Ad,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Bd,diffModeTabs:Se,activeDiffMode:y,onDiffModeChange:S,renderDiffContent:wt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:H,onLeftNext:ue,onRightPrevious:ee,onRightNext:se,canLeftPrevious:g>vr,canLeftNext:g<p-1,canRightPrevious:p>g+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:To(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),He(Md,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function Rn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,y)=>i.timestamp.getTime()-y.timestamp.getTime()),a=n.length;return He(Vd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:To(n[t]?.timestamp),applySafeAreaInset:o})}var tr=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:er.color.surface,borderBottomWidth:1,borderBottomColor:er.color.border},valueBox:{backgroundColor:er.color.bg,borderRadius:6,borderWidth:1,borderColor:er.color.border,padding:8},valueText:{fontSize:12,color:er.color.text,fontFamily:ei,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:ei}});E();import{Filter as ii,DynamicFilterView as Yd,Database as Qd,HardDrive as Xd,Shield as Zd,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as Sr}from"react/jsx-runtime";function eu({ignoredPatterns:e,onTogglePattern:t,onAddPattern:r,availableKeys:o=[],enabledStorageTypes:n,onToggleStorageType:a}){let i={addFilterSection:{enabled:true,placeholder:"Enter key pattern to hide...",title:"KEY FILTERS",icon:ii},availableItemsSection:{enabled:true,title:"AVAILABLE EVENT KEYS",emptyMessage:"No storage event keys available. Events will appear here once captured.",items:o},howItWorksSection:{enabled:true,title:"HOW EVENT FILTERS WORK",description:"Patterns hide matching storage keys from the event list. Storage type toggles control which storage backends are monitored.",examples:["\u2022 react_buoy \u2192 hides keys containing react_buoy","\u2022 @temp \u2192 hides @temp_user, @temp_data","\u2022 redux \u2192 hides redux-persist:root",`\u2022 ${ne.asyncFull}: show or hide captured events`,`\u2022 ${ne.mmkv}: show or hide captured events`],icon:ii},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return Sr(l,{style:et.container,children:[Sr(l,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),Sr(l,{style:et.storageTypeButtons,children:[Sr(L,{style:[et.storageTypeButton,n.has("async")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(Qd,{size:16,color:n.has("async")?Tt.semantic.warning:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("async")&&{color:Tt.semantic.warning}],children:ne.asyncFull})]}),Sr(L,{style:[et.storageTypeButton,n.has("mmkv")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(Xd,{size:16,color:n.has("mmkv")?Tt.semantic.info:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("mmkv")&&{color:Tt.semantic.info}],children:ne.mmkv})]}),ne.hasSecure&&Sr(L,{style:[et.storageTypeButton,n.has("secure")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Wt(Zd,{size:16,color:n.has("secure")?Tt.semantic.success:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("secure")&&{color:Tt.semantic.success}],children:"Secure Storage"})]})]})]}),Wt(Yd,{...i})]})}var et=pe.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:It.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:It.color.textSecondary,letterSpacing:.8,marginBottom:12},storageTypeButtons:{flexDirection:"row",gap:8},storageTypeButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:10,paddingHorizontal:12,backgroundColor:It.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:It.color.border},storageTypeButtonActive:{backgroundColor:It.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:It.color.textTertiary}});E();import{memo as tu}from"react";import{RelativeTime as ru,macOSColors as jr,parseValue as ou,CompactRow as nu}from"@buoy-gg/shared-ui/web";import{jsx as li}from"react/jsx-runtime";function au(e){let t=ou(e);return t===null?"null":t===void 0?"undefined":Array.isArray(t)?"array":typeof t=="boolean"?"boolean":typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="object"?"object":"undefined"}function iu(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return jr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return jr.semantic.error;case"mergeItem":case"multiMerge":return jr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return jr.semantic.warning;default:return jr.text.muted}}function lu(e,t){return`${Array.from(e).map(r=>r==="async"?ne.async:ne.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Bn=tu(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=iu(e.lastAction),i=wn(e.lastAction),y=e.totalOperations??1;return li(nu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:lu(e.storageTypes,y),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:li(ru,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as su}from"@buoy-gg/license/web";import{Fragment as si,jsx as M,jsxs as dt}from"react/jsx-runtime";var $g=Ks["storage.events"].free,Vn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},cu={storage:Vn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},du={storage:Vn,parse:e=>e==="true",serialize:e=>e.toString()},ci={storage:Vn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},uu={...ci,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function An({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:y,onRefresh:d,onEventSelect:g}){let c=su(),p=zs("storage.events"),[m,x]=uo(cr.storage.activeTab(),"browser",cu);Xo(()=>{y?.(m)},[m,y]);let[f,b]=ot(""),[S,w]=ot(null),[T,I]=ot(false),[R,D]=uo(cr.storage.isMonitoring(),true,du),{events:C,clearEvents:B,isCapturing:Q}=Qa({enabled:R}),[ve,Se]=ot(null),[H,ue]=ot(null),[ee,se]=ot(null),[Ue,Ge]=ot(0),[wt,Rt]=ot(false),[ye,or]=uo(cr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),uu),[re,_t]=ot("all"),[Je,kr]=ot(new Set(["async","mmkv","secure"])),[ae,gt]=uo(cr.storage.pinnedKeys(),new Set,ci),$t=Jn(null),Cr=R&&Q,[Nt,xr]=ot("bottomSheet"),nr=De(v=>{xr(v)},[]),Bt=De(()=>{D(v=>!v)},[]),xe=De(()=>{B(),Se(null),Ge(0)},[B]),Jr=De(v=>{ue(v),se(null)},[]),Yr=De(()=>{ue(null),se(null)},[]),Qr=De(v=>{or(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),qt=De(v=>{or(k=>new Set([...k,v]))},[]),Lo=De(v=>{gt(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Tr=De(()=>{Rt(!wt)},[wt]),Po=De(v=>{kr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ir=Jn([]),ar=De(()=>{let v=Ir.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=co(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=co(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=co(z.value),k),{})}},[]),Oo=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await so()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await ol()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),Ht=v=>{let k=Ts(v);return k===null?"null":k===void 0?"undefined":Array.isArray(k)?"array":typeof k=="boolean"?"boolean":typeof k=="number"?"number":typeof k=="string"?"string":typeof k=="object"?"object":"undefined"},[Xr,Fo]=ot([]);Xo(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();Fo([...v].sort())}catch{}})()},[e]);let Zr=st(()=>{let v=new Set(Xr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Xr]),N=st(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Je.has(k.storageType)||Array.from(ye).some(Ye=>z.includes(Ye)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=Ht(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:Ht(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ye,Je]),ke=st(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),Wo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),eo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Te=st(()=>H&&N.find(v=>v.key===H)||null,[H,N]);Xo(()=>{if(!g)return;let v=ke||(ee!==null?Te:null),k=ke?Ue:ee;if(!v||k==null)return;let z=[...v.events].sort((Br,Vr)=>Br.timestamp.getTime()-Vr.timestamp.getTime()),j=z[k],Ye=z[k-1];j&&g(j),Ye&&g(Ye)},[g,ke,Ue,Te,ee]);let tt=st(()=>C.filter(v=>{if(!v.data?.key||!Je.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[C,ye,Je]),_o=st(()=>ka(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(v=>v.storageType===re),[tt,re]),$o=De(()=>rt.map(v=>({key:v.data?.key,action:v.action,value:co(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[rt]),Er=st(()=>rt.slice(0,p),[rt,p]),jt=st(()=>Math.max(0,rt.length-p),[rt.length,p]),No=.8,to=De(v=>v.id,[]),Rr=De(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Ge(z>=0?z:0)},[N]),qo=De(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:Ht(v.data?.value)};return M(Bn,{data:k,onPress:()=>Rr(v),testID:`buoy-storage-event-${v.id}`})},[Rr]);if(!e)return null;let Ut=n?cr.modal.root():cr.storage.modal(),pt=()=>{if(wt)return M(eu,{ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:qt,availableKeys:Zr,enabledStorageTypes:Je,onToggleStorageType:Po});if(m==="browser"){if(H&&Te){if(ee!==null)return M(l,{style:he.contentWrapper,children:M(En,{conversation:Te,selectedEventIndex:ee,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()),z=[...k].reverse();return M(Zo,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Ye=k.findIndex(Vr=>Vr.timestamp.getTime()===j.timestamp.getTime()),Br={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:Ht(j.data?.value)};return M(Bn,{data:Br,onPress:()=>se(Ye>=0?Ye:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(Ja,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:qt,searchQuery:f,storageDataRef:Ir,eventCountByKey:Wo,lastWriteByKey:eo,onViewHistory:Jr,enabledStorageTypes:Je,pinnedKeys:ae,onTogglePin:Lo,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:_t,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(l,{style:he.contentWrapper,children:M(En,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(dn,{active:re,onChange:_t,counts:_o})});if(rt.length===0){let k=re!=="all";return dt(l,{style:he.flexFill,children:[v,M(Es,{testID:"buoy-storage-events-empty",...Cr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return dt(l,{style:he.flexFill,children:[v,M(Zo,{testID:"buoy-storage-events-list",style:he.flexFill,data:Er,renderItem:qo,keyExtractor:to,onEndReachedThreshold:No,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(l,{style:he.lockedBannerContainer,children:M(kd,{featureName:`${jt} event${jt>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ir=ke&&ke.events.length>1?M(Rn,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,applySafeAreaInset:Nt==="bottomSheet"}):Te&&ee!==null&&Te.events.length>1?M(Rn,{conversation:Te,selectedEventIndex:ee,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Kn=wt?()=>Rt(false):ee!==null?()=>se(null):H?Yr:ke?()=>{Se(null),Ge(0)}:r,Le=wt?dt(Me,{children:[M(Me.Navigation,{onBack:()=>Rt(false)}),M(Me.Content,{title:"Filters"})]}):H?dt(Me,{children:[M(Me.Navigation,{onBack:ee!==null?()=>se(null):Yr}),M(Me.Content,{title:`${H} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Ge(0)}}),M(Me.Content,{title:ke.key})]}):S?dt(Me,{children:[M(Me.Navigation,{onBack:()=>w(null)}),M(Me.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):dt(Me,{children:[r&&M(Me.Navigation,{onBack:r}),M(Me.Content,{title:"",children:T?M(As,{value:f,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(xs,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:m,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),ue(null),se(null),Se(null),Ge(0),w(null)}})}),dt(Me.Actions,{children:[d&&!T?M(L,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Bs,{size:14,color:We.color.textSecondary})}):null,M(L,{onPress:Tr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Je.size<3)&&he.activeFilterButton],children:M(Rs,{size:14,color:ye.size>0||Je.size<3?We.color.accent:We.color.textSecondary})}),m==="browser"&&!T&&dt(si,{children:[M(L,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(Vs,{size:14,color:We.color.textSecondary})}),M(ra,{value:ar,disabled:Ir.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),m==="events"&&dt(si,{children:[M(ra,{value:$o,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(Ds,{isEnabled:Cr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(Ms,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(oa,{children:dt(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ls,children:Le}),pt(),ir]})}):M(oa,{children:M(Cs,{visible:e,onClose:t,onBack:Kn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Le},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function yu(e={}){return M(An,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:Is.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:We.color.buttonSurface,borderWidth:1,borderColor:We.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:We.color.accentSoft,borderColor:We.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:We.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:yo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:We.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:yo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:We.color.text,fontSize:12,fontWeight:"600",fontFamily:yo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:We.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:We.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:We.color.accent,fontFamily:yo,letterSpacing:.5},contentWrapper:{flex:1}});E();ft();Jt();import{approxJsonSize as di,isDevToolsStorageKey as ut,isOverWireBudget as ui,isJsonSerializable as gu}from"@buoy-gg/shared-ui/web";var Ao=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),pu=16*1024,Dn=1.25*1024*1024,yi=8*1024*1024;function Mn(e){return e===void 0?e:ui(e,pu)?Ao:e}function Do(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=ko(e),i=t(a.pairs),y=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&y===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:y}:{}}}}function gi(e){return e===void 0||!ui(e,yi)?e:gu(e)?{__buoyTruncated:true,note:`Exceeds the ${yi/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Ao}var pi=new WeakMap,mi=new WeakMap;function mu(e){let t=pi.get(e);if(t)return t;let r;try{let o=Do(e,Mn);r={event:o,bytes:di(o,Dn).bytes}}catch{r={event:Do(e,()=>Ao),bytes:1024}}return pi.set(e,r),r}function fu(e){let t=mi.get(e);if(t)return t;let r=Do(e,n=>n===void 0?void 0:Ao),o={event:r,bytes:di(r,Dn).bytes};return mi.set(e,o),o}function hu(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=mu(e[o]);if(r+n.bytes<=Dn)t[o]=n.event,r+=n.bytes;else{let a=fu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function fi(e){let t=Pe.get(e);if(!t)throw new Error(`No MMKV instance registered as "${e}"`);if(t.instance?.isReadOnly)throw new Error(`MMKV instance "${e}" is registered read-only`);return t.instance}var hi=[];function bu(e){hi=e}var vu={version:3,getSnapshot:()=>hu(Pt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&ut(t))})),subscribe:e=>Pt.subscribeToEvents(e),actions:{clearEvents:()=>{Pt.clearEvents()},getRequiredKeys:()=>hi,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Pt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=Do(r,gi);return{found:true,id:t,event:o}},clearAppStorage:()=>so(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Pt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!In(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await xn(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Pt.getEvents().filter(y=>y.storageType!=="mmkv").slice().reverse(),n=o.find(y=>y.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(y=>y.data?.key===n.data?.key),i=a.findIndex(y=>y.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await Tn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!ut(e)),"async.multiGet":async e=>(await io(e.keys)).filter(([t])=>!ut(t)),"async.getItem":e=>{let{key:t}=e;return ut(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>sr(e.keys),"async.multiSet":e=>zr(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Pe.getAll().filter(({id:e})=>!ut(e)).map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!ut(a)).map(a=>{let{value:i,type:y}=kt(t,a);return{key:a,value:Mn(i),valueType:y}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r||ut(r)||ut(t))return{found:false,reason:"missing instanceId/key"};let o=Pe.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=kt(o.instance,r);return{found:true,instanceId:t,key:r,value:gi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;fi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=fi(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=te.getModule();return Promise.all(te.getAll().filter(({key:t})=>!ut(t)).map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=te.getModule(),t=te.getAll().filter(({key:o})=>!ut(o)),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:Mn(i)})}return r},"secure.get":e=>{let{key:t}=e;if(ut(t))return null;let r=te.getAll().find(n=>n.key===t),o=te.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return te.setValue(t,r)},"secure.delete":e=>te.deleteValue(e.key)}};import{jsx as Su}from"react/jsx-runtime";var bi=vl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>Su(hl,{size:e}),component:An,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),wu=bl(bi,e=>(bu(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as ku,CyberpunkSectionButton as Cu}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as xu}from"@buoy-gg/shared-ui/web";import{jsx as Tu}from"react/jsx-runtime";function Iu({onPress:e}){let{storageKeys:t}=gn(),r=t.filter(n=>!xu(n.key)).length,o=r;return Tu(Cu,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:ku,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as vi,CheckCircle2 as Eu,Eye as Si,XCircle as wi,HardDrive as ki,Database as Ci,Shield as Ru,gameUIColors as Mo,macOSColors as ie,night as be,monoFont as zo}from"@buoy-gg/shared-ui/web";import{DataViewer as Bu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var xi=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Ko(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return xi[t%xi.length]}var Vu=e=>{switch(e){case"required_present":return{icon:Eu,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:vi,color:ie.semantic.error,bgColor:ie.semantic.errorBackground,borderColor:ie.semantic.error+"50",label:"MISSING",labelColor:ie.semantic.error};case"required_wrong_value":return{icon:wi,color:ie.semantic.warning,bgColor:ie.semantic.warningBackground,borderColor:ie.semantic.warning+"50",label:"WRONG S",labelColor:ie.semantic.warning};case"required_wrong_type":return{icon:wi,color:ie.semantic.info,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.info+"50",label:"WRONG TYPE",labelColor:ie.semantic.info};case"optional_present":return{icon:Si,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},Au=e=>{switch(e){case"mmkv":return ki;case"async":return Ci;case"secure":return Ru;default:return Ci}};function Du({storageKey:e,isExpanded:t,onToggle:r}){let o=Vu(e.status),n=o.icon,a=Au(e.storageType),i=e.value!==void 0&&e.value!==null,y=e.expectedValue!==void 0,d=e.expectedType!==void 0,g=ua(e.storageType),c=on(e.storageType);return Ae(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(L,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Ae(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ae(l,{style:K.cardHeaderInfo,children:[Y(u,{style:K.storageKeyText,children:e.key}),e.description?Y(u,{style:K.descriptionText,children:e.description}):null,Ae(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(u,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Ae(l,{style:[K.storageBadge,{backgroundColor:`${g}15`}],children:[Y(a,{size:10,color:g}),Y(u,{style:[K.storageText,{color:g}],children:c})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(l,{style:[K.instanceBadge,{backgroundColor:Ko(e.instanceId)+"20",borderColor:Ko(e.instanceId)+"40"}],children:[Y(ki,{size:9,color:Ko(e.instanceId)}),Y(u,{style:[K.instanceText,{color:Ko(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(u,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():Dt(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(Si,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let p=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof p=="string"||typeof p=="number"||typeof p=="boolean"?Ae(l,{style:K.simpleValueContainer,children:[Y(u,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(u,{style:K.simpleValueContent,selectable:true,children:String(p)})}),Ae(u,{style:K.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Bu,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ae(u,{style:K.typeHelperText,children:["Current type: ",Dt(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Ae(u,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ae(l,{style:K.cardBody,children:[Ae(l,{style:K.emptyValueContainer,children:[Y(vi,{size:16,color:ie.semantic.warning}),Y(u,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:zo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Mo.success,fontSize:12,fontFamily:zo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Mo.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Mo.warning+"1A"},emptyValueText:{color:Mo.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});E();import{AlertCircle as Mu,CheckCircle2 as zu,XCircle as Ti,Eye as Ku,Database as Ii,Shield as Lu}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as je}from"react/jsx-runtime";var Pu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:zu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:Mu,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Ti,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Ti,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Ku,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],Ou=[{key:"mmkv",label:ne.mmkv,description:ne.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ii},{key:"async",label:ne.asyncFull,description:ne.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ii},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Lu}];function Fu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:y,asyncCount:d,secureCount:g}=e;return t===0?je(l,{style:Z.statsContainer,children:[Ce(u,{style:Z.sectionTitle,children:"STORAGE BREAKDOWN"}),Ce(l,{style:Z.emptyState,children:Ce(u,{style:Z.emptyStateText,children:"No storage keys detected"})})]}):je(l,{style:Z.statsContainer,children:[je(l,{style:Z.breakdownSection,children:[Ce(u,{style:Z.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(l,{style:Z.breakdownList,children:Pu.map(c=>{let p=0,m=false;switch(c.key){case"valid":p=a,m=p>0;break;case"missing":p=r,m=p>0;break;case"wrongValue":p=o,m=p>0;break;case"wrongType":p=n,m=p>0;break;case"optional":p=i,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon;return Ce(l,{style:Z.breakdownItem,children:je(l,{style:Z.breakdownItemRow,children:[je(l,{style:Z.breakdownItemLeft,children:[Ce(l,{style:[Z.breakdownIcon,{backgroundColor:c.bgColor}],children:Ce(f,{size:14,color:c.color})}),je(l,{style:Z.breakdownItemInfo,children:[Ce(u,{style:Z.breakdownItemLabel,children:c.label}),Ce(u,{style:Z.breakdownItemDesc,children:c.description})]})]}),je(l,{style:Z.breakdownItemRight,children:[Ce(u,{style:[Z.breakdownCount,{color:c.textColor}],children:p}),je(u,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]}),(y>0||d>0||g>0)&&je(l,{style:Z.breakdownSection,children:[Ce(u,{style:Z.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(l,{style:Z.breakdownList,children:Ou.map(c=>{let p=0,m=false;switch(c.key){case"mmkv":p=y,m=p>0;break;case"async":p=d,m=p>0;break;case"secure":p=g,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon,b=ua(c.key);return Ce(l,{style:Z.breakdownItem,children:je(l,{style:Z.breakdownItemRow,children:[je(l,{style:Z.breakdownItemLeft,children:[Ce(l,{style:[Z.breakdownIcon,{backgroundColor:`${b}15`}],children:Ce(f,{size:14,color:b})}),je(l,{style:Z.breakdownItemInfo,children:[Ce(u,{style:Z.breakdownItemLabel,children:c.label}),Ce(u,{style:Z.breakdownItemDesc,children:c.description})]})]}),je(l,{style:Z.breakdownItemRight,children:[Ce(u,{style:[Z.breakdownCount,{color:b}],children:p}),je(u,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]})]})}var Z=pe.create({statsContainer:{marginBottom:24,backgroundColor:St.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:St.color.border},sectionTitle:{color:St.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:St.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:St.color.border},breakdownItemRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breakdownItemLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1,minWidth:0},breakdownIcon:{padding:8,borderRadius:8},breakdownItemInfo:{flex:1,minWidth:0},breakdownItemLabel:{color:St.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:St.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:St.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:St.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:St.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{Database as Wu,CyberpunkSectionButton as _u}from"@buoy-gg/shared-ui/web";import{jsx as $u}from"react/jsx-runtime";function Nu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return $u(_u,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Wu,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Ur}from"@buoy-gg/shared-ui/web";var qu=["SET","GET","MERGE","DELETE","CLEAR"],Hu={SET:Ur.semantic.info,GET:Ur.text.muted,MERGE:Ur.semantic.debug,DELETE:Ur.semantic.error,CLEAR:Ur.semantic.warning};function ju(e){return Hu[e]}function Uu(e){let t=e.action;return t==="clear"||t==="clearAll"?"CLEAR":t.startsWith("get.")?"GET":t==="removeItem"||t==="multiRemove"||t==="delete"?"DELETE":t==="mergeItem"||t==="multiMerge"?"MERGE":"SET"}function Gu(e){return!!e.data?.initialScan}E();import{useState as Ju}from"react";import{macOSColors as rr,night as de,monoFont as Ei}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function Yu({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=Ju(false),{instances:a,instanceCount:i,refresh:y}=hn(false),d=a.find(c=>c.id===e),g=c=>{t(c),n(false)};return un()?i===0?le(l,{style:$.container,children:it(l,{style:$.emptyState,children:[le(u,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),le(u,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(L,{style:$.refreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(l,{style:$.container,children:[it(L,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:$.selectorContent,children:d?le(Ri,{instance:d,isSelected:true}):le(u,{style:$.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:$.dropdownArrow,children:"\u25BC"})]}),le(ta,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(L,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:it(l,{style:$.dropdownContainer,children:[it(l,{style:$.dropdownHeader,children:[it(u,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(L,{style:$.headerRefreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.headerRefreshText,children:"\u21BB"})})]}),le(Or,{style:$.dropdownList,children:a.map(c=>le(L,{style:[$.dropdownItem,c.id===e&&$.dropdownItemSelected],onPress:()=>g(c.id),activeOpacity:.7,children:le(Ri,{instance:c,isSelected:c.id===e})},c.id))})]})})})]}):le(l,{style:$.container,children:it(l,{style:$.unavailableState,children:[it(u,{style:$.unavailableTitle,children:[ne.mmkv," Not Available"]}),le(u,{style:$.unavailableDescription,children:Ca()})]})})}function Ri({instance:e,isSelected:t}){return it(l,{style:$.instanceRow,children:[it(l,{style:$.instanceLeft,children:[le(u,{style:[$.instanceId,t&&$.instanceIdSelected],numberOfLines:1,children:e.id}),it(l,{style:$.instanceBadges,children:[e.encrypted&&le(l,{style:[$.badge,$.badgeEncrypted],children:le(u,{style:$.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(l,{style:[$.badge,$.badgeReadOnly],children:le(u,{style:$.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),it(l,{style:$.instanceRight,children:[le(u,{style:$.keyCount,children:e.keyCount}),le(u,{style:$.keyCountLabel,children:"keys"})]})]})}var $=pe.create({container:{marginBottom:12},unavailableState:{backgroundColor:rr.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:rr.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:rr.semantic.warning},unavailableDescription:{fontSize:12,color:de.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:de.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:de.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:de.color.text},emptyStateDescription:{fontSize:12,color:de.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:de.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:de.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:de.color.accent},selectorButton:{backgroundColor:de.color.surface,borderRadius:12,borderWidth:1,borderColor:de.color.border,padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},selectorContent:{flex:1},placeholderText:{fontSize:13,color:de.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:de.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:de.color.surface,borderRadius:16,borderWidth:1,borderColor:de.color.border,width:"100%",maxWidth:500,maxHeight:"70%",shadowColor:"#000000",shadowOpacity:.2,shadowRadius:20,shadowOffset:{width:0,height:10},overflow:"hidden"},dropdownHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:16,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:de.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:de.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownItemSelected:{backgroundColor:de.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:de.color.text,fontFamily:Ei},instanceIdSelected:{fontWeight:"600",color:de.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:rr.semantic.success+"15",borderColor:rr.semantic.success+"40"},badgeReadOnly:{backgroundColor:rr.semantic.warning+"15",borderColor:rr.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:de.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:de.color.text,fontFamily:Ei},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as Qu}from"@buoy-gg/shared-ui/web";import{jsx as Ke,jsxs as wr}from"react/jsx-runtime";function Xu({instanceId:e}){let t=Ka(e);return t?Ke(l,{style:ge.container,children:wr(l,{style:ge.panel,children:[Ke(l,{style:ge.header,children:Ke(u,{style:ge.headerTitle,children:"Instance Details"})}),wr(l,{style:ge.infoGrid,children:[Ke(Gr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Ke(Gr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Ke(Gr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),Ke(Gr,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?yt.semantic.warning:Et.color.textTertiary}),t.size!==void 0&&Ke(Gr,{label:"Size",value:Zu(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&wr(l,{style:ge.notice,children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F512}"}),Ke(u,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&wr(l,{style:[ge.notice,ge.noticeWarning],children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Ke(u,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Ke(l,{style:ge.container,children:Ke(l,{style:ge.errorState,children:wr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Gr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return wr(l,{style:ge.infoItem,children:[Ke(u,{style:ge.infoLabel,children:e}),Ke(u,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function Zu(e){if(e===0)return"0 Bytes";let t=1024,r=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,o)).toFixed(2))} ${r[o]}`}var ge=pe.create({container:{marginBottom:12},errorState:{backgroundColor:yt.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:yt.semantic.error+"40"},errorText:{fontSize:12,color:yt.semantic.error,textAlign:"center"},panel:{backgroundColor:Et.color.surface,borderRadius:12,borderWidth:1,borderColor:Et.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:Et.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:Et.color.text,textTransform:"uppercase",letterSpacing:.5},infoGrid:{padding:12,gap:10},infoItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4},infoLabel:{fontSize:12,color:Et.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:Et.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:Et.color.accent},monoValue:{fontFamily:Qu},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:yt.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:yt.semantic.success+"30"},noticeWarning:{backgroundColor:yt.semantic.warning+"10",borderColor:yt.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:yt.semantic.success,lineHeight:16},noticeTextWarning:{color:yt.semantic.warning}});E();import{getBrowserStorage as Bi,subscribeToBrowserStorage as ey}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as zn}from"@buoy-gg/shared-ui/web";ao();var Vi=0;function ty(e){let t=()=>Bi(e),r=()=>Array.from({length:t().length},(o,n)=>t().key(n)).filter(o=>o!==null&&!zn(o));return{set(o,n){t().setItem(o,String(n))},getString(o){return t().getItem(o)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(o){return t().getItem(o)!==null},delete(o){let n=this.contains(o);return t().removeItem(o),n},getAllKeys:r,clearAll(){for(let o of r())t().removeItem(o)},get size(){return r().reduce((o,n)=>o+2*(n.length+(t().getItem(n)?.length??0)),0)},addOnValueChangedListener(o){return{remove:ey(n=>{n.area===e&&(n.key!==void 0?zn(n.key)||o(n.key):n.prevPairs?.forEach(([a])=>{zn(a)||o(a)}))})}}}}function ry(){return Dr()?["localStorage","sessionStorage"]:["sessionStorage"]}function oy(){if(typeof window>"u")return()=>{};try{Bi("sessionStorage")}catch{return()=>{}}let e=ry();if(++Vi===1)for(let r of e)Hn(r,ty(r));let t=true;return()=>{if(t&&(t=false,--Vi===0))for(let r of e)jn(r)}}export{Xu as MMKVInstanceInfoPanel,Yu as MMKVInstanceSelector,qu as STORAGE_OPS,Ja as StorageBrowserMode,Bn as StorageEventCard,En as StorageEventDetailContent,Rn as StorageEventDetailFooter,Nu as StorageEventsSection,Du as StorageKeyCard,fa as StorageKeySection,Fu as StorageKeyStatsSection,An as StorageModalWithTabs,Iu as StorageSection,yu as StorageToolView,dn as StorageTypeFilterBar,ko as batchPairsOf,In as canUndo,so as clearAllAppStorage,ka as countByStorageType,wu as createStorageTool,kt as detectMMKVType,al as formatMMKVValue,xc as getMMKVClass,Ca as getMMKVUnavailableMessage,au as getValueType,Gu as isInitialScan,un as isMMKVAvailable,Jo as isTypeMatch,Hr as isValueOnDevice,Tn as jumpToState,Hn as registerMMKVInstance,cl as registerSecureStoreKeys,md as requestStorageBrowserRefresh,Na as setStorageValue,oy as startBrowserStorageCapture,vn as storageEditBlockedReason,Pt as storageEventStore,ju as storageOpDot,Uu as storageOpOf,vu as storageSyncAdapter,bi as storageToolPreset,fd as storageValueToEditableText,xn as undoOperation,jn as unregisterMMKVInstance,dl as unregisterSecureStoreKey,gn as useAsyncStorageKeys,Ka as useMMKVInstance,$c as useMMKVInstanceExists,hn as useMMKVInstances,Lc as useMMKVKeys,Da as useMultiMMKVKeys,Qa as useStorageEvents,$a as validateStorageValue};
|
|
4
|
+
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(l,{style:O.instanceNavbar,children:[Ee(l,{style:O.instanceNavbarHeader,children:[H(u,{style:O.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&H(la,{style:{transform:[{scale:.85}]}})]}),Ee(Or,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||xe.length===1)&&Ee(L,{onPress:()=>_t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ae.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[H(Ga,{size:12,color:re===null?F.color.text:F.color.textSecondary}),H(u,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),H(l,{style:O.instanceNavbarBadge,children:H(u,{style:O.instanceNavbarBadgeText,children:xe.reduce((s,h)=>s+h.keyCount,0)})})]}),xe.map((s,h)=>{let U=h>=Q;return Ee(L,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?Se(true):_t(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?F.color.border:br(s.id)+"40",backgroundColor:s.id===re?br(s.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[H(Ga,{size:12,color:s.id===re?br(s.id):F.color.textSecondary}),H(u,{style:[O.instanceNavbarButtonText,s.id===re&&{color:br(s.id),fontWeight:"700"}],children:s.id}),H(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:br(s.id)+"30"}],children:H(u,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:br(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),Ki=H(nd,{copyValue:Ho,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:_o,selectedCount:nr.size}),Li=Nt?H(md,{selectedKeys:Ye,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:$o,onHideKeys:Er,onSelectAll:Br,onClearSelection:Vr,totalVisibleKeys:v.length}):null,Pi=z?Ee(L,{style:O.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(l,{style:O.limitBannerContent,children:[Ee(l,{style:O.limitBannerLeft,children:[H(Fs,{size:16,color:F.color.accent}),H(u,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),H(la,{})]}),H(u,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,Oi=(()=>{let s=N.some(U=>!ze(U.key)),h;return a||!s?(h=$s({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(h={...h,message:"No keys match. Clear the search to see them."})):se==="missing"?h={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?h={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:h={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},H(_s,{...h,testID:"buoy-storage-keys-empty"})})(),Fi=H(Ws,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(l,{style:O.root,children:[$t>0?H(Jc,{onDone:()=>Cr(0)},$t):null,Ee(Or,{testID:"buoy-storage-scroll",ref:Je,onScroll:s=>{kr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[H(l,{style:O.backgroundGrid}),H(Ec,{stats:Ut,tabStats:pt,healthPercentage:Ar,healthStatus:Di,healthColor:Mi,activeFilter:se,onFilterChange:Ue,activeStorageType:ye,onStorageTypeChange:or,showStatus:!te}),zi,Le.length>0?Ee(l,{style:O.keysSection,children:[Ee(l,{style:O.sectionHeader,children:[Ee(l,{style:O.sectionHeaderLeft,children:[Ee(u,{style:O.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),H(l,{style:O.countBadge,children:H(u,{style:O.countText,children:v.length})})]}),Ki]}),Li,H(fa,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:y,onViewHistory:g,onHideKey:s=>Er([s]),onToggleKey:No,onDeleteKey:to,editBlockedFor:Rr,pinnedKeys:f,onTogglePin:b,onRowRef:gt,onOpenKey:R}),Pi]}):Oi,H(u,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Fi]})]})}var O=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...na,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...na,opacity:.006,backgroundColor:hr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:Fr,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:F.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:F.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:F.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:F.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:F.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:F.color.border},countText:{fontSize:11,fontWeight:"600",color:F.color.text,fontFamily:Fr},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:F.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:F.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:F.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:F.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:F.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:F.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Fr,color:F.color.accent,backgroundColor:F.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:F.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:F.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:F.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:F.color.textSecondary,fontFamily:Fr,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:F.color.text},instanceNavbarBadge:{backgroundColor:F.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:F.color.textSecondary,fontFamily:Fr},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:F.color.border},clearSearchText:{fontSize:13,color:F.color.text,fontWeight:"500"},limitBanner:{backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:F.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:F.color.textTertiary,fontSize:11}});import{jsx as Cd}from"react/jsx-runtime";function Ya({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return Cd(kd,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as xd}from"@buoy-gg/shared-ui/web";E();import{useMemo as Td}from"react";import{useEventStoreEvents as Id}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Ed,appStorageEvent as Sn}from"@buoy-gg/shared-ui/web";function qr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function ko(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Qa(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=ko(e);return qr(t.value)||qr(t.prevValue)||qr(r)||qr(o)}var Rd=0;function Co(){return`se-${Date.now()}-${++Rd}`}var Bd=class extends Ed{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Sn(e);t&&super.addEvent(t)}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Pe.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:y}=kt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[y]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:y,initialScan:true},storageType:"mmkv",id:Co()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Hi(Wn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,y]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:y??void 0,initialScan:true},storageType:"async",id:Co()})}}}catch{}}async startCapturing(){Pc()||await Lc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=Ra(e=>{let t={...e,storageType:"async",id:Co()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Hn(e=>{let t={...e,storageType:"mmkv",id:Co()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)Qa(o)||t.set(o.id,o);let r=e.map(Sn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!Qa(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...ko(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Sn(e);if(!t)return;e=t;let r=this.events.findIndex(a=>a.id===e.id);if(r===-1)return;let o=this.events[r],n=this.events.slice();n[r]={...o,...e,timestamp:o.timestamp,data:{...o.data,...e.data}},super.replaceEvents(n)}},Pt=new Bd;function Za(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Td(()=>t==="all"?void 0:d=>d.filter(g=>g.storageType===t),[t]),{events:a,clearEvents:i,isActive:y}=Id(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:y}}E();ft();import{useState as xo,useCallback as ct,useMemo as Ot,useEffect as Xa,useRef as Vd}from"react";import{formatRelativeTime as To,macOSColors as Io,night as er,parseValue as Eo,devToolsStorageKeys as ei,GitBranch as Ad,EventStepperFooter as Dd,EventHistoryViewer as Md,copyToClipboard as zd,ProUpgradeModal as Kd,monoFont as ti}from"@buoy-gg/shared-ui/web";import{useIsPro as Ld}from"@buoy-gg/license/web";E();import{computeLineDiff as Cg,DiffType as xg,ABSENT_VALUE as Pd,isAbsent as Tg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Od}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as Fd,gitClassicTheme as Rg,devToolsDefaultTheme as Bg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ri}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as Wd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as oi}from"react/jsx-runtime";function _d({oldValue:e,newValue:t,scrollEnabled:r=true}){return oi(l,{style:r?ni.container:ni.containerInline,children:oi(Wd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var ni=pe.create({container:{flex:1,backgroundColor:ri.color.bg},containerInline:{backgroundColor:ri.color.bg}});E();function wn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}E();import{night as Re,Lock as $d,monoFont as Nd}from"@buoy-gg/shared-ui/web";import{jsx as kn,jsxs as Hd}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 Cn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=qd[r],i=o||n;return Hd(L,{disabled:i,onPress:e,style:[Ro.button,{backgroundColor:i?Re.color.fill:a.backgroundColor,borderColor:i?Re.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?kn($d,{size:10,color:Re.color.textTertiary,style:Ro.lockIcon}):kn(l,{style:[Ro.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),kn(u,{style:[Ro.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Ro=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Re.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:Nd,height:12}});E();ft();Jt();import{isDevToolsStorageKey as jd}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function xn(e){let{action:t,data:r}=e;if(Ft(r?.prevValue)||Ft(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await zr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Tn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let y=i.data;if(Ft(y?.value)||Ft(y?.prevValue)||Ft(y?.pairs)||Ft(y?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)Gd(e[i],r);let o=new Set;for(let i of e)Ud(i,o);let n=[],a=[];for(let i of o){if(jd(i))continue;let y=r.get(i);y==null?a.push(i):n.push([i,y])}a.length>0&&await sr(a),n.length>0&&await zr(n)}function Ud(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 Gd(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),y={...a,...i};t.set(o.key,JSON.stringify(y))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let y=JSON.parse(i),d=JSON.parse(a),g={...y,...d};t.set(n,JSON.stringify(g))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function In(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ft(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ft(r.prevPairs);default:return false}}import{Fragment as Jd,jsx as qe,jsxs as ai}from"react/jsx-runtime";var vr=-1,Bo={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Vo(e){switch(e){case"setItem":case"multiSet":return Io.semantic.success;case"removeItem":case"multiRemove":case"clear":return Io.semantic.error;case"mergeItem":case"multiMerge":return Io.semantic.info;default:return Io.text.muted}}function ii(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 Yd={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},Qd=[];function En({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=Ld(),[a,i]=xo(false),[y,d]=xo("split"),[g,c]=xo(Math.max(vr,t-1)),[p,m]=xo(t),x=Vd(false),f=Ot(()=>e.events.sort((ne,gt)=>ne.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),b=f.length;Xa(()=>{if(x.current)return;(async()=>{try{let ne=await oe.getItem(ei.storage.diffViewerMode());(ne==="split"||ne==="tree")&&d(ne),x.current=true}catch{}})()},[]),Xa(()=>{let ne=Math.min(b-1,Math.max(0,t)),gt=Math.max(vr,Math.min(ne-1,t-1));c(gt),m(ne)},[t,b]);let S=ct(async ne=>{d(ne);try{await oe.setItem(ei.storage.diffViewerMode(),ne)}catch{}},[]),w=f[t],T=w?.action,I=g===vr,R=I?void 0:f[Math.max(0,Math.min(b-1,g))],D=f[Math.max(0,Math.min(b-1,p))],C=Ot(()=>{let ne=D?.data;return ne?.initialScan?"scanned":ne?.prevValue===null||ne?.prevValue===void 0?"absent":"prior"},[D]),B=Ot(()=>C==="absent"?Pd:C==="scanned"?Eo(D?.data?.value):Eo(D?.data?.prevValue),[C,D]),Q=Ot(()=>I?{index:vr,label:Bo[C].label,timestamp:Bo[C].timestamp,relativeTime:Bo[C].relativeTime,badge:qe(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:qe(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Bo[C].badge})})}:{index:g,label:`#${g+1} / ${b}`,timestamp:R?ii(R.timestamp):"",relativeTime:R?To(R.timestamp):"",badge:R?qe(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(R.action)}20`}],children:qe(u,{style:[tr.actionTextSmall,{color:Vo(R.action)}],children:wn(R.action)})}):void 0},[g,R,b,I,C]),ve=Ot(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?ii(D.timestamp):"",relativeTime:D?To(D.timestamp):"",badge:D?qe(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(D.action)}20`}],children:qe(u,{style:[tr.actionTextSmall,{color:Vo(D.action)}],children:wn(D.action)})}):void 0}),[p,D,b]),Se=Ot(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),q=ct(()=>{g>vr&&c(g-1)},[g]),ue=ct(()=>{g<p-1&&c(g+1)},[g,p]),te=ct(()=>{p>g+1&&m(p-1)},[p,g]),se=ct(()=>{p<b-1&&m(p+1)},[p,b]),Ue=Ot(()=>I?B:Eo(R?.data?.value??null),[I,B,R]),Ge=Ot(()=>Eo(D?.data?.value),[D]),wt=ct(()=>y==="split"?qe(Od,{oldValue:Ue,newValue:Ge,differences:Qd,theme:Fd.devToolsDefault,options:Yd,showThemeName:false,scrollEnabled:false}):qe(_d,{oldValue:Ue,newValue:Ge,scrollEnabled:false}),[Ue,Ge,y]),Rt=ct(()=>{r(Math.max(0,t-1))},[t,r]),ye=ct(()=>{r(Math.min(b-1,t+1))},[t,b,r]),or=ct(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await xn(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ne=f.filter($t=>$t.storageType!=="mmkv"),gt=ne.findIndex($t=>$t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Tn(ne,gt)}catch{}},[w,f,n]),_t=ct(async()=>{if(!w)return;let ne={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await zd(ne)},[w]),Je=w?.storageType!=="mmkv",kr=Je&&w&&In(w);return ai(Jd,{children:[Je&&ai(l,{style:tr.actionButtonsContainer,children:[qe(Cn,{type:"undo",text:"UNDO",onPress:or,disabled:!kr,locked:!n}),qe(Cn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),qe(Cn,{type:"copy",text:"COPY",onPress:_t})]}),qe(Md,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Ad,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:g>vr,canLeftNext:g<p-1,canRightPrevious:p>g+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:To(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),qe(Kd,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function Rn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,y)=>i.timestamp.getTime()-y.timestamp.getTime()),a=n.length;return qe(Dd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:To(n[t]?.timestamp),applySafeAreaInset:o})}var tr=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:er.color.surface,borderBottomWidth:1,borderBottomColor:er.color.border},valueBox:{backgroundColor:er.color.bg,borderRadius:6,borderWidth:1,borderColor:er.color.border,padding:8},valueText:{fontSize:12,color:er.color.text,fontFamily:ti,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:ti}});E();import{Filter as li,DynamicFilterView as Zd,Database as Xd,HardDrive as eu,Shield as tu,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as Sr}from"react/jsx-runtime";function ru({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:li},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:li},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return Sr(l,{style:et.container,children:[Sr(l,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),Sr(l,{style:et.storageTypeButtons,children:[Sr(L,{style:[et.storageTypeButton,n.has("async")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ae.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(Xd,{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})]}),Sr(L,{style:[et.storageTypeButton,n.has("mmkv")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ae.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(eu,{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})]}),ka()&&Sr(L,{style:[et.storageTypeButton,n.has("secure")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Wt(tu,{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(Zd,{...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 ou}from"react";import{RelativeTime as nu,macOSColors as jr,parseValue as au,CompactRow as iu}from"@buoy-gg/shared-ui/web";import{jsx as si}from"react/jsx-runtime";function lu(e){let t=au(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 su(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return jr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return jr.semantic.error;case"mergeItem":case"multiMerge":return jr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return jr.semantic.warning;default:return jr.text.muted}}function cu(e,t){return`${Array.from(e).map(r=>r==="async"?ae.async:ae.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Bn=ou(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=su(e.lastAction),i=wn(e.lastAction),y=e.totalOperations??1;return si(iu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:cu(e.storageTypes,y),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:si(nu,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as du}from"@buoy-gg/license/web";import{Fragment as ci,jsx as M,jsxs as dt}from"react/jsx-runtime";var Hg=Ls["storage.events"].free,Vn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},uu={storage:Vn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},yu={storage:Vn,parse:e=>e==="true",serialize:e=>e.toString()},di={storage:Vn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},gu={...di,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function An({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:y,onRefresh:d,onEventSelect:g}){let c=du(),p=Ks("storage.events"),[m,x]=uo(cr.storage.activeTab(),"browser",uu);Zo(()=>{y?.(m)},[m,y]);let[f,b]=ot(""),[S,w]=ot(null),[T,I]=ot(false),[R,D]=uo(cr.storage.isMonitoring(),true,yu),{events:C,clearEvents:B,isCapturing:Q}=Za({enabled:R}),[ve,Se]=ot(null),[q,ue]=ot(null),[te,se]=ot(null),[Ue,Ge]=ot(0),[wt,Rt]=ot(false),[ye,or]=uo(cr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),gu),[re,_t]=ot("all"),[Je,kr]=ot(new Set(["async","mmkv","secure"])),[ne,gt]=uo(cr.storage.pinnedKeys(),new Set,di),$t=Jn(null),Cr=R&&Q,[Nt,xr]=ot("bottomSheet"),nr=De(v=>{xr(v)},[]),Bt=De(()=>{D(v=>!v)},[]),xe=De(()=>{B(),Se(null),Ge(0)},[B]),Jr=De(v=>{ue(v),se(null)},[]),Yr=De(()=>{ue(null),se(null)},[]),Qr=De(v=>{or(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ht=De(v=>{or(k=>new Set([...k,v]))},[]),Lo=De(v=>{gt(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Tr=De(()=>{Rt(!wt)},[wt]),Po=De(v=>{kr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ir=Jn([]),ar=De(()=>{let v=Ir.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=co(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=co(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=co(z.value),k),{})}},[]),Oo=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await so()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await nl()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),qt=v=>{let k=Is(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"},[Zr,Fo]=ot([]);Zo(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();Fo([...v].sort())}catch{}})()},[e]);let Xr=st(()=>{let v=new Set(Zr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Zr]),N=st(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Je.has(k.storageType)||Array.from(ye).some(Ye=>z.includes(Ye)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=qt(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:qt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ye,Je]),ke=st(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),Wo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),eo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Te=st(()=>q&&N.find(v=>v.key===q)||null,[q,N]);Zo(()=>{if(!g)return;let v=ke||(te!==null?Te:null),k=ke?Ue:te;if(!v||k==null)return;let z=[...v.events].sort((Br,Vr)=>Br.timestamp.getTime()-Vr.timestamp.getTime()),j=z[k],Ye=z[k-1];j&&g(j),Ye&&g(Ye)},[g,ke,Ue,Te,te]);let tt=st(()=>C.filter(v=>{if(!v.data?.key||!Je.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[C,ye,Je]),_o=st(()=>Ca(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(v=>v.storageType===re),[tt,re]),$o=De(()=>rt.map(v=>({key:v.data?.key,action:v.action,value:co(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[rt]),Er=st(()=>rt.slice(0,p),[rt,p]),jt=st(()=>Math.max(0,rt.length-p),[rt.length,p]),No=.8,to=De(v=>v.id,[]),Rr=De(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Ge(z>=0?z:0)},[N]),Ho=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(Bn,{data:k,onPress:()=>Rr(v),testID:`buoy-storage-event-${v.id}`})},[Rr]);if(!e)return null;let Ut=n?cr.modal.root():cr.storage.modal(),pt=()=>{if(wt)return M(ru,{ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:Ht,availableKeys:Xr,enabledStorageTypes:Je,onToggleStorageType:Po});if(m==="browser"){if(q&&Te){if(te!==null)return M(l,{style:he.contentWrapper,children:M(En,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()),z=[...k].reverse();return M(Xo,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Ye=k.findIndex(Vr=>Vr.timestamp.getTime()===j.timestamp.getTime()),Br={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Bn,{data:Br,onPress:()=>se(Ye>=0?Ye:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(Ya,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:Ht,searchQuery:f,storageDataRef:Ir,eventCountByKey:Wo,lastWriteByKey:eo,onViewHistory:Jr,enabledStorageTypes:Je,pinnedKeys:ne,onTogglePin:Lo,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:_t,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(l,{style:he.contentWrapper,children:M(En,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(dn,{active:re,onChange:_t,counts:_o})});if(rt.length===0){let k=re!=="all";return dt(l,{style:he.flexFill,children:[v,M(Rs,{testID:"buoy-storage-events-empty",...Cr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return dt(l,{style:he.flexFill,children:[v,M(Xo,{testID:"buoy-storage-events-list",style:he.flexFill,data:Er,renderItem:Ho,keyExtractor:to,onEndReachedThreshold:No,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(l,{style:he.lockedBannerContainer,children:M(xd,{featureName:`${jt} event${jt>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ir=ke&&ke.events.length>1?M(Rn,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,applySafeAreaInset:Nt==="bottomSheet"}):Te&&te!==null&&Te.events.length>1?M(Rn,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Kn=wt?()=>Rt(false):te!==null?()=>se(null):q?Yr:ke?()=>{Se(null),Ge(0)}:r,Le=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):Yr}),M(Me.Content,{title:`${q} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Ge(0)}}),M(Me.Content,{title:ke.key})]}):S?dt(Me,{children:[M(Me.Navigation,{onBack:()=>w(null)}),M(Me.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):dt(Me,{children:[r&&M(Me.Navigation,{onBack:r}),M(Me.Content,{title:"",children:T?M(Ds,{value:f,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(Ts,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:m,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),ue(null),se(null),Se(null),Ge(0),w(null)}})}),dt(Me.Actions,{children:[d&&!T?M(L,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Vs,{size:14,color:We.color.textSecondary})}):null,M(L,{onPress:Tr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Je.size<3)&&he.activeFilterButton],children:M(Bs,{size:14,color:ye.size>0||Je.size<3?We.color.accent:We.color.textSecondary})}),m==="browser"&&!T&&dt(ci,{children:[M(L,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(As,{size:14,color:We.color.textSecondary})}),M(ra,{value:ar,disabled:Ir.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),m==="events"&&dt(ci,{children:[M(ra,{value:$o,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(Ms,{isEnabled:Cr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(zs,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(oa,{children:dt(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ps,children:Le}),pt(),ir]})}):M(oa,{children:M(xs,{visible:e,onClose:t,onBack:Kn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Le},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function pu(e={}){return M(An,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:Es.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:We.color.buttonSurface,borderWidth:1,borderColor:We.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:We.color.accentSoft,borderColor:We.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:We.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:yo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:We.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:yo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:We.color.text,fontSize:12,fontWeight:"600",fontFamily:yo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:We.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:We.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:We.color.accent,fontFamily:yo,letterSpacing:.5},contentWrapper:{flex:1}});E();ft();Jt();import{approxJsonSize as ui,isDevToolsStorageKey as ut,isOverWireBudget as yi,isJsonSerializable as mu}from"@buoy-gg/shared-ui/web";var Ao=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),fu=16*1024,Dn=1.25*1024*1024,gi=8*1024*1024;function Mn(e){return e===void 0?e:yi(e,fu)?Ao:e}function Do(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=ko(e),i=t(a.pairs),y=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&y===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:y}:{}}}}function pi(e){return e===void 0||!yi(e,gi)?e:mu(e)?{__buoyTruncated:true,note:`Exceeds the ${gi/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Ao}var mi=new WeakMap,fi=new WeakMap;function hu(e){let t=mi.get(e);if(t)return t;let r;try{let o=Do(e,Mn);r={event:o,bytes:ui(o,Dn).bytes}}catch{r={event:Do(e,()=>Ao),bytes:1024}}return mi.set(e,r),r}function bu(e){let t=fi.get(e);if(t)return t;let r=Do(e,n=>n===void 0?void 0:Ao),o={event:r,bytes:ui(r,Dn).bytes};return fi.set(e,o),o}function vu(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=hu(e[o]);if(r+n.bytes<=Dn)t[o]=n.event,r+=n.bytes;else{let a=bu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function hi(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 bi=[];function Su(e){bi=e}var wu={version:3,getSnapshot:()=>vu(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:()=>bi,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Pt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=Do(r,pi);return{found:true,id:t,event:o}},clearAppStorage:()=>so(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Pt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!In(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await xn(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Pt.getEvents().filter(y=>y.storageType!=="mmkv").slice().reverse(),n=o.find(y=>y.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(y=>y.data?.key===n.data?.key),i=a.findIndex(y=>y.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await Tn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!ut(e)),"async.multiGet":async e=>(await io(e.keys)).filter(([t])=>!ut(t)),"async.getItem":e=>{let{key:t}=e;return ut(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>sr(e.keys),"async.multiSet":e=>zr(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Pe.getAll().filter(({id:e})=>!ut(e)).map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!ut(a)).map(a=>{let{value:i,type:y}=kt(t,a);return{key:a,value:Mn(i),valueType:y}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r||ut(r)||ut(t))return{found:false,reason:"missing instanceId/key"};let o=Pe.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=kt(o.instance,r);return{found:true,instanceId:t,key:r,value:pi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;hi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=hi(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:Mn(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 ku}from"react/jsx-runtime";var vi=Sl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>ku(bl,{size:e}),component:An,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),Cu=vl(vi,e=>(Su(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as xu,CyberpunkSectionButton as Tu}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Iu}from"@buoy-gg/shared-ui/web";import{jsx as Eu}from"react/jsx-runtime";function Ru({onPress:e}){let{storageKeys:t}=gn(),r=t.filter(n=>!Iu(n.key)).length,o=r;return Eu(Tu,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:xu,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as Si,CheckCircle2 as Bu,Eye as wi,XCircle as ki,HardDrive as Ci,Database as xi,Shield as Vu,gameUIColors as Mo,macOSColors as ie,night as be,monoFont as zo}from"@buoy-gg/shared-ui/web";import{DataViewer as Au}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var Ti=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Ko(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ti[t%Ti.length]}var Du=e=>{switch(e){case"required_present":return{icon:Bu,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:Si,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:ki,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:ki,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:wi,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},Mu=e=>{switch(e){case"mmkv":return Ci;case"async":return xi;case"secure":return Vu;default:return xi}};function zu({storageKey:e,isExpanded:t,onToggle:r}){let o=Du(e.status),n=o.icon,a=Mu(e.storageType),i=e.value!==void 0&&e.value!==null,y=e.expectedValue!==void 0,d=e.expectedType!==void 0,g=ua(e.storageType),c=on(e.storageType,e.instanceId);return Ae(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(L,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Ae(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ae(l,{style:K.cardHeaderInfo,children:[Y(u,{style:K.storageKeyText,children:e.key}),e.description?Y(u,{style:K.descriptionText,children:e.description}):null,Ae(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(u,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Ae(l,{style:[K.storageBadge,{backgroundColor:`${g}15`}],children:[Y(a,{size:10,color:g}),Y(u,{style:[K.storageText,{color:g}],children:c})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(l,{style:[K.instanceBadge,{backgroundColor:Ko(e.instanceId)+"20",borderColor:Ko(e.instanceId)+"40"}],children:[Y(Ci,{size:9,color:Ko(e.instanceId)}),Y(u,{style:[K.instanceText,{color:Ko(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(u,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():Dt(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(wi,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let p=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof p=="string"||typeof p=="number"||typeof p=="boolean"?Ae(l,{style:K.simpleValueContainer,children:[Y(u,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(u,{style:K.simpleValueContent,selectable:true,children:String(p)})}),Ae(u,{style:K.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Au,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ae(u,{style:K.typeHelperText,children:["Current type: ",Dt(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Ae(u,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ae(l,{style:K.cardBody,children:[Ae(l,{style:K.emptyValueContainer,children:[Y(Si,{size:16,color:ie.semantic.warning}),Y(u,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:zo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Mo.success,fontSize:12,fontFamily:zo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Mo.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Mo.warning+"1A"},emptyValueText:{color:Mo.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});E();import{AlertCircle as Ku,CheckCircle2 as Lu,XCircle as Ii,Eye as Pu,Database as Ei,Shield as Ou}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as je}from"react/jsx-runtime";var Fu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:Lu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:Ku,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Ii,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Ii,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Pu,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],Wu=[{key:"mmkv",label:ae.mmkv,description:ae.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ei},{key:"async",label:ae.asyncFull,description:ae.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ei},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Ou}];function _u({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:y,asyncCount:d,secureCount:g}=e;return t===0?je(l,{style: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"})})]}):je(l,{style:X.statsContainer,children:[je(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:Fu.map(c=>{let p=0,m=false;switch(c.key){case"valid":p=a,m=p>0;break;case"missing":p=r,m=p>0;break;case"wrongValue":p=o,m=p>0;break;case"wrongType":p=n,m=p>0;break;case"optional":p=i,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon;return Ce(l,{style:X.breakdownItem,children:je(l,{style:X.breakdownItemRow,children:[je(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:c.bgColor}],children:Ce(f,{size:14,color:c.color})}),je(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:c.label}),Ce(u,{style:X.breakdownItemDesc,children:c.description})]})]}),je(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:c.textColor}],children:p}),je(u,{style:X.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]}),(y>0||d>0||g>0)&&je(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:Wu.map(c=>{let p=0,m=false;switch(c.key){case"mmkv":p=y,m=p>0;break;case"async":p=d,m=p>0;break;case"secure":p=g,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon,b=ua(c.key);return Ce(l,{style:X.breakdownItem,children:je(l,{style:X.breakdownItemRow,children:[je(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:`${b}15`}],children:Ce(f,{size:14,color:b})}),je(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:c.label}),Ce(u,{style:X.breakdownItemDesc,children:c.description})]})]}),je(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:b}],children:p}),je(u,{style:X.breakdownPercentage,children:[x,"%"]})]})]})},c.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 $u,CyberpunkSectionButton as Nu}from"@buoy-gg/shared-ui/web";import{jsx as Hu}from"react/jsx-runtime";function qu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return Hu(Nu,{id:"storage-events",title:"EVENTS",subtitle:r,icon:$u,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Ur}from"@buoy-gg/shared-ui/web";var ju=["SET","GET","MERGE","DELETE","CLEAR"],Uu={SET:Ur.semantic.info,GET:Ur.text.muted,MERGE:Ur.semantic.debug,DELETE:Ur.semantic.error,CLEAR:Ur.semantic.warning};function Gu(e){return Uu[e]}function Ju(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 Yu(e){return!!e.data?.initialScan}E();import{useState as Qu}from"react";import{macOSColors as rr,night as de,monoFont as Ri}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function Zu({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=Qu(false),{instances:a,instanceCount:i,refresh:y}=hn(false),d=a.find(c=>c.id===e),g=c=>{t(c),n(false)};return un()?i===0?le(l,{style:$.container,children:it(l,{style:$.emptyState,children:[le(u,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),le(u,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(L,{style:$.refreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(l,{style:$.container,children:[it(L,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:$.selectorContent,children:d?le(Bi,{instance:d,isSelected:true}):le(u,{style:$.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:$.dropdownArrow,children:"\u25BC"})]}),le(ta,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(L,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:it(l,{style:$.dropdownContainer,children:[it(l,{style:$.dropdownHeader,children:[it(u,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(L,{style:$.headerRefreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.headerRefreshText,children:"\u21BB"})})]}),le(Or,{style:$.dropdownList,children:a.map(c=>le(L,{style:[$.dropdownItem,c.id===e&&$.dropdownItemSelected],onPress:()=>g(c.id),activeOpacity:.7,children:le(Bi,{instance:c,isSelected:c.id===e})},c.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:xa()})]})})}function Bi({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:Ri},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:Ri},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as Xu}from"@buoy-gg/shared-ui/web";import{jsx as Ke,jsxs as wr}from"react/jsx-runtime";function ey({instanceId:e}){let t=La(e);return t?Ke(l,{style:ge.container,children:wr(l,{style:ge.panel,children:[Ke(l,{style:ge.header,children:Ke(u,{style:ge.headerTitle,children:"Instance Details"})}),wr(l,{style:ge.infoGrid,children:[Ke(Gr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Ke(Gr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Ke(Gr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),Ke(Gr,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?yt.semantic.warning:Et.color.textTertiary}),t.size!==void 0&&Ke(Gr,{label:"Size",value:ty(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&wr(l,{style:ge.notice,children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F512}"}),Ke(u,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&wr(l,{style:[ge.notice,ge.noticeWarning],children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Ke(u,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Ke(l,{style:ge.container,children:Ke(l,{style:ge.errorState,children:wr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Gr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return wr(l,{style:ge.infoItem,children:[Ke(u,{style:ge.infoLabel,children:e}),Ke(u,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function ty(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:Xu},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 Vi,subscribeToBrowserStorage as ry}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as zn}from"@buoy-gg/shared-ui/web";ao();var Ai=0;function oy(e){let t=()=>Vi(e),r=()=>Array.from({length:t().length},(o,n)=>t().key(n)).filter(o=>o!==null&&!zn(o));return{set(o,n){t().setItem(o,String(n))},getString(o){return t().getItem(o)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(o){return t().getItem(o)!==null},delete(o){let n=this.contains(o);return t().removeItem(o),n},getAllKeys:r,clearAll(){for(let o of r())t().removeItem(o)},get size(){return r().reduce((o,n)=>o+2*(n.length+(t().getItem(n)?.length??0)),0)},addOnValueChangedListener(o){return{remove:ry(n=>{n.area===e&&(n.key!==void 0?zn(n.key)||o(n.key):n.prevPairs?.forEach(([a])=>{zn(a)||o(a)}))})}}}}function ny(){return Dr()?["localStorage","sessionStorage"]:["sessionStorage"]}function ay(){if(typeof window>"u")return()=>{};try{Vi("sessionStorage")}catch{return()=>{}}let e=ny();if(++Ai===1)for(let r of e)qn(r,oy(r));let t=true;return()=>{if(t&&(t=false,--Ai===0))for(let r of e)jn(r)}}export{ey as MMKVInstanceInfoPanel,Zu as MMKVInstanceSelector,ju as STORAGE_OPS,Ya as StorageBrowserMode,Bn as StorageEventCard,En as StorageEventDetailContent,Rn as StorageEventDetailFooter,qu as StorageEventsSection,zu as StorageKeyCard,fa as StorageKeySection,_u as StorageKeyStatsSection,An as StorageModalWithTabs,Ru as StorageSection,pu as StorageToolView,dn as StorageTypeFilterBar,ko as batchPairsOf,In as canUndo,so as clearAllAppStorage,Ca as countByStorageType,Cu as createStorageTool,kt as detectMMKVType,il as formatMMKVValue,Ic as getMMKVClass,xa as getMMKVUnavailableMessage,lu as getValueType,Yu as isInitialScan,un as isMMKVAvailable,Jo as isTypeMatch,qr as isValueOnDevice,Tn as jumpToState,qn as registerMMKVInstance,dl as registerSecureStoreKeys,hd as requestStorageBrowserRefresh,Ha as setStorageValue,ay as startBrowserStorageCapture,vn as storageEditBlockedReason,Pt as storageEventStore,Gu as storageOpDot,Ju as storageOpOf,wu as storageSyncAdapter,vi as storageToolPreset,bd as storageValueToEditableText,xn as undoOperation,jn as unregisterMMKVInstance,ul as unregisterSecureStoreKey,gn as useAsyncStorageKeys,La as useMMKVInstance,Hc as useMMKVInstanceExists,hn as useMMKVInstances,Oc as useMMKVKeys,Ma as useMultiMMKVKeys,Za as useStorageEvents,Na as validateStorageValue};
|