react-native-inapp-inspector 2.3.24 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +26 -5
  2. package/dist/commonjs/components/AnalyticsDetail.js +15 -12
  3. package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
  4. package/dist/commonjs/components/AppHeaderLogo.js +4 -6
  5. package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
  6. package/dist/commonjs/components/ConsoleLogCard.js +92 -80
  7. package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
  8. package/dist/commonjs/components/EndOfListFooter.js +27 -5
  9. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1 -1
  10. package/dist/commonjs/components/Inspector/AnalyticsTab.js +27 -299
  11. package/dist/commonjs/components/Inspector/ConsoleTab.js +36 -94
  12. package/dist/commonjs/components/Inspector/CrashDetail.js +11 -10
  13. package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
  14. package/dist/commonjs/components/Inspector/DebuggingTab.js +13 -13
  15. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +107 -71
  16. package/dist/commonjs/components/Inspector/FabLauncher.js +8 -9
  17. package/dist/commonjs/components/Inspector/InspectorHeader.js +93 -70
  18. package/dist/commonjs/components/Inspector/LogDetail.js +10 -7
  19. package/dist/commonjs/components/Inspector/MainScreen.js +66 -30
  20. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
  21. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
  22. package/dist/commonjs/components/Inspector/NetworkDetail.js +29 -28
  23. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +1 -1
  24. package/dist/commonjs/components/Inspector/NetworkTab.js +87 -85
  25. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
  26. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
  27. package/dist/commonjs/components/Inspector/PushCard.d.ts +4 -0
  28. package/dist/commonjs/components/Inspector/PushCard.js +89 -0
  29. package/dist/commonjs/components/Inspector/PushDetail.d.ts +4 -0
  30. package/dist/commonjs/components/Inspector/PushDetail.js +190 -0
  31. package/dist/commonjs/components/Inspector/PushTab.d.ts +3 -0
  32. package/dist/commonjs/components/Inspector/PushTab.js +45 -0
  33. package/dist/commonjs/components/Inspector/ReduxDetail.js +16 -13
  34. package/dist/commonjs/components/Inspector/ReduxTab.js +109 -106
  35. package/dist/commonjs/components/Inspector/SettingsPanel.js +230 -134
  36. package/dist/commonjs/components/Inspector/StorageTab.js +55 -51
  37. package/dist/commonjs/components/Inspector/TabBar.js +30 -26
  38. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +2 -2
  39. package/dist/commonjs/components/JsonViewer.js +151 -159
  40. package/dist/commonjs/components/LogCard.js +34 -38
  41. package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
  42. package/dist/commonjs/components/ModuleErrorBoundary.d.ts +24 -0
  43. package/dist/commonjs/components/ModuleErrorBoundary.js +33 -0
  44. package/dist/commonjs/components/NetworkIcons.d.ts +3 -3
  45. package/dist/commonjs/components/NetworkIcons.js +10 -6
  46. package/dist/commonjs/components/SegmentedTabs.d.ts +8 -2
  47. package/dist/commonjs/components/SegmentedTabs.js +11 -7
  48. package/dist/commonjs/components/ShareButton.d.ts +11 -0
  49. package/dist/commonjs/components/ShareButton.js +6 -0
  50. package/dist/commonjs/constants/index.js +1 -1
  51. package/dist/commonjs/constants/version.d.ts +1 -1
  52. package/dist/commonjs/constants/version.js +1 -1
  53. package/dist/commonjs/customHooks/crashHandler.js +4 -4
  54. package/dist/commonjs/customHooks/networkLogger.js +1 -2
  55. package/dist/commonjs/customHooks/pushNotificationLogger.d.ts +19 -0
  56. package/dist/commonjs/customHooks/pushNotificationLogger.js +1 -0
  57. package/dist/commonjs/helpers/index.d.ts +6 -0
  58. package/dist/commonjs/helpers/index.js +4 -4
  59. package/dist/commonjs/helpers/memoryManager.d.ts +2 -2
  60. package/dist/commonjs/helpers/memoryManager.js +1 -1
  61. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  62. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  63. package/dist/commonjs/helpers/settingsStore.js +1 -1
  64. package/dist/commonjs/helpers/shareFormatter.d.ts +13 -0
  65. package/dist/commonjs/helpers/shareFormatter.js +7 -0
  66. package/dist/commonjs/i18n/index.d.ts +35 -0
  67. package/dist/commonjs/i18n/index.js +1 -1
  68. package/dist/commonjs/i18n/locales/ar.json +1 -0
  69. package/dist/commonjs/i18n/locales/de.json +1 -0
  70. package/dist/commonjs/i18n/locales/en.json +1 -1
  71. package/dist/commonjs/i18n/locales/es.json +1 -0
  72. package/dist/commonjs/i18n/locales/fr.json +1 -0
  73. package/dist/commonjs/i18n/locales/hi.json +1 -0
  74. package/dist/commonjs/i18n/locales/ja.json +1 -0
  75. package/dist/commonjs/i18n/locales/ko.json +1 -0
  76. package/dist/commonjs/i18n/locales/pt.json +1 -0
  77. package/dist/commonjs/i18n/locales/ru.json +1 -0
  78. package/dist/commonjs/i18n/locales/zh.json +1 -0
  79. package/dist/commonjs/index.d.ts +6 -5
  80. package/dist/commonjs/index.js +4 -4
  81. package/dist/commonjs/push.d.ts +4 -0
  82. package/dist/commonjs/push.js +1 -0
  83. package/dist/commonjs/styles/AppColors.d.ts +40 -0
  84. package/dist/commonjs/styles/AppColors.js +1 -1
  85. package/dist/commonjs/styles/index.js +1 -1
  86. package/dist/commonjs/types/enums.d.ts +30 -20
  87. package/dist/commonjs/types/enums.js +1 -1
  88. package/dist/commonjs/types/index.d.ts +10 -0
  89. package/dist/commonjs/types/interfaces.d.ts +63 -7
  90. package/dist/esm/components/AnalyticsDetail.js +84 -81
  91. package/dist/esm/components/AnalyticsEventCard.js +20 -17
  92. package/dist/esm/components/AppHeaderLogo.js +5 -7
  93. package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
  94. package/dist/esm/components/ConsoleLogCard.js +98 -86
  95. package/dist/esm/components/EndOfListFooter.d.ts +5 -1
  96. package/dist/esm/components/EndOfListFooter.js +36 -14
  97. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +14 -14
  98. package/dist/esm/components/Inspector/AnalyticsTab.js +44 -316
  99. package/dist/esm/components/Inspector/ConsoleTab.js +55 -113
  100. package/dist/esm/components/Inspector/CrashDetail.js +53 -52
  101. package/dist/esm/components/Inspector/CrashTab.js +74 -64
  102. package/dist/esm/components/Inspector/DebuggingTab.js +33 -33
  103. package/dist/esm/components/Inspector/DeviceInfoTab.js +174 -138
  104. package/dist/esm/components/Inspector/FabLauncher.js +41 -42
  105. package/dist/esm/components/Inspector/InspectorHeader.js +138 -115
  106. package/dist/esm/components/Inspector/LogDetail.js +24 -21
  107. package/dist/esm/components/Inspector/MainScreen.js +98 -62
  108. package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
  109. package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
  110. package/dist/esm/components/Inspector/NetworkDetail.js +88 -87
  111. package/dist/esm/components/Inspector/NetworkFilterModal.js +8 -8
  112. package/dist/esm/components/Inspector/NetworkTab.js +132 -130
  113. package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
  114. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
  115. package/dist/esm/components/Inspector/PushCard.d.ts +4 -0
  116. package/dist/esm/components/Inspector/PushCard.js +89 -0
  117. package/dist/esm/components/Inspector/PushDetail.d.ts +4 -0
  118. package/dist/esm/components/Inspector/PushDetail.js +190 -0
  119. package/dist/esm/components/Inspector/PushTab.d.ts +3 -0
  120. package/dist/esm/components/Inspector/PushTab.js +45 -0
  121. package/dist/esm/components/Inspector/ReduxDetail.js +40 -37
  122. package/dist/esm/components/Inspector/ReduxTab.js +155 -152
  123. package/dist/esm/components/Inspector/SettingsPanel.js +380 -284
  124. package/dist/esm/components/Inspector/StorageTab.js +177 -173
  125. package/dist/esm/components/Inspector/TabBar.js +38 -34
  126. package/dist/esm/components/Inspector/UpdateAvailableModal.js +1 -1
  127. package/dist/esm/components/JsonViewer.js +161 -169
  128. package/dist/esm/components/LogCard.js +38 -42
  129. package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
  130. package/dist/esm/components/ModuleErrorBoundary.d.ts +24 -0
  131. package/dist/esm/components/ModuleErrorBoundary.js +33 -0
  132. package/dist/esm/components/NetworkIcons.d.ts +3 -3
  133. package/dist/esm/components/NetworkIcons.js +7 -3
  134. package/dist/esm/components/SegmentedTabs.d.ts +8 -2
  135. package/dist/esm/components/SegmentedTabs.js +12 -8
  136. package/dist/esm/components/ShareButton.d.ts +11 -0
  137. package/dist/esm/components/ShareButton.js +6 -0
  138. package/dist/esm/constants/index.js +1 -1
  139. package/dist/esm/constants/version.d.ts +1 -1
  140. package/dist/esm/constants/version.js +1 -1
  141. package/dist/esm/customHooks/crashHandler.js +6 -6
  142. package/dist/esm/customHooks/networkLogger.js +1 -2
  143. package/dist/esm/customHooks/pushNotificationLogger.d.ts +19 -0
  144. package/dist/esm/customHooks/pushNotificationLogger.js +1 -0
  145. package/dist/esm/helpers/index.d.ts +6 -0
  146. package/dist/esm/helpers/index.js +4 -4
  147. package/dist/esm/helpers/memoryManager.d.ts +2 -2
  148. package/dist/esm/helpers/memoryManager.js +1 -1
  149. package/dist/esm/helpers/remoteConfig.js +1 -1
  150. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  151. package/dist/esm/helpers/settingsStore.js +1 -1
  152. package/dist/esm/helpers/shareFormatter.d.ts +13 -0
  153. package/dist/esm/helpers/shareFormatter.js +7 -0
  154. package/dist/esm/i18n/index.d.ts +35 -0
  155. package/dist/esm/i18n/index.js +1 -1
  156. package/dist/esm/i18n/locales/ar.json +1 -0
  157. package/dist/esm/i18n/locales/de.json +1 -0
  158. package/dist/esm/i18n/locales/en.json +1 -1
  159. package/dist/esm/i18n/locales/es.json +1 -0
  160. package/dist/esm/i18n/locales/fr.json +1 -0
  161. package/dist/esm/i18n/locales/hi.json +1 -0
  162. package/dist/esm/i18n/locales/ja.json +1 -0
  163. package/dist/esm/i18n/locales/ko.json +1 -0
  164. package/dist/esm/i18n/locales/pt.json +1 -0
  165. package/dist/esm/i18n/locales/ru.json +1 -0
  166. package/dist/esm/i18n/locales/zh.json +1 -0
  167. package/dist/esm/index.d.ts +6 -5
  168. package/dist/esm/index.js +7 -7
  169. package/dist/esm/push.d.ts +4 -0
  170. package/dist/esm/push.js +1 -0
  171. package/dist/esm/styles/AppColors.d.ts +40 -0
  172. package/dist/esm/styles/AppColors.js +1 -1
  173. package/dist/esm/styles/index.js +1 -1
  174. package/dist/esm/types/enums.d.ts +30 -20
  175. package/dist/esm/types/enums.js +1 -1
  176. package/dist/esm/types/index.d.ts +10 -0
  177. package/dist/esm/types/interfaces.d.ts +63 -7
  178. package/package.json +53 -24
  179. package/src/native/NativeInspector.ts +0 -1
  180. package/dist/commonjs/bundle.d.ts +0 -2
  181. package/dist/commonjs/bundle.js +0 -1
  182. package/dist/commonjs/components/BrandSquareIcon.d.ts +0 -5
  183. package/dist/commonjs/components/BrandSquareIcon.js +0 -112
  184. package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
  185. package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
  186. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
  187. package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
  188. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
  189. package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
  190. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
  191. package/dist/commonjs/customHooks/performanceTracker.js +0 -63
  192. package/dist/commonjs/performance.d.ts +0 -2
  193. package/dist/commonjs/performance.js +0 -1
  194. package/dist/esm/bundle.d.ts +0 -2
  195. package/dist/esm/bundle.js +0 -1
  196. package/dist/esm/components/BrandSquareIcon.d.ts +0 -5
  197. package/dist/esm/components/BrandSquareIcon.js +0 -112
  198. package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
  199. package/dist/esm/components/Inspector/BundleTab.js +0 -1297
  200. package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
  201. package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
  202. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
  203. package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
  204. package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
  205. package/dist/esm/customHooks/performanceTracker.js +0 -63
  206. package/dist/esm/performance.d.ts +0 -2
  207. package/dist/esm/performance.js +0 -1
