react-native-inapp-inspector 2.4.2 → 2.5.1

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 (221) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  3. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  6. package/android/.gradle/8.9/gc.properties +0 -0
  7. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  8. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  9. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  10. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  11. package/android/.gradle/9.2.0/gc.properties +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  14. package/android/.gradle/vcs-1/gc.properties +0 -0
  15. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  16. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +523 -2
  17. package/dist/commonjs/capture.d.ts +2 -0
  18. package/dist/commonjs/capture.js +1 -1
  19. package/dist/commonjs/components/AnalyticsDetail.js +23 -23
  20. package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
  21. package/dist/commonjs/components/AnalyticsGraph.js +44 -44
  22. package/dist/commonjs/components/AnimatedBrandOwl.js +32 -32
  23. package/dist/commonjs/components/AppHeaderLogo.js +6 -6
  24. package/dist/commonjs/components/BrandCircleIcon.js +28 -28
  25. package/dist/commonjs/components/BrandSquareIcon.js +33 -33
  26. package/dist/commonjs/components/ConsoleLogCard.js +1 -1
  27. package/dist/commonjs/components/Inspector/AnalyticsTab.js +2 -2
  28. package/dist/commonjs/components/Inspector/ConfirmationModal.js +23 -25
  29. package/dist/commonjs/components/Inspector/ConsoleTab.js +5 -5
  30. package/dist/commonjs/components/Inspector/CrashTab.js +44 -11
  31. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
  32. package/dist/commonjs/components/Inspector/FabLauncher.js +30 -25
  33. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  34. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
  35. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  36. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
  37. package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
  38. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +1 -1
  39. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +114 -32
  40. package/dist/commonjs/components/Inspector/MainScreen.js +26 -19
  41. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +38 -35
  42. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
  43. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +345 -123
  44. package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
  45. package/dist/commonjs/components/Inspector/PushCard.js +1 -1
  46. package/dist/commonjs/components/Inspector/PushDetail.js +9 -9
  47. package/dist/commonjs/components/Inspector/PushTab.js +3 -3
  48. package/dist/commonjs/components/Inspector/ReduxTab.js +9 -7
  49. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  50. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  51. package/dist/commonjs/components/Inspector/SettingsPanel.js +102 -73
  52. package/dist/commonjs/components/Inspector/SocketCard.js +1 -1
  53. package/dist/commonjs/components/Inspector/SocketDetail.js +73 -63
  54. package/dist/commonjs/components/Inspector/SocketTab.js +4 -4
  55. package/dist/commonjs/components/Inspector/StorageTab.js +10 -10
  56. package/dist/commonjs/components/Inspector/SupportModal.js +2 -2
  57. package/dist/commonjs/components/Inspector/SupportPage.js +1 -1
  58. package/dist/commonjs/components/JsonViewer.js +47 -45
  59. package/dist/commonjs/components/LogCard.js +22 -20
  60. package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
  61. package/dist/commonjs/components/NetworkIcons.d.ts +27 -0
  62. package/dist/commonjs/components/NetworkIcons.js +103 -5
  63. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  64. package/dist/commonjs/constants/telemetryConfig.js +1 -1
  65. package/dist/commonjs/constants/version.d.ts +1 -1
  66. package/dist/commonjs/constants/version.js +1 -1
  67. package/dist/commonjs/crash.d.ts +1 -1
  68. package/dist/commonjs/crash.js +1 -1
  69. package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
  70. package/dist/commonjs/customHooks/crashHandler.js +7 -7
  71. package/dist/commonjs/editor.d.ts +13 -0
  72. package/dist/commonjs/editor.js +1 -0
  73. package/dist/commonjs/helpers/index.d.ts +1 -0
  74. package/dist/commonjs/helpers/index.js +1 -1
  75. package/dist/commonjs/helpers/settingsStore.js +1 -1
  76. package/dist/commonjs/helpers/telemetry.js +1 -1
  77. package/dist/commonjs/i18n/index.js +1 -1
  78. package/dist/commonjs/i18n/locales/ar.json +1 -1
  79. package/dist/commonjs/i18n/locales/bn.json +1 -1
  80. package/dist/commonjs/i18n/locales/de.json +1 -1
  81. package/dist/commonjs/i18n/locales/en.json +1 -1
  82. package/dist/commonjs/i18n/locales/es.json +1 -1
  83. package/dist/commonjs/i18n/locales/fr.json +1 -1
  84. package/dist/commonjs/i18n/locales/gu.json +1 -1
  85. package/dist/commonjs/i18n/locales/hi.json +1 -1
  86. package/dist/commonjs/i18n/locales/id.json +1 -1
  87. package/dist/commonjs/i18n/locales/it.json +1 -1
  88. package/dist/commonjs/i18n/locales/ja.json +1 -1
  89. package/dist/commonjs/i18n/locales/kn.json +1 -1
  90. package/dist/commonjs/i18n/locales/ko.json +1 -1
  91. package/dist/commonjs/i18n/locales/ml.json +1 -1
  92. package/dist/commonjs/i18n/locales/mr.json +1 -1
  93. package/dist/commonjs/i18n/locales/nl.json +1 -1
  94. package/dist/commonjs/i18n/locales/pa.json +1 -1
  95. package/dist/commonjs/i18n/locales/pl.json +1 -1
  96. package/dist/commonjs/i18n/locales/pt.json +1 -1
  97. package/dist/commonjs/i18n/locales/ru.json +1 -1
  98. package/dist/commonjs/i18n/locales/ta.json +1 -1
  99. package/dist/commonjs/i18n/locales/te.json +1 -1
  100. package/dist/commonjs/i18n/locales/tr.json +1 -1
  101. package/dist/commonjs/i18n/locales/vi.json +1 -1
  102. package/dist/commonjs/i18n/locales/zh.json +1 -1
  103. package/dist/commonjs/index.d.ts +4 -1
  104. package/dist/commonjs/index.js +3 -3
  105. package/dist/commonjs/native/NativeInspector.d.ts +3 -0
  106. package/dist/commonjs/native/NativeInspector.js +1 -1
  107. package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
  108. package/dist/commonjs/styles/AppColors.d.ts +42 -2
  109. package/dist/commonjs/styles/AppColors.js +1 -1
  110. package/dist/commonjs/styles/common.js +1 -1
  111. package/dist/commonjs/styles/index.d.ts +7 -0
  112. package/dist/commonjs/styles/index.js +1 -1
  113. package/dist/commonjs/types/editor.d.ts +96 -0
  114. package/dist/commonjs/types/editor.js +1 -0
  115. package/dist/commonjs/types/interfaces.d.ts +21 -0
  116. package/dist/esm/capture.d.ts +2 -0
  117. package/dist/esm/capture.js +1 -1
  118. package/dist/esm/components/AnalyticsDetail.js +31 -31
  119. package/dist/esm/components/AnalyticsEventCard.js +1 -1
  120. package/dist/esm/components/AnalyticsGraph.js +74 -74
  121. package/dist/esm/components/AnimatedBrandOwl.js +114 -114
  122. package/dist/esm/components/AppHeaderLogo.js +7 -7
  123. package/dist/esm/components/BrandCircleIcon.js +70 -70
  124. package/dist/esm/components/BrandSquareIcon.js +61 -61
  125. package/dist/esm/components/ConsoleLogCard.js +1 -1
  126. package/dist/esm/components/Inspector/AnalyticsTab.js +14 -14
  127. package/dist/esm/components/Inspector/ConfirmationModal.js +23 -25
  128. package/dist/esm/components/Inspector/ConsoleTab.js +17 -17
  129. package/dist/esm/components/Inspector/CrashTab.js +202 -169
  130. package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
  131. package/dist/esm/components/Inspector/FabLauncher.js +56 -51
  132. package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  133. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
  134. package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  135. package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
  136. package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
  137. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +1 -1
  138. package/dist/esm/components/Inspector/LanguageSelectorModal.js +140 -58
  139. package/dist/esm/components/Inspector/MainScreen.js +61 -54
  140. package/dist/esm/components/Inspector/MediaGalleryTab.js +55 -52
  141. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
  142. package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -123
  143. package/dist/esm/components/Inspector/NetworkTab.js +74 -74
  144. package/dist/esm/components/Inspector/PushCard.js +1 -1
  145. package/dist/esm/components/Inspector/PushDetail.js +18 -18
  146. package/dist/esm/components/Inspector/PushTab.js +1 -1
  147. package/dist/esm/components/Inspector/ReduxTab.js +18 -16
  148. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  149. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  150. package/dist/esm/components/Inspector/SettingsPanel.js +224 -195
  151. package/dist/esm/components/Inspector/SocketCard.js +8 -8
  152. package/dist/esm/components/Inspector/SocketDetail.js +106 -96
  153. package/dist/esm/components/Inspector/SocketTab.js +18 -18
  154. package/dist/esm/components/Inspector/StorageTab.js +47 -47
  155. package/dist/esm/components/Inspector/SupportModal.js +64 -64
  156. package/dist/esm/components/Inspector/SupportPage.js +5 -5
  157. package/dist/esm/components/JsonViewer.js +51 -49
  158. package/dist/esm/components/LogCard.js +41 -39
  159. package/dist/esm/components/ModuleErrorBoundary.js +10 -10
  160. package/dist/esm/components/NetworkIcons.d.ts +27 -0
  161. package/dist/esm/components/NetworkIcons.js +101 -3
  162. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  163. package/dist/esm/constants/telemetryConfig.js +1 -1
  164. package/dist/esm/constants/version.d.ts +1 -1
  165. package/dist/esm/constants/version.js +1 -1
  166. package/dist/esm/crash.d.ts +1 -1
  167. package/dist/esm/crash.js +1 -1
  168. package/dist/esm/customHooks/crashHandler.d.ts +2 -1
  169. package/dist/esm/customHooks/crashHandler.js +7 -7
  170. package/dist/esm/editor.d.ts +13 -0
  171. package/dist/esm/editor.js +1 -0
  172. package/dist/esm/helpers/index.d.ts +1 -0
  173. package/dist/esm/helpers/index.js +4 -4
  174. package/dist/esm/helpers/settingsStore.js +1 -1
  175. package/dist/esm/helpers/telemetry.js +1 -1
  176. package/dist/esm/i18n/index.js +1 -1
  177. package/dist/esm/i18n/locales/ar.json +1 -1
  178. package/dist/esm/i18n/locales/bn.json +1 -1
  179. package/dist/esm/i18n/locales/de.json +1 -1
  180. package/dist/esm/i18n/locales/en.json +1 -1
  181. package/dist/esm/i18n/locales/es.json +1 -1
  182. package/dist/esm/i18n/locales/fr.json +1 -1
  183. package/dist/esm/i18n/locales/gu.json +1 -1
  184. package/dist/esm/i18n/locales/hi.json +1 -1
  185. package/dist/esm/i18n/locales/id.json +1 -1
  186. package/dist/esm/i18n/locales/it.json +1 -1
  187. package/dist/esm/i18n/locales/ja.json +1 -1
  188. package/dist/esm/i18n/locales/kn.json +1 -1
  189. package/dist/esm/i18n/locales/ko.json +1 -1
  190. package/dist/esm/i18n/locales/ml.json +1 -1
  191. package/dist/esm/i18n/locales/mr.json +1 -1
  192. package/dist/esm/i18n/locales/nl.json +1 -1
  193. package/dist/esm/i18n/locales/pa.json +1 -1
  194. package/dist/esm/i18n/locales/pl.json +1 -1
  195. package/dist/esm/i18n/locales/pt.json +1 -1
  196. package/dist/esm/i18n/locales/ru.json +1 -1
  197. package/dist/esm/i18n/locales/ta.json +1 -1
  198. package/dist/esm/i18n/locales/te.json +1 -1
  199. package/dist/esm/i18n/locales/tr.json +1 -1
  200. package/dist/esm/i18n/locales/vi.json +1 -1
  201. package/dist/esm/i18n/locales/zh.json +1 -1
  202. package/dist/esm/index.d.ts +4 -1
  203. package/dist/esm/index.js +5 -5
  204. package/dist/esm/native/NativeInspector.d.ts +3 -0
  205. package/dist/esm/native/NativeInspector.js +1 -1
  206. package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
  207. package/dist/esm/styles/AppColors.d.ts +42 -2
  208. package/dist/esm/styles/AppColors.js +1 -1
  209. package/dist/esm/styles/common.js +1 -1
  210. package/dist/esm/styles/index.d.ts +7 -0
  211. package/dist/esm/styles/index.js +1 -1
  212. package/dist/esm/types/editor.d.ts +96 -0
  213. package/dist/esm/types/editor.js +1 -0
  214. package/dist/esm/types/interfaces.d.ts +21 -0
  215. package/editor.d.ts +1 -0
  216. package/editor.js +1 -0
  217. package/ios/NetworkInspectorModule.mm +429 -0
  218. package/package.json +10 -1
  219. package/react-native-inapp-inspector.podspec +1 -1
  220. package/src/native/NativeInspector.ts +57 -4
  221. package/src/native/NativeNetworkInspector.ts +4 -0
