@buoy-gg/storage 7.0.55 → 7.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/lib/commonjs/storage/components/StorageActionButtons.js +1 -1
  2. package/lib/commonjs/storage/components/StorageEventDetailContent.js +1 -1
  3. package/lib/commonjs/storage/components/StorageModalWithTabs.js +1 -1
  4. package/lib/commonjs/storage/hooks/useAsyncStorageKeys.js +1 -1
  5. package/lib/commonjs/storage/sync/storageSyncAdapter.js +1 -1
  6. package/lib/commonjs/storage/utils/AsyncStorageListener.web.js +1 -1
  7. package/lib/commonjs/storage/utils/appAsyncStorage.js +1 -0
  8. package/lib/commonjs/storage/utils/appAsyncStorage.web.js +1 -0
  9. package/lib/commonjs/storage/utils/asyncStorageCompat.js +1 -1
  10. package/lib/commonjs/storage/utils/browserStorageLifecycle.web.js +1 -1
  11. package/lib/commonjs/storage/utils/capacitorPreferences.js +1 -0
  12. package/lib/commonjs/storage/utils/clearAllStorage.js +1 -1
  13. package/lib/commonjs/storage/utils/setStorageValue.js +1 -1
  14. package/lib/commonjs/storage/utils/snapshotProvider.js +1 -1
  15. package/lib/commonjs/storage/utils/storageLabels.web.js +1 -1
  16. package/lib/commonjs/storage/utils/storageQueryUtils.js +1 -1
  17. package/lib/commonjs/storage/utils/storageTimeTravelUtils.js +1 -1
  18. package/lib/module/storage/components/StorageActionButtons.js +1 -1
  19. package/lib/module/storage/components/StorageEventDetailContent.js +1 -1
  20. package/lib/module/storage/components/StorageModalWithTabs.js +1 -1
  21. package/lib/module/storage/hooks/useAsyncStorageKeys.js +1 -1
  22. package/lib/module/storage/sync/storageSyncAdapter.js +1 -1
  23. package/lib/module/storage/utils/AsyncStorageListener.web.js +1 -1
  24. package/lib/module/storage/utils/appAsyncStorage.js +1 -0
  25. package/lib/module/storage/utils/appAsyncStorage.web.js +1 -0
  26. package/lib/module/storage/utils/asyncStorageCompat.js +1 -1
  27. package/lib/module/storage/utils/browserStorageLifecycle.web.js +1 -1
  28. package/lib/module/storage/utils/capacitorPreferences.js +1 -0
  29. package/lib/module/storage/utils/clearAllStorage.js +1 -1
  30. package/lib/module/storage/utils/setStorageValue.js +1 -1
  31. package/lib/module/storage/utils/snapshotProvider.js +1 -1
  32. package/lib/module/storage/utils/storageLabels.web.js +1 -1
  33. package/lib/module/storage/utils/storageQueryUtils.js +1 -1
  34. package/lib/module/storage/utils/storageTimeTravelUtils.js +1 -1
  35. package/lib/typescript/storage/utils/appAsyncStorage.d.ts +7 -0
  36. package/lib/typescript/storage/utils/appAsyncStorage.web.d.ts +5 -0
  37. package/lib/typescript/storage/utils/capacitorPreferences.d.ts +25 -0
  38. package/lib/web/index.mjs +2 -2
  39. package/package.json +5 -5
