@buoy-gg/storage 7.0.41 → 7.0.43

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