@@ -1,129 +1,71 @@
1
- import D,{useCallback as $,useMemo as N,useRef as J}from"react";import{FlatList as Z,Platform as ee,Pressable as Se,ScrollView as U,Text as T,TextInput as Ce,View as S}from"react-native";import{useInspector as Te}from"./InspectorContext";import{useTranslation as xe}from"../../i18n";import I from"../TouchableScale";import Ie from"../AnimatedEntrance";import{ConsoleLogCard as Ve}from"../ConsoleLogCard";import Fe from"../EmptyState";import Ae from"../EndOfListFooter";import b from"../../styles";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as V}from"../../styles/AppFonts";import{SearchIcon as Oe,ClearIcon as Re,SortArrowIcon as Pe,TrashIcon as Be,LayersIcon as Le,UserIcon as He,InfoCircleIcon as Ee,WarningTriangleIcon as We,ErrorCircleIcon as De,AnalyticsIcon as $e,HeaderPauseIcon as Ne}from"../NetworkIcons";const Ue=D.memo(()=>{const{t:A}=xe(),{logSearch:F,setLogSearch:B,logSortOrder:G,setLogSortOrder:M,handleDelete:Q,logFilters:C,setLogFilters:O,logCounts:R,filteredConsoleLogs:k,visibleConsoleLogs:E,isConsolePaused:L,setIsConsolePaused:Y}=Te(),X=J(null),_=$(({item:o,index:r})=><Ie index={r}distance={8}>
2
- <Ve item={o}searchStr={F}/>
3
- </Ie>,[F]),j=$((o,r)=>o?.id?.toString()??r.toString(),[]),K=N(()=>{const o=E.length,r=k.length;if(C.has("all")||!Array.from(C).some(v=>v!=="all"))return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
4
- <T style={{fontFamily:V.interMedium,fontSize:11,color:e.grayTextWeak,letterSpacing:.2}}>
5
- {r===o?`Showing ${o} logs`:`Showing ${r} of ${o} logs`}
6
- </T>
7
- </S>;{const v=Array.from(C).filter(P=>P!=="all").map(P=>P==="user-log"?"Log":P==="analytics"?"Analytics":P.charAt(0).toUpperCase()+P.slice(1));return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
8
- <T style={{fontFamily:V.interMedium,fontSize:11,color:e.grayTextWeak,letterSpacing:.2}}>
9
- Filtered by {v.join(", ")} ({r} of {o} logs)
10
- </T>
11
- </S>}},[E.length,k.length,C]),[H,W]=D.useState(!1),q=N(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]","[WARN]","[ERROR]","[SUCCESS]"],[]);return<S style={{flex:1}}>
1
+ import W,{useCallback as $,useMemo as k,useRef as oo}from"react";import{FlatList as So,Platform as fo,Pressable as Co,ScrollView as D,Text as L,TextInput as Io,View as S}from"react-native";import{useInspector as To}from"./InspectorContext";import{useTranslation as xo}from"../../i18n";import E from"../TouchableScale";import Ao from"../AnimatedEntrance";import{ConsoleLogCard as Lo}from"../ConsoleLogCard";import Vo from"../EmptyState";import Bo from"../EndOfListFooter";import T from"../../styles";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as z}from"../../styles/AppFonts";import{LogFilter as V}from"../../types";import{SearchIcon as Fo,ClearIcon as Eo,SortArrowIcon as Ho,TrashIcon as Po,LayersIcon as Ro,UserIcon as Wo,InfoCircleIcon as $o,WarningTriangleIcon as No,ErrorCircleIcon as Oo,AnalyticsIcon as Uo}from"../NetworkIcons";const Do=W.memo(()=>{const{t:w}=xo(),{logSearch:f,setLogSearch:B,logSortOrder:G,setLogSortOrder:v,handleDelete:M,logFilters:b,setLogFilters:H,logCounts:x,filteredConsoleLogs:C,visibleConsoleLogs:N}=To(),_=oo(null),[O,Q]=W.useState(100),P=k(()=>C.slice(0,O),[C,O]),Y=$(({item:o,index:t})=><Ao index={t}distance={8}>
2
+ <Lo item={o}searchStr={f}/>
3
+ </Ao>,[f]),K=$((o,t)=>({length:148,offset:148*t,index:t}),[]),X=$((o,t)=>o?.id?.toString()??t.toString(),[]),j=k(()=>{const o=N.length,t=C.length;if(b.has("all")||!Array.from(b).some(F=>F!=="all"))return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
4
+ <L style={{fontFamily:z.interMedium,fontSize:11,color:e.grayTextWeak,letterSpacing:.2}}>
5
+ {t===o?`Showing ${o} logs`:`Showing ${t} of ${o} logs`}
6
+ </L>
7
+ </S>;{const F=Array.from(b).filter(I=>I!=="all").map(I=>I==="user-log"?"Log":I==="analytics"?"Analytics":I.charAt(0).toUpperCase()+I.slice(1));return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
8
+ <L style={{fontFamily:z.interMedium,fontSize:11,color:e.grayTextWeak,letterSpacing:.2}}>
9
+ Filtered by {F.join(", ")} ({t} of {o} logs)
10
+ </L>
11
+ </S>}},[N.length,C.length,b]),[R,U]=W.useState(!1),q=k(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]"],[]),J=k(()=>[{id:V.All,label:w("common.all","All"),count:x.all?.split("/")?.[0]??"0",color:e.purple,Icon:Ro},{id:V.UserLog,label:w("console.log","Log"),count:x["user-log"]?.split("/")?.[0]??"0",color:e.teal600,Icon:Wo},{id:V.Info,label:w("console.info","Info"),count:x.info?.split("/")?.[0]??"0",color:e.sky600,Icon:$o},{id:V.Warn,label:w("console.warning","Warn"),count:x.warn?.split("/")?.[0]??"0",color:e.amber600,Icon:No},{id:V.Error,label:w("console.error","Error"),count:x.error?.split("/")?.[0]??"0",color:e.errorColor,Icon:Oo},{id:V.Analytics,label:w("console.analytics","Analytics"),count:x.analytics?.split("/")?.[0]??"0",color:e.violet600,Icon:Uo}],[x,w]);return<S style={{flex:1}}>
12
12
  <S style={{backgroundColor:e.white,borderBottomWidth:1,borderBottomColor:e.dividerColor,paddingBottom:6}}>
13
- <S style={[b.toolbarRow,{marginTop:12,marginBottom:8}]}>
14
- <S style={[b.searchContainer,H&&{borderColor:e.purple,borderWidth:1.5}]}>
15
- <Oe color={H?e.purple:e.grayTextWeak}size={16}/>
16
- <Ce placeholder={A("console.searchPlaceholder")}placeholderTextColor={e.grayTextWeak}value={F}onChangeText={B}onFocus={()=>W(!0)}onBlur={()=>W(!1)}style={b.searchInput}autoCorrect={!1}autoCapitalize="none"/>
17
- {F.length>0&&<S style={{flexDirection:"row",alignItems:"center",gap:4}}>
13
+ <S style={[T.toolbarRow,{marginTop:12,marginBottom:8}]}>
14
+ <S style={[T.searchContainer,R&&{borderColor:e.purple,borderWidth:1.5}]}>
15
+ <Fo color={R?e.purple:e.grayTextWeak}size={16}/>
16
+ <Io placeholder={w("console.searchPlaceholder")}placeholderTextColor={e.grayTextWeak}value={f}onChangeText={B}onFocus={()=>U(!0)}onBlur={()=>U(!1)}style={T.searchInput}autoCorrect={!1}autoCapitalize="none"/>
17
+ {f.length>0&&<S style={{flexDirection:"row",alignItems:"center",gap:4}}>
18
18
  <S style={{backgroundColor:`${e.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:2}}>
19
- <T style={{color:e.purple,fontSize:10,fontFamily:V.interBold}}>
20
- {k.length}
21
- </T>
19
+ <L style={{color:e.purple,fontSize:10,fontFamily:z.interBold}}>
20
+ {C.length}
21
+ </L>
22
22
  </S>
23
- <Se onPress={()=>B("")}hitSlop={10}style={b.clearBtn}>
24
- <Re color={e.grayTextWeak}size={14}/>
25
- </Se>
23
+ <Co onPress={()=>B("")}hitSlop={10}style={T.clearBtn}>
24
+ <Eo color={e.grayTextWeak}size={14}/>
25
+ </Co>
26
26
  </S>}
27
27
  </S>
28
28
 
29
- <S style={b.toolbarRight}>
30
- <I style={[b.toolbarBtn,L&&{borderColor:`${e.darkOrange}50`,backgroundColor:`${e.darkOrange}18`}]}onPress={()=>Y(o=>!o)}hitSlop={6}>
31
- <Ne isPaused={L}color={L?e.darkOrange:e.grayTextStrong}size={16}/>
32
- </I>
33
- <I style={b.toolbarBtn}onPress={()=>M(o=>o==="newest"?"oldest":"newest")}hitSlop={10}>
34
- <Pe color={e.grayTextStrong}size={18}direction={G==="newest"?"down":"up"}/>
35
- </I>
36
- <I style={[b.toolbarBtn,{borderColor:`${e.errorColor}38`,backgroundColor:`${e.errorColor}0F`}]}onPress={Q}hitSlop={6}>
37
- <Be color={e.errorColor}size={15}/>
38
- </I>
29
+ <S style={T.toolbarRight}>
30
+ <E style={T.toolbarBtn}onPress={()=>v(o=>o==="newest"?"oldest":"newest")}hitSlop={10}>
31
+ <Ho color={e.grayTextStrong}size={18}direction={G==="newest"?"down":"up"}/>
32
+ </E>
33
+ <E style={[T.toolbarBtn,{borderColor:`${e.errorColor}38`,backgroundColor:`${e.errorColor}0F`}]}onPress={M}hitSlop={6}>
34
+ <Po color={e.errorColor}size={15}/>
35
+ </E>
39
36
  </S>
40
37
  </S>
41
38
 
42
39
 
43
- {(H||F.length>0)&&<U horizontal showsHorizontalScrollIndicator={!1}style={{marginBottom:6,maxHeight:30}}contentContainerStyle={{paddingHorizontal:16,flexDirection:"row",alignItems:"center",gap:6}}>
44
- {q.map(o=>{const r=F.includes(o);return<I key={o}onPress={()=>{B(r?t=>t.replace(o,"").trim():t=>t?`${t} ${o}`.trim():o)}}>
45
- <S style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:r?e.purple:`${e.purple}14`,borderWidth:1,borderColor:r?e.purple:`${e.purple}30`}}>
46
- <T style={{fontFamily:V.interBold,fontSize:10,color:r?e.white:e.purple}}>
40
+ {(R||f.length>0)&&<D horizontal showsHorizontalScrollIndicator={!1}style={{marginBottom:6,maxHeight:30}}contentContainerStyle={{paddingHorizontal:16,flexDirection:"row",alignItems:"center",gap:6}}>
41
+ {q.map(o=>{const t=f.includes(o);return<E key={o}onPress={()=>{B(t?r=>r.replace(o,"").trim():r=>r?`${r} ${o}`.trim():o)}}>
42
+ <S style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:t?e.purple:`${e.purple}14`,borderWidth:1,borderColor:t?e.purple:`${e.purple}30`}}>
43
+ <L style={{fontFamily:z.interBold,fontSize:10,color:t?e.white:e.purple}}>
47
44
  {o}
48
- </T>
45
+ </L>
49
46
  </S>
50
- </I>})}
51
- </U>}
47
+ </E>})}
48
+ </D>}
52
49
 
53
- <U horizontal showsHorizontalScrollIndicator={!1}style={{marginVertical:4,maxHeight:46}}contentContainerStyle={{paddingHorizontal:16,paddingBottom:4,flexDirection:"row",alignItems:"center",gap:8}}>
54
-
55
- {(()=>{const o=C.has("all");return<I onPress={()=>{O(new Set(["all"]))}}>
56
- <S style={[b.statusFilterChip,{backgroundColor:o?e.indigo600Alt:e.indigo50,borderColor:o?e.indigo600:e.indigo400,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.indigo600Alt,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
57
- <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
58
- <Le size={13}color={o?e.white:e.indigo600Alt}/>
59
- <T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.indigo600Alt,fontFamily:V.interBold}]}>
60
- {A("common.all","All")} ({R.all})
61
- </T>
62
- </S>
63
- </S>
64
- </I>})()}
65
-
66
-
67
- {(()=>{const o=C.has("user-log");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("user-log")?t.delete("user-log"):t.add("user-log"),t.size===0&&t.add("all"),t})}}>
68
- <S style={[b.statusFilterChip,{backgroundColor:o?e.teal600:e.teal100,borderColor:o?e.teal600:e.teal400,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.teal600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
69
- <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
70
- <He size={13}color={o?e.white:e.teal600}/>
71
- <T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.teal600,fontFamily:V.interBold}]}>
72
- {A("console.log","Log")} ({R["user-log"]})
73
- </T>
74
- </S>
75
- </S>
76
- </I>})()}
77
-
78
-
79
- {(()=>{const o=C.has("info");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("info")?t.delete("info"):t.add("info"),t.size===0&&t.add("all"),t})}}>
80
- <S style={[b.statusFilterChip,{backgroundColor:o?e.sky600:e.sky100,borderColor:o?e.blue700:e.sky400,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.sky600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
81
- <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
82
- <Ee size={13}color={o?e.white:e.sky600}/>
83
- <T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.sky600,fontFamily:V.interBold}]}>
84
- {A("console.info","Info")} ({R.info})
85
- </T>
86
- </S>
87
- </S>
88
- </I>})()}
89
-
90
-
91
- {(()=>{const o=C.has("warn");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("warn")?t.delete("warn"):t.add("warn"),t.size===0&&t.add("all"),t})}}>
92
- <S style={[b.statusFilterChip,{backgroundColor:o?e.amber600:e.amber100,borderColor:o?e.amber700:e.amber200,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.amber600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
93
- <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
94
- <We size={13}color={o?e.white:e.amber700}/>
95
- <T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.amber800Warm,fontFamily:V.interBold}]}>
96
- {A("console.warning","Warn")} ({R.warn})
97
- </T>
98
- </S>
99
- </S>
100
- </I>})()}
101
-
102
-
103
- {(()=>{const o=C.has("error");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("error")?t.delete("error"):t.add("error"),t.size===0&&t.add("all"),t})}}>
104
- <S style={[b.statusFilterChip,{backgroundColor:o?e.red500:e.red100,borderColor:o?e.red600:e.errorBorder,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.red500,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
105
- <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
106
- <De size={13}color={o?e.white:e.red500}/>
107
- <T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.redErrorText,fontFamily:V.interBold}]}>
108
- {A("console.error","Error")} ({R.error})
109
- </T>
110
- </S>
111
- </S>
112
- </I>})()}
113
-
114
-
115
- {(()=>{const o=C.has("analytics");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("analytics")?t.delete("analytics"):t.add("analytics"),t.size===0&&t.add("all"),t})}}>
116
- <S style={[b.statusFilterChip,{backgroundColor:o?e.violet600:e.purple100,borderColor:o?e.purple700:e.purple200,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.violet600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
117
- <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
118
- <$e size={13}color={o?e.white:e.violet600}/>
119
- <T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.purpleText,fontFamily:V.interBold}]}>
120
- {A("console.analytics","Analytics")} ({R.analytics})
121
- </T>
50
+
51
+ <S style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:12,gap:6}}>
52
+ <D horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
53
+ {J.map(o=>{const t=o.id==="all"?b.has("all"):b.has(o.id)&&!b.has("all"),r=o.color||e.purple,F=t?e.white:r,I=o.Icon;return<E key={o.id}onPress={()=>{o.id==="all"?H(new Set(["all"])):H(Z=>{const A=new Set(Z);return A.delete("all"),A.has(o.id)?A.delete(o.id):A.add(o.id),A.size===0&&A.add("all"),A})}}>
54
+ <S style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:t?r:`${r}12`,borderWidth:1,borderColor:t?r:`${r}30`,gap:5}}>
55
+ <I size={11}color={F}/>
56
+ <L style={{fontFamily:z.interBold,fontSize:10.5,color:t?e.white:e.primaryBlack}}>
57
+ {o.label}
58
+ </L>
59
+ <S style={{backgroundColor:t?"rgba(255,255,255,0.25)":`${r}20`,paddingHorizontal:5,paddingVertical:1,borderRadius:8}}>
60
+ <L style={{fontFamily:z.interBold,fontSize:9,color:t?e.white:r}}>
61
+ {o.count}
62
+ </L>
63
+ </S>
122
64
  </S>
123
- </S>
124
- </I>})()}
125
- </U>
65
+ </E>})}
66
+ </D>
67
+ </S>
126
68
  </S>
127
69
 
128
- <Z ref={X}data={k}keyExtractor={j}ListHeaderComponent={K}renderItem={_}initialNumToRender={12}maxToRenderPerBatch={8}windowSize={5}removeClippedSubviews={ee.OS==="android"}renderToHardwareTextureAndroid={!0}ListEmptyComponent={<Fe isSearch={F.length>0||!C.has("all")}searchQuery={F}customTitle={F.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{B(""),O(new Set(["all"]))}}/>}ListFooterComponent={k.length>0?<Ae count={k.length}label="logs"/>:null}contentContainerStyle={[b.listContent,k.length===0&&{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
129
- </S>});export default Ue;
70
+ <So ref={_}data={P}keyExtractor={X}ListHeaderComponent={j}renderItem={Y}getItemLayout={K}initialNumToRender={15}maxToRenderPerBatch={10}windowSize={9}removeClippedSubviews={fo.OS==="android"}renderToHardwareTextureAndroid={!0}ListEmptyComponent={<Vo isSearch={f.length>0||!b.has("all")}searchQuery={f}customTitle={f.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{B(""),H(new Set(["all"]))}}/>}ListFooterComponent={C.length>0?<Bo count={P.length}totalCount={C.length}label="logs"hasMore={P.length<C.length}onLoadMore={()=>Q(o=>o+10)}/>:null}contentContainerStyle={[T.listContent,C.length===0&&{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
71
+ </S>});export default Do;
@@ -1,4 +1,4 @@
1
- import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollView as U,StyleSheet as ie,Text as S,TextInput as Ce,View as C}from"react-native";import{useTranslation as Te}from"../../i18n";import{useInspector as xe}from"./InspectorContext";import H from"../TouchableScale";import Se from"../SegmentedTabs";import Q from"../HighlightText";import _ from"../JsonViewer";import $ from"../CopyButton";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as B}from"../../styles/AppFonts";import{exportCrashReport as Ve,parseCrashStackTrace as Be}from"../../customHooks/crashHandler";import{copyToClipboard as q}from"../../helpers";import{SearchIcon as Ie,ClearIcon as Fe,CopyIcon as K,TerminalIcon as Re,LayersIcon as X,ClockIcon as Le,CircleCheckIcon as Y,GlobeIcon as De,AppleIcon as He,AndroidIcon as Ae,StackTraceIcon as We,DiagnosticsIcon as $e,TrailIcon as Oe,RawJsonIcon as Me,AppFramesIcon as Ee,AllFramesIcon as Ge}from"../NetworkIcons";const je=ae.memo(()=>{const{t:V}=Te(),{selectedCrash:T}=xe(),[F,Z]=D("stack"),[R,E]=D(""),[I,G]=D("app"),[A,j]=D(!1),[J,N]=D(null);if(!T)return null;const z=L(()=>T.parsedStack&&T.parsedStack.length>0?T.parsedStack:T.stack?Be(T.stack):[],[T]),ee=L(()=>{try{return JSON.parse(JSON.stringify(T))}catch{return T}},[T]),v=L(()=>z.filter(x=>x.isAppCode),[z]),P=L(()=>I==="app"&&v.length>0?v:z,[I,v,z]),O=L(()=>v[0]||z[0]||null,[v,z]),re=()=>{const x=Ve(T);q(x,"Crash Report"),j(!0),setTimeout(()=>j(!1),2e3)},te=(x,k)=>{const M=x.raw||`${x.method}@${x.file}:${x.lineNumber}:${x.column}`;q(M,"Stack Frame"),N(k),setTimeout(()=>N(null),1500)},oe=[{key:"stack",label:V("crash.tabStack",{count:z.length}),icon:x=><We size={12}color={x?e.white:e.grayText}/>},{key:"diagnostics",label:V("crash.tabDiagnostics"),icon:x=><$e size={12}color={x?e.white:e.grayText}/>},{key:"breadcrumbs",label:V("crash.tabTrail",{count:T.breadcrumbs?.length||0}),icon:x=><Oe size={12}color={x?e.white:e.grayText}/>},{key:"raw",label:V("crash.tabRawJson"),icon:x=><Me size={12}color={x?e.white:e.grayText}/>}];return<C style={{flex:1,backgroundColor:e.grayBackground}}>
1
+ import ae,{useMemo as L,useState as H}from"react";import{Platform as W,ScrollView as E,StyleSheet as ie,Text as S,TextInput as Ce,View as C}from"react-native";import{useTranslation as Te}from"../../i18n";import{useInspector as xe}from"./InspectorContext";import D from"../TouchableScale";import Se from"../SegmentedTabs";import Q from"../HighlightText";import _ from"../JsonViewer";import $ from"../CopyButton";import Be from"../ShareButton";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as V}from"../../styles/AppFonts";import{exportCrashReport as Ve,parseCrashStackTrace as ke}from"../../customHooks/crashHandler";import{copyToClipboard as q}from"../../helpers";import{shareCrashReport as Ie}from"../../helpers/shareFormatter";import{SearchIcon as Fe,ClearIcon as Re,CopyIcon as K,TerminalIcon as Le,LayersIcon as X,ClockIcon as He,CircleCheckIcon as Y,GlobeIcon as De,AppleIcon as Ae,AndroidIcon as We,StackTraceIcon as $e,DiagnosticsIcon as Me,TrailIcon as Oe,RawJsonIcon as Ge,AppFramesIcon as Je,AllFramesIcon as Ne}from"../NetworkIcons";const Pe=ae.memo(()=>{const{t:B}=Te(),{selectedCrash:T}=xe(),[F,Z]=H("stack"),[R,G]=H(""),[I,j]=H("app"),[A,J]=H(!1),[N,P]=H(null);if(!T)return null;const z=L(()=>T.parsedStack&&T.parsedStack.length>0?T.parsedStack:T.stack?ke(T.stack):[],[T]),ee=L(()=>{try{return JSON.parse(JSON.stringify(T))}catch{return T}},[T]),v=L(()=>z.filter(x=>x.isAppCode),[z]),U=L(()=>I==="app"&&v.length>0?v:z,[I,v,z]),M=L(()=>v[0]||z[0]||null,[v,z]),re=()=>{const x=Ve(T);q(x,"Crash Report"),J(!0),setTimeout(()=>J(!1),2e3)},te=(x,k)=>{const O=x.raw||`${x.method}@${x.file}:${x.lineNumber}:${x.column}`;q(O,"Stack Frame"),P(k),setTimeout(()=>P(null),1500)},oe=[{key:"stack",label:B("crash.tabStack",{count:z.length}),icon:x=><$e size={12}color={x?e.white:e.grayText}/>},{key:"diagnostics",label:B("crash.tabDiagnostics"),icon:x=><Me size={12}color={x?e.white:e.grayText}/>},{key:"breadcrumbs",label:B("crash.tabTrail",{count:T.breadcrumbs?.length||0}),icon:x=><Oe size={12}color={x?e.white:e.grayText}/>},{key:"raw",label:B("crash.tabRawJson"),icon:x=><Ge size={12}color={x?e.white:e.grayText}/>}];return<C style={{flex:1,backgroundColor:e.grayBackground}}>
2
2
 
3
3
  <C style={{paddingHorizontal:8,paddingTop:6}}>
4
4
  <C style={r.infoBar}>
@@ -8,7 +8,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
8
8
  <C style={[r.pillBadge,{backgroundColor:T.isFatal?e.errorCardBg:e.amberBg,borderColor:T.isFatal?e.errorBorder:e.amberWarmBorder}]}>
9
9
  <C style={[r.statusDot,{backgroundColor:T.isFatal?e.red600:e.amber600}]}/>
10
10
  <S style={[r.pillBadgeText,{color:T.isFatal?e.redErrorText:e.amberWarmText}]}>
11
- {T.isFatal?V("crash.fatalCrash"):V("crash.handledException")}
11
+ {T.isFatal?B("crash.fatalCrash"):B("crash.handledException")}
12
12
  </S>
13
13
  </C>
14
14
 
@@ -22,12 +22,13 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
22
22
  <C style={{flex:1}}/>
23
23
 
24
24
 
25
- <H onPress={re}hitSlop={10}style={[r.actionButton,A&&{backgroundColor:e.mintGreenBg,borderColor:e.mintGreenBorder}]}>
25
+ <Be onShare={()=>Ie(T)}/>
26
+ <D onPress={re}hitSlop={10}style={[r.actionButton,A&&{backgroundColor:e.mintGreenBg,borderColor:e.mintGreenBorder}]}>
26
27
  {A?<Y color={e.mintGreenText}size={12}/>:<K color={e.purple}size={12}/>}
27
28
  <S style={[r.actionButtonText,A&&{color:e.mintGreenText}]}>
28
- {V(A?"crash.copied":"crash.copyReport")}
29
+ {B(A?"crash.copied":"crash.copyReport")}
29
30
  </S>
30
- </H>
31
+ </D>
31
32
  </C>
32
33
 
33
34
 
@@ -36,28 +37,28 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
36
37
  </S>
37
38
 
38
39
 
39
- <U horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.metaRow}>
40
- {O&&<C style={r.metaChip}>
41
- <Re color={e.grayText}size={11}/>
40
+ <E horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.metaRow}>
41
+ {M&&<C style={r.metaChip}>
42
+ <Le color={e.grayText}size={11}/>
42
43
  <S style={r.metaChipText}numberOfLines={2}>
43
- {O.file}:{O.lineNumber}
44
+ {M.file}:{M.lineNumber}
44
45
  </S>
45
46
  </C>}
46
47
 
47
48
  <C style={r.metaChip}>
48
- <Le color={e.grayText}size={11}/>
49
+ <He color={e.grayText}size={11}/>
49
50
  <S style={r.metaChipText}>
50
51
  {T.timeStr||new Date(T.timestamp).toLocaleTimeString()}
51
52
  </S>
52
53
  </C>
53
54
 
54
55
  {T.deviceInfo?.platform&&<C style={r.metaChip}>
55
- {T.deviceInfo.platform==="ios"?<He color={e.grayText}size={11}/>:<Ae color={e.grayText}size={11}/>}
56
+ {T.deviceInfo.platform==="ios"?<Ae color={e.grayText}size={11}/>:<We color={e.grayText}size={11}/>}
56
57
  <S style={r.metaChipText}>
57
58
  {T.deviceInfo.platform.toUpperCase()} {T.deviceInfo.osVersion}
58
59
  </S>
59
60
  </C>}
60
- </U>
61
+ </E>
61
62
  </C>
62
63
  </C>
63
64
 
@@ -69,59 +70,59 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
69
70
 
70
71
  {(F==="stack"||F==="raw")&&<C style={{paddingHorizontal:12,paddingBottom:6}}>
71
72
  <C style={r.searchContainer}>
72
- <Ie color={e.grayText}size={14}/>
73
- <Ce style={r.searchInput}placeholder={V("crash.searchDetailPlaceholder")}placeholderTextColor={e.grayTextWeak}value={R}onChangeText={E}autoCapitalize="none"autoCorrect={!1}/>
74
- {R.length>0&&<H onPress={()=>E("")}hitSlop={10}>
75
- <Fe color={e.grayText}size={13}/>
76
- </H>}
73
+ <Fe color={e.grayText}size={14}/>
74
+ <Ce style={r.searchInput}placeholder={B("crash.searchDetailPlaceholder")}placeholderTextColor={e.grayTextWeak}value={R}onChangeText={G}autoCapitalize="none"autoCorrect={!1}/>
75
+ {R.length>0&&<D onPress={()=>G("")}hitSlop={10}>
76
+ <Re color={e.grayText}size={13}/>
77
+ </D>}
77
78
  </C>
78
79
  </C>}
79
80
 
80
81
 
81
- <U style={{flex:1}}contentContainerStyle={{padding:12,paddingBottom:40,gap:12}}>
82
+ <E style={{flex:1}}contentContainerStyle={{padding:12,paddingBottom:40,gap:12}}>
82
83
 
83
84
  {F==="stack"&&<C style={{gap:10}}>
84
85
 
85
86
  <C style={r.filterChipsRow}>
86
- <H onPress={()=>G("app")}style={[r.filterChip,I==="app"&&r.filterChipActive]}>
87
- <Ee size={12}color={I==="app"?e.white:e.purple}/>
87
+ <D onPress={()=>j("app")}style={[r.filterChip,I==="app"&&r.filterChipActive]}>
88
+ <Je size={12}color={I==="app"?e.white:e.purple}/>
88
89
  <S style={[r.filterChipText,I==="app"&&r.filterChipTextActive]}>
89
- {V("crash.appFrames",{count:v.length})}
90
+ {B("crash.appFrames",{count:v.length})}
90
91
  </S>
91
- </H>
92
+ </D>
92
93
 
93
- <H onPress={()=>G("all")}style={[r.filterChip,I==="all"&&r.filterChipActive]}>
94
- <Ge size={12}color={I==="all"?e.white:e.purple}/>
94
+ <D onPress={()=>j("all")}style={[r.filterChip,I==="all"&&r.filterChipActive]}>
95
+ <Ne size={12}color={I==="all"?e.white:e.purple}/>
95
96
  <S style={[r.filterChipText,I==="all"&&r.filterChipTextActive]}>
96
- {V("crash.allFrames",{count:z.length})}
97
+ {B("crash.allFrames",{count:z.length})}
97
98
  </S>
98
- </H>
99
+ </D>
99
100
  </C>
100
101
 
101
102
 
102
- {P.length>0?P.filter(x=>{if(!R.trim())return!0;const k=R.toLowerCase();return x.method.toLowerCase().includes(k)||x.file.toLowerCase().includes(k)}).map((x,k)=>{const M=k===0&&x.isAppCode;return<C key={`frame_${k}`}style={[r.frameCard,M&&r.originFrameCard]}>
103
+ {U.length>0?U.filter(x=>{if(!R.trim())return!0;const k=R.toLowerCase();return x.method.toLowerCase().includes(k)||x.file.toLowerCase().includes(k)}).map((x,k)=>{const O=k===0&&x.isAppCode;return<C key={`frame_${k}`}style={[r.frameCard,O&&r.originFrameCard]}>
103
104
  <C style={r.frameCardHeader}>
104
105
  <C style={r.frameIndexBadge}>
105
106
  <S style={r.frameIndexBadgeText}>
106
107
  #{k+1}
107
108
  </S>
108
109
  </C>
109
- <C style={[r.frameTypeBadge,x.isAppCode?{backgroundColor:"#ECFDF5",borderColor:"#A7F3D0"}:{backgroundColor:"#F1F5F9",borderColor:"#E2E8F0"}]}>
110
- <S style={[r.frameTypeBadgeText,x.isAppCode?{color:"#059669"}:{color:"#64748B"}]}>
111
- {x.isAppCode?V("crash.frameApp"):V("crash.frameLib")}
110
+ <C style={[r.frameTypeBadge,x.isAppCode?{backgroundColor:e.greenSuccessBg,borderColor:e.greenSuccessBorder}:{backgroundColor:e.slate100,borderColor:e.slate200}]}>
111
+ <S style={[r.frameTypeBadgeText,x.isAppCode?{color:e.emerald600}:{color:e.slate500}]}>
112
+ {x.isAppCode?B("crash.frameApp"):B("crash.frameLib")}
112
113
  </S>
113
114
  </C>
114
115
 
115
116
  <S style={r.frameMethodText}numberOfLines={1}>
116
- <Q text={x.method||V("crash.anonymous")}highlight={R}/>
117
+ <Q text={x.method||B("crash.anonymous")}highlight={R}/>
117
118
  </S>
118
119
 
119
- <H onPress={()=>te(x,k)}hitSlop={8}style={r.frameCopyBtn}>
120
- {J===k?<Y color={e.greenColor}size={12}/>:<K color={e.grayText}size={12}/>}
120
+ <D onPress={()=>te(x,k)}hitSlop={8}style={r.frameCopyBtn}>
121
+ {N===k?<Y color={e.greenColor}size={12}/>:<K color={e.grayText}size={12}/>}
121
122
  <S style={r.frameCopyBtnText}>
122
- {V(J===k?"crash.frameCopied":"crash.frameCopy")}
123
+ {B(N===k?"crash.frameCopied":"crash.frameCopy")}
123
124
  </S>
124
- </H>
125
+ </D>
125
126
  </C>
126
127
 
127
128
  <C style={r.frameLocationRow}>
@@ -139,7 +140,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
139
140
  </S>}
140
141
  </C>}):<C style={r.emptyContainer}>
141
142
  <S style={r.emptyText}>
142
- {T.stack?T.stack:V("crash.noStackTrace")}
143
+ {T.stack?T.stack:B("crash.noStackTrace")}
143
144
  </S>
144
145
  </C>}
145
146
 
@@ -147,7 +148,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
147
148
  <C style={r.sectionCardHeader}>
148
149
  <X color={e.purple}size={14}/>
149
150
  <S style={r.sectionCardTitle}>
150
- {V("crash.componentHierarchy")}
151
+ {B("crash.componentHierarchy")}
151
152
  </S>
152
153
  </C>
153
154
  <S style={r.componentStackText}>
@@ -164,7 +165,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
164
165
  <C style={{flexDirection:"row",alignItems:"center",gap:6}}>
165
166
  <De color={e.purple}size={14}/>
166
167
  <S style={r.sectionCardTitle}>
167
- {V("crash.deviceEnvironment")}
168
+ {B("crash.deviceEnvironment")}
168
169
  </S>
169
170
  </C>
170
171
  <$ value={T.deviceInfo||{platform:W.OS,osVersion:String(W.Version)}}label="Diagnostics"/>
@@ -172,42 +173,42 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
172
173
 
173
174
  <C style={r.diagGrid}>
174
175
  <C style={r.diagItem}>
175
- <S style={r.diagLabel}>{V("crash.platform")}</S>
176
+ <S style={r.diagLabel}>{B("crash.platform")}</S>
176
177
  <S style={r.diagValue}>
177
178
  {T.deviceInfo?.platform?.toUpperCase()||W.OS.toUpperCase()}
178
179
  </S>
179
180
  </C>
180
181
 
181
182
  <C style={r.diagItem}>
182
- <S style={r.diagLabel}>{V("crash.osVersion")}</S>
183
+ <S style={r.diagLabel}>{B("crash.osVersion")}</S>
183
184
  <S style={r.diagValue}>
184
185
  {T.deviceInfo?.osVersion||String(W.Version)}
185
186
  </S>
186
187
  </C>
187
188
 
188
189
  <C style={r.diagItem}>
189
- <S style={r.diagLabel}>{V("crash.reactNative")}</S>
190
+ <S style={r.diagLabel}>{B("crash.reactNative")}</S>
190
191
  <S style={r.diagValue}>
191
192
  {T.deviceInfo?.rnVersion||"0.74+"}
192
193
  </S>
193
194
  </C>
194
195
 
195
196
  <C style={r.diagItem}>
196
- <S style={r.diagLabel}>{V("crash.jsEngine")}</S>
197
+ <S style={r.diagLabel}>{B("crash.jsEngine")}</S>
197
198
  <S style={r.diagValue}>
198
- {T.deviceInfo?.isHermes?V("crash.hermesEngine"):V("crash.jsc")}
199
+ {T.deviceInfo?.isHermes?B("crash.hermesEngine"):B("crash.jsc")}
199
200
  </S>
200
201
  </C>
201
202
 
202
203
  <C style={r.diagItem}>
203
- <S style={r.diagLabel}>{V("crash.architecture")}</S>
204
+ <S style={r.diagLabel}>{B("crash.architecture")}</S>
204
205
  <S style={r.diagValue}>
205
- {T.deviceInfo?.isFabric?V("crash.fabricNewArch"):V("crash.paperLegacy")}
206
+ {T.deviceInfo?.isFabric?B("crash.fabricNewArch"):B("crash.paperLegacy")}
206
207
  </S>
207
208
  </C>
208
209
 
209
210
  <C style={r.diagItem}>
210
- <S style={r.diagLabel}>{V("crash.appState")}</S>
211
+ <S style={r.diagLabel}>{B("crash.appState")}</S>
211
212
  <S style={r.diagValue}>
212
213
  {T.deviceInfo?.appState||"active"}
213
214
  </S>
@@ -221,7 +222,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
221
222
  <C style={{flexDirection:"row",alignItems:"center",gap:6}}>
222
223
  <X color={e.purple}size={14}/>
223
224
  <S style={r.sectionCardTitle}>
224
- {V("crash.jsHeapMemory")}
225
+ {B("crash.jsHeapMemory")}
225
226
  </S>
226
227
  </C>
227
228
  <$ value={T.memoryInfo}label="Memory Info"/>
@@ -229,14 +230,14 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
229
230
 
230
231
  <C style={r.diagGrid}>
231
232
  <C style={r.diagItem}>
232
- <S style={r.diagLabel}>{V("crash.usedHeap")}</S>
233
+ <S style={r.diagLabel}>{B("crash.usedHeap")}</S>
233
234
  <S style={r.diagValue}>
234
235
  {T.memoryInfo.usedJSHeapSize} MB
235
236
  </S>
236
237
  </C>
237
238
 
238
239
  <C style={r.diagItem}>
239
- <S style={r.diagLabel}>{V("crash.totalHeap")}</S>
240
+ <S style={r.diagLabel}>{B("crash.totalHeap")}</S>
240
241
  <S style={r.diagValue}>
241
242
  {T.memoryInfo.totalJSHeapSize} MB
242
243
  </S>
@@ -270,7 +271,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
270
271
  </C>}
271
272
  </C>):<C style={r.emptyContainer}>
272
273
  <S style={r.emptyText}>
273
- {V("crash.noBreadcrumbs")}
274
+ {B("crash.noBreadcrumbs")}
274
275
  </S>
275
276
  </C>}
276
277
  </C>}
@@ -279,5 +280,5 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
279
280
  {F==="raw"&&<C style={r.rawContainer}>
280
281
  <_ data={ee}search={R}wrap/>
281
282
  </C>}
282
- </U>
283
- </C>});export default je;const r=ie.create({infoBar:{backgroundColor:e.primaryLight,borderRadius:12,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,shadowColor:e.black,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:2,gap:8},badgeRow:{flexDirection:"row",alignItems:"center",gap:8},pillBadge:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:3,borderRadius:12,borderWidth:1,gap:5},statusDot:{width:6,height:6,borderRadius:3},pillBadgeText:{fontFamily:B.interBold,fontSize:9.5,letterSpacing:.4},actionButton:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.purple}14`,borderColor:`${e.purple}33`,borderWidth:1,paddingHorizontal:8,paddingVertical:4,borderRadius:8},actionButtonText:{fontFamily:B.interBold,fontSize:10.5,color:e.purple},titleText:{fontFamily:B.interBold,fontSize:14,color:e.primaryBlack,lineHeight:19},metaRow:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:2},metaChip:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:e.grayBackground,paddingHorizontal:7,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:e.dividerColor},metaChipText:{fontFamily:B.interMedium,fontSize:10,color:e.grayText},searchContainer:{flexDirection:"row",alignItems:"center",backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary,borderRadius:8,paddingHorizontal:10,height:36,gap:8},searchInput:{flex:1,fontFamily:B.interRegular,fontSize:12,color:e.primaryBlack,paddingVertical:0},filterChipsRow:{flexDirection:"row",alignItems:"center",gap:8},filterChip:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary},filterChipActive:{backgroundColor:e.purple,borderColor:e.purple},filterChipText:{fontFamily:B.interMedium,fontSize:11,color:e.grayText},filterChipTextActive:{fontFamily:B.interBold,color:e.white},frameCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},originFrameCard:{borderColor:"#6EE7B7",backgroundColor:"#F0FDF4"},frameCardHeader:{flexDirection:"row",alignItems:"center",gap:8},frameIndexBadge:{minWidth:24,height:18,paddingHorizontal:4,borderRadius:4,backgroundColor:`${e.purple}14`,alignItems:"center",justifyContent:"center"},frameIndexBadgeText:{fontFamily:B.interBold,fontSize:9,color:e.purple},frameTypeBadge:{paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1},frameTypeBadgeText:{fontFamily:B.interBold,fontSize:8.5},frameMethodText:{fontFamily:B.interBold,fontSize:12,color:e.primaryBlack,flex:1},frameLocationRow:{flexDirection:"row",alignItems:"center"},frameFileText:{fontFamily:B.interRegular,fontSize:11,color:e.grayText,flex:1},frameLineText:{fontFamily:B.interBold,fontSize:11,color:e.purple},frameCopyBtn:{flexDirection:"row",alignItems:"center",gap:3,paddingHorizontal:6,paddingVertical:3,borderRadius:5,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.dividerColor},frameCopyBtnText:{fontFamily:B.interBold,fontSize:9,color:e.grayText},frameRawText:{fontFamily:B.interRegular,fontSize:9.5,color:e.grayTextWeak,backgroundColor:`${e.primaryBlack}06`,borderRadius:5,paddingHorizontal:7,paddingVertical:4,overflow:"hidden"},componentStackText:{fontFamily:B.interRegular,fontSize:11,lineHeight:16,color:e.grayText,backgroundColor:`${e.primaryBlack}06`,borderRadius:6,padding:10},sectionCard:{backgroundColor:e.primaryLight,borderRadius:10,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,gap:10},sectionCardHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingBottom:6,borderBottomWidth:1,borderBottomColor:e.dividerColor},sectionCardTitle:{fontFamily:B.interBold,fontSize:12.5,color:e.primaryBlack},diagGrid:{flexDirection:"row",flexWrap:"wrap",rowGap:8,columnGap:12},diagItem:{width:"47%",gap:2},diagLabel:{fontFamily:B.interRegular,fontSize:10,color:e.grayTextWeak},diagValue:{fontFamily:B.interBold,fontSize:11.5,color:e.primaryBlack},breadcrumbCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},breadcrumbHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breadcrumbTag:{backgroundColor:`${e.purple}14`,paddingHorizontal:6,paddingVertical:2,borderRadius:4},breadcrumbTagText:{fontFamily:B.interBold,fontSize:9,color:e.purple},breadcrumbTime:{fontFamily:B.interRegular,fontSize:10,color:e.grayTextWeak},breadcrumbMessage:{fontFamily:B.interRegular,fontSize:11.5,color:e.primaryBlack,marginTop:2},rawContainer:{backgroundColor:e.primaryLight,borderRadius:10,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary},emptyContainer:{padding:16,alignItems:"center",justifyContent:"center",backgroundColor:e.primaryLight,borderRadius:8,borderWidth:1,borderColor:e.grayBorderSecondary},emptyText:{fontFamily:B.interRegular,fontSize:11,color:e.grayText,textAlign:"center"}});
283
+ </E>
284
+ </C>});export default Pe;const r=ie.create({infoBar:{backgroundColor:e.primaryLight,borderRadius:12,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,shadowColor:e.black,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:2,gap:8},badgeRow:{flexDirection:"row",alignItems:"center",gap:8},pillBadge:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:3,borderRadius:12,borderWidth:1,gap:5},statusDot:{width:6,height:6,borderRadius:3},pillBadgeText:{fontFamily:V.interBold,fontSize:9.5,letterSpacing:.4},actionButton:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.purple}14`,borderColor:`${e.purple}33`,borderWidth:1,paddingHorizontal:8,paddingVertical:4,borderRadius:8},actionButtonText:{fontFamily:V.interBold,fontSize:10.5,color:e.purple},titleText:{fontFamily:V.interBold,fontSize:14,color:e.primaryBlack,lineHeight:19},metaRow:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:2},metaChip:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:e.grayBackground,paddingHorizontal:7,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:e.dividerColor},metaChipText:{fontFamily:V.interMedium,fontSize:10,color:e.grayText},searchContainer:{flexDirection:"row",alignItems:"center",backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary,borderRadius:8,paddingHorizontal:10,height:36,gap:8},searchInput:{flex:1,fontFamily:V.interRegular,fontSize:12,color:e.primaryBlack,paddingVertical:0},filterChipsRow:{flexDirection:"row",alignItems:"center",gap:8},filterChip:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary},filterChipActive:{backgroundColor:e.purple,borderColor:e.purple},filterChipText:{fontFamily:V.interMedium,fontSize:11,color:e.grayText},filterChipTextActive:{fontFamily:V.interBold,color:e.white},frameCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},originFrameCard:{borderColor:e.greenMintBorder,backgroundColor:e.greenMintBg},frameCardHeader:{flexDirection:"row",alignItems:"center",gap:8},frameIndexBadge:{minWidth:24,height:18,paddingHorizontal:4,borderRadius:4,backgroundColor:`${e.purple}14`,alignItems:"center",justifyContent:"center"},frameIndexBadgeText:{fontFamily:V.interBold,fontSize:9,color:e.purple},frameTypeBadge:{paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1},frameTypeBadgeText:{fontFamily:V.interBold,fontSize:8.5},frameMethodText:{fontFamily:V.interBold,fontSize:12,color:e.primaryBlack,flex:1},frameLocationRow:{flexDirection:"row",alignItems:"center"},frameFileText:{fontFamily:V.interRegular,fontSize:11,color:e.grayText,flex:1},frameLineText:{fontFamily:V.interBold,fontSize:11,color:e.purple},frameCopyBtn:{flexDirection:"row",alignItems:"center",gap:3,paddingHorizontal:6,paddingVertical:3,borderRadius:5,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.dividerColor},frameCopyBtnText:{fontFamily:V.interBold,fontSize:9,color:e.grayText},frameRawText:{fontFamily:V.interRegular,fontSize:9.5,color:e.grayTextWeak,backgroundColor:`${e.primaryBlack}06`,borderRadius:5,paddingHorizontal:7,paddingVertical:4,overflow:"hidden"},componentStackText:{fontFamily:V.interRegular,fontSize:11,lineHeight:16,color:e.grayText,backgroundColor:`${e.primaryBlack}06`,borderRadius:6,padding:10},sectionCard:{backgroundColor:e.primaryLight,borderRadius:10,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,gap:10},sectionCardHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingBottom:6,borderBottomWidth:1,borderBottomColor:e.dividerColor},sectionCardTitle:{fontFamily:V.interBold,fontSize:12.5,color:e.primaryBlack},diagGrid:{flexDirection:"row",flexWrap:"wrap",rowGap:8,columnGap:12},diagItem:{width:"47%",gap:2},diagLabel:{fontFamily:V.interRegular,fontSize:10,color:e.grayTextWeak},diagValue:{fontFamily:V.interBold,fontSize:11.5,color:e.primaryBlack},breadcrumbCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},breadcrumbHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breadcrumbTag:{backgroundColor:`${e.purple}14`,paddingHorizontal:6,paddingVertical:2,borderRadius:4},breadcrumbTagText:{fontFamily:V.interBold,fontSize:9,color:e.purple},breadcrumbTime:{fontFamily:V.interRegular,fontSize:10,color:e.grayTextWeak},breadcrumbMessage:{fontFamily:V.interRegular,fontSize:11.5,color:e.primaryBlack,marginTop:2},rawContainer:{backgroundColor:e.primaryLight,borderRadius:10,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary},emptyContainer:{padding:16,alignItems:"center",justifyContent:"center",backgroundColor:e.primaryLight,borderRadius:8,borderWidth:1,borderColor:e.grayBorderSecondary},emptyText:{fontFamily:V.interRegular,fontSize:11,color:e.grayText,textAlign:"center"}});