package/lib/web/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- "use client";var Mo=Object.defineProperty;var bi=Object.getOwnPropertyDescriptor;var vi=Object.getOwnPropertyNames;var Si=Object.prototype.hasOwnProperty;var Sn=(e,t)=>()=>(e&&(t=e(e=0)),t);var wn=(e,t)=>{for(var r in t)Mo(e,r,{get:t[r],enumerable:true})},Po=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vi(t))!Si.call(e,n)&&n!==r&&Mo(e,n,{get:()=>t[n],enumerable:!(o=bi(t,n))||o.enumerable});return e},wi=(e,t,r)=>(Po(e,t,"default"),r&&Po(r,t,"default"));var ki=e=>Po(Mo({},"__esModule",{value:true}),e);var V=Sn(()=>{"use strict";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});var kn={};wn(kn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>Cn,default:()=>xn,readMany:()=>Gr,removeMany:()=>tr,writeMany:()=>Ir});import Ci from"@buoy-gg/shared-ui/web/asyncStorage";async function Gr(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 Ir(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 tr(e){return typeof Fe.multiRemove=="function"?Fe.multiRemove(e):Fe.removeMany(e)}var Fe,Cn,xn,Nt=Sn(()=>{"use strict";V();Fe=Ci,Cn={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};xn=Fe});V();V();Nt();import Tn from"@buoy-gg/shared-ui/web/asyncStorage";import{classifyPreviewItem as xi,createRestoreScope as Ti,emptyRestoreResult as In,failedRestore as Ii,isDevToolsStorageKey as mt,registerStateSnapshotProvider as Ei,unionKeys as Yr,wontApply as Er}from"@buoy-gg/shared-ui/web";V();Nt();import En from"@buoy-gg/shared-ui/web/asyncStorage";import{isDevToolsStorageKey as Ri}from"@buoy-gg/shared-ui/web";async function Qr(){let e=await En.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!Ri(r));t.length!==0&&await tr(t)}async function Vi(){await En.clear()}V();V();V();function ht(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 Bi(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 zo(e,t){return e===t}var Ai=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,ht(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=ht(e,n),u=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:u,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:u,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Ko=new Ai;var Rn=e=>Ko.addListener(e);var Di=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 Di;function Vn(e,t,r){Pe.register(e,t,r),Ko.addInstance(t,e)}function Bn(e){Ko.removeInstance(e),Pe.unregister(e)}V();var Mi=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 Mi;function Pi(e,t){te.register(e,t)}function zi(e){te.unregister(e)}function An(e,t){e.remove?e.remove(t):e.delete?.(t)}function Ki(){return{canCapture:true,canRestore:true}}async function Dn(){let e=[],t=(await Tn.getAllKeys()).filter(i=>!mt(i)),r=(await Gr(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:u}of Pe.getAll())try{o[i]=u.getAllKeys().filter(d=>!mt(d)).map(d=>{let{value:y,type:g}=ht(u,d);return g==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:y,valueType:g}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=te.getModule();for(let{key:i,options:u}of te.getAll()){if(u.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,u)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function Fi(){let{data:e,warnings:t}=await Dn();return{data:e,warnings:t}}async function Oi(e,t){let r=e,o=Ti(t),n=o.touch,a=In();if(!r)return Ii("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!mt(p)&&n(`async:${p}`)),y=new Set(d.map(([p])=>p)),g=(await Tn.getAllKeys()).filter(p=>!mt(p)).filter(p=>!y.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),g.length>0&&await tr(g),d.length>0&&await Ir(d),a.applied+=d.length+g.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,y]of Object.entries(r.mmkv??{})){let g=Pe.get(d);if(!g){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(g.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=g;try{let f=new Set(y.map(h=>h.key)),x=p.getAllKeys().filter(h=>!mt(h));for(let h of x)o.allows(`mmkv:${d}/${h}`)&&(f.has(h)||(An(p,h),a.applied+=1));for(let h of y)if(!mt(h.key)&&n(`mmkv:${d}/${h.key}`)){if(h.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${h.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(h.key,h.value),a.applied+=1}}catch(f){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(f)}`)}}let i=r.secure??{};for(let{key:d,options:y}of te.getAll())if(o.allows(`secure:${d}`)){if(y.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let g=i[d];g===null?await te.deleteValue(d):await te.setValue(d,g)}else await te.deleteValue(d);a.applied+=1}catch(g){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(g)}`)}}for(let d of Object.keys(i))n(`secure:${d}`)&&(te.getAll().some(y=>y.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let u=o.excludedWarning("item(s)");return u&&a.warnings.push(u),a}async function Li(){let e=In();try{await Qr(),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()){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!mt(n)))An(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of te.getAll()){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await te.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var Wi=256*1024;function Fo(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>Wi,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function _i(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Dn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],u=new Map(n.async??[]),d=new Map(r.async??[]);for(let f of Yr(u,d))mt(f)||a.push(Fo(`async:${f}`,f,u.get(f),d.get(f),u.has(f),d.has(f)));for(let f of Yr(n.mmkv,r.mmkv)){let x=o?Pe.get(f):null,h=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[f]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[f]??[]).map(T=>[T.key,T]));for(let T of Yr(S,w)){if(mt(T))continue;let I=`mmkv:${f}/${T}`,E=`${f} \xB7 ${T}`,D=S.get(T),C=w.get(T),R=Fo(I,E,D?.value,C?.value,S.has(T),w.has(T));h?R=Er(R,"MMKV instance not registered"):b?R=Er(R,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(R=Er(R,"ArrayBuffer values cannot be restored")),a.push(R)}}let y=n.secure??{},g=r.secure??{},p=o?new Map(te.getAll().map(f=>[f.key,f])):null;for(let f of Yr(y,g)){let x=Fo(`secure:${f}`,f,y[f],g[f],f in y,f in g);if(o){let h=p?.get(f);h?h.options.requireAuthentication&&(x=Er(x,"biometric-protected keys are never written")):x=Er(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}Ei({id:"storage",label:"Storage",status:Ki,capture:Fi,restore:Oi,clear:Li,previewItems:_i});V();import{StorageIcon as $i}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as Ni,defineToolPreset as qi}from"@buoy-gg/shared-ui/web";V();import{useState as tt,useCallback as Be,useEffect as Oo,useRef as Mn,useMemo as at}from"react";var Pn={};wn(Pn,{AccessibilityInfo:()=>Ji,ActivityIndicator:()=>Ll,Alert:()=>xe,Animated:()=>qt,AppRegistry:()=>Yi,AppState:()=>Qi,Appearance:()=>Gi,BackHandler:()=>Zi,Button:()=>Wl,CheckBox:()=>gl,Clipboard:()=>Xi,DeviceEventEmitter:()=>Rl,Dimensions:()=>el,Easing:()=>Rr,FlatList:()=>Lo,I18nManager:()=>tl,Image:()=>pl,ImageBackground:()=>fl,InteractionManager:()=>ol,Keyboard:()=>rl,KeyboardAvoidingView:()=>ml,LayoutAnimation:()=>nl,Linking:()=>al,LogBox:()=>El,Modal:()=>zn,NativeEventEmitter:()=>il,NativeModules:()=>Ui,PanResponder:()=>ll,Picker:()=>hl,PixelRatio:()=>sl,Platform:()=>cl,Pressable:()=>Fl,ProgressBar:()=>bl,RefreshControl:()=>vl,SafeAreaView:()=>Sl,ScrollView:()=>Vr,SectionList:()=>wl,Share:()=>dl,StatusBar:()=>kl,StyleSheet:()=>ge,Switch:()=>Ol,Text:()=>c,TextInput:()=>Pl,Touchable:()=>Cl,TouchableHighlight:()=>zl,TouchableNativeFeedback:()=>xl,TouchableOpacity:()=>K,TouchableWithoutFeedback:()=>Kl,UIManager:()=>ul,Vibration:()=>yl,View:()=>l,VirtualizedList:()=>Tl,YellowBox:()=>Il,findNodeHandle:()=>_l,unstable_createElement:()=>ji,useColorScheme:()=>Vl,useLocaleContext:()=>Bl,useWindowDimensions:()=>Al});V();wi(Pn,Hi);import*as Hi from"react-native-web";import{unstable_createElement as ji,NativeModules as Ui,AccessibilityInfo as Ji,Animated as qt,Appearance as Gi,AppRegistry as Yi,AppState as Qi,BackHandler as Zi,Clipboard as Xi,Dimensions as el,Easing as Rr,I18nManager as tl,Keyboard as rl,InteractionManager as ol,LayoutAnimation as nl,Linking as al,NativeEventEmitter as il,PanResponder as ll,PixelRatio as sl,Platform as cl,Share as dl,StyleSheet as ge,UIManager as ul,Vibration as yl,CheckBox as gl,FlatList as Lo,Image as pl,ImageBackground as fl,KeyboardAvoidingView as ml,Picker as hl,ProgressBar as bl,RefreshControl as vl,SafeAreaView as Sl,SectionList as wl,StatusBar as kl,Touchable as Cl,TouchableNativeFeedback as xl,VirtualizedList as Tl,YellowBox as Il,LogBox as El,DeviceEventEmitter as Rl,useColorScheme as Vl,useLocaleContext as Bl,useWindowDimensions as Al}from"react-native-web";import*as Ye from"react-native-web";import{createElement as Dl,forwardRef as Ml}from"react";function rt(e){let t=Ml((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...u}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&u[`aria-${d}`]===void 0&&(u[`aria-${d}`]=a[d]);for(let[d,y]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&u[`aria-${y}`]===void 0&&(u[`aria-${y}`]=i[d]);return Dl(e,{...u,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=rt(Ye.View),c=rt(Ye.Text),Pl=rt(Ye.TextInput),K=rt(Ye.TouchableOpacity),zl=rt(Ye.TouchableHighlight),Kl=rt(Ye.TouchableWithoutFeedback),Fl=rt(Ye.Pressable),Vr=rt(Ye.ScrollView),zn=rt(Ye.Modal),Ol=rt(Ye.Switch),Ll=rt(Ye.ActivityIndicator),Wl=rt(Ye.Button),_l=Ye.findNodeHandle,xe={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let y=document.createElement("p");y.textContent=t,y.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(y)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let u=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let y of u){let g=document.createElement("button");g.type="button",g.textContent=y.text??"OK",g.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${y.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,g.onclick=()=>{d(),y.onPress?.()},i.appendChild(g)}n.addEventListener("cancel",y=>{y.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};import Wo from"@buoy-gg/shared-ui/web/asyncStorage";import{JsModal as $l,ModalHeader as Ae,TabSelector as Nl,parseValue as ql,devToolsStorageKeys as rr,macOSColors as Hl,night as Oe,ToolEmptyState as jl,Filter as Ul,RefreshCw as Jl,Search as Gl,SearchBar as Yl,PowerToggleButton as Ql,ToolbarCopyButton as Kn,ToolbarClearButton as Zl,truncatePayload as Zr,TickProvider as Fn,useLimit as Xl,TIER_LIMITS as es,windowDragProps as ts,usePersistedState as Xr,monoFont as eo}from"@buoy-gg/shared-ui/web";V();V();V();var le={async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as Le,useCallback as Qe,useState as Ht,useEffect as or,useRef as _o}from"react";import{absoluteFill as On,useLimit as Ln,TIER_LIMITS as rs,monoFont as Br}from"@buoy-gg/shared-ui/web";import{Database as Wn,Zap as os,ProBadge as _n,ProUpgradeModal as ns,ToolEmptyState as as,resolveListEmptyState as is}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";V();import{useCallback as $n,useState as ls}from"react";V();import{memo as ss}from"react";import{macOSColors as pe,night as se,CompactRow as cs,TypeBadge as Nn,HardDrive as ds,Square as us,CheckSquare as ys,Edit3 as gs,EyeOff as ps,Pin as qn,Trash2 as fs,ExpandedInfoRow as $o,PillBadge as Ar,monoFont as nr}from"@buoy-gg/shared-ui/web";V();import{gameUIColors as to}from"@buoy-gg/shared-ui/web";function No(e){switch(e){case"mmkv":return"MMKV";case"async":return"Async";case"secure":return"Secure";default:return e}}function Hn(e){switch(e){case"mmkv":return to.info;case"async":return to.warning;case"secure":return to.success;default:return to.muted}}V();function Et(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 jn(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 ms=40;function hs(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>ms?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function bs(e){let t=Et(e),r=hs(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as vs}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as Ss,jsx as W,jsxs as Re}from"react/jsx-runtime";var Un=[pe.semantic.info,pe.semantic.success,pe.semantic.warning,pe.semantic.debug,"#FF6B9D","#00D9FF"];function Jn(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Un[t%Un.length]}var Gn=e=>{switch(e){case"required_present":return{label:"Valid",color:pe.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:pe.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:pe.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:pe.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:pe.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:pe.text.secondary,sublabel:String(e)}}},ws=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),ks=ss(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:u,onHideKey:d,isPinned:y=false,onTogglePin:g,onEditKey:p,onToggleKey:f,onDeleteKey:x,editBlockedReason:h}){let b=p!=null&&h==null,S=Gn(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,E=No(e.storageType),D=jn(e.value),C=D!==null&&typeof D=="object",R=Re(l,{style:_.expandedContainer,children:[W($o,{label:"Storage",children:W(Ar,{color:qo(e.storageType),children:E})}),e.storageType==="mmkv"&&e.instanceId&&W($o,{label:"Instance",children:W(Ar,{color:Jn(e.instanceId),icon:W(ds,{size:9,color:Jn(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Re($o,{label:"Updates",children:[W(Ar,{color:pe.semantic.warning,children:String(i)}),i>1&&u&&W(K,{onPress:u,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(c,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(vs,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Re(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Value:"}),W(c,{style:_.expandedValue,numberOfLines:3,children:ws(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Re(Ss,{children:[Re(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Type:"}),W(Nn,{type:Et(e.value)})]}),Re(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Expected:"}),W(Nn,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Re(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Expected:"}),W(c,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Re(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Info:"}),W(c,{style:_.expandedDescription,children:e.description})]}):null,h?Re(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Edit:"}),W(c,{style:_.expandedDescription,children:h})]}):null,g||d||b?Re(l,{style:_.actionRow,children:[b?Re(K,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&f?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&f?f(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(gs,{size:13,color:se.color.onAccent}),W(c,{style:_.editButtonText,children:T&&f?"Toggle":"Edit"})]}):null,g?Re(K,{style:[_.actionChip,y&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>g(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(qn,{size:12,active:y,color:se.color.accent}),W(c,{style:[_.actionChipText,{color:se.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,d?Re(K,{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(ps,{size:12,color:se.color.warning}),W(c,{style:[_.actionChipText,{color:se.color.warning}],children:"Hide from list"})]}):null,b&&x?Re(K,{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(fs,{size:12,color:se.color.danger}),W(c,{style:[_.actionChipText,{color:se.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},be=o?W(K,{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(ys,{size:18,color:se.color.accent}):W(us,{size:18,color:se.color.textTertiary})}):null;return Re(l,{style:[_.rowContainer,n&&_.rowContainerSelected],children:[be,Re(l,{style:_.compactRowWrapper,children:[W(cs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?Et(e.value):bs(e.value):void 0,secondaryAccessory:T?W(Ar,{size:"sm",color:e.value?pe.semantic.success:pe.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:R,isExpanded:t,expandedGlowColor:S.color,customBadge:Re(l,{style:_.badgeRow,children:[y&&W(qn,{size:12,active:true,color:se.color.accent}),W(Ar,{color:qo(e.storageType),children:E})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:pe.semantic.warning+"22",borderColor:pe.semantic.warning+"55"}],pointerEvents:"none",children:W(c,{style:[_.absCountText,{color:pe.semantic.warning}],children:String(i)})})]})]})}),qo=e=>{switch(e){case"mmkv":return pe.semantic.info;case"async":return pe.semantic.warning;case"secure":return pe.semantic.success;default:return pe.text.secondary}},_=ge.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:se.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:nr},expandedValue:{fontSize:11,color:se.color.textSecondary,fontFamily:nr,flex:1},expandedExpected:{fontSize:11,color:pe.semantic.warning,fontFamily:nr,flex:1},expandedDescription:{fontSize:11,color:se.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:se.color.bg,borderRadius:6,borderWidth:1,borderColor:se.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:se.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:nr},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:se.color.surface,borderWidth:1,borderColor:se.color.border},dangerChip:{borderColor:se.color.danger+"55"},actionChipActive:{backgroundColor:se.color.accentSoft,borderColor:se.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:se.color.accent},editButtonText:{color:se.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:nr},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:nr,color:se.color.accent}});import{SectionHeader as ar,night as Ho}from"@buoy-gg/shared-ui/web";import{jsx as bt,jsxs as ro}from"react/jsx-runtime";function jo(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function Yn({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:u,eventCountByKey:d,onViewHistory:y,onHideKey:g,pinnedKeys:p,onTogglePin:f,onEditKey:x,onToggleKey:h,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=$n(R=>jo(R),[]),[E,D]=ls(null),C=$n(R=>{if(!R||typeof R.key!="string")return;if(T){T(R);return}let Q=I(R);D(be=>be===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?ro(l,{style:Dr.sectionContainer,children:[ro(ar,{children:[bt(ar.Title,{children:e}),bt(ar.Badge,{count:0,color:n})]}),bt(l,{style:Dr.emptySection,children:bt(c,{style:Dr.emptySectionText,children:o})})]}):r.length===0?null:ro(l,{style:Dr.sectionContainer,children:[e?ro(ar,{children:[bt(ar.Title,{children:e}),t>=0&&bt(ar.Badge,{count:t,color:n})]}):null,bt(l,{style:Dr.sectionContent,children:r.map(R=>{let Q=I(R);return bt(l,{ref:w?be=>w(Q,be):void 0,collapsable:false,children:bt(ks,{storageKey:R,isExpanded:!a&&E===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:u,eventCount:d?.[R.key],onViewHistory:y?()=>y(R.key):void 0,onHideKey:g,onEditKey:x,onToggleKey:h,onDeleteKey:b,editBlockedReason:S?.(R),isPinned:p?.has(R.key),onTogglePin:f})},Q)})})]})}var Dr=ge.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:Ho.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:Ho.color.border,alignItems:"center"},emptySectionText:{color:Ho.color.textTertiary,fontSize:11,textAlign:"center"}});V();import{useCallback as Cs,useMemo as Qn,useRef as Zn,useState as Xn}from"react";import{EyeOff as xs,FileJson as Ts,HardDrive as Is,night as G,macOSColors as ir,Pin as Es,PillBadge as oo,Trash2 as Rs,TypeBadge as Vs,useSafeAreaInsets as Bs,monoFont as Rt}from"@buoy-gg/shared-ui/web";import{DataViewer as As,LiveExplorer as Ds,ValueEditModal as Ms,updateNestedDataByPath as Ps,deleteNestedDataByPath as zs}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as F,jsxs as fe}from"react/jsx-runtime";var Ks=300,ut="buoy-storage-detail";function Fs(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ut}-explorer-root`:`${ut}-explorer-${e.map(t).filter(Boolean).join("-")}`}var ea=[ir.semantic.info,ir.semantic.success,ir.semantic.warning,ir.semantic.debug,"#FF6B9D","#00D9FF"];function ta(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ea[t%ea.length]}function Os({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:u=false,onTogglePin:d,applySafeAreaInset:y}){let g=Bs(),p=y?g.bottom:0,f=t==null,x=Gn(e.status),h=No(e.storageType),[b,S]=Xn(false),[w,T]=Xn(0),I=Zn(null),E=Qn(()=>jn(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:E,R=Cs(H=>{let de=typeof H=="string"?H:JSON.stringify(H);I.current={raw:de,value:H},o(de).catch(ee=>{I.current=null,xe.alert("Couldn't save",ee instanceof Error?ee.message:String(ee))})},[o]),Q=Zn(C);Q.current=C;let be=Qn(()=>{if(f)return{update:(H,de)=>{let ee=H.length===0?de:Ps(Q.current,H,de);R(ee)},remove:H=>{H.length!==0&&R(zs(Q.current,H))}}},[f,R]),ve=d||i||f&&a;return fe(l,{style:A.screen,children:[F(l,{testID:`${ut}-key`,accessibilityLabel:e.key}),fe(Vr,{testID:`${ut}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[F(l,{style:A.section,children:fe(l,{style:A.editorContainer,children:[fe(l,{style:A.sectionHeaderRow,children:[F(c,{testID:`${ut}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),f?fe(K,{onPress:()=>S(true),testID:`${ut}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Ts,{size:13,color:G.color.accent}),F(c,{style:A.rawButtonText,children:"Raw"})]}):null]}),fe(l,{style:A.sectionBody,children:[F(Ds,{editable:f,label:"Value",value:C,defaultExpanded:["Value"],writer:be,dataVersion:w,testIDForPath:Fs,debounceMs:Ks}),f?F(c,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):F(c,{style:A.blockedText,testID:`${ut}-edit-blocked`,children:t})]})]})}),F(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[F(c,{style:A.sectionHeaderPlain,children:"Key Details"}),fe(l,{style:A.infoBody,children:[fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Status:"}),F(oo,{color:x.color,testID:`${ut}-status`,children:x.label}),F(c,{style:A.infoDim,children:x.sublabel})]}),fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Storage:"}),F(oo,{color:qo(e.storageType),testID:`${ut}-backend`,children:h}),F(c,{style:A.infoDim,children:Et(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Instance:"}),F(oo,{color:ta(e.instanceId),icon:F(Is,{size:9,color:ta(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Updates:"}),F(oo,{color:ir.semantic.warning,children:String(r)}),r>1&&n&&F(K,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:F(c,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Expected:"}),F(Vs,{type:e.expectedType}),fe(c,{style:A.infoDim,children:["got ",Et(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Expected:"}),F(c,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?fe(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Info:"}),F(c,{style:A.infoDescription,children:e.description})]}):null]})]})}),F(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[F(c,{style:A.sectionHeaderPlain,children:"Value Explorer"}),F(l,{style:A.viewerBody,testID:`${ut}-viewer`,children:C!==null&&typeof C=="object"?F(As,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):F(c,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),ve?fe(l,{style:A.actionRow,children:[d?fe(K,{style:[A.actionChip,u&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:u?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Es,{size:12,active:u,color:G.color.accent}),F(c,{style:[A.actionChipText,{color:G.color.accent}],children:u?"Unpin":"Pin to top"})]}):null,i?fe(K,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(xs,{size:12,color:G.color.warning}),F(c,{style:[A.actionChipText,{color:G.color.warning}],children:"Hide from list"})]}):null,f&&a?fe(K,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Rs,{size:12,color:G.color.danger}),F(c,{style:[A.actionChipText,{color:G.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&f?F(Ms,{path:[],value:C,onSave:H=>{R(H),T(de=>de+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=ge.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:G.color.surface,borderRadius:6,borderWidth:1,borderColor:G.color.accent+"4D",overflow:"hidden",shadowColor:G.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:G.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:G.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:G.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Rt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:G.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:G.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:G.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:G.color.surface,borderRadius:6,borderWidth:1,borderColor:G.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:G.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:G.color.textSecondary,borderBottomWidth:1,borderBottomColor:G.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Rt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:G.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Rt},infoDim:{color:G.color.textTertiary,fontSize:10,fontFamily:Rt},infoExpected:{fontSize:11,color:ir.semantic.warning,fontFamily:Rt,flex:1},infoDescription:{fontSize:11,color:G.color.textSecondary,flex:1},rawValueText:{color:G.color.textSecondary,fontSize:11,fontFamily:Rt,lineHeight:16,padding:12},viewerBody:{backgroundColor:G.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Rt,color:G.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:G.color.surface,borderWidth:1,borderColor:G.color.border},dangerChip:{borderColor:G.color.danger+"55"},actionChipActive:{backgroundColor:G.color.accentSoft,borderColor:G.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Rt}});V();V();import{macOSColors as Uo,night as Vt,monoFont as Ls}from"@buoy-gg/shared-ui/web";import{jsx as Jo,jsxs as Ws}from"react/jsx-runtime";var _s=[{id:"all",label:"All Types",color:null},{id:"async",label:le.async,color:Uo.semantic.warning},{id:"mmkv",label:le.mmkv,color:Uo.semantic.info},{id:"secure",label:"Secure",color:Uo.semantic.success}];function Go({active:e,onChange:t,counts:r}){return Jo(l,{style:Mr.row,children:_s.filter(o=>le.hasSecure||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??Vt.color.accent;return Ws(K,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[Mr.pill,{borderColor:Vt.color.border},n&&[Mr.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:Vt.color.accentSoft,borderColor:Vt.color.accentBorderStrong}]],children:[Jo(c,{style:[Mr.label,n&&{color:a,fontWeight:"600"}],children:o.label}),Jo(c,{style:[Mr.value,{color:n?a:Vt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function ra(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var Mr=ge.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:Vt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Vt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:Vt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:Ls,lineHeight:14}});import{macOSColors as Bt,night as Ke,monoFont as $s}from"@buoy-gg/shared-ui/web";V();function Yo(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function Ns(){return null}function oa(){return"Session storage is unavailable in this browser context."}import{jsx as jt,jsxs as Pr}from"react/jsx-runtime";var ey=Yo();function qs({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:u="all",onStorageTypeChange:d,showStatus:y=true}){let g=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return Pr(l,{style:We.container,children:[y?Pr(l,{style:We.filtersRow,children:[Pr(K,{style:[We.filterChip,a==="all"&&[We.filterChipActive,{backgroundColor:Ke.color.accentSoft,borderColor:Ke.color.accentBorderStrong,shadowColor:Ke.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[jt(c,{style:[We.filterValue,{color:Ke.color.text}],children:g.validCount}),jt(c,{style:We.filterLabel,children:"Valid"})]}),Pr(K,{style:[We.filterChip,a==="missing"&&[We.filterChipActive,{backgroundColor:Bt.semantic.error+"10",borderColor:Bt.semantic.error+"30",shadowColor:Bt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[jt(c,{style:[We.filterValue,{color:g.missingCount>0?Bt.semantic.error:Ke.color.textTertiary}],children:g.missingCount}),jt(c,{style:We.filterLabel,children:"Missing"})]}),Pr(K,{style:[We.filterChip,a==="issues"&&[We.filterChipActive,{backgroundColor:Bt.semantic.warning+"10",borderColor:Bt.semantic.warning+"30",shadowColor:Bt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[jt(c,{style:[We.filterValue,{color:g.issuesCount>0?Bt.semantic.warning:Ke.color.textTertiary}],children:g.issuesCount}),jt(c,{style:We.filterLabel,children:"Issues"})]})]}):null,d&&jt(Go,{active:u,onChange:d,counts:{all:g.totalCount,async:g.asyncCount,mmkv:g.mmkvCount,secure:g.secureCount}})]})}var We=ge.create({container:{backgroundColor:Ke.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Ke.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:Ke.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Ke.color.border,marginHorizontal:4},subtitleText:{color:Ke.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:Ke.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Ke.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Ke.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:Ke.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:$s,lineHeight:20}});V();Nt();import{useState as Qo,useEffect as Hs,useCallback as js,useRef as Us}from"react";import Js from"@buoy-gg/shared-ui/web/asyncStorage";V();function At(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function Zo(e=[]){let[t,r]=Qo([]),[o,n]=Qo(true),[a,i]=Qo(null),u=JSON.stringify(e),d=Us(e);d.current=e;let y=js(async()=>{let g=d.current;n(true),i(null);try{let p=await Js.getAllKeys();if(!p||p.length===0){r([]),n(false);return}let f=await Gr(p),x=[];f.forEach(([h,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=g.find(E=>At(E,"async")?typeof E=="string"?E===h:E.key===h:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:h,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),g.forEach(h=>{if(!At(h,"async"))return;let b=typeof h=="string"?h:h.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof h=="object"&&h.expectedValue!==void 0&&{expectedValue:h.expectedValue},...typeof h=="object"&&h.expectedType!==void 0&&{expectedType:h.expectedType},...typeof h=="object"&&h.description!==void 0&&{description:h.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[u]);return Hs(()=>{y()},[y]),{storageKeys:t,isLoading:o,error:a,refresh:y}}V();import{subscribeToBrowserStorage as Gs}from"@buoy-gg/shared-ui/web/utils";var Xo=new Set,en,Ys=false,Qs=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),na=e=>[...Qs].some(t=>e.startsWith(t));async function Zs(){en||typeof window>"u"||(en=Gs(e=>{if(Ys||e.area!=="localStorage"||e.key!==void 0&&na(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([a])=>!na(a)));let n={action:r,data:o,timestamp:new Date};for(let a of[...Xo])try{a(n)}catch{}}))}function aa(e){return Xo.add(e),()=>{Xo.delete(e)}}function Xs(){return!!en}V();import{useState as lr,useEffect as ia,useCallback as la,useRef as sa}from"react";function ec(e,t,r=[]){let[o,n]=lr([]),[a,i]=lr(true),[u,d]=lr(null),y=JSON.stringify(r),g=sa(r);g.current=r;let p=la(()=>{let f=g.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys();if(!x||x.length===0){let b=f.filter(S=>At(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,E=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:E}});n(b),i(false);return}let h=[];x.forEach(b=>{let{value:S,type:w}=ht(e,b),T=f.find(D=>At(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=zo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let E={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};h.push(E)}),f.forEach(b=>{if(!At(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;h.some(w=>w.key===S)||h.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(h)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,y]);return ia(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:u,refresh:p}}function ca(e,t=[]){let[r,o]=lr([]),[n,a]=lr(true),[i,u]=lr(null),d=JSON.stringify(t),y=sa(t);y.current=t;let g=la(()=>{let p=y.current;a(true),u(null);try{let f=[];e.forEach(({instance:x,id:h})=>{let b=x.getAllKeys();!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=ht(x,S),I=p.find(C=>At(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),E="optional_present";I&&(w===void 0?E="required_missing":typeof I=="object"&&I.expectedValue!==void 0?E=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?E=zo(T,I.expectedType)?"required_present":"required_wrong_type":E="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:h,status:E,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};f.push(D)})}),p.forEach(x=>{if(!At(x,"mmkv"))return;let h=typeof x=="string"?x:x.key;if(!f.some(b=>b.key===h)){let b=e[0]?.id||"mmkv.default";f.push({key:h,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(f)}catch(f){u(f instanceof Error?f:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return ia(()=>{g()},[g]),{storageKeys:r,isLoading:n,error:i,refresh:g}}V();import{useState as tn,useEffect as tc,useCallback as da,useRef as no}from"react";var rc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",oc=3e3;function ua(e){return JSON.stringify(e)}function nc(e=[],t={}){let{pollMs:r=oc}=t,o=no(e);o.current=e;let n=JSON.stringify(e),[a,i]=tn([]),[u,d]=tn(true),[y,g]=tn(null),p=no(ua([])),f=no(false),x=no(false),h=da(S=>{let w=ua(S);w!==p.current&&(p.current=w,i(S))},[]),b=da(async()=>{if(!x.current){x.current=true;try{let S=te.getModule(),w=te.getAll(),T=o.current.filter(C=>At(C,"secure")),I=C=>T.find(R=>(typeof R=="string"?R:R.key)===C);if(!S||w.length===0&&T.length===0){h([]),f.current=true,d(false);return}f.current||d(true),g(null);let E=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(R=>R.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let R=I(C.key),Q=typeof R=="object"?R:void 0,be={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},ve=Q?.description??C.description;if(C.options.requireAuthentication){E.push({key:C.key,value:rc,storageType:"secure",status:R?"required_present":"optional_present",category:R?"required":"optional",description:ve??"Protected by biometric authentication \u2014 value not read by DevTools",...be,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let H=null;try{H=await S.getItemAsync(C.key,C.options)}catch{}if(H===null&&!R)continue;let de=H;if(H)try{de=JSON.parse(H)}catch{de=H}let ee="optional_present";if(R)if(H===null)ee="required_missing";else if(Q?.expectedValue!==void 0)ee=String(de)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let ie=de===null?"null":Array.isArray(de)?"array":typeof de,He=Q.expectedType.toLowerCase();ee=ie===He||He==="string"&&typeof H=="string"?"required_present":"required_wrong_type"}else ee="required_present";E.push({key:C.key,value:H===null?void 0:de,storageType:"secure",status:ee,category:R?"required":"optional",...ve&&{description:ve},...be,...C.options.keychainService&&{instanceId:C.options.keychainService}})}h(E)}catch(S){g(S instanceof Error?S:new Error("Failed to read SecureStore")),h([])}finally{f.current=true,x.current=false,d(false)}}},[h,n]);return tc(()=>{b();let S=te.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:u,error:y,refresh:b}}V();import{useState as ao,useEffect as io}from"react";function rn(e=false){let[t,r]=ao([]),[o,n]=ao(true),a=()=>{n(true);try{let i=Pe.getAll().map(u=>{let{instance:d,id:y,encrypted:g,readOnly:p}=u,f=d.getAllKeys()?.length||0;return{id:y,instance:d,encrypted:g,readOnly:p,keyCount:f,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return io(()=>{a()},[]),io(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function ya(e){let[t,r]=ao(null);return io(()=>{if(!Pe){r(null);return}let o=Pe.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys()?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function ac(e){let[t,r]=ao(false);return io(()=>{if(!Pe){r(false);return}r(Pe.has(e))},[e]),t}V();import{useEffect as ic,useRef as ga}from"react";import{Check as lc,macOSColors as Ut}from"@buoy-gg/shared-ui/web";import{jsx as sr,jsxs as sc}from"react/jsx-runtime";var cc=2600,pa=180;function dc({onDone:e}){let t=ga(new qt.Value(0)).current,r=ga(e);return r.current=e,ic(()=>{let o=qt.sequence([qt.timing(t,{toValue:1,duration:pa,easing:Rr.out(Rr.quad),useNativeDriver:true}),qt.delay(cc),qt.timing(t,{toValue:0,duration:pa,easing:Rr.in(Rr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),sr(qt.View,{pointerEvents:"box-none",style:[cr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:sc(K,{activeOpacity:.85,onPress:()=>r.current(),style:cr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[sr(l,{style:cr.tick,children:sr(lc,{size:10,color:Ut.semantic.success})}),sr(c,{style:cr.saved,children:"Saved"}),sr(l,{style:cr.divider}),sr(c,{style:cr.detail,children:"applies on next launch"})]})})}var cr=ge.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:Ut.background.card,borderWidth:ge.hairlineWidth,borderColor:Ut.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:Ut.semantic.successBackground},saved:{color:Ut.text.primary,fontSize:12,fontWeight:"600"},divider:{width:ge.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Ut.border.default},detail:{color:Ut.text.muted,fontSize:12}});V();import{useState as uc,useEffect as yc}from"react";import{Trash2 as lo,CopyButton as gc,SquareDashed as pc,X as fc,ProUpgradeModal as mc,monoFont as hc}from"@buoy-gg/shared-ui/web";import{macOSColors as fa,night as ot}from"@buoy-gg/shared-ui/web";import{useIsPro as bc}from"@buoy-gg/license/web";import ma from"@buoy-gg/shared-ui/web/asyncStorage";import{jsx as _e,jsxs as ha}from"react/jsx-runtime";function vc({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[u,d]=uc(false),y=bc();yc(()=>{u&&y&&d(false)},[u,y]);let g=()=>{if(!y){d(true);return}xe.alert(`Clear ${le.asyncFull}`,`Delete all ${le.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await ma.clear(),o?.()}catch(E){xe.alert("Error",`Failed: ${E}`)}}}])},p=(E,D)=>{if(!y){d(true);return}xe.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(R=>R.id===E);C&&(C.instance.clearAll(),o?.())}catch(C){xe.alert("Error",`Failed: ${C}`)}}}])},f=()=>{if(!y){d(true);return}xe.alert(`Clear All ${le.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(E=>E.instance.clearAll()),o?.()}catch(E){xe.alert("Error",`Failed: ${E}`)}}}])},x=()=>{if(!y){d(true);return}xe.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 ma.clear(),t.forEach(E=>E.instance.clearAll()),o?.()}catch(E){xe.alert("Error",`Failed: ${E}`)}}}])},h=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=h&&!S,T=b&&!S,I=b&&t.length>1&&!S;return ha(l,{style:yt.container,children:[a&&_e(K,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[yt.actionButton,n&&yt.actionButtonActive],children:n?ha(l,{style:yt.selectModeActiveContainer,children:[_e(fc,{size:14,color:ot.color.accent}),i>0&&_e(c,{style:yt.selectedCountText,children:i})]}):_e(pc,{size:16,color:ot.color.textSecondary})}),!n&&_e(gc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:yt.actionButton,colors:{idle:ot.color.textSecondary,success:fa.semantic.success,error:fa.semantic.error}}),!n&&S&&_e(K,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:yt.actionButton,children:_e(lo,{size:16,color:ot.color.danger})}),!n&&w&&_e(K,{onPress:g,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${le.asyncFull}`,accessibilityRole:"button",style:yt.actionButton,children:_e(lo,{size:16,color:ot.color.danger})}),!n&&I&&_e(K,{onPress:f,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${le.mmkv} instances`,accessibilityRole:"button",style:yt.actionButton,children:_e(lo,{size:16,color:ot.color.danger})}),!n&&T&&t.length===1&&_e(K,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${le.mmkv} instance`,accessibilityRole:"button",style:yt.actionButton,children:_e(lo,{size:16,color:ot.color.danger})}),_e(mc,{visible:u,onClose:()=>d(false),featureName:"Storage Editing"})]})}var yt=ge.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:ot.color.buttonSurface,borderWidth:1,borderColor:ot.color.border},actionButtonActive:{backgroundColor:ot.color.accentSoft,borderColor:ot.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:ot.color.accent,fontFamily:hc}});V();import{useState as Sc,useEffect as wc}from"react";import{Trash2 as kc,CopyButton as Cc,CheckSquare as xc,EyeOff as Tc,ProUpgradeModal as Ic,monoFont as Ec}from"@buoy-gg/shared-ui/web";import{macOSColors as ba,night as $e}from"@buoy-gg/shared-ui/web";import{useIsPro as Rc}from"@buoy-gg/license/web";V();Nt();function Vc(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 va(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 tr(r.map(a=>a.key));for(let a of n)await te.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let u=i.instanceId||"default";a[u]||(a[u]=[]),a[u].push(i.key)}),Object.entries(a).forEach(([i,u])=>{let d=t.find(y=>y.id===i);d&&u.forEach(y=>Vc(d.instance,y))})}}import{jsx as vt,jsxs as zr}from"react/jsx-runtime";function Bc({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[u,d]=Sc(false),y=Rc();wc(()=>{u&&y&&d(false)},[u,y]);let g=e.length,p=g===i&&i>0,f=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:g,keys:b,timestamp:new Date().toISOString()}},x=()=>{g!==0&&o?.(e)},h=()=>{if(g!==0){if(!y){d(true);return}xe.alert("Delete Selected Keys",`Delete ${g} selected key${g>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await va(e,t),r?.()}catch(b){xe.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return g===0?null:zr(l,{style:gt.container,children:[zr(l,{style:gt.leftSection,children:[zr(K,{style:gt.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[vt(xc,{size:14,color:p?$e.color.accent:$e.color.textSecondary}),vt(c,{style:gt.selectAllText,children:p?"Deselect All":"Select All"})]}),vt(l,{style:gt.countBadge,children:zr(c,{style:gt.countText,children:[g," selected"]})})]}),zr(l,{style:gt.actionsSection,children:[vt(Cc,{value:f(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:gt.actionButton,colors:{idle:$e.color.accent,success:ba.semantic.success,error:ba.semantic.error}}),o&&vt(K,{style:gt.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:vt(Tc,{size:14,color:$e.color.warning})}),vt(K,{style:gt.actionButton,onPress:h,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:vt(kc,{size:14,color:$e.color.danger})})]}),vt(Ic,{visible:u,onClose:()=>d(false),featureName:"Storage Editing"})]})}var gt=ge.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:$e.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:$e.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:$e.color.surface,borderRadius:6,borderWidth:1,borderColor:$e.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:$e.color.textSecondary},countBadge:{backgroundColor:$e.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:$e.color.accent,fontFamily:Ec},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:$e.color.surface,borderWidth:1,borderColor:$e.color.border}});V();var on=new Set;function Ac(e){return on.add(e),()=>{on.delete(e)}}function Dc(){on.forEach(e=>{try{e()}catch{}})}V();import Mc from"@buoy-gg/shared-ui/web/asyncStorage";function nn(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 Sa(e,t){if(e.storageType==="mmkv"){let r=xa(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(ka(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function Pc(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 wa(e,t,r=[]){let o=nn(e,r);if(o)throw new Error(o);let n=Sa(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await Mc.setItem(e.key,Ca(e,t));return}case"secure":{await te.setValue(e.key,Ca(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(u=>u.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,zc(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function ka(e){return e!==null&&typeof e=="object"}function Ca(e,t){return ka(e.value)?JSON.stringify(JSON.parse(t)):t}function xa(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function zc(e,t){switch(xa(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as dr,macOSColors as so,night as L,HardDrive as Ta}from"@buoy-gg/shared-ui/web";import{useIsPro as Kc}from"@buoy-gg/license/web";import{Fragment as Fc,jsx as q,jsxs as Te}from"react/jsx-runtime";var Ia=[so.semantic.info,so.semantic.success,so.semantic.warning,so.semantic.debug,"#FF6B9D","#00D9FF"];function ur(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ia[t%Ia.length]}var Ty=rs["storage.keys"].free;function Oc({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:E,onCloseDetail:D}){let C=Kc(),R=Ln("storage.keys"),Q=Ln("storage.mmkvInstances"),[be,ve]=Ht(false);or(()=>{be&&C&&ve(false)},[be,C]);let[H,de]=Ht("all"),ee=p!=null&&f!=null,ie=ee?p:H,He=ee?f:de,[je,ft]=Ht("all"),xt=S!=null&&w!=null,ue=xt?S:je,Qt=xt?w:ft,[re,Kt]=Ht(null),Ue=_o(null),mr=_o(0),oe=_o(new Map),ct=Qe((s,m)=>{m?oe.current.set(s,m):oe.current.delete(s)},[]),[Ft,hr]=Ht(0),[Ot,br]=Ht(false),[Zt,Tt]=Ht(new Set),{instances:ke}=rn(false),{storageKeys:$r,isLoading:Nr,error:qr,refresh:Lt}=Zo(e),xo=Le(()=>ke.map(s=>({instance:s.instance,id:s.id})),[ke]),{storageKeys:vr,isLoading:To,error:Sr,refresh:Xt}=ca(xo,e),Io=Le(()=>re?vr.filter(s=>s.instanceId===re):vr,[vr,re]),{storageKeys:Wt,isLoading:Hr,error:Eo,refresh:jr}=nc(e),N=Le(()=>[...$r,...Io,...Wt],[$r,Io,Wt]),Se=Le(()=>{if(!I)return null;let s=jo(I);return N.find(m=>jo(m)===s)??I},[I,N]),Ro=Nr||To||Hr,Ur=qr||Sr||Eo,Ce=Qe(()=>{Lt(),Xt(),jr()},[Lt,Xt,jr]),Xe=Qe(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),Vo=Qe(()=>{br(s=>(s&&Tt(new Set),!s))},[]),et=Qe((s,m)=>{let U=Xe(s);Tt(Z=>{let Ge=new Set(Z);return m?Ge.add(U):Ge.delete(U),Ge})},[Xe]),Bo=Qe(()=>{Tt(new Set),br(false),Ce()},[Ce]),wr=Qe(s=>{s.forEach(m=>n?.(m.key)),Tt(new Set),br(false)},[n]),_t=Qe(async(s,m)=>{if(!C)throw ve(true),new Error("Editing storage values is a Pro feature.");await wa(s,m,ke),Ce(),hr(U=>U+1)},[C,ke,Ce]),Ao=Qe(s=>{_t(s,JSON.stringify(!s.value)).catch(m=>{xe.alert("Couldn't save",m instanceof Error?m.message:String(m))})},[_t]),Jr=Qe((s,m)=>{if(!C){ve(true);return}xe.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await va([s],ke.map(U=>({id:U.id,instance:U.instance}))),Ce(),m?.()}catch(U){xe.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,ke,Ce]),kr=Qe(s=>nn(s,ke),[ke]),Do=Le(()=>{let s=N,m={valid:s.filter(J=>J.status==="required_present"||J.status==="optional_present").length,missing:s.filter(J=>J.status==="required_missing").length,issues:s.filter(J=>J.status==="required_wrong_value"||J.status==="required_wrong_type").length,total:s.length},U=s.filter(J=>J.storageType==="async"),Z=s.filter(J=>J.storageType==="mmkv"),Ge=s.filter(J=>J.storageType==="secure");return{summary:{valid:m.valid,missing:m.missing,issues:m.issues,total:m.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((J,Ee)=>(J[Ee.key]=Ee.value,J),{}),mmkv:Z.reduce((J,Ee)=>{let It=Ee.instanceId||"default";return J[It]||(J[It]={}),J[It][Ee.key]=Ee.value,J},{}),secure:Ge.reduce((J,Ee)=>(J[Ee.key]=Ee.value,J),{})}},[N]);or(()=>{i&&(i.current=N)},[N,i]),or(()=>{let s,m=aa(U=>{clearTimeout(s),s=setTimeout(()=>{Lt()},100)});return()=>{clearTimeout(s),m()}},[Lt]),or(()=>{let s,m=Ac(()=>{clearTimeout(s),s=setTimeout(Ce,100)});return()=>{clearTimeout(s),m()}},[Ce]),or(()=>{let s,m=Rn(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{Xt()},100))});return()=>{clearTimeout(s),m()}},[Xt,re]);let $t=Le(()=>{let s=N,m=s.filter(Z=>!ze(Z.key)),U=s.filter(Z=>ze(Z.key));return{totalCount:s.length,requiredCount:m.filter(Z=>Z.category==="required").length,missingCount:m.filter(Z=>Z.status==="required_missing").length,wrongValueCount:m.filter(Z=>Z.status==="required_wrong_value").length,wrongTypeCount:m.filter(Z=>Z.status==="required_wrong_type").length,presentRequiredCount:m.filter(Z=>Z.status==="required_present").length,optionalCount:m.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]),dt=Le(()=>{let s=N.filter(B=>!ze(B.key));ue!=="all"&&(s=s.filter(B=>B.storageType===ue));let m=s.filter(B=>B.status==="required_present"||B.status==="optional_present").length,U=s.filter(B=>B.status==="required_missing").length,Z=s.filter(B=>B.status==="required_wrong_type"||B.status==="required_wrong_value").length,Ge=0,J=0,Ee=0,It=0;return ie==="all"?(Ge=N.filter(B=>!ze(B.key)&&B.storageType==="async"&&(B.status==="required_present"||B.status==="optional_present")).length,J=N.filter(B=>!ze(B.key)&&B.storageType==="mmkv"&&(B.status==="required_present"||B.status==="optional_present")).length,Ee=N.filter(B=>!ze(B.key)&&B.storageType==="secure"&&(B.status==="required_present"||B.status==="optional_present")).length,It=Ge+J+Ee):ie==="missing"?(Ge=N.filter(B=>!ze(B.key)&&B.storageType==="async"&&B.status==="required_missing").length,J=N.filter(B=>!ze(B.key)&&B.storageType==="mmkv"&&B.status==="required_missing").length,Ee=N.filter(B=>!ze(B.key)&&B.storageType==="secure"&&B.status==="required_missing").length,It=Ge+J+Ee):ie==="issues"&&(Ge=N.filter(B=>!ze(B.key)&&B.storageType==="async"&&(B.status==="required_wrong_type"||B.status==="required_wrong_value")).length,J=N.filter(B=>!ze(B.key)&&B.storageType==="mmkv"&&(B.status==="required_wrong_type"||B.status==="required_wrong_value")).length,Ee=N.filter(B=>!ze(B.key)&&B.storageType==="secure"&&(B.status==="required_wrong_type"||B.status==="required_wrong_value")).length,It=Ge+J+Ee),{validCount:m,missingCount:U,issuesCount:Z,asyncCount:Ge,mmkvCount:J,secureCount:Ee,totalCount:It}},[N,ie,ue]);or(()=>{x?.({validCount:dt.validCount,missingCount:dt.missingCount,issuesCount:dt.issuesCount})},[x,dt.validCount,dt.missingCount,dt.issuesCount]);let er=Le(()=>[...N].sort((s,m)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[m.status]||999)}),[N]),vn=Le(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),Me=Le(()=>{let s=er;if(g&&g.size>0&&(s=s.filter(m=>g.has(m.storageType))),s=s.filter(m=>!Array.from(r).some(U=>m.key.includes(U))),a){let m=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(m))}switch(ie){case"all":s=s.filter(m=>m.status==="required_present"||m.status==="optional_present");break;case"missing":s=s.filter(m=>m.status==="required_missing");break;case"issues":s=s.filter(m=>m.status==="required_wrong_type"||m.status==="required_wrong_value");break}if(ue!=="all"&&(s=s.filter(m=>m.storageType===ue)),h&&h.size>0){let m=s.filter(Z=>h.has(Z.key)),U=s.filter(Z=>!h.has(Z.key));s=[...m,...U]}return s},[er,ie,ue,r,a,re,g,h]),v=Le(()=>Me.slice(0,R),[Me,R]),k=Le(()=>Math.max(0,Me.length-R),[Me.length,R]),P=k>0,j=Le(()=>{let s=Me.filter(m=>!ze(m.key));return{totalCount:Me.length,requiredCount:s.filter(m=>m.category==="required").length,missingCount:s.filter(m=>m.status==="required_missing").length,wrongValueCount:s.filter(m=>m.status==="required_wrong_value").length,wrongTypeCount:s.filter(m=>m.status==="required_wrong_type").length,presentRequiredCount:s.filter(m=>m.status==="required_present").length,optionalCount:s.filter(m=>m.category==="optional").length,mmkvCount:Me.filter(m=>m.storageType==="mmkv").length,asyncCount:Me.filter(m=>m.storageType==="async").length,secureCount:Me.filter(m=>m.storageType==="secure").length,devToolsCount:Me.filter(m=>ze(m.key)).length}},[Me]),Je=Le(()=>v.filter(s=>Zt.has(Xe(s))),[v,Zt,Xe]),Cr=Qe(()=>{let s=new Set(v.map(Xe));Tt(s)},[v,Xe]),xr=Qe(()=>{Tt(new Set)},[]),Tr=$t.requiredCount>0?Math.round($t.presentRequiredCount/$t.requiredCount*100):$t.totalCount>0?100:0,di=Tr>=90?"OPTIMAL":Tr>=70?"WARNING":"CRITICAL",ui=Tr>=90?dr.success:Tr>=70?dr.warning:dr.error;if(Se)return q(l,{style:O.root,children:q(Os,{storageKey:Se,editBlockedReason:kr(Se),eventCount:u?.[Se.key],onSave:s=>_t(Se,s),onViewHistory:y?()=>y(Se.key):void 0,onDeleteKey:s=>Jr(s,()=>D?.()),onHideKey:s=>{wr([s]),D?.()},isPinned:h?.has(Se.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Ro&&N.length===0)return Te(l,{style:O.emptyState,children:[q(Wn,{size:48,color:L.color.textTertiary}),q(c,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(Ur)return Te(l,{style:O.emptyState,children:[q(Wn,{size:48,color:dr.error}),q(c,{style:[O.emptyTitle,{color:dr.error}],children:"Error loading storage"}),q(c,{style:O.emptySubtitle,children:Ur.message})]});let yi=Te(Fc,{children:[ue==="mmkv"&&ke.length===0&&Te(l,{style:O.emptyMMKVState,children:[q(c,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),q(c,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),q(c,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
1
+ "use client";var qo=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var Ai=Object.getOwnPropertyNames;var Di=Object.prototype.hasOwnProperty;var to=(e,t)=>()=>(e&&(t=e(e=0)),t);var An=(e,t)=>{for(var r in t)qo(e,r,{get:t[r],enumerable:true})},Ho=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ai(t))!Di.call(e,n)&&n!==r&&qo(e,n,{get:()=>t[n],enumerable:!(o=Ri(t,n))||o.enumerable});return e},Mi=(e,t,r)=>(Ho(e,t,"default"),r&&Ho(r,t,"default"));var zi=e=>Ho(qo({},"__esModule",{value:true}),e);var Ki,B=to(()=>{"use strict";Ki=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Ut,hasCapacitorPlugin as Pi,installCapacitorBridge as Fi,interceptCapacitor as Oi,isCapacitorNative as Li}from"@buoy-gg/license/web";function Ar(){return Li()&&Pi(gt)}function Rt(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Dr))try{o(r)}catch{}}function Wi(e){return Dr.add(e),_i(),()=>{Dr.delete(e)}}async function ir(e){let{value:t}=await Ut(gt,"get",{key:e});return t??null}async function jo(){let{keys:e}=await Ut(gt,"keys");return Array.isArray(e)?e:[]}async function ro(e){return Promise.all(e.map(async t=>[t,await ir(t)]))}function _i(){Uo||!Ar()||!Fi()||(Uo=true,Oi({plugin:gt,methods:["set","remove","clear"],promise:async(e,t)=>{if(Dr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=jo().catch(()=>[]),u=await t();return Rt("clear",{keys:await i}),u}if(r===void 0)return t();let o=ir(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?Rt("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):Rt("removeItem",{key:r,prevValue:a}),n}}))}function Dn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Dn(r[o],n):n;return r}function Mn(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var gt,Dr,Uo,oo,no=to(()=>{"use strict";B();gt="Preferences";Dr=new Set;Uo=false;oo={getItem(e){return ir(e)},async setItem(e,t){let r=ir(e).catch(()=>null);await Ut(gt,"set",{key:e,value:String(t)}),Rt("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=ir(e).catch(()=>null);await Ut(gt,"remove",{key:e}),Rt("removeItem",{key:e,prevValue:await t})},async clear(){let e=await ro(await jo()).catch(()=>{});await Ut(gt,"clear"),Rt("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return jo()},multiGet(e){return ro(e)},async multiSet(e){let t=ro(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Ut(gt,"set",{key:r,value:String(o)}))),Rt("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=ro(e).catch(()=>{});await Promise.all(e.map(r=>Ut(gt,"remove",{key:r}))),Rt("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await ir(e);await oo.setItem(e,JSON.stringify(Dn(Mn(r),Mn(t))))},async multiMerge(e){for(let[t,r]of e)await oo.mergeItem(t,r)}}});import $i from"@buoy-gg/shared-ui/web/asyncStorage";var it,zn,oe,pt=to(()=>{"use strict";B();no();it=()=>Ar()?oo:$i,zn={getItem:e=>it().getItem(e),setItem:(e,t)=>it().setItem(e,t),removeItem:e=>it().removeItem(e),clear:()=>it().clear(),getAllKeys:()=>it().getAllKeys(),multiGet:e=>it().multiGet(e),multiSet:e=>it().multiSet(e),multiRemove:e=>it().multiRemove(e),mergeItem:(e,t)=>it().mergeItem(e,t),multiMerge:e=>it().multiMerge(e)},oe=zn});var Kn={};An(Kn,{asyncStorage:()=>Oe,asyncStorageCaps:()=>Pn,default:()=>Fn,readMany:()=>ao,removeMany:()=>lr,writeMany:()=>Mr});async function ao(e){if(typeof Oe.multiGet=="function")return await Oe.multiGet(e);let t=await Oe.getMany(e);return e.map(r=>[r,t[r]??null])}async function Mr(e){if(typeof Oe.multiSet=="function")return Oe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Oe.setMany(t)}async function lr(e){return typeof Oe.multiRemove=="function"?Oe.multiRemove(e):Oe.removeMany(e)}var Oe,Pn,Fn,Gt=to(()=>{"use strict";B();pt();Oe=oe,Pn={hasLegacyMultiApi:typeof Oe?.multiGet=="function",hasMergeApi:typeof Oe?.mergeItem=="function"};Fn=Oe});B();B();pt();Gt();import{classifyPreviewItem as Ni,createRestoreScope as qi,emptyRestoreResult as On,failedRestore as Hi,isDevToolsStorageKey as St,registerStateSnapshotProvider as ji,unionKeys as io,wontApply as zr}from"@buoy-gg/shared-ui/web";B();pt();Gt();import{isDevToolsStorageKey as Ui}from"@buoy-gg/shared-ui/web";async function lo(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!Ui(r));t.length!==0&&await lr(t)}async function Gi(){await oe.clear()}B();B();B();function wt(e,t){let r=e.getString(t);if(r!==void 0&&r!=="")return{value:r,type:"string"};let o=e.getNumber(t);if(o!==void 0)return{value:o,type:"number"};let n=e.getBoolean(t);if(n!==void 0)return{value:n,type:"boolean"};if(r==="")return{value:"",type:"string"};let a=e.getBuffer(t);return a!==void 0?{value:`<ArrayBuffer ${a.byteLength} bytes>`,type:"buffer"}:{value:void 0,type:"unknown"}}function Ji(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Go(e,t){return e===t}var Yi=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,wt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=wt(e,n),u=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:u,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:u,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Jo=new Yi;var Ln=e=>Jo.addListener(e);var Qi=class{constructor(){this.instances=new Map}register(e,t,r){let o={id:e,instance:t,encrypted:r?.encrypted??false,readOnly:t.isReadOnly??false};this.instances.set(e,o)}unregister(e){this.instances.delete(e)}get(e){return this.instances.get(e)}getAll(){return Array.from(this.instances.values())}has(e){return this.instances.has(e)}count(){return this.instances.size}},Ke=new Qi;function Wn(e,t,r){Ke.register(e,t,r),Jo.addInstance(t,e)}function _n(e){Jo.removeInstance(e),Ke.unregister(e)}B();var Xi=class{constructor(){this.module=null;this.keys=new Map;this.listeners=new Set}register(e,t){let r=this.signature();this.module=e;for(let o of t){let n=typeof o=="string"?{key:o,options:{}}:{key:o.key,description:o.description,options:{keychainService:o.keychainService,requireAuthentication:o.requireAuthentication,authenticationPrompt:o.authenticationPrompt}};this.keys.set(n.key,n)}this.signature()!==r&&this.notify()}unregister(e){this.keys.delete(e)&&this.notify()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){let t=this.keys.get(e);!this.module||!t||await this.module.deleteItemAsync(e,t.options)}async setValue(e,t){let r=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!r)throw new Error(`SecureStore key "${e}" is not registered`);if(r.options.requireAuthentication)throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`);await this.module.setItemAsync(e,t,r.options)}},te=new Xi;function Zi(e,t){te.register(e,t)}function el(e){te.unregister(e)}function $n(e,t){e.remove?e.remove(t):e.delete?.(t)}function tl(){return{canCapture:true,canRestore:true}}async function Nn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!St(i)),r=(await ao(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:u}of Ke.getAll())try{o[i]=u.getAllKeys().filter(d=>!St(d)).map(d=>{let{value:y,type:g}=wt(u,d);return g==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:y,valueType:g}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=te.getModule();for(let{key:i,options:u}of te.getAll()){if(u.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,u)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function rl(){let{data:e,warnings:t}=await Nn();return{data:e,warnings:t}}async function ol(e,t){let r=e,o=qi(t),n=o.touch,a=On();if(!r)return Hi("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!St(p)&&n(`async:${p}`)),y=new Set(d.map(([p])=>p)),g=(await oe.getAllKeys()).filter(p=>!St(p)).filter(p=>!y.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),g.length>0&&await lr(g),d.length>0&&await Mr(d),a.applied+=d.length+g.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,y]of Object.entries(r.mmkv??{})){let g=Ke.get(d);if(!g){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(g.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=g;try{let f=new Set(y.map(h=>h.key)),x=p.getAllKeys().filter(h=>!St(h));for(let h of x)o.allows(`mmkv:${d}/${h}`)&&(f.has(h)||($n(p,h),a.applied+=1));for(let h of y)if(!St(h.key)&&n(`mmkv:${d}/${h.key}`)){if(h.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${h.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(h.key,h.value),a.applied+=1}}catch(f){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(f)}`)}}let i=r.secure??{};for(let{key:d,options:y}of te.getAll())if(o.allows(`secure:${d}`)){if(y.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let g=i[d];g===null?await te.deleteValue(d):await te.setValue(d,g)}else await te.deleteValue(d);a.applied+=1}catch(g){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(g)}`)}}for(let d of Object.keys(i))n(`secure:${d}`)&&(te.getAll().some(y=>y.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let u=o.excludedWarning("item(s)");return u&&a.warnings.push(u),a}async function nl(){let e=On();try{await lo(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Ke.getAll()){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!St(n)))$n(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of te.getAll()){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await te.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var al=256*1024;function Yo(e,t,r,o,n,a){return Ni({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>al,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function il(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Nn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],u=new Map(n.async??[]),d=new Map(r.async??[]);for(let f of io(u,d))St(f)||a.push(Yo(`async:${f}`,f,u.get(f),d.get(f),u.has(f),d.has(f)));for(let f of io(n.mmkv,r.mmkv)){let x=o?Ke.get(f):null,h=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[f]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[f]??[]).map(T=>[T.key,T]));for(let T of io(S,w)){if(St(T))continue;let I=`mmkv:${f}/${T}`,E=`${f} \xB7 ${T}`,D=S.get(T),C=w.get(T),V=Yo(I,E,D?.value,C?.value,S.has(T),w.has(T));h?V=zr(V,"MMKV instance not registered"):b?V=zr(V,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(V=zr(V,"ArrayBuffer values cannot be restored")),a.push(V)}}let y=n.secure??{},g=r.secure??{},p=o?new Map(te.getAll().map(f=>[f.key,f])):null;for(let f of io(y,g)){let x=Yo(`secure:${f}`,f,y[f],g[f],f in y,f in g);if(o){let h=p?.get(f);h?h.options.requireAuthentication&&(x=zr(x,"biometric-protected keys are never written")):x=zr(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}ji({id:"storage",label:"Storage",status:tl,capture:rl,restore:ol,clear:nl,previewItems:il});B();import{StorageIcon as ll}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as sl,defineToolPreset as cl}from"@buoy-gg/shared-ui/web";B();import{useState as rt,useCallback as Ae,useEffect as Qo,useRef as qn,useMemo as lt}from"react";var Hn={};An(Hn,{AccessibilityInfo:()=>gl,ActivityIndicator:()=>ns,Alert:()=>Te,Animated:()=>Jt,AppRegistry:()=>fl,AppState:()=>ml,Appearance:()=>pl,BackHandler:()=>hl,Button:()=>as,CheckBox:()=>Dl,Clipboard:()=>bl,DeviceEventEmitter:()=>Ul,Dimensions:()=>vl,Easing:()=>Kr,FlatList:()=>Xo,I18nManager:()=>Sl,Image:()=>Ml,ImageBackground:()=>zl,InteractionManager:()=>kl,Keyboard:()=>wl,KeyboardAvoidingView:()=>Kl,LayoutAnimation:()=>Cl,Linking:()=>xl,LogBox:()=>jl,Modal:()=>jn,NativeEventEmitter:()=>Tl,NativeModules:()=>yl,PanResponder:()=>Il,Picker:()=>Pl,PixelRatio:()=>El,Platform:()=>Bl,Pressable:()=>rs,ProgressBar:()=>Fl,RefreshControl:()=>Ol,SafeAreaView:()=>Ll,ScrollView:()=>Pr,SectionList:()=>Wl,Share:()=>Vl,StatusBar:()=>_l,StyleSheet:()=>pe,Switch:()=>os,Text:()=>c,TextInput:()=>Zl,Touchable:()=>$l,TouchableHighlight:()=>es,TouchableNativeFeedback:()=>Nl,TouchableOpacity:()=>P,TouchableWithoutFeedback:()=>ts,UIManager:()=>Rl,Vibration:()=>Al,View:()=>l,VirtualizedList:()=>ql,YellowBox:()=>Hl,findNodeHandle:()=>is,unstable_createElement:()=>ul,useColorScheme:()=>Gl,useLocaleContext:()=>Jl,useWindowDimensions:()=>Yl});B();Mi(Hn,dl);import*as dl from"react-native-web";import{unstable_createElement as ul,NativeModules as yl,AccessibilityInfo as gl,Animated as Jt,Appearance as pl,AppRegistry as fl,AppState as ml,BackHandler as hl,Clipboard as bl,Dimensions as vl,Easing as Kr,I18nManager as Sl,Keyboard as wl,InteractionManager as kl,LayoutAnimation as Cl,Linking as xl,NativeEventEmitter as Tl,PanResponder as Il,PixelRatio as El,Platform as Bl,Share as Vl,StyleSheet as pe,UIManager as Rl,Vibration as Al,CheckBox as Dl,FlatList as Xo,Image as Ml,ImageBackground as zl,KeyboardAvoidingView as Kl,Picker as Pl,ProgressBar as Fl,RefreshControl as Ol,SafeAreaView as Ll,SectionList as Wl,StatusBar as _l,Touchable as $l,TouchableNativeFeedback as Nl,VirtualizedList as ql,YellowBox as Hl,LogBox as jl,DeviceEventEmitter as Ul,useColorScheme as Gl,useLocaleContext as Jl,useWindowDimensions as Yl}from"react-native-web";import*as Qe from"react-native-web";import{createElement as Ql,forwardRef as Xl}from"react";function ot(e){let t=Xl((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...u}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&u[`aria-${d}`]===void 0&&(u[`aria-${d}`]=a[d]);for(let[d,y]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&u[`aria-${y}`]===void 0&&(u[`aria-${y}`]=i[d]);return Ql(e,{...u,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=ot(Qe.View),c=ot(Qe.Text),Zl=ot(Qe.TextInput),P=ot(Qe.TouchableOpacity),es=ot(Qe.TouchableHighlight),ts=ot(Qe.TouchableWithoutFeedback),rs=ot(Qe.Pressable),Pr=ot(Qe.ScrollView),jn=ot(Qe.Modal),os=ot(Qe.Switch),ns=ot(Qe.ActivityIndicator),as=ot(Qe.Button),is=Qe.findNodeHandle,Te={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let y=document.createElement("p");y.textContent=t,y.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(y)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let u=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let y of u){let g=document.createElement("button");g.type="button",g.textContent=y.text??"OK",g.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${y.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,g.onclick=()=>{d(),y.onPress?.()},i.appendChild(g)}n.addEventListener("cancel",y=>{y.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};pt();import{JsModal as ls,ModalHeader as De,TabSelector as ss,parseValue as cs,devToolsStorageKeys as sr,macOSColors as ds,night as Le,ToolEmptyState as us,Filter as ys,RefreshCw as gs,Search as ps,SearchBar as fs,PowerToggleButton as ms,ToolbarCopyButton as Un,ToolbarClearButton as hs,truncatePayload as so,TickProvider as Gn,useLimit as bs,TIER_LIMITS as vs,windowDragProps as Ss,usePersistedState as co,monoFont as uo}from"@buoy-gg/shared-ui/web";B();B();B();no();var ne=Ar()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as We,useCallback as Xe,useState as Yt,useEffect as cr,useRef as Zo}from"react";import{absoluteFill as Jn,useLimit as Yn,TIER_LIMITS as ws,monoFont as Fr}from"@buoy-gg/shared-ui/web";import{Database as Qn,Zap as ks,ProBadge as Xn,ProUpgradeModal as Cs,ToolEmptyState as xs,resolveListEmptyState as Ts}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Pe}from"@buoy-gg/shared-ui/web";B();import{useCallback as Zn,useState as Is}from"react";B();import{memo as Es}from"react";import{macOSColors as fe,night as ce,CompactRow as Bs,TypeBadge as ea,HardDrive as Vs,Square as Rs,CheckSquare as As,Edit3 as Ds,EyeOff as Ms,Pin as ta,Trash2 as zs,ExpandedInfoRow as en,PillBadge as Or,monoFont as dr}from"@buoy-gg/shared-ui/web";B();import{gameUIColors as yo}from"@buoy-gg/shared-ui/web";function tn(e){switch(e){case"mmkv":return ne.mmkv;case"async":return ne.async;case"secure":return"Secure";default:return e}}function ra(e){switch(e){case"mmkv":return yo.info;case"async":return yo.warning;case"secure":return yo.success;default:return yo.muted}}B();function At(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function oa(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var Ks=40;function Ps(e){switch(typeof e){case"boolean":return e?"true":"false";case"number":return Number.isFinite(e)?String(e):null;case"string":return e.length===0?'""':e.length>Ks?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function Fs(e){let t=At(e),r=Ps(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as Os}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as Ls,jsx as W,jsxs as Ve}from"react/jsx-runtime";var na=[fe.semantic.info,fe.semantic.success,fe.semantic.warning,fe.semantic.debug,"#FF6B9D","#00D9FF"];function aa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return na[t%na.length]}var ia=e=>{switch(e){case"required_present":return{label:"Valid",color:fe.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:fe.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:fe.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:fe.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:fe.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:fe.text.secondary,sublabel:String(e)}}},Ws=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),_s=Es(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:u,onHideKey:d,isPinned:y=false,onTogglePin:g,onEditKey:p,onToggleKey:f,onDeleteKey:x,editBlockedReason:h}){let b=p!=null&&h==null,S=ia(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,E=tn(e.storageType),D=oa(e.value),C=D!==null&&typeof D=="object",V=Ve(l,{style:_.expandedContainer,children:[W(en,{label:"Storage",children:W(Or,{color:rn(e.storageType),children:E})}),e.storageType==="mmkv"&&e.instanceId&&W(en,{label:"Instance",children:W(Or,{color:aa(e.instanceId),icon:W(Vs,{size:9,color:aa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(en,{label:"Updates",children:[W(Or,{color:fe.semantic.warning,children:String(i)}),i>1&&u&&W(P,{onPress:u,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(c,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(Os,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Value:"}),W(c,{style:_.expandedValue,numberOfLines:3,children:Ws(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(Ls,{children:[Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Type:"}),W(ea,{type:At(e.value)})]}),Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Expected:"}),W(ea,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Expected:"}),W(c,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Info:"}),W(c,{style:_.expandedDescription,children:e.description})]}):null,h?Ve(l,{style:_.expandedRow,children:[W(c,{style:_.expandedLabel,children:"Edit:"}),W(c,{style:_.expandedDescription,children:h})]}):null,g||d||b?Ve(l,{style:_.actionRow,children:[b?Ve(P,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&f?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&f?f(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ds,{size:13,color:ce.color.onAccent}),W(c,{style:_.editButtonText,children:T&&f?"Toggle":"Edit"})]}):null,g?Ve(P,{style:[_.actionChip,y&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>g(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(ta,{size:12,active:y,color:ce.color.accent}),W(c,{style:[_.actionChipText,{color:ce.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,d?Ve(P,{style:_.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ms,{size:12,color:ce.color.warning}),W(c,{style:[_.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&x?Ve(P,{style:[_.actionChip,_.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>x(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(zs,{size:12,color:ce.color.danger}),W(c,{style:[_.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(P,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:_.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(As,{size:18,color:ce.color.accent}):W(Rs,{size:18,color:ce.color.textTertiary})}):null;return Ve(l,{style:[_.rowContainer,n&&_.rowContainerSelected],children:[ve,Ve(l,{style:_.compactRowWrapper,children:[W(Bs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?At(e.value):Fs(e.value):void 0,secondaryAccessory:T?W(Or,{size:"sm",color:e.value?fe.semantic.success:fe.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:V,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:_.badgeRow,children:[y&&W(ta,{size:12,active:true,color:ce.color.accent}),W(Or,{color:rn(e.storageType),children:E})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:fe.semantic.warning+"22",borderColor:fe.semantic.warning+"55"}],pointerEvents:"none",children:W(c,{style:[_.absCountText,{color:fe.semantic.warning}],children:String(i)})})]})]})}),rn=e=>{switch(e){case"mmkv":return fe.semantic.info;case"async":return fe.semantic.warning;case"secure":return fe.semantic.success;default:return fe.text.secondary}},_=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:dr},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:dr,flex:1},expandedExpected:{fontSize:11,color:fe.semantic.warning,fontFamily:dr,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:dr},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:dr},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:dr,color:ce.color.accent}});import{SectionHeader as ur,night as on}from"@buoy-gg/shared-ui/web";import{jsx as kt,jsxs as go}from"react/jsx-runtime";function nn(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function la({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:u,eventCountByKey:d,onViewHistory:y,onHideKey:g,pinnedKeys:p,onTogglePin:f,onEditKey:x,onToggleKey:h,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=Zn(V=>nn(V),[]),[E,D]=Is(null),C=Zn(V=>{if(!V||typeof V.key!="string")return;if(T){T(V);return}let Q=I(V);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?go(l,{style:Lr.sectionContainer,children:[go(ur,{children:[kt(ur.Title,{children:e}),kt(ur.Badge,{count:0,color:n})]}),kt(l,{style:Lr.emptySection,children:kt(c,{style:Lr.emptySectionText,children:o})})]}):r.length===0?null:go(l,{style:Lr.sectionContainer,children:[e?go(ur,{children:[kt(ur.Title,{children:e}),t>=0&&kt(ur.Badge,{count:t,color:n})]}):null,kt(l,{style:Lr.sectionContent,children:r.map(V=>{let Q=I(V);return kt(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:kt(_s,{storageKey:V,isExpanded:!a&&E===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:u,eventCount:d?.[V.key],onViewHistory:y?()=>y(V.key):void 0,onHideKey:g,onEditKey:x,onToggleKey:h,onDeleteKey:b,editBlockedReason:S?.(V),isPinned:p?.has(V.key),onTogglePin:f})},Q)})})]})}var Lr=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:on.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:on.color.border,alignItems:"center"},emptySectionText:{color:on.color.textTertiary,fontSize:11,textAlign:"center"}});B();import{useCallback as $s,useMemo as sa,useRef as ca,useState as da}from"react";import{EyeOff as Ns,FileJson as qs,HardDrive as Hs,night as J,macOSColors as yr,Pin as js,PillBadge as po,Trash2 as Us,TypeBadge as Gs,useSafeAreaInsets as Js,monoFont as Dt}from"@buoy-gg/shared-ui/web";import{DataViewer as Ys,LiveExplorer as Qs,ValueEditModal as Xs,updateNestedDataByPath as Zs,deleteNestedDataByPath as ec}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as F,jsxs as me}from"react/jsx-runtime";var tc=300,ft="buoy-storage-detail";function rc(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ft}-explorer-root`:`${ft}-explorer-${e.map(t).filter(Boolean).join("-")}`}var ua=[yr.semantic.info,yr.semantic.success,yr.semantic.warning,yr.semantic.debug,"#FF6B9D","#00D9FF"];function ya(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ua[t%ua.length]}function oc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:u=false,onTogglePin:d,applySafeAreaInset:y}){let g=Js(),p=y?g.bottom:0,f=t==null,x=ia(e.status),h=tn(e.storageType),[b,S]=da(false),[w,T]=da(0),I=ca(null),E=sa(()=>oa(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:E,V=$s(H=>{let ue=typeof H=="string"?H:JSON.stringify(H);I.current={raw:ue,value:H},o(ue).catch(ee=>{I.current=null,Te.alert("Couldn't save",ee instanceof Error?ee.message:String(ee))})},[o]),Q=ca(C);Q.current=C;let ve=sa(()=>{if(f)return{update:(H,ue)=>{let ee=H.length===0?ue:Zs(Q.current,H,ue);V(ee)},remove:H=>{H.length!==0&&V(ec(Q.current,H))}}},[f,V]),Se=d||i||f&&a;return me(l,{style:A.screen,children:[F(l,{testID:`${ft}-key`,accessibilityLabel:e.key}),me(Pr,{testID:`${ft}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[F(l,{style:A.section,children:me(l,{style:A.editorContainer,children:[me(l,{style:A.sectionHeaderRow,children:[F(c,{testID:`${ft}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),f?me(P,{onPress:()=>S(true),testID:`${ft}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(qs,{size:13,color:J.color.accent}),F(c,{style:A.rawButtonText,children:"Raw"})]}):null]}),me(l,{style:A.sectionBody,children:[F(Qs,{editable:f,label:"Value",value:C,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:rc,debounceMs:tc}),f?F(c,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):F(c,{style:A.blockedText,testID:`${ft}-edit-blocked`,children:t})]})]})}),F(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[F(c,{style:A.sectionHeaderPlain,children:"Key Details"}),me(l,{style:A.infoBody,children:[me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Status:"}),F(po,{color:x.color,testID:`${ft}-status`,children:x.label}),F(c,{style:A.infoDim,children:x.sublabel})]}),me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Storage:"}),F(po,{color:rn(e.storageType),testID:`${ft}-backend`,children:h}),F(c,{style:A.infoDim,children:At(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Instance:"}),F(po,{color:ya(e.instanceId),icon:F(Hs,{size:9,color:ya(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Updates:"}),F(po,{color:yr.semantic.warning,children:String(r)}),r>1&&n&&F(P,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:F(c,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Expected:"}),F(Gs,{type:e.expectedType}),me(c,{style:A.infoDim,children:["got ",At(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Expected:"}),F(c,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?me(l,{style:A.infoRow,children:[F(c,{style:A.infoLabel,children:"Info:"}),F(c,{style:A.infoDescription,children:e.description})]}):null]})]})}),F(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[F(c,{style:A.sectionHeaderPlain,children:"Value Explorer"}),F(l,{style:A.viewerBody,testID:`${ft}-viewer`,children:C!==null&&typeof C=="object"?F(Ys,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):F(c,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?me(l,{style:A.actionRow,children:[d?me(P,{style:[A.actionChip,u&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:u?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(js,{size:12,active:u,color:J.color.accent}),F(c,{style:[A.actionChipText,{color:J.color.accent}],children:u?"Unpin":"Pin to top"})]}):null,i?me(P,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Ns,{size:12,color:J.color.warning}),F(c,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,f&&a?me(P,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[F(Us,{size:12,color:J.color.danger}),F(c,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&f?F(Xs,{path:[],value:C,onSave:H=>{V(H),T(ue=>ue+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=pe.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.accent+"4D",overflow:"hidden",shadowColor:J.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:J.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:J.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:J.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Dt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:J.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:J.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:J.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:J.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:J.color.textSecondary,borderBottomWidth:1,borderBottomColor:J.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Dt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:J.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Dt},infoDim:{color:J.color.textTertiary,fontSize:10,fontFamily:Dt},infoExpected:{fontSize:11,color:yr.semantic.warning,fontFamily:Dt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Dt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Dt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Dt}});B();B();import{macOSColors as an,night as Mt,monoFont as nc}from"@buoy-gg/shared-ui/web";import{jsx as ln,jsxs as ac}from"react/jsx-runtime";var ic=[{id:"all",label:"All Types",color:null},{id:"async",label:ne.async,color:an.semantic.warning},{id:"mmkv",label:ne.mmkv,color:an.semantic.info},{id:"secure",label:"Secure",color:an.semantic.success}];function sn({active:e,onChange:t,counts:r}){return ln(l,{style:Wr.row,children:ic.filter(o=>ne.hasSecure||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??Mt.color.accent;return ac(P,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[Wr.pill,{borderColor:Mt.color.border},n&&[Wr.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:Mt.color.accentSoft,borderColor:Mt.color.accentBorderStrong}]],children:[ln(c,{style:[Wr.label,n&&{color:a,fontWeight:"600"}],children:o.label}),ln(c,{style:[Wr.value,{color:n?a:Mt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function ga(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var Wr=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:Mt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Mt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:Mt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:nc,lineHeight:14}});import{macOSColors as zt,night as Fe,monoFont as lc}from"@buoy-gg/shared-ui/web";B();function cn(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function sc(){return null}function pa(){return"Session storage is unavailable in this browser context."}import{jsx as Qt,jsxs as _r}from"react/jsx-runtime";var py=cn();function cc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:u="all",onStorageTypeChange:d,showStatus:y=true}){let g=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return _r(l,{style:_e.container,children:[y?_r(l,{style:_e.filtersRow,children:[_r(P,{style:[_e.filterChip,a==="all"&&[_e.filterChipActive,{backgroundColor:Fe.color.accentSoft,borderColor:Fe.color.accentBorderStrong,shadowColor:Fe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Qt(c,{style:[_e.filterValue,{color:Fe.color.text}],children:g.validCount}),Qt(c,{style:_e.filterLabel,children:"Valid"})]}),_r(P,{style:[_e.filterChip,a==="missing"&&[_e.filterChipActive,{backgroundColor:zt.semantic.error+"10",borderColor:zt.semantic.error+"30",shadowColor:zt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Qt(c,{style:[_e.filterValue,{color:g.missingCount>0?zt.semantic.error:Fe.color.textTertiary}],children:g.missingCount}),Qt(c,{style:_e.filterLabel,children:"Missing"})]}),_r(P,{style:[_e.filterChip,a==="issues"&&[_e.filterChipActive,{backgroundColor:zt.semantic.warning+"10",borderColor:zt.semantic.warning+"30",shadowColor:zt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Qt(c,{style:[_e.filterValue,{color:g.issuesCount>0?zt.semantic.warning:Fe.color.textTertiary}],children:g.issuesCount}),Qt(c,{style:_e.filterLabel,children:"Issues"})]})]}):null,d&&Qt(sn,{active:u,onChange:d,counts:{all:g.totalCount,async:g.asyncCount,mmkv:g.mmkvCount,secure:g.secureCount}})]})}var _e=pe.create({container:{backgroundColor:Fe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Fe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Fe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Fe.color.border,marginHorizontal:4},subtitleText:{color:Fe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Fe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Fe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Fe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Fe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:lc,lineHeight:20}});B();pt();Gt();import{useState as dn,useEffect as dc,useCallback as uc,useRef as yc}from"react";B();function Kt(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function un(e=[]){let[t,r]=dn([]),[o,n]=dn(true),[a,i]=dn(null),u=JSON.stringify(e),d=yc(e);d.current=e;let y=uc(async()=>{let g=d.current;n(true),i(null);try{let p=await oe.getAllKeys();if(!p||p.length===0){r([]),n(false);return}let f=await ao(p),x=[];f.forEach(([h,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=g.find(E=>Kt(E,"async")?typeof E=="string"?E===h:E.key===h:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:h,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),g.forEach(h=>{if(!Kt(h,"async"))return;let b=typeof h=="string"?h:h.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof h=="object"&&h.expectedValue!==void 0&&{expectedValue:h.expectedValue},...typeof h=="object"&&h.expectedType!==void 0&&{expectedType:h.expectedType},...typeof h=="object"&&h.description!==void 0&&{description:h.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[u]);return dc(()=>{y()},[y]),{storageKeys:t,isLoading:o,error:a,refresh:y}}B();no();import{subscribeToBrowserStorage as gc}from"@buoy-gg/shared-ui/web/utils";var yn=new Set,fo,fa=false,pc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),ma=e=>[...pc].some(t=>e.startsWith(t));function ha(e){for(let t of[...yn])try{t(e)}catch{}}async function fc(){if(!(fo||typeof window>"u")){if(Ar()){fo=Wi(e=>{fa||ha(e)});return}fo=gc(e=>{if(fa||e.area!=="localStorage"||e.key!==void 0&&ma(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!ma(n))),ha({action:r,data:o,timestamp:new Date})})}}function ba(e){return yn.add(e),()=>{yn.delete(e)}}function mc(){return!!fo}B();import{useState as gr,useEffect as va,useCallback as Sa,useRef as wa}from"react";function hc(e,t,r=[]){let[o,n]=gr([]),[a,i]=gr(true),[u,d]=gr(null),y=JSON.stringify(r),g=wa(r);g.current=r;let p=Sa(()=>{let f=g.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys();if(!x||x.length===0){let b=f.filter(S=>Kt(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,E=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:E}});n(b),i(false);return}let h=[];x.forEach(b=>{let{value:S,type:w}=wt(e,b),T=f.find(D=>Kt(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Go(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let E={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};h.push(E)}),f.forEach(b=>{if(!Kt(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;h.some(w=>w.key===S)||h.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(h)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,y]);return va(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:u,refresh:p}}function ka(e,t=[]){let[r,o]=gr([]),[n,a]=gr(true),[i,u]=gr(null),d=JSON.stringify(t),y=wa(t);y.current=t;let g=Sa(()=>{let p=y.current;a(true),u(null);try{let f=[];e.forEach(({instance:x,id:h})=>{let b=x.getAllKeys();!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=wt(x,S),I=p.find(C=>Kt(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),E="optional_present";I&&(w===void 0?E="required_missing":typeof I=="object"&&I.expectedValue!==void 0?E=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?E=Go(T,I.expectedType)?"required_present":"required_wrong_type":E="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:h,status:E,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};f.push(D)})}),p.forEach(x=>{if(!Kt(x,"mmkv"))return;let h=typeof x=="string"?x:x.key;if(!f.some(b=>b.key===h)){let b=e[0]?.id||"mmkv.default";f.push({key:h,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(f)}catch(f){u(f instanceof Error?f:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return va(()=>{g()},[g]),{storageKeys:r,isLoading:n,error:i,refresh:g}}B();import{useState as gn,useEffect as bc,useCallback as Ca,useRef as mo}from"react";var vc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Sc=3e3;function xa(e){return JSON.stringify(e)}function wc(e=[],t={}){let{pollMs:r=Sc}=t,o=mo(e);o.current=e;let n=JSON.stringify(e),[a,i]=gn([]),[u,d]=gn(true),[y,g]=gn(null),p=mo(xa([])),f=mo(false),x=mo(false),h=Ca(S=>{let w=xa(S);w!==p.current&&(p.current=w,i(S))},[]),b=Ca(async()=>{if(!x.current){x.current=true;try{let S=te.getModule(),w=te.getAll(),T=o.current.filter(C=>Kt(C,"secure")),I=C=>T.find(V=>(typeof V=="string"?V:V.key)===C);if(!S||w.length===0&&T.length===0){h([]),f.current=true,d(false);return}f.current||d(true),g(null);let E=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(V=>V.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let V=I(C.key),Q=typeof V=="object"?V:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??C.description;if(C.options.requireAuthentication){E.push({key:C.key,value:vc,storageType:"secure",status:V?"required_present":"optional_present",category:V?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let H=null;try{H=await S.getItemAsync(C.key,C.options)}catch{}if(H===null&&!V)continue;let ue=H;if(H)try{ue=JSON.parse(H)}catch{ue=H}let ee="optional_present";if(V)if(H===null)ee="required_missing";else if(Q?.expectedValue!==void 0)ee=String(ue)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let se=ue===null?"null":Array.isArray(ue)?"array":typeof ue,je=Q.expectedType.toLowerCase();ee=se===je||je==="string"&&typeof H=="string"?"required_present":"required_wrong_type"}else ee="required_present";E.push({key:C.key,value:H===null?void 0:ue,storageType:"secure",status:ee,category:V?"required":"optional",...Se&&{description:Se},...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}})}h(E)}catch(S){g(S instanceof Error?S:new Error("Failed to read SecureStore")),h([])}finally{f.current=true,x.current=false,d(false)}}},[h,n]);return bc(()=>{b();let S=te.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:u,error:y,refresh:b}}B();import{useState as ho,useEffect as bo}from"react";function pn(e=false){let[t,r]=ho([]),[o,n]=ho(true),a=()=>{n(true);try{let i=Ke.getAll().map(u=>{let{instance:d,id:y,encrypted:g,readOnly:p}=u,f=d.getAllKeys()?.length||0;return{id:y,instance:d,encrypted:g,readOnly:p,keyCount:f,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return bo(()=>{a()},[]),bo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Ta(e){let[t,r]=ho(null);return bo(()=>{if(!Ke){r(null);return}let o=Ke.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys()?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function kc(e){let[t,r]=ho(false);return bo(()=>{if(!Ke){r(false);return}r(Ke.has(e))},[e]),t}B();import{useEffect as Cc,useRef as Ia}from"react";import{Check as xc,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as pr,jsxs as Tc}from"react/jsx-runtime";var Ic=2600,Ea=180;function Ec({onDone:e}){let t=Ia(new Jt.Value(0)).current,r=Ia(e);return r.current=e,Cc(()=>{let o=Jt.sequence([Jt.timing(t,{toValue:1,duration:Ea,easing:Kr.out(Kr.quad),useNativeDriver:true}),Jt.delay(Ic),Jt.timing(t,{toValue:0,duration:Ea,easing:Kr.in(Kr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),pr(Jt.View,{pointerEvents:"box-none",style:[fr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Tc(P,{activeOpacity:.85,onPress:()=>r.current(),style:fr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[pr(l,{style:fr.tick,children:pr(xc,{size:10,color:Xt.semantic.success})}),pr(c,{style:fr.saved,children:"Saved"}),pr(l,{style:fr.divider}),pr(c,{style:fr.detail,children:"applies on next launch"})]})})}var fr=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor:Xt.background.card,borderWidth:pe.hairlineWidth,borderColor:Xt.border.default,shadowColor:"#000",shadowOpacity:.4,shadowRadius:14,shadowOffset:{width:0,height:5}},tick:{width:16,height:16,borderRadius:8,marginRight:7,alignItems:"center",justifyContent:"center",backgroundColor:Xt.semantic.successBackground},saved:{color:Xt.text.primary,fontSize:12,fontWeight:"600"},divider:{width:pe.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Xt.border.default},detail:{color:Xt.text.muted,fontSize:12}});B();import{useState as Bc,useEffect as Vc}from"react";pt();import{Trash2 as vo,CopyButton as Rc,SquareDashed as Ac,X as Dc,ProUpgradeModal as Mc,monoFont as zc}from"@buoy-gg/shared-ui/web";import{macOSColors as Ba,night as nt}from"@buoy-gg/shared-ui/web";import{useIsPro as Kc}from"@buoy-gg/license/web";import{jsx as $e,jsxs as Va}from"react/jsx-runtime";function Pc({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[u,d]=Bc(false),y=Kc();Vc(()=>{u&&y&&d(false)},[u,y]);let g=()=>{if(!y){d(true);return}Te.alert(`Clear ${ne.asyncFull}`,`Delete all ${ne.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await oe.clear(),o?.()}catch(E){Te.alert("Error",`Failed: ${E}`)}}}])},p=(E,D)=>{if(!y){d(true);return}Te.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let C=t.find(V=>V.id===E);C&&(C.instance.clearAll(),o?.())}catch(C){Te.alert("Error",`Failed: ${C}`)}}}])},f=()=>{if(!y){d(true);return}Te.alert(`Clear All ${ne.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(E=>E.instance.clearAll()),o?.()}catch(E){Te.alert("Error",`Failed: ${E}`)}}}])},x=()=>{if(!y){d(true);return}Te.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(E=>E.instance.clearAll()),o?.()}catch(E){Te.alert("Error",`Failed: ${E}`)}}}])},h=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=h&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Va(l,{style:mt.container,children:[a&&$e(P,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[mt.actionButton,n&&mt.actionButtonActive],children:n?Va(l,{style:mt.selectModeActiveContainer,children:[$e(Dc,{size:14,color:nt.color.accent}),i>0&&$e(c,{style:mt.selectedCountText,children:i})]}):$e(Ac,{size:16,color:nt.color.textSecondary})}),!n&&$e(Rc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:mt.actionButton,colors:{idle:nt.color.textSecondary,success:Ba.semantic.success,error:Ba.semantic.error}}),!n&&S&&$e(P,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),!n&&w&&$e(P,{onPress:g,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ne.asyncFull}`,accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),!n&&I&&$e(P,{onPress:f,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ne.mmkv} instances`,accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),!n&&T&&t.length===1&&$e(P,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ne.mmkv} instance`,accessibilityRole:"button",style:mt.actionButton,children:$e(vo,{size:16,color:nt.color.danger})}),$e(Mc,{visible:u,onClose:()=>d(false),featureName:"Storage Editing"})]})}var mt=pe.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:nt.color.buttonSurface,borderWidth:1,borderColor:nt.color.border},actionButtonActive:{backgroundColor:nt.color.accentSoft,borderColor:nt.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:nt.color.accent,fontFamily:zc}});B();import{useState as Fc,useEffect as Oc}from"react";import{Trash2 as Lc,CopyButton as Wc,CheckSquare as _c,EyeOff as $c,ProUpgradeModal as Nc,monoFont as qc}from"@buoy-gg/shared-ui/web";import{macOSColors as Ra,night as Ne}from"@buoy-gg/shared-ui/web";import{useIsPro as Hc}from"@buoy-gg/license/web";B();Gt();function jc(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function Aa(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await lr(r.map(a=>a.key));for(let a of n)await te.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let u=i.instanceId||"default";a[u]||(a[u]=[]),a[u].push(i.key)}),Object.entries(a).forEach(([i,u])=>{let d=t.find(y=>y.id===i);d&&u.forEach(y=>jc(d.instance,y))})}}import{jsx as Ct,jsxs as $r}from"react/jsx-runtime";function Uc({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[u,d]=Fc(false),y=Hc();Oc(()=>{u&&y&&d(false)},[u,y]);let g=e.length,p=g===i&&i>0,f=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:g,keys:b,timestamp:new Date().toISOString()}},x=()=>{g!==0&&o?.(e)},h=()=>{if(g!==0){if(!y){d(true);return}Te.alert("Delete Selected Keys",`Delete ${g} selected key${g>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await Aa(e,t),r?.()}catch(b){Te.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return g===0?null:$r(l,{style:ht.container,children:[$r(l,{style:ht.leftSection,children:[$r(P,{style:ht.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[Ct(_c,{size:14,color:p?Ne.color.accent:Ne.color.textSecondary}),Ct(c,{style:ht.selectAllText,children:p?"Deselect All":"Select All"})]}),Ct(l,{style:ht.countBadge,children:$r(c,{style:ht.countText,children:[g," selected"]})})]}),$r(l,{style:ht.actionsSection,children:[Ct(Wc,{value:f(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:ht.actionButton,colors:{idle:Ne.color.accent,success:Ra.semantic.success,error:Ra.semantic.error}}),o&&Ct(P,{style:ht.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:Ct($c,{size:14,color:Ne.color.warning})}),Ct(P,{style:ht.actionButton,onPress:h,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:Ct(Lc,{size:14,color:Ne.color.danger})})]}),Ct(Nc,{visible:u,onClose:()=>d(false),featureName:"Storage Editing"})]})}var ht=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:Ne.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:Ne.color.accentBorderStrong,paddingHorizontal:12,paddingVertical:8,marginBottom:10},leftSection:{flexDirection:"row",alignItems:"center",gap:12},selectAllButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,paddingHorizontal:8,backgroundColor:Ne.color.surface,borderRadius:6,borderWidth:1,borderColor:Ne.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:Ne.color.textSecondary},countBadge:{backgroundColor:Ne.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:Ne.color.accent,fontFamily:qc},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:Ne.color.surface,borderWidth:1,borderColor:Ne.color.border}});B();var fn=new Set;function Gc(e){return fn.add(e),()=>{fn.delete(e)}}function Jc(){fn.forEach(e=>{try{e()}catch{}})}B();pt();function mn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(te.getAll().find(r=>r.key===e.key)?.options.requireAuthentication)return"Biometric-protected keys can't be edited \u2014 writing one would fire an auth prompt.";if(!te.getModule())return"No SecureStore module is registered."}return null}function Da(e,t){if(e.storageType==="mmkv"){let r=Pa(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(za(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function Yc(e){if(e==null)return"";if(typeof e=="string"){let t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return e}return typeof e=="object"?JSON.stringify(e,null,2):String(e)}async function Ma(e,t,r=[]){let o=mn(e,r);if(o)throw new Error(o);let n=Da(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Ka(e,t));return}case"secure":{await te.setValue(e.key,Ka(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(u=>u.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,Qc(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function za(e){return e!==null&&typeof e=="object"}function Ka(e,t){return za(e.value)?JSON.stringify(JSON.parse(t)):t}function Pa(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function Qc(e,t){switch(Pa(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as mr,macOSColors as So,night as L,HardDrive as Fa}from"@buoy-gg/shared-ui/web";import{useIsPro as Xc}from"@buoy-gg/license/web";import{Fragment as Zc,jsx as q,jsxs as Ie}from"react/jsx-runtime";var Oa=[So.semantic.info,So.semantic.success,So.semantic.warning,So.semantic.debug,"#FF6B9D","#00D9FF"];function hr(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Oa[t%Oa.length]}var Py=ws["storage.keys"].free;function ed({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:E,onCloseDetail:D}){let C=Xc(),V=Yn("storage.keys"),Q=Yn("storage.mmkvInstances"),[ve,Se]=Yt(false);cr(()=>{ve&&C&&Se(false)},[ve,C]);let[H,ue]=Yt("all"),ee=p!=null&&f!=null,se=ee?p:H,je=ee?f:ue,[Ue,vt]=Yt("all"),Et=S!=null&&w!=null,ye=Et?S:Ue,rr=Et?w:vt,[re,Wt]=Yt(null),Ge=Zo(null),wr=Zo(0),ae=Zo(new Map),ut=Xe((s,m)=>{m?ae.current.set(s,m):ae.current.delete(s)},[]),[_t,kr]=Yt(0),[$t,Cr]=Yt(false),[or,Bt]=Yt(new Set),{instances:Ce}=pn(false),{storageKeys:Gr,isLoading:Jr,error:Yr,refresh:Nt}=un(e),Ko=We(()=>Ce.map(s=>({instance:s.instance,id:s.id})),[Ce]),{storageKeys:xr,isLoading:Po,error:Tr,refresh:nr}=ka(Ko,e),Fo=We(()=>re?xr.filter(s=>s.instanceId===re):xr,[xr,re]),{storageKeys:qt,isLoading:Qr,error:Oo,refresh:Xr}=wc(e),N=We(()=>[...Gr,...Fo,...qt],[Gr,Fo,qt]),we=We(()=>{if(!I)return null;let s=nn(I);return N.find(m=>nn(m)===s)??I},[I,N]),Lo=Jr||Po||Qr,Zr=Yr||Tr||Oo,xe=Xe(()=>{Nt(),nr(),Xr()},[Nt,nr,Xr]),et=Xe(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),Wo=Xe(()=>{Cr(s=>(s&&Bt(new Set),!s))},[]),tt=Xe((s,m)=>{let U=et(s);Bt(X=>{let Ye=new Set(X);return m?Ye.add(U):Ye.delete(U),Ye})},[et]),_o=Xe(()=>{Bt(new Set),Cr(false),xe()},[xe]),Ir=Xe(s=>{s.forEach(m=>n?.(m.key)),Bt(new Set),Cr(false)},[n]),Ht=Xe(async(s,m)=>{if(!C)throw Se(true),new Error("Editing storage values is a Pro feature.");await Ma(s,m,Ce),xe(),kr(U=>U+1)},[C,Ce,xe]),$o=Xe(s=>{Ht(s,JSON.stringify(!s.value)).catch(m=>{Te.alert("Couldn't save",m instanceof Error?m.message:String(m))})},[Ht]),eo=Xe((s,m)=>{if(!C){Se(true);return}Te.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await Aa([s],Ce.map(U=>({id:U.id,instance:U.instance}))),xe(),m?.()}catch(U){Te.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,Ce,xe]),Er=Xe(s=>mn(s,Ce),[Ce]),No=We(()=>{let s=N,m={valid:s.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:s.filter(G=>G.status==="required_missing").length,issues:s.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:s.length},U=s.filter(G=>G.storageType==="async"),X=s.filter(G=>G.storageType==="mmkv"),Ye=s.filter(G=>G.storageType==="secure");return{summary:{valid:m.valid,missing:m.missing,issues:m.issues,total:m.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:X.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Ye.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);cr(()=>{i&&(i.current=N)},[N,i]),cr(()=>{let s,m=ba(U=>{clearTimeout(s),s=setTimeout(()=>{Nt()},100)});return()=>{clearTimeout(s),m()}},[Nt]),cr(()=>{let s,m=Gc(()=>{clearTimeout(s),s=setTimeout(xe,100)});return()=>{clearTimeout(s),m()}},[xe]),cr(()=>{let s,m=Ln(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{nr()},100))});return()=>{clearTimeout(s),m()}},[nr,re]);let jt=We(()=>{let s=N,m=s.filter(X=>!Pe(X.key)),U=s.filter(X=>Pe(X.key));return{totalCount:s.length,requiredCount:m.filter(X=>X.category==="required").length,missingCount:m.filter(X=>X.status==="required_missing").length,wrongValueCount:m.filter(X=>X.status==="required_wrong_value").length,wrongTypeCount:m.filter(X=>X.status==="required_wrong_type").length,presentRequiredCount:m.filter(X=>X.status==="required_present").length,optionalCount:m.filter(X=>X.category==="optional").length,mmkvCount:s.filter(X=>X.storageType==="mmkv").length,asyncCount:s.filter(X=>X.storageType==="async").length,secureCount:s.filter(X=>X.storageType==="secure").length,devToolsCount:U.length}},[N]),yt=We(()=>{let s=N.filter(R=>!Pe(R.key));ye!=="all"&&(s=s.filter(R=>R.storageType===ye));let m=s.filter(R=>R.status==="required_present"||R.status==="optional_present").length,U=s.filter(R=>R.status==="required_missing").length,X=s.filter(R=>R.status==="required_wrong_type"||R.status==="required_wrong_value").length,Ye=0,G=0,Be=0,Vt=0;return se==="all"?(Ye=N.filter(R=>!Pe(R.key)&&R.storageType==="async"&&(R.status==="required_present"||R.status==="optional_present")).length,G=N.filter(R=>!Pe(R.key)&&R.storageType==="mmkv"&&(R.status==="required_present"||R.status==="optional_present")).length,Be=N.filter(R=>!Pe(R.key)&&R.storageType==="secure"&&(R.status==="required_present"||R.status==="optional_present")).length,Vt=Ye+G+Be):se==="missing"?(Ye=N.filter(R=>!Pe(R.key)&&R.storageType==="async"&&R.status==="required_missing").length,G=N.filter(R=>!Pe(R.key)&&R.storageType==="mmkv"&&R.status==="required_missing").length,Be=N.filter(R=>!Pe(R.key)&&R.storageType==="secure"&&R.status==="required_missing").length,Vt=Ye+G+Be):se==="issues"&&(Ye=N.filter(R=>!Pe(R.key)&&R.storageType==="async"&&(R.status==="required_wrong_type"||R.status==="required_wrong_value")).length,G=N.filter(R=>!Pe(R.key)&&R.storageType==="mmkv"&&(R.status==="required_wrong_type"||R.status==="required_wrong_value")).length,Be=N.filter(R=>!Pe(R.key)&&R.storageType==="secure"&&(R.status==="required_wrong_type"||R.status==="required_wrong_value")).length,Vt=Ye+G+Be),{validCount:m,missingCount:U,issuesCount:X,asyncCount:Ye,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);cr(()=>{x?.({validCount:yt.validCount,missingCount:yt.missingCount,issuesCount:yt.issuesCount})},[x,yt.validCount,yt.missingCount,yt.issuesCount]);let ar=We(()=>[...N].sort((s,m)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[m.status]||999)}),[N]),Rn=We(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),ze=We(()=>{let s=ar;if(g&&g.size>0&&(s=s.filter(m=>g.has(m.storageType))),s=s.filter(m=>!Array.from(r).some(U=>m.key.includes(U))),a){let m=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(m))}switch(se){case"all":s=s.filter(m=>m.status==="required_present"||m.status==="optional_present");break;case"missing":s=s.filter(m=>m.status==="required_missing");break;case"issues":s=s.filter(m=>m.status==="required_wrong_type"||m.status==="required_wrong_value");break}if(ye!=="all"&&(s=s.filter(m=>m.storageType===ye)),h&&h.size>0){let m=s.filter(X=>h.has(X.key)),U=s.filter(X=>!h.has(X.key));s=[...m,...U]}return s},[ar,se,ye,r,a,re,g,h]),v=We(()=>ze.slice(0,V),[ze,V]),k=We(()=>Math.max(0,ze.length-V),[ze.length,V]),z=k>0,j=We(()=>{let s=ze.filter(m=>!Pe(m.key));return{totalCount:ze.length,requiredCount:s.filter(m=>m.category==="required").length,missingCount:s.filter(m=>m.status==="required_missing").length,wrongValueCount:s.filter(m=>m.status==="required_wrong_value").length,wrongTypeCount:s.filter(m=>m.status==="required_wrong_type").length,presentRequiredCount:s.filter(m=>m.status==="required_present").length,optionalCount:s.filter(m=>m.category==="optional").length,mmkvCount:ze.filter(m=>m.storageType==="mmkv").length,asyncCount:ze.filter(m=>m.storageType==="async").length,secureCount:ze.filter(m=>m.storageType==="secure").length,devToolsCount:ze.filter(m=>Pe(m.key)).length}},[ze]),Je=We(()=>v.filter(s=>or.has(et(s))),[v,or,et]),Br=Xe(()=>{let s=new Set(v.map(et));Bt(s)},[v,et]),Vr=Xe(()=>{Bt(new Set)},[]),Rr=jt.requiredCount>0?Math.round(jt.presentRequiredCount/jt.requiredCount*100):jt.totalCount>0?100:0,ki=Rr>=90?"OPTIMAL":Rr>=70?"WARNING":"CRITICAL",Ci=Rr>=90?mr.success:Rr>=70?mr.warning:mr.error;if(we)return q(l,{style:O.root,children:q(oc,{storageKey:we,editBlockedReason:Er(we),eventCount:u?.[we.key],onSave:s=>Ht(we,s),onViewHistory:y?()=>y(we.key):void 0,onDeleteKey:s=>eo(s,()=>D?.()),onHideKey:s=>{Ir([s]),D?.()},isPinned:h?.has(we.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Lo&&N.length===0)return Ie(l,{style:O.emptyState,children:[q(Qn,{size:48,color:L.color.textTertiary}),q(c,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(Zr)return Ie(l,{style:O.emptyState,children:[q(Qn,{size:48,color:mr.error}),q(c,{style:[O.emptyTitle,{color:mr.error}],children:"Error loading storage"}),q(c,{style:O.emptySubtitle,children:Zr.message})]});let xi=Ie(Zc,{children:[ye==="mmkv"&&Ce.length===0&&Ie(l,{style:O.emptyMMKVState,children:[q(c,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),q(c,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),q(c,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
2
2
 
3
3
  const storage = createMMKV();
4
- registerMMKVInstance('mmkv.default', storage);`})]}),ue==="mmkv"&&ke.length>0&&Te(l,{style:O.instanceNavbar,children:[Te(l,{style:O.instanceNavbarHeader,children:[q(c,{style:O.instanceNavbarLabel,children:"INSTANCES"}),ke.length>Q&&q(_n,{style:{transform:[{scale:.85}]}})]}),Te(Vr,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||ke.length===1)&&Te(K,{onPress:()=>Kt(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${le.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[q(Ta,{size:12,color:re===null?L.color.text:L.color.textSecondary}),q(c,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),q(l,{style:O.instanceNavbarBadge,children:q(c,{style:O.instanceNavbarBadgeText,children:ke.reduce((s,m)=>s+m.keyCount,0)})})]}),ke.map((s,m)=>{let U=m>=Q;return Te(K,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?ve(true):Kt(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?L.color.border:ur(s.id)+"40",backgroundColor:s.id===re?ur(s.id)+"20":L.color.surfaceElevated,opacity:U?.5:1}],children:[q(Ta,{size:12,color:s.id===re?ur(s.id):L.color.textSecondary}),q(c,{style:[O.instanceNavbarButtonText,s.id===re&&{color:ur(s.id),fontWeight:"700"}],children:s.id}),q(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:ur(s.id)+"30"}],children:q(c,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:ur(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),gi=q(vc,{copyValue:Do,mmkvInstances:ke.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ue,onClearComplete:Ce,isSelectMode:Ot,onToggleSelectMode:Vo,selectedCount:Zt.size}),pi=Ot?q(Bc,{selectedKeys:Je,mmkvInstances:ke.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:Bo,onHideKeys:wr,onSelectAll:Cr,onClearSelection:xr,totalVisibleKeys:v.length}):null,fi=P?Te(K,{style:O.limitBanner,onPress:()=>ve(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Te(l,{style:O.limitBannerContent,children:[Te(l,{style:O.limitBannerLeft,children:[q(os,{size:16,color:L.color.accent}),q(c,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),q(_n,{})]}),q(c,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,mi=(()=>{let s=N.some(U=>!ze(U.key)),m;return a||!s?(m=is({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(m={...m,message:"No keys match. Clear the search to see them."})):ie==="missing"?m={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:ie==="issues"?m={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:m={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},q(as,{...m,testID:"buoy-storage-keys-empty"})})(),hi=q(ns,{visible:be,onClose:()=>ve(false),featureName:"Storage Keys"});return Te(l,{style:O.root,children:[Ft>0?q(dc,{onDone:()=>hr(0)},Ft):null,Te(Vr,{testID:"buoy-storage-scroll",ref:Ue,onScroll:s=>{mr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[q(l,{style:O.backgroundGrid}),q(qs,{stats:$t,tabStats:dt,healthPercentage:Tr,healthStatus:di,healthColor:ui,activeFilter:ie,onFilterChange:He,activeStorageType:ue,onStorageTypeChange:Qt,showStatus:!ee}),yi,Me.length>0?Te(l,{style:O.keysSection,children:[Te(l,{style:O.sectionHeader,children:[Te(l,{style:O.sectionHeaderLeft,children:[Te(c,{style:O.sectionTitle,children:[ie==="all"?"KEYS":ie==="missing"?"MISSING KEYS":"ISSUES TO FIX",ue!=="all"&&` (${ue.toUpperCase()})`]}),q(l,{style:O.countBadge,children:q(c,{style:O.countText,children:v.length})})]}),gi]}),pi,q(Yn,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Ot,selectedKeys:Zt,onSelectionChange:et,eventCountByKey:u,onViewHistory:y,onHideKey:s=>wr([s]),onToggleKey:Ao,onDeleteKey:Jr,editBlockedFor:kr,pinnedKeys:h,onTogglePin:b,onRowRef:ct,onOpenKey:E}),fi]}):mi,q(c,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),hi]})]})}var O=ge.create({root:{flex:1,minHeight:0},editorOverlay:{...On,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...On,opacity:.006,backgroundColor:dr.info},techFooter:{fontSize:8,color:L.color.textTertiary,fontFamily:Br,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:L.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:L.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:L.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:L.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:L.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:L.color.border},countText:{fontSize:11,fontWeight:"600",color:L.color.text,fontFamily:Br},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:L.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:L.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:L.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:L.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:L.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:L.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Br,color:L.color.accent,backgroundColor:L.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:L.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:L.color.surface,borderRadius:10,borderWidth:1,borderColor:L.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:L.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:L.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:L.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:L.color.textSecondary,fontFamily:Br,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:L.color.text},instanceNavbarBadge:{backgroundColor:L.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:L.color.textSecondary,fontFamily:Br},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:L.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:L.color.border},clearSearchText:{fontSize:13,color:L.color.text,fontWeight:"500"},limitBanner:{backgroundColor:L.color.surface,borderRadius:10,borderWidth:1,borderColor:L.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:L.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:L.color.textTertiary,fontSize:11}});import{jsx as Lc}from"react/jsx-runtime";function Ea({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:E,onCloseDetail:D}){return Lc(Oc,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:E,onCloseDetail:D})}import{ProFeatureBanner as Wc}from"@buoy-gg/shared-ui/web";V();import{useMemo as _c}from"react";import{useEventStoreEvents as $c}from"@buoy-gg/shared-ui/web";V();import{BaseEventStore as Nc}from"@buoy-gg/shared-ui/web";function Kr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function co(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Ra(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=co(e);return Kr(t.value)||Kr(t.prevValue)||Kr(r)||Kr(o)}var qc=0;function uo(){return`se-${Date.now()}-${++qc}`}var Hc=class extends Nc{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Pe.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:u}=ht(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[u]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:u,initialScan:true},storageType:"mmkv",id:uo()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Nt(),ki(kn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,u]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:u??void 0,initialScan:true},storageType:"async",id:uo()})}}}catch{}}async startCapturing(){Xs()||await Zs(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=aa(e=>{let t={...e,storageType:"async",id:uo()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Rn(e=>{let t={...e,storageType:"mmkv",id:uo()};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)Ra(o)||t.set(o.id,o);let r=e.map(o=>{let n=t.get(o.id);return!n||!Ra(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...co(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=this.events.findIndex(n=>n.id===e.id);if(t===-1)return;let r=this.events[t],o=this.events.slice();o[t]={...r,...e,timestamp:r.timestamp,data:{...r.data,...e.data}},super.replaceEvents(o)}},Dt=new Hc;function Va(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=_c(()=>t==="all"?void 0:d=>d.filter(y=>y.storageType===t),[t]),{events:a,clearEvents:i,isActive:u}=$c(Dt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:u}}V();import{useState as yo,useCallback as it,useMemo as Mt,useEffect as Ba,useRef as jc}from"react";import Aa from"@buoy-gg/shared-ui/web/asyncStorage";import{formatRelativeTime as go,macOSColors as po,night as Jt,parseValue as fo,devToolsStorageKeys as Da,GitBranch as Uc,EventStepperFooter as Jc,EventHistoryViewer as Gc,copyToClipboard as Yc,ProUpgradeModal as Qc,monoFont as Ma}from"@buoy-gg/shared-ui/web";import{useIsPro as Zc}from"@buoy-gg/license/web";V();import{computeLineDiff as Ky,DiffType as Fy,ABSENT_VALUE as Xc,isAbsent as Oy}from"@buoy-gg/shared-ui/web/dataViewer";V();import{ThemedSplitView as ed}from"@buoy-gg/shared-ui/web/dataViewer";V();import{diffThemes as td,gitClassicTheme as _y,devToolsDefaultTheme as $y}from"@buoy-gg/shared-ui/web/dataViewer";V();import{night as Pa}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as rd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as za}from"react/jsx-runtime";function od({oldValue:e,newValue:t,scrollEnabled:r=true}){return za(l,{style:r?Ka.container:Ka.containerInline,children:za(rd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var Ka=ge.create({container:{flex:1,backgroundColor:Pa.color.bg},containerInline:{backgroundColor:Pa.color.bg}});V();function an(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"}}V();import{night as Ie,Lock as nd,monoFont as ad}from"@buoy-gg/shared-ui/web";import{jsx as ln,jsxs as id}from"react/jsx-runtime";var ld={copy:{color:Ie.color.accent,backgroundColor:Ie.color.accentSoft,borderColor:Ie.color.accentBorderStrong,textColor:Ie.color.accent},jump:{color:Ie.color.warning,backgroundColor:Ie.color.warningSoft,borderColor:Ie.color.warning+"40",textColor:Ie.color.warning},undo:{color:Ie.color.info,backgroundColor:Ie.color.infoSoft,borderColor:Ie.color.info+"40",textColor:Ie.color.info}};function sn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=ld[r],i=o||n;return id(K,{disabled:i,onPress:e,style:[mo.button,{backgroundColor:i?Ie.color.fill:a.backgroundColor,borderColor:i?Ie.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?ln(nd,{size:10,color:Ie.color.textTertiary,style:mo.lockIcon}):ln(l,{style:[mo.dot,{backgroundColor:i?Ie.color.textTertiary:a.color}]}),ln(c,{style:[mo.text,{color:i?Ie.color.textTertiary:a.textColor}],children:t})]})}var mo=ge.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:Ie.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:ad,height:12}});V();Nt();import{isDevToolsStorageKey as sd}from"@buoy-gg/shared-ui/web";import yr from"@buoy-gg/shared-ui/web/asyncStorage";function Pt(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function cn(e){let{action:t,data:r}=e;if(Pt(r?.prevValue)||Pt(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 yr.removeItem(r.key):await yr.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await yr.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 yr.removeItem(o):await yr.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await yr.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 Ir(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function dn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let u=i.data;if(Pt(u?.value)||Pt(u?.prevValue)||Pt(u?.pairs)||Pt(u?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)dd(e[i],r);let o=new Set;for(let i of e)cd(i,o);let n=[],a=[];for(let i of o){if(sd(i))continue;let u=r.get(i);u==null?a.push(i):n.push([i,u])}a.length>0&&await tr(a),n.length>0&&await Ir(n)}function cd(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 dd(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),u={...a,...i};t.set(o.key,JSON.stringify(u))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let u=JSON.parse(i),d=JSON.parse(a),y={...u,...d};t.set(n,JSON.stringify(y))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function un(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Pt(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Pt(r.prevPairs);default:return false}}import{Fragment as ud,jsx as Ne,jsxs as Fa}from"react/jsx-runtime";var gr=-1,ho={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 bo(e){switch(e){case"setItem":case"multiSet":return po.semantic.success;case"removeItem":case"multiRemove":case"clear":return po.semantic.error;case"mergeItem":case"multiMerge":return po.semantic.info;default:return po.text.muted}}function Oa(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},gd=[];function yn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=Zc(),[a,i]=yo(false),[u,d]=yo("split"),[y,g]=yo(Math.max(gr,t-1)),[p,f]=yo(t),x=jc(false),h=Mt(()=>e.events.sort((oe,ct)=>oe.timestamp.getTime()-ct.timestamp.getTime()),[e.events]),b=h.length;Ba(()=>{if(x.current)return;(async()=>{try{let oe=await Aa.getItem(Da.storage.diffViewerMode());(oe==="split"||oe==="tree")&&d(oe),x.current=true}catch{}})()},[]),Ba(()=>{let oe=Math.min(b-1,Math.max(0,t)),ct=Math.max(gr,Math.min(oe-1,t-1));g(ct),f(oe)},[t,b]);let S=it(async oe=>{d(oe);try{await Aa.setItem(Da.storage.diffViewerMode(),oe)}catch{}},[]),w=h[t],T=w?.action,I=y===gr,E=I?void 0:h[Math.max(0,Math.min(b-1,y))],D=h[Math.max(0,Math.min(b-1,p))],C=Mt(()=>{let oe=D?.data;return oe?.initialScan?"scanned":oe?.prevValue===null||oe?.prevValue===void 0?"absent":"prior"},[D]),R=Mt(()=>C==="absent"?Xc:C==="scanned"?fo(D?.data?.value):fo(D?.data?.prevValue),[C,D]),Q=Mt(()=>I?{index:gr,label:ho[C].label,timestamp:ho[C].timestamp,relativeTime:ho[C].relativeTime,badge:Ne(l,{style:[Gt.actionBadgeSmall,{backgroundColor:`${Jt.color.textTertiary}20`}],children:Ne(c,{style:[Gt.actionTextSmall,{color:Jt.color.textTertiary}],children:ho[C].badge})})}:{index:y,label:`#${y+1} / ${b}`,timestamp:E?Oa(E.timestamp):"",relativeTime:E?go(E.timestamp):"",badge:E?Ne(l,{style:[Gt.actionBadgeSmall,{backgroundColor:`${bo(E.action)}20`}],children:Ne(c,{style:[Gt.actionTextSmall,{color:bo(E.action)}],children:an(E.action)})}):void 0},[y,E,b,I,C]),be=Mt(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?Oa(D.timestamp):"",relativeTime:D?go(D.timestamp):"",badge:D?Ne(l,{style:[Gt.actionBadgeSmall,{backgroundColor:`${bo(D.action)}20`}],children:Ne(c,{style:[Gt.actionTextSmall,{color:bo(D.action)}],children:an(D.action)})}):void 0}),[p,D,b]),ve=Mt(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),H=it(()=>{y>gr&&g(y-1)},[y]),de=it(()=>{y<p-1&&g(y+1)},[y,p]),ee=it(()=>{p>y+1&&f(p-1)},[p,y]),ie=it(()=>{p<b-1&&f(p+1)},[p,b]),He=Mt(()=>I?R:fo(E?.data?.value??null),[I,R,E]),je=Mt(()=>fo(D?.data?.value),[D]),ft=it(()=>u==="split"?Ne(ed,{oldValue:He,newValue:je,differences:gd,theme:td.devToolsDefault,options:yd,showThemeName:false,scrollEnabled:false}):Ne(od,{oldValue:He,newValue:je,scrollEnabled:false}),[He,je,u]),xt=it(()=>{r(Math.max(0,t-1))},[t,r]),ue=it(()=>{r(Math.min(b-1,t+1))},[t,b,r]),Qt=it(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await cn(w)}catch{}},[w,n]),re=it(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let oe=h.filter(Ft=>Ft.storageType!=="mmkv"),ct=oe.findIndex(Ft=>Ft.timestamp.getTime()===w.timestamp.getTime());if(ct!==-1)try{await dn(oe,ct)}catch{}},[w,h,n]),Kt=it(async()=>{if(!w)return;let oe={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await Yc(oe)},[w]),Ue=w?.storageType!=="mmkv",mr=Ue&&w&&un(w);return Fa(ud,{children:[Ue&&Fa(l,{style:Gt.actionButtonsContainer,children:[Ne(sn,{type:"undo",text:"UNDO",onPress:Qt,disabled:!mr,locked:!n}),Ne(sn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),Ne(sn,{type:"copy",text:"COPY",onPress:Kt})]}),Ne(Gc,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Uc,diffModeTabs:ve,activeDiffMode:u,onDiffModeChange:S,renderDiffContent:ft,scrollDiffSection:true,leftEvent:Q,rightEvent:be,showCompareNavigation:true,onLeftPrevious:H,onLeftNext:de,onRightPrevious:ee,onRightNext:ie,canLeftPrevious:y>gr,canLeftNext:y<p-1,canRightPrevious:p>y+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:go(w?.timestamp),onFooterPrevious:xt,onFooterNext:ue}),Ne(Qc,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function gn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,u)=>i.timestamp.getTime()-u.timestamp.getTime()),a=n.length;return Ne(Jc,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:go(n[t]?.timestamp),applySafeAreaInset:o})}var Gt=ge.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:Jt.color.surface,borderBottomWidth:1,borderBottomColor:Jt.color.border},valueBox:{backgroundColor:Jt.color.bg,borderRadius:6,borderWidth:1,borderColor:Jt.color.border,padding:8},valueText:{fontSize:12,color:Jt.color.text,fontFamily:Ma,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:Ma}});V();import{Filter as La,DynamicFilterView as pd,Database as fd,HardDrive as md,Shield as hd,macOSColors as St,night as wt}from"@buoy-gg/shared-ui/web";import{jsx as zt,jsxs as pr}from"react/jsx-runtime";function bd({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:La},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 ${le.asyncFull}: show or hide captured events`,`\u2022 ${le.mmkv}: show or hide captured events`],icon:La},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return pr(l,{style:Ze.container,children:[pr(l,{style:Ze.storageTypeSection,children:[zt(c,{style:Ze.sectionTitle,children:"STORAGE TYPES"}),pr(l,{style:Ze.storageTypeButtons,children:[pr(K,{style:[Ze.storageTypeButton,n.has("async")&&Ze.storageTypeButtonActive,{borderColor:St.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${le.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[zt(fd,{size:16,color:n.has("async")?St.semantic.warning:wt.color.textTertiary}),zt(c,{style:[Ze.storageTypeButtonText,n.has("async")&&{color:St.semantic.warning}],children:le.asyncFull})]}),pr(K,{style:[Ze.storageTypeButton,n.has("mmkv")&&Ze.storageTypeButtonActive,{borderColor:St.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${le.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[zt(md,{size:16,color:n.has("mmkv")?St.semantic.info:wt.color.textTertiary}),zt(c,{style:[Ze.storageTypeButtonText,n.has("mmkv")&&{color:St.semantic.info}],children:le.mmkv})]}),le.hasSecure&&pr(K,{style:[Ze.storageTypeButton,n.has("secure")&&Ze.storageTypeButtonActive,{borderColor:St.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[zt(hd,{size:16,color:n.has("secure")?St.semantic.success:wt.color.textTertiary}),zt(c,{style:[Ze.storageTypeButtonText,n.has("secure")&&{color:St.semantic.success}],children:"Secure Storage"})]})]})]}),zt(pd,{...i})]})}var Ze=ge.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:wt.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:wt.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:wt.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:wt.color.border},storageTypeButtonActive:{backgroundColor:wt.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:wt.color.textTertiary}});V();import{memo as vd}from"react";import{RelativeTime as Sd,macOSColors as Fr,parseValue as wd,CompactRow as kd}from"@buoy-gg/shared-ui/web";import{jsx as Wa}from"react/jsx-runtime";function Cd(e){let t=wd(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 xd(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return Fr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return Fr.semantic.error;case"mergeItem":case"multiMerge":return Fr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return Fr.semantic.warning;default:return Fr.text.muted}}function Td(e,t){return`${Array.from(e).map(r=>r==="async"?le.async:le.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var pn=vd(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=xd(e.lastAction),i=an(e.lastAction),u=e.totalOperations??1;return Wa(kd,{statusDotColor:a,statusLabel:"Storage",statusSublabel:Td(e.storageTypes,u),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:Wa(Sd,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as Id}from"@buoy-gg/license/web";import{Fragment as _a,jsx as M,jsxs as lt}from"react/jsx-runtime";var ng=es["storage.events"].free,fn={getItem:e=>Wo.getItem(e),setItem:(e,t)=>Wo.setItem(e,t)},Ed={storage:fn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},Rd={storage:fn,parse:e=>e==="true",serialize:e=>e.toString()},$a={storage:fn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},Vd={...$a,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function mn({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:u,onRefresh:d,onEventSelect:y}){let g=Id(),p=Xl("storage.events"),[f,x]=Xr(rr.storage.activeTab(),"browser",Ed);Oo(()=>{u?.(f)},[f,u]);let[h,b]=tt(""),[S,w]=tt(null),[T,I]=tt(false),[E,D]=Xr(rr.storage.isMonitoring(),true,Rd),{events:C,clearEvents:R,isCapturing:Q}=Va({enabled:E}),[be,ve]=tt(null),[H,de]=tt(null),[ee,ie]=tt(null),[He,je]=tt(0),[ft,xt]=tt(false),[ue,Qt]=Xr(rr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),Vd),[re,Kt]=tt("all"),[Ue,mr]=tt(new Set(["async","mmkv","secure"])),[oe,ct]=Xr(rr.storage.pinnedKeys(),new Set,$a),Ft=Mn(null),hr=E&&Q,[Ot,br]=tt("bottomSheet"),Zt=Be(v=>{br(v)},[]),Tt=Be(()=>{D(v=>!v)},[]),ke=Be(()=>{R(),ve(null),je(0)},[R]),$r=Be(v=>{de(v),ie(null)},[]),Nr=Be(()=>{de(null),ie(null)},[]),qr=Be(v=>{Qt(k=>{let P=new Set(k);return P.has(v)?P.delete(v):P.add(v),P})},[]),Lt=Be(v=>{Qt(k=>new Set([...k,v]))},[]),xo=Be(v=>{ct(k=>{let P=new Set(k);return P.has(v)?P.delete(v):P.add(v),P})},[]),vr=Be(()=>{xt(!ft)},[ft]),To=Be(v=>{mr(k=>{let P=new Set(k);return P.has(v)?P.delete(v):P.add(v),P})},[]),Sr=Mn([]),Xt=Be(()=>{let v=Sr.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,P)=>(k[P.key]=Zr(P.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,P)=>{let j=P.instanceId||"default";return k[j]||(k[j]={}),k[j][P.key]=Zr(P.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,P)=>(k[P.key]=Zr(P.value),k),{})}},[]),Io=Be(async()=>{xe.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await Qr()}catch{xe.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await Vi()}catch{xe.alert("Error","Failed to clear all storage")}}}])},[]),Wt=v=>{let k=ql(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"},[Hr,Eo]=tt([]);Oo(()=>{e&&(async()=>{try{let v=await Wo.getAllKeys();Eo([...v].sort())}catch{}})()},[e]);let jr=at(()=>{let v=new Set(Hr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Hr]),N=at(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let P=k.data.key;if(!Ue.has(k.storageType)||Array.from(ue).some(Je=>P.includes(Je)))return;let j=v.get(P);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=Wt(k.data.value))):v.set(P,{key:P,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:Wt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,P)=>P.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ue,Ue]),Se=at(()=>be&&N.find(v=>v.key===be)||null,[be,N]),Ro=at(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),Ur=at(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Ce=at(()=>H&&N.find(v=>v.key===H)||null,[H,N]);Oo(()=>{if(!y)return;let v=Se||(ee!==null?Ce:null),k=Se?He:ee;if(!v||k==null)return;let P=[...v.events].sort((Cr,xr)=>Cr.timestamp.getTime()-xr.timestamp.getTime()),j=P[k],Je=P[k-1];j&&y(j),Je&&y(Je)},[y,Se,He,Ce,ee]);let Xe=at(()=>C.filter(v=>{if(!v.data?.key||!Ue.has(v.storageType))return false;let k=v.data.key;return!Array.from(ue).some(P=>k.includes(P))}),[C,ue,Ue]),Vo=at(()=>ra(Xe),[Xe]),et=at(()=>re==="all"?Xe:Xe.filter(v=>v.storageType===re),[Xe,re]),Bo=Be(()=>et.map(v=>({key:v.data?.key,action:v.action,value:Zr(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[et]),wr=at(()=>et.slice(0,p),[et,p]),_t=at(()=>Math.max(0,et.length-p),[et.length,p]),Ao=.8,Jr=Be(v=>v.id,[]),kr=Be(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let P=[...k.events].sort((j,Je)=>j.timestamp.getTime()-Je.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());ve(k.key),je(P>=0?P:0)},[N]),Do=Be(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:Wt(v.data?.value)};return M(pn,{data:k,onPress:()=>kr(v),testID:`buoy-storage-event-${v.id}`})},[kr]);if(!e)return null;let $t=n?rr.modal.root():rr.storage.modal(),dt=()=>{if(ft)return M(bd,{ignoredPatterns:ue,onTogglePattern:qr,onAddPattern:Lt,availableKeys:jr,enabledStorageTypes:Ue,onToggleStorageType:To});if(f==="browser"){if(H&&Ce){if(ee!==null)return M(l,{style:me.contentWrapper,children:M(yn,{conversation:Ce,selectedEventIndex:ee,onEventIndexChange:ie,disableInternalFooter:true})});let k=[...Ce.events].sort((j,Je)=>j.timestamp.getTime()-Je.timestamp.getTime()),P=[...k].reverse();return M(Lo,{testID:"buoy-storage-history-list",style:me.flexFill,data:P,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Je=k.findIndex(xr=>xr.timestamp.getTime()===j.timestamp.getTime()),Cr={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:Wt(j.data?.value)};return M(pn,{data:Cr,onPress:()=>ie(Je>=0?Je:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:me.listContent,ItemSeparatorComponent:()=>M(l,{style:me.separator}),initialNumToRender:20})}return M(Ea,{requiredStorageKeys:a,ignoredPatterns:ue,onTogglePattern:qr,onAddPattern:Lt,searchQuery:h,storageDataRef:Sr,eventCountByKey:Ro,lastWriteByKey:Ur,onViewHistory:$r,enabledStorageTypes:Ue,pinnedKeys:oe,onTogglePin:xo,applySafeAreaInset:Ot==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:Kt,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(Se)return M(l,{style:me.contentWrapper,children:M(yn,{conversation:Se,selectedEventIndex:He,onEventIndexChange:je,disableInternalFooter:true})});let v=M(l,{style:me.eventFilterBar,children:M(Go,{active:re,onChange:Kt,counts:Vo})});if(et.length===0){let k=re!=="all";return lt(l,{style:me.flexFill,children:[v,M(jl,{testID:"buoy-storage-events-empty",...hr?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 lt(l,{style:me.flexFill,children:[v,M(Lo,{testID:"buoy-storage-events-list",style:me.flexFill,data:wr,renderItem:Do,keyExtractor:Jr,onEndReachedThreshold:Ao,contentContainerStyle:me.listContent,ListFooterComponent:_t>0?M(l,{style:me.lockedBannerContainer,children:M(Wc,{featureName:`${_t} event${_t>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},er=Se&&Se.events.length>1?M(gn,{conversation:Se,selectedEventIndex:He,onEventIndexChange:je,applySafeAreaInset:Ot==="bottomSheet"}):Ce&&ee!==null&&Ce.events.length>1?M(gn,{conversation:Ce,selectedEventIndex:ee,onEventIndexChange:ie,applySafeAreaInset:Ot==="bottomSheet"}):null,vn=ft?()=>xt(false):ee!==null?()=>ie(null):H?Nr:Se?()=>{ve(null),je(0)}:r,Me=ft?lt(Ae,{children:[M(Ae.Navigation,{onBack:()=>xt(false)}),M(Ae.Content,{title:"Filters"})]}):H?lt(Ae,{children:[M(Ae.Navigation,{onBack:ee!==null?()=>ie(null):Nr}),M(Ae.Content,{title:`${H} History`,centered:true})]}):Se?lt(Ae,{children:[M(Ae.Navigation,{onBack:()=>{ve(null),je(0)}}),M(Ae.Content,{title:Se.key})]}):S?lt(Ae,{children:[M(Ae.Navigation,{onBack:()=>w(null)}),M(Ae.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):lt(Ae,{children:[r&&M(Ae.Navigation,{onBack:r}),M(Ae.Content,{title:"",children:T?M(Yl,{value:h,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:me.headerSearchContainer}):M(Nl,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${et.length>0?` (${et.length})`:""}`}],activeTab:f,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),de(null),ie(null),ve(null),je(0),w(null)}})}),lt(Ae.Actions,{children:[d&&!T?M(K,{onPress:d,style:me.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Jl,{size:14,color:Oe.color.textSecondary})}):null,M(K,{onPress:vr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[me.iconButton,(ue.size>0||Ue.size<3)&&me.activeFilterButton],children:M(Ul,{size:14,color:ue.size>0||Ue.size<3?Oe.color.accent:Oe.color.textSecondary})}),f==="browser"&&!T&&lt(_a,{children:[M(K,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:me.iconButton,children:M(Gl,{size:14,color:Oe.color.textSecondary})}),M(Kn,{value:Xt,disabled:Sr.current.length===0,buttonStyle:me.iconButton,testID:"buoy-storage-copy"})]}),f==="events"&&lt(_a,{children:[M(Kn,{value:Bo,disabled:et.length===0,buttonStyle:me.iconButton,testID:"buoy-storage-events-copy"}),M(Ql,{isEnabled:hr,onToggle:Tt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(Zl,{onPress:ke,buttonStyle:me.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(Fn,{children:lt(l,{style:me.inlineRoot,children:[M(l,{style:me.inlineHeader,...ts,children:Me}),dt(),er]})}):M(Fn,{children:M($l,{visible:e,onClose:t,onBack:vn,onMinimize:o,persistenceKey:$t,header:{showToggleButton:true,customContent:Me},onModeChange:Zt,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:er,footerHeight:er?68:0,disableScrollWrapper:true,children:dt()})})}function Bd(e={}){return M(mn,{...e,inline:true,visible:true,onClose:()=>{}})}var me=ge.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:Hl.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:Oe.color.buttonSurface,borderWidth:1,borderColor:Oe.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:Oe.color.accentSoft,borderColor:Oe.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:Oe.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:eo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:Oe.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:eo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:Oe.color.text,fontSize:12,fontWeight:"600",fontFamily:eo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:Oe.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:Oe.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:Oe.color.accent,fontFamily:eo,letterSpacing:.5},contentWrapper:{flex:1}});V();Nt();import Or from"@buoy-gg/shared-ui/web/asyncStorage";import{approxJsonSize as Na,isDevToolsStorageKey as Lr,isOverWireBudget as qa,isJsonSerializable as Ad}from"@buoy-gg/shared-ui/web";var vo=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),Dd=16*1024,hn=1.25*1024*1024,Ha=8*1024*1024;function bn(e){return e===void 0?e:qa(e,Dd)?vo:e}function So(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=co(e),i=t(a.pairs),u=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&u===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:u}:{}}}}function ja(e){return e===void 0||!qa(e,Ha)?e:Ad(e)?{__buoyTruncated:true,note:`Exceeds the ${Ha/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:vo}var Ua=new WeakMap,Ja=new WeakMap;function Md(e){let t=Ua.get(e);if(t)return t;let r;try{let o=So(e,bn);r={event:o,bytes:Na(o,hn).bytes}}catch{r={event:So(e,()=>vo),bytes:1024}}return Ua.set(e,r),r}function Pd(e){let t=Ja.get(e);if(t)return t;let r=So(e,n=>n===void 0?void 0:vo),o={event:r,bytes:Na(r,hn).bytes};return Ja.set(e,o),o}function zd(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=Md(e[o]);if(r+n.bytes<=hn)t[o]=n.event,r+=n.bytes;else{let a=Pd(e[o]);t[o]=a.event,r+=a.bytes}}return t}function Ga(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 Ya=[];function Kd(e){Ya=e}var Fd={version:3,getSnapshot:()=>zd(Dt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&Lr(t))})),subscribe:e=>Dt.subscribeToEvents(e),actions:{clearEvents:()=>{Dt.clearEvents()},getRequiredKeys:()=>Ya,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Dt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=So(r,ja);return{found:true,id:t,event:o}},clearAppStorage:()=>Qr(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Dt.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(!un(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await cn(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=Dt.getEvents().filter(u=>u.storageType!=="mmkv").slice().reverse(),n=o.find(u=>u.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(u=>u.data?.key===n.data?.key),i=a.findIndex(u=>u.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await dn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await Or.getAllKeys()).filter(e=>!Lr(e)),"async.multiGet":async e=>(await Gr(e.keys)).filter(([t])=>!Lr(t)),"async.getItem":e=>{let{key:t}=e;return Lr(t)?Promise.resolve(null):Or.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return Or.setItem(t,r)},"async.removeItem":e=>Or.removeItem(e.key),"async.multiRemove":e=>tr(e.keys),"async.multiSet":e=>Ir(e.pairs),"async.clear":()=>Or.clear(),"mmkv.snapshot":()=>Pe.getAll().map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!Lr(a)).map(a=>{let{value:i,type:u}=ht(t,a);return{key:a,value:bn(i),valueType:u}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r)return{found:false,reason:"missing instanceId/key"};let o=Pe.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=ht(o.instance,r);return{found:true,instanceId:t,key:r,value:ja(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;Ga(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=Ga(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=te.getModule();return Promise.all(te.getAll().map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=te.getModule(),t=te.getAll(),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:bn(i)})}return r},"secure.get":e=>{let{key:t}=e,r=te.getAll().find(n=>n.key===t),o=te.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return te.setValue(t,r)},"secure.delete":e=>te.deleteValue(e.key)}};import{jsx as Od}from"react/jsx-runtime";var Qa=qi({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>Od($i,{size:e}),component:mn,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),Ld=Ni(Qa,e=>(Kd(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));V();import{HardDrive as Wd,CyberpunkSectionButton as _d}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as $d}from"@buoy-gg/shared-ui/web";import{jsx as Nd}from"react/jsx-runtime";function qd({onPress:e}){let{storageKeys:t}=Zo(),r=t.filter(n=>!$d(n.key)).length,o=r;return Nd(_d,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:Wd,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}V();import{AlertCircle as Za,CheckCircle2 as Hd,Eye as Xa,XCircle as ei,HardDrive as ti,Database as ri,Shield as jd,gameUIColors as wo,macOSColors as ne,night as he,monoFont as ko}from"@buoy-gg/shared-ui/web";import{DataViewer as Ud}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ve}from"react/jsx-runtime";var oi=[ne.semantic.info,ne.semantic.success,ne.semantic.warning,ne.semantic.debug,"#FF6B9D","#00D9FF"];function Co(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return oi[t%oi.length]}var Jd=e=>{switch(e){case"required_present":return{icon:Hd,color:ne.semantic.success,bgColor:ne.semantic.successBackground,borderColor:ne.semantic.success+"40",label:"REQUIRED",labelColor:ne.semantic.success};case"required_missing":return{icon:Za,color:ne.semantic.error,bgColor:ne.semantic.errorBackground,borderColor:ne.semantic.error+"50",label:"MISSING",labelColor:ne.semantic.error};case"required_wrong_value":return{icon:ei,color:ne.semantic.warning,bgColor:ne.semantic.warningBackground,borderColor:ne.semantic.warning+"50",label:"WRONG S",labelColor:ne.semantic.warning};case"required_wrong_type":return{icon:ei,color:ne.semantic.info,bgColor:ne.semantic.infoBackground,borderColor:ne.semantic.info+"50",label:"WRONG TYPE",labelColor:ne.semantic.info};case"optional_present":return{icon:Xa,color:ne.semantic.debug,bgColor:ne.semantic.infoBackground,borderColor:ne.semantic.debug+"40",label:"OPTIONAL",labelColor:ne.semantic.debug}}},Gd=e=>{switch(e){case"mmkv":return ti;case"async":return ri;case"secure":return jd;default:return ri}};function Yd({storageKey:e,isExpanded:t,onToggle:r}){let o=Jd(e.status),n=o.icon,a=Gd(e.storageType),i=e.value!==void 0&&e.value!==null,u=e.expectedValue!==void 0,d=e.expectedType!==void 0,y=Hn(e.storageType),g=No(e.storageType);return Ve(l,{style:[z.storageKeyCard,{borderColor:o.borderColor}],children:[Ve(K,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:z.cardHeader,onPress:r,children:[Ve(l,{style:z.cardHeaderLeft,children:[Y(l,{style:[z.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ve(l,{style:z.cardHeaderInfo,children:[Y(c,{style:z.storageKeyText,children:e.key}),e.description?Y(c,{style:z.descriptionText,children:e.description}):null,Ve(l,{style:z.cardHeaderMeta,children:[Y(l,{style:[z.statusBadge,{backgroundColor:o.bgColor}],children:Y(c,{style:[z.statusText,{color:o.labelColor}],children:o.label})}),Ve(l,{style:[z.storageBadge,{backgroundColor:`${y}15`}],children:[Y(a,{size:10,color:y}),Y(c,{style:[z.storageText,{color:y}],children:g})]}),e.storageType==="mmkv"&&e.instanceId&&Ve(l,{style:[z.instanceBadge,{backgroundColor:Co(e.instanceId)+"20",borderColor:Co(e.instanceId)+"40"}],children:[Y(ti,{size:9,color:Co(e.instanceId)}),Y(c,{style:[z.instanceText,{color:Co(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:z.valueBadge,children:Y(c,{style:z.valueText,children:e.valueType?e.valueType.toUpperCase():Et(e.value)})})]})]})]}),Y(l,{style:z.cardHeaderRight,children:Y(l,{style:z.actionButton,children:Y(Xa,{size:12,color:he.color.textSecondary})})})]}),t&&i&&Ve(l,{style:z.cardBody,children:[Y(l,{style:z.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"?Ve(l,{style:z.simpleValueContainer,children:[Y(c,{style:z.simpleValueLabel,children:"Current Value:"}),Y(l,{style:z.simpleValueBox,children:Y(c,{style:z.simpleValueContent,selectable:true,children:String(p)})}),Ve(c,{style:z.valueTypeText,children:["Type: ",Et(e.value)]})]}):Y(Ud,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),u&&Ve(l,{style:z.valueContainer,children:[Y(c,{style:z.valueLabel,children:"Expected Value:"}),Y(l,{style:z.expectedValueBox,children:Y(c,{style:z.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Ve(l,{style:z.valueContainer,children:[Y(c,{style:z.valueLabel,children:"Expected Type:"}),Y(l,{style:z.expectedValueBox,children:Y(c,{style:z.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ve(c,{style:z.typeHelperText,children:["Current type: ",Et(e.value)]})]}),e.lastUpdated?Y(l,{style:z.metaInfo,children:Ve(c,{style:z.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ve(l,{style:z.cardBody,children:[Ve(l,{style:z.emptyValueContainer,children:[Y(Za,{size:16,color:ne.semantic.warning}),Y(c,{style:z.emptyValueText,children:"Storage key not found or empty"})]}),u&&Ve(l,{style:z.valueContainer,children:[Y(c,{style:z.valueLabel,children:"Expected Value:"}),Y(l,{style:z.expectedValueBox,children:Y(c,{style:z.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var z=ge.create({storageKeyCard:{backgroundColor:he.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:he.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:he.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:ko,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:he.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:he.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:he.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:he.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:he.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:he.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:he.color.border},simpleValueContent:{color:wo.success,fontSize:12,fontFamily:ko,lineHeight:16},valueTypeText:{color:he.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:he.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:he.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:he.color.border},valueContent:{color:he.color.text,fontSize:10,fontFamily:ko,lineHeight:14},expectedValueBox:{backgroundColor:he.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:he.color.border},expectedValueContent:{color:he.color.text,fontSize:10,fontFamily:ko,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:wo.warning+"0D",borderRadius:4,borderWidth:1,borderColor:wo.warning+"1A"},emptyValueText:{color:wo.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:he.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:he.color.textTertiary,fontSize:9,fontStyle:"italic"}});V();import{AlertCircle as Qd,CheckCircle2 as Zd,XCircle as ni,Eye as Xd,Database as ai,Shield as eu}from"@buoy-gg/shared-ui/web";import{night as pt}from"@buoy-gg/shared-ui/web";import{jsx as we,jsxs as qe}from"react/jsx-runtime";var tu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:Zd,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:Qd,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:ni,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:ni,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Xd,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],ru=[{key:"mmkv",label:le.mmkv,description:le.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:ai},{key:"async",label:le.asyncFull,description:le.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:ai},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:eu}];function ou({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:u,asyncCount:d,secureCount:y}=e;return t===0?qe(l,{style:X.statsContainer,children:[we(c,{style:X.sectionTitle,children:"STORAGE BREAKDOWN"}),we(l,{style:X.emptyState,children:we(c,{style:X.emptyStateText,children:"No storage keys detected"})})]}):qe(l,{style:X.statsContainer,children:[qe(l,{style:X.breakdownSection,children:[we(c,{style:X.sectionTitle,children:"KEY STATUS BREAKDOWN"}),we(l,{style:X.breakdownList,children:tu.map(g=>{let p=0,f=false;switch(g.key){case"valid":p=a,f=p>0;break;case"missing":p=r,f=p>0;break;case"wrongValue":p=o,f=p>0;break;case"wrongType":p=n,f=p>0;break;case"optional":p=i,f=p>0;break}if(!f)return null;let x=t>0?(p/t*100).toFixed(1):"0",h=g.icon;return we(l,{style:X.breakdownItem,children:qe(l,{style:X.breakdownItemRow,children:[qe(l,{style:X.breakdownItemLeft,children:[we(l,{style:[X.breakdownIcon,{backgroundColor:g.bgColor}],children:we(h,{size:14,color:g.color})}),qe(l,{style:X.breakdownItemInfo,children:[we(c,{style:X.breakdownItemLabel,children:g.label}),we(c,{style:X.breakdownItemDesc,children:g.description})]})]}),qe(l,{style:X.breakdownItemRight,children:[we(c,{style:[X.breakdownCount,{color:g.textColor}],children:p}),qe(c,{style:X.breakdownPercentage,children:[x,"%"]})]})]})},g.key)})})]}),(u>0||d>0||y>0)&&qe(l,{style:X.breakdownSection,children:[we(c,{style:X.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),we(l,{style:X.breakdownList,children:ru.map(g=>{let p=0,f=false;switch(g.key){case"mmkv":p=u,f=p>0;break;case"async":p=d,f=p>0;break;case"secure":p=y,f=p>0;break}if(!f)return null;let x=t>0?(p/t*100).toFixed(1):"0",h=g.icon,b=Hn(g.key);return we(l,{style:X.breakdownItem,children:qe(l,{style:X.breakdownItemRow,children:[qe(l,{style:X.breakdownItemLeft,children:[we(l,{style:[X.breakdownIcon,{backgroundColor:`${b}15`}],children:we(h,{size:14,color:b})}),qe(l,{style:X.breakdownItemInfo,children:[we(c,{style:X.breakdownItemLabel,children:g.label}),we(c,{style:X.breakdownItemDesc,children:g.description})]})]}),qe(l,{style:X.breakdownItemRight,children:[we(c,{style:[X.breakdownCount,{color:b}],children:p}),qe(c,{style:X.breakdownPercentage,children:[x,"%"]})]})]})},g.key)})})]})]})}var X=ge.create({statsContainer:{marginBottom:24,backgroundColor:pt.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:pt.color.border},sectionTitle:{color:pt.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:pt.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:pt.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:pt.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:pt.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:pt.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:pt.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:pt.color.textTertiary,fontSize:11,textAlign:"center"}});V();import{Database as nu,CyberpunkSectionButton as au}from"@buoy-gg/shared-ui/web";import{jsx as iu}from"react/jsx-runtime";function lu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return iu(au,{id:"storage-events",title:"EVENTS",subtitle:r,icon:nu,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}V();import{macOSColors as Wr}from"@buoy-gg/shared-ui/web";var su=["SET","GET","MERGE","DELETE","CLEAR"],cu={SET:Wr.semantic.info,GET:Wr.text.muted,MERGE:Wr.semantic.debug,DELETE:Wr.semantic.error,CLEAR:Wr.semantic.warning};function du(e){return cu[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 yu(e){return!!e.data?.initialScan}V();import{useState as gu}from"react";import{macOSColors as Yt,night as ce,monoFont as ii}from"@buoy-gg/shared-ui/web";import{jsx as ae,jsxs as nt}from"react/jsx-runtime";function pu({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=gu(false),{instances:a,instanceCount:i,refresh:u}=rn(false),d=a.find(g=>g.id===e),y=g=>{t(g),n(false)};return Yo()?i===0?ae(l,{style:$.container,children:nt(l,{style:$.emptyState,children:[ae(c,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),ae(c,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&ae(K,{style:$.refreshButton,onPress:u,activeOpacity:.7,children:ae(c,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):nt(l,{style:$.container,children:[nt(K,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[ae(l,{style:$.selectorContent,children:d?ae(li,{instance:d,isSelected:true}):ae(c,{style:$.placeholderText,children:"Select MMKV Instance"})}),ae(c,{style:$.dropdownArrow,children:"\u25BC"})]}),ae(zn,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:ae(K,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:nt(l,{style:$.dropdownContainer,children:[nt(l,{style:$.dropdownHeader,children:[nt(c,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&ae(K,{style:$.headerRefreshButton,onPress:u,activeOpacity:.7,children:ae(c,{style:$.headerRefreshText,children:"\u21BB"})})]}),ae(Vr,{style:$.dropdownList,children:a.map(g=>ae(K,{style:[$.dropdownItem,g.id===e&&$.dropdownItemSelected],onPress:()=>y(g.id),activeOpacity:.7,children:ae(li,{instance:g,isSelected:g.id===e})},g.id))})]})})})]}):ae(l,{style:$.container,children:nt(l,{style:$.unavailableState,children:[nt(c,{style:$.unavailableTitle,children:[le.mmkv," Not Available"]}),ae(c,{style:$.unavailableDescription,children:oa()})]})})}function li({instance:e,isSelected:t}){return nt(l,{style:$.instanceRow,children:[nt(l,{style:$.instanceLeft,children:[ae(c,{style:[$.instanceId,t&&$.instanceIdSelected],numberOfLines:1,children:e.id}),nt(l,{style:$.instanceBadges,children:[e.encrypted&&ae(l,{style:[$.badge,$.badgeEncrypted],children:ae(c,{style:$.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&ae(l,{style:[$.badge,$.badgeReadOnly],children:ae(c,{style:$.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),nt(l,{style:$.instanceRight,children:[ae(c,{style:$.keyCount,children:e.keyCount}),ae(c,{style:$.keyCountLabel,children:"keys"})]})]})}var $=ge.create({container:{marginBottom:12},unavailableState:{backgroundColor:Yt.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:Yt.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:Yt.semantic.warning},unavailableDescription:{fontSize:12,color:ce.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:ce.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:ce.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:ce.color.text},emptyStateDescription:{fontSize:12,color:ce.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:ce.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:ce.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:ce.color.accent},selectorButton:{backgroundColor:ce.color.surface,borderRadius:12,borderWidth:1,borderColor:ce.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:ce.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:ce.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:ce.color.surface,borderRadius:16,borderWidth:1,borderColor:ce.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:ce.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:ce.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:ce.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:ce.color.separator},dropdownItemSelected:{backgroundColor:ce.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:ce.color.text,fontFamily:ii},instanceIdSelected:{fontWeight:"600",color:ce.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:Yt.semantic.success+"15",borderColor:Yt.semantic.success+"40"},badgeReadOnly:{backgroundColor:Yt.semantic.warning+"15",borderColor:Yt.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:ce.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:ce.color.text,fontFamily:ii},keyCountLabel:{fontSize:9,color:ce.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});V();import{macOSColors as st,night as kt,monoFont as fu}from"@buoy-gg/shared-ui/web";import{jsx as De,jsxs as fr}from"react/jsx-runtime";function mu({instanceId:e}){let t=ya(e);return t?De(l,{style:ye.container,children:fr(l,{style:ye.panel,children:[De(l,{style:ye.header,children:De(c,{style:ye.headerTitle,children:"Instance Details"})}),fr(l,{style:ye.infoGrid,children:[De(_r,{label:"Instance ID",value:t.id,valueStyle:ye.monoValue}),De(_r,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),De(_r,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?st.semantic.success:kt.color.textTertiary}),De(_r,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?st.semantic.warning:kt.color.textTertiary}),t.size!==void 0&&De(_r,{label:"Size",value:hu(t.size),valueStyle:ye.monoValue})]}),t.encrypted&&fr(l,{style:ye.notice,children:[De(c,{style:ye.noticeIcon,children:"\u{1F512}"}),De(c,{style:ye.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&fr(l,{style:[ye.notice,ye.noticeWarning],children:[De(c,{style:ye.noticeIcon,children:"\u{1F441}\uFE0F"}),De(c,{style:[ye.noticeText,ye.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):De(l,{style:ye.container,children:De(l,{style:ye.errorState,children:fr(c,{style:ye.errorText,children:["Instance not found: ",e]})})})}function _r({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return fr(l,{style:ye.infoItem,children:[De(c,{style:ye.infoLabel,children:e}),De(c,{style:[ye.infoValue,r,o&&{color:o},n&&ye.infoValueHighlight],children:t})]})}function hu(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 ye=ge.create({container:{marginBottom:12},errorState:{backgroundColor:st.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:st.semantic.error+"40"},errorText:{fontSize:12,color:st.semantic.error,textAlign:"center"},panel:{backgroundColor:kt.color.surface,borderRadius:12,borderWidth:1,borderColor:kt.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:kt.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:kt.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:kt.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:kt.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:kt.color.accent},monoValue:{fontFamily:fu},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:st.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:st.semantic.success+"30"},noticeWarning:{backgroundColor:st.semantic.warning+"10",borderColor:st.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:st.semantic.success,lineHeight:16},noticeTextWarning:{color:st.semantic.warning}});V();import{getBrowserStorage as bu,subscribeToBrowserStorage as vu}from"@buoy-gg/shared-ui/web/utils";var si=0,Ct=()=>bu("sessionStorage"),ci=()=>Array.from({length:Ct().length},(e,t)=>Ct().key(t)).filter(e=>e!==null),Su={set(e,t){Ct().setItem(e,String(t))},getString(e){return Ct().getItem(e)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(e){return Ct().getItem(e)!==null},delete(e){let t=this.contains(e);return Ct().removeItem(e),t},getAllKeys:ci,clearAll(){Ct().clear()},get size(){return ci().reduce((e,t)=>e+2*(t.length+(Ct().getItem(t)?.length??0)),0)},addOnValueChangedListener(e){return{remove:vu(t=>{t.area==="sessionStorage"&&(t.key!==void 0?e(t.key):t.prevPairs?.forEach(([r])=>e(r)))})}}};function wu(){if(typeof window>"u")return()=>{};try{Ct()}catch{return()=>{}}++si===1&&Vn("sessionStorage",Su);let e=true;return()=>{e&&(e=false,--si===0&&Bn("sessionStorage"))}}export{mu as MMKVInstanceInfoPanel,pu as MMKVInstanceSelector,su as STORAGE_OPS,Ea as StorageBrowserMode,pn as StorageEventCard,yn as StorageEventDetailContent,gn as StorageEventDetailFooter,lu as StorageEventsSection,Yd as StorageKeyCard,Yn as StorageKeySection,ou as StorageKeyStatsSection,mn as StorageModalWithTabs,qd as StorageSection,Bd as StorageToolView,Go as StorageTypeFilterBar,co as batchPairsOf,un as canUndo,Qr as clearAllAppStorage,ra as countByStorageType,Ld as createStorageTool,ht as detectMMKVType,Bi as formatMMKVValue,Ns as getMMKVClass,oa as getMMKVUnavailableMessage,Cd as getValueType,yu as isInitialScan,Yo as isMMKVAvailable,zo as isTypeMatch,Kr as isValueOnDevice,dn as jumpToState,Vn as registerMMKVInstance,Pi as registerSecureStoreKeys,Dc as requestStorageBrowserRefresh,wa as setStorageValue,wu as startBrowserStorageCapture,nn as storageEditBlockedReason,Dt as storageEventStore,du as storageOpDot,uu as storageOpOf,Fd as storageSyncAdapter,Qa as storageToolPreset,Pc as storageValueToEditableText,cn as undoOperation,Bn as unregisterMMKVInstance,zi as unregisterSecureStoreKey,Zo as useAsyncStorageKeys,ya as useMMKVInstance,ac as useMMKVInstanceExists,rn as useMMKVInstances,ec as useMMKVKeys,ca as useMultiMMKVKeys,Va as useStorageEvents,Sa as validateStorageValue};
4
+ registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&Ce.length>0&&Ie(l,{style:O.instanceNavbar,children:[Ie(l,{style:O.instanceNavbarHeader,children:[q(c,{style:O.instanceNavbarLabel,children:"INSTANCES"}),Ce.length>Q&&q(Xn,{style:{transform:[{scale:.85}]}})]}),Ie(Pr,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||Ce.length===1)&&Ie(P,{onPress:()=>Wt(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ne.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[q(Fa,{size:12,color:re===null?L.color.text:L.color.textSecondary}),q(c,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),q(l,{style:O.instanceNavbarBadge,children:q(c,{style:O.instanceNavbarBadgeText,children:Ce.reduce((s,m)=>s+m.keyCount,0)})})]}),Ce.map((s,m)=>{let U=m>=Q;return Ie(P,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?Se(true):Wt(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?L.color.border:hr(s.id)+"40",backgroundColor:s.id===re?hr(s.id)+"20":L.color.surfaceElevated,opacity:U?.5:1}],children:[q(Fa,{size:12,color:s.id===re?hr(s.id):L.color.textSecondary}),q(c,{style:[O.instanceNavbarButtonText,s.id===re&&{color:hr(s.id),fontWeight:"700"}],children:s.id}),q(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:hr(s.id)+"30"}],children:q(c,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:hr(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),Ti=q(Pc,{copyValue:No,mmkvInstances:Ce.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ye,onClearComplete:xe,isSelectMode:$t,onToggleSelectMode:Wo,selectedCount:or.size}),Ii=$t?q(Uc,{selectedKeys:Je,mmkvInstances:Ce.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:_o,onHideKeys:Ir,onSelectAll:Br,onClearSelection:Vr,totalVisibleKeys:v.length}):null,Ei=z?Ie(P,{style:O.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ie(l,{style:O.limitBannerContent,children:[Ie(l,{style:O.limitBannerLeft,children:[q(ks,{size:16,color:L.color.accent}),q(c,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),q(Xn,{})]}),q(c,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,Bi=(()=>{let s=N.some(U=>!Pe(U.key)),m;return a||!s?(m=Ts({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(m={...m,message:"No keys match. Clear the search to see them."})):se==="missing"?m={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?m={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:m={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},q(xs,{...m,testID:"buoy-storage-keys-empty"})})(),Vi=q(Cs,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ie(l,{style:O.root,children:[_t>0?q(Ec,{onDone:()=>kr(0)},_t):null,Ie(Pr,{testID:"buoy-storage-scroll",ref:Ge,onScroll:s=>{wr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[q(l,{style:O.backgroundGrid}),q(cc,{stats:jt,tabStats:yt,healthPercentage:Rr,healthStatus:ki,healthColor:Ci,activeFilter:se,onFilterChange:je,activeStorageType:ye,onStorageTypeChange:rr,showStatus:!ee}),xi,ze.length>0?Ie(l,{style:O.keysSection,children:[Ie(l,{style:O.sectionHeader,children:[Ie(l,{style:O.sectionHeaderLeft,children:[Ie(c,{style:O.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),q(l,{style:O.countBadge,children:q(c,{style:O.countText,children:v.length})})]}),Ti]}),Ii,q(la,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:$t,selectedKeys:or,onSelectionChange:tt,eventCountByKey:u,onViewHistory:y,onHideKey:s=>Ir([s]),onToggleKey:$o,onDeleteKey:eo,editBlockedFor:Er,pinnedKeys:h,onTogglePin:b,onRowRef:ut,onOpenKey:E}),Ei]}):Bi,q(c,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Vi]})]})}var O=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...Jn,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...Jn,opacity:.006,backgroundColor:mr.info},techFooter:{fontSize:8,color:L.color.textTertiary,fontFamily:Fr,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:L.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:L.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:L.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:L.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:L.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:L.color.border},countText:{fontSize:11,fontWeight:"600",color:L.color.text,fontFamily:Fr},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:L.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:L.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:L.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:L.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:L.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:L.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Fr,color:L.color.accent,backgroundColor:L.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:L.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:L.color.surface,borderRadius:10,borderWidth:1,borderColor:L.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:L.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:L.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:L.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:L.color.textSecondary,fontFamily:Fr,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:L.color.text},instanceNavbarBadge:{backgroundColor:L.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:L.color.textSecondary,fontFamily:Fr},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:L.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:L.color.border},clearSearchText:{fontSize:13,color:L.color.text,fontWeight:"500"},limitBanner:{backgroundColor:L.color.surface,borderRadius:10,borderWidth:1,borderColor:L.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:L.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:L.color.textTertiary,fontSize:11}});import{jsx as td}from"react/jsx-runtime";function La({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:E,onCloseDetail:D}){return td(ed,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:u,lastWriteByKey:d,onViewHistory:y,enabledStorageTypes:g,statusFilter:p,onStatusFilterChange:f,onStatusCountsChange:x,pinnedKeys:h,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:E,onCloseDetail:D})}import{ProFeatureBanner as rd}from"@buoy-gg/shared-ui/web";B();import{useMemo as od}from"react";import{useEventStoreEvents as nd}from"@buoy-gg/shared-ui/web";B();import{BaseEventStore as ad}from"@buoy-gg/shared-ui/web";function Nr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function wo(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Wa(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=wo(e);return Nr(t.value)||Nr(t.prevValue)||Nr(r)||Nr(o)}var id=0;function ko(){return`se-${Date.now()}-${++id}`}var ld=class extends ad{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Ke.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:u}=wt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[u]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:u,initialScan:true},storageType:"mmkv",id:ko()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Gt(),zi(Kn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,u]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:u??void 0,initialScan:true},storageType:"async",id:ko()})}}}catch{}}async startCapturing(){mc()||await fc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=ba(e=>{let t={...e,storageType:"async",id:ko()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Ln(e=>{let t={...e,storageType:"mmkv",id:ko()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)Wa(o)||t.set(o.id,o);let r=e.map(o=>{let n=t.get(o.id);return!n||!Wa(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...wo(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=this.events.findIndex(n=>n.id===e.id);if(t===-1)return;let r=this.events[t],o=this.events.slice();o[t]={...r,...e,timestamp:r.timestamp,data:{...r.data,...e.data}},super.replaceEvents(o)}},Pt=new ld;function _a(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=od(()=>t==="all"?void 0:d=>d.filter(y=>y.storageType===t),[t]),{events:a,clearEvents:i,isActive:u}=nd(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:u}}B();pt();import{useState as Co,useCallback as st,useMemo as Ft,useEffect as $a,useRef as sd}from"react";import{formatRelativeTime as xo,macOSColors as To,night as Zt,parseValue as Io,devToolsStorageKeys as Na,GitBranch as cd,EventStepperFooter as dd,EventHistoryViewer as ud,copyToClipboard as yd,ProUpgradeModal as gd,monoFont as qa}from"@buoy-gg/shared-ui/web";import{useIsPro as pd}from"@buoy-gg/license/web";B();import{computeLineDiff as jy,DiffType as Uy,ABSENT_VALUE as fd,isAbsent as Gy}from"@buoy-gg/shared-ui/web/dataViewer";B();import{ThemedSplitView as md}from"@buoy-gg/shared-ui/web/dataViewer";B();import{diffThemes as hd,gitClassicTheme as Qy,devToolsDefaultTheme as Xy}from"@buoy-gg/shared-ui/web/dataViewer";B();import{night as Ha}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as bd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as ja}from"react/jsx-runtime";function vd({oldValue:e,newValue:t,scrollEnabled:r=true}){return ja(l,{style:r?Ua.container:Ua.containerInline,children:ja(bd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var Ua=pe.create({container:{flex:1,backgroundColor:Ha.color.bg},containerInline:{backgroundColor:Ha.color.bg}});B();function hn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}B();import{night as Ee,Lock as Sd,monoFont as wd}from"@buoy-gg/shared-ui/web";import{jsx as bn,jsxs as kd}from"react/jsx-runtime";var Cd={copy:{color:Ee.color.accent,backgroundColor:Ee.color.accentSoft,borderColor:Ee.color.accentBorderStrong,textColor:Ee.color.accent},jump:{color:Ee.color.warning,backgroundColor:Ee.color.warningSoft,borderColor:Ee.color.warning+"40",textColor:Ee.color.warning},undo:{color:Ee.color.info,backgroundColor:Ee.color.infoSoft,borderColor:Ee.color.info+"40",textColor:Ee.color.info}};function vn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=Cd[r],i=o||n;return kd(P,{disabled:i,onPress:e,style:[Eo.button,{backgroundColor:i?Ee.color.fill:a.backgroundColor,borderColor:i?Ee.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?bn(Sd,{size:10,color:Ee.color.textTertiary,style:Eo.lockIcon}):bn(l,{style:[Eo.dot,{backgroundColor:i?Ee.color.textTertiary:a.color}]}),bn(c,{style:[Eo.text,{color:i?Ee.color.textTertiary:a.textColor}],children:t})]})}var Eo=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Ee.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:wd,height:12}});B();pt();Gt();import{isDevToolsStorageKey as xd}from"@buoy-gg/shared-ui/web";function Ot(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function Sn(e){let{action:t,data:r}=e;if(Ot(r?.prevValue)||Ot(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await Mr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function wn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let u=i.data;if(Ot(u?.value)||Ot(u?.prevValue)||Ot(u?.pairs)||Ot(u?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)Id(e[i],r);let o=new Set;for(let i of e)Td(i,o);let n=[],a=[];for(let i of o){if(xd(i))continue;let u=r.get(i);u==null?a.push(i):n.push([i,u])}a.length>0&&await lr(a),n.length>0&&await Mr(n)}function Td(e,t){let{data:r}=e;if(r){if(r.key&&t.add(r.key),r.keys)for(let o of r.keys)t.add(o);if(r.pairs)for(let[o]of r.pairs)t.add(o);if(r.prevPairs)for(let[o]of r.prevPairs)t.add(o)}}function Id(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),u={...a,...i};t.set(o.key,JSON.stringify(u))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let u=JSON.parse(i),d=JSON.parse(a),y={...u,...d};t.set(n,JSON.stringify(y))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function kn(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ot(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ot(r.prevPairs);default:return false}}import{Fragment as Ed,jsx as qe,jsxs as Ga}from"react/jsx-runtime";var br=-1,Bo={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Vo(e){switch(e){case"setItem":case"multiSet":return To.semantic.success;case"removeItem":case"multiRemove":case"clear":return To.semantic.error;case"mergeItem":case"multiMerge":return To.semantic.info;default:return To.text.muted}}function Ja(e){let t=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),n=String(e.getMilliseconds()).padStart(3,"0");return`${t}:${r}:${o}.${n}`}var Bd={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},Vd=[];function Cn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=pd(),[a,i]=Co(false),[u,d]=Co("split"),[y,g]=Co(Math.max(br,t-1)),[p,f]=Co(t),x=sd(false),h=Ft(()=>e.events.sort((ae,ut)=>ae.timestamp.getTime()-ut.timestamp.getTime()),[e.events]),b=h.length;$a(()=>{if(x.current)return;(async()=>{try{let ae=await oe.getItem(Na.storage.diffViewerMode());(ae==="split"||ae==="tree")&&d(ae),x.current=true}catch{}})()},[]),$a(()=>{let ae=Math.min(b-1,Math.max(0,t)),ut=Math.max(br,Math.min(ae-1,t-1));g(ut),f(ae)},[t,b]);let S=st(async ae=>{d(ae);try{await oe.setItem(Na.storage.diffViewerMode(),ae)}catch{}},[]),w=h[t],T=w?.action,I=y===br,E=I?void 0:h[Math.max(0,Math.min(b-1,y))],D=h[Math.max(0,Math.min(b-1,p))],C=Ft(()=>{let ae=D?.data;return ae?.initialScan?"scanned":ae?.prevValue===null||ae?.prevValue===void 0?"absent":"prior"},[D]),V=Ft(()=>C==="absent"?fd:C==="scanned"?Io(D?.data?.value):Io(D?.data?.prevValue),[C,D]),Q=Ft(()=>I?{index:br,label:Bo[C].label,timestamp:Bo[C].timestamp,relativeTime:Bo[C].relativeTime,badge:qe(l,{style:[er.actionBadgeSmall,{backgroundColor:`${Zt.color.textTertiary}20`}],children:qe(c,{style:[er.actionTextSmall,{color:Zt.color.textTertiary}],children:Bo[C].badge})})}:{index:y,label:`#${y+1} / ${b}`,timestamp:E?Ja(E.timestamp):"",relativeTime:E?xo(E.timestamp):"",badge:E?qe(l,{style:[er.actionBadgeSmall,{backgroundColor:`${Vo(E.action)}20`}],children:qe(c,{style:[er.actionTextSmall,{color:Vo(E.action)}],children:hn(E.action)})}):void 0},[y,E,b,I,C]),ve=Ft(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?Ja(D.timestamp):"",relativeTime:D?xo(D.timestamp):"",badge:D?qe(l,{style:[er.actionBadgeSmall,{backgroundColor:`${Vo(D.action)}20`}],children:qe(c,{style:[er.actionTextSmall,{color:Vo(D.action)}],children:hn(D.action)})}):void 0}),[p,D,b]),Se=Ft(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),H=st(()=>{y>br&&g(y-1)},[y]),ue=st(()=>{y<p-1&&g(y+1)},[y,p]),ee=st(()=>{p>y+1&&f(p-1)},[p,y]),se=st(()=>{p<b-1&&f(p+1)},[p,b]),je=Ft(()=>I?V:Io(E?.data?.value??null),[I,V,E]),Ue=Ft(()=>Io(D?.data?.value),[D]),vt=st(()=>u==="split"?qe(md,{oldValue:je,newValue:Ue,differences:Vd,theme:hd.devToolsDefault,options:Bd,showThemeName:false,scrollEnabled:false}):qe(vd,{oldValue:je,newValue:Ue,scrollEnabled:false}),[je,Ue,u]),Et=st(()=>{r(Math.max(0,t-1))},[t,r]),ye=st(()=>{r(Math.min(b-1,t+1))},[t,b,r]),rr=st(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await Sn(w)}catch{}},[w,n]),re=st(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ae=h.filter(_t=>_t.storageType!=="mmkv"),ut=ae.findIndex(_t=>_t.timestamp.getTime()===w.timestamp.getTime());if(ut!==-1)try{await wn(ae,ut)}catch{}},[w,h,n]),Wt=st(async()=>{if(!w)return;let ae={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await yd(ae)},[w]),Ge=w?.storageType!=="mmkv",wr=Ge&&w&&kn(w);return Ga(Ed,{children:[Ge&&Ga(l,{style:er.actionButtonsContainer,children:[qe(vn,{type:"undo",text:"UNDO",onPress:rr,disabled:!wr,locked:!n}),qe(vn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),qe(vn,{type:"copy",text:"COPY",onPress:Wt})]}),qe(ud,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:cd,diffModeTabs:Se,activeDiffMode:u,onDiffModeChange:S,renderDiffContent:vt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:H,onLeftNext:ue,onRightPrevious:ee,onRightNext:se,canLeftPrevious:y>br,canLeftNext:y<p-1,canRightPrevious:p>y+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:xo(w?.timestamp),onFooterPrevious:Et,onFooterNext:ye}),qe(gd,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function xn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,u)=>i.timestamp.getTime()-u.timestamp.getTime()),a=n.length;return qe(dd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:xo(n[t]?.timestamp),applySafeAreaInset:o})}var er=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:Zt.color.surface,borderBottomWidth:1,borderBottomColor:Zt.color.border},valueBox:{backgroundColor:Zt.color.bg,borderRadius:6,borderWidth:1,borderColor:Zt.color.border,padding:8},valueText:{fontSize:12,color:Zt.color.text,fontFamily:qa,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:qa}});B();import{Filter as Ya,DynamicFilterView as Rd,Database as Ad,HardDrive as Dd,Shield as Md,macOSColors as xt,night as Tt}from"@buoy-gg/shared-ui/web";import{jsx as Lt,jsxs as vr}from"react/jsx-runtime";function zd({ignoredPatterns:e,onTogglePattern:t,onAddPattern:r,availableKeys:o=[],enabledStorageTypes:n,onToggleStorageType:a}){let i={addFilterSection:{enabled:true,placeholder:"Enter key pattern to hide...",title:"KEY FILTERS",icon:Ya},availableItemsSection:{enabled:true,title:"AVAILABLE EVENT KEYS",emptyMessage:"No storage event keys available. Events will appear here once captured.",items:o},howItWorksSection:{enabled:true,title:"HOW EVENT FILTERS WORK",description:"Patterns hide matching storage keys from the event list. Storage type toggles control which storage backends are monitored.",examples:["\u2022 react_buoy \u2192 hides keys containing react_buoy","\u2022 @temp \u2192 hides @temp_user, @temp_data","\u2022 redux \u2192 hides redux-persist:root",`\u2022 ${ne.asyncFull}: show or hide captured events`,`\u2022 ${ne.mmkv}: show or hide captured events`],icon:Ya},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return vr(l,{style:Ze.container,children:[vr(l,{style:Ze.storageTypeSection,children:[Lt(c,{style:Ze.sectionTitle,children:"STORAGE TYPES"}),vr(l,{style:Ze.storageTypeButtons,children:[vr(P,{style:[Ze.storageTypeButton,n.has("async")&&Ze.storageTypeButtonActive,{borderColor:xt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Lt(Ad,{size:16,color:n.has("async")?xt.semantic.warning:Tt.color.textTertiary}),Lt(c,{style:[Ze.storageTypeButtonText,n.has("async")&&{color:xt.semantic.warning}],children:ne.asyncFull})]}),vr(P,{style:[Ze.storageTypeButton,n.has("mmkv")&&Ze.storageTypeButtonActive,{borderColor:xt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ne.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Lt(Dd,{size:16,color:n.has("mmkv")?xt.semantic.info:Tt.color.textTertiary}),Lt(c,{style:[Ze.storageTypeButtonText,n.has("mmkv")&&{color:xt.semantic.info}],children:ne.mmkv})]}),ne.hasSecure&&vr(P,{style:[Ze.storageTypeButton,n.has("secure")&&Ze.storageTypeButtonActive,{borderColor:xt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Lt(Md,{size:16,color:n.has("secure")?xt.semantic.success:Tt.color.textTertiary}),Lt(c,{style:[Ze.storageTypeButtonText,n.has("secure")&&{color:xt.semantic.success}],children:"Secure Storage"})]})]})]}),Lt(Rd,{...i})]})}var Ze=pe.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:Tt.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:Tt.color.textSecondary,letterSpacing:.8,marginBottom:12},storageTypeButtons:{flexDirection:"row",gap:8},storageTypeButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:10,paddingHorizontal:12,backgroundColor:Tt.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:Tt.color.border},storageTypeButtonActive:{backgroundColor:Tt.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:Tt.color.textTertiary}});B();import{memo as Kd}from"react";import{RelativeTime as Pd,macOSColors as qr,parseValue as Fd,CompactRow as Od}from"@buoy-gg/shared-ui/web";import{jsx as Qa}from"react/jsx-runtime";function Ld(e){let t=Fd(e);return t===null?"null":t===void 0?"undefined":Array.isArray(t)?"array":typeof t=="boolean"?"boolean":typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="object"?"object":"undefined"}function Wd(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return qr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return qr.semantic.error;case"mergeItem":case"multiMerge":return qr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return qr.semantic.warning;default:return qr.text.muted}}function _d(e,t){return`${Array.from(e).map(r=>r==="async"?ne.async:ne.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Tn=Kd(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=Wd(e.lastAction),i=hn(e.lastAction),u=e.totalOperations??1;return Qa(Od,{statusDotColor:a,statusLabel:"Storage",statusSublabel:_d(e.storageTypes,u),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:Qa(Pd,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as $d}from"@buoy-gg/license/web";import{Fragment as Xa,jsx as M,jsxs as ct}from"react/jsx-runtime";var gg=vs["storage.events"].free,In={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},Nd={storage:In,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},qd={storage:In,parse:e=>e==="true",serialize:e=>e.toString()},Za={storage:In,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},Hd={...Za,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function En({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:u,onRefresh:d,onEventSelect:y}){let g=$d(),p=bs("storage.events"),[f,x]=co(sr.storage.activeTab(),"browser",Nd);Qo(()=>{u?.(f)},[f,u]);let[h,b]=rt(""),[S,w]=rt(null),[T,I]=rt(false),[E,D]=co(sr.storage.isMonitoring(),true,qd),{events:C,clearEvents:V,isCapturing:Q}=_a({enabled:E}),[ve,Se]=rt(null),[H,ue]=rt(null),[ee,se]=rt(null),[je,Ue]=rt(0),[vt,Et]=rt(false),[ye,rr]=co(sr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),Hd),[re,Wt]=rt("all"),[Ge,wr]=rt(new Set(["async","mmkv","secure"])),[ae,ut]=co(sr.storage.pinnedKeys(),new Set,Za),_t=qn(null),kr=E&&Q,[$t,Cr]=rt("bottomSheet"),or=Ae(v=>{Cr(v)},[]),Bt=Ae(()=>{D(v=>!v)},[]),Ce=Ae(()=>{V(),Se(null),Ue(0)},[V]),Gr=Ae(v=>{ue(v),se(null)},[]),Jr=Ae(()=>{ue(null),se(null)},[]),Yr=Ae(v=>{rr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Nt=Ae(v=>{rr(k=>new Set([...k,v]))},[]),Ko=Ae(v=>{ut(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),xr=Ae(()=>{Et(!vt)},[vt]),Po=Ae(v=>{wr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Tr=qn([]),nr=Ae(()=>{let v=Tr.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=so(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=so(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=so(z.value),k),{})}},[]),Fo=Ae(async()=>{Te.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await lo()}catch{Te.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await Gi()}catch{Te.alert("Error","Failed to clear all storage")}}}])},[]),qt=v=>{let k=cs(v);return k===null?"null":k===void 0?"undefined":Array.isArray(k)?"array":typeof k=="boolean"?"boolean":typeof k=="number"?"number":typeof k=="string"?"string":typeof k=="object"?"object":"undefined"},[Qr,Oo]=rt([]);Qo(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();Oo([...v].sort())}catch{}})()},[e]);let Xr=lt(()=>{let v=new Set(Qr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Qr]),N=lt(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Ge.has(k.storageType)||Array.from(ye).some(Je=>z.includes(Je)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=qt(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:qt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ye,Ge]),we=lt(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),Lo=lt(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),Zr=lt(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),xe=lt(()=>H&&N.find(v=>v.key===H)||null,[H,N]);Qo(()=>{if(!y)return;let v=we||(ee!==null?xe:null),k=we?je:ee;if(!v||k==null)return;let z=[...v.events].sort((Br,Vr)=>Br.timestamp.getTime()-Vr.timestamp.getTime()),j=z[k],Je=z[k-1];j&&y(j),Je&&y(Je)},[y,we,je,xe,ee]);let et=lt(()=>C.filter(v=>{if(!v.data?.key||!Ge.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[C,ye,Ge]),Wo=lt(()=>ga(et),[et]),tt=lt(()=>re==="all"?et:et.filter(v=>v.storageType===re),[et,re]),_o=Ae(()=>tt.map(v=>({key:v.data?.key,action:v.action,value:so(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[tt]),Ir=lt(()=>tt.slice(0,p),[tt,p]),Ht=lt(()=>Math.max(0,tt.length-p),[tt.length,p]),$o=.8,eo=Ae(v=>v.id,[]),Er=Ae(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Je)=>j.timestamp.getTime()-Je.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Ue(z>=0?z:0)},[N]),No=Ae(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:qt(v.data?.value)};return M(Tn,{data:k,onPress:()=>Er(v),testID:`buoy-storage-event-${v.id}`})},[Er]);if(!e)return null;let jt=n?sr.modal.root():sr.storage.modal(),yt=()=>{if(vt)return M(zd,{ignoredPatterns:ye,onTogglePattern:Yr,onAddPattern:Nt,availableKeys:Xr,enabledStorageTypes:Ge,onToggleStorageType:Po});if(f==="browser"){if(H&&xe){if(ee!==null)return M(l,{style:he.contentWrapper,children:M(Cn,{conversation:xe,selectedEventIndex:ee,onEventIndexChange:se,disableInternalFooter:true})});let k=[...xe.events].sort((j,Je)=>j.timestamp.getTime()-Je.timestamp.getTime()),z=[...k].reverse();return M(Xo,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Je=k.findIndex(Vr=>Vr.timestamp.getTime()===j.timestamp.getTime()),Br={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Tn,{data:Br,onPress:()=>se(Je>=0?Je:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(La,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Yr,onAddPattern:Nt,searchQuery:h,storageDataRef:Tr,eventCountByKey:Lo,lastWriteByKey:Zr,onViewHistory:Gr,enabledStorageTypes:Ge,pinnedKeys:ae,onTogglePin:Ko,applySafeAreaInset:$t==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:Wt,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(we)return M(l,{style:he.contentWrapper,children:M(Cn,{conversation:we,selectedEventIndex:je,onEventIndexChange:Ue,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(sn,{active:re,onChange:Wt,counts:Wo})});if(tt.length===0){let k=re!=="all";return ct(l,{style:he.flexFill,children:[v,M(us,{testID:"buoy-storage-events-empty",...kr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return ct(l,{style:he.flexFill,children:[v,M(Xo,{testID:"buoy-storage-events-list",style:he.flexFill,data:Ir,renderItem:No,keyExtractor:eo,onEndReachedThreshold:$o,contentContainerStyle:he.listContent,ListFooterComponent:Ht>0?M(l,{style:he.lockedBannerContainer,children:M(rd,{featureName:`${Ht} event${Ht>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ar=we&&we.events.length>1?M(xn,{conversation:we,selectedEventIndex:je,onEventIndexChange:Ue,applySafeAreaInset:$t==="bottomSheet"}):xe&&ee!==null&&xe.events.length>1?M(xn,{conversation:xe,selectedEventIndex:ee,onEventIndexChange:se,applySafeAreaInset:$t==="bottomSheet"}):null,Rn=vt?()=>Et(false):ee!==null?()=>se(null):H?Jr:we?()=>{Se(null),Ue(0)}:r,ze=vt?ct(De,{children:[M(De.Navigation,{onBack:()=>Et(false)}),M(De.Content,{title:"Filters"})]}):H?ct(De,{children:[M(De.Navigation,{onBack:ee!==null?()=>se(null):Jr}),M(De.Content,{title:`${H} History`,centered:true})]}):we?ct(De,{children:[M(De.Navigation,{onBack:()=>{Se(null),Ue(0)}}),M(De.Content,{title:we.key})]}):S?ct(De,{children:[M(De.Navigation,{onBack:()=>w(null)}),M(De.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):ct(De,{children:[r&&M(De.Navigation,{onBack:r}),M(De.Content,{title:"",children:T?M(fs,{value:h,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(ss,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${tt.length>0?` (${tt.length})`:""}`}],activeTab:f,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),ue(null),se(null),Se(null),Ue(0),w(null)}})}),ct(De.Actions,{children:[d&&!T?M(P,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(gs,{size:14,color:Le.color.textSecondary})}):null,M(P,{onPress:xr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Ge.size<3)&&he.activeFilterButton],children:M(ys,{size:14,color:ye.size>0||Ge.size<3?Le.color.accent:Le.color.textSecondary})}),f==="browser"&&!T&&ct(Xa,{children:[M(P,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(ps,{size:14,color:Le.color.textSecondary})}),M(Un,{value:nr,disabled:Tr.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),f==="events"&&ct(Xa,{children:[M(Un,{value:_o,disabled:tt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(ms,{isEnabled:kr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(hs,{onPress:Ce,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(Gn,{children:ct(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ss,children:ze}),yt(),ar]})}):M(Gn,{children:M(ls,{visible:e,onClose:t,onBack:Rn,onMinimize:o,persistenceKey:jt,header:{showToggleButton:true,customContent:ze},onModeChange:or,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ar,footerHeight:ar?68:0,disableScrollWrapper:true,children:yt()})})}function jd(e={}){return M(En,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:ds.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:Le.color.buttonSurface,borderWidth:1,borderColor:Le.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:Le.color.accentSoft,borderColor:Le.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:Le.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:uo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:Le.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:uo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:Le.color.text,fontSize:12,fontWeight:"600",fontFamily:uo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:Le.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:Le.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:Le.color.accent,fontFamily:uo,letterSpacing:.5},contentWrapper:{flex:1}});B();pt();Gt();import{approxJsonSize as ei,isDevToolsStorageKey as Hr,isOverWireBudget as ti,isJsonSerializable as Ud}from"@buoy-gg/shared-ui/web";var Ro=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),Gd=16*1024,Bn=1.25*1024*1024,ri=8*1024*1024;function Vn(e){return e===void 0?e:ti(e,Gd)?Ro:e}function Ao(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=wo(e),i=t(a.pairs),u=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&u===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:u}:{}}}}function oi(e){return e===void 0||!ti(e,ri)?e:Ud(e)?{__buoyTruncated:true,note:`Exceeds the ${ri/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Ro}var ni=new WeakMap,ai=new WeakMap;function Jd(e){let t=ni.get(e);if(t)return t;let r;try{let o=Ao(e,Vn);r={event:o,bytes:ei(o,Bn).bytes}}catch{r={event:Ao(e,()=>Ro),bytes:1024}}return ni.set(e,r),r}function Yd(e){let t=ai.get(e);if(t)return t;let r=Ao(e,n=>n===void 0?void 0:Ro),o={event:r,bytes:ei(r,Bn).bytes};return ai.set(e,o),o}function Qd(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=Jd(e[o]);if(r+n.bytes<=Bn)t[o]=n.event,r+=n.bytes;else{let a=Yd(e[o]);t[o]=a.event,r+=a.bytes}}return t}function ii(e){let t=Ke.get(e);if(!t)throw new Error(`No MMKV instance registered as "${e}"`);if(t.instance?.isReadOnly)throw new Error(`MMKV instance "${e}" is registered read-only`);return t.instance}var li=[];function Xd(e){li=e}var Zd={version:3,getSnapshot:()=>Qd(Pt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&Hr(t))})),subscribe:e=>Pt.subscribeToEvents(e),actions:{clearEvents:()=>{Pt.clearEvents()},getRequiredKeys:()=>li,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Pt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=Ao(r,oi);return{found:true,id:t,event:o}},clearAppStorage:()=>lo(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Pt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!kn(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await Sn(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Pt.getEvents().filter(u=>u.storageType!=="mmkv").slice().reverse(),n=o.find(u=>u.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(u=>u.data?.key===n.data?.key),i=a.findIndex(u=>u.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await wn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!Hr(e)),"async.multiGet":async e=>(await ao(e.keys)).filter(([t])=>!Hr(t)),"async.getItem":e=>{let{key:t}=e;return Hr(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>lr(e.keys),"async.multiSet":e=>Mr(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Ke.getAll().map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!Hr(a)).map(a=>{let{value:i,type:u}=wt(t,a);return{key:a,value:Vn(i),valueType:u}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r)return{found:false,reason:"missing instanceId/key"};let o=Ke.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=wt(o.instance,r);return{found:true,instanceId:t,key:r,value:oi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;ii(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=ii(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=te.getModule();return Promise.all(te.getAll().map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=te.getModule(),t=te.getAll(),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:Vn(i)})}return r},"secure.get":e=>{let{key:t}=e,r=te.getAll().find(n=>n.key===t),o=te.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return te.setValue(t,r)},"secure.delete":e=>te.deleteValue(e.key)}};import{jsx as eu}from"react/jsx-runtime";var si=cl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>eu(ll,{size:e}),component:En,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),tu=sl(si,e=>(Xd(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));B();import{HardDrive as ru,CyberpunkSectionButton as ou}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as nu}from"@buoy-gg/shared-ui/web";import{jsx as au}from"react/jsx-runtime";function iu({onPress:e}){let{storageKeys:t}=un(),r=t.filter(n=>!nu(n.key)).length,o=r;return au(ou,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:ru,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}B();import{AlertCircle as ci,CheckCircle2 as lu,Eye as di,XCircle as ui,HardDrive as yi,Database as gi,Shield as su,gameUIColors as Do,macOSColors as ie,night as be,monoFont as Mo}from"@buoy-gg/shared-ui/web";import{DataViewer as cu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Re}from"react/jsx-runtime";var pi=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function zo(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return pi[t%pi.length]}var du=e=>{switch(e){case"required_present":return{icon:lu,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:ci,color:ie.semantic.error,bgColor:ie.semantic.errorBackground,borderColor:ie.semantic.error+"50",label:"MISSING",labelColor:ie.semantic.error};case"required_wrong_value":return{icon:ui,color:ie.semantic.warning,bgColor:ie.semantic.warningBackground,borderColor:ie.semantic.warning+"50",label:"WRONG S",labelColor:ie.semantic.warning};case"required_wrong_type":return{icon:ui,color:ie.semantic.info,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.info+"50",label:"WRONG TYPE",labelColor:ie.semantic.info};case"optional_present":return{icon:di,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},uu=e=>{switch(e){case"mmkv":return yi;case"async":return gi;case"secure":return su;default:return gi}};function yu({storageKey:e,isExpanded:t,onToggle:r}){let o=du(e.status),n=o.icon,a=uu(e.storageType),i=e.value!==void 0&&e.value!==null,u=e.expectedValue!==void 0,d=e.expectedType!==void 0,y=ra(e.storageType),g=tn(e.storageType);return Re(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Re(P,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Re(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Re(l,{style:K.cardHeaderInfo,children:[Y(c,{style:K.storageKeyText,children:e.key}),e.description?Y(c,{style:K.descriptionText,children:e.description}):null,Re(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(c,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Re(l,{style:[K.storageBadge,{backgroundColor:`${y}15`}],children:[Y(a,{size:10,color:y}),Y(c,{style:[K.storageText,{color:y}],children:g})]}),e.storageType==="mmkv"&&e.instanceId&&Re(l,{style:[K.instanceBadge,{backgroundColor:zo(e.instanceId)+"20",borderColor:zo(e.instanceId)+"40"}],children:[Y(yi,{size:9,color:zo(e.instanceId)}),Y(c,{style:[K.instanceText,{color:zo(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(c,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():At(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(di,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Re(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let p=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof p=="string"||typeof p=="number"||typeof p=="boolean"?Re(l,{style:K.simpleValueContainer,children:[Y(c,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(c,{style:K.simpleValueContent,selectable:true,children:String(p)})}),Re(c,{style:K.valueTypeText,children:["Type: ",At(e.value)]})]}):Y(cu,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),u&&Re(l,{style:K.valueContainer,children:[Y(c,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(c,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Re(l,{style:K.valueContainer,children:[Y(c,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(c,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Re(c,{style:K.typeHelperText,children:["Current type: ",At(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Re(c,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Re(l,{style:K.cardBody,children:[Re(l,{style:K.emptyValueContainer,children:[Y(ci,{size:16,color:ie.semantic.warning}),Y(c,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),u&&Re(l,{style:K.valueContainer,children:[Y(c,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(c,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:Mo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Do.success,fontSize:12,fontFamily:Mo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:Mo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:Mo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Do.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Do.warning+"1A"},emptyValueText:{color:Do.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});B();import{AlertCircle as gu,CheckCircle2 as pu,XCircle as fi,Eye as fu,Database as mi,Shield as mu}from"@buoy-gg/shared-ui/web";import{night as bt}from"@buoy-gg/shared-ui/web";import{jsx as ke,jsxs as He}from"react/jsx-runtime";var hu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:pu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:gu,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:fi,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:fi,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:fu,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],bu=[{key:"mmkv",label:ne.mmkv,description:ne.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:mi},{key:"async",label:ne.asyncFull,description:ne.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:mi},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:mu}];function vu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:u,asyncCount:d,secureCount:y}=e;return t===0?He(l,{style:Z.statsContainer,children:[ke(c,{style:Z.sectionTitle,children:"STORAGE BREAKDOWN"}),ke(l,{style:Z.emptyState,children:ke(c,{style:Z.emptyStateText,children:"No storage keys detected"})})]}):He(l,{style:Z.statsContainer,children:[He(l,{style:Z.breakdownSection,children:[ke(c,{style:Z.sectionTitle,children:"KEY STATUS BREAKDOWN"}),ke(l,{style:Z.breakdownList,children:hu.map(g=>{let p=0,f=false;switch(g.key){case"valid":p=a,f=p>0;break;case"missing":p=r,f=p>0;break;case"wrongValue":p=o,f=p>0;break;case"wrongType":p=n,f=p>0;break;case"optional":p=i,f=p>0;break}if(!f)return null;let x=t>0?(p/t*100).toFixed(1):"0",h=g.icon;return ke(l,{style:Z.breakdownItem,children:He(l,{style:Z.breakdownItemRow,children:[He(l,{style:Z.breakdownItemLeft,children:[ke(l,{style:[Z.breakdownIcon,{backgroundColor:g.bgColor}],children:ke(h,{size:14,color:g.color})}),He(l,{style:Z.breakdownItemInfo,children:[ke(c,{style:Z.breakdownItemLabel,children:g.label}),ke(c,{style:Z.breakdownItemDesc,children:g.description})]})]}),He(l,{style:Z.breakdownItemRight,children:[ke(c,{style:[Z.breakdownCount,{color:g.textColor}],children:p}),He(c,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},g.key)})})]}),(u>0||d>0||y>0)&&He(l,{style:Z.breakdownSection,children:[ke(c,{style:Z.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),ke(l,{style:Z.breakdownList,children:bu.map(g=>{let p=0,f=false;switch(g.key){case"mmkv":p=u,f=p>0;break;case"async":p=d,f=p>0;break;case"secure":p=y,f=p>0;break}if(!f)return null;let x=t>0?(p/t*100).toFixed(1):"0",h=g.icon,b=ra(g.key);return ke(l,{style:Z.breakdownItem,children:He(l,{style:Z.breakdownItemRow,children:[He(l,{style:Z.breakdownItemLeft,children:[ke(l,{style:[Z.breakdownIcon,{backgroundColor:`${b}15`}],children:ke(h,{size:14,color:b})}),He(l,{style:Z.breakdownItemInfo,children:[ke(c,{style:Z.breakdownItemLabel,children:g.label}),ke(c,{style:Z.breakdownItemDesc,children:g.description})]})]}),He(l,{style:Z.breakdownItemRight,children:[ke(c,{style:[Z.breakdownCount,{color:b}],children:p}),He(c,{style:Z.breakdownPercentage,children:[x,"%"]})]})]})},g.key)})})]})]})}var Z=pe.create({statsContainer:{marginBottom:24,backgroundColor:bt.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:bt.color.border},sectionTitle:{color:bt.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:bt.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:bt.color.border},breakdownItemRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breakdownItemLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1,minWidth:0},breakdownIcon:{padding:8,borderRadius:8},breakdownItemInfo:{flex:1,minWidth:0},breakdownItemLabel:{color:bt.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:bt.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:bt.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:bt.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:bt.color.textTertiary,fontSize:11,textAlign:"center"}});B();import{Database as Su,CyberpunkSectionButton as wu}from"@buoy-gg/shared-ui/web";import{jsx as ku}from"react/jsx-runtime";function Cu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return ku(wu,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Su,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}B();import{macOSColors as jr}from"@buoy-gg/shared-ui/web";var xu=["SET","GET","MERGE","DELETE","CLEAR"],Tu={SET:jr.semantic.info,GET:jr.text.muted,MERGE:jr.semantic.debug,DELETE:jr.semantic.error,CLEAR:jr.semantic.warning};function Iu(e){return Tu[e]}function Eu(e){let t=e.action;return t==="clear"||t==="clearAll"?"CLEAR":t.startsWith("get.")?"GET":t==="removeItem"||t==="multiRemove"||t==="delete"?"DELETE":t==="mergeItem"||t==="multiMerge"?"MERGE":"SET"}function Bu(e){return!!e.data?.initialScan}B();import{useState as Vu}from"react";import{macOSColors as tr,night as de,monoFont as hi}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as at}from"react/jsx-runtime";function Ru({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=Vu(false),{instances:a,instanceCount:i,refresh:u}=pn(false),d=a.find(g=>g.id===e),y=g=>{t(g),n(false)};return cn()?i===0?le(l,{style:$.container,children:at(l,{style:$.emptyState,children:[le(c,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),le(c,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(P,{style:$.refreshButton,onPress:u,activeOpacity:.7,children:le(c,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):at(l,{style:$.container,children:[at(P,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:$.selectorContent,children:d?le(bi,{instance:d,isSelected:true}):le(c,{style:$.placeholderText,children:"Select MMKV Instance"})}),le(c,{style:$.dropdownArrow,children:"\u25BC"})]}),le(jn,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(P,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:at(l,{style:$.dropdownContainer,children:[at(l,{style:$.dropdownHeader,children:[at(c,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(P,{style:$.headerRefreshButton,onPress:u,activeOpacity:.7,children:le(c,{style:$.headerRefreshText,children:"\u21BB"})})]}),le(Pr,{style:$.dropdownList,children:a.map(g=>le(P,{style:[$.dropdownItem,g.id===e&&$.dropdownItemSelected],onPress:()=>y(g.id),activeOpacity:.7,children:le(bi,{instance:g,isSelected:g.id===e})},g.id))})]})})})]}):le(l,{style:$.container,children:at(l,{style:$.unavailableState,children:[at(c,{style:$.unavailableTitle,children:[ne.mmkv," Not Available"]}),le(c,{style:$.unavailableDescription,children:pa()})]})})}function bi({instance:e,isSelected:t}){return at(l,{style:$.instanceRow,children:[at(l,{style:$.instanceLeft,children:[le(c,{style:[$.instanceId,t&&$.instanceIdSelected],numberOfLines:1,children:e.id}),at(l,{style:$.instanceBadges,children:[e.encrypted&&le(l,{style:[$.badge,$.badgeEncrypted],children:le(c,{style:$.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(l,{style:[$.badge,$.badgeReadOnly],children:le(c,{style:$.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),at(l,{style:$.instanceRight,children:[le(c,{style:$.keyCount,children:e.keyCount}),le(c,{style:$.keyCountLabel,children:"keys"})]})]})}var $=pe.create({container:{marginBottom:12},unavailableState:{backgroundColor:tr.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:tr.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:tr.semantic.warning},unavailableDescription:{fontSize:12,color:de.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:de.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:de.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:de.color.text},emptyStateDescription:{fontSize:12,color:de.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:de.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:de.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:de.color.accent},selectorButton:{backgroundColor:de.color.surface,borderRadius:12,borderWidth:1,borderColor:de.color.border,padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},selectorContent:{flex:1},placeholderText:{fontSize:13,color:de.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:de.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:de.color.surface,borderRadius:16,borderWidth:1,borderColor:de.color.border,width:"100%",maxWidth:500,maxHeight:"70%",shadowColor:"#000000",shadowOpacity:.2,shadowRadius:20,shadowOffset:{width:0,height:10},overflow:"hidden"},dropdownHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:16,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:de.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:de.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownItemSelected:{backgroundColor:de.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:de.color.text,fontFamily:hi},instanceIdSelected:{fontWeight:"600",color:de.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:tr.semantic.success+"15",borderColor:tr.semantic.success+"40"},badgeReadOnly:{backgroundColor:tr.semantic.warning+"15",borderColor:tr.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:de.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:de.color.text,fontFamily:hi},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});B();import{macOSColors as dt,night as It,monoFont as Au}from"@buoy-gg/shared-ui/web";import{jsx as Me,jsxs as Sr}from"react/jsx-runtime";function Du({instanceId:e}){let t=Ta(e);return t?Me(l,{style:ge.container,children:Sr(l,{style:ge.panel,children:[Me(l,{style:ge.header,children:Me(c,{style:ge.headerTitle,children:"Instance Details"})}),Sr(l,{style:ge.infoGrid,children:[Me(Ur,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Me(Ur,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Me(Ur,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?dt.semantic.success:It.color.textTertiary}),Me(Ur,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?dt.semantic.warning:It.color.textTertiary}),t.size!==void 0&&Me(Ur,{label:"Size",value:Mu(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&Sr(l,{style:ge.notice,children:[Me(c,{style:ge.noticeIcon,children:"\u{1F512}"}),Me(c,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&Sr(l,{style:[ge.notice,ge.noticeWarning],children:[Me(c,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Me(c,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Me(l,{style:ge.container,children:Me(l,{style:ge.errorState,children:Sr(c,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Ur({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return Sr(l,{style:ge.infoItem,children:[Me(c,{style:ge.infoLabel,children:e}),Me(c,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function Mu(e){if(e===0)return"0 Bytes";let t=1024,r=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,o)).toFixed(2))} ${r[o]}`}var ge=pe.create({container:{marginBottom:12},errorState:{backgroundColor:dt.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:dt.semantic.error+"40"},errorText:{fontSize:12,color:dt.semantic.error,textAlign:"center"},panel:{backgroundColor:It.color.surface,borderRadius:12,borderWidth:1,borderColor:It.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:It.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:It.color.text,textTransform:"uppercase",letterSpacing:.5},infoGrid:{padding:12,gap:10},infoItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4},infoLabel:{fontSize:12,color:It.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:It.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:It.color.accent},monoValue:{fontFamily:Au},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:dt.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:dt.semantic.success+"30"},noticeWarning:{backgroundColor:dt.semantic.warning+"10",borderColor:dt.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:dt.semantic.success,lineHeight:16},noticeTextWarning:{color:dt.semantic.warning}});B();import{getBrowserStorage as vi,subscribeToBrowserStorage as zu}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as Si}from"@buoy-gg/shared-ui/web";no();var wi=0;function Ku(e){let t=()=>vi(e),r=()=>Array.from({length:t().length},(o,n)=>t().key(n)).filter(o=>o!==null&&!(e==="localStorage"&&Si(o)));return{set(o,n){t().setItem(o,String(n))},getString(o){return t().getItem(o)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(o){return t().getItem(o)!==null},delete(o){let n=this.contains(o);return t().removeItem(o),n},getAllKeys:r,clearAll(){for(let o of r())t().removeItem(o)},get size(){return r().reduce((o,n)=>o+2*(n.length+(t().getItem(n)?.length??0)),0)},addOnValueChangedListener(o){return{remove:zu(n=>{n.area===e&&(n.key!==void 0?e==="localStorage"&&Si(n.key)||o(n.key):n.prevPairs?.forEach(([a])=>o(a)))})}}}}function Pu(){return Ar()?["localStorage","sessionStorage"]:["sessionStorage"]}function Fu(){if(typeof window>"u")return()=>{};try{vi("sessionStorage")}catch{return()=>{}}let e=Pu();if(++wi===1)for(let r of e)Wn(r,Ku(r));let t=true;return()=>{if(t&&(t=false,--wi===0))for(let r of e)_n(r)}}export{Du as MMKVInstanceInfoPanel,Ru as MMKVInstanceSelector,xu as STORAGE_OPS,La as StorageBrowserMode,Tn as StorageEventCard,Cn as StorageEventDetailContent,xn as StorageEventDetailFooter,Cu as StorageEventsSection,yu as StorageKeyCard,la as StorageKeySection,vu as StorageKeyStatsSection,En as StorageModalWithTabs,iu as StorageSection,jd as StorageToolView,sn as StorageTypeFilterBar,wo as batchPairsOf,kn as canUndo,lo as clearAllAppStorage,ga as countByStorageType,tu as createStorageTool,wt as detectMMKVType,Ji as formatMMKVValue,sc as getMMKVClass,pa as getMMKVUnavailableMessage,Ld as getValueType,Bu as isInitialScan,cn as isMMKVAvailable,Go as isTypeMatch,Nr as isValueOnDevice,wn as jumpToState,Wn as registerMMKVInstance,Zi as registerSecureStoreKeys,Jc as requestStorageBrowserRefresh,Ma as setStorageValue,Fu as startBrowserStorageCapture,mn as storageEditBlockedReason,Pt as storageEventStore,Iu as storageOpDot,Eu as storageOpOf,Zd as storageSyncAdapter,si as storageToolPreset,Yc as storageValueToEditableText,Sn as undoOperation,_n as unregisterMMKVInstance,el as unregisterSecureStoreKey,un as useAsyncStorageKeys,Ta as useMMKVInstance,kc as useMMKVInstanceExists,pn as useMMKVInstances,hc as useMMKVKeys,ka as useMultiMMKVKeys,_a as useStorageEvents,Da as validateStorageValue};