@buoy-gg/storage 7.0.74 → 7.0.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/storage/components/StorageKeyRow.js +1 -1
- package/lib/commonjs/storage/utils/browserStorageLifecycle.web.js +1 -1
- package/lib/module/storage/components/StorageKeyRow.js +1 -1
- package/lib/module/storage/utils/browserStorageLifecycle.web.js +1 -1
- package/lib/web/index.mjs +2 -2
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getStorageTypeColor=exports.getStatusConfig=exports.StorageKeyRow=void 0;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _storageQueryUtils=require("../utils/storageQueryUtils");var _valueType=require("../utils/valueType");var _dataViewer=require("@buoy-gg/shared-ui/dataViewer");var _jsxRuntime=require("react/jsx-runtime");const INSTANCE_COLORS=[_sharedUi.macOSColors.semantic.info,_sharedUi.macOSColors.semantic.success,_sharedUi.macOSColors.semantic.warning,_sharedUi.macOSColors.semantic.debug,"#FF6B9D","#00D9FF"];function getInstanceColor(t){const e=t.split("").reduce((r,l)=>r+l.charCodeAt(0),0);return INSTANCE_COLORS[e%INSTANCE_COLORS.length]}const getStatusConfig=t=>{switch(t){case"required_present":return{label:"Valid",color:_sharedUi.macOSColors.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:_sharedUi.macOSColors.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:_sharedUi.macOSColors.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:_sharedUi.macOSColors.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:_sharedUi.macOSColors.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:_sharedUi.macOSColors.text.secondary,sublabel:String(t)}}};exports.getStatusConfig=getStatusConfig;const formatValue=t=>{if(t===void 0||t===null){return"undefined"}const e=typeof t==="string"?t:JSON.stringify(t);return e};const StorageKeyRow=exports.StorageKeyRow=(0,_react.memo)(function t({storageKey:e,isExpanded:r,onPress:l,isSelectMode:d=false,isSelected:a=false,onSelectionChange:S,eventCount:o,onViewHistory:g,onHideKey:u,isPinned:n=false,onTogglePin:p,onEditKey:y,onToggleKey:c,onDeleteKey:m,editBlockedReason:x}){const h=y!=null&&x==null;const s=getStatusConfig(e.status);const f=e.value!==void 0&&e.value!==null;const i=f&&typeof e.value==="boolean";const T=e.key;const w=(0,_storageQueryUtils.getStorageTypeLabel)(e.storageType,e.instanceId);const b=(0,_valueType.parseStorageValue)(e.value);const j=b!==null&&typeof b==="object";const R=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedContainer,children:[(0,_jsxRuntime.jsx)(_sharedUi.ExpandedInfoRow,{label:"Storage",children:(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:getStorageTypeColor(e.storageType),children:w})}),e.storageType==="mmkv"&&e.instanceId&&(0,_jsxRuntime.jsx)(_sharedUi.ExpandedInfoRow,{label:"Instance",children:(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:getInstanceColor(e.instanceId),icon:(0,_jsxRuntime.jsx)(_sharedUi.HardDrive,{size:9,color:getInstanceColor(e.instanceId)}),children:e.instanceId})}),o!=null&&o>0&&(0,_jsxRuntime.jsxs)(_sharedUi.ExpandedInfoRow,{label:"Updates",children:[(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:_sharedUi.macOSColors.semantic.warning,children:String(o)}),o>1&&g&&(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:g,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:styles.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.viewHistoryText,children:"view history \u2192"})})]}),j?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.dataViewerContainer,children:(0,_jsxRuntime.jsx)(_dataViewer.DataViewer,{data:b,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Value:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedValue,numberOfLines:3,children:formatValue(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Type:"}),(0,_jsxRuntime.jsx)(_sharedUi.TypeBadge,{type:(0,_valueType.getValueTypeLabel)(e.value)})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Expected:"}),(0,_jsxRuntime.jsx)(_sharedUi.TypeBadge,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Expected:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedExpected,children:String(e.expectedValue)})]}),e.description?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Info:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedDescription,children:e.description})]}):null,x?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Edit:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedDescription,children:x})]}):null,p||u||h?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.actionRow,children:[h?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:styles.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:i&&c?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>i&&c?c(e):y?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.Edit3,{size:13,color:_sharedUi.night.color.onAccent}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.editButtonText,children:i&&c?"Toggle":"Edit"})]}):null,p?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.actionChip,n&&styles.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:n?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>p(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.Pin,{size:12,active:n,color:_sharedUi.night.color.accent}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionChipText,{color:_sharedUi.night.color.accent}],children:n?"Unpin":"Pin to top"})]}):null,u?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:styles.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>u(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.EyeOff,{size:12,color:_sharedUi.night.color.warning}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionChipText,{color:_sharedUi.night.color.warning}],children:"Hide from list"})]}):null,h&&m?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.actionChip,styles.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>m(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.Trash2,{size:12,color:_sharedUi.night.color.danger}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionChipText,{color:_sharedUi.night.color.danger}],children:"Delete key"})]}):null]}):null]});const C=()=>{S?.(e,!a)};const k=d?(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:C,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:a},style:styles.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:a?(0,_jsxRuntime.jsx)(_sharedUi.CheckSquare,{size:18,color:_sharedUi.night.color.accent}):(0,_jsxRuntime.jsx)(_sharedUi.Square,{size:18,color:_sharedUi.night.color.textTertiary})}):null;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.rowContainer,a&&styles.rowContainerSelected],children:[k,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.compactRowWrapper,children:[(0,_jsxRuntime.jsx)(_sharedUi.CompactRow,{statusDotColor:s.color,statusLabel:s.label,statusSublabel:s.sublabel,primaryText:T,secondaryText:f?i?(0,_valueType.getValueTypeLabel)(e.value):(0,_valueType.getValueTypeWithPreview)(e.value):void 0,secondaryAccessory:i?(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{size:"sm",color:e.value?_sharedUi.macOSColors.semantic.success:_sharedUi.macOSColors.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:R,isExpanded:r,expandedGlowColor:s.color,customBadge:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.badgeRow,children:[n&&(0,_jsxRuntime.jsx)(_sharedUi.Pin,{size:12,active:true,color:_sharedUi.night.color.accent}),(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:getStorageTypeColor(e.storageType),children:w})]}),showChevron:!d,onPress:d?C:l?()=>l(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),o!=null&&o>1&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.absCountBadge,r&&styles.absCountBadgeExpanded,{backgroundColor:_sharedUi.macOSColors.semantic.warning+"22",borderColor:_sharedUi.macOSColors.semantic.warning+"55"}],pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.absCountText,{color:_sharedUi.macOSColors.semantic.warning}],children:String(o)})})]})]})});const getStorageTypeColor=t=>{switch(t){case"mmkv":return _sharedUi.macOSColors.semantic.info;case"async":return _sharedUi.macOSColors.semantic.warning;case"secure":return _sharedUi.macOSColors.semantic.success;default:return _sharedUi.macOSColors.text.secondary}};exports.getStorageTypeColor=getStorageTypeColor;const styles=_reactNative.StyleSheet.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:_sharedUi.night.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:_sharedUi.monoFont},expandedValue:{fontSize:11,color:_sharedUi.night.color.textSecondary,fontFamily:_sharedUi.monoFont,flex:1},expandedExpected:{fontSize:11,color:_sharedUi.macOSColors.semantic.warning,fontFamily:_sharedUi.monoFont,flex:1},expandedDescription:{fontSize:11,color:_sharedUi.night.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:_sharedUi.night.color.bg,borderRadius:6,borderWidth:1,borderColor:_sharedUi.night.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:_sharedUi.night.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:_sharedUi.monoFont},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:_sharedUi.night.color.surface,borderWidth:1,borderColor:_sharedUi.night.color.border},dangerChip:{borderColor:_sharedUi.night.color.danger+"55"},actionChipActive:{backgroundColor:_sharedUi.night.color.accentSoft,borderColor:_sharedUi.night.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:_sharedUi.night.color.accent},editButtonText:{color:_sharedUi.night.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:_sharedUi.monoFont},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:_sharedUi.monoFont,color:_sharedUi.night.color.accent}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getStorageTypeColor=exports.getStatusConfig=exports.StorageKeyRow=void 0;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _storageQueryUtils=require("../utils/storageQueryUtils");var _valueType=require("../utils/valueType");var _dataViewer=require("@buoy-gg/shared-ui/dataViewer");var _jsxRuntime=require("react/jsx-runtime");const INSTANCE_COLORS=[_sharedUi.macOSColors.semantic.info,_sharedUi.macOSColors.semantic.success,_sharedUi.macOSColors.semantic.warning,_sharedUi.macOSColors.semantic.debug,"#FF6B9D","#00D9FF"];function getInstanceColor(t){const e=t.split("").reduce((r,l)=>r+l.charCodeAt(0),0);return INSTANCE_COLORS[e%INSTANCE_COLORS.length]}const getStatusConfig=t=>{switch(t){case"required_present":return{label:"Valid",color:_sharedUi.macOSColors.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:_sharedUi.macOSColors.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:_sharedUi.macOSColors.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:_sharedUi.macOSColors.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:_sharedUi.macOSColors.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:_sharedUi.macOSColors.text.secondary,sublabel:String(t)}}};exports.getStatusConfig=getStatusConfig;const formatValue=t=>{if(t===void 0||t===null){return"undefined"}const e=typeof t==="string"?t:JSON.stringify(t);return e};const StorageKeyRow=exports.StorageKeyRow=(0,_react.memo)(function t({storageKey:e,isExpanded:r,onPress:l,isSelectMode:d=false,isSelected:a=false,onSelectionChange:S,eventCount:o,onViewHistory:y,onHideKey:u,isPinned:n=false,onTogglePin:p,onEditKey:m,onToggleKey:c,onDeleteKey:f,editBlockedReason:x}){const h=m!=null&&x==null;const s=getStatusConfig(e.status);const w=e.value!==void 0&&e.value!==null;const i=w&&typeof e.value==="boolean";const T=e.key;const b=(0,_storageQueryUtils.getStorageTypeLabel)(e.storageType,e.instanceId);const g=(0,_valueType.parseStorageValue)(e.value);const j=g!==null&&typeof g==="object";const R=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedContainer,children:[(0,_jsxRuntime.jsx)(_sharedUi.ExpandedInfoRow,{label:"Storage",children:(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:getStorageTypeColor(e.storageType),children:b})}),e.storageType==="mmkv"&&e.instanceId&&(0,_jsxRuntime.jsx)(_sharedUi.ExpandedInfoRow,{label:"Instance",children:(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:getInstanceColor(e.instanceId),icon:(0,_jsxRuntime.jsx)(_sharedUi.HardDrive,{size:9,color:getInstanceColor(e.instanceId)}),children:e.instanceId})}),o!=null&&o>0&&(0,_jsxRuntime.jsxs)(_sharedUi.ExpandedInfoRow,{label:"Updates",children:[(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:_sharedUi.macOSColors.semantic.warning,children:String(o)}),o>1&&y&&(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:y,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:styles.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.viewHistoryText,children:"view history \u2192"})})]}),j?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.dataViewerContainer,children:(0,_jsxRuntime.jsx)(_dataViewer.DataViewer,{data:g,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Value:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedValue,numberOfLines:3,children:formatValue(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Type:"}),(0,_jsxRuntime.jsx)(_sharedUi.TypeBadge,{type:(0,_valueType.getValueTypeLabel)(e.value)})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Expected:"}),(0,_jsxRuntime.jsx)(_sharedUi.TypeBadge,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Expected:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedExpected,children:String(e.expectedValue)})]}),e.description?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Info:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedDescription,children:e.description})]}):null,x?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expandedRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedLabel,children:"Edit:"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.expandedDescription,children:x})]}):null,p||u||h?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.actionRow,children:[h?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:styles.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:i&&c?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>i&&c?c(e):m?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.Edit3,{size:13,color:_sharedUi.night.color.onAccent}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.editButtonText,children:i&&c?"Toggle":"Edit"})]}):null,p?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.actionChip,n&&styles.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:n?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>p(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.Pin,{size:12,active:n,color:_sharedUi.night.color.accent}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionChipText,{color:_sharedUi.night.color.accent}],children:n?"Unpin":"Pin to top"})]}):null,u?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:styles.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>u(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.EyeOff,{size:12,color:_sharedUi.night.color.warning}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionChipText,{color:_sharedUi.night.color.warning}],children:"Hide from list"})]}):null,h&&f?(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.actionChip,styles.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>f(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[(0,_jsxRuntime.jsx)(_sharedUi.Trash2,{size:12,color:_sharedUi.night.color.danger}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionChipText,{color:_sharedUi.night.color.danger}],children:"Delete key"})]}):null]}):null]});const C=()=>{S?.(e,!a)};const k=d?(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:C,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:a},style:styles.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:a?(0,_jsxRuntime.jsx)(_sharedUi.CheckSquare,{size:18,color:_sharedUi.night.color.accent}):(0,_jsxRuntime.jsx)(_sharedUi.Square,{size:18,color:_sharedUi.night.color.textTertiary})}):null;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.rowContainer,a&&styles.rowContainerSelected],children:[k,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.compactRowWrapper,children:[(0,_jsxRuntime.jsx)(_sharedUi.CompactRow,{statusDotColor:s.color,statusLabel:s.label,statusSublabel:s.sublabel,primaryText:T,secondaryText:w?i?(0,_valueType.getValueTypeLabel)(e.value):(0,_valueType.getValueTypeWithPreview)(e.value):void 0,secondaryAccessory:i?(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{size:"sm",color:e.value?_sharedUi.macOSColors.semantic.success:_sharedUi.macOSColors.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:R,isExpanded:r,expandedGlowColor:s.color,customBadge:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.badgeRow,children:[n&&(0,_jsxRuntime.jsx)(_sharedUi.Pin,{size:12,active:true,color:_sharedUi.night.color.accent}),(0,_jsxRuntime.jsx)(_sharedUi.PillBadge,{color:getStorageTypeColor(e.storageType),children:b})]}),showChevron:!d,onPress:d?C:l?()=>l(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${b} ${e.key}`}),o!=null&&o>1&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.absCountBadge,r&&styles.absCountBadgeExpanded,{backgroundColor:_sharedUi.macOSColors.semantic.warning+"22",borderColor:_sharedUi.macOSColors.semantic.warning+"55"}],pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.absCountText,{color:_sharedUi.macOSColors.semantic.warning}],children:String(o)})})]})]})});const getStorageTypeColor=t=>{switch(t){case"mmkv":return _sharedUi.macOSColors.semantic.info;case"async":return _sharedUi.macOSColors.semantic.warning;case"secure":return _sharedUi.macOSColors.semantic.success;default:return _sharedUi.macOSColors.text.secondary}};exports.getStorageTypeColor=getStorageTypeColor;const styles=_reactNative.StyleSheet.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:_sharedUi.night.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:_sharedUi.monoFont},expandedValue:{fontSize:11,color:_sharedUi.night.color.textSecondary,fontFamily:_sharedUi.monoFont,flex:1},expandedExpected:{fontSize:11,color:_sharedUi.macOSColors.semantic.warning,fontFamily:_sharedUi.monoFont,flex:1},expandedDescription:{fontSize:11,color:_sharedUi.night.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:_sharedUi.night.color.bg,borderRadius:6,borderWidth:1,borderColor:_sharedUi.night.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:_sharedUi.night.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:_sharedUi.monoFont},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:_sharedUi.night.color.surface,borderWidth:1,borderColor:_sharedUi.night.color.border},dangerChip:{borderColor:_sharedUi.night.color.danger+"55"},actionChipActive:{backgroundColor:_sharedUi.night.color.accentSoft,borderColor:_sharedUi.night.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:_sharedUi.night.color.accent},editButtonText:{color:_sharedUi.night.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:_sharedUi.monoFont},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:_sharedUi.monoFont,color:_sharedUi.night.color.accent}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.startBrowserStorageCapture=startBrowserStorageCapture;var _utils=require("@buoy-gg/shared-ui/utils");var _sharedUi=require("@buoy-gg/shared-ui");var _MMKVInstanceRegistry=require("./MMKVInstanceRegistry");var _capacitorPreferences=require("./capacitorPreferences");let owners=0;function webStorageBackend(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.startBrowserStorageCapture=startBrowserStorageCapture;var _utils=require("@buoy-gg/shared-ui/utils");var _sharedUi=require("@buoy-gg/shared-ui");var _MMKVInstanceRegistry=require("./MMKVInstanceRegistry");var _capacitorPreferences=require("./capacitorPreferences");let owners=0;function webStorageBackend(o){const t=()=>(0,_utils.getBrowserStorage)(o);const n=()=>Array.from({length:t().length},(e,r)=>t().key(r)).filter(e=>e!==null&&!(0,_sharedUi.isDevToolsStorageKey)(e));const s=e=>{try{return JSON.parse(t().getItem(e)??"")}catch{return void 0}};return{set(e,r){t().setItem(e,String(r))},getString(e){const r=typeof s(e);return r==="number"||r==="boolean"?void 0:t().getItem(e)??void 0},getNumber(e){const r=s(e);return typeof r==="number"?r:void 0},getBoolean(e){const r=s(e);return typeof r==="boolean"?r:void 0},getBuffer(){return void 0},contains(e){return t().getItem(e)!==null},delete(e){const r=this.contains(e);t().removeItem(e);return r},getAllKeys:n,clearAll(){for(const e of n())t().removeItem(e)},get size(){return n().reduce((e,r)=>e+2*(r.length+(t().getItem(r)?.length??0)),0)},addOnValueChangedListener(e){return{remove:(0,_utils.subscribeToBrowserStorage)(r=>{if(r.area!==o)return;if(r.key!==void 0){if(!(0,_sharedUi.isDevToolsStorageKey)(r.key))e(r.key)}else r.prevPairs?.forEach(([a])=>{if(!(0,_sharedUi.isDevToolsStorageKey)(a))e(a)})})}}}}function instances(){return(0,_capacitorPreferences.usesCapacitorPreferences)()?["localStorage","sessionStorage"]:["sessionStorage"]}function startBrowserStorageCapture(){if(typeof window==="undefined")return()=>{};try{(0,_utils.getBrowserStorage)("sessionStorage")}catch{return()=>{}}const o=instances();if(++owners===1)for(const n of o)(0,_MMKVInstanceRegistry.registerMMKVInstance)(n,webStorageBackend(n));let t=true;return()=>{if(t){t=false;if(--owners===0)for(const n of o)(0,_MMKVInstanceRegistry.unregisterMMKVInstance)(n)}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{memo as j}from"react";import{View as a,Text as l,StyleSheet as N,TouchableOpacity as s}from"react-native";import{macOSColors as r,night as n,CompactRow as U,TypeBadge as B,HardDrive as G,Square as J,CheckSquare as M,Edit3 as Q,EyeOff as X,Pin as W,Trash2 as Y,ExpandedInfoRow as
|
|
1
|
+
"use strict";import{memo as j}from"react";import{View as a,Text as l,StyleSheet as N,TouchableOpacity as s}from"react-native";import{macOSColors as r,night as n,CompactRow as U,TypeBadge as B,HardDrive as G,Square as J,CheckSquare as M,Edit3 as Q,EyeOff as X,Pin as W,Trash2 as Y,ExpandedInfoRow as D,PillBadge as h,monoFont as p}from"@buoy-gg/shared-ui";import{getStorageTypeLabel as Z}from"../utils/storageQueryUtils";import{getValueTypeLabel as _,getValueTypeWithPreview as K,parseStorageValue as ee}from"../utils/valueType";import{DataViewer as te}from"@buoy-gg/shared-ui/dataViewer";import{jsx as t,jsxs as i,Fragment as oe}from"react/jsx-runtime";const F=[r.semantic.info,r.semantic.success,r.semantic.warning,r.semantic.debug,"#FF6B9D","#00D9FF"];function $(c){const e=c.split("").reduce((f,x)=>f+x.charCodeAt(0),0);return F[e%F.length]}export const getStatusConfig=c=>{switch(c){case"required_present":return{label:"Valid",color:r.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:r.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:r.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:r.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:r.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:r.text.secondary,sublabel:String(c)}}};const ne=c=>{if(c===void 0||c===null){return"undefined"}const e=typeof c==="string"?c:JSON.stringify(c);return e};export const StorageKeyRow=j(function c({storageKey:e,isExpanded:f,onPress:x,isSelectMode:w=false,isSelected:m=false,onSelectionChange:q,eventCount:d,onViewHistory:L,onHideKey:C,isPinned:u=false,onTogglePin:S,onEditKey:z,onToggleKey:y,onDeleteKey:v,editBlockedReason:T}){const k=z!=null&&T==null;const g=getStatusConfig(e.status);const V=e.value!==void 0&&e.value!==null;const b=V&&typeof e.value==="boolean";const O=e.key;const R=Z(e.storageType,e.instanceId);const I=ee(e.value);const A=I!==null&&typeof I==="object";const H=i(a,{style:o.expandedContainer,children:[t(D,{label:"Storage",children:t(h,{color:getStorageTypeColor(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&t(D,{label:"Instance",children:t(h,{color:$(e.instanceId),icon:t(G,{size:9,color:$(e.instanceId)}),children:e.instanceId})}),d!=null&&d>0&&i(D,{label:"Updates",children:[t(h,{color:r.semantic.warning,children:String(d)}),d>1&&L&&t(s,{onPress:L,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:o.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:t(l,{style:o.viewHistoryText,children:"view history \u2192"})})]}),A?t(a,{style:o.dataViewerContainer,children:t(te,{data:I,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):i(a,{style:o.expandedRow,children:[t(l,{style:o.expandedLabel,children:"Value:"}),t(l,{style:o.expandedValue,numberOfLines:3,children:ne(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&i(oe,{children:[i(a,{style:o.expandedRow,children:[t(l,{style:o.expandedLabel,children:"Type:"}),t(B,{type:_(e.value)})]}),i(a,{style:o.expandedRow,children:[t(l,{style:o.expandedLabel,children:"Expected:"}),t(B,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&i(a,{style:o.expandedRow,children:[t(l,{style:o.expandedLabel,children:"Expected:"}),t(l,{style:o.expandedExpected,children:String(e.expectedValue)})]}),e.description?i(a,{style:o.expandedRow,children:[t(l,{style:o.expandedLabel,children:"Info:"}),t(l,{style:o.expandedDescription,children:e.description})]}):null,T?i(a,{style:o.expandedRow,children:[t(l,{style:o.expandedLabel,children:"Edit:"}),t(l,{style:o.expandedDescription,children:T})]}):null,S||C||k?i(a,{style:o.actionRow,children:[k?i(s,{style:o.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:b&&y?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>b&&y?y(e):z?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[t(Q,{size:13,color:n.color.onAccent}),t(l,{style:o.editButtonText,children:b&&y?"Toggle":"Edit"})]}):null,S?i(s,{style:[o.actionChip,u&&o.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:u?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>S(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[t(W,{size:12,active:u,color:n.color.accent}),t(l,{style:[o.actionChipText,{color:n.color.accent}],children:u?"Unpin":"Pin to top"})]}):null,C?i(s,{style:o.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>C(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[t(X,{size:12,color:n.color.warning}),t(l,{style:[o.actionChipText,{color:n.color.warning}],children:"Hide from list"})]}):null,k&&v?i(s,{style:[o.actionChip,o.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>v(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[t(Y,{size:12,color:n.color.danger}),t(l,{style:[o.actionChipText,{color:n.color.danger}],children:"Delete key"})]}):null]}):null]});const E=()=>{q?.(e,!m)};const P=w?t(s,{onPress:E,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:m},style:o.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:m?t(M,{size:18,color:n.color.accent}):t(J,{size:18,color:n.color.textTertiary})}):null;return i(a,{style:[o.rowContainer,m&&o.rowContainerSelected],children:[P,i(a,{style:o.compactRowWrapper,children:[t(U,{statusDotColor:g.color,statusLabel:g.label,statusSublabel:g.sublabel,primaryText:O,secondaryText:V?b?_(e.value):K(e.value):void 0,secondaryAccessory:b?t(h,{size:"sm",color:e.value?r.semantic.success:r.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:H,isExpanded:f,expandedGlowColor:g.color,customBadge:i(a,{style:o.badgeRow,children:[u&&t(W,{size:12,active:true,color:n.color.accent}),t(h,{color:getStorageTypeColor(e.storageType),children:R})]}),showChevron:!w,onPress:w?E:x?()=>x(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${R} ${e.key}`}),d!=null&&d>1&&t(a,{style:[o.absCountBadge,f&&o.absCountBadgeExpanded,{backgroundColor:r.semantic.warning+"22",borderColor:r.semantic.warning+"55"}],pointerEvents:"none",children:t(l,{style:[o.absCountText,{color:r.semantic.warning}],children:String(d)})})]})]})});export const getStorageTypeColor=c=>{switch(c){case"mmkv":return r.semantic.info;case"async":return r.semantic.warning;case"secure":return r.semantic.success;default:return r.text.secondary}};const o=N.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:n.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:p},expandedValue:{fontSize:11,color:n.color.textSecondary,fontFamily:p,flex:1},expandedExpected:{fontSize:11,color:r.semantic.warning,fontFamily:p,flex:1},expandedDescription:{fontSize:11,color:n.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:n.color.bg,borderRadius:6,borderWidth:1,borderColor:n.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:n.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:p},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:n.color.surface,borderWidth:1,borderColor:n.color.border},dangerChip:{borderColor:n.color.danger+"55"},actionChipActive:{backgroundColor:n.color.accentSoft,borderColor:n.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:n.color.accent},editButtonText:{color:n.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:p},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:p,color:n.color.accent}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{getBrowserStorage as
|
|
1
|
+
"use strict";import{getBrowserStorage as a,subscribeToBrowserStorage as c}from"@buoy-gg/shared-ui/utils";import{isDevToolsStorageKey as i}from"@buoy-gg/shared-ui";import{registerMMKVInstance as l,unregisterMMKVInstance as d}from"./MMKVInstanceRegistry";import{usesCapacitorPreferences as g}from"./capacitorPreferences";let f=0;function m(o){const r=()=>a(o);const n=()=>Array.from({length:r().length},(e,t)=>r().key(t)).filter(e=>e!==null&&!i(e));const s=e=>{try{return JSON.parse(r().getItem(e)??"")}catch{return void 0}};return{set(e,t){r().setItem(e,String(t))},getString(e){const t=typeof s(e);return t==="number"||t==="boolean"?void 0:r().getItem(e)??void 0},getNumber(e){const t=s(e);return typeof t==="number"?t:void 0},getBoolean(e){const t=s(e);return typeof t==="boolean"?t:void 0},getBuffer(){return void 0},contains(e){return r().getItem(e)!==null},delete(e){const t=this.contains(e);r().removeItem(e);return t},getAllKeys:n,clearAll(){for(const e of n())r().removeItem(e)},get size(){return n().reduce((e,t)=>e+2*(t.length+(r().getItem(t)?.length??0)),0)},addOnValueChangedListener(e){return{remove:c(t=>{if(t.area!==o)return;if(t.key!==void 0){if(!i(t.key))e(t.key)}else t.prevPairs?.forEach(([u])=>{if(!i(u))e(u)})})}}}}function p(){return g()?["localStorage","sessionStorage"]:["sessionStorage"]}export function startBrowserStorageCapture(){if(typeof window==="undefined")return()=>{};try{a("sessionStorage")}catch{return()=>{}}const o=p();if(++f===1)for(const n of o)l(n,m(n));let r=true;return()=>{if(r){r=false;if(--f===0)for(const n of o)d(n)}}}
|
package/lib/web/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";var qo=Object.defineProperty;var Wi=Object.getOwnPropertyDescriptor;var _i=Object.getOwnPropertyNames;var $i=Object.prototype.hasOwnProperty;var ro=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ln=(e,t)=>{for(var r in t)qo(e,r,{get:t[r],enumerable:true})},jo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of _i(t))!$i.call(e,n)&&n!==r&&qo(e,n,{get:()=>t[n],enumerable:!(o=Wi(t,n))||o.enumerable});return e},Ni=(e,t,r)=>(jo(e,t,"default"),r&&jo(r,t,"default"));var Hi=e=>jo(qo({},"__esModule",{value:true}),e);var qi,E=ro(()=>{"use strict";qi=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Gt,hasCapacitorPlugin as ji,installCapacitorBridge as Ui,interceptCapacitor as Gi,isCapacitorNative as Ji}from"@buoy-gg/license/web";function Dr(){return Ji()&&ji(mt)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Mr))try{o(r)}catch{}}function Yi(e){return Mr.add(e),Qi(),()=>{Mr.delete(e)}}async function lr(e){let{value:t}=await Gt(mt,"get",{key:e});return t??null}async function Uo(){let{keys:e}=await Gt(mt,"keys");return Array.isArray(e)?e:[]}async function oo(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function Qi(){Go||!Dr()||!Ui()||(Go=true,Gi({plugin:mt,methods:["set","remove","clear"],promise:async(e,t)=>{if(Mr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Uo().catch(()=>[]),y=await t();return At("clear",{keys:await i}),y}if(r===void 0)return t();let o=lr(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?At("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):At("removeItem",{key:r,prevValue:a}),n}}))}function Pn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Pn(r[o],n):n;return r}function On(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var mt,Mr,Go,no,ao=ro(()=>{"use strict";E();mt="Preferences";Mr=new Set;Go=false;no={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(mt,"set",{key:e,value:String(t)}),At("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=lr(e).catch(()=>null);await Gt(mt,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await oo(await Uo()).catch(()=>{});await Gt(mt,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Uo()},multiGet(e){return oo(e)},async multiSet(e){let t=oo(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(mt,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=oo(e).catch(()=>{});await Promise.all(e.map(r=>Gt(mt,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await no.setItem(e,JSON.stringify(Pn(On(r),On(t))))},async multiMerge(e){for(let[t,r]of e)await no.mergeItem(t,r)}}});import Zi from"@buoy-gg/shared-ui/web/asyncStorage";var lt,Fn,oe,ft=ro(()=>{"use strict";E();ao();lt=()=>Dr()?no:Zi,Fn={getItem:e=>lt().getItem(e),setItem:(e,t)=>lt().setItem(e,t),removeItem:e=>lt().removeItem(e),clear:()=>lt().clear(),getAllKeys:()=>lt().getAllKeys(),multiGet:e=>lt().multiGet(e),multiSet:e=>lt().multiSet(e),multiRemove:e=>lt().multiRemove(e),mergeItem:(e,t)=>lt().mergeItem(e,t),multiMerge:e=>lt().multiMerge(e)},oe=Fn});var Wn={};Ln(Wn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>_n,default:()=>$n,readMany:()=>io,removeMany:()=>sr,writeMany:()=>zr});async function io(e){if(typeof Fe.multiGet=="function")return await Fe.multiGet(e);let t=await Fe.getMany(e);return e.map(r=>[r,t[r]??null])}async function zr(e){if(typeof Fe.multiSet=="function")return Fe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Fe.setMany(t)}async function sr(e){return typeof Fe.multiRemove=="function"?Fe.multiRemove(e):Fe.removeMany(e)}var Fe,_n,$n,Jt=ro(()=>{"use strict";E();ft();Fe=oe,_n={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};$n=Fe});E();E();ft();Jt();import{classifyPreviewItem as Xi,createRestoreScope as el,emptyRestoreResult as Nn,failedRestore as tl,isDevToolsStorageKey as we,registerStateSnapshotProvider as rl,unionKeys as lo,wontApply as Kr}from"@buoy-gg/shared-ui/web";E();ft();Jt();import{isDevToolsStorageKey as ol}from"@buoy-gg/shared-ui/web";async function so(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!ol(r));t.length!==0&&await sr(t)}async function nl(){await oe.clear()}E();E();import{isDevToolsStorageKey as al}from"@buoy-gg/shared-ui/web";E();function kt(e,t){let r=e.getString(t);if(r!==void 0&&r!=="")return{value:r,type:"string"};let o=e.getNumber(t);if(o!==void 0)return{value:o,type:"number"};let n=e.getBoolean(t);if(n!==void 0)return{value:n,type:"boolean"};if(r==="")return{value:"",type:"string"};let a=e.getBuffer(t);return a!==void 0?{value:`<ArrayBuffer ${a.byteLength} bytes>`,type:"buffer"}:{value:void 0,type:"unknown"}}function il(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Jo(e,t){return e===t}var ll=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(al(e)||this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,kt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=kt(e,n),y=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:y,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:y,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Yo=new ll;var Hn=e=>Yo.addListener(e);var sl=class{constructor(){this.instances=new Map}register(e,t,r){let o={id:e,instance:t,encrypted:r?.encrypted??false,readOnly:t.isReadOnly??false};this.instances.set(e,o)}unregister(e){this.instances.delete(e)}get(e){return this.instances.get(e)}getAll(){return Array.from(this.instances.values())}has(e){return this.instances.has(e)}count(){return this.instances.size}},Pe=new sl;function qn(e,t,r){Pe.register(e,t,r),Yo.addInstance(t,e)}function jn(e){Yo.removeInstance(e),Pe.unregister(e)}E();var cl=class{constructor(){this.module=null;this.keys=new Map;this.listeners=new Set}register(e,t){let r=this.signature();this.module=e;for(let o of t){let n=typeof o=="string"?{key:o,options:{}}:{key:o.key,description:o.description,options:{keychainService:o.keychainService,requireAuthentication:o.requireAuthentication,authenticationPrompt:o.authenticationPrompt}};this.keys.set(n.key,n)}this.signature()!==r&&this.notify()}unregister(e){this.keys.delete(e)&&this.notify()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){let t=this.keys.get(e);!this.module||!t||await this.module.deleteItemAsync(e,t.options)}async setValue(e,t){let r=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!r)throw new Error(`SecureStore key "${e}" is not registered`);if(r.options.requireAuthentication)throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`);await this.module.setItemAsync(e,t,r.options)}},ee=new cl;function dl(e,t){ee.register(e,t)}function ul(e){ee.unregister(e)}function Un(e,t){e.remove?e.remove(t):e.delete?.(t)}function yl(){return{canCapture:true,canRestore:true}}async function Gn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await io(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:y}of Pe.getAll().filter(({id:d})=>!we(d)))try{o[i]=y.getAllKeys().filter(d=>!we(d)).map(d=>{let{value:g,type:c}=kt(y,d);return c==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:g,valueType:c}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=ee.getModule();for(let{key:i,options:y}of ee.getAll().filter(({key:d})=>!we(d))){if(y.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,y)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function gl(){let{data:e,warnings:t}=await Gn();return{data:e,warnings:t}}async function pl(e,t){let r=e,o=el(t),n=o.touch,a=Nn();if(!r)return tl("empty storage snapshot");try{let d=(r.async??[]).filter(([p])=>!we(p)&&n(`async:${p}`)),g=new Set(d.map(([p])=>p)),c=(await oe.getAllKeys()).filter(p=>!we(p)).filter(p=>!g.has(p)&&n(`async:${p}`));o.countExcluded((r.async??[]).length-d.length),c.length>0&&await sr(c),d.length>0&&await zr(d),a.applied+=d.length+c.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,g]of Object.entries(r.mmkv??{})){if(we(d))continue;let c=Pe.get(d);if(!c){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(c.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:p}=c;try{let m=new Set(g.map(f=>f.key)),x=p.getAllKeys().filter(f=>!we(f));for(let f of x)o.allows(`mmkv:${d}/${f}`)&&(m.has(f)||(Un(p,f),a.applied+=1));for(let f of g)if(!we(f.key)&&n(`mmkv:${d}/${f.key}`)){if(f.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${f.key}`,reason:"ArrayBuffer values cannot be restored"});continue}p.set(f.key,f.value),a.applied+=1}}catch(m){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(m)}`)}}let i=r.secure??{};for(let{key:d,options:g}of ee.getAll().filter(({key:c})=>!we(c)))if(o.allows(`secure:${d}`)){if(g.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let c=i[d];c===null?await ee.deleteValue(d):await ee.setValue(d,c)}else await ee.deleteValue(d);a.applied+=1}catch(c){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(c)}`)}}for(let d of Object.keys(i))we(d)||n(`secure:${d}`)&&(ee.getAll().filter(({key:g})=>!we(g)).some(g=>g.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let y=o.excludedWarning("item(s)");return y&&a.warnings.push(y),a}async function ml(){let e=Nn();try{await so(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Pe.getAll().filter(({id:o})=>!we(o))){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!we(n)))Un(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of ee.getAll().filter(({key:o})=>!we(o))){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await ee.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var fl=256*1024;function Qo(e,t,r,o,n,a){return Xi({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>fl,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function hl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Gn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],y=new Map(n.async??[]),d=new Map(r.async??[]);for(let m of lo(y,d))we(m)||a.push(Qo(`async:${m}`,m,y.get(m),d.get(m),y.has(m),d.has(m)));for(let m of lo(n.mmkv,r.mmkv)){if(we(m))continue;let x=o?Pe.get(m):null,f=o&&!x,b=o&&x?.instance.isReadOnly===true,S=new Map((n.mmkv?.[m]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[m]??[]).map(T=>[T.key,T]));for(let T of lo(S,w)){if(we(T))continue;let I=`mmkv:${m}/${T}`,R=`${m} \xB7 ${T}`,D=S.get(T),C=w.get(T),B=Qo(I,R,D?.value,C?.value,S.has(T),w.has(T));f?B=Kr(B,"MMKV instance not registered"):b?B=Kr(B,"MMKV instance registered read-only"):(C?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Kr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let g=n.secure??{},c=r.secure??{},p=o?new Map(ee.getAll().filter(({key:m})=>!we(m)).map(m=>[m.key,m])):null;for(let m of lo(g,c)){if(we(m))continue;let x=Qo(`secure:${m}`,m,g[m],c[m],m in g,m in c);if(o){let f=p?.get(m);f?f.options.requireAuthentication&&(x=Kr(x,"biometric-protected keys are never written")):x=Kr(x,"key no longer registered with registerSecureStoreKeys")}a.push(x)}return{items:a,notes:i}}rl({id:"storage",label:"Storage",status:yl,capture:gl,restore:pl,clear:ml,previewItems:hl});E();import{StorageIcon as bl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as vl,defineToolPreset as Sl}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as Zo,useRef as Jn,useMemo as st}from"react";var Yn={};Ln(Yn,{AccessibilityInfo:()=>xl,ActivityIndicator:()=>ws,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Il,AppState:()=>El,Appearance:()=>Tl,BackHandler:()=>Rl,Button:()=>ks,CheckBox:()=>Nl,Clipboard:()=>Bl,DeviceEventEmitter:()=>ns,Dimensions:()=>Vl,Easing:()=>Lr,FlatList:()=>Xo,I18nManager:()=>Al,Image:()=>Hl,ImageBackground:()=>ql,InteractionManager:()=>Ml,Keyboard:()=>Dl,KeyboardAvoidingView:()=>jl,LayoutAnimation:()=>zl,Linking:()=>Kl,LogBox:()=>os,Modal:()=>ta,NativeEventEmitter:()=>Ll,NativeModules:()=>Cl,PanResponder:()=>Pl,Picker:()=>Ul,PixelRatio:()=>Ol,Platform:()=>Fl,Pressable:()=>vs,ProgressBar:()=>Gl,RefreshControl:()=>Jl,SafeAreaView:()=>Yl,ScrollView:()=>Or,SectionList:()=>Ql,Share:()=>Wl,StatusBar:()=>Zl,StyleSheet:()=>pe,Switch:()=>Ss,Text:()=>u,TextInput:()=>fs,Touchable:()=>Xl,TouchableHighlight:()=>hs,TouchableNativeFeedback:()=>es,TouchableOpacity:()=>L,TouchableWithoutFeedback:()=>bs,UIManager:()=>_l,Vibration:()=>$l,View:()=>l,VirtualizedList:()=>ts,YellowBox:()=>rs,findNodeHandle:()=>Cs,unstable_createElement:()=>kl,useColorScheme:()=>as,useLocaleContext:()=>is,useWindowDimensions:()=>ls});E();Ni(Yn,wl);import*as wl from"react-native-web";import{unstable_createElement as kl,NativeModules as Cl,AccessibilityInfo as xl,Animated as Yt,Appearance as Tl,AppRegistry as Il,AppState as El,BackHandler as Rl,Clipboard as Bl,Dimensions as Vl,Easing as Lr,I18nManager as Al,Keyboard as Dl,InteractionManager as Ml,LayoutAnimation as zl,Linking as Kl,NativeEventEmitter as Ll,PanResponder as Pl,PixelRatio as Ol,Platform as Fl,Share as Wl,StyleSheet as pe,UIManager as _l,Vibration as $l,CheckBox as Nl,FlatList as Xo,Image as Hl,ImageBackground as ql,KeyboardAvoidingView as jl,Picker as Ul,ProgressBar as Gl,RefreshControl as Jl,SafeAreaView as Yl,SectionList as Ql,StatusBar as Zl,Touchable as Xl,TouchableNativeFeedback as es,VirtualizedList as ts,YellowBox as rs,LogBox as os,DeviceEventEmitter as ns,useColorScheme as as,useLocaleContext as is,useWindowDimensions as ls}from"react-native-web";import*as Ze from"react-native-web";import{createElement as en,forwardRef as Qn,useCallback as ss,useRef as cs}from"react";E();import{useEffect as ds,useState as us}from"react";import{createPortal as ys}from"react-dom";E();var gs='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as ps}from"react/jsx-runtime";var Pr=Symbol.for("@buoy-gg/portal-host"),Zn=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function Xn(){let e=document;if(e[Pr])return e[Pr].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:gs});let r=()=>{let c=document.fullscreenElement,p=c&&c.tagName!=="CANVAS"?c:document.body;t.parentElement!==p&&p.appendChild(t)},o=new Map,n=c=>{(!t.contains(c.target)||!Zn(c.target))&&o.set(c.code||c.key,{key:c.key,code:c.code,location:c.location,keyCode:c.keyCode,which:c.which,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey})},a=c=>{o.delete(c.code||c.key)},i=()=>o.clear(),y=()=>{let c=[...o.values()];o.clear();for(let p of c)document.dispatchEvent(new KeyboardEvent("keyup",{...p,bubbles:true}))},d=c=>{Zn(c.target)&&c.stopPropagation()},g=c=>c.stopPropagation();return r(),document.addEventListener("fullscreenchange",r),document.addEventListener("keydown",n,true),document.addEventListener("keyup",a,true),window.addEventListener("blur",i),t.addEventListener("focusin",y),t.addEventListener("keydown",d),t.addEventListener("keyup",d),t.addEventListener("keypress",d),t.addEventListener("wheel",g,{passive:true}),e[Pr]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",r),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",a,true),window.removeEventListener("blur",i),t.remove(),delete e[Pr]}},t}function ms({children:e}){let[t,r]=us(null);return ds(()=>{let o=Xn(),n=document[Pr];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?ys(ps("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}function nt(e){let t=Qn((o,n)=>{let{accessibilityState:a,accessibilityValue:i,...y}=o;for(let d of["busy","checked","disabled","expanded","selected"])a?.[d]!==void 0&&y[`aria-${d}`]===void 0&&(y[`aria-${d}`]=a[d]);for(let[d,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[d]!==void 0&&y[`aria-${g}`]===void 0&&(y[`aria-${g}`]=i[d]);return en(e,{...y,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=nt(Ze.View),u=nt(Ze.Text),fs=nt(Ze.TextInput),L=nt(Ze.TouchableOpacity),hs=nt(Ze.TouchableHighlight),bs=nt(Ze.TouchableWithoutFeedback),vs=nt(Ze.Pressable),Or=nt(Ze.ScrollView),ea=Qn((e,t)=>{let r=cs(null),o=ss(n=>{if(n){let a=n;for(;a.parentElement&&a.parentElement!==document.body;)a=a.parentElement;a.parentElement===document.body&&(r.current=a,Object.assign(a.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),Xn().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return en(ms,null,en(Ze.Modal,{...e,ref:o}))});ea.displayName="Modal";var ta=nt(ea),Ss=nt(Ze.Switch),ws=nt(Ze.ActivityIndicator),ks=nt(Ze.Button),Cs=Ze.findNodeHandle,Ie={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let g=document.createElement("p");g.textContent=t,g.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(g)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let y=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let g of y){let c=document.createElement("button");c.type="button",c.textContent=g.text??"OK",c.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${g.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,c.onclick=()=>{d(),g.onPress?.()},i.appendChild(c)}n.addEventListener("cancel",g=>{g.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};ft();import{JsModal as xs,ModalHeader as Me,TabSelector as Ts,parseValue as Is,devToolsStorageKeys as cr,macOSColors as Es,night as We,ToolEmptyState as Rs,Filter as Bs,RefreshCw as Vs,Search as As,SearchBar as Ds,PowerToggleButton as Ms,ToolbarCopyButton as ra,ToolbarClearButton as zs,truncatePayload as co,TickProvider as oa,useLimit as Ks,TIER_LIMITS as Ls,windowDragProps as Ps,usePersistedState as uo,monoFont as yo}from"@buoy-gg/shared-ui/web";E();E();E();ao();var ae=Dr()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as _e,useCallback as Xe,useState as Qt,useEffect as dr,useRef as tn}from"react";import{absoluteFill as na,useLimit as aa,TIER_LIMITS as Os,monoFont as Fr}from"@buoy-gg/shared-ui/web";import{Database as ia,Zap as Fs,ProBadge as la,ProUpgradeModal as Ws,ToolEmptyState as _s,resolveListEmptyState as $s}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";E();import{useCallback as sa,useState as Ns}from"react";E();import{memo as Hs}from"react";import{macOSColors as me,night as ce,CompactRow as qs,TypeBadge as ca,HardDrive as js,Square as Us,CheckSquare as Gs,Edit3 as Js,EyeOff as Ys,Pin as da,Trash2 as Qs,ExpandedInfoRow as rn,PillBadge as Wr,monoFont as ur}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as go}from"@buoy-gg/shared-ui/web";var Zs=new Set(["sessionStorage","localStorage"]);function on(e,t){switch(e){case"mmkv":return t&&!Zs.has(t)?"MMKV":ae.mmkv;case"async":return ae.async;case"secure":return"Secure";default:return e}}function ua(e){switch(e){case"mmkv":return go.info;case"async":return go.warning;case"secure":return go.success;default:return go.muted}}E();function Dt(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function ya(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var Xs=40;function ec(e){switch(typeof e){case"boolean":return e?"true":"false";case"number":return Number.isFinite(e)?String(e):null;case"string":return e.length===0?'""':e.length>Xs?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function tc(e){let t=Dt(e),r=ec(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as rc}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as oc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var ga=[me.semantic.info,me.semantic.success,me.semantic.warning,me.semantic.debug,"#FF6B9D","#00D9FF"];function pa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ga[t%ga.length]}var ma=e=>{switch(e){case"required_present":return{label:"Valid",color:me.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:me.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:me.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:me.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:me.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:me.text.secondary,sublabel:String(e)}}},nc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),ac=Hs(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:y,onHideKey:d,isPinned:g=false,onTogglePin:c,onEditKey:p,onToggleKey:m,onDeleteKey:x,editBlockedReason:f}){let b=p!=null&&f==null,S=ma(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=on(e.storageType,e.instanceId),D=ya(e.value),C=D!==null&&typeof D=="object",B=Ve(l,{style:_.expandedContainer,children:[W(rn,{label:"Storage",children:W(Wr,{color:nn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(rn,{label:"Instance",children:W(Wr,{color:pa(e.instanceId),icon:W(js,{size:9,color:pa(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(rn,{label:"Updates",children:[W(Wr,{color:me.semantic.warning,children:String(i)}),i>1&&y&&W(L,{onPress:y,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:_.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(u,{style:_.viewHistoryText,children:"view history \u2192"})})]}),C?W(l,{style:_.dataViewerContainer,children:W(rc,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Value:"}),W(u,{style:_.expandedValue,numberOfLines:3,children:nc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(oc,{children:[Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Type:"}),W(ca,{type:Dt(e.value)})]}),Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(ca,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Expected:"}),W(u,{style:_.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Info:"}),W(u,{style:_.expandedDescription,children:e.description})]}):null,f?Ve(l,{style:_.expandedRow,children:[W(u,{style:_.expandedLabel,children:"Edit:"}),W(u,{style:_.expandedDescription,children:f})]}):null,c||d||b?Ve(l,{style:_.actionRow,children:[b?Ve(L,{style:_.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&m?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&m?m(e):p?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Js,{size:13,color:ce.color.onAccent}),W(u,{style:_.editButtonText,children:T&&m?"Toggle":"Edit"})]}):null,c?Ve(L,{style:[_.actionChip,g&&_.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:g?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>c(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(da,{size:12,active:g,color:ce.color.accent}),W(u,{style:[_.actionChipText,{color:ce.color.accent}],children:g?"Unpin":"Pin to top"})]}):null,d?Ve(L,{style:_.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Ys,{size:12,color:ce.color.warning}),W(u,{style:[_.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&x?Ve(L,{style:[_.actionChip,_.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>x(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(Qs,{size:12,color:ce.color.danger}),W(u,{style:[_.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(L,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:_.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(Gs,{size:18,color:ce.color.accent}):W(Us,{size:18,color:ce.color.textTertiary})}):null;return Ve(l,{style:[_.rowContainer,n&&_.rowContainerSelected],children:[ve,Ve(l,{style:_.compactRowWrapper,children:[W(qs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?Dt(e.value):tc(e.value):void 0,secondaryAccessory:T?W(Wr,{size:"sm",color:e.value?me.semantic.success:me.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:_.badgeRow,children:[g&&W(da,{size:12,active:true,color:ce.color.accent}),W(Wr,{color:nn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${e.storageType} ${e.key}`}),i!=null&&i>1&&W(l,{style:[_.absCountBadge,t&&_.absCountBadgeExpanded,{backgroundColor:me.semantic.warning+"22",borderColor:me.semantic.warning+"55"}],pointerEvents:"none",children:W(u,{style:[_.absCountText,{color:me.semantic.warning}],children:String(i)})})]})]})}),nn=e=>{switch(e){case"mmkv":return me.semantic.info;case"async":return me.semantic.warning;case"secure":return me.semantic.success;default:return me.text.secondary}},_=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:ur},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:ur,flex:1},expandedExpected:{fontSize:11,color:me.semantic.warning,fontFamily:ur,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:ur},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:ur},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:ur,color:ce.color.accent}});import{SectionHeader as yr,night as an}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as po}from"react/jsx-runtime";function ln(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function fa({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:y,eventCountByKey:d,onViewHistory:g,onHideKey:c,pinnedKeys:p,onTogglePin:m,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=sa(B=>ln(B),[]),[R,D]=Ns(null),C=sa(B=>{if(!B||typeof B.key!="string")return;if(T){T(B);return}let Q=I(B);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?po(l,{style:_r.sectionContainer,children:[po(yr,{children:[Ct(yr.Title,{children:e}),Ct(yr.Badge,{count:0,color:n})]}),Ct(l,{style:_r.emptySection,children:Ct(u,{style:_r.emptySectionText,children:o})})]}):r.length===0?null:po(l,{style:_r.sectionContainer,children:[e?po(yr,{children:[Ct(yr.Title,{children:e}),t>=0&&Ct(yr.Badge,{count:t,color:n})]}):null,Ct(l,{style:_r.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(ac,{storageKey:B,isExpanded:!a&&R===Q,onPress:C,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:y,eventCount:d?.[B.key],onViewHistory:g?()=>g(B.key):void 0,onHideKey:c,onEditKey:x,onToggleKey:f,onDeleteKey:b,editBlockedReason:S?.(B),isPinned:p?.has(B.key),onTogglePin:m})},Q)})})]})}var _r=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:an.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:an.color.border,alignItems:"center"},emptySectionText:{color:an.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as ic,useMemo as ha,useRef as ba,useState as va}from"react";import{EyeOff as lc,FileJson as sc,HardDrive as cc,night as J,macOSColors as gr,Pin as dc,PillBadge as mo,Trash2 as uc,TypeBadge as yc,useSafeAreaInsets as gc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as pc,LiveExplorer as mc,ValueEditModal as fc,updateNestedDataByPath as hc,deleteNestedDataByPath as bc}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as P,jsxs as fe}from"react/jsx-runtime";var vc=300,ht="buoy-storage-detail";function Sc(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ht}-explorer-root`:`${ht}-explorer-${e.map(t).filter(Boolean).join("-")}`}var Sa=[gr.semantic.info,gr.semantic.success,gr.semantic.warning,gr.semantic.debug,"#FF6B9D","#00D9FF"];function wa(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Sa[t%Sa.length]}function wc({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:y=false,onTogglePin:d,applySafeAreaInset:g}){let c=gc(),p=g?c.bottom:0,m=t==null,x=ma(e.status),f=on(e.storageType,e.instanceId),[b,S]=va(false),[w,T]=va(0),I=ba(null),R=ha(()=>ya(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let C=I.current?I.current.value:R,B=ic(q=>{let ue=typeof q=="string"?q:JSON.stringify(q);I.current={raw:ue,value:q},o(ue).catch(te=>{I.current=null,Ie.alert("Couldn't save",te instanceof Error?te.message:String(te))})},[o]),Q=ba(C);Q.current=C;let ve=ha(()=>{if(m)return{update:(q,ue)=>{let te=q.length===0?ue:hc(Q.current,q,ue);B(te)},remove:q=>{q.length!==0&&B(bc(Q.current,q))}}},[m,B]),Se=d||i||m&&a;return fe(l,{style:A.screen,children:[P(l,{testID:`${ht}-key`,accessibilityLabel:e.key}),fe(Or,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+p}],keyboardShouldPersistTaps:"handled",children:[P(l,{style:A.section,children:fe(l,{style:A.editorContainer,children:[fe(l,{style:A.sectionHeaderRow,children:[P(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),m?fe(L,{onPress:()=>S(true),testID:`${ht}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(sc,{size:13,color:J.color.accent}),P(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),fe(l,{style:A.sectionBody,children:[P(mc,{editable:m,label:"Value",value:C,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:Sc,debounceMs:vc}),m?P(u,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):P(u,{style:A.blockedText,testID:`${ht}-edit-blocked`,children:t})]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Key Details"}),fe(l,{style:A.infoBody,children:[fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Status:"}),P(mo,{color:x.color,testID:`${ht}-status`,children:x.label}),P(u,{style:A.infoDim,children:x.sublabel})]}),fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Storage:"}),P(mo,{color:nn(e.storageType),testID:`${ht}-backend`,children:f}),P(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Instance:"}),P(mo,{color:wa(e.instanceId),icon:P(cc,{size:9,color:wa(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Updates:"}),P(mo,{color:gr.semantic.warning,children:String(r)}),r>1&&n&&P(L,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:P(u,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(yc,{type:e.expectedType}),fe(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Expected:"}),P(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?fe(l,{style:A.infoRow,children:[P(u,{style:A.infoLabel,children:"Info:"}),P(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),P(l,{style:A.section,children:fe(l,{style:A.infoContainer,children:[P(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),P(l,{style:A.viewerBody,testID:`${ht}-viewer`,children:C!==null&&typeof C=="object"?P(pc,{title:"",data:C,showTypeFilter:true,rawMode:true,initialExpanded:false}):P(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?fe(l,{style:A.actionRow,children:[d?fe(L,{style:[A.actionChip,y&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(dc,{size:12,active:y,color:J.color.accent}),P(u,{style:[A.actionChipText,{color:J.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,i?fe(L,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(lc,{size:12,color:J.color.warning}),P(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,m&&a?fe(L,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[P(uc,{size:12,color:J.color.danger}),P(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&m?P(fc,{path:[],value:C,onSave:q=>{B(q),T(ue=>ue+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=pe.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.accent+"4D",overflow:"hidden",shadowColor:J.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:J.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:J.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:J.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:J.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:J.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:J.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:J.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:J.color.textSecondary,borderBottomWidth:1,borderBottomColor:J.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:J.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Mt},infoDim:{color:J.color.textTertiary,fontSize:10,fontFamily:Mt},infoExpected:{fontSize:11,color:gr.semantic.warning,fontFamily:Mt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Mt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Mt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Mt}});E();E();E();function ka(){return ae.hasSecure||ee.count()>0}import{macOSColors as sn,night as zt,monoFont as kc}from"@buoy-gg/shared-ui/web";import{jsx as cn,jsxs as Cc}from"react/jsx-runtime";var xc=[{id:"all",label:"All Types",color:null},{id:"async",label:ae.async,color:sn.semantic.warning},{id:"mmkv",label:ae.mmkv,color:sn.semantic.info},{id:"secure",label:"Secure",color:sn.semantic.success}];function dn({active:e,onChange:t,counts:r}){return cn(l,{style:$r.row,children:xc.filter(o=>ka()||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??zt.color.accent;return Cc(L,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[$r.pill,{borderColor:zt.color.border},n&&[$r.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:zt.color.accentSoft,borderColor:zt.color.accentBorderStrong}]],children:[cn(u,{style:[$r.label,n&&{color:a,fontWeight:"600"}],children:o.label}),cn(u,{style:[$r.value,{color:n?a:zt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function Ca(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var $r=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:zt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:zt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:zt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:kc,lineHeight:14}});import{macOSColors as Kt,night as Oe,monoFont as Tc}from"@buoy-gg/shared-ui/web";E();function un(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function Ic(){return null}function xa(){return"Session storage is unavailable in this browser context."}import{jsx as Zt,jsxs as Nr}from"react/jsx-runtime";var Wy=un();function Ec({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:y="all",onStorageTypeChange:d,showStatus:g=true}){let c=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return Nr(l,{style:$e.container,children:[g?Nr(l,{style:$e.filtersRow,children:[Nr(L,{style:[$e.filterChip,a==="all"&&[$e.filterChipActive,{backgroundColor:Oe.color.accentSoft,borderColor:Oe.color.accentBorderStrong,shadowColor:Oe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Zt(u,{style:[$e.filterValue,{color:Oe.color.text}],children:c.validCount}),Zt(u,{style:$e.filterLabel,children:"Valid"})]}),Nr(L,{style:[$e.filterChip,a==="missing"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.error+"10",borderColor:Kt.semantic.error+"30",shadowColor:Kt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Zt(u,{style:[$e.filterValue,{color:c.missingCount>0?Kt.semantic.error:Oe.color.textTertiary}],children:c.missingCount}),Zt(u,{style:$e.filterLabel,children:"Missing"})]}),Nr(L,{style:[$e.filterChip,a==="issues"&&[$e.filterChipActive,{backgroundColor:Kt.semantic.warning+"10",borderColor:Kt.semantic.warning+"30",shadowColor:Kt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Zt(u,{style:[$e.filterValue,{color:c.issuesCount>0?Kt.semantic.warning:Oe.color.textTertiary}],children:c.issuesCount}),Zt(u,{style:$e.filterLabel,children:"Issues"})]})]}):null,d&&Zt(dn,{active:y,onChange:d,counts:{all:c.totalCount,async:c.asyncCount,mmkv:c.mmkvCount,secure:c.secureCount}})]})}var $e=pe.create({container:{backgroundColor:Oe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Oe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Oe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Oe.color.border,marginHorizontal:4},subtitleText:{color:Oe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Oe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Oe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Oe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Oe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Tc,lineHeight:20}});E();ft();Jt();import{isDevToolsStorageKey as Rc}from"@buoy-gg/shared-ui/web";import{useState as yn,useEffect as Bc,useCallback as Vc,useRef as Ac}from"react";E();function Lt(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function gn(e=[]){let[t,r]=yn([]),[o,n]=yn(true),[a,i]=yn(null),y=JSON.stringify(e),d=Ac(e);d.current=e;let g=Vc(async()=>{let c=d.current;n(true),i(null);try{let p=(await oe.getAllKeys()).filter(f=>!Rc(f));if(!p||p.length===0){r([]),n(false);return}let m=await io(p),x=[];m.forEach(([f,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=c.find(R=>Lt(R,"async")?typeof R=="string"?R===f:R.key===f:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:f,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};x.push(I)}),c.forEach(f=>{if(!Lt(f,"async"))return;let b=typeof f=="string"?f:f.key;x.some(S=>S.key===b)||x.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof f=="object"&&f.expectedValue!==void 0&&{expectedValue:f.expectedValue},...typeof f=="object"&&f.expectedType!==void 0&&{expectedType:f.expectedType},...typeof f=="object"&&f.description!==void 0&&{description:f.description}})}),r(x)}catch(p){i(p instanceof Error?p:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[y]);return Bc(()=>{g()},[g]),{storageKeys:t,isLoading:o,error:a,refresh:g}}E();ao();import{isDevToolsStorageKey as Dc,appStorageEvent as Mc}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as zc}from"@buoy-gg/shared-ui/web/utils";var pn=new Set,fo,Ta=false,Kc=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Ia=e=>Dc(e)||[...Kc].some(t=>e.startsWith(t));function Ea(e){let t=Mc(e);if(t){e=t;for(let r of[...pn])try{r(e)}catch{}}}async function Lc(){if(!(fo||typeof window>"u")){if(Dr()){fo=Yi(e=>{Ta||Ea(e)});return}fo=zc(e=>{if(Ta||e.area!=="localStorage"||e.key!==void 0&&Ia(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!Ia(n))),Ea({action:r,data:o,timestamp:new Date})})}}function Ra(e){return pn.add(e),()=>{pn.delete(e)}}function Pc(){return!!fo}E();import{isDevToolsStorageKey as Ba}from"@buoy-gg/shared-ui/web";import{useState as pr,useEffect as Va,useCallback as Aa,useRef as Da}from"react";function Oc(e,t,r=[]){let[o,n]=pr([]),[a,i]=pr(true),[y,d]=pr(null),g=JSON.stringify(r),c=Da(r);c.current=r;let p=Aa(()=>{let m=c.current;i(true),d(null);try{if(!e){n([]),i(false);return}let x=e.getAllKeys().filter(b=>!Ba(b));if(!x||x.length===0){let b=m.filter(S=>Lt(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,R=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:R}});n(b),i(false);return}let f=[];x.forEach(b=>{let{value:S,type:w}=kt(e,b),T=m.find(D=>Lt(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Jo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let R={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};f.push(R)}),m.forEach(b=>{if(!Lt(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;f.some(w=>w.key===S)||f.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(f)}catch(x){d(x instanceof Error?x:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,g]);return Va(()=>{p()},[p]),{storageKeys:o,isLoading:a,error:y,refresh:p}}function Ma(e,t=[]){let[r,o]=pr([]),[n,a]=pr(true),[i,y]=pr(null),d=JSON.stringify(t),g=Da(t);g.current=t;let c=Aa(()=>{let p=g.current;a(true),y(null);try{let m=[];e.forEach(({instance:x,id:f})=>{let b=x.getAllKeys().filter(S=>!Ba(S));!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=kt(x,S),I=p.find(C=>Lt(C,"mmkv")?typeof C=="string"?C===S:C.key===S:false),R="optional_present";I&&(w===void 0?R="required_missing":typeof I=="object"&&I.expectedValue!==void 0?R=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?R=Jo(T,I.expectedType)?"required_present":"required_wrong_type":R="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:f,status:R,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};m.push(D)})}),p.forEach(x=>{if(!Lt(x,"mmkv"))return;let f=typeof x=="string"?x:x.key;if(!m.some(b=>b.key===f)){let b=e[0]?.id||"mmkv.default";m.push({key:f,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof x=="object"&&x.expectedValue!==void 0&&{expectedValue:x.expectedValue},...typeof x=="object"&&x.expectedType!==void 0&&{expectedType:x.expectedType},...typeof x=="object"&&x.description!==void 0&&{description:x.description}})}}),o(m)}catch(m){y(m instanceof Error?m:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return Va(()=>{c()},[c]),{storageKeys:r,isLoading:n,error:i,refresh:c}}E();import{isDevToolsStorageKey as Fc}from"@buoy-gg/shared-ui/web";import{useState as mn,useEffect as Wc,useCallback as za,useRef as ho}from"react";var _c="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",$c=3e3;function Ka(e){return JSON.stringify(e)}function Nc(e=[],t={}){let{pollMs:r=$c}=t,o=ho(e);o.current=e;let n=JSON.stringify(e),[a,i]=mn([]),[y,d]=mn(true),[g,c]=mn(null),p=ho(Ka([])),m=ho(false),x=ho(false),f=za(S=>{let w=Ka(S);w!==p.current&&(p.current=w,i(S))},[]),b=za(async()=>{if(!x.current){x.current=true;try{let S=ee.getModule(),w=ee.getAll().filter(({key:C})=>!Fc(C)),T=o.current.filter(C=>Lt(C,"secure")),I=C=>T.find(B=>(typeof B=="string"?B:B.key)===C);if(!S||w.length===0&&T.length===0){f([]),m.current=true,d(false);return}m.current||d(true),c(null);let R=[],D=[...w,...T.map(C=>typeof C=="string"?C:C.key).filter(C=>!w.some(B=>B.key===C)).map(C=>({key:C,options:{},description:void 0}))];for(let C of D){let B=I(C.key),Q=typeof B=="object"?B:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??C.description;if(C.options.requireAuthentication){R.push({key:C.key,value:_c,storageType:"secure",status:B?"required_present":"optional_present",category:B?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}});continue}let q=null;try{q=await S.getItemAsync(C.key,C.options)}catch{}if(q===null&&!B)continue;let ue=q;if(q)try{ue=JSON.parse(q)}catch{ue=q}let te="optional_present";if(B)if(q===null)te="required_missing";else if(Q?.expectedValue!==void 0)te=String(ue)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let se=ue===null?"null":Array.isArray(ue)?"array":typeof ue,Ue=Q.expectedType.toLowerCase();te=se===Ue||Ue==="string"&&typeof q=="string"?"required_present":"required_wrong_type"}else te="required_present";R.push({key:C.key,value:q===null?void 0:ue,storageType:"secure",status:te,category:B?"required":"optional",...Se&&{description:Se},...ve,...C.options.keychainService&&{instanceId:C.options.keychainService}})}f(R)}catch(S){c(S instanceof Error?S:new Error("Failed to read SecureStore")),f([])}finally{m.current=true,x.current=false,d(false)}}},[f,n]);return Wc(()=>{b();let S=ee.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:y,error:g,refresh:b}}E();import{isDevToolsStorageKey as fn}from"@buoy-gg/shared-ui/web";import{useState as bo,useEffect as vo}from"react";function hn(e=false){let[t,r]=bo([]),[o,n]=bo(true),a=()=>{n(true);try{let i=Pe.getAll().filter(({id:y})=>!fn(y)).map(y=>{let{instance:d,id:g,encrypted:c,readOnly:p}=y,m=d.getAllKeys().filter(x=>!fn(x))?.length||0;return{id:g,instance:d,encrypted:c,readOnly:p,keyCount:m,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return vo(()=>{a()},[]),vo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function La(e){let[t,r]=bo(null);return vo(()=>{if(!Pe){r(null);return}let o=Pe.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!fn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function Hc(e){let[t,r]=bo(false);return vo(()=>{if(!Pe){r(false);return}r(Pe.has(e))},[e]),t}E();import{useEffect as qc,useRef as Pa}from"react";import{Check as jc,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as mr,jsxs as Uc}from"react/jsx-runtime";var Gc=2600,Oa=180;function Jc({onDone:e}){let t=Pa(new Yt.Value(0)).current,r=Pa(e);return r.current=e,qc(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:Oa,easing:Lr.out(Lr.quad),useNativeDriver:true}),Yt.delay(Gc),Yt.timing(t,{toValue:0,duration:Oa,easing:Lr.in(Lr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),mr(Yt.View,{pointerEvents:"box-none",style:[fr.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Uc(L,{activeOpacity:.85,onPress:()=>r.current(),style:fr.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[mr(l,{style:fr.tick,children:mr(jc,{size:10,color:Xt.semantic.success})}),mr(u,{style:fr.saved,children:"Saved"}),mr(l,{style:fr.divider}),mr(u,{style:fr.detail,children:"applies on next launch"})]})})}var fr=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor:Xt.background.card,borderWidth:pe.hairlineWidth,borderColor:Xt.border.default,shadowColor:"#000",shadowOpacity:.4,shadowRadius:14,shadowOffset:{width:0,height:5}},tick:{width:16,height:16,borderRadius:8,marginRight:7,alignItems:"center",justifyContent:"center",backgroundColor:Xt.semantic.successBackground},saved:{color:Xt.text.primary,fontSize:12,fontWeight:"600"},divider:{width:pe.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Xt.border.default},detail:{color:Xt.text.muted,fontSize:12}});E();import{useState as Yc,useEffect as Qc}from"react";ft();import{Trash2 as So,CopyButton as Zc,SquareDashed as Xc,X as ed,ProUpgradeModal as td,monoFont as rd}from"@buoy-gg/shared-ui/web";import{macOSColors as Fa,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as od}from"@buoy-gg/license/web";import{jsx as Ne,jsxs as Wa}from"react/jsx-runtime";function nd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[y,d]=Yc(false),g=od();Qc(()=>{y&&g&&d(false)},[y,g]);let c=()=>{if(!g){d(true);return}Ie.alert(`Clear ${ae.asyncFull}`,`Delete all ${ae.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await oe.clear(),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},p=(R,D)=>{if(!g){d(true);return}Ie.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let C=t.find(B=>B.id===R);C&&(C.instance.clearAll(),o?.())}catch(C){Ie.alert("Error",`Failed: ${C}`)}}}])},m=()=>{if(!g){d(true);return}Ie.alert(`Clear All ${ae.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},x=()=>{if(!g){d(true);return}Ie.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},f=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=f&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Wa(l,{style:bt.container,children:[a&&Ne(L,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Wa(l,{style:bt.selectModeActiveContainer,children:[Ne(ed,{size:14,color:at.color.accent}),i>0&&Ne(u,{style:bt.selectedCountText,children:i})]}):Ne(Xc,{size:16,color:at.color.textSecondary})}),!n&&Ne(Zc,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:Fa.semantic.success,error:Fa.semantic.error}}),!n&&S&&Ne(L,{onPress:x,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&w&&Ne(L,{onPress:c,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ae.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&I&&Ne(L,{onPress:m,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ae.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&Ne(L,{onPress:()=>p(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ae.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:Ne(So,{size:16,color:at.color.danger})}),Ne(td,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var bt=pe.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:at.color.buttonSurface,borderWidth:1,borderColor:at.color.border},actionButtonActive:{backgroundColor:at.color.accentSoft,borderColor:at.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:at.color.accent,fontFamily:rd}});E();import{useState as ad,useEffect as id}from"react";import{Trash2 as ld,CopyButton as sd,CheckSquare as cd,EyeOff as dd,ProUpgradeModal as ud,monoFont as yd}from"@buoy-gg/shared-ui/web";import{macOSColors as _a,night as He}from"@buoy-gg/shared-ui/web";import{useIsPro as gd}from"@buoy-gg/license/web";E();Jt();function pd(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function $a(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await sr(r.map(a=>a.key));for(let a of n)await ee.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let y=i.instanceId||"default";a[y]||(a[y]=[]),a[y].push(i.key)}),Object.entries(a).forEach(([i,y])=>{let d=t.find(g=>g.id===i);d&&y.forEach(g=>pd(d.instance,g))})}}import{jsx as xt,jsxs as Hr}from"react/jsx-runtime";function md({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[y,d]=ad(false),g=gd();id(()=>{y&&g&&d(false)},[y,g]);let c=e.length,p=c===i&&i>0,m=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:c,keys:b,timestamp:new Date().toISOString()}},x=()=>{c!==0&&o?.(e)},f=()=>{if(c!==0){if(!g){d(true);return}Ie.alert("Delete Selected Keys",`Delete ${c} selected key${c>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await $a(e,t),r?.()}catch(b){Ie.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return c===0?null:Hr(l,{style:vt.container,children:[Hr(l,{style:vt.leftSection,children:[Hr(L,{style:vt.selectAllButton,onPress:p?a:n,testID:"buoy-storage-select-all",accessibilityLabel:p?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(cd,{size:14,color:p?He.color.accent:He.color.textSecondary}),xt(u,{style:vt.selectAllText,children:p?"Deselect All":"Select All"})]}),xt(l,{style:vt.countBadge,children:Hr(u,{style:vt.countText,children:[c," selected"]})})]}),Hr(l,{style:vt.actionsSection,children:[xt(sd,{value:m(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:He.color.accent,success:_a.semantic.success,error:_a.semantic.error}}),o&&xt(L,{style:vt.actionButton,onPress:x,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(dd,{size:14,color:He.color.warning})}),xt(L,{style:vt.actionButton,onPress:f,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(ld,{size:14,color:He.color.danger})})]}),xt(ud,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var vt=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:He.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:He.color.accentBorderStrong,paddingHorizontal:12,paddingVertical:8,marginBottom:10},leftSection:{flexDirection:"row",alignItems:"center",gap:12},selectAllButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,paddingHorizontal:8,backgroundColor:He.color.surface,borderRadius:6,borderWidth:1,borderColor:He.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:He.color.textSecondary},countBadge:{backgroundColor:He.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:He.color.accent,fontFamily:yd},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:He.color.surface,borderWidth:1,borderColor:He.color.border}});E();var bn=new Set;function fd(e){return bn.add(e),()=>{bn.delete(e)}}function hd(){bn.forEach(e=>{try{e()}catch{}})}E();ft();function vn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(ee.getAll().find(r=>r.key===e.key)?.options.requireAuthentication)return"Biometric-protected keys can't be edited \u2014 writing one would fire an auth prompt.";if(!ee.getModule())return"No SecureStore module is registered."}return null}function Na(e,t){if(e.storageType==="mmkv"){let r=Ua(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(qa(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function bd(e){if(e==null)return"";if(typeof e=="string"){let t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return e}return typeof e=="object"?JSON.stringify(e,null,2):String(e)}async function Ha(e,t,r=[]){let o=vn(e,r);if(o)throw new Error(o);let n=Na(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,ja(e,t));return}case"secure":{await ee.setValue(e.key,ja(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(y=>y.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,vd(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function qa(e){return e!==null&&typeof e=="object"}function ja(e,t){return qa(e.value)?JSON.stringify(JSON.parse(t)):t}function Ua(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function vd(e,t){switch(Ua(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as hr,macOSColors as wo,night as F,HardDrive as Ga}from"@buoy-gg/shared-ui/web";import{useIsPro as Sd}from"@buoy-gg/license/web";import{Fragment as wd,jsx as H,jsxs as Ee}from"react/jsx-runtime";var Ja=[wo.semantic.info,wo.semantic.success,wo.semantic.warning,wo.semantic.debug,"#FF6B9D","#00D9FF"];function br(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ja[t%Ja.length]}var gg=Os["storage.keys"].free;function kd({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let C=Sd(),B=aa("storage.keys"),Q=aa("storage.mmkvInstances"),[ve,Se]=Qt(false);dr(()=>{ve&&C&&Se(false)},[ve,C]);let[q,ue]=Qt("all"),te=p!=null&&m!=null,se=te?p:q,Ue=te?m:ue,[Ge,wt]=Qt("all"),Rt=S!=null&&w!=null,ye=Rt?S:Ge,or=Rt?w:wt,[re,_t]=Qt(null),Je=tn(null),kr=tn(0),ne=tn(new Map),gt=Xe((s,h)=>{h?ne.current.set(s,h):ne.current.delete(s)},[]),[$t,Cr]=Qt(0),[Nt,xr]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=hn(false),{storageKeys:Jr,isLoading:Yr,error:Qr,refresh:Ht}=gn(e),Lo=_e(()=>xe.map(s=>({instance:s.instance,id:s.id})),[xe]),{storageKeys:Tr,isLoading:Po,error:Ir,refresh:ar}=Ma(Lo,e),Oo=_e(()=>re?Tr.filter(s=>s.instanceId===re):Tr,[Tr,re]),{storageKeys:qt,isLoading:Zr,error:Fo,refresh:Xr}=Nc(e),N=_e(()=>[...Jr,...Oo,...qt].filter(s=>!ze(s.key)),[Jr,Oo,qt]),ke=_e(()=>{if(!I)return null;let s=ln(I);return N.find(h=>ln(h)===s)??I},[I,N]),Wo=Yr||Po||Zr,eo=Qr||Ir||Fo,Te=Xe(()=>{Ht(),ar(),Xr()},[Ht,ar,Xr]),tt=Xe(s=>s.instanceId?`${s.storageType}-${s.instanceId}-${s.key}`:`${s.storageType}-${s.key}`,[]),_o=Xe(()=>{xr(s=>(s&&Bt(new Set),!s))},[]),rt=Xe((s,h)=>{let U=tt(s);Bt(Z=>{let Qe=new Set(Z);return h?Qe.add(U):Qe.delete(U),Qe})},[tt]),$o=Xe(()=>{Bt(new Set),xr(false),Te()},[Te]),Er=Xe(s=>{s.forEach(h=>n?.(h.key)),Bt(new Set),xr(false)},[n]),jt=Xe(async(s,h)=>{if(!C)throw Se(true),new Error("Editing storage values is a Pro feature.");await Ha(s,h,xe),Te(),Cr(U=>U+1)},[C,xe,Te]),No=Xe(s=>{jt(s,JSON.stringify(!s.value)).catch(h=>{Ie.alert("Couldn't save",h instanceof Error?h.message:String(h))})},[jt]),to=Xe((s,h)=>{if(!C){Se(true);return}Ie.alert("Delete key",`Delete "${s.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await $a([s],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),h?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[C,xe,Te]),Rr=Xe(s=>vn(s,xe),[xe]),Ho=_e(()=>{let s=N,h={valid:s.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:s.filter(G=>G.status==="required_missing").length,issues:s.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:s.length},U=s.filter(G=>G.storageType==="async"),Z=s.filter(G=>G.storageType==="mmkv"),Qe=s.filter(G=>G.storageType==="secure");return{summary:{valid:h.valid,missing:h.missing,issues:h.issues,total:h.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:Z.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Qe.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);dr(()=>{i&&(i.current=N)},[N,i]),dr(()=>{let s,h=Ra(U=>{clearTimeout(s),s=setTimeout(()=>{Ht()},100)});return()=>{clearTimeout(s),h()}},[Ht]),dr(()=>{let s,h=fd(()=>{clearTimeout(s),s=setTimeout(Te,100)});return()=>{clearTimeout(s),h()}},[Te]),dr(()=>{let s,h=Hn(U=>{(re===null||U.instanceId===re)&&(clearTimeout(s),s=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(s),h()}},[ar,re]);let Ut=_e(()=>{let s=N,h=s.filter(Z=>!ze(Z.key)),U=s.filter(Z=>ze(Z.key));return{totalCount:s.length,requiredCount:h.filter(Z=>Z.category==="required").length,missingCount:h.filter(Z=>Z.status==="required_missing").length,wrongValueCount:h.filter(Z=>Z.status==="required_wrong_value").length,wrongTypeCount:h.filter(Z=>Z.status==="required_wrong_type").length,presentRequiredCount:h.filter(Z=>Z.status==="required_present").length,optionalCount:h.filter(Z=>Z.category==="optional").length,mmkvCount:s.filter(Z=>Z.storageType==="mmkv").length,asyncCount:s.filter(Z=>Z.storageType==="async").length,secureCount:s.filter(Z=>Z.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let s=N.filter(V=>!ze(V.key));ye!=="all"&&(s=s.filter(V=>V.storageType===ye));let h=s.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=s.filter(V=>V.status==="required_missing").length,Z=s.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Qe=0,G=0,Be=0,Vt=0;return se==="all"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_present"||V.status==="optional_present")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_present"||V.status==="optional_present")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_present"||V.status==="optional_present")).length,Vt=Qe+G+Be):se==="missing"?(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&V.status==="required_missing").length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&V.status==="required_missing").length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&V.status==="required_missing").length,Vt=Qe+G+Be):se==="issues"&&(Qe=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Vt=Qe+G+Be),{validCount:h,missingCount:U,issuesCount:Z,asyncCount:Qe,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);dr(()=>{x?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[x,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((s,h)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[s.status]||999)-(U[h.status]||999)}),[N]),Kn=_e(()=>Array.from(new Set(N.map(s=>s.key))).sort(),[N]),Le=_e(()=>{let s=ir;if(c&&c.size>0&&(s=s.filter(h=>c.has(h.storageType))),s=s.filter(h=>!Array.from(r).some(U=>h.key.includes(U))),a){let h=a.toLowerCase();s=s.filter(U=>U.key.toLowerCase().includes(h))}switch(se){case"all":s=s.filter(h=>h.status==="required_present"||h.status==="optional_present");break;case"missing":s=s.filter(h=>h.status==="required_missing");break;case"issues":s=s.filter(h=>h.status==="required_wrong_type"||h.status==="required_wrong_value");break}if(ye!=="all"&&(s=s.filter(h=>h.storageType===ye)),f&&f.size>0){let h=s.filter(Z=>f.has(Z.key)),U=s.filter(Z=>!f.has(Z.key));s=[...h,...U]}return s},[ir,se,ye,r,a,re,c,f]),v=_e(()=>Le.slice(0,B),[Le,B]),k=_e(()=>Math.max(0,Le.length-B),[Le.length,B]),z=k>0,j=_e(()=>{let s=Le.filter(h=>!ze(h.key));return{totalCount:Le.length,requiredCount:s.filter(h=>h.category==="required").length,missingCount:s.filter(h=>h.status==="required_missing").length,wrongValueCount:s.filter(h=>h.status==="required_wrong_value").length,wrongTypeCount:s.filter(h=>h.status==="required_wrong_type").length,presentRequiredCount:s.filter(h=>h.status==="required_present").length,optionalCount:s.filter(h=>h.category==="optional").length,mmkvCount:Le.filter(h=>h.storageType==="mmkv").length,asyncCount:Le.filter(h=>h.storageType==="async").length,secureCount:Le.filter(h=>h.storageType==="secure").length,devToolsCount:Le.filter(h=>ze(h.key)).length}},[Le]),Ye=_e(()=>v.filter(s=>nr.has(tt(s))),[v,nr,tt]),Br=Xe(()=>{let s=new Set(v.map(tt));Bt(s)},[v,tt]),Vr=Xe(()=>{Bt(new Set)},[]),Ar=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Di=Ar>=90?"OPTIMAL":Ar>=70?"WARNING":"CRITICAL",Mi=Ar>=90?hr.success:Ar>=70?hr.warning:hr.error;if(ke)return H(l,{style:O.root,children:H(wc,{storageKey:ke,editBlockedReason:Rr(ke),eventCount:y?.[ke.key],onSave:s=>jt(ke,s),onViewHistory:g?()=>g(ke.key):void 0,onDeleteKey:s=>to(s,()=>D?.()),onHideKey:s=>{Er([s]),D?.()},isPinned:f?.has(ke.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(Wo&&N.length===0)return Ee(l,{style:O.emptyState,children:[H(ia,{size:48,color:F.color.textTertiary}),H(u,{style:O.emptyTitle,children:"Loading storage keys..."})]});if(eo)return Ee(l,{style:O.emptyState,children:[H(ia,{size:48,color:hr.error}),H(u,{style:[O.emptyTitle,{color:hr.error}],children:"Error loading storage"}),H(u,{style:O.emptySubtitle,children:eo.message})]});let zi=Ee(wd,{children:[ye==="mmkv"&&xe.length===0&&Ee(l,{style:O.emptyMMKVState,children:[H(u,{style:O.emptyMMKVTitle,children:"No MMKV Instances Detected"}),H(u,{style:O.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),H(u,{style:O.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
1
|
+
"use client";var Uo=Object.defineProperty;var Hi=Object.getOwnPropertyDescriptor;var qi=Object.getOwnPropertyNames;var ji=Object.prototype.hasOwnProperty;var no=(e,t)=>()=>(e&&(t=e(e=0)),t);var Fn=(e,t)=>{for(var r in t)Uo(e,r,{get:t[r],enumerable:true})},Go=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of qi(t))!ji.call(e,n)&&n!==r&&Uo(e,n,{get:()=>t[n],enumerable:!(o=Hi(t,n))||o.enumerable});return e},Ui=(e,t,r)=>(Go(e,t,"default"),r&&Go(r,t,"default"));var Gi=e=>Go(Uo({},"__esModule",{value:true}),e);var Ji,E=no(()=>{"use strict";Ji=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});import{callCapacitorNative as Gt,hasCapacitorPlugin as Yi,installCapacitorBridge as Qi,interceptCapacitor as Zi,isCapacitorNative as Xi}from"@buoy-gg/license/web";function zr(){return Xi()&&Yi(ft)}function At(e,t){let r={action:e,data:t,timestamp:new Date};for(let o of Array.from(Kr))try{o(r)}catch{}}function el(e){return Kr.add(e),tl(),()=>{Kr.delete(e)}}async function lr(e){let{value:t}=await Gt(ft,"get",{key:e});return t??null}async function Jo(){let{keys:e}=await Gt(ft,"keys");return Array.isArray(e)?e:[]}async function ao(e){return Promise.all(e.map(async t=>[t,await lr(t)]))}function tl(){Yo||!zr()||!Qi()||(Yo=true,Zi({plugin:ft,methods:["set","remove","clear"],promise:async(e,t)=>{if(Kr.size===0)return t();let r=typeof e.options.key=="string"?e.options.key:void 0;if(e.method==="clear"){let i=Jo().catch(()=>[]),y=await t();return At("clear",{keys:await i}),y}if(r===void 0)return t();let o=lr(r).catch(()=>null),n=await t(),a=await o;return e.method==="set"?At("setItem",{key:r,value:String(e.options.value??""),prevValue:a}):At("removeItem",{key:r,prevValue:a}),n}}))}function Wn(e,t){if(!e||!t||typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t))return t;let r={...e};for(let[o,n]of Object.entries(t))r[o]=o in r?Wn(r[o],n):n;return r}function $n(e){if(e===null)return null;try{return JSON.parse(e)}catch{return null}}var ft,Kr,Yo,io,lo=no(()=>{"use strict";E();ft="Preferences";Kr=new Set;Yo=false;io={getItem(e){return lr(e)},async setItem(e,t){let r=lr(e).catch(()=>null);await Gt(ft,"set",{key:e,value:String(t)}),At("setItem",{key:e,value:String(t),prevValue:await r})},async removeItem(e){let t=lr(e).catch(()=>null);await Gt(ft,"remove",{key:e}),At("removeItem",{key:e,prevValue:await t})},async clear(){let e=await ao(await Jo()).catch(()=>{});await Gt(ft,"clear"),At("clear",{prevPairs:e?.filter(t=>t[1]!==null)})},getAllKeys(){return Jo()},multiGet(e){return ao(e)},async multiSet(e){let t=ao(e.map(([r])=>r)).catch(()=>{});await Promise.all(e.map(([r,o])=>Gt(ft,"set",{key:r,value:String(o)}))),At("multiSet",{pairs:e.map(([r,o])=>[r,String(o)]),prevPairs:await t})},async multiRemove(e){let t=ao(e).catch(()=>{});await Promise.all(e.map(r=>Gt(ft,"remove",{key:r}))),At("multiRemove",{keys:[...e],prevPairs:await t})},async mergeItem(e,t){let r=await lr(e);await io.setItem(e,JSON.stringify(Wn($n(r),$n(t))))},async multiMerge(e){for(let[t,r]of e)await io.mergeItem(t,r)}}});import rl from"@buoy-gg/shared-ui/web/asyncStorage";var lt,_n,oe,mt=no(()=>{"use strict";E();lo();lt=()=>zr()?io:rl,_n={getItem:e=>lt().getItem(e),setItem:(e,t)=>lt().setItem(e,t),removeItem:e=>lt().removeItem(e),clear:()=>lt().clear(),getAllKeys:()=>lt().getAllKeys(),multiGet:e=>lt().multiGet(e),multiSet:e=>lt().multiSet(e),multiRemove:e=>lt().multiRemove(e),mergeItem:(e,t)=>lt().mergeItem(e,t),multiMerge:e=>lt().multiMerge(e)},oe=_n});var Nn={};Fn(Nn,{asyncStorage:()=>Fe,asyncStorageCaps:()=>Hn,default:()=>qn,readMany:()=>so,removeMany:()=>sr,writeMany:()=>Or});async function so(e){if(typeof Fe.multiGet=="function")return await Fe.multiGet(e);let t=await Fe.getMany(e);return e.map(r=>[r,t[r]??null])}async function Or(e){if(typeof Fe.multiSet=="function")return Fe.multiSet(e);let t={};for(let[r,o]of e)t[r]=o;return Fe.setMany(t)}async function sr(e){return typeof Fe.multiRemove=="function"?Fe.multiRemove(e):Fe.removeMany(e)}var Fe,Hn,qn,Jt=no(()=>{"use strict";E();mt();Fe=oe,Hn={hasLegacyMultiApi:typeof Fe?.multiGet=="function",hasMergeApi:typeof Fe?.mergeItem=="function"};qn=Fe});E();E();mt();Jt();import{classifyPreviewItem as ol,createRestoreScope as nl,emptyRestoreResult as jn,failedRestore as al,isDevToolsStorageKey as we,registerStateSnapshotProvider as il,unionKeys as co,wontApply as Lr}from"@buoy-gg/shared-ui/web";E();mt();Jt();import{isDevToolsStorageKey as ll}from"@buoy-gg/shared-ui/web";async function uo(){let e=await oe.getAllKeys();if(!e||e.length===0)return;let t=e.filter(r=>!ll(r));t.length!==0&&await sr(t)}async function sl(){await oe.clear()}E();E();import{isDevToolsStorageKey as cl}from"@buoy-gg/shared-ui/web";E();function kt(e,t){let r=e.getString(t);if(r!==void 0&&r!=="")return{value:r,type:"string"};let o=e.getNumber(t);if(o!==void 0)return{value:o,type:"number"};let n=e.getBoolean(t);if(n!==void 0)return{value:n,type:"boolean"};if(r==="")return{value:"",type:"string"};let a=e.getBuffer(t);return a!==void 0?{value:`<ArrayBuffer ${a.byteLength} bytes>`,type:"buffer"}:{value:void 0,type:"unknown"}}function dl(e,t){if(e===void 0)return"undefined";if(e===null)return"null";switch(t){case"string":return`"${e}"`;case"number":return String(e);case"boolean":return e?"true":"false";case"buffer":return e;case"unknown":return"unknown";default:return String(e)}}function Qo(e,t){return e===t}var ul=class{constructor(){this.listeners=[];this.instances=new Map;this.ignoredKeys=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"])}shouldIgnoreKey(e){if(cl(e)||this.ignoredKeys.has(e))return true;for(let t of this.ignoredKeys)if(e.startsWith(t))return true;return false}emit(e){this.listeners.length!==0&&this.listeners.forEach(t=>{try{t(e)}catch{}})}addInstance(e,t){if(this.instances.has(t))return;let r,o=new Map;try{for(let n of e.getAllKeys()??[])this.shouldIgnoreKey(n)||o.set(n,kt(e,n).value)}catch{}if(typeof e.addOnValueChangedListener=="function")try{r=e.addOnValueChangedListener(n=>{if(this.shouldIgnoreKey(n))return;let{value:a,type:i}=kt(e,n),y=o.get(n);if(i==="unknown"||a===void 0){o.delete(n);let d={action:"delete",timestamp:new Date,instanceId:t,data:{key:n,prevValue:y,success:true}};this.emit(d)}else{o.set(n,a);let d={action:i==="string"?"set.string":i==="number"?"set.number":i==="boolean"?"set.boolean":i==="buffer"?"set.buffer":"set.string",timestamp:new Date,instanceId:t,data:{key:n,value:a,prevValue:y,valueType:i,success:true}};this.emit(d)}})}catch{}this.instances.set(t,{instance:e,instanceId:t,originalMethods:{},nativeListenerUnsubscribe:r,lastKnownValues:o})}removeInstance(e){let t=this.instances.get(e);if(!t)return;let{nativeListenerUnsubscribe:r}=t;try{typeof r=="function"?r():typeof r?.remove=="function"&&r.remove()}catch{}this.instances.delete(e)}removeAllInstances(){Array.from(this.instances.keys()).forEach(e=>this.removeInstance(e))}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}hasInstance(e){return this.instances.has(e)}getMonitoredInstances(){return Array.from(this.instances.keys())}get instanceCount(){return this.instances.size}get listenerCount(){return this.listeners.length}get isActive(){return this.instances.size>0}},Zo=new ul;var Un=e=>Zo.addListener(e);var yl=class{constructor(){this.instances=new Map}register(e,t,r){let o={id:e,instance:t,encrypted:r?.encrypted??false,readOnly:t.isReadOnly??false};this.instances.set(e,o)}unregister(e){this.instances.delete(e)}get(e){return this.instances.get(e)}getAll(){return Array.from(this.instances.values())}has(e){return this.instances.has(e)}count(){return this.instances.size}},Le=new yl;function Gn(e,t,r){Le.register(e,t,r),Zo.addInstance(t,e)}function Jn(e){Zo.removeInstance(e),Le.unregister(e)}E();var gl=class{constructor(){this.module=null;this.keys=new Map;this.listeners=new Set}register(e,t){let r=this.signature();this.module=e;for(let o of t){let n=typeof o=="string"?{key:o,options:{}}:{key:o.key,description:o.description,options:{keychainService:o.keychainService,requireAuthentication:o.requireAuthentication,authenticationPrompt:o.authenticationPrompt}};this.keys.set(n.key,n)}this.signature()!==r&&this.notify()}unregister(e){this.keys.delete(e)&&this.notify()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}signature(){return JSON.stringify(Array.from(this.keys.values()))}notify(){this.listeners.forEach(e=>{try{e()}catch{}})}getModule(){return this.module}getAll(){return Array.from(this.keys.values())}count(){return this.keys.size}async deleteValue(e){let t=this.keys.get(e);!this.module||!t||await this.module.deleteItemAsync(e,t.options)}async setValue(e,t){let r=this.keys.get(e);if(!this.module)throw new Error("No SecureStore module is registered");if(!r)throw new Error(`SecureStore key "${e}" is not registered`);if(r.options.requireAuthentication)throw new Error(`SecureStore key "${e}" is biometric-protected \u2014 DevTools never writes it`);await this.module.setItemAsync(e,t,r.options)}},ee=new gl;function pl(e,t){ee.register(e,t)}function fl(e){ee.unregister(e)}function Yn(e,t){e.remove?e.remove(t):e.delete?.(t)}function ml(){return{canCapture:true,canRestore:true}}async function Qn(){let e=[],t=(await oe.getAllKeys()).filter(i=>!we(i)),r=(await so(t)).filter(i=>i[1]!==null),o={};for(let{id:i,instance:y}of Le.getAll().filter(({id:d})=>!we(d)))try{o[i]=y.getAllKeys().filter(d=>!we(d)).map(d=>{let{value:p,type:s}=kt(y,d);return s==="buffer"&&e.push(`mmkv "${i}"/"${d}": ArrayBuffer value not capturable`),{key:d,value:p,valueType:s}})}catch{e.push(`mmkv "${i}": unreadable, captured without entries`),o[i]=[]}let n={},a=ee.getModule();for(let{key:i,options:y}of ee.getAll().filter(({key:d})=>!we(d))){if(y.requireAuthentication){e.push(`secure "${i}": biometric-protected, not capturable`);continue}let d=null;if(a)try{d=await a.getItemAsync(i,y)}catch{e.push(`secure "${i}": unreadable, captured as unset`)}n[i]=d}return{data:{async:r,mmkv:o,secure:n},warnings:e}}async function hl(){let{data:e,warnings:t}=await Qn();return{data:e,warnings:t}}async function bl(e,t){let r=e,o=nl(t),n=o.touch,a=jn();if(!r)return al("empty storage snapshot");try{let d=(r.async??[]).filter(([g])=>!we(g)&&n(`async:${g}`)),p=new Set(d.map(([g])=>g)),s=(await oe.getAllKeys()).filter(g=>!we(g)).filter(g=>!p.has(g)&&n(`async:${g}`));o.countExcluded((r.async??[]).length-d.length),s.length>0&&await sr(s),d.length>0&&await Or(d),a.applied+=d.length+s.length}catch(d){a.ok=false,a.warnings.push(`asyncstorage restore failed: ${String(d)}`)}for(let[d,p]of Object.entries(r.mmkv??{})){if(we(d))continue;let s=Le.get(d);if(!s){a.skipped.push({id:`mmkv:${d}`,reason:"instance not registered"});continue}if(s.instance.isReadOnly){a.skipped.push({id:`mmkv:${d}`,reason:"instance registered read-only"});continue}let{instance:g}=s;try{let f=new Set(p.map(m=>m.key)),C=g.getAllKeys().filter(m=>!we(m));for(let m of C)o.allows(`mmkv:${d}/${m}`)&&(f.has(m)||(Yn(g,m),a.applied+=1));for(let m of p)if(!we(m.key)&&n(`mmkv:${d}/${m.key}`)){if(m.valueType==="buffer"){a.skipped.push({id:`mmkv:${d}/${m.key}`,reason:"ArrayBuffer values cannot be restored"});continue}g.set(m.key,m.value),a.applied+=1}}catch(f){a.ok=false,a.warnings.push(`mmkv "${d}" restore failed: ${String(f)}`)}}let i=r.secure??{};for(let{key:d,options:p}of ee.getAll().filter(({key:s})=>!we(s)))if(o.allows(`secure:${d}`)){if(p.requireAuthentication){d in i&&a.skipped.push({id:`secure:${d}`,reason:"biometric-protected keys are never written"});continue}try{if(d in i){let s=i[d];s===null?await ee.deleteValue(d):await ee.setValue(d,s)}else await ee.deleteValue(d);a.applied+=1}catch(s){a.ok=false,a.warnings.push(`secure "${d}" restore failed: ${String(s)}`)}}for(let d of Object.keys(i))we(d)||n(`secure:${d}`)&&(ee.getAll().filter(({key:p})=>!we(p)).some(p=>p.key===d)||a.skipped.push({id:`secure:${d}`,reason:"key no longer registered with registerSecureStoreKeys"}));let y=o.excludedWarning("item(s)");return y&&a.warnings.push(y),a}async function vl(){let e=jn();try{await uo(),e.applied+=1}catch(t){e.ok=false,e.warnings.push(`asyncstorage clear failed: ${String(t)}`)}for(let{id:t,instance:r}of Le.getAll().filter(({id:o})=>!we(o))){if(r.isReadOnly){e.skipped.push({id:`mmkv:${t}`,reason:"instance registered read-only"});continue}try{for(let o of r.getAllKeys().filter(n=>!we(n)))Yn(r,o),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`mmkv "${t}" clear failed: ${String(o)}`)}}for(let{key:t,options:r}of ee.getAll().filter(({key:o})=>!we(o))){if(r.requireAuthentication){e.skipped.push({id:`secure:${t}`,reason:"biometric-protected keys are never written"});continue}try{await ee.deleteValue(t),e.applied+=1}catch(o){e.ok=false,e.warnings.push(`secure "${t}" clear failed: ${String(o)}`)}}return e}var Sl=256*1024;function Xo(e,t,r,o,n,a){return ol({key:e,label:t,oldValue:r,newValue:o,inOld:n,inNew:a},{equal:Object.is,tooLarge:i=>typeof i=="string"&&i.length>Sl,tooLargeReason:"value too large to render a diff \u2014 restore still applies it"})}async function wl(e,t){let r=e??{async:[],mmkv:{},secure:{}},o=t===void 0,n=o?(await Qn()).data:t??{async:[],mmkv:{},secure:{}},a=[],i=[],y=new Map(n.async??[]),d=new Map(r.async??[]);for(let f of co(y,d))we(f)||a.push(Xo(`async:${f}`,f,y.get(f),d.get(f),y.has(f),d.has(f)));for(let f of co(n.mmkv,r.mmkv)){if(we(f))continue;let C=o?Le.get(f):null,m=o&&!C,b=o&&C?.instance.isReadOnly===true,S=new Map((n.mmkv?.[f]??[]).map(T=>[T.key,T])),w=new Map((r.mmkv?.[f]??[]).map(T=>[T.key,T]));for(let T of co(S,w)){if(we(T))continue;let I=`mmkv:${f}/${T}`,R=`${f} \xB7 ${T}`,D=S.get(T),x=w.get(T),B=Xo(I,R,D?.value,x?.value,S.has(T),w.has(T));m?B=Lr(B,"MMKV instance not registered"):b?B=Lr(B,"MMKV instance registered read-only"):(x?.valueType==="buffer"||D?.valueType==="buffer")&&(B=Lr(B,"ArrayBuffer values cannot be restored")),a.push(B)}}let p=n.secure??{},s=r.secure??{},g=o?new Map(ee.getAll().filter(({key:f})=>!we(f)).map(f=>[f.key,f])):null;for(let f of co(p,s)){if(we(f))continue;let C=Xo(`secure:${f}`,f,p[f],s[f],f in p,f in s);if(o){let m=g?.get(f);m?m.options.requireAuthentication&&(C=Lr(C,"biometric-protected keys are never written")):C=Lr(C,"key no longer registered with registerSecureStoreKeys")}a.push(C)}return{items:a,notes:i}}il({id:"storage",label:"Storage",status:ml,capture:hl,restore:bl,clear:vl,previewItems:wl});E();import{StorageIcon as kl}from"@buoy-gg/floating-tools-core/web";import{createToolFactory as Cl,defineToolPreset as xl}from"@buoy-gg/shared-ui/web";E();import{useState as ot,useCallback as De,useEffect as en,useRef as Zn,useMemo as st}from"react";var Xn={};Fn(Xn,{AccessibilityInfo:()=>Rl,ActivityIndicator:()=>Es,Alert:()=>Ie,Animated:()=>Yt,AppRegistry:()=>Vl,AppState:()=>Al,Appearance:()=>Bl,BackHandler:()=>Dl,Button:()=>Rs,CheckBox:()=>Ul,Clipboard:()=>Ml,DeviceEventEmitter:()=>ss,Dimensions:()=>zl,Easing:()=>Pr,FlatList:()=>tn,I18nManager:()=>Kl,Image:()=>Gl,ImageBackground:()=>Jl,InteractionManager:()=>Ll,Keyboard:()=>Ol,KeyboardAvoidingView:()=>Yl,LayoutAnimation:()=>Pl,Linking:()=>Fl,LogBox:()=>ls,Modal:()=>aa,NativeEventEmitter:()=>Wl,NativeModules:()=>El,PanResponder:()=>$l,Picker:()=>Ql,PixelRatio:()=>_l,Platform:()=>Nl,Pressable:()=>Ts,ProgressBar:()=>Zl,RefreshControl:()=>Xl,SafeAreaView:()=>es,ScrollView:()=>Wr,SectionList:()=>ts,Share:()=>Hl,StatusBar:()=>rs,StyleSheet:()=>pe,Switch:()=>Is,Text:()=>u,TextInput:()=>ks,Touchable:()=>os,TouchableHighlight:()=>Cs,TouchableNativeFeedback:()=>ns,TouchableOpacity:()=>O,TouchableWithoutFeedback:()=>xs,UIManager:()=>ql,Vibration:()=>jl,View:()=>l,VirtualizedList:()=>as,YellowBox:()=>is,findNodeHandle:()=>Bs,unstable_createElement:()=>Il,useColorScheme:()=>cs,useLocaleContext:()=>ds,useWindowDimensions:()=>us});E();Ui(Xn,Tl);import*as Tl from"react-native-web";import{unstable_createElement as Il,NativeModules as El,AccessibilityInfo as Rl,Appearance as Bl,AppRegistry as Vl,AppState as Al,BackHandler as Dl,Clipboard as Ml,Dimensions as zl,Easing as Pr,I18nManager as Kl,Keyboard as Ol,InteractionManager as Ll,LayoutAnimation as Pl,Linking as Fl,NativeEventEmitter as Wl,PanResponder as $l,PixelRatio as _l,Platform as Nl,Share as Hl,UIManager as ql,Vibration as jl,CheckBox as Ul,FlatList as tn,Image as Gl,ImageBackground as Jl,KeyboardAvoidingView as Yl,Picker as Ql,ProgressBar as Zl,RefreshControl as Xl,SafeAreaView as es,SectionList as ts,StatusBar as rs,Touchable as os,TouchableNativeFeedback as ns,VirtualizedList as as,YellowBox as is,LogBox as ls,DeviceEventEmitter as ss,useColorScheme as cs,useLocaleContext as ds,useWindowDimensions as us}from"react-native-web";import*as We from"react-native-web";import{createElement as rn,forwardRef as ea,useCallback as ys,useRef as gs}from"react";E();import{useEffect as ps,useState as fs}from"react";import{createPortal as ms}from"react-dom";E();var hs='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as bs}from"react/jsx-runtime";var Fr=Symbol.for("@buoy-gg/portal-host"),ta=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function ra(){let e=document;if(e[Fr])return e[Fr].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:hs});let r=()=>{let s=document.fullscreenElement,g=s&&s.tagName!=="CANVAS"?s:document.body;t.parentElement!==g&&g.appendChild(t)},o=new Map,n=s=>{(!t.contains(s.target)||!ta(s.target))&&o.set(s.code||s.key,{key:s.key,code:s.code,location:s.location,keyCode:s.keyCode,which:s.which,altKey:s.altKey,ctrlKey:s.ctrlKey,metaKey:s.metaKey,shiftKey:s.shiftKey})},a=s=>{o.delete(s.code||s.key)},i=()=>o.clear(),y=()=>{let s=[...o.values()];o.clear();for(let g of s)document.dispatchEvent(new KeyboardEvent("keyup",{...g,bubbles:true}))},d=s=>{ta(s.target)&&s.stopPropagation()},p=s=>s.stopPropagation();return r(),document.addEventListener("fullscreenchange",r),document.addEventListener("keydown",n,true),document.addEventListener("keyup",a,true),window.addEventListener("blur",i),t.addEventListener("focusin",y),t.addEventListener("keydown",d),t.addEventListener("keyup",d),t.addEventListener("keypress",d),t.addEventListener("wheel",p,{passive:true}),e[Fr]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",r),document.removeEventListener("keydown",n,true),document.removeEventListener("keyup",a,true),window.removeEventListener("blur",i),t.remove(),delete e[Fr]}},t}function vs({children:e}){let[t,r]=fs(null);return ps(()=>{let o=ra(),n=document[Fr];return n.users++,r(o),()=>{--n.users===0&&n.dispose()}},[]),t?ms(bs("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}var cr=We,Ss=["shadowColor","shadowOffset","shadowOpacity","shadowRadius","textShadowColor","textShadowOffset","textShadowRadius"],dr=e=>typeof e=="number"?`${e}px`:e;function on(e){if(Array.isArray(e)){let g=e.map(on);return g.some((f,C)=>f!==e[C])?g:e}if(!e||typeof e!="object"||!Ss.some(g=>e[g]!=null))return e;let{shadowColor:t,shadowOffset:r,shadowOpacity:o,shadowRadius:n,textShadowColor:a,textShadowOffset:i,textShadowRadius:y,...d}=e;if(t!=null||r!=null||o!=null||n!=null){let g=t??"black",f=o==null?g:`color-mix(in srgb, ${g} ${Math.min(o,1)*100}%, transparent)`,C=`${dr(r?.width??0)} ${dr(r?.height??0)} ${dr(n??0)} ${f}`;d.boxShadow=typeof d.boxShadow=="string"?`${d.boxShadow}, ${C}`:d.boxShadow??C}let{width:p=0,height:s=0}=i??{};if(a&&(p||s||y)){let g=`${dr(p)} ${dr(s)} ${dr(y??0)} ${a}`;d.textShadow=d.textShadow?`${d.textShadow}, ${g}`:g}return d}var ws=cr.StyleSheet.create({auto:{pointerEvents:"auto"},none:{pointerEvents:"none"},"box-none":{pointerEvents:"box-none"},"box-only":{pointerEvents:"box-only"}});function oa(e,t){if(typeof e=="function")return o=>oa(e(o),t);let r=on(e);return t?[r,ws[t]]:r}var pe={...cr.StyleSheet,create:e=>cr.StyleSheet.create(Object.fromEntries(Object.entries(e).map(([t,r])=>[t,on(r)])))};function nt(e){let t=ea((o,n)=>{let{accessibilityState:a,accessibilityValue:i,pointerEvents:y,...d}=o;for(let s of["busy","checked","disabled","expanded","selected"])a?.[s]!==void 0&&d[`aria-${s}`]===void 0&&(d[`aria-${s}`]=a[s]);for(let[s,g]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))i?.[s]!==void 0&&d[`aria-${g}`]===void 0&&(d[`aria-${g}`]=i[s]);let p=oa(d.style,y);return p!==d.style&&(d.style=p),rn(e,{...d,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var l=nt(We.View),u=nt(We.Text),Yt={...cr.Animated,View:cr.Animated.createAnimatedComponent(l),Text:cr.Animated.createAnimatedComponent(u)},ks=nt(We.TextInput),O=nt(We.TouchableOpacity),Cs=nt(We.TouchableHighlight),xs=nt(We.TouchableWithoutFeedback),Ts=nt(We.Pressable),Wr=nt(We.ScrollView),na=ea((e,t)=>{let r=gs(null),o=ys(n=>{if(n){let a=n;for(;a.parentElement&&a.parentElement!==document.body;)a=a.parentElement;a.parentElement===document.body&&(r.current=a,Object.assign(a.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),ra().appendChild(a))}else r.current&&(document.body.appendChild(r.current),r.current=null);typeof t=="function"?t(n):t&&(t.current=n)},[t]);return rn(vs,null,rn(We.Modal,{...e,ref:o}))});na.displayName="Modal";var aa=nt(na),Is=nt(We.Switch),Es=nt(We.ActivityIndicator),Rs=nt(We.Button),Bs=We.findNodeHandle,Ie={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let a=document.createElement("h2");if(a.textContent=e,a.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(a),t){let p=document.createElement("p");p.textContent=t,p.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(p)}let i=document.createElement("div");i.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let y=r?.length?r:[{text:"OK"}],d=()=>{n.close?.(),n.remove()};for(let p of y){let s=document.createElement("button");s.type="button",s.textContent=p.text??"OK",s.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${p.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,s.onclick=()=>{d(),p.onPress?.()},i.appendChild(s)}n.addEventListener("cancel",p=>{p.preventDefault(),o?.cancelable!==false&&(d(),o?.onDismiss?.())}),n.appendChild(i),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}};mt();import{JsModal as Vs,ModalHeader as Me,TabSelector as As,parseValue as Ds,devToolsStorageKeys as ur,macOSColors as Ms,night as $e,ToolEmptyState as zs,Filter as Ks,RefreshCw as Os,Search as Ls,SearchBar as Ps,PowerToggleButton as Fs,ToolbarCopyButton as ia,ToolbarClearButton as Ws,truncatePayload as yo,TickProvider as la,useLimit as $s,TIER_LIMITS as _s,windowDragProps as Ns,usePersistedState as go,monoFont as po}from"@buoy-gg/shared-ui/web";E();E();E();lo();var ae=zr()?{async:"Preferences",asyncFull:"Capacitor Preferences",mmkv:"Web",secure:"Secure",hasSecure:false}:{async:"Local",asyncFull:"localStorage",mmkv:"Session",secure:"Secure",hasSecure:false};import{useMemo as _e,useCallback as Xe,useState as Qt,useEffect as yr,useRef as nn}from"react";import{absoluteFill as sa,useLimit as ca,TIER_LIMITS as Hs,monoFont as $r}from"@buoy-gg/shared-ui/web";import{Database as da,Zap as qs,ProBadge as ua,ProUpgradeModal as js,ToolEmptyState as Us,resolveListEmptyState as Gs}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as ze}from"@buoy-gg/shared-ui/web";E();import{useCallback as ya,useState as Js}from"react";E();import{memo as Ys}from"react";import{macOSColors as fe,night as ce,CompactRow as Qs,TypeBadge as ga,HardDrive as Zs,Square as Xs,CheckSquare as ec,Edit3 as tc,EyeOff as rc,Pin as pa,Trash2 as oc,ExpandedInfoRow as an,PillBadge as _r,monoFont as gr}from"@buoy-gg/shared-ui/web";E();import{gameUIColors as fo}from"@buoy-gg/shared-ui/web";var nc=new Set(["sessionStorage","localStorage"]);function ln(e,t){switch(e){case"mmkv":return t&&!nc.has(t)?"MMKV":ae.mmkv;case"async":return ae.async;case"secure":return"Secure";default:return e}}function fa(e){switch(e){case"mmkv":return fo.info;case"async":return fo.warning;case"secure":return fo.success;default:return fo.muted}}E();function Dt(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let t=typeof e;return t==="object"?"object":t==="boolean"?"boolean":t==="number"?"number":t==="string"?"string":"unknown"}function ma(e){if(typeof e!="string")return e;let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(e)}catch{return e}}var ac=40;function ic(e){switch(typeof e){case"boolean":return e?"true":"false";case"number":return Number.isFinite(e)?String(e):null;case"string":return e.length===0?'""':e.length>ac?null:`"${e.replace(/\s+/g," ")}"`;default:return null}}function lc(e){let t=Dt(e),r=ic(e);return r?`${t} \xB7 ${r}`:t}import{DataViewer as sc}from"@buoy-gg/shared-ui/web/dataViewer";import{Fragment as cc,jsx as W,jsxs as Ve}from"react/jsx-runtime";var ha=[fe.semantic.info,fe.semantic.success,fe.semantic.warning,fe.semantic.debug,"#FF6B9D","#00D9FF"];function ba(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return ha[t%ha.length]}var va=e=>{switch(e){case"required_present":return{label:"Valid",color:fe.semantic.success,sublabel:"Required"};case"required_missing":return{label:"Missing",color:fe.semantic.error,sublabel:"Required"};case"required_wrong_value":return{label:"Wrong",color:fe.semantic.warning,sublabel:"Invalid value"};case"required_wrong_type":return{label:"Type Error",color:fe.semantic.info,sublabel:"Wrong type"};case"optional_present":return{label:"Set",color:fe.semantic.debug,sublabel:"Optional"};default:return{label:"Set",color:fe.text.secondary,sublabel:String(e)}}},dc=e=>e==null?"undefined":typeof e=="string"?e:JSON.stringify(e),uc=Ys(function({storageKey:e,isExpanded:t,onPress:r,isSelectMode:o=false,isSelected:n=false,onSelectionChange:a,eventCount:i,onViewHistory:y,onHideKey:d,isPinned:p=false,onTogglePin:s,onEditKey:g,onToggleKey:f,onDeleteKey:C,editBlockedReason:m}){let b=g!=null&&m==null,S=va(e.status),w=e.value!==void 0&&e.value!==null,T=w&&typeof e.value=="boolean",I=e.key,R=ln(e.storageType,e.instanceId),D=ma(e.value),x=D!==null&&typeof D=="object",B=Ve(l,{style:$.expandedContainer,children:[W(an,{label:"Storage",children:W(_r,{color:sn(e.storageType),children:R})}),e.storageType==="mmkv"&&e.instanceId&&W(an,{label:"Instance",children:W(_r,{color:ba(e.instanceId),icon:W(Zs,{size:9,color:ba(e.instanceId)}),children:e.instanceId})}),i!=null&&i>0&&Ve(an,{label:"Updates",children:[W(_r,{color:fe.semantic.warning,children:String(i)}),i>1&&y&&W(O,{onPress:y,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:$.viewHistoryButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:W(u,{style:$.viewHistoryText,children:"view history \u2192"})})]}),x?W(l,{style:$.dataViewerContainer,children:W(sc,{data:D,title:"",showTypeFilter:true,rawMode:true,initialExpanded:true})}):Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Value:"}),W(u,{style:$.expandedValue,numberOfLines:3,children:dc(e.value)||"undefined"})]}),e.status==="required_wrong_type"&&e.expectedType&&Ve(cc,{children:[Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Type:"}),W(ga,{type:Dt(e.value)})]}),Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Expected:"}),W(ga,{type:e.expectedType})]})]}),e.status==="required_wrong_value"&&e.expectedValue&&Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Expected:"}),W(u,{style:$.expandedExpected,children:String(e.expectedValue)})]}),e.description?Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Info:"}),W(u,{style:$.expandedDescription,children:e.description})]}):null,m?Ve(l,{style:$.expandedRow,children:[W(u,{style:$.expandedLabel,children:"Edit:"}),W(u,{style:$.expandedDescription,children:m})]}):null,s||d||b?Ve(l,{style:$.actionRow,children:[b?Ve(O,{style:$.editButton,testID:"buoy-storage-key-edit",accessibilityLabel:T&&f?`Toggle ${e.key}`:`Edit ${e.key}`,accessibilityRole:"button",onPress:()=>T&&f?f(e):g?.(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(tc,{size:13,color:ce.color.onAccent}),W(u,{style:$.editButtonText,children:T&&f?"Toggle":"Edit"})]}):null,s?Ve(O,{style:[$.actionChip,p&&$.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:p?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>s(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(pa,{size:12,active:p,color:ce.color.accent}),W(u,{style:[$.actionChipText,{color:ce.color.accent}],children:p?"Unpin":"Pin to top"})]}):null,d?Ve(O,{style:$.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>d(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(rc,{size:12,color:ce.color.warning}),W(u,{style:[$.actionChipText,{color:ce.color.warning}],children:"Hide from list"})]}):null,b&&C?Ve(O,{style:[$.actionChip,$.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>C(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[W(oc,{size:12,color:ce.color.danger}),W(u,{style:[$.actionChipText,{color:ce.color.danger}],children:"Delete key"})]}):null]}):null]}),Q=()=>{a?.(e,!n)},ve=o?W(O,{onPress:Q,testID:`buoy-storage-checkbox-${e.storageType}-${e.key}`,accessibilityLabel:`Select ${e.key}`,accessibilityRole:"checkbox",accessibilityState:{checked:n},style:$.checkboxContainer,hitSlop:{top:8,bottom:8,left:8,right:8},children:n?W(ec,{size:18,color:ce.color.accent}):W(Xs,{size:18,color:ce.color.textTertiary})}):null;return Ve(l,{style:[$.rowContainer,n&&$.rowContainerSelected],children:[ve,Ve(l,{style:$.compactRowWrapper,children:[W(Qs,{statusDotColor:S.color,statusLabel:S.label,statusSublabel:S.sublabel,primaryText:I,secondaryText:w?T?Dt(e.value):lc(e.value):void 0,secondaryAccessory:T?W(_r,{size:"sm",color:e.value?fe.semantic.success:fe.semantic.error,children:e.value?"true":"false"}):void 0,expandedContent:B,isExpanded:t,expandedGlowColor:S.color,customBadge:Ve(l,{style:$.badgeRow,children:[p&&W(pa,{size:12,active:true,color:ce.color.accent}),W(_r,{color:sn(e.storageType),children:R})]}),showChevron:!o,onPress:o?Q:r?()=>r(e):void 0,testID:`buoy-storage-row-${e.storageType}-${e.key}`,accessibilityLabel:`${R} ${e.key}`}),i!=null&&i>1&&W(l,{style:[$.absCountBadge,t&&$.absCountBadgeExpanded,{backgroundColor:fe.semantic.warning+"22",borderColor:fe.semantic.warning+"55"}],pointerEvents:"none",children:W(u,{style:[$.absCountText,{color:fe.semantic.warning}],children:String(i)})})]})]})}),sn=e=>{switch(e){case"mmkv":return fe.semantic.info;case"async":return fe.semantic.warning;case"secure":return fe.semantic.success;default:return fe.text.secondary}},$=pe.create({badgeRow:{flexDirection:"row",alignItems:"center",gap:6},expandedContainer:{gap:8},expandedRow:{flexDirection:"row",alignItems:"center",gap:10},expandedLabel:{fontSize:10,color:ce.color.textTertiary,fontWeight:"600",minWidth:70,fontFamily:gr},expandedValue:{fontSize:11,color:ce.color.textSecondary,fontFamily:gr,flex:1},expandedExpected:{fontSize:11,color:fe.semantic.warning,fontFamily:gr,flex:1},expandedDescription:{fontSize:11,color:ce.color.textSecondary,flex:1},dataViewerContainer:{marginTop:6,marginBottom:6,backgroundColor:ce.color.bg,borderRadius:6,borderWidth:1,borderColor:ce.color.border,padding:6},rowContainer:{flexDirection:"row",alignItems:"flex-start"},rowContainerSelected:{backgroundColor:ce.color.accentSoft,borderRadius:8},checkboxContainer:{paddingLeft:4,paddingRight:8,paddingTop:10,alignSelf:"flex-start"},compactRowWrapper:{flex:1},absCountBadge:{position:"absolute",top:4,right:10,paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1,zIndex:1},absCountBadgeExpanded:{top:13},absCountText:{fontSize:9,fontWeight:"700",fontFamily:gr},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,marginTop:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:ce.color.surface,borderWidth:1,borderColor:ce.color.border},dangerChip:{borderColor:ce.color.danger+"55"},actionChipActive:{backgroundColor:ce.color.accentSoft,borderColor:ce.color.accentBorderStrong},editButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:8,paddingHorizontal:14,borderRadius:8,backgroundColor:ce.color.accent},editButtonText:{color:ce.color.onAccent,fontSize:12,fontWeight:"700"},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:gr},viewHistoryButton:{marginLeft:4},viewHistoryText:{fontSize:10,fontWeight:"600",fontFamily:gr,color:ce.color.accent}});import{SectionHeader as pr,night as cn}from"@buoy-gg/shared-ui/web";import{jsx as Ct,jsxs as mo}from"react/jsx-runtime";function dn(e){return e.instanceId?`${e.storageType}-${e.instanceId}-${e.key}`:`${e.storageType}-${e.key}`}function Sa({title:e,count:t,keys:r,emptyMessage:o,headerColor:n,isSelectMode:a=false,selectedKeys:i=new Set,onSelectionChange:y,eventCountByKey:d,onViewHistory:p,onHideKey:s,pinnedKeys:g,onTogglePin:f,onEditKey:C,onToggleKey:m,onDeleteKey:b,editBlockedFor:S,onRowRef:w,onOpenKey:T}){let I=ya(B=>dn(B),[]),[R,D]=Js(null),x=ya(B=>{if(!B||typeof B.key!="string")return;if(T){T(B);return}let Q=I(B);D(ve=>ve===Q?null:Q)},[I,T]);return r.length===0&&e==="Required Keys"?mo(l,{style:Nr.sectionContainer,children:[mo(pr,{children:[Ct(pr.Title,{children:e}),Ct(pr.Badge,{count:0,color:n})]}),Ct(l,{style:Nr.emptySection,children:Ct(u,{style:Nr.emptySectionText,children:o})})]}):r.length===0?null:mo(l,{style:Nr.sectionContainer,children:[e?mo(pr,{children:[Ct(pr.Title,{children:e}),t>=0&&Ct(pr.Badge,{count:t,color:n})]}):null,Ct(l,{style:Nr.sectionContent,children:r.map(B=>{let Q=I(B);return Ct(l,{ref:w?ve=>w(Q,ve):void 0,collapsable:false,children:Ct(uc,{storageKey:B,isExpanded:!a&&R===Q,onPress:x,isSelectMode:a,isSelected:i.has(Q),onSelectionChange:y,eventCount:d?.[B.key],onViewHistory:p?()=>p(B.key):void 0,onHideKey:s,onEditKey:C,onToggleKey:m,onDeleteKey:b,editBlockedReason:S?.(B),isPinned:g?.has(B.key),onTogglePin:f})},Q)})})]})}var Nr=pe.create({sectionContainer:{gap:8},sectionContent:{},emptySection:{backgroundColor:cn.color.surface,borderRadius:6,padding:16,borderWidth:1,borderColor:cn.color.border,alignItems:"center"},emptySectionText:{color:cn.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{useCallback as yc,useMemo as wa,useRef as ka,useState as Ca}from"react";import{EyeOff as gc,FileJson as pc,HardDrive as fc,night as J,macOSColors as fr,Pin as mc,PillBadge as ho,Trash2 as hc,TypeBadge as bc,useSafeAreaInsets as vc,monoFont as Mt}from"@buoy-gg/shared-ui/web";import{DataViewer as Sc,LiveExplorer as wc,ValueEditModal as kc,updateNestedDataByPath as Cc,deleteNestedDataByPath as xc}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as L,jsxs as me}from"react/jsx-runtime";var Tc=300,ht="buoy-storage-detail";function Ic(e){let t=r=>r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length===0?`${ht}-explorer-root`:`${ht}-explorer-${e.map(t).filter(Boolean).join("-")}`}var xa=[fr.semantic.info,fr.semantic.success,fr.semantic.warning,fr.semantic.debug,"#FF6B9D","#00D9FF"];function Ta(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return xa[t%xa.length]}function Ec({storageKey:e,editBlockedReason:t,eventCount:r,onSave:o,onViewHistory:n,onDeleteKey:a,onHideKey:i,isPinned:y=false,onTogglePin:d,applySafeAreaInset:p}){let s=vc(),g=p?s.bottom:0,f=t==null,C=va(e.status),m=ln(e.storageType,e.instanceId),[b,S]=Ca(false),[w,T]=Ca(0),I=ka(null),R=wa(()=>ma(e.value),[e.value]),D=typeof e.value=="string"?e.value:JSON.stringify(e.value);I.current&&I.current.raw===D&&(I.current=null);let x=I.current?I.current.value:R,B=yc(q=>{let ue=typeof q=="string"?q:JSON.stringify(q);I.current={raw:ue,value:q},o(ue).catch(te=>{I.current=null,Ie.alert("Couldn't save",te instanceof Error?te.message:String(te))})},[o]),Q=ka(x);Q.current=x;let ve=wa(()=>{if(f)return{update:(q,ue)=>{let te=q.length===0?ue:Cc(Q.current,q,ue);B(te)},remove:q=>{q.length!==0&&B(xc(Q.current,q))}}},[f,B]),Se=d||i||f&&a;return me(l,{style:A.screen,children:[L(l,{testID:`${ht}-key`,accessibilityLabel:e.key}),me(Wr,{testID:`${ht}-scroll`,style:A.scroll,contentContainerStyle:[A.scrollContent,{paddingBottom:24+g}],keyboardShouldPersistTaps:"handled",children:[L(l,{style:A.section,children:me(l,{style:A.editorContainer,children:[me(l,{style:A.sectionHeaderRow,children:[L(u,{testID:`${ht}-editor-header`,style:A.sectionHeaderAccentText,children:"Value Editor"}),f?me(O,{onPress:()=>S(true),testID:`${ht}-raw`,accessibilityRole:"button",accessibilityLabel:"Edit raw JSON",style:A.rawButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:[L(pc,{size:13,color:J.color.accent}),L(u,{style:A.rawButtonText,children:"Raw"})]}):null]}),me(l,{style:A.sectionBody,children:[L(wc,{editable:f,label:"Value",value:x,defaultExpanded:["Value"],writer:ve,dataVersion:w,testIDForPath:Ic,debounceMs:Tc}),f?L(u,{style:A.editorHint,children:"Edits write to the device as you make them \u2014 undo lives in the key's history."}):L(u,{style:A.blockedText,testID:`${ht}-edit-blocked`,children:t})]})]})}),L(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[L(u,{style:A.sectionHeaderPlain,children:"Key Details"}),me(l,{style:A.infoBody,children:[me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Status:"}),L(ho,{color:C.color,testID:`${ht}-status`,children:C.label}),L(u,{style:A.infoDim,children:C.sublabel})]}),me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Storage:"}),L(ho,{color:sn(e.storageType),testID:`${ht}-backend`,children:m}),L(u,{style:A.infoDim,children:Dt(e.value)})]}),e.storageType==="mmkv"&&e.instanceId&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Instance:"}),L(ho,{color:Ta(e.instanceId),icon:L(fc,{size:9,color:Ta(e.instanceId)}),children:e.instanceId})]}),r!=null&&r>0&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Updates:"}),L(ho,{color:fr.semantic.warning,children:String(r)}),r>1&&n&&L(O,{onPress:n,testID:"buoy-storage-key-history",accessibilityLabel:`View history for ${e.key}`,accessibilityRole:"button",style:A.inlineLinkButton,hitSlop:{top:6,bottom:6,left:6,right:6},children:L(u,{style:A.inlineLinkText,children:"view history \u2192"})})]}),e.status==="required_wrong_type"&&e.expectedType&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Expected:"}),L(bc,{type:e.expectedType}),me(u,{style:A.infoDim,children:["got ",Dt(e.value)]})]}),e.status==="required_wrong_value"&&e.expectedValue&&me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Expected:"}),L(u,{style:A.infoExpected,children:String(e.expectedValue)})]}),e.description?me(l,{style:A.infoRow,children:[L(u,{style:A.infoLabel,children:"Info:"}),L(u,{style:A.infoDescription,children:e.description})]}):null]})]})}),L(l,{style:A.section,children:me(l,{style:A.infoContainer,children:[L(u,{style:A.sectionHeaderPlain,children:"Value Explorer"}),L(l,{style:A.viewerBody,testID:`${ht}-viewer`,children:x!==null&&typeof x=="object"?L(Sc,{title:"",data:x,showTypeFilter:true,rawMode:true,initialExpanded:false}):L(u,{style:A.rawValueText,selectable:true,children:D??"undefined"})})]})}),Se?me(l,{style:A.actionRow,children:[d?me(O,{style:[A.actionChip,y&&A.actionChipActive],testID:"buoy-storage-key-pin",accessibilityLabel:y?`Unpin ${e.key}`:`Pin ${e.key} to top`,accessibilityRole:"button",onPress:()=>d(e.key),hitSlop:{top:6,bottom:6,left:6,right:6},children:[L(mc,{size:12,active:y,color:J.color.accent}),L(u,{style:[A.actionChipText,{color:J.color.accent}],children:y?"Unpin":"Pin to top"})]}):null,i?me(O,{style:A.actionChip,testID:"buoy-storage-key-hide",accessibilityLabel:`Hide ${e.key} from list`,accessibilityRole:"button",onPress:()=>i(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[L(gc,{size:12,color:J.color.warning}),L(u,{style:[A.actionChipText,{color:J.color.warning}],children:"Hide from list"})]}):null,f&&a?me(O,{style:[A.actionChip,A.dangerChip],testID:"buoy-storage-key-delete",accessibilityLabel:`Delete key ${e.key}`,accessibilityRole:"button",onPress:()=>a(e),hitSlop:{top:6,bottom:6,left:6,right:6},children:[L(hc,{size:12,color:J.color.danger}),L(u,{style:[A.actionChipText,{color:J.color.danger}],children:"Delete key"})]}):null]}):null]}),b&&f?L(kc,{path:[],value:x,onSave:q=>{B(q),T(ue=>ue+1),S(false)},onCancel:()=>S(false),saveLabel:"Apply",testIDPrefix:"buoy-storage-value"}):null]})}var A=pe.create({screen:{flex:1,minHeight:0},scroll:{flex:1},scrollContent:{paddingHorizontal:8,paddingTop:8},section:{marginBottom:16},editorContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.accent+"4D",overflow:"hidden",shadowColor:J.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:J.color.accent+"1A",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:J.color.accent+"33"},sectionHeaderAccentText:{fontWeight:"600",fontSize:12,color:J.color.accent,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},rawButton:{flexDirection:"row",alignItems:"center",gap:4},rawButtonText:{color:J.color.accent,fontSize:11,fontWeight:"700"},sectionBody:{padding:8},editorHint:{color:J.color.textTertiary,fontSize:10,paddingTop:8,paddingHorizontal:4,lineHeight:14},blockedText:{color:J.color.textSecondary,fontSize:12,padding:12,lineHeight:18},infoContainer:{minWidth:200,backgroundColor:J.color.surface,borderRadius:6,borderWidth:1,borderColor:J.color.border,overflow:"hidden"},sectionHeaderPlain:{backgroundColor:J.color.surfaceElevated,paddingHorizontal:12,paddingVertical:8,fontWeight:"600",fontSize:12,color:J.color.textSecondary,borderBottomWidth:1,borderBottomColor:J.color.border,letterSpacing:.5,textTransform:"uppercase",fontFamily:Mt},infoBody:{padding:12,gap:10},infoRow:{flexDirection:"row",alignItems:"center",gap:8},infoLabel:{fontSize:10,color:J.color.textTertiary,fontWeight:"600",minWidth:64,fontFamily:Mt},infoDim:{color:J.color.textTertiary,fontSize:10,fontFamily:Mt},infoExpected:{fontSize:11,color:fr.semantic.warning,fontFamily:Mt,flex:1},infoDescription:{fontSize:11,color:J.color.textSecondary,flex:1},rawValueText:{color:J.color.textSecondary,fontSize:11,fontFamily:Mt,lineHeight:16,padding:12},viewerBody:{backgroundColor:J.color.bg,minHeight:48},inlineLinkButton:{marginLeft:4},inlineLinkText:{fontSize:10,fontWeight:"600",fontFamily:Mt,color:J.color.accent},actionRow:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:8,paddingHorizontal:4},actionChip:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:6,paddingHorizontal:10,borderRadius:6,backgroundColor:J.color.surface,borderWidth:1,borderColor:J.color.border},dangerChip:{borderColor:J.color.danger+"55"},actionChipActive:{backgroundColor:J.color.accentSoft,borderColor:J.color.accentBorderStrong},actionChipText:{fontSize:11,fontWeight:"600",fontFamily:Mt}});E();E();E();function Ia(){return ae.hasSecure||ee.count()>0}import{macOSColors as un,night as zt,monoFont as Rc}from"@buoy-gg/shared-ui/web";import{jsx as yn,jsxs as Bc}from"react/jsx-runtime";var Vc=[{id:"all",label:"All Types",color:null},{id:"async",label:ae.async,color:un.semantic.warning},{id:"mmkv",label:ae.mmkv,color:un.semantic.info},{id:"secure",label:"Secure",color:un.semantic.success}];function gn({active:e,onChange:t,counts:r}){return yn(l,{style:Hr.row,children:Vc.filter(o=>Ia()||o.id!=="secure").map(o=>{let n=e===o.id,a=o.color??zt.color.accent;return Bc(O,{testID:`buoy-storage-type-${o.id}`,accessibilityRole:"button",accessibilityLabel:`Filter by ${o.label}`,accessibilityState:{selected:n},activeOpacity:.8,onPress:()=>t(o.id),style:[Hr.pill,{borderColor:zt.color.border},n&&[Hr.pillActive,o.color?{backgroundColor:o.color+"15",borderColor:o.color+"40"}:{backgroundColor:zt.color.accentSoft,borderColor:zt.color.accentBorderStrong}]],children:[yn(u,{style:[Hr.label,n&&{color:a,fontWeight:"600"}],children:o.label}),yn(u,{style:[Hr.value,{color:n?a:zt.color.textTertiary}],children:r[o.id]})]},o.id)})})}function Ea(e){let t={all:e.length,async:0,mmkv:0,secure:0};for(let r of e)t[r.storageType]+=1;return t}var Hr=pe.create({row:{flexDirection:"row",gap:8,marginTop:2},pill:{flex:1,backgroundColor:zt.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:zt.color.border,paddingVertical:6,paddingHorizontal:8,alignItems:"center",justifyContent:"center",minHeight:32},pillActive:{borderWidth:1,transform:[{scale:1.005}]},label:{fontSize:9,color:zt.color.textSecondary,textTransform:"uppercase",letterSpacing:.4,fontWeight:"500",marginBottom:1},value:{fontSize:12,fontWeight:"600",fontFamily:Rc,lineHeight:14}});import{macOSColors as Kt,night as Pe,monoFont as Ac}from"@buoy-gg/shared-ui/web";E();function pn(){try{return typeof window<"u"&&!!window.sessionStorage}catch{return false}}function Dc(){return null}function Ra(){return"Session storage is unavailable in this browser context."}import{jsx as Zt,jsxs as qr}from"react/jsx-runtime";var jy=pn();function Mc({stats:e,tabStats:t,healthPercentage:r,healthStatus:o,healthColor:n,activeFilter:a="all",onFilterChange:i,activeStorageType:y="all",onStorageTypeChange:d,showStatus:p=true}){let s=t||{validCount:e.presentRequiredCount+e.optionalCount,missingCount:e.missingCount,issuesCount:e.wrongValueCount+e.wrongTypeCount,asyncCount:e.asyncCount||0,mmkvCount:e.mmkvCount||0,secureCount:e.secureCount||0,totalCount:e.totalCount};return qr(l,{style:Ne.container,children:[p?qr(l,{style:Ne.filtersRow,children:[qr(O,{style:[Ne.filterChip,a==="all"&&[Ne.filterChipActive,{backgroundColor:Pe.color.accentSoft,borderColor:Pe.color.accentBorderStrong,shadowColor:Pe.color.accent}]],onPress:()=>i?.("all"),activeOpacity:.8,testID:"buoy-storage-status-all",accessibilityRole:"button",accessibilityLabel:"Valid keys",children:[Zt(u,{style:[Ne.filterValue,{color:Pe.color.text}],children:s.validCount}),Zt(u,{style:Ne.filterLabel,children:"Valid"})]}),qr(O,{style:[Ne.filterChip,a==="missing"&&[Ne.filterChipActive,{backgroundColor:Kt.semantic.error+"10",borderColor:Kt.semantic.error+"30",shadowColor:Kt.semantic.error}]],onPress:()=>i?.("missing"),activeOpacity:.8,testID:"buoy-storage-status-missing",accessibilityRole:"button",accessibilityLabel:"Missing keys",children:[Zt(u,{style:[Ne.filterValue,{color:s.missingCount>0?Kt.semantic.error:Pe.color.textTertiary}],children:s.missingCount}),Zt(u,{style:Ne.filterLabel,children:"Missing"})]}),qr(O,{style:[Ne.filterChip,a==="issues"&&[Ne.filterChipActive,{backgroundColor:Kt.semantic.warning+"10",borderColor:Kt.semantic.warning+"30",shadowColor:Kt.semantic.warning}]],onPress:()=>i?.("issues"),activeOpacity:.8,testID:"buoy-storage-status-issues",accessibilityRole:"button",accessibilityLabel:"Issues keys",children:[Zt(u,{style:[Ne.filterValue,{color:s.issuesCount>0?Kt.semantic.warning:Pe.color.textTertiary}],children:s.issuesCount}),Zt(u,{style:Ne.filterLabel,children:"Issues"})]})]}):null,d&&Zt(gn,{active:y,onChange:d,counts:{all:s.totalCount,async:s.asyncCount,mmkv:s.mmkvCount,secure:s.secureCount}})]})}var Ne=pe.create({container:{backgroundColor:Pe.color.surface,borderRadius:12,padding:16,borderWidth:1,borderColor:Pe.color.border,gap:14,shadowColor:"#000000",shadowOpacity:.03,shadowRadius:12,shadowOffset:{width:0,height:2}},topRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},titleLeft:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},healthDot:{width:6,height:6,borderRadius:3},titleText:{fontSize:12,fontWeight:"600",color:Pe.color.text,letterSpacing:.5,textTransform:"uppercase"},titleDivider:{width:4,height:1,backgroundColor:Pe.color.border,marginHorizontal:4},subtitleText:{color:Pe.color.textTertiary,fontSize:11},healthBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1},healthBadgeText:{fontSize:10,fontWeight:"600",fontVariant:["tabular-nums"]},healthProgressBar:{height:3,borderRadius:1.5,backgroundColor:Pe.color.bg,overflow:"hidden"},healthProgressFill:{height:3,borderRadius:1.5},filtersRow:{flexDirection:"row",gap:10},filterChip:{flex:1,backgroundColor:Pe.color.buttonSurface,borderRadius:8,borderWidth:1,borderColor:Pe.color.border,paddingVertical:10,paddingHorizontal:12,alignItems:"center",justifyContent:"center",minHeight:44},filterChipActive:{borderWidth:1,shadowOffset:{width:0,height:0},shadowOpacity:.1,shadowRadius:6,elevation:2,transform:[{scale:1.005}]},filterLabel:{fontSize:9,color:Pe.color.textTertiary,textTransform:"uppercase",letterSpacing:.5,fontWeight:"500",marginTop:3},filterValue:{fontSize:18,fontWeight:"600",fontFamily:Ac,lineHeight:20}});E();mt();Jt();import{isDevToolsStorageKey as zc}from"@buoy-gg/shared-ui/web";import{useState as fn,useEffect as Kc,useCallback as Oc,useRef as Lc}from"react";E();function Ot(e,t){return typeof e=="string"?t==="async":e.storageType?e.storageType===t:true}function mn(e=[]){let[t,r]=fn([]),[o,n]=fn(true),[a,i]=fn(null),y=JSON.stringify(e),d=Lc(e);d.current=e;let p=Oc(async()=>{let s=d.current;n(true),i(null);try{let g=(await oe.getAllKeys()).filter(m=>!zc(m));if(!g||g.length===0){r([]),n(false);return}let f=await so(g),C=[];f.forEach(([m,b])=>{let S=b;if(b)try{S=JSON.parse(b)}catch{S=b}let w=s.find(R=>Ot(R,"async")?typeof R=="string"?R===m:R.key===m:false),T="optional_present";w&&(S==null?T="required_missing":typeof w=="object"&&w.expectedValue!==void 0?T=S===w.expectedValue?"required_present":"required_wrong_value":typeof w=="object"&&w.expectedType!==void 0?T=(S===null?"null":typeof S).toLowerCase()===w.expectedType.toLowerCase()?"required_present":"required_wrong_type":T="required_present");let I={key:m,value:S,storageType:"async",status:T,category:w?"required":"optional",...typeof w=="object"&&w.expectedValue!==void 0&&{expectedValue:w.expectedValue},...typeof w=="object"&&w.expectedType!==void 0&&{expectedType:w.expectedType},...typeof w=="object"&&w.description!==void 0&&{description:w.description}};C.push(I)}),s.forEach(m=>{if(!Ot(m,"async"))return;let b=typeof m=="string"?m:m.key;C.some(S=>S.key===b)||C.push({key:b,value:void 0,storageType:"async",status:"required_missing",category:"required",...typeof m=="object"&&m.expectedValue!==void 0&&{expectedValue:m.expectedValue},...typeof m=="object"&&m.expectedType!==void 0&&{expectedType:m.expectedType},...typeof m=="object"&&m.description!==void 0&&{description:m.description}})}),r(C)}catch(g){i(g instanceof Error?g:new Error("Failed to fetch storage data")),r([])}finally{n(false)}},[y]);return Kc(()=>{p()},[p]),{storageKeys:t,isLoading:o,error:a,refresh:p}}E();lo();import{isDevToolsStorageKey as Pc,appStorageEvent as Fc}from"@buoy-gg/shared-ui/web";import{subscribeToBrowserStorage as Wc}from"@buoy-gg/shared-ui/web/utils";var hn=new Set,bo,Ba=false,$c=new Set(["@react_buoy_storage_event_filters","@react_buoy_storage_key_filters","@react_buoy_storage_is_monitoring","REACT_QUERY_OFFLINE_CACHE"]),Va=e=>Pc(e)||[...$c].some(t=>e.startsWith(t));function Aa(e){let t=Fc(e);if(t){e=t;for(let r of[...hn])try{r(e)}catch{}}}async function _c(){if(!(bo||typeof window>"u")){if(zr()){bo=el(e=>{Ba||Aa(e)});return}bo=Wc(e=>{if(Ba||e.area!=="localStorage"||e.key!==void 0&&Va(e.key))return;let{area:t,action:r,...o}=e;o.prevPairs&&(o.prevPairs=o.prevPairs.filter(([n])=>!Va(n))),Aa({action:r,data:o,timestamp:new Date})})}}function Da(e){return hn.add(e),()=>{hn.delete(e)}}function Nc(){return!!bo}E();import{isDevToolsStorageKey as Ma}from"@buoy-gg/shared-ui/web";import{useState as mr,useEffect as za,useCallback as Ka,useRef as Oa}from"react";function Hc(e,t,r=[]){let[o,n]=mr([]),[a,i]=mr(true),[y,d]=mr(null),p=JSON.stringify(r),s=Oa(r);s.current=r;let g=Ka(()=>{let f=s.current;i(true),d(null);try{if(!e){n([]),i(false);return}let C=e.getAllKeys().filter(b=>!Ma(b));if(!C||C.length===0){let b=f.filter(S=>Ot(S,"mmkv")).map(S=>{let w=typeof S=="string"?S:S.key,T=typeof S=="object"?S.description:void 0,I=typeof S=="object"?S.expectedValue:void 0,R=typeof S=="object"?S.expectedType:void 0;return{key:w,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",description:T,expectedValue:I,expectedType:R}});n(b),i(false);return}let m=[];C.forEach(b=>{let{value:S,type:w}=kt(e,b),T=f.find(D=>Ot(D,"mmkv")?typeof D=="string"?D===b:D.key===b:false),I="optional_present";T&&(S===void 0?I="required_missing":typeof T=="object"&&T.expectedValue!==void 0?I=String(S)===String(T.expectedValue)?"required_present":"required_wrong_value":typeof T=="object"&&T.expectedType!==void 0?I=Qo(w,T.expectedType)?"required_present":"required_wrong_type":I="required_present");let R={key:b,value:S,valueType:w!=="unknown"?w:void 0,storageType:"mmkv",instanceId:t,status:I,category:T?"required":"optional",lastUpdated:new Date,...typeof T=="object"&&T.expectedValue!==void 0&&{expectedValue:T.expectedValue},...typeof T=="object"&&T.expectedType!==void 0&&{expectedType:T.expectedType},...typeof T=="object"&&T.description!==void 0&&{description:T.description}};m.push(R)}),f.forEach(b=>{if(!Ot(b,"mmkv"))return;let S=typeof b=="string"?b:b.key;m.some(w=>w.key===S)||m.push({key:S,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:t,status:"required_missing",category:"required",...typeof b=="object"&&b.expectedValue!==void 0&&{expectedValue:b.expectedValue},...typeof b=="object"&&b.expectedType!==void 0&&{expectedType:b.expectedType},...typeof b=="object"&&b.description!==void 0&&{description:b.description}})}),n(m)}catch(C){d(C instanceof Error?C:new Error("Failed to fetch MMKV storage data")),n([])}finally{i(false)}},[e,t,p]);return za(()=>{g()},[g]),{storageKeys:o,isLoading:a,error:y,refresh:g}}function La(e,t=[]){let[r,o]=mr([]),[n,a]=mr(true),[i,y]=mr(null),d=JSON.stringify(t),p=Oa(t);p.current=t;let s=Ka(()=>{let g=p.current;a(true),y(null);try{let f=[];e.forEach(({instance:C,id:m})=>{let b=C.getAllKeys().filter(S=>!Ma(S));!b||b.length===0||b.forEach(S=>{let{value:w,type:T}=kt(C,S),I=g.find(x=>Ot(x,"mmkv")?typeof x=="string"?x===S:x.key===S:false),R="optional_present";I&&(w===void 0?R="required_missing":typeof I=="object"&&I.expectedValue!==void 0?R=String(w)===String(I.expectedValue)?"required_present":"required_wrong_value":typeof I=="object"&&I.expectedType!==void 0?R=Qo(T,I.expectedType)?"required_present":"required_wrong_type":R="required_present");let D={key:S,value:w,valueType:T!=="unknown"?T:void 0,storageType:"mmkv",instanceId:m,status:R,category:I?"required":"optional",lastUpdated:new Date,...typeof I=="object"&&I.expectedValue!==void 0&&{expectedValue:I.expectedValue},...typeof I=="object"&&I.expectedType!==void 0&&{expectedType:I.expectedType},...typeof I=="object"&&I.description!==void 0&&{description:I.description}};f.push(D)})}),g.forEach(C=>{if(!Ot(C,"mmkv"))return;let m=typeof C=="string"?C:C.key;if(!f.some(b=>b.key===m)){let b=e[0]?.id||"mmkv.default";f.push({key:m,value:void 0,valueType:void 0,storageType:"mmkv",instanceId:b,status:"required_missing",category:"required",...typeof C=="object"&&C.expectedValue!==void 0&&{expectedValue:C.expectedValue},...typeof C=="object"&&C.expectedType!==void 0&&{expectedType:C.expectedType},...typeof C=="object"&&C.description!==void 0&&{description:C.description}})}}),o(f)}catch(f){y(f instanceof Error?f:new Error("Failed to fetch multi-MMKV storage data")),o([])}finally{a(false)}},[e,d]);return za(()=>{s()},[s]),{storageKeys:r,isLoading:n,error:i,refresh:s}}E();import{isDevToolsStorageKey as qc}from"@buoy-gg/shared-ui/web";import{useState as bn,useEffect as jc,useCallback as Pa,useRef as vo}from"react";var Uc="\u2022\u2022\u2022\u2022\u2022\u2022 (biometric protected)",Gc=3e3;function Fa(e){return JSON.stringify(e)}function Jc(e=[],t={}){let{pollMs:r=Gc}=t,o=vo(e);o.current=e;let n=JSON.stringify(e),[a,i]=bn([]),[y,d]=bn(true),[p,s]=bn(null),g=vo(Fa([])),f=vo(false),C=vo(false),m=Pa(S=>{let w=Fa(S);w!==g.current&&(g.current=w,i(S))},[]),b=Pa(async()=>{if(!C.current){C.current=true;try{let S=ee.getModule(),w=ee.getAll().filter(({key:x})=>!qc(x)),T=o.current.filter(x=>Ot(x,"secure")),I=x=>T.find(B=>(typeof B=="string"?B:B.key)===x);if(!S||w.length===0&&T.length===0){m([]),f.current=true,d(false);return}f.current||d(true),s(null);let R=[],D=[...w,...T.map(x=>typeof x=="string"?x:x.key).filter(x=>!w.some(B=>B.key===x)).map(x=>({key:x,options:{},description:void 0}))];for(let x of D){let B=I(x.key),Q=typeof B=="object"?B:void 0,ve={...Q?.expectedValue!==void 0&&{expectedValue:Q.expectedValue},...Q?.expectedType!==void 0&&{expectedType:Q.expectedType}},Se=Q?.description??x.description;if(x.options.requireAuthentication){R.push({key:x.key,value:Uc,storageType:"secure",status:B?"required_present":"optional_present",category:B?"required":"optional",description:Se??"Protected by biometric authentication \u2014 value not read by DevTools",...ve,...x.options.keychainService&&{instanceId:x.options.keychainService}});continue}let q=null;try{q=await S.getItemAsync(x.key,x.options)}catch{}if(q===null&&!B)continue;let ue=q;if(q)try{ue=JSON.parse(q)}catch{ue=q}let te="optional_present";if(B)if(q===null)te="required_missing";else if(Q?.expectedValue!==void 0)te=String(ue)===String(Q.expectedValue)?"required_present":"required_wrong_value";else if(Q?.expectedType!==void 0){let se=ue===null?"null":Array.isArray(ue)?"array":typeof ue,Ge=Q.expectedType.toLowerCase();te=se===Ge||Ge==="string"&&typeof q=="string"?"required_present":"required_wrong_type"}else te="required_present";R.push({key:x.key,value:q===null?void 0:ue,storageType:"secure",status:te,category:B?"required":"optional",...Se&&{description:Se},...ve,...x.options.keychainService&&{instanceId:x.options.keychainService}})}m(R)}catch(S){s(S instanceof Error?S:new Error("Failed to read SecureStore")),m([])}finally{f.current=true,C.current=false,d(false)}}},[m,n]);return jc(()=>{b();let S=ee.subscribe(()=>{b()});if(r<=0)return S;let w=setInterval(b,r);return()=>{S(),clearInterval(w)}},[b,r]),{storageKeys:a,isLoading:y,error:p,refresh:b}}E();import{isDevToolsStorageKey as vn}from"@buoy-gg/shared-ui/web";import{useState as So,useEffect as wo}from"react";function Sn(e=false){let[t,r]=So([]),[o,n]=So(true),a=()=>{n(true);try{let i=Le.getAll().filter(({id:y})=>!vn(y)).map(y=>{let{instance:d,id:p,encrypted:s,readOnly:g}=y,f=d.getAllKeys().filter(C=>!vn(C))?.length||0;return{id:p,instance:d,encrypted:s,readOnly:g,keyCount:f,size:void 0}});r(i)}catch{r([])}finally{n(false)}};return wo(()=>{a()},[]),wo(()=>{if(!e)return;let i=setInterval(()=>{a()},1e3);return()=>clearInterval(i)},[e]),{instances:t,instanceCount:t.length,isLoading:o,refresh:a}}function Wa(e){let[t,r]=So(null);return wo(()=>{if(!Le){r(null);return}let o=Le.get(e);if(!o){r(null);return}let n=o.instance.getAllKeys().filter(a=>!vn(a))?.length||0;r({...o,keyCount:n,size:void 0})},[e]),t}function Yc(e){let[t,r]=So(false);return wo(()=>{if(!Le){r(false);return}r(Le.has(e))},[e]),t}E();import{useEffect as Qc,useRef as $a}from"react";import{Check as Zc,macOSColors as Xt}from"@buoy-gg/shared-ui/web";import{jsx as hr,jsxs as Xc}from"react/jsx-runtime";var ed=2600,_a=180;function td({onDone:e}){let t=$a(new Yt.Value(0)).current,r=$a(e);return r.current=e,Qc(()=>{let o=Yt.sequence([Yt.timing(t,{toValue:1,duration:_a,easing:Pr.out(Pr.quad),useNativeDriver:true}),Yt.delay(ed),Yt.timing(t,{toValue:0,duration:_a,easing:Pr.in(Pr.quad),useNativeDriver:true})]);return o.start(({finished:n})=>{n&&r.current()}),()=>o.stop()},[t]),hr(Yt.View,{pointerEvents:"box-none",style:[br.wrap,{opacity:t,transform:[{translateY:t.interpolate({inputRange:[0,1],outputRange:[-10,0]})}]}],testID:"buoy-storage-save-notice",children:Xc(O,{activeOpacity:.85,onPress:()=>r.current(),style:br.toast,accessibilityRole:"button",accessibilityLabel:"Saved. Applies on the app's next launch. Tap to dismiss.",testID:"buoy-storage-save-notice-dismiss",children:[hr(l,{style:br.tick,children:hr(Zc,{size:10,color:Xt.semantic.success})}),hr(u,{style:br.saved,children:"Saved"}),hr(l,{style:br.divider}),hr(u,{style:br.detail,children:"applies on next launch"})]})})}var br=pe.create({wrap:{position:"absolute",top:10,left:12,right:12,zIndex:100,elevation:100,alignItems:"center"},toast:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingLeft:8,paddingRight:12,borderRadius:999,backgroundColor:Xt.background.card,borderWidth:pe.hairlineWidth,borderColor:Xt.border.default,shadowColor:"#000",shadowOpacity:.4,shadowRadius:14,shadowOffset:{width:0,height:5}},tick:{width:16,height:16,borderRadius:8,marginRight:7,alignItems:"center",justifyContent:"center",backgroundColor:Xt.semantic.successBackground},saved:{color:Xt.text.primary,fontSize:12,fontWeight:"600"},divider:{width:pe.hairlineWidth,alignSelf:"stretch",marginHorizontal:8,backgroundColor:Xt.border.default},detail:{color:Xt.text.muted,fontSize:12}});E();import{useState as rd,useEffect as od}from"react";mt();import{Trash2 as ko,CopyButton as nd,SquareDashed as ad,X as id,ProUpgradeModal as ld,monoFont as sd}from"@buoy-gg/shared-ui/web";import{macOSColors as Na,night as at}from"@buoy-gg/shared-ui/web";import{useIsPro as cd}from"@buoy-gg/license/web";import{jsx as He,jsxs as Ha}from"react/jsx-runtime";function dd({copyValue:e,mmkvInstances:t=[],activeStorageType:r="all",onClearComplete:o,isSelectMode:n=false,onToggleSelectMode:a,selectedCount:i=0}){let[y,d]=rd(false),p=cd();od(()=>{y&&p&&d(false)},[y,p]);let s=()=>{if(!p){d(true);return}Ie.alert(`Clear ${ae.asyncFull}`,`Delete all ${ae.asyncFull} keys? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:async()=>{try{await oe.clear(),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},g=(R,D)=>{if(!p){d(true);return}Ie.alert(`Clear ${D}`,`Delete all keys from ${D}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear",style:"destructive",onPress:()=>{try{let x=t.find(B=>B.id===R);x&&(x.instance.clearAll(),o?.())}catch(x){Ie.alert("Error",`Failed: ${x}`)}}}])},f=()=>{if(!p){d(true);return}Ie.alert(`Clear All ${ae.mmkv}`,`Delete all keys from ${t.length} instances? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:()=>{try{t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},C=()=>{if(!p){d(true);return}Ie.alert("Clear All Storage","Delete all storage data? This cannot be undone.",[{text:"Cancel",style:"cancel"},{text:"Clear All",style:"destructive",onPress:async()=>{try{await oe.clear(),t.forEach(R=>R.instance.clearAll()),o?.()}catch(R){Ie.alert("Error",`Failed: ${R}`)}}}])},m=r==="all"||r==="async",b=r==="all"||r==="mmkv",S=r==="all",w=m&&!S,T=b&&!S,I=b&&t.length>1&&!S;return Ha(l,{style:bt.container,children:[a&&He(O,{onPress:a,testID:"buoy-storage-select-mode",accessibilityLabel:n?"Exit selection mode":"Select keys",accessibilityRole:"button",style:[bt.actionButton,n&&bt.actionButtonActive],children:n?Ha(l,{style:bt.selectModeActiveContainer,children:[He(id,{size:14,color:at.color.accent}),i>0&&He(u,{style:bt.selectedCountText,children:i})]}):He(ad,{size:16,color:at.color.textSecondary})}),!n&&He(nd,{value:e,size:16,testID:"buoy-storage-export-copy",buttonStyle:bt.actionButton,colors:{idle:at.color.textSecondary,success:Na.semantic.success,error:Na.semantic.error}}),!n&&S&&He(O,{onPress:C,testID:"buoy-storage-clear-all",accessibilityLabel:"Clear all storage",accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),!n&&w&&He(O,{onPress:s,testID:"buoy-storage-clear-async",accessibilityLabel:`Clear ${ae.asyncFull}`,accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),!n&&I&&He(O,{onPress:f,testID:"buoy-storage-clear-mmkv-all",accessibilityLabel:`Clear all ${ae.mmkv} instances`,accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),!n&&T&&t.length===1&&He(O,{onPress:()=>g(t[0].id,t[0].id),testID:"buoy-storage-clear-mmkv",accessibilityLabel:`Clear ${ae.mmkv} instance`,accessibilityRole:"button",style:bt.actionButton,children:He(ko,{size:16,color:at.color.danger})}),He(ld,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var bt=pe.create({container:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:at.color.buttonSurface,borderWidth:1,borderColor:at.color.border},actionButtonActive:{backgroundColor:at.color.accentSoft,borderColor:at.color.accentBorderStrong},selectModeActiveContainer:{flexDirection:"row",alignItems:"center",gap:2},selectedCountText:{fontSize:10,fontWeight:"700",color:at.color.accent,fontFamily:sd}});E();import{useState as ud,useEffect as yd}from"react";import{Trash2 as gd,CopyButton as pd,CheckSquare as fd,EyeOff as md,ProUpgradeModal as hd,monoFont as bd}from"@buoy-gg/shared-ui/web";import{macOSColors as qa,night as qe}from"@buoy-gg/shared-ui/web";import{useIsPro as vd}from"@buoy-gg/license/web";E();Jt();function Sd(e,t){if(typeof e.remove=="function"){e.remove(t);return}if(typeof e.delete=="function"){e.delete(t);return}throw new Error("MMKV instance exposes neither remove() nor delete()")}async function ja(e,t){if(e.length===0)return;let r=e.filter(a=>a.storageType==="async"),o=e.filter(a=>a.storageType==="mmkv"),n=e.filter(a=>a.storageType==="secure");r.length>0&&await sr(r.map(a=>a.key));for(let a of n)await ee.deleteValue(a.key);if(o.length>0){let a={};o.forEach(i=>{let y=i.instanceId||"default";a[y]||(a[y]=[]),a[y].push(i.key)}),Object.entries(a).forEach(([i,y])=>{let d=t.find(p=>p.id===i);d&&y.forEach(p=>Sd(d.instance,p))})}}import{jsx as xt,jsxs as jr}from"react/jsx-runtime";function wd({selectedKeys:e,mmkvInstances:t,onDeleteComplete:r,onHideKeys:o,onSelectAll:n,onClearSelection:a,totalVisibleKeys:i}){let[y,d]=ud(false),p=vd();yd(()=>{y&&p&&d(false)},[y,p]);let s=e.length,g=s===i&&i>0,f=()=>{let b={};return e.forEach(S=>{let w=S.instanceId?`[${S.storageType}:${S.instanceId}]`:`[${S.storageType}]`;b[`${w} ${S.key}`]=S.value}),{selectedCount:s,keys:b,timestamp:new Date().toISOString()}},C=()=>{s!==0&&o?.(e)},m=()=>{if(s!==0){if(!p){d(true);return}Ie.alert("Delete Selected Keys",`Delete ${s} selected key${s>1?"s":""}? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await ja(e,t),r?.()}catch(b){Ie.alert("Error",`Failed to delete keys: ${b}`)}}}])}};return s===0?null:jr(l,{style:vt.container,children:[jr(l,{style:vt.leftSection,children:[jr(O,{style:vt.selectAllButton,onPress:g?a:n,testID:"buoy-storage-select-all",accessibilityLabel:g?"Deselect all keys":"Select all keys",accessibilityRole:"button",children:[xt(fd,{size:14,color:g?qe.color.accent:qe.color.textSecondary}),xt(u,{style:vt.selectAllText,children:g?"Deselect All":"Select All"})]}),xt(l,{style:vt.countBadge,children:jr(u,{style:vt.countText,children:[s," selected"]})})]}),jr(l,{style:vt.actionsSection,children:[xt(pd,{value:f(),size:14,testID:"buoy-storage-selection-copy",buttonStyle:vt.actionButton,colors:{idle:qe.color.accent,success:qa.semantic.success,error:qa.semantic.error}}),o&&xt(O,{style:vt.actionButton,onPress:C,testID:"buoy-storage-selection-hide",accessibilityLabel:"Hide selected keys",accessibilityRole:"button",children:xt(md,{size:14,color:qe.color.warning})}),xt(O,{style:vt.actionButton,onPress:m,testID:"buoy-storage-selection-delete",accessibilityLabel:"Delete selected keys",accessibilityRole:"button",children:xt(gd,{size:14,color:qe.color.danger})})]}),xt(hd,{visible:y,onClose:()=>d(false),featureName:"Storage Editing"})]})}var vt=pe.create({container:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:qe.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:qe.color.accentBorderStrong,paddingHorizontal:12,paddingVertical:8,marginBottom:10},leftSection:{flexDirection:"row",alignItems:"center",gap:12},selectAllButton:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,paddingHorizontal:8,backgroundColor:qe.color.surface,borderRadius:6,borderWidth:1,borderColor:qe.color.border},selectAllText:{fontSize:11,fontWeight:"600",color:qe.color.textSecondary},countBadge:{backgroundColor:qe.color.accentFill,paddingHorizontal:8,paddingVertical:4,borderRadius:6},countText:{fontSize:11,fontWeight:"700",color:qe.color.accent,fontFamily:bd},actionsSection:{flexDirection:"row",alignItems:"center",gap:8},actionButton:{width:28,height:28,alignItems:"center",justifyContent:"center",borderRadius:6,backgroundColor:qe.color.surface,borderWidth:1,borderColor:qe.color.border}});E();var wn=new Set;function kd(e){return wn.add(e),()=>{wn.delete(e)}}function Cd(){wn.forEach(e=>{try{e()}catch{}})}E();mt();function kn(e,t=[]){if(e.storageType==="mmkv"){if(e.valueType==="buffer")return"Buffer values can't be edited \u2014 the tool only ever sees their byte length, not their contents.";let r=t.find(o=>o.id===(e.instanceId||"default"));if(r?.readOnly)return`MMKV instance "${r.id}" is registered read-only.`}if(e.storageType==="secure"){if(ee.getAll().find(r=>r.key===e.key)?.options.requireAuthentication)return"Biometric-protected keys can't be edited \u2014 writing one would fire an auth prompt.";if(!ee.getModule())return"No SecureStore module is registered."}return null}function Ua(e,t){if(e.storageType==="mmkv"){let r=Qa(e);if(r==="number"&&(t.trim()===""||Number.isNaN(Number(t))))return"Must be a number \u2014 this MMKV key is stored as a number.";if(r==="boolean"){let o=t.trim().toLowerCase();if(o!=="true"&&o!=="false")return'Must be "true" or "false" \u2014 this MMKV key is stored as a boolean.'}return null}if(Ja(e.value))try{JSON.parse(t)}catch(r){return`This key holds JSON \u2014 ${r instanceof Error?r.message:"invalid JSON"}`}return null}function xd(e){if(e==null)return"";if(typeof e=="string"){let t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return e}return typeof e=="object"?JSON.stringify(e,null,2):String(e)}async function Ga(e,t,r=[]){let o=kn(e,r);if(o)throw new Error(o);let n=Ua(e,t);if(n)throw new Error(n);switch(e.storageType){case"async":{await oe.setItem(e.key,Ya(e,t));return}case"secure":{await ee.setValue(e.key,Ya(e,t));return}case"mmkv":{let a=e.instanceId||"default",i=r.find(y=>y.id===a);if(!i)throw new Error(`MMKV instance "${a}" is not registered.`);i.instance.set(e.key,Td(e,t));return}default:throw new Error(`Unsupported storage type "${String(e.storageType)}"`)}}function Ja(e){return e!==null&&typeof e=="object"}function Ya(e,t){return Ja(e.value)?JSON.stringify(JSON.parse(t)):t}function Qa(e){return e.valueType?e.valueType:typeof e.value=="number"?"number":typeof e.value=="boolean"?"boolean":"string"}function Td(e,t){switch(Qa(e)){case"number":return Number(t);case"boolean":return t.trim().toLowerCase()==="true";default:return t}}import{gameUIColors as vr,macOSColors as Co,night as F,HardDrive as Za}from"@buoy-gg/shared-ui/web";import{useIsPro as Id}from"@buoy-gg/license/web";import{Fragment as Ed,jsx as H,jsxs as Ee}from"react/jsx-runtime";var Xa=[Co.semantic.info,Co.semantic.success,Co.semantic.warning,Co.semantic.debug,"#FF6B9D","#00D9FF"];function Sr(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Xa[t%Xa.length]}var vg=Hs["storage.keys"].free;function Rd({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set(["@react_buoy"]),onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:p,enabledStorageTypes:s,statusFilter:g,onStatusFilterChange:f,onStatusCountsChange:C,pinnedKeys:m,onTogglePin:b,storageTypeFilter:S,onStorageTypeFilterChange:w,applySafeAreaInset:T,detailKey:I=null,onOpenKey:R,onCloseDetail:D}){let x=Id(),B=ca("storage.keys"),Q=ca("storage.mmkvInstances"),[ve,Se]=Qt(false);yr(()=>{ve&&x&&Se(false)},[ve,x]);let[q,ue]=Qt("all"),te=g!=null&&f!=null,se=te?g:q,Ge=te?f:ue,[Je,wt]=Qt("all"),Rt=S!=null&&w!=null,ye=Rt?S:Je,or=Rt?w:wt,[re,$t]=Qt(null),Ye=nn(null),xr=nn(0),ne=nn(new Map),gt=Xe((c,h)=>{h?ne.current.set(c,h):ne.current.delete(c)},[]),[_t,Tr]=Qt(0),[Nt,Ir]=Qt(false),[nr,Bt]=Qt(new Set),{instances:xe}=Sn(false),{storageKeys:Qr,isLoading:Zr,error:Xr,refresh:Ht}=mn(e),Po=_e(()=>xe.map(c=>({instance:c.instance,id:c.id})),[xe]),{storageKeys:Er,isLoading:Fo,error:Rr,refresh:ar}=La(Po,e),Wo=_e(()=>re?Er.filter(c=>c.instanceId===re):Er,[Er,re]),{storageKeys:qt,isLoading:eo,error:$o,refresh:to}=Jc(e),N=_e(()=>[...Qr,...Wo,...qt].filter(c=>!ze(c.key)),[Qr,Wo,qt]),ke=_e(()=>{if(!I)return null;let c=dn(I);return N.find(h=>dn(h)===c)??I},[I,N]),_o=Zr||Fo||eo,ro=Xr||Rr||$o,Te=Xe(()=>{Ht(),ar(),to()},[Ht,ar,to]),tt=Xe(c=>c.instanceId?`${c.storageType}-${c.instanceId}-${c.key}`:`${c.storageType}-${c.key}`,[]),No=Xe(()=>{Ir(c=>(c&&Bt(new Set),!c))},[]),rt=Xe((c,h)=>{let U=tt(c);Bt(Z=>{let Ze=new Set(Z);return h?Ze.add(U):Ze.delete(U),Ze})},[tt]),Ho=Xe(()=>{Bt(new Set),Ir(false),Te()},[Te]),Br=Xe(c=>{c.forEach(h=>n?.(h.key)),Bt(new Set),Ir(false)},[n]),jt=Xe(async(c,h)=>{if(!x)throw Se(true),new Error("Editing storage values is a Pro feature.");await Ga(c,h,xe),Te(),Tr(U=>U+1)},[x,xe,Te]),qo=Xe(c=>{jt(c,JSON.stringify(!c.value)).catch(h=>{Ie.alert("Couldn't save",h instanceof Error?h.message:String(h))})},[jt]),oo=Xe((c,h)=>{if(!x){Se(true);return}Ie.alert("Delete key",`Delete "${c.key}"? This cannot be undone.`,[{text:"Cancel",style:"cancel"},{text:"Delete",style:"destructive",onPress:async()=>{try{await ja([c],xe.map(U=>({id:U.id,instance:U.instance}))),Te(),h?.()}catch(U){Ie.alert("Error",`Failed to delete key: ${U}`)}}}])},[x,xe,Te]),Vr=Xe(c=>kn(c,xe),[xe]),jo=_e(()=>{let c=N,h={valid:c.filter(G=>G.status==="required_present"||G.status==="optional_present").length,missing:c.filter(G=>G.status==="required_missing").length,issues:c.filter(G=>G.status==="required_wrong_value"||G.status==="required_wrong_type").length,total:c.length},U=c.filter(G=>G.storageType==="async"),Z=c.filter(G=>G.storageType==="mmkv"),Ze=c.filter(G=>G.storageType==="secure");return{summary:{valid:h.valid,missing:h.missing,issues:h.issues,total:h.total,timestamp:new Date().toISOString()},asyncStorage:U.reduce((G,Be)=>(G[Be.key]=Be.value,G),{}),mmkv:Z.reduce((G,Be)=>{let Vt=Be.instanceId||"default";return G[Vt]||(G[Vt]={}),G[Vt][Be.key]=Be.value,G},{}),secure:Ze.reduce((G,Be)=>(G[Be.key]=Be.value,G),{})}},[N]);yr(()=>{i&&(i.current=N)},[N,i]),yr(()=>{let c,h=Da(U=>{clearTimeout(c),c=setTimeout(()=>{Ht()},100)});return()=>{clearTimeout(c),h()}},[Ht]),yr(()=>{let c,h=kd(()=>{clearTimeout(c),c=setTimeout(Te,100)});return()=>{clearTimeout(c),h()}},[Te]),yr(()=>{let c,h=Un(U=>{(re===null||U.instanceId===re)&&(clearTimeout(c),c=setTimeout(()=>{ar()},100))});return()=>{clearTimeout(c),h()}},[ar,re]);let Ut=_e(()=>{let c=N,h=c.filter(Z=>!ze(Z.key)),U=c.filter(Z=>ze(Z.key));return{totalCount:c.length,requiredCount:h.filter(Z=>Z.category==="required").length,missingCount:h.filter(Z=>Z.status==="required_missing").length,wrongValueCount:h.filter(Z=>Z.status==="required_wrong_value").length,wrongTypeCount:h.filter(Z=>Z.status==="required_wrong_type").length,presentRequiredCount:h.filter(Z=>Z.status==="required_present").length,optionalCount:h.filter(Z=>Z.category==="optional").length,mmkvCount:c.filter(Z=>Z.storageType==="mmkv").length,asyncCount:c.filter(Z=>Z.storageType==="async").length,secureCount:c.filter(Z=>Z.storageType==="secure").length,devToolsCount:U.length}},[N]),pt=_e(()=>{let c=N.filter(V=>!ze(V.key));ye!=="all"&&(c=c.filter(V=>V.storageType===ye));let h=c.filter(V=>V.status==="required_present"||V.status==="optional_present").length,U=c.filter(V=>V.status==="required_missing").length,Z=c.filter(V=>V.status==="required_wrong_type"||V.status==="required_wrong_value").length,Ze=0,G=0,Be=0,Vt=0;return se==="all"?(Ze=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_present"||V.status==="optional_present")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_present"||V.status==="optional_present")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_present"||V.status==="optional_present")).length,Vt=Ze+G+Be):se==="missing"?(Ze=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&V.status==="required_missing").length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&V.status==="required_missing").length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&V.status==="required_missing").length,Vt=Ze+G+Be):se==="issues"&&(Ze=N.filter(V=>!ze(V.key)&&V.storageType==="async"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,G=N.filter(V=>!ze(V.key)&&V.storageType==="mmkv"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Be=N.filter(V=>!ze(V.key)&&V.storageType==="secure"&&(V.status==="required_wrong_type"||V.status==="required_wrong_value")).length,Vt=Ze+G+Be),{validCount:h,missingCount:U,issuesCount:Z,asyncCount:Ze,mmkvCount:G,secureCount:Be,totalCount:Vt}},[N,se,ye]);yr(()=>{C?.({validCount:pt.validCount,missingCount:pt.missingCount,issuesCount:pt.issuesCount})},[C,pt.validCount,pt.missingCount,pt.issuesCount]);let ir=_e(()=>[...N].sort((c,h)=>{let U={required_missing:1,required_wrong_type:2,required_wrong_value:3,required_present:4,optional_present:5};return(U[c.status]||999)-(U[h.status]||999)}),[N]),Pn=_e(()=>Array.from(new Set(N.map(c=>c.key))).sort(),[N]),Oe=_e(()=>{let c=ir;if(s&&s.size>0&&(c=c.filter(h=>s.has(h.storageType))),c=c.filter(h=>!Array.from(r).some(U=>h.key.includes(U))),a){let h=a.toLowerCase();c=c.filter(U=>U.key.toLowerCase().includes(h))}switch(se){case"all":c=c.filter(h=>h.status==="required_present"||h.status==="optional_present");break;case"missing":c=c.filter(h=>h.status==="required_missing");break;case"issues":c=c.filter(h=>h.status==="required_wrong_type"||h.status==="required_wrong_value");break}if(ye!=="all"&&(c=c.filter(h=>h.storageType===ye)),m&&m.size>0){let h=c.filter(Z=>m.has(Z.key)),U=c.filter(Z=>!m.has(Z.key));c=[...h,...U]}return c},[ir,se,ye,r,a,re,s,m]),v=_e(()=>Oe.slice(0,B),[Oe,B]),k=_e(()=>Math.max(0,Oe.length-B),[Oe.length,B]),z=k>0,j=_e(()=>{let c=Oe.filter(h=>!ze(h.key));return{totalCount:Oe.length,requiredCount:c.filter(h=>h.category==="required").length,missingCount:c.filter(h=>h.status==="required_missing").length,wrongValueCount:c.filter(h=>h.status==="required_wrong_value").length,wrongTypeCount:c.filter(h=>h.status==="required_wrong_type").length,presentRequiredCount:c.filter(h=>h.status==="required_present").length,optionalCount:c.filter(h=>h.category==="optional").length,mmkvCount:Oe.filter(h=>h.storageType==="mmkv").length,asyncCount:Oe.filter(h=>h.storageType==="async").length,secureCount:Oe.filter(h=>h.storageType==="secure").length,devToolsCount:Oe.filter(h=>ze(h.key)).length}},[Oe]),Qe=_e(()=>v.filter(c=>nr.has(tt(c))),[v,nr,tt]),Ar=Xe(()=>{let c=new Set(v.map(tt));Bt(c)},[v,tt]),Dr=Xe(()=>{Bt(new Set)},[]),Mr=Ut.requiredCount>0?Math.round(Ut.presentRequiredCount/Ut.requiredCount*100):Ut.totalCount>0?100:0,Oi=Mr>=90?"OPTIMAL":Mr>=70?"WARNING":"CRITICAL",Li=Mr>=90?vr.success:Mr>=70?vr.warning:vr.error;if(ke)return H(l,{style:P.root,children:H(Ec,{storageKey:ke,editBlockedReason:Vr(ke),eventCount:y?.[ke.key],onSave:c=>jt(ke,c),onViewHistory:p?()=>p(ke.key):void 0,onDeleteKey:c=>oo(c,()=>D?.()),onHideKey:c=>{Br([c]),D?.()},isPinned:m?.has(ke.key)??false,onTogglePin:b,applySafeAreaInset:T})});if(_o&&N.length===0)return Ee(l,{style:P.emptyState,children:[H(da,{size:48,color:F.color.textTertiary}),H(u,{style:P.emptyTitle,children:"Loading storage keys..."})]});if(ro)return Ee(l,{style:P.emptyState,children:[H(da,{size:48,color:vr.error}),H(u,{style:[P.emptyTitle,{color:vr.error}],children:"Error loading storage"}),H(u,{style:P.emptySubtitle,children:ro.message})]});let Pi=Ee(Ed,{children:[ye==="mmkv"&&xe.length===0&&Ee(l,{style:P.emptyMMKVState,children:[H(u,{style:P.emptyMMKVTitle,children:"No MMKV Instances Detected"}),H(u,{style:P.emptyMMKVSubtitle,children:"MMKV instances must be registered with registerMMKVInstance()"}),H(u,{style:P.emptyMMKVCode,children:`import { registerMMKVInstance } from '@buoy-gg/storage';
|
|
2
2
|
|
|
3
3
|
const storage = createMMKV();
|
|
4
|
-
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(l,{style:O.instanceNavbar,children:[Ee(l,{style:O.instanceNavbarHeader,children:[H(u,{style:O.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&H(la,{style:{transform:[{scale:.85}]}})]}),Ee(Or,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:O.instanceNavbarScroll,children:[(C||xe.length===1)&&Ee(L,{onPress:()=>_t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ae.mmkv} instances`,style:[O.instanceNavbarButton,re===null&&O.instanceNavbarButtonActive],children:[H(Ga,{size:12,color:re===null?F.color.text:F.color.textSecondary}),H(u,{style:[O.instanceNavbarButtonText,re===null&&O.instanceNavbarButtonTextActive],children:"All"}),H(l,{style:O.instanceNavbarBadge,children:H(u,{style:O.instanceNavbarBadgeText,children:xe.reduce((s,h)=>s+h.keyCount,0)})})]}),xe.map((s,h)=>{let U=h>=Q;return Ee(L,{testID:`buoy-storage-instance-${s.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${s.id}`,onPress:()=>{U?Se(true):_t(s.id)},style:[O.instanceNavbarButton,s.id===re&&O.instanceNavbarButtonActive,{borderColor:U?F.color.border:br(s.id)+"40",backgroundColor:s.id===re?br(s.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[H(Ga,{size:12,color:s.id===re?br(s.id):F.color.textSecondary}),H(u,{style:[O.instanceNavbarButtonText,s.id===re&&{color:br(s.id),fontWeight:"700"}],children:s.id}),H(l,{style:[O.instanceNavbarBadge,s.id===re&&{backgroundColor:br(s.id)+"30"}],children:H(u,{style:[O.instanceNavbarBadgeText,s.id===re&&{color:br(s.id)}],children:s.keyCount})})]},s.id)})]})]})]}),Ki=H(nd,{copyValue:Ho,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:_o,selectedCount:nr.size}),Li=Nt?H(md,{selectedKeys:Ye,mmkvInstances:xe.map(s=>({id:s.id,instance:s.instance})),onDeleteComplete:$o,onHideKeys:Er,onSelectAll:Br,onClearSelection:Vr,totalVisibleKeys:v.length}):null,Pi=z?Ee(L,{style:O.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(l,{style:O.limitBannerContent,children:[Ee(l,{style:O.limitBannerLeft,children:[H(Fs,{size:16,color:F.color.accent}),H(u,{style:O.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),H(la,{})]}),H(u,{style:O.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,Oi=(()=>{let s=N.some(U=>!ze(U.key)),h;return a||!s?(h=$s({subject:"keys",verb:"registered",search:a,total:s?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&s&&(h={...h,message:"No keys match. Clear the search to see them."})):se==="missing"?h={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?h={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:h={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},H(_s,{...h,testID:"buoy-storage-keys-empty"})})(),Fi=H(Ws,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(l,{style:O.root,children:[$t>0?H(Jc,{onDone:()=>Cr(0)},$t):null,Ee(Or,{testID:"buoy-storage-scroll",ref:Je,onScroll:s=>{kr.current=s.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:O.scrollContainer,contentContainerStyle:O.container,showsVerticalScrollIndicator:false,children:[H(l,{style:O.backgroundGrid}),H(Ec,{stats:Ut,tabStats:pt,healthPercentage:Ar,healthStatus:Di,healthColor:Mi,activeFilter:se,onFilterChange:Ue,activeStorageType:ye,onStorageTypeChange:or,showStatus:!te}),zi,Le.length>0?Ee(l,{style:O.keysSection,children:[Ee(l,{style:O.sectionHeader,children:[Ee(l,{style:O.sectionHeaderLeft,children:[Ee(u,{style:O.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),H(l,{style:O.countBadge,children:H(u,{style:O.countText,children:v.length})})]}),Ki]}),Li,H(fa,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:y,onViewHistory:g,onHideKey:s=>Er([s]),onToggleKey:No,onDeleteKey:to,editBlockedFor:Rr,pinnedKeys:f,onTogglePin:b,onRowRef:gt,onOpenKey:R}),Pi]}):Oi,H(u,{style:O.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Fi]})]})}var O=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...na,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...na,opacity:.006,backgroundColor:hr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:Fr,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:F.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:F.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:F.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:F.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:F.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:F.color.border},countText:{fontSize:11,fontWeight:"600",color:F.color.text,fontFamily:Fr},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:F.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:F.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:F.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:F.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:F.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:F.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:Fr,color:F.color.accent,backgroundColor:F.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:F.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:F.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:F.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:F.color.textSecondary,fontFamily:Fr,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:F.color.text},instanceNavbarBadge:{backgroundColor:F.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:F.color.textSecondary,fontFamily:Fr},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:F.color.border},clearSearchText:{fontSize:13,color:F.color.text,fontWeight:"500"},limitBanner:{backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:F.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:F.color.textTertiary,fontSize:11}});import{jsx as Cd}from"react/jsx-runtime";function Ya({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return Cd(kd,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:g,enabledStorageTypes:c,statusFilter:p,onStatusFilterChange:m,onStatusCountsChange:x,pinnedKeys:f,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as xd}from"@buoy-gg/shared-ui/web";E();import{useMemo as Td}from"react";import{useEventStoreEvents as Id}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Ed,appStorageEvent as Sn}from"@buoy-gg/shared-ui/web";function qr(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function ko(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function Qa(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=ko(e);return qr(t.value)||qr(t.prevValue)||qr(r)||qr(o)}var Rd=0;function Co(){return`se-${Date.now()}-${++Rd}`}var Bd=class extends Ed{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Sn(e);t&&super.addEvent(t)}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Pe.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:y}=kt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[y]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:y,initialScan:true},storageType:"mmkv",id:Co()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Hi(Wn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,y]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:y??void 0,initialScan:true},storageType:"async",id:Co()})}}}catch{}}async startCapturing(){Pc()||await Lc(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=Ra(e=>{let t={...e,storageType:"async",id:Co()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Hn(e=>{let t={...e,storageType:"mmkv",id:Co()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)Qa(o)||t.set(o.id,o);let r=e.map(Sn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!Qa(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...ko(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Sn(e);if(!t)return;e=t;let r=this.events.findIndex(a=>a.id===e.id);if(r===-1)return;let o=this.events[r],n=this.events.slice();n[r]={...o,...e,timestamp:o.timestamp,data:{...o.data,...e.data}},super.replaceEvents(n)}},Pt=new Bd;function Za(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Td(()=>t==="all"?void 0:d=>d.filter(g=>g.storageType===t),[t]),{events:a,clearEvents:i,isActive:y}=Id(Pt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:y}}E();ft();import{useState as xo,useCallback as ct,useMemo as Ot,useEffect as Xa,useRef as Vd}from"react";import{formatRelativeTime as To,macOSColors as Io,night as er,parseValue as Eo,devToolsStorageKeys as ei,GitBranch as Ad,EventStepperFooter as Dd,EventHistoryViewer as Md,copyToClipboard as zd,ProUpgradeModal as Kd,monoFont as ti}from"@buoy-gg/shared-ui/web";import{useIsPro as Ld}from"@buoy-gg/license/web";E();import{computeLineDiff as Cg,DiffType as xg,ABSENT_VALUE as Pd,isAbsent as Tg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Od}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as Fd,gitClassicTheme as Rg,devToolsDefaultTheme as Bg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ri}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as Wd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as oi}from"react/jsx-runtime";function _d({oldValue:e,newValue:t,scrollEnabled:r=true}){return oi(l,{style:r?ni.container:ni.containerInline,children:oi(Wd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var ni=pe.create({container:{flex:1,backgroundColor:ri.color.bg},containerInline:{backgroundColor:ri.color.bg}});E();function wn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}E();import{night as Re,Lock as $d,monoFont as Nd}from"@buoy-gg/shared-ui/web";import{jsx as kn,jsxs as Hd}from"react/jsx-runtime";var qd={copy:{color:Re.color.accent,backgroundColor:Re.color.accentSoft,borderColor:Re.color.accentBorderStrong,textColor:Re.color.accent},jump:{color:Re.color.warning,backgroundColor:Re.color.warningSoft,borderColor:Re.color.warning+"40",textColor:Re.color.warning},undo:{color:Re.color.info,backgroundColor:Re.color.infoSoft,borderColor:Re.color.info+"40",textColor:Re.color.info}};function Cn({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=qd[r],i=o||n;return Hd(L,{disabled:i,onPress:e,style:[Ro.button,{backgroundColor:i?Re.color.fill:a.backgroundColor,borderColor:i?Re.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?kn($d,{size:10,color:Re.color.textTertiary,style:Ro.lockIcon}):kn(l,{style:[Ro.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),kn(u,{style:[Ro.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Ro=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Re.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:Nd,height:12}});E();ft();Jt();import{isDevToolsStorageKey as jd}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function xn(e){let{action:t,data:r}=e;if(Ft(r?.prevValue)||Ft(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await zr(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Tn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let y=i.data;if(Ft(y?.value)||Ft(y?.prevValue)||Ft(y?.pairs)||Ft(y?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)Gd(e[i],r);let o=new Set;for(let i of e)Ud(i,o);let n=[],a=[];for(let i of o){if(jd(i))continue;let y=r.get(i);y==null?a.push(i):n.push([i,y])}a.length>0&&await sr(a),n.length>0&&await zr(n)}function Ud(e,t){let{data:r}=e;if(r){if(r.key&&t.add(r.key),r.keys)for(let o of r.keys)t.add(o);if(r.pairs)for(let[o]of r.pairs)t.add(o);if(r.prevPairs)for(let[o]of r.prevPairs)t.add(o)}}function Gd(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),y={...a,...i};t.set(o.key,JSON.stringify(y))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let y=JSON.parse(i),d=JSON.parse(a),g={...y,...d};t.set(n,JSON.stringify(g))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function In(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ft(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ft(r.prevPairs);default:return false}}import{Fragment as Jd,jsx as qe,jsxs as ai}from"react/jsx-runtime";var vr=-1,Bo={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Vo(e){switch(e){case"setItem":case"multiSet":return Io.semantic.success;case"removeItem":case"multiRemove":case"clear":return Io.semantic.error;case"mergeItem":case"multiMerge":return Io.semantic.info;default:return Io.text.muted}}function ii(e){let t=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),n=String(e.getMilliseconds()).padStart(3,"0");return`${t}:${r}:${o}.${n}`}var Yd={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},Qd=[];function En({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=Ld(),[a,i]=xo(false),[y,d]=xo("split"),[g,c]=xo(Math.max(vr,t-1)),[p,m]=xo(t),x=Vd(false),f=Ot(()=>e.events.sort((ne,gt)=>ne.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),b=f.length;Xa(()=>{if(x.current)return;(async()=>{try{let ne=await oe.getItem(ei.storage.diffViewerMode());(ne==="split"||ne==="tree")&&d(ne),x.current=true}catch{}})()},[]),Xa(()=>{let ne=Math.min(b-1,Math.max(0,t)),gt=Math.max(vr,Math.min(ne-1,t-1));c(gt),m(ne)},[t,b]);let S=ct(async ne=>{d(ne);try{await oe.setItem(ei.storage.diffViewerMode(),ne)}catch{}},[]),w=f[t],T=w?.action,I=g===vr,R=I?void 0:f[Math.max(0,Math.min(b-1,g))],D=f[Math.max(0,Math.min(b-1,p))],C=Ot(()=>{let ne=D?.data;return ne?.initialScan?"scanned":ne?.prevValue===null||ne?.prevValue===void 0?"absent":"prior"},[D]),B=Ot(()=>C==="absent"?Pd:C==="scanned"?Eo(D?.data?.value):Eo(D?.data?.prevValue),[C,D]),Q=Ot(()=>I?{index:vr,label:Bo[C].label,timestamp:Bo[C].timestamp,relativeTime:Bo[C].relativeTime,badge:qe(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:qe(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Bo[C].badge})})}:{index:g,label:`#${g+1} / ${b}`,timestamp:R?ii(R.timestamp):"",relativeTime:R?To(R.timestamp):"",badge:R?qe(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(R.action)}20`}],children:qe(u,{style:[tr.actionTextSmall,{color:Vo(R.action)}],children:wn(R.action)})}):void 0},[g,R,b,I,C]),ve=Ot(()=>({index:p,label:`#${p+1} / ${b}`,timestamp:D?ii(D.timestamp):"",relativeTime:D?To(D.timestamp):"",badge:D?qe(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Vo(D.action)}20`}],children:qe(u,{style:[tr.actionTextSmall,{color:Vo(D.action)}],children:wn(D.action)})}):void 0}),[p,D,b]),Se=Ot(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),q=ct(()=>{g>vr&&c(g-1)},[g]),ue=ct(()=>{g<p-1&&c(g+1)},[g,p]),te=ct(()=>{p>g+1&&m(p-1)},[p,g]),se=ct(()=>{p<b-1&&m(p+1)},[p,b]),Ue=Ot(()=>I?B:Eo(R?.data?.value??null),[I,B,R]),Ge=Ot(()=>Eo(D?.data?.value),[D]),wt=ct(()=>y==="split"?qe(Od,{oldValue:Ue,newValue:Ge,differences:Qd,theme:Fd.devToolsDefault,options:Yd,showThemeName:false,scrollEnabled:false}):qe(_d,{oldValue:Ue,newValue:Ge,scrollEnabled:false}),[Ue,Ge,y]),Rt=ct(()=>{r(Math.max(0,t-1))},[t,r]),ye=ct(()=>{r(Math.min(b-1,t+1))},[t,b,r]),or=ct(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await xn(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ne=f.filter($t=>$t.storageType!=="mmkv"),gt=ne.findIndex($t=>$t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Tn(ne,gt)}catch{}},[w,f,n]),_t=ct(async()=>{if(!w)return;let ne={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await zd(ne)},[w]),Je=w?.storageType!=="mmkv",kr=Je&&w&&In(w);return ai(Jd,{children:[Je&&ai(l,{style:tr.actionButtonsContainer,children:[qe(Cn,{type:"undo",text:"UNDO",onPress:or,disabled:!kr,locked:!n}),qe(Cn,{type:"jump",text:"JUMP",onPress:re,locked:!n}),qe(Cn,{type:"copy",text:"COPY",onPress:_t})]}),qe(Md,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Ad,diffModeTabs:Se,activeDiffMode:y,onDiffModeChange:S,renderDiffContent:wt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:q,onLeftNext:ue,onRightPrevious:te,onRightNext:se,canLeftPrevious:g>vr,canLeftNext:g<p-1,canRightPrevious:p>g+1,canRightNext:p<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:To(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),qe(Kd,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function Rn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,y)=>i.timestamp.getTime()-y.timestamp.getTime()),a=n.length;return qe(Dd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:To(n[t]?.timestamp),applySafeAreaInset:o})}var tr=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:er.color.surface,borderBottomWidth:1,borderBottomColor:er.color.border},valueBox:{backgroundColor:er.color.bg,borderRadius:6,borderWidth:1,borderColor:er.color.border,padding:8},valueText:{fontSize:12,color:er.color.text,fontFamily:ti,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:ti}});E();import{Filter as li,DynamicFilterView as Zd,Database as Xd,HardDrive as eu,Shield as tu,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as Sr}from"react/jsx-runtime";function ru({ignoredPatterns:e,onTogglePattern:t,onAddPattern:r,availableKeys:o=[],enabledStorageTypes:n,onToggleStorageType:a}){let i={addFilterSection:{enabled:true,placeholder:"Enter key pattern to hide...",title:"KEY FILTERS",icon:li},availableItemsSection:{enabled:true,title:"AVAILABLE EVENT KEYS",emptyMessage:"No storage event keys available. Events will appear here once captured.",items:o},howItWorksSection:{enabled:true,title:"HOW EVENT FILTERS WORK",description:"Patterns hide matching storage keys from the event list. Storage type toggles control which storage backends are monitored.",examples:["\u2022 react_buoy \u2192 hides keys containing react_buoy","\u2022 @temp \u2192 hides @temp_user, @temp_data","\u2022 redux \u2192 hides redux-persist:root",`\u2022 ${ae.asyncFull}: show or hide captured events`,`\u2022 ${ae.mmkv}: show or hide captured events`],icon:li},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return Sr(l,{style:et.container,children:[Sr(l,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),Sr(l,{style:et.storageTypeButtons,children:[Sr(L,{style:[et.storageTypeButton,n.has("async")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ae.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(Xd,{size:16,color:n.has("async")?Tt.semantic.warning:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("async")&&{color:Tt.semantic.warning}],children:ae.asyncFull})]}),Sr(L,{style:[et.storageTypeButton,n.has("mmkv")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ae.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(eu,{size:16,color:n.has("mmkv")?Tt.semantic.info:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("mmkv")&&{color:Tt.semantic.info}],children:ae.mmkv})]}),ka()&&Sr(L,{style:[et.storageTypeButton,n.has("secure")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Wt(tu,{size:16,color:n.has("secure")?Tt.semantic.success:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("secure")&&{color:Tt.semantic.success}],children:"Secure Storage"})]})]})]}),Wt(Zd,{...i})]})}var et=pe.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:It.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:It.color.textSecondary,letterSpacing:.8,marginBottom:12},storageTypeButtons:{flexDirection:"row",gap:8},storageTypeButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:10,paddingHorizontal:12,backgroundColor:It.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:It.color.border},storageTypeButtonActive:{backgroundColor:It.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:It.color.textTertiary}});E();import{memo as ou}from"react";import{RelativeTime as nu,macOSColors as jr,parseValue as au,CompactRow as iu}from"@buoy-gg/shared-ui/web";import{jsx as si}from"react/jsx-runtime";function lu(e){let t=au(e);return t===null?"null":t===void 0?"undefined":Array.isArray(t)?"array":typeof t=="boolean"?"boolean":typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="object"?"object":"undefined"}function su(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return jr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return jr.semantic.error;case"mergeItem":case"multiMerge":return jr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return jr.semantic.warning;default:return jr.text.muted}}function cu(e,t){return`${Array.from(e).map(r=>r==="async"?ae.async:ae.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Bn=ou(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=su(e.lastAction),i=wn(e.lastAction),y=e.totalOperations??1;return si(iu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:cu(e.storageTypes,y),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:si(nu,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as du}from"@buoy-gg/license/web";import{Fragment as ci,jsx as M,jsxs as dt}from"react/jsx-runtime";var Hg=Ls["storage.events"].free,Vn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},uu={storage:Vn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},yu={storage:Vn,parse:e=>e==="true",serialize:e=>e.toString()},di={storage:Vn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},gu={...di,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function An({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:y,onRefresh:d,onEventSelect:g}){let c=du(),p=Ks("storage.events"),[m,x]=uo(cr.storage.activeTab(),"browser",uu);Zo(()=>{y?.(m)},[m,y]);let[f,b]=ot(""),[S,w]=ot(null),[T,I]=ot(false),[R,D]=uo(cr.storage.isMonitoring(),true,yu),{events:C,clearEvents:B,isCapturing:Q}=Za({enabled:R}),[ve,Se]=ot(null),[q,ue]=ot(null),[te,se]=ot(null),[Ue,Ge]=ot(0),[wt,Rt]=ot(false),[ye,or]=uo(cr.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),gu),[re,_t]=ot("all"),[Je,kr]=ot(new Set(["async","mmkv","secure"])),[ne,gt]=uo(cr.storage.pinnedKeys(),new Set,di),$t=Jn(null),Cr=R&&Q,[Nt,xr]=ot("bottomSheet"),nr=De(v=>{xr(v)},[]),Bt=De(()=>{D(v=>!v)},[]),xe=De(()=>{B(),Se(null),Ge(0)},[B]),Jr=De(v=>{ue(v),se(null)},[]),Yr=De(()=>{ue(null),se(null)},[]),Qr=De(v=>{or(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ht=De(v=>{or(k=>new Set([...k,v]))},[]),Lo=De(v=>{gt(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Tr=De(()=>{Rt(!wt)},[wt]),Po=De(v=>{kr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ir=Jn([]),ar=De(()=>{let v=Ir.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=co(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=co(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=co(z.value),k),{})}},[]),Oo=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await so()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await nl()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),qt=v=>{let k=Is(v);return k===null?"null":k===void 0?"undefined":Array.isArray(k)?"array":typeof k=="boolean"?"boolean":typeof k=="number"?"number":typeof k=="string"?"string":typeof k=="object"?"object":"undefined"},[Zr,Fo]=ot([]);Zo(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();Fo([...v].sort())}catch{}})()},[e]);let Xr=st(()=>{let v=new Set(Zr);return C.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[C,Zr]),N=st(()=>{let v=new Map;return C.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Je.has(k.storageType)||Array.from(ye).some(Ye=>z.includes(Ye)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=qt(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:qt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[C,ye,Je]),ke=st(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),Wo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),eo=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Te=st(()=>q&&N.find(v=>v.key===q)||null,[q,N]);Zo(()=>{if(!g)return;let v=ke||(te!==null?Te:null),k=ke?Ue:te;if(!v||k==null)return;let z=[...v.events].sort((Br,Vr)=>Br.timestamp.getTime()-Vr.timestamp.getTime()),j=z[k],Ye=z[k-1];j&&g(j),Ye&&g(Ye)},[g,ke,Ue,Te,te]);let tt=st(()=>C.filter(v=>{if(!v.data?.key||!Je.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[C,ye,Je]),_o=st(()=>Ca(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(v=>v.storageType===re),[tt,re]),$o=De(()=>rt.map(v=>({key:v.data?.key,action:v.action,value:co(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[rt]),Er=st(()=>rt.slice(0,p),[rt,p]),jt=st(()=>Math.max(0,rt.length-p),[rt.length,p]),No=.8,to=De(v=>v.id,[]),Rr=De(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Ge(z>=0?z:0)},[N]),Ho=De(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:qt(v.data?.value)};return M(Bn,{data:k,onPress:()=>Rr(v),testID:`buoy-storage-event-${v.id}`})},[Rr]);if(!e)return null;let Ut=n?cr.modal.root():cr.storage.modal(),pt=()=>{if(wt)return M(ru,{ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:Ht,availableKeys:Xr,enabledStorageTypes:Je,onToggleStorageType:Po});if(m==="browser"){if(q&&Te){if(te!==null)return M(l,{style:he.contentWrapper,children:M(En,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Ye)=>j.timestamp.getTime()-Ye.timestamp.getTime()),z=[...k].reverse();return M(Xo,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Ye=k.findIndex(Vr=>Vr.timestamp.getTime()===j.timestamp.getTime()),Br={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Bn,{data:Br,onPress:()=>se(Ye>=0?Ye:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(Ya,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Qr,onAddPattern:Ht,searchQuery:f,storageDataRef:Ir,eventCountByKey:Wo,lastWriteByKey:eo,onViewHistory:Jr,enabledStorageTypes:Je,pinnedKeys:ne,onTogglePin:Lo,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:_t,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(l,{style:he.contentWrapper,children:M(En,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(dn,{active:re,onChange:_t,counts:_o})});if(rt.length===0){let k=re!=="all";return dt(l,{style:he.flexFill,children:[v,M(Rs,{testID:"buoy-storage-events-empty",...Cr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return dt(l,{style:he.flexFill,children:[v,M(Xo,{testID:"buoy-storage-events-list",style:he.flexFill,data:Er,renderItem:Ho,keyExtractor:to,onEndReachedThreshold:No,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(l,{style:he.lockedBannerContainer,children:M(xd,{featureName:`${jt} event${jt>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ir=ke&&ke.events.length>1?M(Rn,{conversation:ke,selectedEventIndex:Ue,onEventIndexChange:Ge,applySafeAreaInset:Nt==="bottomSheet"}):Te&&te!==null&&Te.events.length>1?M(Rn,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Kn=wt?()=>Rt(false):te!==null?()=>se(null):q?Yr:ke?()=>{Se(null),Ge(0)}:r,Le=wt?dt(Me,{children:[M(Me.Navigation,{onBack:()=>Rt(false)}),M(Me.Content,{title:"Filters"})]}):q?dt(Me,{children:[M(Me.Navigation,{onBack:te!==null?()=>se(null):Yr}),M(Me.Content,{title:`${q} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Ge(0)}}),M(Me.Content,{title:ke.key})]}):S?dt(Me,{children:[M(Me.Navigation,{onBack:()=>w(null)}),M(Me.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):dt(Me,{children:[r&&M(Me.Navigation,{onBack:r}),M(Me.Content,{title:"",children:T?M(Ds,{value:f,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(Ts,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:m,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{x(v),ue(null),se(null),Se(null),Ge(0),w(null)}})}),dt(Me.Actions,{children:[d&&!T?M(L,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Vs,{size:14,color:We.color.textSecondary})}):null,M(L,{onPress:Tr,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Je.size<3)&&he.activeFilterButton],children:M(Bs,{size:14,color:ye.size>0||Je.size<3?We.color.accent:We.color.textSecondary})}),m==="browser"&&!T&&dt(ci,{children:[M(L,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(As,{size:14,color:We.color.textSecondary})}),M(ra,{value:ar,disabled:Ir.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),m==="events"&&dt(ci,{children:[M(ra,{value:$o,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(Ms,{isEnabled:Cr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(zs,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(oa,{children:dt(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ps,children:Le}),pt(),ir]})}):M(oa,{children:M(xs,{visible:e,onClose:t,onBack:Kn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Le},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function pu(e={}){return M(An,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:Es.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:We.color.buttonSurface,borderWidth:1,borderColor:We.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:We.color.accentSoft,borderColor:We.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:We.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:yo,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:We.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:yo},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:We.color.text,fontSize:12,fontWeight:"600",fontFamily:yo,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:We.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:We.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:We.color.accent,fontFamily:yo,letterSpacing:.5},contentWrapper:{flex:1}});E();ft();Jt();import{approxJsonSize as ui,isDevToolsStorageKey as ut,isOverWireBudget as yi,isJsonSerializable as mu}from"@buoy-gg/shared-ui/web";var Ao=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),fu=16*1024,Dn=1.25*1024*1024,gi=8*1024*1024;function Mn(e){return e===void 0?e:yi(e,fu)?Ao:e}function Do(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=ko(e),i=t(a.pairs),y=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&y===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:y}:{}}}}function pi(e){return e===void 0||!yi(e,gi)?e:mu(e)?{__buoyTruncated:true,note:`Exceeds the ${gi/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Ao}var mi=new WeakMap,fi=new WeakMap;function hu(e){let t=mi.get(e);if(t)return t;let r;try{let o=Do(e,Mn);r={event:o,bytes:ui(o,Dn).bytes}}catch{r={event:Do(e,()=>Ao),bytes:1024}}return mi.set(e,r),r}function bu(e){let t=fi.get(e);if(t)return t;let r=Do(e,n=>n===void 0?void 0:Ao),o={event:r,bytes:ui(r,Dn).bytes};return fi.set(e,o),o}function vu(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=hu(e[o]);if(r+n.bytes<=Dn)t[o]=n.event,r+=n.bytes;else{let a=bu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function hi(e){let t=Pe.get(e);if(!t)throw new Error(`No MMKV instance registered as "${e}"`);if(t.instance?.isReadOnly)throw new Error(`MMKV instance "${e}" is registered read-only`);return t.instance}var bi=[];function Su(e){bi=e}var wu={version:3,getSnapshot:()=>vu(Pt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&ut(t))})),subscribe:e=>Pt.subscribeToEvents(e),actions:{clearEvents:()=>{Pt.clearEvents()},getRequiredKeys:()=>bi,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Pt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=Do(r,pi);return{found:true,id:t,event:o}},clearAppStorage:()=>so(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Pt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!In(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await xn(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Pt.getEvents().filter(y=>y.storageType!=="mmkv").slice().reverse(),n=o.find(y=>y.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(y=>y.data?.key===n.data?.key),i=a.findIndex(y=>y.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await Tn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!ut(e)),"async.multiGet":async e=>(await io(e.keys)).filter(([t])=>!ut(t)),"async.getItem":e=>{let{key:t}=e;return ut(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>sr(e.keys),"async.multiSet":e=>zr(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Pe.getAll().filter(({id:e})=>!ut(e)).map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!ut(a)).map(a=>{let{value:i,type:y}=kt(t,a);return{key:a,value:Mn(i),valueType:y}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r||ut(r)||ut(t))return{found:false,reason:"missing instanceId/key"};let o=Pe.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=kt(o.instance,r);return{found:true,instanceId:t,key:r,value:pi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;hi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=hi(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=ee.getModule();return Promise.all(ee.getAll().filter(({key:t})=>!ut(t)).map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=ee.getModule(),t=ee.getAll().filter(({key:o})=>!ut(o)),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:Mn(i)})}return r},"secure.get":e=>{let{key:t}=e;if(ut(t))return null;let r=ee.getAll().find(n=>n.key===t),o=ee.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return ee.setValue(t,r)},"secure.delete":e=>ee.deleteValue(e.key)}};import{jsx as ku}from"react/jsx-runtime";var vi=Sl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>ku(bl,{size:e}),component:An,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),Cu=vl(vi,e=>(Su(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as xu,CyberpunkSectionButton as Tu}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Iu}from"@buoy-gg/shared-ui/web";import{jsx as Eu}from"react/jsx-runtime";function Ru({onPress:e}){let{storageKeys:t}=gn(),r=t.filter(n=>!Iu(n.key)).length,o=r;return Eu(Tu,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:xu,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as Si,CheckCircle2 as Bu,Eye as wi,XCircle as ki,HardDrive as Ci,Database as xi,Shield as Vu,gameUIColors as Mo,macOSColors as ie,night as be,monoFont as zo}from"@buoy-gg/shared-ui/web";import{DataViewer as Au}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var Ti=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Ko(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Ti[t%Ti.length]}var Du=e=>{switch(e){case"required_present":return{icon:Bu,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:Si,color:ie.semantic.error,bgColor:ie.semantic.errorBackground,borderColor:ie.semantic.error+"50",label:"MISSING",labelColor:ie.semantic.error};case"required_wrong_value":return{icon:ki,color:ie.semantic.warning,bgColor:ie.semantic.warningBackground,borderColor:ie.semantic.warning+"50",label:"WRONG S",labelColor:ie.semantic.warning};case"required_wrong_type":return{icon:ki,color:ie.semantic.info,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.info+"50",label:"WRONG TYPE",labelColor:ie.semantic.info};case"optional_present":return{icon:wi,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},Mu=e=>{switch(e){case"mmkv":return Ci;case"async":return xi;case"secure":return Vu;default:return xi}};function zu({storageKey:e,isExpanded:t,onToggle:r}){let o=Du(e.status),n=o.icon,a=Mu(e.storageType),i=e.value!==void 0&&e.value!==null,y=e.expectedValue!==void 0,d=e.expectedType!==void 0,g=ua(e.storageType),c=on(e.storageType,e.instanceId);return Ae(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(L,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Ae(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ae(l,{style:K.cardHeaderInfo,children:[Y(u,{style:K.storageKeyText,children:e.key}),e.description?Y(u,{style:K.descriptionText,children:e.description}):null,Ae(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(u,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Ae(l,{style:[K.storageBadge,{backgroundColor:`${g}15`}],children:[Y(a,{size:10,color:g}),Y(u,{style:[K.storageText,{color:g}],children:c})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(l,{style:[K.instanceBadge,{backgroundColor:Ko(e.instanceId)+"20",borderColor:Ko(e.instanceId)+"40"}],children:[Y(Ci,{size:9,color:Ko(e.instanceId)}),Y(u,{style:[K.instanceText,{color:Ko(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(u,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():Dt(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(wi,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let p=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof p=="string"||typeof p=="number"||typeof p=="boolean"?Ae(l,{style:K.simpleValueContainer,children:[Y(u,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(u,{style:K.simpleValueContent,selectable:true,children:String(p)})}),Ae(u,{style:K.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Au,{title:"Current Value",data:p,showTypeFilter:false,rawMode:true})})()}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ae(u,{style:K.typeHelperText,children:["Current type: ",Dt(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Ae(u,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ae(l,{style:K.cardBody,children:[Ae(l,{style:K.emptyValueContainer,children:[Y(Si,{size:16,color:ie.semantic.warning}),Y(u,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:zo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Mo.success,fontSize:12,fontFamily:zo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:zo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Mo.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Mo.warning+"1A"},emptyValueText:{color:Mo.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});E();import{AlertCircle as Ku,CheckCircle2 as Lu,XCircle as Ii,Eye as Pu,Database as Ei,Shield as Ou}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as je}from"react/jsx-runtime";var Fu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:Lu,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:Ku,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Ii,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Ii,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Pu,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],Wu=[{key:"mmkv",label:ae.mmkv,description:ae.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ei},{key:"async",label:ae.asyncFull,description:ae.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ei},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Ou}];function _u({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:y,asyncCount:d,secureCount:g}=e;return t===0?je(l,{style:X.statsContainer,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE BREAKDOWN"}),Ce(l,{style:X.emptyState,children:Ce(u,{style:X.emptyStateText,children:"No storage keys detected"})})]}):je(l,{style:X.statsContainer,children:[je(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:Fu.map(c=>{let p=0,m=false;switch(c.key){case"valid":p=a,m=p>0;break;case"missing":p=r,m=p>0;break;case"wrongValue":p=o,m=p>0;break;case"wrongType":p=n,m=p>0;break;case"optional":p=i,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon;return Ce(l,{style:X.breakdownItem,children:je(l,{style:X.breakdownItemRow,children:[je(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:c.bgColor}],children:Ce(f,{size:14,color:c.color})}),je(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:c.label}),Ce(u,{style:X.breakdownItemDesc,children:c.description})]})]}),je(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:c.textColor}],children:p}),je(u,{style:X.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]}),(y>0||d>0||g>0)&&je(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:Wu.map(c=>{let p=0,m=false;switch(c.key){case"mmkv":p=y,m=p>0;break;case"async":p=d,m=p>0;break;case"secure":p=g,m=p>0;break}if(!m)return null;let x=t>0?(p/t*100).toFixed(1):"0",f=c.icon,b=ua(c.key);return Ce(l,{style:X.breakdownItem,children:je(l,{style:X.breakdownItemRow,children:[je(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:`${b}15`}],children:Ce(f,{size:14,color:b})}),je(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:c.label}),Ce(u,{style:X.breakdownItemDesc,children:c.description})]})]}),je(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:b}],children:p}),je(u,{style:X.breakdownPercentage,children:[x,"%"]})]})]})},c.key)})})]})]})}var X=pe.create({statsContainer:{marginBottom:24,backgroundColor:St.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:St.color.border},sectionTitle:{color:St.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:St.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:St.color.border},breakdownItemRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breakdownItemLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1,minWidth:0},breakdownIcon:{padding:8,borderRadius:8},breakdownItemInfo:{flex:1,minWidth:0},breakdownItemLabel:{color:St.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:St.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:St.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:St.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:St.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{Database as $u,CyberpunkSectionButton as Nu}from"@buoy-gg/shared-ui/web";import{jsx as Hu}from"react/jsx-runtime";function qu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return Hu(Nu,{id:"storage-events",title:"EVENTS",subtitle:r,icon:$u,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Ur}from"@buoy-gg/shared-ui/web";var ju=["SET","GET","MERGE","DELETE","CLEAR"],Uu={SET:Ur.semantic.info,GET:Ur.text.muted,MERGE:Ur.semantic.debug,DELETE:Ur.semantic.error,CLEAR:Ur.semantic.warning};function Gu(e){return Uu[e]}function Ju(e){let t=e.action;return t==="clear"||t==="clearAll"?"CLEAR":t.startsWith("get.")?"GET":t==="removeItem"||t==="multiRemove"||t==="delete"?"DELETE":t==="mergeItem"||t==="multiMerge"?"MERGE":"SET"}function Yu(e){return!!e.data?.initialScan}E();import{useState as Qu}from"react";import{macOSColors as rr,night as de,monoFont as Ri}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function Zu({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=Qu(false),{instances:a,instanceCount:i,refresh:y}=hn(false),d=a.find(c=>c.id===e),g=c=>{t(c),n(false)};return un()?i===0?le(l,{style:$.container,children:it(l,{style:$.emptyState,children:[le(u,{style:$.emptyStateTitle,children:"No MMKV Instances Registered"}),le(u,{style:$.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(L,{style:$.refreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(l,{style:$.container,children:[it(L,{style:$.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:$.selectorContent,children:d?le(Bi,{instance:d,isSelected:true}):le(u,{style:$.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:$.dropdownArrow,children:"\u25BC"})]}),le(ta,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(L,{style:$.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:it(l,{style:$.dropdownContainer,children:[it(l,{style:$.dropdownHeader,children:[it(u,{style:$.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(L,{style:$.headerRefreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:$.headerRefreshText,children:"\u21BB"})})]}),le(Or,{style:$.dropdownList,children:a.map(c=>le(L,{style:[$.dropdownItem,c.id===e&&$.dropdownItemSelected],onPress:()=>g(c.id),activeOpacity:.7,children:le(Bi,{instance:c,isSelected:c.id===e})},c.id))})]})})})]}):le(l,{style:$.container,children:it(l,{style:$.unavailableState,children:[it(u,{style:$.unavailableTitle,children:[ae.mmkv," Not Available"]}),le(u,{style:$.unavailableDescription,children:xa()})]})})}function Bi({instance:e,isSelected:t}){return it(l,{style:$.instanceRow,children:[it(l,{style:$.instanceLeft,children:[le(u,{style:[$.instanceId,t&&$.instanceIdSelected],numberOfLines:1,children:e.id}),it(l,{style:$.instanceBadges,children:[e.encrypted&&le(l,{style:[$.badge,$.badgeEncrypted],children:le(u,{style:$.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(l,{style:[$.badge,$.badgeReadOnly],children:le(u,{style:$.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),it(l,{style:$.instanceRight,children:[le(u,{style:$.keyCount,children:e.keyCount}),le(u,{style:$.keyCountLabel,children:"keys"})]})]})}var $=pe.create({container:{marginBottom:12},unavailableState:{backgroundColor:rr.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:rr.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:rr.semantic.warning},unavailableDescription:{fontSize:12,color:de.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:de.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:de.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:de.color.text},emptyStateDescription:{fontSize:12,color:de.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:de.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:de.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:de.color.accent},selectorButton:{backgroundColor:de.color.surface,borderRadius:12,borderWidth:1,borderColor:de.color.border,padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},selectorContent:{flex:1},placeholderText:{fontSize:13,color:de.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:de.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:de.color.surface,borderRadius:16,borderWidth:1,borderColor:de.color.border,width:"100%",maxWidth:500,maxHeight:"70%",shadowColor:"#000000",shadowOpacity:.2,shadowRadius:20,shadowOffset:{width:0,height:10},overflow:"hidden"},dropdownHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:16,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:de.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:de.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownItemSelected:{backgroundColor:de.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:de.color.text,fontFamily:Ri},instanceIdSelected:{fontWeight:"600",color:de.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:rr.semantic.success+"15",borderColor:rr.semantic.success+"40"},badgeReadOnly:{backgroundColor:rr.semantic.warning+"15",borderColor:rr.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:de.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:de.color.text,fontFamily:Ri},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as Xu}from"@buoy-gg/shared-ui/web";import{jsx as Ke,jsxs as wr}from"react/jsx-runtime";function ey({instanceId:e}){let t=La(e);return t?Ke(l,{style:ge.container,children:wr(l,{style:ge.panel,children:[Ke(l,{style:ge.header,children:Ke(u,{style:ge.headerTitle,children:"Instance Details"})}),wr(l,{style:ge.infoGrid,children:[Ke(Gr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Ke(Gr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Ke(Gr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),Ke(Gr,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?yt.semantic.warning:Et.color.textTertiary}),t.size!==void 0&&Ke(Gr,{label:"Size",value:ty(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&wr(l,{style:ge.notice,children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F512}"}),Ke(u,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&wr(l,{style:[ge.notice,ge.noticeWarning],children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Ke(u,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Ke(l,{style:ge.container,children:Ke(l,{style:ge.errorState,children:wr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Gr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return wr(l,{style:ge.infoItem,children:[Ke(u,{style:ge.infoLabel,children:e}),Ke(u,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function ty(e){if(e===0)return"0 Bytes";let t=1024,r=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,o)).toFixed(2))} ${r[o]}`}var ge=pe.create({container:{marginBottom:12},errorState:{backgroundColor:yt.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:yt.semantic.error+"40"},errorText:{fontSize:12,color:yt.semantic.error,textAlign:"center"},panel:{backgroundColor:Et.color.surface,borderRadius:12,borderWidth:1,borderColor:Et.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:Et.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:Et.color.text,textTransform:"uppercase",letterSpacing:.5},infoGrid:{padding:12,gap:10},infoItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4},infoLabel:{fontSize:12,color:Et.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:Et.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:Et.color.accent},monoValue:{fontFamily:Xu},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:yt.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:yt.semantic.success+"30"},noticeWarning:{backgroundColor:yt.semantic.warning+"10",borderColor:yt.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:yt.semantic.success,lineHeight:16},noticeTextWarning:{color:yt.semantic.warning}});E();import{getBrowserStorage as Vi,subscribeToBrowserStorage as ry}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as zn}from"@buoy-gg/shared-ui/web";ao();var Ai=0;function oy(e){let t=()=>Vi(e),r=()=>Array.from({length:t().length},(o,n)=>t().key(n)).filter(o=>o!==null&&!zn(o));return{set(o,n){t().setItem(o,String(n))},getString(o){return t().getItem(o)??void 0},getNumber(){},getBoolean(){},getBuffer(){},contains(o){return t().getItem(o)!==null},delete(o){let n=this.contains(o);return t().removeItem(o),n},getAllKeys:r,clearAll(){for(let o of r())t().removeItem(o)},get size(){return r().reduce((o,n)=>o+2*(n.length+(t().getItem(n)?.length??0)),0)},addOnValueChangedListener(o){return{remove:ry(n=>{n.area===e&&(n.key!==void 0?zn(n.key)||o(n.key):n.prevPairs?.forEach(([a])=>{zn(a)||o(a)}))})}}}}function ny(){return Dr()?["localStorage","sessionStorage"]:["sessionStorage"]}function ay(){if(typeof window>"u")return()=>{};try{Vi("sessionStorage")}catch{return()=>{}}let e=ny();if(++Ai===1)for(let r of e)qn(r,oy(r));let t=true;return()=>{if(t&&(t=false,--Ai===0))for(let r of e)jn(r)}}export{ey as MMKVInstanceInfoPanel,Zu as MMKVInstanceSelector,ju as STORAGE_OPS,Ya as StorageBrowserMode,Bn as StorageEventCard,En as StorageEventDetailContent,Rn as StorageEventDetailFooter,qu as StorageEventsSection,zu as StorageKeyCard,fa as StorageKeySection,_u as StorageKeyStatsSection,An as StorageModalWithTabs,Ru as StorageSection,pu as StorageToolView,dn as StorageTypeFilterBar,ko as batchPairsOf,In as canUndo,so as clearAllAppStorage,Ca as countByStorageType,Cu as createStorageTool,kt as detectMMKVType,il as formatMMKVValue,Ic as getMMKVClass,xa as getMMKVUnavailableMessage,lu as getValueType,Yu as isInitialScan,un as isMMKVAvailable,Jo as isTypeMatch,qr as isValueOnDevice,Tn as jumpToState,qn as registerMMKVInstance,dl as registerSecureStoreKeys,hd as requestStorageBrowserRefresh,Ha as setStorageValue,ay as startBrowserStorageCapture,vn as storageEditBlockedReason,Pt as storageEventStore,Gu as storageOpDot,Ju as storageOpOf,wu as storageSyncAdapter,vi as storageToolPreset,bd as storageValueToEditableText,xn as undoOperation,jn as unregisterMMKVInstance,ul as unregisterSecureStoreKey,gn as useAsyncStorageKeys,La as useMMKVInstance,Hc as useMMKVInstanceExists,hn as useMMKVInstances,Oc as useMMKVKeys,Ma as useMultiMMKVKeys,Za as useStorageEvents,Na as validateStorageValue};
|
|
4
|
+
registerMMKVInstance('mmkv.default', storage);`})]}),ye==="mmkv"&&xe.length>0&&Ee(l,{style:P.instanceNavbar,children:[Ee(l,{style:P.instanceNavbarHeader,children:[H(u,{style:P.instanceNavbarLabel,children:"INSTANCES"}),xe.length>Q&&H(ua,{style:{transform:[{scale:.85}]}})]}),Ee(Wr,{horizontal:true,showsHorizontalScrollIndicator:false,contentContainerStyle:P.instanceNavbarScroll,children:[(x||xe.length===1)&&Ee(O,{onPress:()=>$t(null),testID:"buoy-storage-instance-all",accessibilityRole:"button",accessibilityLabel:`All ${ae.mmkv} instances`,style:[P.instanceNavbarButton,re===null&&P.instanceNavbarButtonActive],children:[H(Za,{size:12,color:re===null?F.color.text:F.color.textSecondary}),H(u,{style:[P.instanceNavbarButtonText,re===null&&P.instanceNavbarButtonTextActive],children:"All"}),H(l,{style:P.instanceNavbarBadge,children:H(u,{style:P.instanceNavbarBadgeText,children:xe.reduce((c,h)=>c+h.keyCount,0)})})]}),xe.map((c,h)=>{let U=h>=Q;return Ee(O,{testID:`buoy-storage-instance-${c.id}`,accessibilityRole:"button",accessibilityLabel:`MMKV instance ${c.id}`,onPress:()=>{U?Se(true):$t(c.id)},style:[P.instanceNavbarButton,c.id===re&&P.instanceNavbarButtonActive,{borderColor:U?F.color.border:Sr(c.id)+"40",backgroundColor:c.id===re?Sr(c.id)+"20":F.color.surfaceElevated,opacity:U?.5:1}],children:[H(Za,{size:12,color:c.id===re?Sr(c.id):F.color.textSecondary}),H(u,{style:[P.instanceNavbarButtonText,c.id===re&&{color:Sr(c.id),fontWeight:"700"}],children:c.id}),H(l,{style:[P.instanceNavbarBadge,c.id===re&&{backgroundColor:Sr(c.id)+"30"}],children:H(u,{style:[P.instanceNavbarBadgeText,c.id===re&&{color:Sr(c.id)}],children:c.keyCount})})]},c.id)})]})]})]}),Fi=H(dd,{copyValue:jo,mmkvInstances:xe.map(c=>({id:c.id,instance:c.instance})),activeStorageType:ye,onClearComplete:Te,isSelectMode:Nt,onToggleSelectMode:No,selectedCount:nr.size}),Wi=Nt?H(wd,{selectedKeys:Qe,mmkvInstances:xe.map(c=>({id:c.id,instance:c.instance})),onDeleteComplete:Ho,onHideKeys:Br,onSelectAll:Ar,onClearSelection:Dr,totalVisibleKeys:v.length}):null,$i=z?Ee(O,{style:P.limitBanner,onPress:()=>Se(true),activeOpacity:.8,testID:"buoy-storage-locked-banner",accessibilityRole:"button",children:[Ee(l,{style:P.limitBannerContent,children:[Ee(l,{style:P.limitBannerLeft,children:[H(qs,{size:16,color:F.color.accent}),H(u,{style:P.limitBannerText,children:a?`${k} matching ${k===1?"key":"keys"} in locked storage`:`${k} keys locked`})]}),H(ua,{})]}),H(u,{style:P.limitBannerSubtext,children:a?"Upgrade to Pro to search your full storage":"Upgrade to Pro to unlock full storage access"})]}):null,_i=(()=>{let c=N.some(U=>!ze(U.key)),h;return a||!c?(h=Gs({subject:"keys",verb:"registered",search:a,total:c?1:0,waiting:{otto:"empty",title:"No storage keys",message:"Nothing is registered for this tool to read."}}),a&&c&&(h={...h,message:"No keys match. Clear the search to see them."})):se==="missing"?h={otto:"thumbsup",title:"No missing keys",message:"All required keys are present"}:se==="issues"?h={otto:"cool",title:"No issues found",message:"All storage keys are correctly configured"}:h={otto:"broken",title:"No valid keys found",message:"All keys have issues or are missing"},H(Us,{...h,testID:"buoy-storage-keys-empty"})})(),Ni=H(js,{visible:ve,onClose:()=>Se(false),featureName:"Storage Keys"});return Ee(l,{style:P.root,children:[_t>0?H(td,{onDone:()=>Tr(0)},_t):null,Ee(Wr,{testID:"buoy-storage-scroll",ref:Ye,onScroll:c=>{xr.current=c.nativeEvent.contentOffset.y},scrollEventThrottle:32,style:P.scrollContainer,contentContainerStyle:P.container,showsVerticalScrollIndicator:false,children:[H(l,{style:P.backgroundGrid}),H(Mc,{stats:Ut,tabStats:pt,healthPercentage:Mr,healthStatus:Oi,healthColor:Li,activeFilter:se,onFilterChange:Ge,activeStorageType:ye,onStorageTypeChange:or,showStatus:!te}),Pi,Oe.length>0?Ee(l,{style:P.keysSection,children:[Ee(l,{style:P.sectionHeader,children:[Ee(l,{style:P.sectionHeaderLeft,children:[Ee(u,{style:P.sectionTitle,children:[se==="all"?"KEYS":se==="missing"?"MISSING KEYS":"ISSUES TO FIX",ye!=="all"&&` (${ye.toUpperCase()})`]}),H(l,{style:P.countBadge,children:H(u,{style:P.countText,children:v.length})})]}),Fi]}),Wi,H(Sa,{title:"",count:-1,keys:v,emptyMessage:"",isSelectMode:Nt,selectedKeys:nr,onSelectionChange:rt,eventCountByKey:y,onViewHistory:p,onHideKey:c=>Br([c]),onToggleKey:qo,onDeleteKey:oo,editBlockedFor:Vr,pinnedKeys:m,onTogglePin:b,onRowRef:gt,onOpenKey:R}),$i]}):_i,H(u,{style:P.techFooter,children:"ASYNC STORAGE | MMKV | SECURE STORAGE BACKENDS"}),Ni]})]})}var P=pe.create({root:{flex:1,minHeight:0},editorOverlay:{...sa,zIndex:10},scrollContainer:{flex:1,backgroundColor:"transparent"},container:{padding:12,paddingBottom:120},backgroundGrid:{...sa,opacity:.006,backgroundColor:vr.info},techFooter:{fontSize:8,color:F.color.textTertiary,fontFamily:$r,textAlign:"center",marginTop:20,letterSpacing:1,opacity:.5},keysSection:{marginTop:8,backgroundColor:F.color.bg,borderRadius:12,padding:12,borderWidth:1,borderColor:F.color.border},sectionHeader:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,paddingBottom:6,borderBottomWidth:1,borderBottomColor:F.color.separator},sectionHeaderLeft:{flexDirection:"row",alignItems:"center",gap:8},sectionTitle:{fontSize:12,fontWeight:"600",color:F.color.textSecondary,letterSpacing:.4,textTransform:"uppercase"},countBadge:{backgroundColor:F.color.surfaceElevated,paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:F.color.border},countText:{fontSize:11,fontWeight:"600",color:F.color.text,fontFamily:$r},emptyState:{alignItems:"center",justifyContent:"center",paddingVertical:48},emptyTitle:{fontSize:16,fontWeight:"600",color:F.color.text,marginTop:12,marginBottom:8},emptySubtitle:{fontSize:13,color:F.color.textSecondary,textAlign:"center"},emptyMMKVState:{backgroundColor:F.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:F.color.border,marginTop:8,alignItems:"center"},emptyMMKVTitle:{fontSize:14,fontWeight:"600",color:F.color.text,marginBottom:6},emptyMMKVSubtitle:{fontSize:12,color:F.color.textSecondary,textAlign:"center",marginBottom:12},emptyMMKVCode:{fontSize:10,fontFamily:$r,color:F.color.accent,backgroundColor:F.color.bg,padding:12,borderRadius:8,borderWidth:1,borderColor:F.color.border,alignSelf:"stretch"},instanceNavbar:{marginTop:12,marginBottom:8,backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.border,padding:10,shadowColor:"#000",shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:2}},instanceNavbarHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8,paddingLeft:2},instanceNavbarLabel:{fontSize:9,fontWeight:"700",color:F.color.textTertiary,textTransform:"uppercase",letterSpacing:1},instanceNavbarScroll:{gap:8,paddingRight:8},instanceNavbarButton:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:F.color.border,minWidth:90},instanceNavbarButtonActive:{borderWidth:1.5,shadowColor:"#000",shadowOpacity:.1,shadowRadius:4,shadowOffset:{width:0,height:1}},instanceNavbarButtonText:{fontSize:11,fontWeight:"600",color:F.color.textSecondary,fontFamily:$r,flex:1},instanceNavbarButtonTextActive:{fontWeight:"700",color:F.color.text},instanceNavbarBadge:{backgroundColor:F.color.bg,paddingHorizontal:6,paddingVertical:2,borderRadius:6,minWidth:24,alignItems:"center"},instanceNavbarBadgeText:{fontSize:10,fontWeight:"700",color:F.color.textSecondary,fontFamily:$r},clearSearchButton:{marginTop:16,paddingHorizontal:16,paddingVertical:8,backgroundColor:F.color.surfaceElevated,borderRadius:6,borderWidth:1,borderColor:F.color.border},clearSearchText:{fontSize:13,color:F.color.text,fontWeight:"500"},limitBanner:{backgroundColor:F.color.surface,borderRadius:10,borderWidth:1,borderColor:F.color.accentBorderStrong,padding:12,marginTop:12},limitBannerContent:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},limitBannerLeft:{flexDirection:"row",alignItems:"center",gap:8},limitBannerText:{color:F.color.text,fontSize:13,fontWeight:"600"},limitBannerSubtext:{color:F.color.textTertiary,fontSize:11}});import{jsx as Bd}from"react/jsx-runtime";function ei({requiredStorageKeys:e=[],showFilters:t=false,ignoredPatterns:r=new Set,onTogglePattern:o,onAddPattern:n,searchQuery:a="",storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:p,enabledStorageTypes:s,statusFilter:g,onStatusFilterChange:f,onStatusCountsChange:C,pinnedKeys:m,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D}){return Bd(Rd,{requiredStorageKeys:e,showFilters:t,ignoredPatterns:r,onTogglePattern:o,onAddPattern:n,searchQuery:a,storageDataRef:i,eventCountByKey:y,lastWriteByKey:d,onViewHistory:p,enabledStorageTypes:s,statusFilter:g,onStatusFilterChange:f,onStatusCountsChange:C,pinnedKeys:m,onTogglePin:b,applySafeAreaInset:S,storageTypeFilter:w,onStorageTypeFilterChange:T,detailKey:I,onOpenKey:R,onCloseDetail:D})}import{ProFeatureBanner as Vd}from"@buoy-gg/shared-ui/web";E();import{useMemo as Ad}from"react";import{useEventStoreEvents as Dd}from"@buoy-gg/shared-ui/web";E();import{BaseEventStore as Md,appStorageEvent as Cn}from"@buoy-gg/shared-ui/web";function Ur(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}function xo(e){return e.storageType!=="async"||!e.data?{}:{pairs:e.data.pairs,prevPairs:e.data.prevPairs}}function ti(e){let t=e.data;if(!t)return false;let{pairs:r,prevPairs:o}=xo(e);return Ur(t.value)||Ur(t.prevValue)||Ur(r)||Ur(o)}var zd=0;function To(){return`se-${Date.now()}-${++zd}`}var Kd=class extends Md{constructor(){super({storeName:"storage",maxEvents:500});this.asyncStorageUnsubscribe=null;this.mmkvUnsubscribe=null;this.hasScannedInitialState=false}addEvent(e){let t=Cn(e);t&&super.addEvent(t)}async scanExistingState(){if(this.hasScannedInitialState)return;this.hasScannedInitialState=true;let e=new Date,t=Le.getAll();for(let{id:r,instance:o}of t)try{let n=o.getAllKeys();for(let a of n){let{value:i,type:y}=kt(o,a),d={string:"set.string",number:"set.number",boolean:"set.boolean",buffer:"set.buffer"}[y]??"set.string";this.addEvent({action:d,timestamp:e,instanceId:r,data:{key:a,value:i,valueType:y,initialScan:true},storageType:"mmkv",id:To()})}}catch{}try{let{asyncStorage:r,readMany:o}=(Jt(),Gi(Nn));if(r){let n=await r.getAllKeys();if(n.length>0){let a=await o(n);for(let[i,y]of a)this.addEvent({action:"setItem",timestamp:e,data:{key:i,value:y??void 0,initialScan:true},storageType:"async",id:To()})}}}catch{}}async startCapturing(){Nc()||await _c(),this.asyncStorageUnsubscribe||(this.asyncStorageUnsubscribe=Da(e=>{let t={...e,storageType:"async",id:To()};this.addEvent(t)})),this.mmkvUnsubscribe||(this.mmkvUnsubscribe=Un(e=>{let t={...e,storageType:"mmkv",id:To()};this.addEvent(t)})),await this.scanExistingState()}stopCapturing(){this.asyncStorageUnsubscribe&&(this.asyncStorageUnsubscribe(),this.asyncStorageUnsubscribe=null),this.mmkvUnsubscribe&&(this.mmkvUnsubscribe(),this.mmkvUnsubscribe=null)}isCapturing(){return this.asyncStorageUnsubscribe!==null||this.mmkvUnsubscribe!==null}getEventsByType(e){return this.events.filter(t=>t.storageType===e)}replaceEvents(e){let t=new Map;for(let o of this.events)ti(o)||t.set(o.id,o);let r=e.map(Cn).filter(o=>o!==null).map(o=>{let n=t.get(o.id);return!n||!ti(o)?o:{...o,data:{...o.data,value:n.data?.value,prevValue:n.data?.prevValue,...xo(n)}}});super.replaceEvents(r)}hydrateEvent(e){let t=Cn(e);if(!t)return;e=t;let r=this.events.findIndex(a=>a.id===e.id);if(r===-1)return;let o=this.events[r],n=this.events.slice();n[r]={...o,...e,timestamp:o.timestamp,data:{...o.data,...e.data}},super.replaceEvents(n)}},Lt=new Kd;function ri(e={}){let{storageType:t="all",maxEvents:r=500,enabled:o=true}=e,n=Ad(()=>t==="all"?void 0:d=>d.filter(p=>p.storageType===t),[t]),{events:a,clearEvents:i,isActive:y}=Dd(Lt,{maxEvents:r,enabled:o,select:n});return{events:a,clearEvents:i,isCapturing:y}}E();mt();import{useState as Io,useCallback as ct,useMemo as Pt,useEffect as oi,useRef as Od}from"react";import{formatRelativeTime as Eo,macOSColors as Ro,night as er,parseValue as Bo,devToolsStorageKeys as ni,GitBranch as Ld,EventStepperFooter as Pd,EventHistoryViewer as Fd,copyToClipboard as Wd,ProUpgradeModal as $d,monoFont as ai}from"@buoy-gg/shared-ui/web";import{useIsPro as _d}from"@buoy-gg/license/web";E();import{computeLineDiff as Bg,DiffType as Vg,ABSENT_VALUE as Nd,isAbsent as Ag}from"@buoy-gg/shared-ui/web/dataViewer";E();import{ThemedSplitView as Hd}from"@buoy-gg/shared-ui/web/dataViewer";E();import{diffThemes as qd,gitClassicTheme as zg,devToolsDefaultTheme as Kg}from"@buoy-gg/shared-ui/web/dataViewer";E();import{night as ii}from"@buoy-gg/shared-ui/web";import{TreeDiffViewer as jd}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as li}from"react/jsx-runtime";function Ud({oldValue:e,newValue:t,scrollEnabled:r=true}){return li(l,{style:r?si.container:si.containerInline,children:li(jd,{oldValue:e,newValue:t,theme:"dark",scrollEnabled:r})})}var si=pe.create({container:{flex:1,backgroundColor:ii.color.bg},containerInline:{backgroundColor:ii.color.bg}});E();function xn(e){switch(e){case"setItem":return"SET";case"removeItem":return"REMOVE";case"mergeItem":return"MERGE";case"clear":return"CLEAR";case"multiSet":return"MULTI SET";case"multiRemove":return"MULTI REMOVE";case"multiMerge":return"MULTI MERGE";case"set.string":case"set.number":case"set.boolean":case"set.buffer":return"SET";case"delete":return"REMOVE";case"clearAll":return"CLEAR";case"get.string":case"get.number":case"get.boolean":case"get.buffer":return"GET";default:return"UNKNOWN ACTION"}}E();import{night as Re,Lock as Gd,monoFont as Jd}from"@buoy-gg/shared-ui/web";import{jsx as Tn,jsxs as Yd}from"react/jsx-runtime";var Qd={copy:{color:Re.color.accent,backgroundColor:Re.color.accentSoft,borderColor:Re.color.accentBorderStrong,textColor:Re.color.accent},jump:{color:Re.color.warning,backgroundColor:Re.color.warningSoft,borderColor:Re.color.warning+"40",textColor:Re.color.warning},undo:{color:Re.color.info,backgroundColor:Re.color.infoSoft,borderColor:Re.color.info+"40",textColor:Re.color.info}};function In({onPress:e,text:t,type:r,disabled:o=false,locked:n=false}){let a=Qd[r],i=o||n;return Yd(O,{disabled:i,onPress:e,style:[Vo.button,{backgroundColor:i?Re.color.fill:a.backgroundColor,borderColor:i?Re.color.fillTertiary:a.borderColor,opacity:o?.5:1}],activeOpacity:.7,testID:`buoy-storage-action-${r}`,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:i},children:[n?Tn(Gd,{size:10,color:Re.color.textTertiary,style:Vo.lockIcon}):Tn(l,{style:[Vo.dot,{backgroundColor:i?Re.color.textTertiary:a.color}]}),Tn(u,{style:[Vo.text,{color:i?Re.color.textTertiary:a.textColor}],children:t})]})}var Vo=pe.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:70,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:Re.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},lockIcon:{marginRight:4},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:Jd,height:12}});E();mt();Jt();import{isDevToolsStorageKey as Zd}from"@buoy-gg/shared-ui/web";function Ft(e){return!!e&&typeof e=="object"&&e.__buoyValueOnDevice===true}async function En(e){let{action:t,data:r}=e;if(Ft(r?.prevValue)||Ft(r?.prevPairs))throw new Error("Cannot undo: previous value is still on the device \u2014 fetch getEventDetail first");switch(t){case"setItem":case"mergeItem":r?.key&&(r.prevValue===null||r.prevValue===void 0?await oe.removeItem(r.key):await oe.setItem(r.key,r.prevValue));break;case"removeItem":r?.key&&r.prevValue!==null&&r.prevValue!==void 0&&await oe.setItem(r.key,r.prevValue);break;case"multiSet":case"multiMerge":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n===null?await oe.removeItem(o):await oe.setItem(o,n);break;case"multiRemove":if(r?.prevPairs&&r.prevPairs.length>0)for(let[o,n]of r.prevPairs)n!==null&&await oe.setItem(o,n);break;case"clear":if(r?.prevPairs&&r.prevPairs.length>0){let o=r.prevPairs.filter(([,n])=>n!==null);o.length>0&&await Or(o)}break;default:throw new Error(`Cannot undo unknown action type: ${t}`)}}async function Rn(e,t){if(t<0||t>=e.length)throw new Error(`Invalid event index: ${t}`);for(let i of e){let y=i.data;if(Ft(y?.value)||Ft(y?.prevValue)||Ft(y?.pairs)||Ft(y?.prevPairs))throw new Error("Cannot jump: some event values are still on the device \u2014 fetch getEventDetail first")}let r=new Map;for(let i=0;i<=t;i++)eu(e[i],r);let o=new Set;for(let i of e)Xd(i,o);let n=[],a=[];for(let i of o){if(Zd(i))continue;let y=r.get(i);y==null?a.push(i):n.push([i,y])}a.length>0&&await sr(a),n.length>0&&await Or(n)}function Xd(e,t){let{data:r}=e;if(r){if(r.key&&t.add(r.key),r.keys)for(let o of r.keys)t.add(o);if(r.pairs)for(let[o]of r.pairs)t.add(o);if(r.prevPairs)for(let[o]of r.prevPairs)t.add(o)}}function eu(e,t){let{action:r,data:o}=e;switch(r){case"setItem":o?.key&&o?.value!==void 0&&t.set(o.key,o.value);break;case"removeItem":o?.key&&t.set(o.key,null);break;case"mergeItem":if(o?.key&&o?.value!==void 0){let n=t.get(o.key);if(n)try{let a=JSON.parse(n),i=JSON.parse(o.value),y={...a,...i};t.set(o.key,JSON.stringify(y))}catch{t.set(o.key,o.value)}else t.set(o.key,o.value)}break;case"multiSet":if(o?.pairs)for(let[n,a]of o.pairs)t.set(n,a);break;case"multiRemove":if(o?.keys)for(let n of o.keys)t.set(n,null);break;case"multiMerge":if(o?.pairs)for(let[n,a]of o.pairs){let i=t.get(n);if(i)try{let y=JSON.parse(i),d=JSON.parse(a),p={...y,...d};t.set(n,JSON.stringify(p))}catch{t.set(n,a)}else t.set(n,a)}break;case"clear":t.clear();break}}function Bn(e){let{action:t,data:r}=e;switch(t){case"setItem":case"mergeItem":case"removeItem":return!!r?.key&&!Ft(r.prevValue);case"multiSet":case"multiRemove":case"multiMerge":case"clear":return!!r?.prevPairs&&r.prevPairs.length>0&&!Ft(r.prevPairs);default:return false}}import{Fragment as tu,jsx as je,jsxs as ci}from"react/jsx-runtime";var wr=-1,Ao={prior:{label:"BEFORE #1",timestamp:"value before first event",relativeTime:"not captured",badge:"PRIOR"},absent:{label:"NO PRIOR VALUE",timestamp:"key did not exist",relativeTime:"created here",badge:"ABSENT"},scanned:{label:"ALREADY PRESENT",timestamp:"value found at startup",relativeTime:"not a write",badge:"SCANNED"}};function Do(e){switch(e){case"setItem":case"multiSet":return Ro.semantic.success;case"removeItem":case"multiRemove":case"clear":return Ro.semantic.error;case"mergeItem":case"multiMerge":return Ro.semantic.info;default:return Ro.text.muted}}function di(e){let t=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),n=String(e.getMilliseconds()).padStart(3,"0");return`${t}:${r}:${o}.${n}`}var ru={hideLineNumbers:false,disableWordDiff:false,showDiffOnly:false,compareMethod:"words",contextLines:3,lineOffset:0},ou=[];function Vn({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},disableInternalFooter:o=false}){let n=_d(),[a,i]=Io(false),[y,d]=Io("split"),[p,s]=Io(Math.max(wr,t-1)),[g,f]=Io(t),C=Od(false),m=Pt(()=>e.events.sort((ne,gt)=>ne.timestamp.getTime()-gt.timestamp.getTime()),[e.events]),b=m.length;oi(()=>{if(C.current)return;(async()=>{try{let ne=await oe.getItem(ni.storage.diffViewerMode());(ne==="split"||ne==="tree")&&d(ne),C.current=true}catch{}})()},[]),oi(()=>{let ne=Math.min(b-1,Math.max(0,t)),gt=Math.max(wr,Math.min(ne-1,t-1));s(gt),f(ne)},[t,b]);let S=ct(async ne=>{d(ne);try{await oe.setItem(ni.storage.diffViewerMode(),ne)}catch{}},[]),w=m[t],T=w?.action,I=p===wr,R=I?void 0:m[Math.max(0,Math.min(b-1,p))],D=m[Math.max(0,Math.min(b-1,g))],x=Pt(()=>{let ne=D?.data;return ne?.initialScan?"scanned":ne?.prevValue===null||ne?.prevValue===void 0?"absent":"prior"},[D]),B=Pt(()=>x==="absent"?Nd:x==="scanned"?Bo(D?.data?.value):Bo(D?.data?.prevValue),[x,D]),Q=Pt(()=>I?{index:wr,label:Ao[x].label,timestamp:Ao[x].timestamp,relativeTime:Ao[x].relativeTime,badge:je(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${er.color.textTertiary}20`}],children:je(u,{style:[tr.actionTextSmall,{color:er.color.textTertiary}],children:Ao[x].badge})})}:{index:p,label:`#${p+1} / ${b}`,timestamp:R?di(R.timestamp):"",relativeTime:R?Eo(R.timestamp):"",badge:R?je(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Do(R.action)}20`}],children:je(u,{style:[tr.actionTextSmall,{color:Do(R.action)}],children:xn(R.action)})}):void 0},[p,R,b,I,x]),ve=Pt(()=>({index:g,label:`#${g+1} / ${b}`,timestamp:D?di(D.timestamp):"",relativeTime:D?Eo(D.timestamp):"",badge:D?je(l,{style:[tr.actionBadgeSmall,{backgroundColor:`${Do(D.action)}20`}],children:je(u,{style:[tr.actionTextSmall,{color:Do(D.action)}],children:xn(D.action)})}):void 0}),[g,D,b]),Se=Pt(()=>[{key:"tree",label:"TREE VIEW"},{key:"split",label:"SPLIT VIEW"}],[]),q=ct(()=>{p>wr&&s(p-1)},[p]),ue=ct(()=>{p<g-1&&s(p+1)},[p,g]),te=ct(()=>{g>p+1&&f(g-1)},[g,p]),se=ct(()=>{g<b-1&&f(g+1)},[g,b]),Ge=Pt(()=>I?B:Bo(R?.data?.value??null),[I,B,R]),Je=Pt(()=>Bo(D?.data?.value),[D]),wt=ct(()=>y==="split"?je(Hd,{oldValue:Ge,newValue:Je,differences:ou,theme:qd.devToolsDefault,options:ru,showThemeName:false,scrollEnabled:false}):je(Ud,{oldValue:Ge,newValue:Je,scrollEnabled:false}),[Ge,Je,y]),Rt=ct(()=>{r(Math.max(0,t-1))},[t,r]),ye=ct(()=>{r(Math.min(b-1,t+1))},[t,b,r]),or=ct(async()=>{if(!n){i(true);return}if(!(!w||w.storageType==="mmkv"))try{await En(w)}catch{}},[w,n]),re=ct(async()=>{if(!n){i(true);return}if(!w||w.storageType==="mmkv")return;let ne=m.filter(_t=>_t.storageType!=="mmkv"),gt=ne.findIndex(_t=>_t.timestamp.getTime()===w.timestamp.getTime());if(gt!==-1)try{await Rn(ne,gt)}catch{}},[w,m,n]),$t=ct(async()=>{if(!w)return;let ne={action:w.action,timestamp:w.timestamp.toISOString(),data:w.data};await Wd(ne)},[w]),Ye=w?.storageType!=="mmkv",xr=Ye&&w&&Bn(w);return ci(tu,{children:[Ye&&ci(l,{style:tr.actionButtonsContainer,children:[je(In,{type:"undo",text:"UNDO",onPress:or,disabled:!xr,locked:!n}),je(In,{type:"jump",text:"JUMP",onPress:re,locked:!n}),je(In,{type:"copy",text:"COPY",onPress:$t})]}),je(Fd,{activeView:"diff",diffViewLabel:"DIFF VIEW",diffViewDescription:"Compare changes between versions",diffViewIcon:Ld,diffModeTabs:Se,activeDiffMode:y,onDiffModeChange:S,renderDiffContent:wt,scrollDiffSection:true,leftEvent:Q,rightEvent:ve,showCompareNavigation:true,onLeftPrevious:q,onLeftNext:ue,onRightPrevious:te,onRightNext:se,canLeftPrevious:p>wr,canLeftNext:p<g-1,canRightPrevious:g>p+1,canRightNext:g<b-1,disableInternalFooter:o,footerCurrentIndex:t,footerTotalItems:b,footerItemLabel:"Event",footerSubtitle:Eo(w?.timestamp),onFooterPrevious:Rt,onFooterNext:ye}),je($d,{visible:a,onClose:()=>i(false),featureName:"Storage Time-Travel"})]})}function An({conversation:e,selectedEventIndex:t=0,onEventIndexChange:r=()=>{},applySafeAreaInset:o=true}){let n=e.events.sort((i,y)=>i.timestamp.getTime()-y.timestamp.getTime()),a=n.length;return je(Pd,{currentIndex:t,totalItems:a,onPrevious:()=>r(Math.max(0,t-1)),onNext:()=>r(Math.min(a-1,t+1)),itemLabel:"Event",subtitle:Eo(n[t]?.timestamp),applySafeAreaInset:o})}var tr=pe.create({actionButtonsContainer:{flexDirection:"row",justifyContent:"center",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,backgroundColor:er.color.surface,borderBottomWidth:1,borderBottomColor:er.color.border},valueBox:{backgroundColor:er.color.bg,borderRadius:6,borderWidth:1,borderColor:er.color.border,padding:8},valueText:{fontSize:12,color:er.color.text,fontFamily:ai,lineHeight:18},actionBadgeSmall:{paddingHorizontal:6,paddingVertical:1,borderRadius:3},actionTextSmall:{fontSize:8,fontWeight:"700",fontFamily:ai}});E();import{Filter as ui,DynamicFilterView as nu,Database as au,HardDrive as iu,Shield as lu,macOSColors as Tt,night as It}from"@buoy-gg/shared-ui/web";import{jsx as Wt,jsxs as kr}from"react/jsx-runtime";function su({ignoredPatterns:e,onTogglePattern:t,onAddPattern:r,availableKeys:o=[],enabledStorageTypes:n,onToggleStorageType:a}){let i={addFilterSection:{enabled:true,placeholder:"Enter key pattern to hide...",title:"KEY FILTERS",icon:ui},availableItemsSection:{enabled:true,title:"AVAILABLE EVENT KEYS",emptyMessage:"No storage event keys available. Events will appear here once captured.",items:o},howItWorksSection:{enabled:true,title:"HOW EVENT FILTERS WORK",description:"Patterns hide matching storage keys from the event list. Storage type toggles control which storage backends are monitored.",examples:["\u2022 react_buoy \u2192 hides keys containing react_buoy","\u2022 @temp \u2192 hides @temp_user, @temp_data","\u2022 redux \u2192 hides redux-persist:root",`\u2022 ${ae.asyncFull}: show or hide captured events`,`\u2022 ${ae.mmkv}: show or hide captured events`],icon:ui},onPatternToggle:t,onPatternAdd:r,activePatterns:e};return kr(l,{style:et.container,children:[kr(l,{style:et.storageTypeSection,children:[Wt(u,{style:et.sectionTitle,children:"STORAGE TYPES"}),kr(l,{style:et.storageTypeButtons,children:[kr(O,{style:[et.storageTypeButton,n.has("async")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.warning+"40"}],onPress:()=>a("async"),testID:"buoy-storage-backend-async",accessibilityRole:"button",accessibilityLabel:`Toggle ${ae.asyncFull} capture`,accessibilityState:{selected:n.has("async")},children:[Wt(au,{size:16,color:n.has("async")?Tt.semantic.warning:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("async")&&{color:Tt.semantic.warning}],children:ae.asyncFull})]}),kr(O,{style:[et.storageTypeButton,n.has("mmkv")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.info+"40"}],onPress:()=>a("mmkv"),testID:"buoy-storage-backend-mmkv",accessibilityRole:"button",accessibilityLabel:`Toggle ${ae.mmkv} capture`,accessibilityState:{selected:n.has("mmkv")},children:[Wt(iu,{size:16,color:n.has("mmkv")?Tt.semantic.info:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("mmkv")&&{color:Tt.semantic.info}],children:ae.mmkv})]}),Ia()&&kr(O,{style:[et.storageTypeButton,n.has("secure")&&et.storageTypeButtonActive,{borderColor:Tt.semantic.success+"40"}],onPress:()=>a("secure"),testID:"buoy-storage-backend-secure",accessibilityRole:"button",accessibilityLabel:"Toggle Secure Storage capture",accessibilityState:{selected:n.has("secure")},children:[Wt(lu,{size:16,color:n.has("secure")?Tt.semantic.success:It.color.textTertiary}),Wt(u,{style:[et.storageTypeButtonText,n.has("secure")&&{color:Tt.semantic.success}],children:"Secure Storage"})]})]})]}),Wt(nu,{...i})]})}var et=pe.create({container:{flex:1},storageTypeSection:{padding:16,borderBottomWidth:1,borderBottomColor:It.color.border},sectionTitle:{fontSize:11,fontWeight:"700",color:It.color.textSecondary,letterSpacing:.8,marginBottom:12},storageTypeButtons:{flexDirection:"row",gap:8},storageTypeButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:10,paddingHorizontal:12,backgroundColor:It.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:It.color.border},storageTypeButtonActive:{backgroundColor:It.color.surface},storageTypeButtonText:{fontSize:11,fontWeight:"600",color:It.color.textTertiary}});E();import{memo as cu}from"react";import{RelativeTime as du,macOSColors as Gr,parseValue as uu,CompactRow as yu}from"@buoy-gg/shared-ui/web";import{jsx as yi}from"react/jsx-runtime";function gu(e){let t=uu(e);return t===null?"null":t===void 0?"undefined":Array.isArray(t)?"array":typeof t=="boolean"?"boolean":typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="object"?"object":"undefined"}function pu(e){switch(e){case"setItem":case"multiSet":case"set.string":case"set.number":case"set.boolean":case"set.buffer":return Gr.semantic.success;case"removeItem":case"multiRemove":case"clear":case"delete":case"clearAll":return Gr.semantic.error;case"mergeItem":case"multiMerge":return Gr.semantic.info;case"get.string":case"get.number":case"get.boolean":case"get.buffer":return Gr.semantic.warning;default:return Gr.text.muted}}function fu(e,t){return`${Array.from(e).map(r=>r==="async"?ae.async:ae.mmkv).join("/")} \xB7 ${t} op${t!==1?"s":""}`}var Dn=cu(function({data:e,onPress:t,isSelected:r=false,showChevron:o=true,testID:n}){let a=pu(e.lastAction),i=xn(e.lastAction),y=e.totalOperations??1;return yi(yu,{statusDotColor:a,statusLabel:"Storage",statusSublabel:fu(e.storageTypes,y),primaryText:e.key,badgeText:i,badgeColor:a,showChevron:o,bottomRightText:yi(du,{timestamp:e.lastEventTimestamp}),isSelected:r,onPress:t,testID:n,accessibilityLabel:`${i} ${e.key}`})});import{useIsPro as mu}from"@buoy-gg/license/web";import{Fragment as gi,jsx as M,jsxs as dt}from"react/jsx-runtime";var Yg=_s["storage.events"].free,Mn={getItem:e=>oe.getItem(e),setItem:(e,t)=>oe.setItem(e,t)},hu={storage:Mn,parse:e=>e==="browser"||e==="events"?e:void 0,serialize:e=>e},bu={storage:Mn,parse:e=>e==="true",serialize:e=>e.toString()},pi={storage:Mn,parse:e=>new Set(JSON.parse(e)),serialize:e=>JSON.stringify(Array.from(e))},vu={...pi,parse:e=>{let t=JSON.parse(e);return t.includes("@react_buoy")||t.push("@react_buoy"),new Set(t)}};function zn({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,requiredStorageKeys:a=[],inline:i=false,onTabChange:y,onRefresh:d,onEventSelect:p}){let s=mu(),g=$s("storage.events"),[f,C]=go(ur.storage.activeTab(),"browser",hu);en(()=>{y?.(f)},[f,y]);let[m,b]=ot(""),[S,w]=ot(null),[T,I]=ot(false),[R,D]=go(ur.storage.isMonitoring(),true,bu),{events:x,clearEvents:B,isCapturing:Q}=ri({enabled:R}),[ve,Se]=ot(null),[q,ue]=ot(null),[te,se]=ot(null),[Ge,Je]=ot(0),[wt,Rt]=ot(false),[ye,or]=go(ur.storage.eventFilters(),new Set(["@react_buoy","@RNAsyncStorage","redux-persist","persist:"]),vu),[re,$t]=ot("all"),[Ye,xr]=ot(new Set(["async","mmkv","secure"])),[ne,gt]=go(ur.storage.pinnedKeys(),new Set,pi),_t=Zn(null),Tr=R&&Q,[Nt,Ir]=ot("bottomSheet"),nr=De(v=>{Ir(v)},[]),Bt=De(()=>{D(v=>!v)},[]),xe=De(()=>{B(),Se(null),Je(0)},[B]),Qr=De(v=>{ue(v),se(null)},[]),Zr=De(()=>{ue(null),se(null)},[]),Xr=De(v=>{or(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Ht=De(v=>{or(k=>new Set([...k,v]))},[]),Po=De(v=>{gt(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Er=De(()=>{Rt(!wt)},[wt]),Fo=De(v=>{xr(k=>{let z=new Set(k);return z.has(v)?z.delete(v):z.add(v),z})},[]),Rr=Zn([]),ar=De(()=>{let v=Rr.current;return{timestamp:new Date().toISOString(),totalKeys:v.length,asyncStorage:v.filter(k=>k.storageType==="async").reduce((k,z)=>(k[z.key]=yo(z.value),k),{}),mmkv:v.filter(k=>k.storageType==="mmkv").reduce((k,z)=>{let j=z.instanceId||"default";return k[j]||(k[j]={}),k[j][z.key]=yo(z.value),k},{}),secure:v.filter(k=>k.storageType==="secure").reduce((k,z)=>(k[z.key]=yo(z.value),k),{})}},[]),Wo=De(async()=>{Ie.alert("Clear Storage","Choose what to clear:",[{text:"Cancel",style:"cancel"},{text:"Clear App Storage",onPress:async()=>{try{await uo()}catch{Ie.alert("Error","Failed to clear app storage")}}},{text:"Clear All (Including Dev Tools)",style:"destructive",onPress:async()=>{try{await sl()}catch{Ie.alert("Error","Failed to clear all storage")}}}])},[]),qt=v=>{let k=Ds(v);return k===null?"null":k===void 0?"undefined":Array.isArray(k)?"array":typeof k=="boolean"?"boolean":typeof k=="number"?"number":typeof k=="string"?"string":typeof k=="object"?"object":"undefined"},[eo,$o]=ot([]);en(()=>{e&&(async()=>{try{let v=await oe.getAllKeys();$o([...v].sort())}catch{}})()},[e]);let to=st(()=>{let v=new Set(eo);return x.forEach(k=>{k.data?.key&&v.add(k.data.key)}),Array.from(v).sort()},[x,eo]),N=st(()=>{let v=new Map;return x.forEach(k=>{if(!k.data?.key)return;let z=k.data.key;if(!Ye.has(k.storageType)||Array.from(ye).some(Qe=>z.includes(Qe)))return;let j=v.get(z);j?(j.events.push(k),j.totalOperations++,j.storageTypes.add(k.storageType),k.timestamp>j.lastEvent.timestamp&&(j.lastEvent=k,j.currentValue=k.data.value,j.valueType=qt(k.data.value))):v.set(z,{key:z,lastEvent:k,events:[k],totalOperations:1,currentValue:k.data.value,valueType:qt(k.data.value),storageTypes:new Set([k.storageType])})}),Array.from(v.values()).sort((k,z)=>z.lastEvent.timestamp.getTime()-k.lastEvent.timestamp.getTime())},[x,ye,Ye]),ke=st(()=>ve&&N.find(v=>v.key===ve)||null,[ve,N]),_o=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.totalOperations}),v},[N]),ro=st(()=>{let v={};return N.forEach(k=>{v[k.key]=k.lastEvent.timestamp.getTime()}),v},[N]),Te=st(()=>q&&N.find(v=>v.key===q)||null,[q,N]);en(()=>{if(!p)return;let v=ke||(te!==null?Te:null),k=ke?Ge:te;if(!v||k==null)return;let z=[...v.events].sort((Ar,Dr)=>Ar.timestamp.getTime()-Dr.timestamp.getTime()),j=z[k],Qe=z[k-1];j&&p(j),Qe&&p(Qe)},[p,ke,Ge,Te,te]);let tt=st(()=>x.filter(v=>{if(!v.data?.key||!Ye.has(v.storageType))return false;let k=v.data.key;return!Array.from(ye).some(z=>k.includes(z))}),[x,ye,Ye]),No=st(()=>Ea(tt),[tt]),rt=st(()=>re==="all"?tt:tt.filter(v=>v.storageType===re),[tt,re]),Ho=De(()=>rt.map(v=>({key:v.data?.key,action:v.action,value:yo(v.data?.value),storageType:v.storageType,timestamp:v.timestamp.toISOString()})),[rt]),Br=st(()=>rt.slice(0,g),[rt,g]),jt=st(()=>Math.max(0,rt.length-g),[rt.length,g]),qo=.8,oo=De(v=>v.id,[]),Vr=De(v=>{let k=N.find(j=>j.key===v.data?.key);if(!k)return;let z=[...k.events].sort((j,Qe)=>j.timestamp.getTime()-Qe.timestamp.getTime()).findIndex(j=>j.timestamp.getTime()===v.timestamp.getTime());Se(k.key),Je(z>=0?z:0)},[N]),jo=De(({item:v})=>{let k={key:v.data?.key||"",lastAction:v.action,totalOperations:1,lastEventTimestamp:v.timestamp,storageTypes:new Set([v.storageType]),valueType:qt(v.data?.value)};return M(Dn,{data:k,onPress:()=>Vr(v),testID:`buoy-storage-event-${v.id}`})},[Vr]);if(!e)return null;let Ut=n?ur.modal.root():ur.storage.modal(),pt=()=>{if(wt)return M(su,{ignoredPatterns:ye,onTogglePattern:Xr,onAddPattern:Ht,availableKeys:to,enabledStorageTypes:Ye,onToggleStorageType:Fo});if(f==="browser"){if(q&&Te){if(te!==null)return M(l,{style:he.contentWrapper,children:M(Vn,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,disableInternalFooter:true})});let k=[...Te.events].sort((j,Qe)=>j.timestamp.getTime()-Qe.timestamp.getTime()),z=[...k].reverse();return M(tn,{testID:"buoy-storage-history-list",style:he.flexFill,data:z,keyExtractor:j=>j.id,renderItem:({item:j})=>{let Qe=k.findIndex(Dr=>Dr.timestamp.getTime()===j.timestamp.getTime()),Ar={key:j.data?.key||"",lastAction:j.action,totalOperations:1,lastEventTimestamp:j.timestamp,storageTypes:new Set([j.storageType]),valueType:qt(j.data?.value)};return M(Dn,{data:Ar,onPress:()=>se(Qe>=0?Qe:0),testID:`buoy-storage-history-event-${j.id}`})},contentContainerStyle:he.listContent,ItemSeparatorComponent:()=>M(l,{style:he.separator}),initialNumToRender:20})}return M(ei,{requiredStorageKeys:a,ignoredPatterns:ye,onTogglePattern:Xr,onAddPattern:Ht,searchQuery:m,storageDataRef:Rr,eventCountByKey:_o,lastWriteByKey:ro,onViewHistory:Qr,enabledStorageTypes:Ye,pinnedKeys:ne,onTogglePin:Po,applySafeAreaInset:Nt==="bottomSheet",storageTypeFilter:re,onStorageTypeFilterChange:$t,detailKey:S,onOpenKey:w,onCloseDetail:()=>w(null)})}if(ke)return M(l,{style:he.contentWrapper,children:M(Vn,{conversation:ke,selectedEventIndex:Ge,onEventIndexChange:Je,disableInternalFooter:true})});let v=M(l,{style:he.eventFilterBar,children:M(gn,{active:re,onChange:$t,counts:No})});if(rt.length===0){let k=re!=="all";return dt(l,{style:he.flexFill,children:[v,M(zs,{testID:"buoy-storage-events-empty",...Tr?k?{otto:"filtering",title:`No ${re} events`,message:"Other backends have events \u2014 pick All Types to see them"}:{otto:"listening",title:"No storage events yet",message:"Storage operations will appear here"}:{otto:"paused",title:"Event listener is paused",message:"Press play to start monitoring"}})]})}return dt(l,{style:he.flexFill,children:[v,M(tn,{testID:"buoy-storage-events-list",style:he.flexFill,data:Br,renderItem:jo,keyExtractor:oo,onEndReachedThreshold:qo,contentContainerStyle:he.listContent,ListFooterComponent:jt>0?M(l,{style:he.lockedBannerContainer,children:M(Vd,{featureName:`${jt} event${jt>1?"s":""} locked`,description:"Upgrade to Pro to unlock full event history"})}):null,initialNumToRender:10,maxToRenderPerBatch:10,windowSize:10})]})},ir=ke&&ke.events.length>1?M(An,{conversation:ke,selectedEventIndex:Ge,onEventIndexChange:Je,applySafeAreaInset:Nt==="bottomSheet"}):Te&&te!==null&&Te.events.length>1?M(An,{conversation:Te,selectedEventIndex:te,onEventIndexChange:se,applySafeAreaInset:Nt==="bottomSheet"}):null,Pn=wt?()=>Rt(false):te!==null?()=>se(null):q?Zr:ke?()=>{Se(null),Je(0)}:r,Oe=wt?dt(Me,{children:[M(Me.Navigation,{onBack:()=>Rt(false)}),M(Me.Content,{title:"Filters"})]}):q?dt(Me,{children:[M(Me.Navigation,{onBack:te!==null?()=>se(null):Zr}),M(Me.Content,{title:`${q} History`,centered:true})]}):ke?dt(Me,{children:[M(Me.Navigation,{onBack:()=>{Se(null),Je(0)}}),M(Me.Content,{title:ke.key})]}):S?dt(Me,{children:[M(Me.Navigation,{onBack:()=>w(null)}),M(Me.Content,{title:S.key,centered:true,testID:"buoy-storage-detail-title"})]}):dt(Me,{children:[r&&M(Me.Navigation,{onBack:r}),M(Me.Content,{title:"",children:T?M(Ps,{value:m,onChange:b,onClear:()=>{b(""),I(false)},placeholder:"Search storage keys...",testID:"buoy-storage-search",autoFocus:true,onSubmitEditing:()=>I(false),returnKeyType:"search",containerStyle:he.headerSearchContainer}):M(As,{tabs:[{key:"browser",label:"Storage"},{key:"events",label:`Events${rt.length>0?` (${rt.length})`:""}`}],activeTab:f,testIDPrefix:"buoy-storage-tab",onTabChange:v=>{C(v),ue(null),se(null),Se(null),Je(0),w(null)}})}),dt(Me.Actions,{children:[d&&!T?M(O,{onPress:d,style:he.iconButton,testID:"buoy-storage-refresh",accessibilityLabel:"Refresh storage",accessibilityRole:"button",children:M(Os,{size:14,color:$e.color.textSecondary})}):null,M(O,{onPress:Er,testID:"buoy-storage-filters",accessibilityLabel:"Storage filters",accessibilityRole:"button",style:[he.iconButton,(ye.size>0||Ye.size<3)&&he.activeFilterButton],children:M(Ks,{size:14,color:ye.size>0||Ye.size<3?$e.color.accent:$e.color.textSecondary})}),f==="browser"&&!T&&dt(gi,{children:[M(O,{onPress:()=>I(true),testID:"buoy-storage-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",style:he.iconButton,children:M(Ls,{size:14,color:$e.color.textSecondary})}),M(ia,{value:ar,disabled:Rr.current.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-copy"})]}),f==="events"&&dt(gi,{children:[M(ia,{value:Ho,disabled:rt.length===0,buttonStyle:he.iconButton,testID:"buoy-storage-events-copy"}),M(Fs,{isEnabled:Tr,onToggle:Bt,accessibilityLabel:"Toggle storage event monitoring",testID:"buoy-storage-power"}),M(Ws,{onPress:xe,buttonStyle:he.iconButton,testID:"buoy-storage-clear-events"})]})]})]});return i?M(la,{children:dt(l,{style:he.inlineRoot,children:[M(l,{style:he.inlineHeader,...Ns,children:Oe}),pt(),ir]})}):M(la,{children:M(Vs,{visible:e,onClose:t,onBack:Pn,onMinimize:o,persistenceKey:Ut,header:{showToggleButton:true,customContent:Oe},onModeChange:nr,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,styles:{},footer:ir,footerHeight:ir?68:0,disableScrollWrapper:true,children:pt()})})}function Su(e={}){return M(zn,{...e,inline:true,visible:true,onClose:()=>{}})}var he=pe.create({inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:Ms.border.default,backgroundColor:"transparent"},headerSearchContainer:{flex:1},flexFill:{flex:1},iconButton:{width:32,height:32,borderRadius:8,backgroundColor:$e.color.buttonSurface,borderWidth:1,borderColor:$e.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:$e.color.accentSoft,borderColor:$e.color.accentBorderStrong},separator:{height:8},listContent:{paddingVertical:6},lockedBannerContainer:{marginTop:8,marginHorizontal:16},eventFilterBar:{paddingHorizontal:12,paddingTop:8,paddingBottom:4},emptyState:{flex:1,justifyContent:"center",alignItems:"center",padding:32},emptyTitle:{color:$e.color.text,fontSize:16,fontWeight:"600",marginTop:16,marginBottom:8,fontFamily:po,letterSpacing:.5,textTransform:"uppercase"},emptySubtitle:{color:$e.color.textSecondary,fontSize:14,textAlign:"center",fontFamily:po},eventNavigation:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:8},navButton:{padding:4,borderRadius:4},navButtonDisabled:{opacity:.3},eventCounter:{color:$e.color.text,fontSize:12,fontWeight:"600",fontFamily:po,paddingHorizontal:8},headerTopRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12},keyNameContainer:{flex:1,flexDirection:"row",alignItems:"center",gap:6,backgroundColor:$e.color.surfaceElevated,paddingHorizontal:10,paddingVertical:4,borderRadius:6,borderWidth:1,borderColor:$e.color.border,height:28},keyNameText:{flex:1,fontSize:13,fontWeight:"600",color:$e.color.accent,fontFamily:po,letterSpacing:.5},contentWrapper:{flex:1}});E();mt();Jt();import{approxJsonSize as fi,isDevToolsStorageKey as ut,isOverWireBudget as mi,isJsonSerializable as wu}from"@buoy-gg/shared-ui/web";var Mo=Object.freeze({__buoyValueOnDevice:true,note:"Value stays on the device \u2014 fetched on demand via getEventDetail / mmkv.get / secure.get."}),ku=16*1024,Kn=1.25*1024*1024,hi=8*1024*1024;function On(e){return e===void 0?e:mi(e,ku)?Mo:e}function zo(e,t){let r=e.data;if(!r)return e;let o=t(r.value),n=t(r.prevValue),a=xo(e),i=t(a.pairs),y=t(a.prevPairs);return o===r.value&&n===r.prevValue&&i===a.pairs&&y===a.prevPairs?e:{...e,data:{...r,value:o,prevValue:n,...e.storageType==="async"?{pairs:i,prevPairs:y}:{}}}}function bi(e){return e===void 0||!mi(e,hi)?e:wu(e)?{__buoyTruncated:true,note:`Exceeds the ${hi/(1024*1024)}MB detail limit \u2014 inspect it on-device.`}:Mo}var vi=new WeakMap,Si=new WeakMap;function Cu(e){let t=vi.get(e);if(t)return t;let r;try{let o=zo(e,On);r={event:o,bytes:fi(o,Kn).bytes}}catch{r={event:zo(e,()=>Mo),bytes:1024}}return vi.set(e,r),r}function xu(e){let t=Si.get(e);if(t)return t;let r=zo(e,n=>n===void 0?void 0:Mo),o={event:r,bytes:fi(r,Kn).bytes};return Si.set(e,o),o}function Tu(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=Cu(e[o]);if(r+n.bytes<=Kn)t[o]=n.event,r+=n.bytes;else{let a=xu(e[o]);t[o]=a.event,r+=a.bytes}}return t}function wi(e){let t=Le.get(e);if(!t)throw new Error(`No MMKV instance registered as "${e}"`);if(t.instance?.isReadOnly)throw new Error(`MMKV instance "${e}" is registered read-only`);return t.instance}var ki=[];function Iu(e){ki=e}var Eu={version:3,getSnapshot:()=>Tu(Lt.getEvents().filter(e=>{let t=e.data?.key;return!(typeof t=="string"&&ut(t))})),subscribe:e=>Lt.subscribeToEvents(e),actions:{clearEvents:()=>{Lt.clearEvents()},getRequiredKeys:()=>ki,getEventDetail:e=>{let{id:t}=e??{};if(!t)return{found:false,reason:"missing id"};let r=Lt.getEvents().find(n=>n.id===t);if(!r)return{found:false,reason:"unknown id"};let o=zo(r,bi);return{found:true,id:t,event:o}},clearAppStorage:()=>uo(),"timeTravel.undo":async e=>{let t=e?.id;if(!t)throw new Error("timeTravel.undo requires an event `id`");let r=Lt.getEvents().find(n=>n.id===t);if(!r)throw new Error(`No storage event with id "${t}"`);if(r.storageType==="mmkv")throw new Error("Time travel supports AsyncStorage events only");let o=r;if(!Bn(o))throw new Error(`Event "${t}" (${o.action}) has no previous value captured, so it cannot be undone`);return await En(o),{undone:true,action:o.action,key:o.data?.key}},"timeTravel.jump":async e=>{let{id:t,scope:r="key"}=e??{};if(!t)throw new Error("timeTravel.jump requires an event `id`");let o=Lt.getEvents().filter(y=>y.storageType!=="mmkv").slice().reverse(),n=o.find(y=>y.id===t);if(!n)throw new Error(`No AsyncStorage event with id "${t}"`);let a=r==="all"?o:o.filter(y=>y.data?.key===n.data?.key),i=a.findIndex(y=>y.id===t);if(i===-1)throw new Error(`Event "${t}" is not in the timeline`);return await Rn(a,i),{jumped:true,scope:r,replayed:i+1,of:a.length,key:n.data?.key}},"async.getAllKeys":async()=>(await oe.getAllKeys()).filter(e=>!ut(e)),"async.multiGet":async e=>(await so(e.keys)).filter(([t])=>!ut(t)),"async.getItem":e=>{let{key:t}=e;return ut(t)?Promise.resolve(null):oe.getItem(t)},"async.setItem":e=>{let{key:t,value:r}=e;return oe.setItem(t,r)},"async.removeItem":e=>oe.removeItem(e.key),"async.multiRemove":e=>sr(e.keys),"async.multiSet":e=>Or(e.pairs),"async.clear":()=>oe.clear(),"mmkv.snapshot":()=>Le.getAll().filter(({id:e})=>!ut(e)).map(({id:e,instance:t,encrypted:r,readOnly:o})=>{let n=[];try{n=t.getAllKeys().filter(a=>!ut(a)).map(a=>{let{value:i,type:y}=kt(t,a);return{key:a,value:On(i),valueType:y}})}catch{}return{id:e,encrypted:r,readOnly:o,entries:n}}),"mmkv.get":e=>{let{instanceId:t,key:r}=e??{};if(!t||!r||ut(r)||ut(t))return{found:false,reason:"missing instanceId/key"};let o=Le.get(t);if(!o)return{found:false,reason:"unknown instance"};let{value:n,type:a}=kt(o.instance,r);return{found:true,instanceId:t,key:r,value:bi(n),valueType:a}},"mmkv.set":e=>{let{instanceId:t,key:r,value:o}=e;wi(t).set(r,o)},"mmkv.remove":e=>{let{instanceId:t,key:r}=e,o=wi(t);o.remove?o.remove(r):o.delete?.(r)},"secure.keys":async()=>{let e=ee.getModule();return Promise.all(ee.getAll().filter(({key:t})=>!ut(t)).map(async({key:t,options:r,description:o})=>{let n=null;if(e&&!r.requireAuthentication)try{n=await e.getItemAsync(t,r)!=null}catch{n=null}return{key:t,description:o,keychainService:r.keychainService,requireAuthentication:r.requireAuthentication??false,hasValue:n}}))},"secure.snapshot":async()=>{let e=ee.getModule(),t=ee.getAll().filter(({key:o})=>!ut(o)),r=[];for(let{key:o,options:n,description:a}of t){let i=null;if(e&&!n.requireAuthentication)try{i=await e.getItemAsync(o,n)}catch{}r.push({key:o,description:a,keychainService:n.keychainService,requireAuthentication:n.requireAuthentication??false,value:i==null?i:On(i)})}return r},"secure.get":e=>{let{key:t}=e;if(ut(t))return null;let r=ee.getAll().find(n=>n.key===t),o=ee.getModule();return!r||!o||r.options.requireAuthentication?Promise.resolve(null):o.getItemAsync(t,r.options)},"secure.set":e=>{let{key:t,value:r}=e;return ee.setValue(t,r)},"secure.delete":e=>ee.deleteValue(e.key)}};import{jsx as Ru}from"react/jsx-runtime";var Ci=xl({id:"storage",name:"STORAGE",description:"AsyncStorage browser",slot:"both",icon:({size:e})=>Ru(kl,{size:e}),component:zn,props:{requiredStorageKeys:[],enableSharedModalDimensions:false}}),Bu=Cl(Ci,e=>(Iu(e.requiredStorageKeys||[]),{requiredStorageKeys:e.requiredStorageKeys||[],enableSharedModalDimensions:e.enableSharedModalDimensions??false}));E();import{HardDrive as Vu,CyberpunkSectionButton as Au}from"@buoy-gg/shared-ui/web";import{isDevToolsStorageKey as Du}from"@buoy-gg/shared-ui/web";import{jsx as Mu}from"react/jsx-runtime";function zu({onPress:e}){let{storageKeys:t}=mn(),r=t.filter(n=>!Du(n.key)).length,o=r;return Mu(Au,{id:"storage",title:"STORAGE",subtitle:o===0?"Empty":`${r} Async`,icon:Vu,iconColor:"#00FF88",iconBackgroundColor:"rgba(0, 255, 136, 0.1)",onPress:e,index:2})}E();import{AlertCircle as xi,CheckCircle2 as Ku,Eye as Ti,XCircle as Ii,HardDrive as Ei,Database as Ri,Shield as Ou,gameUIColors as Ko,macOSColors as ie,night as be,monoFont as Oo}from"@buoy-gg/shared-ui/web";import{DataViewer as Lu}from"@buoy-gg/shared-ui/web/dataViewer";import{jsx as Y,jsxs as Ae}from"react/jsx-runtime";var Bi=[ie.semantic.info,ie.semantic.success,ie.semantic.warning,ie.semantic.debug,"#FF6B9D","#00D9FF"];function Lo(e){let t=e.split("").reduce((r,o)=>r+o.charCodeAt(0),0);return Bi[t%Bi.length]}var Pu=e=>{switch(e){case"required_present":return{icon:Ku,color:ie.semantic.success,bgColor:ie.semantic.successBackground,borderColor:ie.semantic.success+"40",label:"REQUIRED",labelColor:ie.semantic.success};case"required_missing":return{icon:xi,color:ie.semantic.error,bgColor:ie.semantic.errorBackground,borderColor:ie.semantic.error+"50",label:"MISSING",labelColor:ie.semantic.error};case"required_wrong_value":return{icon:Ii,color:ie.semantic.warning,bgColor:ie.semantic.warningBackground,borderColor:ie.semantic.warning+"50",label:"WRONG S",labelColor:ie.semantic.warning};case"required_wrong_type":return{icon:Ii,color:ie.semantic.info,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.info+"50",label:"WRONG TYPE",labelColor:ie.semantic.info};case"optional_present":return{icon:Ti,color:ie.semantic.debug,bgColor:ie.semantic.infoBackground,borderColor:ie.semantic.debug+"40",label:"OPTIONAL",labelColor:ie.semantic.debug}}},Fu=e=>{switch(e){case"mmkv":return Ei;case"async":return Ri;case"secure":return Ou;default:return Ri}};function Wu({storageKey:e,isExpanded:t,onToggle:r}){let o=Pu(e.status),n=o.icon,a=Fu(e.storageType),i=e.value!==void 0&&e.value!==null,y=e.expectedValue!==void 0,d=e.expectedType!==void 0,p=fa(e.storageType),s=ln(e.storageType,e.instanceId);return Ae(l,{style:[K.storageKeyCard,{borderColor:o.borderColor}],children:[Ae(O,{accessibilityLabel:"Storage key card",accessibilityHint:"View storage key card","sentry-label":`ignore storage key card ${e.key}`,accessibilityRole:"button",style:K.cardHeader,onPress:r,children:[Ae(l,{style:K.cardHeaderLeft,children:[Y(l,{style:[K.iconContainer,{backgroundColor:o.bgColor}],children:Y(n,{size:14,color:o.color})}),Ae(l,{style:K.cardHeaderInfo,children:[Y(u,{style:K.storageKeyText,children:e.key}),e.description?Y(u,{style:K.descriptionText,children:e.description}):null,Ae(l,{style:K.cardHeaderMeta,children:[Y(l,{style:[K.statusBadge,{backgroundColor:o.bgColor}],children:Y(u,{style:[K.statusText,{color:o.labelColor}],children:o.label})}),Ae(l,{style:[K.storageBadge,{backgroundColor:`${p}15`}],children:[Y(a,{size:10,color:p}),Y(u,{style:[K.storageText,{color:p}],children:s})]}),e.storageType==="mmkv"&&e.instanceId&&Ae(l,{style:[K.instanceBadge,{backgroundColor:Lo(e.instanceId)+"20",borderColor:Lo(e.instanceId)+"40"}],children:[Y(Ei,{size:9,color:Lo(e.instanceId)}),Y(u,{style:[K.instanceText,{color:Lo(e.instanceId)}],children:e.instanceId})]}),i&&Y(l,{style:K.valueBadge,children:Y(u,{style:K.valueText,children:e.valueType?e.valueType.toUpperCase():Dt(e.value)})})]})]})]}),Y(l,{style:K.cardHeaderRight,children:Y(l,{style:K.actionButton,children:Y(Ti,{size:12,color:be.color.textSecondary})})})]}),t&&i&&Ae(l,{style:K.cardBody,children:[Y(l,{style:K.dataViewerContainer,children:(()=>{let g=typeof e.value=="string"?(()=>{try{return JSON.parse(e.value)}catch{return e.value}})():e.value;return typeof g=="string"||typeof g=="number"||typeof g=="boolean"?Ae(l,{style:K.simpleValueContainer,children:[Y(u,{style:K.simpleValueLabel,children:"Current Value:"}),Y(l,{style:K.simpleValueBox,children:Y(u,{style:K.simpleValueContent,selectable:true,children:String(g)})}),Ae(u,{style:K.valueTypeText,children:["Type: ",Dt(e.value)]})]}):Y(Lu,{title:"Current Value",data:g,showTypeFilter:false,rawMode:true})})()}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]}),d&&e.expectedType&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Type:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedType.toUpperCase()})}),Ae(u,{style:K.typeHelperText,children:["Current type: ",Dt(e.value)]})]}),e.lastUpdated?Y(l,{style:K.metaInfo,children:Ae(u,{style:K.metaLabel,children:["Last updated: ",e.lastUpdated.toLocaleString()]})}):null]}),t&&!i&&Ae(l,{style:K.cardBody,children:[Ae(l,{style:K.emptyValueContainer,children:[Y(xi,{size:16,color:ie.semantic.warning}),Y(u,{style:K.emptyValueText,children:"Storage key not found or empty"})]}),y&&Ae(l,{style:K.valueContainer,children:[Y(u,{style:K.valueLabel,children:"Expected Value:"}),Y(l,{style:K.expectedValueBox,children:Y(u,{style:K.expectedValueContent,selectable:true,children:e.expectedValue})})]})]})]})}var K=pe.create({storageKeyCard:{backgroundColor:be.color.surface,borderRadius:8,borderWidth:1,overflow:"hidden"},cardHeader:{padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,minWidth:0},iconContainer:{padding:6,borderRadius:6,marginRight:10},cardHeaderInfo:{flex:1,minWidth:0,gap:4},storageKeyText:{color:be.color.text,fontWeight:"500",fontSize:12,flexWrap:"wrap",flex:1},descriptionText:{color:be.color.textSecondary,fontSize:10,marginTop:2,flexWrap:"wrap"},cardHeaderMeta:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},statusBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4},statusText:{fontSize:9,fontWeight:"600",letterSpacing:.5},storageBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,flexDirection:"row",alignItems:"center",gap:4},storageText:{fontSize:9,fontWeight:"600"},instanceBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1,flexDirection:"row",alignItems:"center",gap:4},instanceText:{fontSize:9,fontWeight:"700",fontFamily:Oo,letterSpacing:.3},valueBadge:{paddingHorizontal:4,paddingVertical:2,backgroundColor:be.color.surfaceElevated,borderRadius:3},valueText:{fontSize:8,color:be.color.textSecondary,fontWeight:"500"},cardHeaderRight:{marginLeft:8},actionButton:{padding:4,borderRadius:4,backgroundColor:be.color.surfaceElevated},cardBody:{borderTopWidth:1,borderTopColor:be.color.separator,padding:12,gap:12},dataViewerContainer:{marginTop:8},simpleValueContainer:{gap:8},simpleValueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},simpleValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:10,borderWidth:1,borderColor:be.color.border},simpleValueContent:{color:Ko.success,fontSize:12,fontFamily:Oo,lineHeight:16},valueTypeText:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"},valueContainer:{gap:6},valueLabel:{color:be.color.textSecondary,fontSize:10,fontWeight:"500",textTransform:"uppercase",letterSpacing:.5},valueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},valueContent:{color:be.color.text,fontSize:10,fontFamily:Oo,lineHeight:14},expectedValueBox:{backgroundColor:be.color.bg,borderRadius:4,padding:8,borderWidth:1,borderColor:be.color.border},expectedValueContent:{color:be.color.text,fontSize:10,fontFamily:Oo,lineHeight:14},emptyValueContainer:{flexDirection:"row",alignItems:"center",gap:6,padding:8,backgroundColor:Ko.warning+"0D",borderRadius:4,borderWidth:1,borderColor:Ko.warning+"1A"},emptyValueText:{color:Ko.warning,fontSize:10,fontStyle:"italic"},typeHelperText:{color:be.color.textSecondary,fontSize:9,marginTop:4,textAlign:"center"},metaInfo:{marginTop:8},metaLabel:{color:be.color.textTertiary,fontSize:9,fontStyle:"italic"}});E();import{AlertCircle as $u,CheckCircle2 as _u,XCircle as Vi,Eye as Nu,Database as Ai,Shield as Hu}from"@buoy-gg/shared-ui/web";import{night as St}from"@buoy-gg/shared-ui/web";import{jsx as Ce,jsxs as Ue}from"react/jsx-runtime";var qu=[{key:"valid",label:"Valid Keys",description:"Correctly stored and accessible",icon:_u,color:"#10B981",textColor:"#10B981",bgColor:"rgba(16, 185, 129, 0.1)"},{key:"missing",label:"Missing Keys",description:"Required but not found",icon:$u,color:"#EF4444",textColor:"#EF4444",bgColor:"rgba(239, 68, 68, 0.1)"},{key:"wrongValue",label:"Wrong Values",description:"Stored but incorrect value",icon:Vi,color:"#F97316",textColor:"#F97316",bgColor:"rgba(249, 115, 22, 0.1)"},{key:"wrongType",label:"Wrong Types",description:"Value has incorrect data type",icon:Vi,color:"#0891B2",textColor:"#0891B2",bgColor:"rgba(8, 145, 178, 0.1)"},{key:"optional",label:"Optional Keys",description:"Available but not required",icon:Nu,color:"#8B5CF6",textColor:"#8B5CF6",bgColor:"rgba(139, 92, 246, 0.1)"}],ju=[{key:"mmkv",label:ae.mmkv,description:ae.hasSecure?"Synchronous key-value storage":"Storage for this browser tab",icon:Ai},{key:"async",label:ae.asyncFull,description:ae.hasSecure?"React Native async storage":"Persistent storage for this origin",icon:Ai},{key:"secure",label:"SecureStorage",description:"Encrypted secure storage",icon:Hu}];function Uu({stats:e}){let{totalCount:t,missingCount:r,wrongValueCount:o,wrongTypeCount:n,presentRequiredCount:a,optionalCount:i,mmkvCount:y,asyncCount:d,secureCount:p}=e;return t===0?Ue(l,{style:X.statsContainer,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE BREAKDOWN"}),Ce(l,{style:X.emptyState,children:Ce(u,{style:X.emptyStateText,children:"No storage keys detected"})})]}):Ue(l,{style:X.statsContainer,children:[Ue(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"KEY STATUS BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:qu.map(s=>{let g=0,f=false;switch(s.key){case"valid":g=a,f=g>0;break;case"missing":g=r,f=g>0;break;case"wrongValue":g=o,f=g>0;break;case"wrongType":g=n,f=g>0;break;case"optional":g=i,f=g>0;break}if(!f)return null;let C=t>0?(g/t*100).toFixed(1):"0",m=s.icon;return Ce(l,{style:X.breakdownItem,children:Ue(l,{style:X.breakdownItemRow,children:[Ue(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:s.bgColor}],children:Ce(m,{size:14,color:s.color})}),Ue(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:s.label}),Ce(u,{style:X.breakdownItemDesc,children:s.description})]})]}),Ue(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:s.textColor}],children:g}),Ue(u,{style:X.breakdownPercentage,children:[C,"%"]})]})]})},s.key)})})]}),(y>0||d>0||p>0)&&Ue(l,{style:X.breakdownSection,children:[Ce(u,{style:X.sectionTitle,children:"STORAGE TYPE BREAKDOWN"}),Ce(l,{style:X.breakdownList,children:ju.map(s=>{let g=0,f=false;switch(s.key){case"mmkv":g=y,f=g>0;break;case"async":g=d,f=g>0;break;case"secure":g=p,f=g>0;break}if(!f)return null;let C=t>0?(g/t*100).toFixed(1):"0",m=s.icon,b=fa(s.key);return Ce(l,{style:X.breakdownItem,children:Ue(l,{style:X.breakdownItemRow,children:[Ue(l,{style:X.breakdownItemLeft,children:[Ce(l,{style:[X.breakdownIcon,{backgroundColor:`${b}15`}],children:Ce(m,{size:14,color:b})}),Ue(l,{style:X.breakdownItemInfo,children:[Ce(u,{style:X.breakdownItemLabel,children:s.label}),Ce(u,{style:X.breakdownItemDesc,children:s.description})]})]}),Ue(l,{style:X.breakdownItemRight,children:[Ce(u,{style:[X.breakdownCount,{color:b}],children:g}),Ue(u,{style:X.breakdownPercentage,children:[C,"%"]})]})]})},s.key)})})]})]})}var X=pe.create({statsContainer:{marginBottom:24,backgroundColor:St.color.surface,borderRadius:8,padding:16,borderWidth:1,borderColor:St.color.border},sectionTitle:{color:St.color.textSecondary,fontSize:12,fontWeight:"500",marginBottom:16,textTransform:"uppercase",letterSpacing:.5},breakdownSection:{gap:12,marginBottom:20},breakdownList:{gap:12},breakdownItem:{backgroundColor:St.color.surfaceElevated,padding:12,borderRadius:8,borderWidth:1,borderColor:St.color.border},breakdownItemRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breakdownItemLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1,minWidth:0},breakdownIcon:{padding:8,borderRadius:8},breakdownItemInfo:{flex:1,minWidth:0},breakdownItemLabel:{color:St.color.text,fontSize:14,fontWeight:"500"},breakdownItemDesc:{color:St.color.textSecondary,fontSize:12},breakdownItemRight:{alignItems:"flex-end"},breakdownCount:{fontSize:16,fontWeight:"600"},breakdownPercentage:{color:St.color.textTertiary,fontSize:10},emptyState:{padding:16,backgroundColor:St.color.surfaceElevated,borderRadius:6,alignItems:"center"},emptyStateText:{color:St.color.textTertiary,fontSize:11,textAlign:"center"}});E();import{Database as Gu,CyberpunkSectionButton as Ju}from"@buoy-gg/shared-ui/web";import{jsx as Yu}from"react/jsx-runtime";function Qu({onPress:e,eventCount:t=0}){let r=t>0?`${t} events`:"Monitoring";return Yu(Ju,{id:"storage-events",title:"EVENTS",subtitle:r,icon:Gu,iconColor:"#00E5FF",iconBackgroundColor:"rgba(0, 229, 255, 0.1)",onPress:e,index:3})}E();import{macOSColors as Jr}from"@buoy-gg/shared-ui/web";var Zu=["SET","GET","MERGE","DELETE","CLEAR"],Xu={SET:Jr.semantic.info,GET:Jr.text.muted,MERGE:Jr.semantic.debug,DELETE:Jr.semantic.error,CLEAR:Jr.semantic.warning};function ey(e){return Xu[e]}function ty(e){let t=e.action;return t==="clear"||t==="clearAll"?"CLEAR":t.startsWith("get.")?"GET":t==="removeItem"||t==="multiRemove"||t==="delete"?"DELETE":t==="mergeItem"||t==="multiMerge"?"MERGE":"SET"}function ry(e){return!!e.data?.initialScan}E();import{useState as oy}from"react";import{macOSColors as rr,night as de,monoFont as Di}from"@buoy-gg/shared-ui/web";import{jsx as le,jsxs as it}from"react/jsx-runtime";function ny({selectedInstanceId:e,onSelectInstance:t,showRefreshButton:r=true}){let[o,n]=oy(false),{instances:a,instanceCount:i,refresh:y}=Sn(false),d=a.find(s=>s.id===e),p=s=>{t(s),n(false)};return pn()?i===0?le(l,{style:_.container,children:it(l,{style:_.emptyState,children:[le(u,{style:_.emptyStateTitle,children:"No MMKV Instances Registered"}),le(u,{style:_.emptyStateDescription,children:"Register MMKV instances using registerMMKVInstance() to monitor them in dev tools."}),r&&le(O,{style:_.refreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:_.refreshButtonText,children:"\u21BB Refresh"})})]})}):it(l,{style:_.container,children:[it(O,{style:_.selectorButton,onPress:()=>n(true),activeOpacity:.7,children:[le(l,{style:_.selectorContent,children:d?le(Mi,{instance:d,isSelected:true}):le(u,{style:_.placeholderText,children:"Select MMKV Instance"})}),le(u,{style:_.dropdownArrow,children:"\u25BC"})]}),le(aa,{visible:o,transparent:true,animationType:"fade",onRequestClose:()=>n(false),children:le(O,{style:_.modalOverlay,activeOpacity:1,onPress:()=>n(false),children:it(l,{style:_.dropdownContainer,children:[it(l,{style:_.dropdownHeader,children:[it(u,{style:_.dropdownTitle,children:["Select MMKV Instance (",i,")"]}),r&&le(O,{style:_.headerRefreshButton,onPress:y,activeOpacity:.7,children:le(u,{style:_.headerRefreshText,children:"\u21BB"})})]}),le(Wr,{style:_.dropdownList,children:a.map(s=>le(O,{style:[_.dropdownItem,s.id===e&&_.dropdownItemSelected],onPress:()=>p(s.id),activeOpacity:.7,children:le(Mi,{instance:s,isSelected:s.id===e})},s.id))})]})})})]}):le(l,{style:_.container,children:it(l,{style:_.unavailableState,children:[it(u,{style:_.unavailableTitle,children:[ae.mmkv," Not Available"]}),le(u,{style:_.unavailableDescription,children:Ra()})]})})}function Mi({instance:e,isSelected:t}){return it(l,{style:_.instanceRow,children:[it(l,{style:_.instanceLeft,children:[le(u,{style:[_.instanceId,t&&_.instanceIdSelected],numberOfLines:1,children:e.id}),it(l,{style:_.instanceBadges,children:[e.encrypted&&le(l,{style:[_.badge,_.badgeEncrypted],children:le(u,{style:_.badgeText,children:"\u{1F512} Encrypted"})}),e.readOnly&&le(l,{style:[_.badge,_.badgeReadOnly],children:le(u,{style:_.badgeText,children:"\u{1F441}\uFE0F Read-only"})})]})]}),it(l,{style:_.instanceRight,children:[le(u,{style:_.keyCount,children:e.keyCount}),le(u,{style:_.keyCountLabel,children:"keys"})]})]})}var _=pe.create({container:{marginBottom:12},unavailableState:{backgroundColor:rr.semantic.warning+"15",borderRadius:12,padding:20,borderWidth:1,borderColor:rr.semantic.warning+"40",alignItems:"center",gap:12},unavailableTitle:{fontSize:14,fontWeight:"600",color:rr.semantic.warning},unavailableDescription:{fontSize:12,color:de.color.textSecondary,textAlign:"center",lineHeight:18},emptyState:{backgroundColor:de.color.surface,borderRadius:12,padding:20,borderWidth:1,borderColor:de.color.border,alignItems:"center",gap:12},emptyStateTitle:{fontSize:14,fontWeight:"600",color:de.color.text},emptyStateDescription:{fontSize:12,color:de.color.textTertiary,textAlign:"center",lineHeight:18},refreshButton:{marginTop:8,paddingHorizontal:16,paddingVertical:8,backgroundColor:de.color.accentSoft,borderRadius:8,borderWidth:1,borderColor:de.color.accentBorderStrong},refreshButtonText:{fontSize:12,fontWeight:"600",color:de.color.accent},selectorButton:{backgroundColor:de.color.surface,borderRadius:12,borderWidth:1,borderColor:de.color.border,padding:12,flexDirection:"row",alignItems:"center",justifyContent:"space-between",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},selectorContent:{flex:1},placeholderText:{fontSize:13,color:de.color.placeholder,fontStyle:"italic"},dropdownArrow:{fontSize:10,color:de.color.textTertiary,marginLeft:8},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:20},dropdownContainer:{backgroundColor:de.color.surface,borderRadius:16,borderWidth:1,borderColor:de.color.border,width:"100%",maxWidth:500,maxHeight:"70%",shadowColor:"#000000",shadowOpacity:.2,shadowRadius:20,shadowOffset:{width:0,height:10},overflow:"hidden"},dropdownHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:16,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownTitle:{fontSize:14,fontWeight:"600",color:de.color.text},headerRefreshButton:{padding:4},headerRefreshText:{fontSize:18,color:de.color.accent},dropdownList:{maxHeight:400},dropdownItem:{padding:12,borderBottomWidth:1,borderBottomColor:de.color.separator},dropdownItemSelected:{backgroundColor:de.color.accentSoft},instanceRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12},instanceLeft:{flex:1,gap:6},instanceId:{fontSize:13,fontWeight:"500",color:de.color.text,fontFamily:Di},instanceIdSelected:{fontWeight:"600",color:de.color.accent},instanceBadges:{flexDirection:"row",flexWrap:"wrap",gap:6},badge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},badgeEncrypted:{backgroundColor:rr.semantic.success+"15",borderColor:rr.semantic.success+"40"},badgeReadOnly:{backgroundColor:rr.semantic.warning+"15",borderColor:rr.semantic.warning+"40"},badgeText:{fontSize:9,fontWeight:"500",color:de.color.textSecondary},instanceRight:{alignItems:"flex-end"},keyCount:{fontSize:16,fontWeight:"600",color:de.color.text,fontFamily:Di},keyCountLabel:{fontSize:9,color:de.color.textTertiary,textTransform:"uppercase",letterSpacing:.5}});E();import{macOSColors as yt,night as Et,monoFont as ay}from"@buoy-gg/shared-ui/web";import{jsx as Ke,jsxs as Cr}from"react/jsx-runtime";function iy({instanceId:e}){let t=Wa(e);return t?Ke(l,{style:ge.container,children:Cr(l,{style:ge.panel,children:[Ke(l,{style:ge.header,children:Ke(u,{style:ge.headerTitle,children:"Instance Details"})}),Cr(l,{style:ge.infoGrid,children:[Ke(Yr,{label:"Instance ID",value:t.id,valueStyle:ge.monoValue}),Ke(Yr,{label:"Keys",value:`${t.keyCount} ${t.keyCount===1?"key":"keys"}`,highlight:true}),Ke(Yr,{label:"Encryption",value:t.encrypted?"\u{1F512} Encrypted":"\u{1F513} Not encrypted",valueColor:t.encrypted?yt.semantic.success:Et.color.textTertiary}),Ke(Yr,{label:"Access",value:t.readOnly?"\u{1F441}\uFE0F Read-only":"\u270F\uFE0F Read-write",valueColor:t.readOnly?yt.semantic.warning:Et.color.textTertiary}),t.size!==void 0&&Ke(Yr,{label:"Size",value:ly(t.size),valueStyle:ge.monoValue})]}),t.encrypted&&Cr(l,{style:ge.notice,children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F512}"}),Ke(u,{style:ge.noticeText,children:"This instance is encrypted. Values are protected at rest."})]}),t.readOnly&&Cr(l,{style:[ge.notice,ge.noticeWarning],children:[Ke(u,{style:ge.noticeIcon,children:"\u{1F441}\uFE0F"}),Ke(u,{style:[ge.noticeText,ge.noticeTextWarning],children:"Read-only mode. Cannot modify values in this instance."})]})]})}):Ke(l,{style:ge.container,children:Ke(l,{style:ge.errorState,children:Cr(u,{style:ge.errorText,children:["Instance not found: ",e]})})})}function Yr({label:e,value:t,valueStyle:r,valueColor:o,highlight:n}){return Cr(l,{style:ge.infoItem,children:[Ke(u,{style:ge.infoLabel,children:e}),Ke(u,{style:[ge.infoValue,r,o&&{color:o},n&&ge.infoValueHighlight],children:t})]})}function ly(e){if(e===0)return"0 Bytes";let t=1024,r=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${parseFloat((e/Math.pow(t,o)).toFixed(2))} ${r[o]}`}var ge=pe.create({container:{marginBottom:12},errorState:{backgroundColor:yt.semantic.error+"15",borderRadius:12,padding:12,borderWidth:1,borderColor:yt.semantic.error+"40"},errorText:{fontSize:12,color:yt.semantic.error,textAlign:"center"},panel:{backgroundColor:Et.color.surface,borderRadius:12,borderWidth:1,borderColor:Et.color.border,overflow:"hidden",shadowColor:"#000000",shadowOpacity:.03,shadowRadius:8,shadowOffset:{width:0,height:2}},header:{padding:12,borderBottomWidth:1,borderBottomColor:Et.color.separator},headerTitle:{fontSize:11,fontWeight:"600",color:Et.color.text,textTransform:"uppercase",letterSpacing:.5},infoGrid:{padding:12,gap:10},infoItem:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:4},infoLabel:{fontSize:12,color:Et.color.textTertiary,fontWeight:"500"},infoValue:{fontSize:12,color:Et.color.text,fontWeight:"500"},infoValueHighlight:{fontSize:14,fontWeight:"600",color:Et.color.accent},monoValue:{fontFamily:ay},notice:{flexDirection:"row",alignItems:"center",gap:8,padding:10,margin:12,marginTop:0,backgroundColor:yt.semantic.success+"10",borderRadius:8,borderWidth:1,borderColor:yt.semantic.success+"30"},noticeWarning:{backgroundColor:yt.semantic.warning+"10",borderColor:yt.semantic.warning+"30"},noticeIcon:{fontSize:14},noticeText:{flex:1,fontSize:11,color:yt.semantic.success,lineHeight:16},noticeTextWarning:{color:yt.semantic.warning}});E();import{getBrowserStorage as zi,subscribeToBrowserStorage as sy}from"@buoy-gg/shared-ui/web/utils";import{isDevToolsStorageKey as Ln}from"@buoy-gg/shared-ui/web";lo();var Ki=0;function cy(e){let t=()=>zi(e),r=()=>Array.from({length:t().length},(n,a)=>t().key(a)).filter(n=>n!==null&&!Ln(n)),o=n=>{try{return JSON.parse(t().getItem(n)??"")}catch{return}};return{set(n,a){t().setItem(n,String(a))},getString(n){let a=typeof o(n);return a==="number"||a==="boolean"?void 0:t().getItem(n)??void 0},getNumber(n){let a=o(n);return typeof a=="number"?a:void 0},getBoolean(n){let a=o(n);return typeof a=="boolean"?a:void 0},getBuffer(){},contains(n){return t().getItem(n)!==null},delete(n){let a=this.contains(n);return t().removeItem(n),a},getAllKeys:r,clearAll(){for(let n of r())t().removeItem(n)},get size(){return r().reduce((n,a)=>n+2*(a.length+(t().getItem(a)?.length??0)),0)},addOnValueChangedListener(n){return{remove:sy(a=>{a.area===e&&(a.key!==void 0?Ln(a.key)||n(a.key):a.prevPairs?.forEach(([i])=>{Ln(i)||n(i)}))})}}}}function dy(){return zr()?["localStorage","sessionStorage"]:["sessionStorage"]}function uy(){if(typeof window>"u")return()=>{};try{zi("sessionStorage")}catch{return()=>{}}let e=dy();if(++Ki===1)for(let r of e)Gn(r,cy(r));let t=true;return()=>{if(t&&(t=false,--Ki===0))for(let r of e)Jn(r)}}export{iy as MMKVInstanceInfoPanel,ny as MMKVInstanceSelector,Zu as STORAGE_OPS,ei as StorageBrowserMode,Dn as StorageEventCard,Vn as StorageEventDetailContent,An as StorageEventDetailFooter,Qu as StorageEventsSection,Wu as StorageKeyCard,Sa as StorageKeySection,Uu as StorageKeyStatsSection,zn as StorageModalWithTabs,zu as StorageSection,Su as StorageToolView,gn as StorageTypeFilterBar,xo as batchPairsOf,Bn as canUndo,uo as clearAllAppStorage,Ea as countByStorageType,Bu as createStorageTool,kt as detectMMKVType,dl as formatMMKVValue,Dc as getMMKVClass,Ra as getMMKVUnavailableMessage,gu as getValueType,ry as isInitialScan,pn as isMMKVAvailable,Qo as isTypeMatch,Ur as isValueOnDevice,Rn as jumpToState,Gn as registerMMKVInstance,pl as registerSecureStoreKeys,Cd as requestStorageBrowserRefresh,Ga as setStorageValue,uy as startBrowserStorageCapture,kn as storageEditBlockedReason,Lt as storageEventStore,ey as storageOpDot,ty as storageOpOf,Eu as storageSyncAdapter,Ci as storageToolPreset,xd as storageValueToEditableText,En as undoOperation,Jn as unregisterMMKVInstance,fl as unregisterSecureStoreKey,mn as useAsyncStorageKeys,Wa as useMMKVInstance,Yc as useMMKVInstanceExists,Sn as useMMKVInstances,Hc as useMMKVKeys,La as useMultiMMKVKeys,ri as useStorageEvents,Ua as validateStorageValue};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/storage",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.76",
|
|
4
4
|
"description": "Inspect supported AsyncStorage data, registered MMKV instances and registered SecureStore keys in a React Native app.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"./lib/web/**/*.mjs"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@buoy-gg/floating-tools-core": "^7.0.
|
|
42
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
41
|
+
"@buoy-gg/floating-tools-core": "^7.0.76",
|
|
42
|
+
"@buoy-gg/shared-ui": "^7.0.76"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"@buoy-gg/license": "7.0.
|
|
45
|
+
"@buoy-gg/license": "7.0.76",
|
|
46
46
|
"react": "*"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@types/react": "^19.1.0",
|
|
51
51
|
"@types/react-native": "^0.73.0",
|
|
52
52
|
"typescript": "~5.8.3",
|
|
53
|
-
"@buoy-gg/license": "^7.0.
|
|
53
|
+
"@buoy-gg/license": "^7.0.76"
|
|
54
54
|
},
|
|
55
55
|
"react-native-builder-bob": {
|
|
56
56
|
"source": "src",
|