@@ -1,76 +1,78 @@
1
- import re,{useEffect as te,useRef as oe,useMemo as ne}from"react";import{Alert as ae,Animated as D,Linking as F,View as C,Pressable as A,Text as T,StyleSheet as E}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as r}from"../styles/AppColors";import{METHOD_COLORS as U}from"../constants";import{getStatusColor as Se,getDurationColor as Be,formatDateTime as Re,getSize as He,getPath as Ve,getBaseUrl as ze}from"../helpers";import{CalendarIcon as Ie,ClockIcon as N,SizeIcon as Le,CircleCheckIcon as $e,CircleAlertIcon as Oe,CircleXIcon as We,RepeatIcon as De,ForwardChevronIcon as Fe,GlobeIcon as Pe}from"./NetworkIcons";import{AppFonts as S}from"../styles/AppFonts";import Me from"./HighlightText";import Ae from"./TouchableScale";import{useTranslation as Ee}from"../i18n";function Ue({item:e,onPress:B,timelineMinStart:Ne,timelineTotalRange:Ge,isNew:$,isSelected:P,onToggleSelect:G,searchStr:J}){const{t:z}=Ee(),j=U[e.method]??U.ALL,H=ne(()=>{try{const o=new URL(e.url),L=o.host,M=o.pathname+(o.search?o.search:""),ee=o.protocol==="https:";return{host:L,path:M||"/",isHttps:ee}}catch{const o=e.url.toLowerCase().startsWith("https:"),L=Ve(e.url);return{host:ze(e.url).replace(/^https?:\/\//,""),path:L||e.url,isHttps:o}}},[e.url]),K=o=>{o?.stopPropagation?.(),ae.alert(z("common.openInBrowser")||"Open in Browser",`${z("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
1
+ import re,{useEffect as te,useRef as oe,useMemo as ne}from"react";import{Alert as le,Animated as W,Linking as F,View as C,Pressable as A,Text as T,StyleSheet as E}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as e}from"../styles/AppColors";import{METHOD_COLORS as U}from"../constants";import{getStatusColor as Se,getDurationColor as Be,formatDateTime as Re,getSize as He,getPath as Ve,getBaseUrl as ze}from"../helpers";import{CalendarIcon as Ie,ClockIcon as N,SizeIcon as Le,CircleCheckIcon as $e,CircleAlertIcon as De,CircleXIcon as Oe,RepeatIcon as We,ForwardChevronIcon as Fe,GlobeIcon as Pe}from"./NetworkIcons";import{AppFonts as S}from"../styles/AppFonts";import G from"./HighlightText";import Me from"./TouchableScale";import{useTranslation as ve}from"../i18n";function Ae({item:r,onPress:B,timelineMinStart:Ue,timelineTotalRange:qe,isNew:$,isSelected:P,onToggleSelect:J,searchStr:j}){const{t:z}=ve(),M=U[r.method]??U.ALL,H=ne(()=>{try{const o=new URL(r.url),L=o.host,v=o.pathname+(o.search?o.search:""),ee=o.protocol==="https:";return{host:L,path:v||"/",isHttps:ee}}catch{const o=r.url.toLowerCase().startsWith("https:"),L=Ve(r.url);return{host:ze(r.url).replace(/^https?:\/\//,""),path:L||r.url,isHttps:o}}},[r.url]),K=o=>{o?.stopPropagation?.(),le.alert(z("common.openInBrowser")||"Open in Browser",`${z("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
2
2
 
3
- ${e.url}`,[{text:z("common.cancel")||"Cancel",style:"cancel"},{text:z("common.open")||"Open",onPress:()=>{F.canOpenURL(e.url).then(L=>{L?F.openURL(e.url):F.openURL(e.url).catch(()=>{})}).catch(()=>{})}}])},R=e.status===0||e.status!=null&&e.status>=400,V=e.status==null,O=Se(e.status),I=Be(e.duration),Q=V?r.darkOrange:R?r.errorColor:r.greenColor,W=oe(new D.Value($?.35:0)).current;te(()=>{$&&D.timing(W,{toValue:0,duration:1200,useNativeDriver:!0}).start()},[$,W]);const X=()=>{if(V)return"...";if(e.status===0||e.status==null)return z("network.statusFailed")||"FAILED";const o=typeof e.status=="number"?e.status:parseInt(String(e.status||0),10);return o===200?"200 OK":o===201?"201 Created":o===204?"204 No Content":o===304?"304 Not Modified":o===400?"400 Bad Req":o===401?"401 Unauth":o===403?"403 Forbidden":o===404?"404 Not Found":o===500?"500 Error":String(e.status)},_=()=>{if(V)return<N color={r.darkOrange}size={10}/>;const o=typeof e.status=="number"?e.status:parseInt(String(e.status||0),10);return o>=200&&o<300?<$e color={r.greenColor}size={10}/>:o>=300&&o<400?<De color={r.amber700}size={10}/>:o>=400&&o<500?<Oe color={r.darkOrange}size={10}/>:<We color={r.errorColor}size={10}/>},Y=Re(e.startTime),Z=e.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={t.container}>
4
- <Ae onPress={B}style={[t.card,{borderLeftWidth:3.5,borderLeftColor:Q,backgroundColor:R?r.errorCardBg:r.white}]}>
3
+ ${r.url}`,[{text:z("common.cancel")||"Cancel",style:"cancel"},{text:z("common.open")||"Open",onPress:()=>{F.canOpenURL(r.url).then(L=>{L?F.openURL(r.url):F.openURL(r.url).catch(()=>{})}).catch(()=>{})}}])},R=r.status===0||r.status!=null&&r.status>=400,V=r.status==null,D=Se(r.status),I=Be(r.duration),Q=V?e.darkOrange:R?e.errorColor:e.greenColor,O=oe(new W.Value($?.35:0)).current;te(()=>{$&&W.timing(O,{toValue:0,duration:1200,useNativeDriver:!0}).start()},[$,O]);const X=()=>{if(V)return"...";if(r.status===0||r.status==null)return z("network.statusFailed")||"FAILED";const o=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return o===200?"200 OK":o===201?"201 Created":o===204?"204 No Content":o===304?"304 Not Modified":o===400?"400 Bad Req":o===401?"401 Unauth":o===403?"403 Forbidden":o===404?"404 Not Found":o===500?"500 Error":String(r.status)},_=()=>{if(V)return<N color={e.darkOrange}size={10}/>;const o=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return o>=200&&o<300?<$e color={e.greenColor}size={10}/>:o>=300&&o<400?<We color={e.amber700}size={10}/>:o>=400&&o<500?<De color={e.darkOrange}size={10}/>:<Oe color={e.errorColor}size={10}/>},Y=Re(r.startTime),Z=r.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={t.container}>
4
+ <Me onPress={B}style={[t.card,{borderLeftWidth:3.5,borderLeftColor:Q,backgroundColor:R?e.errorCardBg:e.white}]}>
5
5
  <C style={t.cardBody}>
6
6
 
7
7
  <C style={t.cardHeaderRow}>
8
8
  <C style={t.cardHeaderLeft}>
9
- <A onPress={()=>G(e.id)}hitSlop={12}style={[t.smallCheckbox,P&&t.smallCheckboxChecked]}>
9
+ <A onPress={()=>J(r.id)}hitSlop={12}style={[t.smallCheckbox,P&&t.smallCheckboxChecked]}>
10
10
  {P&&<Ce width={9}height={9}viewBox="0 0 24 24"fill="none">
11
- <Te d="M20 6L9 17l-5-5"stroke={r.white}strokeWidth="4"strokeLinecap="round"strokeLinejoin="round"/>
11
+ <Te d="M20 6L9 17l-5-5"stroke={e.white}strokeWidth="4"strokeLinecap="round"strokeLinejoin="round"/>
12
12
  </Ce>}
13
13
  </A>
14
14
 
15
- <T style={t.serialNumber}>#{e.id+1}</T>
15
+ <T style={t.serialNumber}>#{r.id+1}</T>
16
16
 
17
- <C style={[t.methodBadge,{backgroundColor:j}]}>
17
+ <C style={[t.methodBadge,{backgroundColor:M}]}>
18
18
  <T style={t.methodBadgeText}>
19
- {e.method}
19
+ {r.method}
20
20
  </T>
21
21
  </C>
22
22
 
23
- {e.client&&<C style={[t.chip,{backgroundColor:e.client==="axios"?`${r.purple}14`:e.client==="apollo"||e.client==="graphql"?`${r.pink500}14`:e.client==="xhr"?`${r.amber500}14`:`${r.sky500}14`,borderColor:e.client==="axios"?`${r.purple}30`:e.client==="apollo"||e.client==="graphql"?`${r.pink500}30`:e.client==="xhr"?`${r.amber500}30`:`${r.sky500}30`}]}>
24
- <T style={[t.chipText,{color:e.client==="axios"?r.purple:e.client==="apollo"||e.client==="graphql"?r.pink500:e.client==="xhr"?r.amber700:r.sky600}]}>
25
- {e.client.toUpperCase()}
23
+ {r.client&&<C style={[t.chip,{backgroundColor:r.client==="axios"?`${e.purple}14`:r.client==="apollo"||r.client==="graphql"?`${e.pink500}14`:r.client==="xhr"?`${e.amber500}14`:`${e.sky500}14`,borderColor:r.client==="axios"?`${e.purple}30`:r.client==="apollo"||r.client==="graphql"?`${e.pink500}30`:r.client==="xhr"?`${e.amber500}30`:`${e.sky500}30`}]}>
24
+ <T style={[t.chipText,{color:r.client==="axios"?e.purple:r.client==="apollo"||r.client==="graphql"?e.pink500:r.client==="xhr"?e.amber700:e.sky600}]}>
25
+ {r.client.toUpperCase()}
26
26
  </T>
27
27
  </C>}
28
28
 
29
29
 
30
- {(e.url.toLowerCase().includes("graphql")||e.client==="apollo"||e.client==="graphql")&&<C style={[t.chip,{backgroundColor:r.roseBg,borderColor:r.roseBorder}]}>
31
- <T style={[t.chipText,{color:r.pink600}]}>
30
+ {(r.url.toLowerCase().includes("graphql")||r.client==="apollo"||r.client==="graphql")&&<C style={[t.chip,{backgroundColor:e.roseBg,borderColor:e.roseBorder}]}>
31
+ <T style={[t.chipText,{color:e.pink600}]}>
32
32
  GQL
33
33
  </T>
34
34
  </C>}
35
35
  </C>
36
36
 
37
37
  <C style={t.cardHeaderRight}>
38
- <C style={[t.statusPill,{backgroundColor:R?`${r.errorColor}14`:V?`${r.darkOrange}14`:`${O}14`,borderColor:R?`${r.errorColor}33`:V?`${r.darkOrange}33`:`${O}33`}]}>
38
+ <C style={[t.statusPill,{backgroundColor:R?`${e.errorColor}14`:V?`${e.darkOrange}14`:`${D}14`,borderColor:R?`${e.errorColor}33`:V?`${e.darkOrange}33`:`${D}33`}]}>
39
39
  {_()}
40
- <T style={[t.statusPillText,{color:R?r.errorColor:V?r.darkOrange:O}]}>
40
+ <T style={[t.statusPillText,{color:R?e.errorColor:V?e.darkOrange:D}]}>
41
41
  {X()}
42
42
  </T>
43
43
  </C>
44
44
  <A onPress={K}hitSlop={8}style={t.globeBtn}accessibilityRole="button"accessibilityLabel="Open in Browser">
45
- <Pe color={r.grayTextWeak}size={12}/>
45
+ <Pe color={e.grayTextWeak}size={12}/>
46
46
  </A>
47
- <Fe color={r.grayTextWeak}size={13}/>
47
+ <Fe color={e.grayTextWeak}size={13}/>
48
48
  </C>
49
49
  </C>
50
50
 
51
51
 
52
52
  <C style={t.urlBox}>
53
+
53
54
  <C style={t.urlMainRow}>
54
- <Me text={H.path}search={J}style={t.pathText}highlightStyle={t.highlight}numberOfLines={1}ellipsizeMode="middle"/>
55
+ <C style={t.hostRow}>
56
+ <C style={[t.protoBadge,{backgroundColor:H.isHttps?`${e.emerald600}12`:`${e.amber600}12`,borderColor:H.isHttps?`${e.emerald600}2B`:`${e.amber600}2B`}]}>
57
+ <T style={[t.protoBadgeText,{color:H.isHttps?e.emerald600:e.amber700}]}>
58
+ {H.isHttps?"HTTPS":"HTTP"}
59
+ </T>
60
+ </C>
61
+ <G text={H.host||r.url}search={j}style={t.hostText}highlightStyle={t.highlight}numberOfLines={1}ellipsizeMode="tail"/>
62
+ </C>
55
63
  <C style={t.urlBadgeRow}>
56
64
  {Z&&<C style={t.jsonBadge}>
57
65
  <T style={t.jsonBadgeText}>.json</T>
58
66
  </C>}
59
- {e.duplicateCount!=null&&e.duplicateCount>1&&<C style={t.dupBadge}>
60
- <T style={t.dupBadgeText}>×{e.duplicateCount}</T>
67
+ {r.duplicateCount!=null&&r.duplicateCount>1&&<C style={t.dupBadge}>
68
+ <T style={t.dupBadgeText}>×{r.duplicateCount}</T>
61
69
  </C>}
62
70
  </C>
63
71
  </C>
64
72
 
65
- <C style={t.hostRow}>
66
- <C style={[t.protoBadge,{backgroundColor:H.isHttps?`${r.emerald600}12`:`${r.amber600}12`,borderColor:H.isHttps?`${r.emerald600}2B`:`${r.amber600}2B`}]}>
67
- <T style={[t.protoBadgeText,{color:H.isHttps?r.emerald600:r.amber700}]}>
68
- {H.isHttps?"HTTPS":"HTTP"}
69
- </T>
70
- </C>
71
- <T style={t.hostText}numberOfLines={1}ellipsizeMode="tail">
72
- {H.host||e.url}
73
- </T>
73
+
74
+ <C style={t.slugRow}>
75
+ <G text={H.path}search={j}style={t.pathText}highlightStyle={t.highlight}numberOfLines={1}ellipsizeMode="middle"/>
74
76
  </C>
75
77
  </C>
76
78
 
@@ -78,23 +80,23 @@ ${e.url}`,[{text:z("common.cancel")||"Cancel",style:"cancel"},{text:z("common.op
78
80
  <C style={t.cardFooterRow}>
79
81
  <C style={t.footerLeft}>
80
82
  <C style={t.cardDateRow}>
81
- <Ie color={r.grayTextWeak}size={10}/>
83
+ <Ie color={e.grayTextWeak}size={10}/>
82
84
  <T style={t.cardDateText}numberOfLines={1}>{Y}</T>
83
85
  </C>
84
86
  </C>
85
87
 
86
88
  <C style={t.footerRight}>
87
- {e.response!=null&&<C style={t.metaStatChip}>
88
- <Le color={r.purple}size={9}/>
89
+ {r.response!=null&&<C style={t.metaStatChip}>
90
+ <Le color={e.purple}size={9}/>
89
91
  <T style={t.metaStatText}>
90
- {He(e.response)}
92
+ {He(r.response)}
91
93
  </T>
92
94
  </C>}
93
95
 
94
- {e.duration!=null&&!R&&<C style={[t.metaStatChip,{backgroundColor:`${I}12`,borderColor:`${I}2E`}]}>
96
+ {r.duration!=null&&!R&&<C style={[t.metaStatChip,{backgroundColor:`${I}12`,borderColor:`${I}2E`}]}>
95
97
  <N color={I}size={9}/>
96
98
  <T style={[t.metaStatText,{color:I}]}>
97
- {e.duration}ms
99
+ {r.duration}ms
98
100
  </T>
99
101
  </C>}
100
102
  </C>
@@ -102,10 +104,10 @@ ${e.url}`,[{text:z("common.cancel")||"Cancel",style:"cancel"},{text:z("common.op
102
104
 
103
105
 
104
106
  <C style={t.waterfallContainer}>
105
- {typeof e.duration=="number"&&e.duration>0&&!R&&<C style={[t.waterfallBar,{width:`${Math.min(100,Math.max(6,e.duration/1200*100))}%`,backgroundColor:I}]}/>}
107
+ {typeof r.duration=="number"&&r.duration>0&&!R&&<C style={[t.waterfallBar,{width:`${Math.min(100,Math.max(6,r.duration/1200*100))}%`,backgroundColor:I}]}/>}
106
108
  </C>
107
109
  </C>
108
110
 
109
- {$&&<D.View pointerEvents="none"style={[E.absoluteFill,{backgroundColor:j,opacity:W}]}/>}
110
- </Ae>
111
- </C>}const t=E.create({container:{paddingHorizontal:8,paddingVertical:4,height:126,justifyContent:"center"},card:{height:118,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:r.dividerColor,shadowColor:r.shadowColorString},cardBody:{height:"100%",paddingHorizontal:12,paddingTop:9,paddingBottom:7,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:8,gap:6,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0},smallCheckbox:{width:15,height:15,borderRadius:4,borderWidth:1.5,borderColor:r.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:r.white},smallCheckboxChecked:{backgroundColor:r.purple,borderColor:r.purple},serialNumber:{fontFamily:S.interBold,color:r.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:7,paddingVertical:2.5,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:r.white},chip:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},chipText:{fontFamily:S.interBold,fontSize:9,lineHeight:12},statusPill:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:2.5,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:S.interBold,fontSize:10,lineHeight:13},globeBtn:{padding:3,borderRadius:4,backgroundColor:`${r.grayTextWeak}12`,alignItems:"center",justifyContent:"center"},urlBox:{backgroundColor:r.grayBackground,borderRadius:7,borderWidth:1,borderColor:r.dividerColor,paddingHorizontal:9,paddingVertical:5,height:48,minHeight:48,maxHeight:48,justifyContent:"center",gap:3,overflow:"hidden"},urlMainRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},pathText:{fontFamily:S.interBold,fontSize:12,lineHeight:16,color:r.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${r.darkOrange}14`,borderColor:`${r.darkOrange}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},jsonBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:r.darkOrange},dupBadge:{backgroundColor:`${r.purple}14`,borderColor:`${r.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:r.purple},hostRow:{flexDirection:"row",alignItems:"center",gap:5,minHeight:15},protoBadge:{paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5,borderWidth:1},protoBadgeText:{fontFamily:S.interBold,fontSize:8,lineHeight:10},hostText:{fontFamily:S.interMedium,fontSize:10,lineHeight:13,color:r.grayTextWeak,flex:1},highlight:{backgroundColor:r.yellowHighlight,color:r.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:6},footerLeft:{flexDirection:"row",alignItems:"center",gap:6,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:S.interRegular,fontSize:10,lineHeight:13,color:r.slate400},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:r.violetSoftBg,borderColor:r.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:S.interBold,color:r.violetSoftText,fontSize:9,lineHeight:12},waterfallContainer:{height:2.5,width:"100%",backgroundColor:r.graySurface,borderRadius:1.5,overflow:"hidden",marginTop:2},waterfallBar:{height:"100%",borderRadius:1.5}});function qe(e,B){return e.item===B.item&&e.isSelected===B.isSelected&&e.isNew===B.isNew&&e.searchStr===B.searchStr&&e.timelineMinStart===B.timelineMinStart&&e.timelineTotalRange===B.timelineTotalRange&&e.onPress===B.onPress&&e.onToggleSelect===B.onToggleSelect}export default re.memo(Ue,qe);
111
+ {$&&<W.View pointerEvents="none"style={[E.absoluteFill,{backgroundColor:M,opacity:O}]}/>}
112
+ </Me>
113
+ </C>}const t=E.create({container:{paddingHorizontal:8,paddingVertical:4,height:126,justifyContent:"center"},card:{height:118,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:e.dividerColor,shadowColor:e.shadowColorString},cardBody:{height:"100%",paddingHorizontal:8,paddingTop:8,paddingBottom:6,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:4,gap:4.5,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},smallCheckbox:{width:15,height:15,borderRadius:4,borderWidth:1.5,borderColor:e.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:e.white},smallCheckboxChecked:{backgroundColor:e.purple,borderColor:e.purple},serialNumber:{fontFamily:S.interBold,color:e.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:e.white},chip:{paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4,borderWidth:1},chipText:{fontFamily:S.interBold,fontSize:9,lineHeight:12},statusPill:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12},globeBtn:{padding:3,borderRadius:4,backgroundColor:`${e.grayTextWeak}12`,alignItems:"center",justifyContent:"center"},urlBox:{backgroundColor:e.grayBackground,borderRadius:7,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:7,paddingVertical:4.5,height:48,minHeight:48,maxHeight:48,justifyContent:"center",gap:2.5,overflow:"hidden"},urlMainRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:4,minHeight:16},hostRow:{flexDirection:"row",alignItems:"center",gap:5,flex:1,minWidth:0},protoBadge:{paddingHorizontal:4,paddingVertical:1,borderRadius:3.5,borderWidth:1},protoBadgeText:{fontFamily:S.interBold,fontSize:8,lineHeight:10},hostText:{fontFamily:S.interBold,fontSize:11.5,lineHeight:15,color:e.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},jsonBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:e.darkOrange},dupBadge:{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:e.purple},slugRow:{flexDirection:"row",alignItems:"center",minHeight:15},pathText:{fontFamily:S.interMedium,fontSize:10.5,lineHeight:14,color:e.slate600||e.grayText,flex:1},highlight:{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:4},footerLeft:{flexDirection:"row",alignItems:"center",gap:4.5,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:S.interRegular,fontSize:10,lineHeight:13,color:e.slate400},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:S.interBold,color:e.violetSoftText,fontSize:9,lineHeight:12},waterfallContainer:{height:2.5,width:"100%",backgroundColor:e.graySurface,borderRadius:1.5,overflow:"hidden",marginTop:2},waterfallBar:{height:"100%",borderRadius:1.5}});function Ee(r,B){return r.item===B.item&&r.isSelected===B.isSelected&&r.isNew===B.isNew&&r.searchStr===B.searchStr&&r.timelineMinStart===B.timelineMinStart&&r.timelineTotalRange===B.timelineTotalRange&&r.onPress===B.onPress&&r.onToggleSelect===B.onToggleSelect}export default re.memo(Ae,Ee);
@@ -1,9 +1,9 @@
1
- import{Component as k}from"react";import{StyleSheet as z,Text as T,View as C,TouchableOpacity as F,Platform as D}from"react-native";import{AppFonts as S}from"../styles/AppFonts";import{AppColors as e}from"../styles/AppColors";import{copyToClipboard as I}from"../helpers";import{WarningTriangleIcon as O,RefreshCcwIcon as V,CopyIcon as B}from"./NetworkIcons";import{handleInterceptedCrash as W}from"../customHooks/crashHandler";import{CrashType as M}from"../types/enums";export class ModuleErrorBoundary extends k{constructor(){super(...arguments),this.state={hasError:!1,error:null,copied:!1},this.handleRetry=()=>{this.setState({hasError:!1,error:null,copied:!1}),this.props.onRetry&&this.props.onRetry()},this.handleCopy=()=>{if(!this.state.error)return;const t=`[Module Error: ${this.props.moduleName||"Micro-Feature"}]
1
+ import{Component as I}from"react";import{StyleSheet as O,Text as T,View as C,TouchableOpacity as E,Platform as k}from"react-native";import{AppFonts as S}from"../styles/AppFonts";import{AppColors as e}from"../styles/AppColors";import{copyToClipboard as V}from"../helpers";import{WarningTriangleIcon as D,RefreshCcwIcon as B,CopyIcon as F}from"./NetworkIcons";import{handleInterceptedCrash as W}from"../customHooks/crashHandler";import{CrashType as M}from"../types/enums";export class ModuleErrorBoundary extends I{constructor(){super(...arguments),this.state={hasError:!1,error:null,copied:!1},this.handleRetry=()=>{this.setState({hasError:!1,error:null,copied:!1}),this.props.onRetry&&this.props.onRetry()},this.handleCopy=()=>{if(!this.state.error)return;const t=`[Module Error: ${this.props.moduleName||"Micro-Feature"}]
2
2
  Message: ${this.state.error.message}
3
- Stack: ${this.state.error.stack||"N/A"}`;I(t),this.setState({copied:!0}),setTimeout(()=>{this.setState({copied:!1})},2e3)}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,R){try{W(t,t?.stack,!1,M.Js,R.componentStack||void 0)}catch{}this.props.onError&&this.props.onError(t,R)}render(){if(this.state.hasError&&this.state.error){const{fallback:t,moduleName:R="UI Module",containerStyle:E}=this.props;return typeof t=="function"?t(this.state.error,this.handleRetry):t||<C style={[r.card,E]}>
3
+ Stack: ${this.state.error.stack||"N/A"}`;V(t),this.setState({copied:!0}),setTimeout(()=>{this.setState({copied:!1})},2e3)}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,R){try{W(t,t?.stack,!1,M.Js,R.componentStack||void 0)}catch{}this.props.onError&&this.props.onError(t,R)}render(){if(this.state.hasError&&this.state.error){const{fallback:t,moduleName:R="UI Module",containerStyle:z}=this.props;return typeof t=="function"?t(this.state.error,this.handleRetry):t||<C style={[r.card,z]}>
4
4
  <C style={r.headerRow}>
5
5
  <C style={r.titleRow}>
6
- <O color="#DC2626"size={16}/>
6
+ <D color={e.red600}size={16}/>
7
7
  <T style={r.moduleName}numberOfLines={1}>
8
8
  {R}
9
9
  </T>
@@ -18,16 +18,16 @@ Stack: ${this.state.error.stack||"N/A"}`;I(t),this.setState({copied:!0}),setTime
18
18
  </T>
19
19
 
20
20
  <C style={r.actionsRow}>
21
- <F style={r.retryButton}onPress={this.handleRetry}activeOpacity={.7}>
22
- <V color="#FFFFFF"size={12}/>
21
+ <E style={r.retryButton}onPress={this.handleRetry}activeOpacity={.7}>
22
+ <B color={e.white}size={12}/>
23
23
  <T style={r.retryText}>Retry Module</T>
24
- </F>
24
+ </E>
25
25
 
26
- <F style={r.copyButton}onPress={this.handleCopy}activeOpacity={.7}>
27
- <B color="#475569"size={12}/>
26
+ <E style={r.copyButton}onPress={this.handleCopy}activeOpacity={.7}>
27
+ <F color={e.slate600}size={12}/>
28
28
  <T style={r.copyText}>
29
29
  {this.state.copied?"Copied":"Copy Error"}
30
30
  </T>
31
- </F>
31
+ </E>
32
32
  </C>
33
- </C>}return this.props.children}}export default ModuleErrorBoundary;const r=z.create({card:{backgroundColor:e.red50,borderColor:`${e.red500}33`,borderWidth:1.2,borderRadius:16,padding:14,marginVertical:6,gap:10,...D.select({ios:{shadowColor:e.red600,shadowOffset:{width:0,height:2},shadowOpacity:.06,shadowRadius:6},android:{elevation:2}})},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},moduleName:{fontSize:12.5,fontWeight:"800",color:e.redErrorText,fontFamily:S.interBold,flexShrink:1},badge:{backgroundColor:e.red100,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,borderColor:`${e.red500}4D`},badgeText:{fontSize:8.5,fontWeight:"800",color:e.rose700,letterSpacing:.4},message:{fontSize:11.5,color:e.redErrorText,lineHeight:16,fontFamily:S.interRegular},actionsRow:{flexDirection:"row",alignItems:"center",gap:8,marginTop:2},retryButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:e.red600,paddingVertical:7,paddingHorizontal:12,borderRadius:9},retryText:{fontSize:11,fontWeight:"700",color:e.white,fontFamily:S.interBold},copyButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:4,backgroundColor:e.graySurface,paddingVertical:7,paddingHorizontal:12,borderRadius:9,borderWidth:1,borderColor:e.grayBorderSecondary},copyText:{fontSize:11,fontWeight:"600",color:e.grayText,fontFamily:S.interMedium}});
33
+ </C>}return this.props.children}}export default ModuleErrorBoundary;const r=O.create({card:{backgroundColor:e.red50,borderColor:`${e.red500}33`,borderWidth:1.2,borderRadius:16,padding:14,marginVertical:6,gap:10,...k?.select?k.select({ios:{shadowColor:e.red600,shadowOffset:{width:0,height:2},shadowOpacity:.06,shadowRadius:6},android:{elevation:2}}):{elevation:2}},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},moduleName:{fontSize:12.5,fontWeight:"800",color:e.redErrorText,fontFamily:S.interBold,flexShrink:1},badge:{backgroundColor:e.red100,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,borderColor:`${e.red500}4D`},badgeText:{fontSize:8.5,fontWeight:"800",color:e.rose700,letterSpacing:.4},message:{fontSize:11.5,color:e.redErrorText,lineHeight:16,fontFamily:S.interRegular},actionsRow:{flexDirection:"row",alignItems:"center",gap:8,marginTop:2},retryButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:e.red600,paddingVertical:7,paddingHorizontal:12,borderRadius:9},retryText:{fontSize:11,fontWeight:"700",color:e.white,fontFamily:S.interBold},copyButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:4,backgroundColor:e.graySurface,paddingVertical:7,paddingHorizontal:12,borderRadius:9,borderWidth:1,borderColor:e.grayBorderSecondary},copyText:{fontSize:11,fontWeight:"600",color:e.grayText,fontFamily:S.interMedium}});
@@ -145,6 +145,9 @@ export declare const HelpCircleIcon: ({ color, size, }: IconProps) => React.JSX.
145
145
  export declare const SendIcon: ({ color, size, }: IconProps) => React.JSX.Element;
146
146
  export declare const LifeBuoyIcon: ({ color, size, }: IconProps) => React.JSX.Element;
147
147
  export declare const CameraIcon: ({ color, size, }: IconProps) => React.JSX.Element;
148
+ export declare const ScreenshotCaptureIcon: ({ color, size, }: IconProps) => React.JSX.Element;
149
+ export declare const CameraLensIcon: ({ color, size, }: IconProps) => React.JSX.Element;
150
+ export declare const ScreenRecordIcon: ({ color, size, }: IconProps) => React.JSX.Element;
148
151
  export declare const VideoCameraIcon: ({ color, size, }: IconProps) => React.JSX.Element;
149
152
  export declare const MicrophoneIcon: ({ color, size, }: IconProps) => React.JSX.Element;
150
153
  export declare const GifIcon: ({ color, size, }: IconProps) => React.JSX.Element;
@@ -183,3 +186,27 @@ export declare const SupportIcon: ({ color, size, }: IconProps) => React.JSX.Ele
183
186
  export declare const HeartIcon: ({ color, size, fill, }: IconProps & {
184
187
  fill?: string;
185
188
  }) => React.JSX.Element;
189
+ export declare const CropIcon: ({ color, size }: IconProps) => React.JSX.Element;
190
+ export declare const RotateIcon: ({ color, size }: IconProps) => React.JSX.Element;
191
+ export declare const RedactIcon: ({ color, size }: IconProps) => React.JSX.Element;
192
+ export declare const AnnotateIcon: ({ color, size }: IconProps) => React.JSX.Element;
193
+ export declare const ScissorsIcon: ({ color, size }: IconProps) => React.JSX.Element;
194
+ export declare const VolumeXIcon: ({ color, size }: IconProps) => React.JSX.Element;
195
+ export declare const MailIcon: ({ color, size }: IconProps) => React.JSX.Element;
196
+ export declare const ActivityIcon: ({ color, size }: IconProps) => React.JSX.Element;
197
+ export declare const SpeedIcon: ({ color, size }: IconProps) => React.JSX.Element;
198
+ export declare const BatteryChargingIcon: ({ color, size }: IconProps) => React.JSX.Element;
199
+ export declare const BatteryFullIcon: ({ color, size }: IconProps) => React.JSX.Element;
200
+ export declare const PenIcon: ({ color, size }: IconProps) => React.JSX.Element;
201
+ export declare const ShapesIcon: ({ color, size }: IconProps) => React.JSX.Element;
202
+ export declare const RectangleIcon: ({ color, size }: IconProps) => React.JSX.Element;
203
+ export declare const CircleIconOutline: ({ color, size }: IconProps) => React.JSX.Element;
204
+ export declare const EllipseIconOutline: ({ color, size }: IconProps) => React.JSX.Element;
205
+ export declare const TypeIcon: ({ color, size }: IconProps) => React.JSX.Element;
206
+ export declare const BlurIcon: ({ color, size }: IconProps) => React.JSX.Element;
207
+ export declare const ZoomInIcon: ({ color, size }: IconProps) => React.JSX.Element;
208
+ export declare const ZoomOutIcon: ({ color, size }: IconProps) => React.JSX.Element;
209
+ export declare const UndoIcon: ({ color, size }: IconProps) => React.JSX.Element;
210
+ export declare const ResizeIcon: ({ color, size }: IconProps) => React.JSX.Element;
211
+ export declare const AspectRatioIcon: ({ color, size }: IconProps) => React.JSX.Element;
212
+ export declare const GripVerticalIcon: ({ color, size }: IconProps) => React.JSX.Element;
@@ -1,4 +1,4 @@
1
- import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}from"react-native-svg";import{AppColors as p}from"../styles/AppColors";export const EmptyRadarIcon=({color:e=p.purple,size:t=32})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
1
+ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Polygon as V,Polyline as C,Rect as B}from"react-native-svg";import{AppColors as p}from"../styles/AppColors";export const EmptyRadarIcon=({color:e=p.purple,size:t=32})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
2
2
  <L d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"stroke={e}strokeWidth="1.5"strokeLinecap="round"strokeLinejoin="round"/>
3
3
  <M cx="12"cy="11"r="3"stroke={e}strokeWidth="1.5"/>
4
4
  <L d="M12 14v3"stroke={e}strokeWidth="1.5"strokeLinecap="round"/>
@@ -260,7 +260,7 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
260
260
  </W>,PackageBoxIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
261
261
  <L d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
262
262
  <L d="M3.27 6.96L12 12.01l8.73-5.05M12 22.08V12"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
263
- </W>,StarIcon=({color:e="#F59E0B",size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill={e}>
263
+ </W>,StarIcon=({color:e=p.amber500,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill={e}>
264
264
  <L d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"stroke={e}strokeWidth="1.5"strokeLinecap="round"strokeLinejoin="round"/>
265
265
  </W>,GitHubIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
266
266
  <L d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
@@ -336,7 +336,7 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
336
336
  <L d="M8 3c-2 1-3 2.5-3 5 0 2-1 3.5-2 4 1 .5 2 2 2 4 0 2.5 1 4 3 5M16 3c2 1 3 2.5 3 5 0 2 1 3.5 2 4-1 .5-2 2-2 4 0 2.5-1 4-3 5"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
337
337
  </W>,AppFramesIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
338
338
  <L d="M4 6h16M4 10h11M4 14h16M4 18h9"stroke={e}strokeWidth="2"strokeLinecap="round"/>
339
- <L d="M18 12.5l2 2 3-3.5"stroke="#059669"strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
339
+ <L d="M18 12.5l2 2 3-3.5"stroke={p.emerald600}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
340
340
  </W>,AllFramesIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
341
341
  <L d="M4 4h16M4 8h16M4 12h16M4 16h16M4 20h10"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
342
342
  <B x="16"y="16"width="4"height="4"rx="1"fill={e}/>
@@ -441,6 +441,19 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
441
441
  </W>,CameraIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
442
442
  <L d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
443
443
  <M cx="12"cy="13"r="4"stroke={e}strokeWidth="2"/>
444
+ </W>,ScreenshotCaptureIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
445
+ <L d="M3 7V4a1 1 0 0 1 1-1h3M17 3h3a1 1 0 0 1 1 1v3M21 17v3a1 1 0 0 1-1 1h-3M7 21H4a1 1 0 0 1-1-1v-3"stroke={e}strokeWidth="2.2"strokeLinecap="round"strokeLinejoin="round"/>
446
+ <M cx="12"cy="12"r="4.2"stroke={e}strokeWidth="2"/>
447
+ <M cx="12"cy="12"r="1.8"fill={e}/>
448
+ </W>,CameraLensIcon=({color:e=p.white,size:t=20})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
449
+ <M cx="12"cy="12"r="9"stroke={e}strokeWidth="1.8"/>
450
+ <M cx="12"cy="12"r="6"stroke={e}strokeWidth="1.4"strokeDasharray="3 2"/>
451
+ <M cx="12"cy="12"r="3"fill={e}/>
452
+ <L d="M12 3v2M12 19v2M3 12h2M19 12h2"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
453
+ </W>,ScreenRecordIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
454
+ <B x="2"y="4"width="14"height="16"rx="3"stroke={e}strokeWidth="2"/>
455
+ <L d="M16 10l5-3.5v11L16 14v-4z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
456
+ <M cx="9"cy="12"r="2.5"fill={e}/>
444
457
  </W>,VideoCameraIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
445
458
  <L d="M23 7l-7 5 7 5V7z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
446
459
  <B x="1"y="5"width="15"height="14"rx="2"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
@@ -572,4 +585,89 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
572
585
  <S x1="4.93"y1="19.07"x2="9.17"y2="14.83"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
573
586
  </W>,HeartIcon=({color:e=p.red500,size:t=20,fill:I=e})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
574
587
  <L d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"fill={I}/>
588
+ </W>,CropIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
589
+ <L d="M6.13 1L6 16a2 2 0 0 0 2 2h15"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
590
+ <L d="M1 6.13L16 6a2 2 0 0 1 2 2v15"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
591
+ </W>,RotateIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
592
+ <L d="M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
593
+ </W>,RedactIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
594
+ <L d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
595
+ <S x1="1"y1="1"x2="23"y2="23"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
596
+ </W>,AnnotateIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
597
+ <L d="M12 20h9"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
598
+ <L d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
599
+ </W>,ScissorsIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
600
+ <M cx="6"cy="6"r="3"stroke={e}strokeWidth="2"/>
601
+ <M cx="6"cy="18"r="3"stroke={e}strokeWidth="2"/>
602
+ <S x1="20"y1="4"x2="8.12"y2="15.88"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
603
+ <S x1="14.47"y1="14.48"x2="20"y2="20"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
604
+ <S x1="8.12"y1="8.12"x2="12"y2="12"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
605
+ </W>,VolumeXIcon=({color:e=p.white,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
606
+ <V points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
607
+ <S x1="23"y1="9"x2="17"y2="15"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
608
+ <S x1="17"y1="9"x2="23"y2="15"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
609
+ </W>,MailIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
610
+ <L d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
611
+ <L d="M22 6l-10 7L2 6"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
612
+ </W>,ActivityIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
613
+ <L d="M22 12h-4l-3 9L9 3l-3 9H2"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
614
+ </W>,SpeedIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
615
+ <L d="M12 2v4M4.93 4.93l2.83 2.83M2 12h4M4.93 19.07l2.83-2.83M12 22v-4M19.07 19.07l-2.83-2.83M22 12h-4M19.07 4.93l-2.83 2.83"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
616
+ </W>,BatteryChargingIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
617
+ <L d="M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2M19 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2M23 13v-2"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
618
+ <L d="M11 6l-4 7h6l-4 7"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
619
+ </W>,BatteryFullIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
620
+ <B x="1"y="6"width="18"height="12"rx="2"stroke={e}strokeWidth="2"/>
621
+ <S x1="23"y1="13"x2="23"y2="11"stroke={e}strokeWidth="2"strokeLinecap="round"/>
622
+ <B x="4"y="9"width="12"height="6"fill={e}rx="1"/>
623
+ </W>,PenIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
624
+ <L d="M12 19l7-7 3 3-7 7-3-3z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
625
+ <L d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
626
+ <L d="M2 2l7.586 7.586"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
627
+ <M cx="11"cy="11"r="2"stroke={e}strokeWidth="2"/>
628
+ </W>,ShapesIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
629
+ <B x="3"y="3"width="8"height="8"rx="1.5"stroke={e}strokeWidth="2"/>
630
+ <M cx="17.5"cy="17.5"r="4.5"stroke={e}strokeWidth="2"/>
631
+ <V points="18,3 22,11 14,11"stroke={e}strokeWidth="2"strokeLinejoin="round"/>
632
+ </W>,RectangleIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
633
+ <B x="3"y="5"width="18"height="14"rx="2"stroke={e}strokeWidth="2"/>
634
+ </W>,CircleIconOutline=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
635
+ <M cx="12"cy="12"r="9"stroke={e}strokeWidth="2"/>
636
+ </W>,EllipseIconOutline=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
637
+ <T cx="12"cy="12"rx="10"ry="6"stroke={e}strokeWidth="2"/>
638
+ </W>,TypeIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
639
+ <C points="4 7 4 4 20 4 20 7"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
640
+ <S x1="9"y1="20"x2="15"y2="20"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
641
+ <S x1="12"y1="4"x2="12"y2="20"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
642
+ </W>,BlurIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
643
+ <M cx="12"cy="12"r="10"stroke={e}strokeWidth="2"/>
644
+ <L d="M12 2a10 10 0 0 1 0 20V2z"fill={e}opacity={.4}/>
645
+ <S x1="12"y1="2"x2="12"y2="22"stroke={e}strokeWidth="2"/>
646
+ </W>,ZoomInIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
647
+ <M cx="11"cy="11"r="8"stroke={e}strokeWidth="2"/>
648
+ <S x1="21"y1="21"x2="16.65"y2="16.65"stroke={e}strokeWidth="2"strokeLinecap="round"/>
649
+ <S x1="11"y1="8"x2="11"y2="14"stroke={e}strokeWidth="2"strokeLinecap="round"/>
650
+ <S x1="8"y1="11"x2="14"y2="11"stroke={e}strokeWidth="2"strokeLinecap="round"/>
651
+ </W>,ZoomOutIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
652
+ <M cx="11"cy="11"r="8"stroke={e}strokeWidth="2"/>
653
+ <S x1="21"y1="21"x2="16.65"y2="16.65"stroke={e}strokeWidth="2"strokeLinecap="round"/>
654
+ <S x1="8"y1="11"x2="14"y2="11"stroke={e}strokeWidth="2"strokeLinecap="round"/>
655
+ </W>,UndoIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
656
+ <L d="M3 7v6h6"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
657
+ <L d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
658
+ </W>,ResizeIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
659
+ <C points="15 3 21 3 21 9"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
660
+ <C points="9 21 3 21 3 15"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
661
+ <S x1="21"y1="3"x2="14"y2="10"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
662
+ <S x1="3"y1="21"x2="10"y2="14"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
663
+ </W>,AspectRatioIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
664
+ <B x="2"y="4"width="20"height="16"rx="2"stroke={e}strokeWidth="2"/>
665
+ <L d="M8 8H5v3M16 16h3v-3"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
666
+ </W>,GripVerticalIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
667
+ <M cx="9"cy="5"r="1.5"fill={e}/>
668
+ <M cx="9"cy="12"r="1.5"fill={e}/>
669
+ <M cx="9"cy="19"r="1.5"fill={e}/>
670
+ <M cx="15"cy="5"r="1.5"fill={e}/>
671
+ <M cx="15"cy="12"r="1.5"fill={e}/>
672
+ <M cx="15"cy="19"r="1.5"fill={e}/>
575
673
  </W>;
@@ -1,3 +1,3 @@
1
- export declare const ENC_MID = "";
2
- export declare const ENC_SEC = "";
3
- export declare const TELEMETRY_SALT = "";
1
+ export declare const ENC_MID = "df8ace0290a695bd05986213";
2
+ export declare const ENC_SEC = "db93cb0186b1f7bb0ba63a0d0a64997586849455ce37";
3
+ export declare const TELEMETRY_SALT = "rn-inapp-inspector-telemetry-v1";
@@ -1 +1 @@
1
- export const ENC_MID="",ENC_SEC="",TELEMETRY_SALT="";
1
+ export const ENC_MID="df8ace0290a695bd05986213",ENC_SEC="db93cb0186b1f7bb0ba63a0d0a64997586849455ce37",TELEMETRY_SALT="rn-inapp-inspector-telemetry-v1";
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "2.4.2";
1
+ export declare const LIB_VERSION = "2.5.1";
@@ -1 +1 @@
1
- export const LIB_VERSION="2.4.2";
1
+ export const LIB_VERSION="2.5.1";
@@ -1,3 +1,3 @@
1
- export { setupGlobalCrashHandler, subscribeCrashEvents, emitCrashEvent, getCrashRecords, clearCrashRecords, simulateTestCrash, exportCrashReport, parseCrashStackTrace, setMaxCrashLogsLimit, getMaxCrashLogsLimit, pruneCrashRecords, setCrashModuleEnabled, getCrashModuleEnabled, } from './customHooks/crashHandler';
1
+ export { setupGlobalCrashHandler, subscribeCrashEvents, emitCrashEvent, getCrashRecords, clearCrashRecords, simulateTestCrash, exportCrashReport, parseCrashStackTrace, triggerGlobalCrashScreen, setMaxCrashLogsLimit, getMaxCrashLogsLimit, pruneCrashRecords, setCrashModuleEnabled, getCrashModuleEnabled, } from './customHooks/crashHandler';
2
2
  export type { CrashRecord, CrashBreadcrumb, } from './types';
3
3
  export { CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';
package/dist/esm/crash.js CHANGED
@@ -1 +1 @@
1
- export{setupGlobalCrashHandler,subscribeCrashEvents,emitCrashEvent,getCrashRecords,clearCrashRecords,simulateTestCrash,exportCrashReport,parseCrashStackTrace,setMaxCrashLogsLimit,getMaxCrashLogsLimit,pruneCrashRecords,setCrashModuleEnabled,getCrashModuleEnabled}from"./customHooks/crashHandler";export{CrashType,CrashExportFormat,CrashDetailSubTab,CrashFilterType,BreadcrumbType}from"./types";
1
+ export{setupGlobalCrashHandler,subscribeCrashEvents,emitCrashEvent,getCrashRecords,clearCrashRecords,simulateTestCrash,exportCrashReport,parseCrashStackTrace,triggerGlobalCrashScreen,setMaxCrashLogsLimit,getMaxCrashLogsLimit,pruneCrashRecords,setCrashModuleEnabled,getCrashModuleEnabled}from"./customHooks/crashHandler";export{CrashType,CrashExportFormat,CrashDetailSubTab,CrashFilterType,BreadcrumbType}from"./types";
@@ -35,6 +35,7 @@ export declare const recordCustomCrash: (error: Error | string, options?: {
35
35
  type?: CrashType;
36
36
  componentStack?: string;
37
37
  }) => CrashRecord;
38
- export declare const simulateTestCrash: (type?: CrashType, customMessage?: string, customStack?: string) => CrashRecord;
38
+ export declare const triggerGlobalCrashScreen: (crashRecord: CrashRecord) => void;
39
+ export declare const simulateTestCrash: (type?: CrashType, customMessage?: string, customStack?: string, isFatal?: boolean) => CrashRecord;
39
40
  export declare const exportCrashReport: (crash: CrashRecord, format?: CrashExportFormat) => string;
40
41
  export declare const setupGlobalCrashHandler: () => void;
@@ -1,7 +1,7 @@
1
- import{LogBox as M,NativeModules as v,TurboModuleRegistry as D,NativeEventEmitter as F,Platform as y,AppState as L,Dimensions as B}from"react-native";import{CrashExportFormat as A,CrashType as m}from"../types/enums";import{addLogFromCrash as H}from"./consoleLogger";import{showNativeFloatingButton as U,setNativeFloatingButtonBadge as _}from"../native/NativeInspector";import{t as s}from"../i18n";export{A as CrashExportFormat};let E=[],k=!1,I=0,l=[],f=[];const R=50;let S=100;const T=Date.now();let N=!1;export const setCrashModuleEnabled=e=>{N=e},getCrashModuleEnabled=()=>N,setMaxCrashLogsLimit=e=>{S=Math.max(10,e),l.length>S&&(l=l.slice(0,S))},getMaxCrashLogsLimit=()=>S,pruneCrashRecords=e=>{const t=e!==void 0?Math.max(0,e):Math.floor(l.length/2),n=l.length-t;return n>0&&(l=l.slice(0,t)),f.length>20&&(f=f.slice(0,20)),Math.max(0,n)},addCrashBreadcrumb=(e,t,n)=>{if(N)try{const o={type:e,message:t,timestamp:Date.now(),data:n};f.unshift(o),f.length>R&&(f=f.slice(0,R))}catch{}},recordNavigationBreadcrumb=(e,t)=>{addCrashBreadcrumb("navigation",s("crash.breadcrumbNavigation",{from:e||"/",to:t||"/"}),{from:e,to:t})},recordNetworkBreadcrumb=(e,t,n,o)=>{const r=n!=null?` [${n}]`:"",a=o!=null?` (${Math.round(o)}ms)`:"";addCrashBreadcrumb("network",`${t.toUpperCase()} ${e}${r}${a}`,{url:e,method:t,status:n,duration:o})},recordReduxBreadcrumb=(e,t)=>{addCrashBreadcrumb("redux",s("crash.breadcrumbAction",{actionType:e}),{type:e,payloadSummary:typeof t=="object"&&t!==null?Object.keys(t):typeof t})},recordUserActionBreadcrumb=(e,t)=>{addCrashBreadcrumb("user",e,t)},clearCrashBreadcrumbs=()=>{f=[]},getCrashBreadcrumbs=()=>[...f],parseCrashStackTrace=e=>{if(!e||typeof e!="string")return[];const t=e.split(`
2
- `),n=[];for(const o of t){const r=o.trim();if(!r||r.includes("crashHandler.ts")||r.includes("handleInterceptedCrash")||r.includes("addLogFromCrash")||r.includes("setupGlobalCrashHandler"))continue;const a=r.match(/^([^@]+)@(.*):(\d+):(\d+)$/);if(a){const[,c,i,u,g]=a,b=i.split("?")[0].split("/").pop()||i,x=!i.includes("node_modules")&&!i.includes("react-native")&&!i.includes("react-dom")&&!i.includes("hermes")&&!i.includes("internal");n.push({method:c.trim(),file:b,lineNumber:parseInt(u,10),column:parseInt(g,10),raw:r,isAppCode:x});continue}const d=r.match(/^at\s+(.+)\s+\((.+):(\d+):(\d+)\)$/);if(d){const[,c,i,u,g]=d,b=i.split("?")[0].split("/").pop()||i,x=!i.includes("node_modules")&&!i.includes("react-native")&&!i.includes("react-dom")&&!i.includes("internal");n.push({method:c.trim(),file:b,lineNumber:parseInt(u,10),column:parseInt(g,10),raw:r,isAppCode:x});continue}const h=r.match(/^at\s+(.+):(\d+):(\d+)$/);if(h){const[,c,i,u]=h,g=c.split("?")[0].split("/").pop()||c,b=!c.includes("node_modules")&&!c.includes("react-native");n.push({method:"<anonymous>",file:g,lineNumber:parseInt(i,10),column:parseInt(u,10),raw:r,isAppCode:b});continue}const $=r.match(/^at\s+([a-zA-Z0-9_$.]+)\(([a-zA-Z0-9_$]+\.java):(\d+)\)$/);if($){const[,c,i,u]=$,g=!c.startsWith("com.facebook.react")&&!c.startsWith("android.");n.push({method:c,file:i,lineNumber:parseInt(u,10),column:0,raw:r,isAppCode:g});continue}const p=r.match(/^\d+\s+([^\s]+)\s+(0x[0-9a-fA-F]+)\s+(.+)$/);if(p){const[,c,,i]=p,u=!c.startsWith("lib")&&!c.startsWith("Core")&&!c.startsWith("React");n.push({method:i,file:c,lineNumber:0,column:0,raw:r,isAppCode:u});continue}n.push({method:r.startsWith("at ")?r.slice(3):r,file:"runtime",lineNumber:0,column:0,raw:r,isAppCode:!1})}return n};const J=()=>{try{const e=globalThis.performance;if(e&&e.memory)return{usedJSHeapSize:Math.round(e.memory.usedJSHeapSize/(1024*1024)),totalJSHeapSize:Math.round(e.memory.totalJSHeapSize/(1024*1024))}}catch{}},z=()=>{try{const e=B.get("window");return`${Math.round(e.width)}x${Math.round(e.height)} (${e.scale}x)`}catch{return s("crash.unknown")}};export const computeCrashFingerprint=e=>{const t=e.type||"js",n=e.name||"Error",o=e.parsedStack&&e.parsedStack.length>0?e.parsedStack[0]:null,r=o?`${o.file}:${o.lineNumber}`:"unknown";return`${t}_${n}_${r}`},getCrashRecords=()=>[...l],clearCrashRecords=()=>{l=[],emitCrashEvent({error:null,message:"__CLEARED__",timestamp:Date.now()})},subscribeCrashEvents=e=>(E.push(e),()=>{E=E.filter(t=>t!==e)}),emitCrashEvent=e=>{if(e.message!=="__CLEARED__"){const t=Date.now();if(t-I<250)return;I=t}E.forEach(t=>{try{t(e)}catch{}})},handleInterceptedCrash=(e,t,n=!1,o,r)=>{try{const a=e instanceof Error||typeof e=="object"&&e!==null?e:new Error(String(e||s("crash.runtimeException"))),d=a.message||(typeof e=="string"?e:s("crash.runtimeException"));let h="";typeof t=="string"?h=t:Array.isArray(t)?h=t.map(C=>`at ${C.methodName||"<anonymous>"} (${C.file||"unknown"}:${C.lineNumber||0}:${C.column||0})`).join(`
3
- `):h=a.stack||new Error().stack||"";let $=o||m.Js;const p=d.toLowerCase();o||(p.includes("native")||p.includes("sigsegv")||p.includes("nsrange")||p.includes("nullpointerexception")||p.includes("fatal signal")?$=m.Native:p.includes("promise")||p.includes("unhandled rejection")||p.includes("unhandledrejection")?$=m.Promise:p.includes("render")||p.includes("errorboundary")||r?$=m.Render:$=m.Js);const c=new Date,i=c.toLocaleDateString(),u=c.toLocaleTimeString(),g=parseCrashStackTrace(h),b=H(a,`[${n?s("crash.logFatalCrash"):s("crash.logUnhandledError")}] ${d}`,h,n),x=typeof globalThis.HermesInternal<"u",j=typeof globalThis.nativeFabricUIManager<"u",w={id:`crash_${Date.now()}_${Math.random().toString(36).substr(2,6)}`,error:a,isFatal:n,type:$,message:d,name:a.name||(n?s("crash.errorNameFatal"):s("crash.errorNameUnhandled")),stack:h,parsedStack:g,componentStack:r||void 0,timestamp:Date.now(),dateStr:i,timeStr:u,deviceInfo:{platform:y.OS,osVersion:String(y.Version),rnVersion:y.constants?.reactNativeVersion?`${y.constants.reactNativeVersion.major}.${y.constants.reactNativeVersion.minor}.${y.constants.reactNativeVersion.patch}`:s("crash.unknown"),isHermes:x,isFabric:j,appState:L.currentState||"active"},memoryInfo:J(),breadcrumbs:[...f],logId:b?.id};l.unshift(w),l.length>S&&(l=l.slice(0,S)),emitCrashEvent({error:a,isFatal:n,message:`[${n?s("crash.logFatalCrash"):s("crash.logUnhandledError")}] ${d}`,stack:h,timestamp:Date.now(),logId:b?.id,crashRecord:w});try{U(),_(!0)}catch{}return w}catch{return{id:`crash_${Date.now()}`,isFatal:!0,type:m.Js,message:String(e||s("crash.unknownException")),timestamp:Date.now(),dateStr:new Date().toLocaleDateString(),timeStr:new Date().toLocaleTimeString()}}},recordCustomCrash=(e,t)=>handleInterceptedCrash(e,typeof e=="object"?e.stack:void 0,t?.isFatal??!1,t?.type||m.Custom,t?.componentStack),simulateTestCrash=(e=m.Js,t,n)=>{const o=new Error(t||P(e));return handleInterceptedCrash(e===m.Native?o.message:o,n||o.stack,e===m.Native,e,e===m.Render?V():void 0)};const P=e=>{switch(e){case"native":return s("crash.simNativeMessage");case"promise":return s("crash.simPromiseMessage");case"render":return s("crash.simRenderMessage");default:return s("crash.simJsMessage")}},V=()=>{try{const e=new Error;if(e.stack)return e.stack.split(`
4
- `).slice(1,6).map(t=>` ${t.trim()}`).join(`
5
- `)}catch{}};export const exportCrashReport=(e,t="text")=>{if(t==="json")return JSON.stringify(e,null,2);const n=Math.round((e.timestamp-T)/1e3);if(t==="markdown"){const r=[];return r.push(`## ${s("crash.mdReportTitle",{name:e.name||"Error"})}`),r.push(`> **${e.message}**`),r.push(""),r.push(`- **${s("crash.reportType")}** \`${e.type.toUpperCase()}\``),r.push(`- **${s("crash.reportFatal")}** \`${e.isFatal?s("crash.mdSeverityFatal"):s("crash.mdSeverityHandled")}\``),r.push(`- **${s("crash.reportTimestamp")}** ${e.dateStr} ${e.timeStr}`),r.push(`- **${s("crash.reportUptime")}** ${n}s`),r.push(`- **${s("crash.reportPlatform")}** ${e.deviceInfo?.platform?.toUpperCase()} (v${e.deviceInfo?.osVersion})`),r.push(`- **${s("crash.reportReactNative")}** v${e.deviceInfo?.rnVersion||"N/A"}`),r.push(`- **${s("crash.jsEngine")}** ${e.deviceInfo?.isHermes?s("crash.hermesEngine"):s("crash.jsc")}`),r.push(`- **${s("crash.reportArchitecture")}** ${e.deviceInfo?.isFabric?s("crash.reportFabricNew"):s("crash.reportPaperLegacy")}`),e.memoryInfo&&r.push(`- **${s("crash.reportJsMemory")}** ${e.memoryInfo.usedJSHeapSize} MB / ${e.memoryInfo.totalJSHeapSize} MB`),r.push(""),r.push(`### ${s("crash.mdStackTrace")}`),r.push("```"),r.push(e.stack||s("crash.reportNoStackTrace")),r.push("```"),e.componentStack&&(r.push(""),r.push(`### ${s("crash.mdComponentHierarchy")}`),r.push("```"),r.push(e.componentStack),r.push("```")),e.breadcrumbs&&e.breadcrumbs.length>0&&(r.push(""),r.push(`### ${s("crash.mdRecentBreadcrumbs")}`),e.breadcrumbs.forEach(a=>{const d=new Date(a.timestamp).toLocaleTimeString();r.push(`- \`[${d}]\` **[${a.type.toUpperCase()}]** ${a.message}`)})),r.join(`
6
- `)}const o=[];return o.push("===================================================="),o.push(` ${s("crash.reportTitle")} `),o.push("===================================================="),o.push(`${s("crash.reportErrorName")} ${e.name||"Error"}`),o.push(`${s("crash.reportMessage")} ${e.message}`),o.push(`${s("crash.reportType")} ${e.type.toUpperCase()}`),o.push(`${s("crash.reportFatal")} ${e.isFatal?s("crash.reportFatalYes"):s("crash.reportFatalNo")}`),o.push(`${s("crash.reportTimestamp")} ${e.dateStr} ${e.timeStr} (${e.timestamp})`),o.push(`${s("crash.reportUptime")} ${s("crash.reportUptimeValue",{seconds:n})}`),o.push(`${s("crash.reportPlatform")} ${e.deviceInfo?.platform?.toUpperCase()} (v${e.deviceInfo?.osVersion})`),o.push(`${s("crash.reportReactNative")} ${e.deviceInfo?.rnVersion||"N/A"}`),o.push(`${s("crash.reportHermes")} ${e.deviceInfo?.isHermes?s("crash.reportEnabled"):s("crash.reportDisabled")}`),o.push(`${s("crash.reportArchitecture")} ${e.deviceInfo?.isFabric?s("crash.reportFabricNew"):s("crash.reportPaperLegacy")}`),o.push(`${s("crash.reportScreenSize")} ${z()}`),o.push(`${s("crash.reportAppState")} ${e.deviceInfo?.appState||"active"}`),e.memoryInfo&&o.push(`${s("crash.reportJsMemory")} ${e.memoryInfo.usedJSHeapSize} MB / ${e.memoryInfo.totalJSHeapSize} MB`),o.push("----------------------------------------------------"),o.push(`${s("crash.reportStackTrace")}`),o.push(e.stack||s("crash.reportNoStackTrace")),e.componentStack&&(o.push("----------------------------------------------------"),o.push(`${s("crash.reportComponentHierarchy")}`),o.push(e.componentStack)),e.breadcrumbs&&e.breadcrumbs.length>0&&(o.push("----------------------------------------------------"),o.push(`${s("crash.reportRecentBreadcrumbs")}`),e.breadcrumbs.forEach(r=>{const a=new Date(r.timestamp).toLocaleTimeString();o.push(` [${a}] [${r.type.toUpperCase()}] ${r.message}`)})),o.push("===================================================="),o.join(`
7
- `)},setupGlobalCrashHandler=()=>{if(!k){k=!0;try{M&&typeof M.ignoreAllLogs=="function"&&M.ignoreAllLogs(!0)}catch{}try{const e=require("react-native/Libraries/LogBox/Data/LogBoxData");e&&typeof e.setDisabled=="function"&&e.setDisabled(!0)}catch{}try{const e=v?.NetworkInspectorModule;e&&(typeof e.enableNativeCrashProtection=="function"&&e.enableNativeCrashProtection(),new F(e).addListener("onNativeCrash",n=>{const r=`[${(n?.platform||y.OS).toUpperCase()} ${s("crash.nativeCrashTitle")}] ${n?.message||s("crash.nativeUncaughtException")}`,a=n?.stack||"";handleInterceptedCrash(r,a,!0,"native")}))}catch{}try{const e=D||globalThis.__turboModuleProxy,t=v?.ExceptionsManager||(e?.get?e.get("ExceptionsManager"):null);if(t){t.reportFatalException=(o,r,a)=>{handleInterceptedCrash(o,r,!0,"native");try{typeof t.dismissRedbox=="function"&&t.dismissRedbox()}catch{}},t.reportSoftException=(o,r,a)=>{handleInterceptedCrash(o,r,!1,"js");try{typeof t.dismissRedbox=="function"&&t.dismissRedbox()}catch{}},t.reportException=o=>{const r=o?.message||o?.title||s("crash.nativeException"),a=o?.stack||o?.rawStack;handleInterceptedCrash(r,a,o?.isFatal??!0,"js");try{typeof t.dismissRedbox=="function"&&t.dismissRedbox()}catch{}},t.updateExceptionMessage=()=>{};try{typeof t.dismissRedbox=="function"&&t.dismissRedbox()}catch{}}const n=v?.RedBox||v?.RCTRedBox||(e?.get?e.get("RedBox")||e.get("RCTRedBox"):null);n&&(typeof n.showErrorMessage=="function"&&(n.showErrorMessage=()=>{}),typeof n.showUserError=="function"&&(n.showUserError=()=>{}),typeof n.dismiss=="function"&&n.dismiss())}catch{}try{const t=globalThis.ErrorUtils;t&&(typeof t.setGlobalHandler=="function"&&t.setGlobalHandler((n,o)=>{handleInterceptedCrash(n,n?.stack,o??!1,"js")}),typeof t.reportFatalError=="function"&&(t.reportFatalError=n=>{handleInterceptedCrash(n,n?.stack,!0,"js")}),typeof t.reportError=="function"&&(t.reportError=n=>{handleInterceptedCrash(n,n?.stack,!1,"js")}))}catch{}try{const e=globalThis,t=n=>{try{const o=n?.reason||n?.detail?.reason||n,r=o?.stack||(n?.stack??new Error().stack);handleInterceptedCrash(o,r,!1,"promise")}catch{}};typeof e.addEventListener=="function"&&e.addEventListener("unhandledrejection",t),typeof e.onunhandledrejection<"u"&&(e.onunhandledrejection=t)}catch{}}};
1
+ import{LogBox as M,NativeModules as v,TurboModuleRegistry as D,NativeEventEmitter as F,Platform as y,AppState as L,Dimensions as B}from"react-native";import{CrashExportFormat as A,CrashType as h}from"../types/enums";import{addLogFromCrash as H}from"./consoleLogger";import{showNativeFloatingButton as U,setNativeFloatingButtonBadge as _}from"../native/NativeInspector";import{t as s}from"../i18n";export{A as CrashExportFormat};let E=[],N=!1,I=0,l=[],f=[];const R=50;let S=100;const T=Date.now();let k=!1;export const setCrashModuleEnabled=e=>{k=e},getCrashModuleEnabled=()=>k,setMaxCrashLogsLimit=e=>{S=Math.max(10,e),l.length>S&&(l=l.slice(0,S))},getMaxCrashLogsLimit=()=>S,pruneCrashRecords=e=>{const r=e!==void 0?Math.max(0,e):Math.floor(l.length/2),n=l.length-r;return n>0&&(l=l.slice(0,r)),f.length>20&&(f=f.slice(0,20)),Math.max(0,n)},addCrashBreadcrumb=(e,r,n)=>{if(k)try{const o={type:e,message:r,timestamp:Date.now(),data:n};f.unshift(o),f.length>R&&(f=f.slice(0,R))}catch{}},recordNavigationBreadcrumb=(e,r)=>{addCrashBreadcrumb("navigation",s("crash.breadcrumbNavigation",{from:e||"/",to:r||"/"}),{from:e,to:r})},recordNetworkBreadcrumb=(e,r,n,o)=>{const t=n!=null?` [${n}]`:"",a=o!=null?` (${Math.round(o)}ms)`:"";addCrashBreadcrumb("network",`${r.toUpperCase()} ${e}${t}${a}`,{url:e,method:r,status:n,duration:o})},recordReduxBreadcrumb=(e,r)=>{addCrashBreadcrumb("redux",s("crash.breadcrumbAction",{actionType:e}),{type:e,payloadSummary:typeof r=="object"&&r!==null?Object.keys(r):typeof r})},recordUserActionBreadcrumb=(e,r)=>{addCrashBreadcrumb("user",e,r)},clearCrashBreadcrumbs=()=>{f=[]},getCrashBreadcrumbs=()=>[...f],parseCrashStackTrace=e=>{if(!e||typeof e!="string")return[];const r=e.split(`
2
+ `),n=[];for(const o of r){const t=o.trim();if(!t||t.includes("crashHandler.ts")||t.includes("handleInterceptedCrash")||t.includes("addLogFromCrash")||t.includes("setupGlobalCrashHandler"))continue;const a=t.match(/^([^@]+)@(.*):(\d+):(\d+)$/);if(a){const[,c,i,m,g]=a,b=i.split("?")[0].split("/").pop()||i,x=!i.includes("node_modules")&&!i.includes("react-native")&&!i.includes("react-dom")&&!i.includes("hermes")&&!i.includes("internal");n.push({method:c.trim(),file:b,lineNumber:parseInt(m,10),column:parseInt(g,10),raw:t,isAppCode:x});continue}const u=t.match(/^at\s+(.+)\s+\((.+):(\d+):(\d+)\)$/);if(u){const[,c,i,m,g]=u,b=i.split("?")[0].split("/").pop()||i,x=!i.includes("node_modules")&&!i.includes("react-native")&&!i.includes("react-dom")&&!i.includes("internal");n.push({method:c.trim(),file:b,lineNumber:parseInt(m,10),column:parseInt(g,10),raw:t,isAppCode:x});continue}const d=t.match(/^at\s+(.+):(\d+):(\d+)$/);if(d){const[,c,i,m]=d,g=c.split("?")[0].split("/").pop()||c,b=!c.includes("node_modules")&&!c.includes("react-native");n.push({method:"<anonymous>",file:g,lineNumber:parseInt(i,10),column:parseInt(m,10),raw:t,isAppCode:b});continue}const $=t.match(/^at\s+([a-zA-Z0-9_$.]+)\(([a-zA-Z0-9_$]+\.java):(\d+)\)$/);if($){const[,c,i,m]=$,g=!c.startsWith("com.facebook.react")&&!c.startsWith("android.");n.push({method:c,file:i,lineNumber:parseInt(m,10),column:0,raw:t,isAppCode:g});continue}const p=t.match(/^\d+\s+([^\s]+)\s+(0x[0-9a-fA-F]+)\s+(.+)$/);if(p){const[,c,,i]=p,m=!c.startsWith("lib")&&!c.startsWith("Core")&&!c.startsWith("React");n.push({method:i,file:c,lineNumber:0,column:0,raw:t,isAppCode:m});continue}n.push({method:t.startsWith("at ")?t.slice(3):t,file:"runtime",lineNumber:0,column:0,raw:t,isAppCode:!1})}return n};const J=()=>{try{const e=globalThis.performance;if(e&&e.memory)return{usedJSHeapSize:Math.round(e.memory.usedJSHeapSize/(1024*1024)),totalJSHeapSize:Math.round(e.memory.totalJSHeapSize/(1024*1024))}}catch{}},z=()=>{try{const e=B.get("window");return`${Math.round(e.width)}x${Math.round(e.height)} (${e.scale}x)`}catch{return s("crash.unknown")}};export const computeCrashFingerprint=e=>{const r=e.type||"js",n=e.name||"Error",o=e.parsedStack&&e.parsedStack.length>0?e.parsedStack[0]:null,t=o?`${o.file}:${o.lineNumber}`:"unknown";return`${r}_${n}_${t}`},getCrashRecords=()=>[...l],clearCrashRecords=()=>{l=[],emitCrashEvent({error:null,message:"__CLEARED__",timestamp:Date.now()})},subscribeCrashEvents=e=>(E.push(e),()=>{E=E.filter(r=>r!==e)}),emitCrashEvent=e=>{if(e.message!=="__CLEARED__"){const r=Date.now();if(r-I<250)return;I=r}E.forEach(r=>{try{r(e)}catch{}})},handleInterceptedCrash=(e,r,n=!1,o,t)=>{try{const a=e instanceof Error||typeof e=="object"&&e!==null?e:new Error(String(e||s("crash.runtimeException"))),u=a.message||(typeof e=="string"?e:s("crash.runtimeException"));let d="";typeof r=="string"?d=r:Array.isArray(r)?d=r.map(C=>`at ${C.methodName||"<anonymous>"} (${C.file||"unknown"}:${C.lineNumber||0}:${C.column||0})`).join(`
3
+ `):d=a.stack||new Error().stack||"";let $=o||h.Js;const p=u.toLowerCase();o||(p.includes("native")||p.includes("sigsegv")||p.includes("nsrange")||p.includes("nullpointerexception")||p.includes("fatal signal")?$=h.Native:p.includes("promise")||p.includes("unhandled rejection")||p.includes("unhandledrejection")?$=h.Promise:p.includes("render")||p.includes("errorboundary")||t?$=h.Render:$=h.Js);const c=new Date,i=c.toLocaleDateString(),m=c.toLocaleTimeString(),g=parseCrashStackTrace(d),b=H(a,`[${n?s("crash.logFatalCrash"):s("crash.logUnhandledError")}] ${u}`,d,n),x=typeof globalThis.HermesInternal<"u",j=typeof globalThis.nativeFabricUIManager<"u",w={id:`crash_${Date.now()}_${Math.random().toString(36).substr(2,6)}`,error:a,isFatal:n,type:$,message:u,name:a.name||(n?s("crash.errorNameFatal"):s("crash.errorNameUnhandled")),stack:d,parsedStack:g,componentStack:t||void 0,timestamp:Date.now(),dateStr:i,timeStr:m,deviceInfo:{platform:y.OS,osVersion:String(y.Version),rnVersion:y.constants?.reactNativeVersion?`${y.constants.reactNativeVersion.major}.${y.constants.reactNativeVersion.minor}.${y.constants.reactNativeVersion.patch}`:s("crash.unknown"),isHermes:x,isFabric:j,appState:L.currentState||"active"},memoryInfo:J(),breadcrumbs:[...f],logId:b?.id};l.unshift(w),l.length>S&&(l=l.slice(0,S)),emitCrashEvent({error:a,isFatal:n,message:`[${n?s("crash.logFatalCrash"):s("crash.logUnhandledError")}] ${u}`,stack:d,timestamp:Date.now(),logId:b?.id,crashRecord:w});try{U(),_(!0)}catch{}return w}catch{return{id:`crash_${Date.now()}`,isFatal:!0,type:h.Js,message:String(e||s("crash.unknownException")),timestamp:Date.now(),dateStr:new Date().toLocaleDateString(),timeStr:new Date().toLocaleTimeString()}}},recordCustomCrash=(e,r)=>handleInterceptedCrash(e,typeof e=="object"?e.stack:void 0,r?.isFatal??!1,r?.type||h.Custom,r?.componentStack),triggerGlobalCrashScreen=e=>{emitCrashEvent({error:e.error||new Error(e.message),isFatal:!0,message:e.message,stack:e.stack,timestamp:e.timestamp||Date.now(),logId:e.logId,crashRecord:e})},simulateTestCrash=(e=h.Js,r,n,o=!0)=>{const t=new Error(r||P(e));return handleInterceptedCrash(e===h.Native?t.message:t,n||t.stack,o,e,e===h.Render?V():void 0)};const P=e=>{switch(e){case"native":return s("crash.simNativeMessage");case"promise":return s("crash.simPromiseMessage");case"render":return s("crash.simRenderMessage");default:return s("crash.simJsMessage")}},V=()=>{try{const e=new Error;if(e.stack)return e.stack.split(`
4
+ `).slice(1,6).map(r=>` ${r.trim()}`).join(`
5
+ `)}catch{}};export const exportCrashReport=(e,r="text")=>{if(r==="json")return JSON.stringify(e,null,2);const n=Math.round((e.timestamp-T)/1e3);if(r==="markdown"){const t=[];return t.push(`## ${s("crash.mdReportTitle",{name:e.name||"Error"})}`),t.push(`> **${e.message}**`),t.push(""),t.push(`- **${s("crash.reportType")}** \`${e.type.toUpperCase()}\``),t.push(`- **${s("crash.reportFatal")}** \`${e.isFatal?s("crash.mdSeverityFatal"):s("crash.mdSeverityHandled")}\``),t.push(`- **${s("crash.reportTimestamp")}** ${e.dateStr} ${e.timeStr}`),t.push(`- **${s("crash.reportUptime")}** ${n}s`),t.push(`- **${s("crash.reportPlatform")}** ${e.deviceInfo?.platform?.toUpperCase()} (v${e.deviceInfo?.osVersion})`),t.push(`- **${s("crash.reportReactNative")}** v${e.deviceInfo?.rnVersion||"N/A"}`),t.push(`- **${s("crash.jsEngine")}** ${e.deviceInfo?.isHermes?s("crash.hermesEngine"):s("crash.jsc")}`),t.push(`- **${s("crash.reportArchitecture")}** ${e.deviceInfo?.isFabric?s("crash.reportFabricNew"):s("crash.reportPaperLegacy")}`),e.memoryInfo&&t.push(`- **${s("crash.reportJsMemory")}** ${e.memoryInfo.usedJSHeapSize} MB / ${e.memoryInfo.totalJSHeapSize} MB`),t.push(""),t.push(`### ${s("crash.mdStackTrace")}`),t.push("```"),t.push(e.stack||s("crash.reportNoStackTrace")),t.push("```"),e.componentStack&&(t.push(""),t.push(`### ${s("crash.mdComponentHierarchy")}`),t.push("```"),t.push(e.componentStack),t.push("```")),e.breadcrumbs&&e.breadcrumbs.length>0&&(t.push(""),t.push(`### ${s("crash.mdRecentBreadcrumbs")}`),e.breadcrumbs.forEach(a=>{const u=new Date(a.timestamp).toLocaleTimeString();t.push(`- \`[${u}]\` **[${a.type.toUpperCase()}]** ${a.message}`)})),t.join(`
6
+ `)}const o=[];return o.push("===================================================="),o.push(` ${s("crash.reportTitle")} `),o.push("===================================================="),o.push(`${s("crash.reportErrorName")} ${e.name||"Error"}`),o.push(`${s("crash.reportMessage")} ${e.message}`),o.push(`${s("crash.reportType")} ${e.type.toUpperCase()}`),o.push(`${s("crash.reportFatal")} ${e.isFatal?s("crash.reportFatalYes"):s("crash.reportFatalNo")}`),o.push(`${s("crash.reportTimestamp")} ${e.dateStr} ${e.timeStr} (${e.timestamp})`),o.push(`${s("crash.reportUptime")} ${s("crash.reportUptimeValue",{seconds:n})}`),o.push(`${s("crash.reportPlatform")} ${e.deviceInfo?.platform?.toUpperCase()} (v${e.deviceInfo?.osVersion})`),o.push(`${s("crash.reportReactNative")} ${e.deviceInfo?.rnVersion||"N/A"}`),o.push(`${s("crash.reportHermes")} ${e.deviceInfo?.isHermes?s("crash.reportEnabled"):s("crash.reportDisabled")}`),o.push(`${s("crash.reportArchitecture")} ${e.deviceInfo?.isFabric?s("crash.reportFabricNew"):s("crash.reportPaperLegacy")}`),o.push(`${s("crash.reportScreenSize")} ${z()}`),o.push(`${s("crash.reportAppState")} ${e.deviceInfo?.appState||"active"}`),e.memoryInfo&&o.push(`${s("crash.reportJsMemory")} ${e.memoryInfo.usedJSHeapSize} MB / ${e.memoryInfo.totalJSHeapSize} MB`),o.push("----------------------------------------------------"),o.push(`${s("crash.reportStackTrace")}`),o.push(e.stack||s("crash.reportNoStackTrace")),e.componentStack&&(o.push("----------------------------------------------------"),o.push(`${s("crash.reportComponentHierarchy")}`),o.push(e.componentStack)),e.breadcrumbs&&e.breadcrumbs.length>0&&(o.push("----------------------------------------------------"),o.push(`${s("crash.reportRecentBreadcrumbs")}`),e.breadcrumbs.forEach(t=>{const a=new Date(t.timestamp).toLocaleTimeString();o.push(` [${a}] [${t.type.toUpperCase()}] ${t.message}`)})),o.push("===================================================="),o.join(`
7
+ `)},setupGlobalCrashHandler=()=>{if(!N){N=!0;try{M&&typeof M.ignoreAllLogs=="function"&&M.ignoreAllLogs(!0)}catch{}try{const e=require("react-native/Libraries/LogBox/Data/LogBoxData");e&&typeof e.setDisabled=="function"&&e.setDisabled(!0)}catch{}try{const e=v?.NetworkInspectorModule;e&&(typeof e.enableNativeCrashProtection=="function"&&e.enableNativeCrashProtection(),new F(e).addListener("onNativeCrash",n=>{const t=`[${(n?.platform||y.OS).toUpperCase()} ${s("crash.nativeCrashTitle")}] ${n?.message||s("crash.nativeUncaughtException")}`,a=n?.stack||"";handleInterceptedCrash(t,a,!0,"native")}))}catch{}try{const e=D||globalThis.__turboModuleProxy,r=v?.ExceptionsManager||(e?.get?e.get("ExceptionsManager"):null);if(r){r.reportFatalException=(o,t,a)=>{handleInterceptedCrash(o,t,!0,"native");try{typeof r.dismissRedbox=="function"&&r.dismissRedbox()}catch{}},r.reportSoftException=(o,t,a)=>{handleInterceptedCrash(o,t,!1,"js");try{typeof r.dismissRedbox=="function"&&r.dismissRedbox()}catch{}},r.reportException=o=>{const t=o?.message||o?.title||s("crash.nativeException"),a=o?.stack||o?.rawStack;handleInterceptedCrash(t,a,o?.isFatal??!0,"js");try{typeof r.dismissRedbox=="function"&&r.dismissRedbox()}catch{}},r.updateExceptionMessage=()=>{};try{typeof r.dismissRedbox=="function"&&r.dismissRedbox()}catch{}}const n=v?.RedBox||v?.RCTRedBox||(e?.get?e.get("RedBox")||e.get("RCTRedBox"):null);n&&(typeof n.showErrorMessage=="function"&&(n.showErrorMessage=()=>{}),typeof n.showUserError=="function"&&(n.showUserError=()=>{}),typeof n.dismiss=="function"&&n.dismiss())}catch{}try{const r=globalThis.ErrorUtils;r&&(typeof r.setGlobalHandler=="function"&&r.setGlobalHandler((n,o)=>{handleInterceptedCrash(n,n?.stack,o??!1,"js")}),typeof r.reportFatalError=="function"&&(r.reportFatalError=n=>{handleInterceptedCrash(n,n?.stack,!0,"js")}),typeof r.reportError=="function"&&(r.reportError=n=>{handleInterceptedCrash(n,n?.stack,!1,"js")}))}catch{}try{const e=globalThis,r=n=>{try{const o=n?.reason||n?.detail?.reason||n,t=o?.stack||(n?.stack??new Error().stack);handleInterceptedCrash(o,t,!1,"promise")}catch{}};typeof e.addEventListener=="function"&&e.addEventListener("unhandledrejection",r),typeof e.onunhandledrejection<"u"&&(e.onunhandledrejection=r)}catch{}}};
@@ -0,0 +1,13 @@
1
+ import type { PhotoEditOptions, PhotoEditResult, VideoTrimOptions, VideoTrimResult, FilmstripOptions, FilmstripResult } from './types/editor';
2
+ export * from './types/editor';
3
+ export declare const MediaEditor: {
4
+ editPhoto: (options: PhotoEditOptions) => Promise<PhotoEditResult | null>;
5
+ trimVideo: (options: VideoTrimOptions) => Promise<VideoTrimResult | null>;
6
+ generateFilmstrip: (options: FilmstripOptions) => Promise<FilmstripResult | null>;
7
+ cropToDefect: (uri: string, crop: import("./types/editor").CropRect, options?: Partial<PhotoEditOptions>) => Promise<PhotoEditResult | null>;
8
+ redactSensitiveData: (uri: string, redactions: import("./types/editor").RedactionBox[], options?: Partial<PhotoEditOptions>) => Promise<PhotoEditResult | null>;
9
+ annotateDefect: (uri: string, annotations: import("./types/editor").AnnotationBox[], options?: Partial<PhotoEditOptions>) => Promise<PhotoEditResult | null>;
10
+ trimReproClip: (uri: string, startTimeMs: number, endTimeMs: number, options?: Partial<VideoTrimOptions>) => Promise<VideoTrimResult | null>;
11
+ muteVideo: (uri: string, options?: Partial<VideoTrimOptions>) => Promise<VideoTrimResult | null>;
12
+ };
13
+ export default MediaEditor;
@@ -0,0 +1 @@
1
+ import{editNativePhoto as n,trimNativeVideo as d,generateNativeFilmstrip as h}from"./native/NativeInspector";export*from"./types/editor";export const MediaEditor={editPhoto:async t=>{if(!t||typeof t.uri!="string"||!t.uri.trim())return null;const e={...t,uri:t.uri.trim(),quality:typeof t.quality=="number"?Math.max(.01,Math.min(1,t.quality)):.9};return n(e)},trimVideo:async t=>{if(!t||typeof t.uri!="string"||!t.uri.trim())return null;const e=Math.max(0,Number(t.startTimeMs)||0),r=Number(t.endTimeMs)||0;if(r>0&&r<=e)return null;const i=!!(t.mute||t.muteAudio),a={...t,uri:t.uri.trim(),startTimeMs:e,endTimeMs:r,mute:i,muteAudio:i};return d(a)},generateFilmstrip:async t=>{if(!t||typeof t.uri!="string"||!t.uri.trim())return null;const e=Math.max(1,Math.min(50,Math.floor(Number(t.count)||8))),r=t.maxWidth||t.targetWidth,i=t.maxHeight||t.targetHeight,a=r?Math.max(32,Math.min(1920,Math.floor(r))):160,u=i?Math.max(32,Math.min(1080,Math.floor(i))):160,m={...t,uri:t.uri.trim(),count:e,maxWidth:a,targetWidth:a,maxHeight:u,targetHeight:u};return h(m)},cropToDefect:async(t,e,r)=>MediaEditor.editPhoto({uri:t,crop:e,...r}),redactSensitiveData:async(t,e,r)=>MediaEditor.editPhoto({uri:t,redactions:e,...r}),annotateDefect:async(t,e,r)=>MediaEditor.editPhoto({uri:t,annotations:e,...r}),trimReproClip:async(t,e,r,i)=>MediaEditor.trimVideo({uri:t,startTimeMs:e,endTimeMs:r,...i}),muteVideo:async(t,e)=>MediaEditor.trimVideo({uri:t,startTimeMs:0,endTimeMs:0,muteAudio:!0,...e})};export default MediaEditor;