react-native-inapp-inspector 2.4.1 → 2.5.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 (295) hide show
  1. package/README.ar.md +163 -0
  2. package/README.de.md +163 -0
  3. package/README.es.md +164 -0
  4. package/README.fr.md +163 -0
  5. package/README.hi.md +163 -0
  6. package/README.ja.md +180 -0
  7. package/README.ko.md +163 -0
  8. package/README.md +340 -243
  9. package/README.pt-BR.md +163 -0
  10. package/README.ru.md +163 -0
  11. package/README.zh-CN.md +387 -0
  12. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +605 -23
  13. package/assets/banner_dark.svg +186 -0
  14. package/assets/banner_light.svg +186 -0
  15. package/assets/icon_circle.svg +148 -0
  16. package/assets/icon_square.svg +369 -0
  17. package/assets/inapp_inspector_icon.gif +0 -0
  18. package/assets/inapp_inspector_icon_original.gif +0 -0
  19. package/assets/social_preview.png +0 -0
  20. package/assets/walkthrough.gif +0 -0
  21. package/dist/commonjs/capture.d.ts +2 -0
  22. package/dist/commonjs/capture.js +1 -1
  23. package/dist/commonjs/components/AnalyticsDetail.js +23 -23
  24. package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
  25. package/dist/commonjs/components/AnalyticsGraph.js +44 -44
  26. package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
  27. package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
  28. package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
  29. package/dist/commonjs/components/AppHeaderLogo.js +5 -3
  30. package/dist/commonjs/components/BrandCircleIcon.js +28 -28
  31. package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
  32. package/dist/commonjs/components/BrandSquareIcon.js +139 -0
  33. package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
  34. package/dist/commonjs/components/ConsoleLogCard.js +23 -39
  35. package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
  36. package/dist/commonjs/components/Inspector/AnalyticsTab.js +6 -6
  37. package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
  38. package/dist/commonjs/components/Inspector/ConfirmationModal.js +30 -0
  39. package/dist/commonjs/components/Inspector/ConsoleTab.js +12 -12
  40. package/dist/commonjs/components/Inspector/CrashTab.js +44 -9
  41. package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
  42. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
  43. package/dist/commonjs/components/Inspector/FabLauncher.js +30 -33
  44. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
  45. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  46. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
  47. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  48. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
  49. package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
  50. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  51. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +172 -0
  52. package/dist/commonjs/components/Inspector/MainScreen.js +55 -35
  53. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +40 -35
  54. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
  55. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +341 -135
  56. package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
  57. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
  58. package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
  59. package/dist/commonjs/components/Inspector/PushCard.js +5 -4
  60. package/dist/commonjs/components/Inspector/PushDetail.js +41 -32
  61. package/dist/commonjs/components/Inspector/PushTab.js +12 -12
  62. package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
  63. package/dist/commonjs/components/Inspector/ReduxTab.js +10 -8
  64. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  65. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  66. package/dist/commonjs/components/Inspector/SettingsPanel.js +287 -139
  67. package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
  68. package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
  69. package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
  70. package/dist/commonjs/components/Inspector/SocketDetail.js +327 -0
  71. package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
  72. package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
  73. package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
  74. package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
  75. package/dist/commonjs/components/Inspector/StorageTab.js +39 -37
  76. package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
  77. package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
  78. package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
  79. package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
  80. package/dist/commonjs/components/Inspector/TabBar.js +24 -23
  81. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
  82. package/dist/commonjs/components/JsonViewer.js +50 -48
  83. package/dist/commonjs/components/LogCard.d.ts +3 -2
  84. package/dist/commonjs/components/LogCard.js +27 -25
  85. package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
  86. package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
  87. package/dist/commonjs/components/NetworkIcons.d.ts +42 -0
  88. package/dist/commonjs/components/NetworkIcons.js +139 -6
  89. package/dist/commonjs/components/SegmentedTabs.js +1 -1
  90. package/dist/commonjs/constants/version.d.ts +1 -1
  91. package/dist/commonjs/constants/version.js +1 -1
  92. package/dist/commonjs/crash.d.ts +1 -1
  93. package/dist/commonjs/crash.js +1 -1
  94. package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
  95. package/dist/commonjs/customHooks/crashHandler.js +7 -7
  96. package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
  97. package/dist/commonjs/customHooks/socketLogger.js +2 -0
  98. package/dist/commonjs/editor.d.ts +13 -0
  99. package/dist/commonjs/editor.js +1 -0
  100. package/dist/commonjs/helpers/index.d.ts +1 -0
  101. package/dist/commonjs/helpers/index.js +3 -3
  102. package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
  103. package/dist/commonjs/helpers/memoryManager.js +1 -1
  104. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  105. package/dist/commonjs/helpers/searchQueryParser.js +5 -1
  106. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  107. package/dist/commonjs/helpers/settingsStore.js +1 -1
  108. package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
  109. package/dist/commonjs/helpers/shareFormatter.js +8 -7
  110. package/dist/commonjs/helpers/telemetry.js +1 -1
  111. package/dist/commonjs/i18n/index.d.ts +99 -1
  112. package/dist/commonjs/i18n/index.js +1 -1
  113. package/dist/commonjs/i18n/locales/ar.json +1 -1
  114. package/dist/commonjs/i18n/locales/bn.json +1 -0
  115. package/dist/commonjs/i18n/locales/de.json +1 -1
  116. package/dist/commonjs/i18n/locales/en.json +1 -1
  117. package/dist/commonjs/i18n/locales/es.json +1 -1
  118. package/dist/commonjs/i18n/locales/fr.json +1 -1
  119. package/dist/commonjs/i18n/locales/gu.json +1 -0
  120. package/dist/commonjs/i18n/locales/hi.json +1 -1
  121. package/dist/commonjs/i18n/locales/id.json +1 -0
  122. package/dist/commonjs/i18n/locales/it.json +1 -0
  123. package/dist/commonjs/i18n/locales/ja.json +1 -1
  124. package/dist/commonjs/i18n/locales/kn.json +1 -0
  125. package/dist/commonjs/i18n/locales/ko.json +1 -1
  126. package/dist/commonjs/i18n/locales/ml.json +1 -0
  127. package/dist/commonjs/i18n/locales/mr.json +1 -0
  128. package/dist/commonjs/i18n/locales/nl.json +1 -0
  129. package/dist/commonjs/i18n/locales/pa.json +1 -0
  130. package/dist/commonjs/i18n/locales/pl.json +1 -0
  131. package/dist/commonjs/i18n/locales/pt.json +1 -1
  132. package/dist/commonjs/i18n/locales/ru.json +1 -1
  133. package/dist/commonjs/i18n/locales/ta.json +1 -0
  134. package/dist/commonjs/i18n/locales/te.json +1 -0
  135. package/dist/commonjs/i18n/locales/tr.json +1 -0
  136. package/dist/commonjs/i18n/locales/vi.json +1 -0
  137. package/dist/commonjs/i18n/locales/zh.json +1 -1
  138. package/dist/commonjs/index.d.ts +16 -13
  139. package/dist/commonjs/index.js +5 -4
  140. package/dist/commonjs/native/NativeInspector.d.ts +4 -0
  141. package/dist/commonjs/native/NativeInspector.js +1 -1
  142. package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
  143. package/dist/commonjs/socket.d.ts +4 -0
  144. package/dist/commonjs/socket.js +1 -0
  145. package/dist/commonjs/styles/AppColors.d.ts +42 -2
  146. package/dist/commonjs/styles/AppColors.js +1 -1
  147. package/dist/commonjs/styles/common.js +1 -1
  148. package/dist/commonjs/styles/index.d.ts +30 -0
  149. package/dist/commonjs/styles/index.js +1 -1
  150. package/dist/commonjs/types/editor.d.ts +96 -0
  151. package/dist/commonjs/types/editor.js +1 -0
  152. package/dist/commonjs/types/enums.d.ts +40 -0
  153. package/dist/commonjs/types/enums.js +1 -1
  154. package/dist/commonjs/types/interfaces.d.ts +143 -1
  155. package/dist/esm/capture.d.ts +2 -0
  156. package/dist/esm/capture.js +1 -1
  157. package/dist/esm/components/AnalyticsDetail.js +31 -31
  158. package/dist/esm/components/AnalyticsEventCard.js +1 -1
  159. package/dist/esm/components/AnalyticsGraph.js +74 -74
  160. package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
  161. package/dist/esm/components/AnimatedBrandOwl.js +175 -0
  162. package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
  163. package/dist/esm/components/AppHeaderLogo.js +7 -5
  164. package/dist/esm/components/BrandCircleIcon.js +70 -70
  165. package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
  166. package/dist/esm/components/BrandSquareIcon.js +139 -0
  167. package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
  168. package/dist/esm/components/ConsoleLogCard.js +61 -77
  169. package/dist/esm/components/Inspector/AboutModal.js +85 -95
  170. package/dist/esm/components/Inspector/AnalyticsTab.js +24 -24
  171. package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
  172. package/dist/esm/components/Inspector/ConfirmationModal.js +30 -0
  173. package/dist/esm/components/Inspector/ConsoleTab.js +48 -48
  174. package/dist/esm/components/Inspector/CrashTab.js +203 -168
  175. package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
  176. package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
  177. package/dist/esm/components/Inspector/FabLauncher.js +57 -60
  178. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
  179. package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  180. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
  181. package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  182. package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
  183. package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
  184. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  185. package/dist/esm/components/Inspector/LanguageSelectorModal.js +172 -0
  186. package/dist/esm/components/Inspector/MainScreen.js +130 -110
  187. package/dist/esm/components/Inspector/MediaGalleryTab.js +83 -78
  188. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
  189. package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -139
  190. package/dist/esm/components/Inspector/NetworkTab.js +130 -130
  191. package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
  192. package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
  193. package/dist/esm/components/Inspector/PushCard.js +23 -22
  194. package/dist/esm/components/Inspector/PushDetail.js +45 -36
  195. package/dist/esm/components/Inspector/PushTab.js +23 -23
  196. package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
  197. package/dist/esm/components/Inspector/ReduxTab.js +20 -18
  198. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  199. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  200. package/dist/esm/components/Inspector/SettingsPanel.js +526 -378
  201. package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
  202. package/dist/esm/components/Inspector/SocketCard.js +116 -0
  203. package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
  204. package/dist/esm/components/Inspector/SocketDetail.js +327 -0
  205. package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
  206. package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
  207. package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
  208. package/dist/esm/components/Inspector/SocketTab.js +112 -0
  209. package/dist/esm/components/Inspector/StorageTab.js +139 -137
  210. package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
  211. package/dist/esm/components/Inspector/SupportModal.js +125 -0
  212. package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
  213. package/dist/esm/components/Inspector/SupportPage.js +227 -0
  214. package/dist/esm/components/Inspector/TabBar.js +36 -35
  215. package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
  216. package/dist/esm/components/JsonViewer.js +66 -64
  217. package/dist/esm/components/LogCard.d.ts +3 -2
  218. package/dist/esm/components/LogCard.js +57 -55
  219. package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
  220. package/dist/esm/components/ModuleErrorBoundary.js +23 -23
  221. package/dist/esm/components/NetworkIcons.d.ts +42 -0
  222. package/dist/esm/components/NetworkIcons.js +139 -6
  223. package/dist/esm/components/SegmentedTabs.js +7 -7
  224. package/dist/esm/constants/version.d.ts +1 -1
  225. package/dist/esm/constants/version.js +1 -1
  226. package/dist/esm/crash.d.ts +1 -1
  227. package/dist/esm/crash.js +1 -1
  228. package/dist/esm/customHooks/crashHandler.d.ts +2 -1
  229. package/dist/esm/customHooks/crashHandler.js +7 -7
  230. package/dist/esm/customHooks/socketLogger.d.ts +26 -0
  231. package/dist/esm/customHooks/socketLogger.js +2 -0
  232. package/dist/esm/editor.d.ts +13 -0
  233. package/dist/esm/editor.js +1 -0
  234. package/dist/esm/helpers/index.d.ts +1 -0
  235. package/dist/esm/helpers/index.js +4 -4
  236. package/dist/esm/helpers/memoryManager.d.ts +1 -0
  237. package/dist/esm/helpers/memoryManager.js +1 -1
  238. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  239. package/dist/esm/helpers/searchQueryParser.js +5 -1
  240. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  241. package/dist/esm/helpers/settingsStore.js +1 -1
  242. package/dist/esm/helpers/shareFormatter.d.ts +3 -1
  243. package/dist/esm/helpers/shareFormatter.js +8 -7
  244. package/dist/esm/helpers/telemetry.js +1 -1
  245. package/dist/esm/i18n/index.d.ts +99 -1
  246. package/dist/esm/i18n/index.js +1 -1
  247. package/dist/esm/i18n/locales/ar.json +1 -1
  248. package/dist/esm/i18n/locales/bn.json +1 -0
  249. package/dist/esm/i18n/locales/de.json +1 -1
  250. package/dist/esm/i18n/locales/en.json +1 -1
  251. package/dist/esm/i18n/locales/es.json +1 -1
  252. package/dist/esm/i18n/locales/fr.json +1 -1
  253. package/dist/esm/i18n/locales/gu.json +1 -0
  254. package/dist/esm/i18n/locales/hi.json +1 -1
  255. package/dist/esm/i18n/locales/id.json +1 -0
  256. package/dist/esm/i18n/locales/it.json +1 -0
  257. package/dist/esm/i18n/locales/ja.json +1 -1
  258. package/dist/esm/i18n/locales/kn.json +1 -0
  259. package/dist/esm/i18n/locales/ko.json +1 -1
  260. package/dist/esm/i18n/locales/ml.json +1 -0
  261. package/dist/esm/i18n/locales/mr.json +1 -0
  262. package/dist/esm/i18n/locales/nl.json +1 -0
  263. package/dist/esm/i18n/locales/pa.json +1 -0
  264. package/dist/esm/i18n/locales/pl.json +1 -0
  265. package/dist/esm/i18n/locales/pt.json +1 -1
  266. package/dist/esm/i18n/locales/ru.json +1 -1
  267. package/dist/esm/i18n/locales/ta.json +1 -0
  268. package/dist/esm/i18n/locales/te.json +1 -0
  269. package/dist/esm/i18n/locales/tr.json +1 -0
  270. package/dist/esm/i18n/locales/vi.json +1 -0
  271. package/dist/esm/i18n/locales/zh.json +1 -1
  272. package/dist/esm/index.d.ts +16 -13
  273. package/dist/esm/index.js +8 -7
  274. package/dist/esm/native/NativeInspector.d.ts +4 -0
  275. package/dist/esm/native/NativeInspector.js +1 -1
  276. package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
  277. package/dist/esm/socket.d.ts +4 -0
  278. package/dist/esm/socket.js +1 -0
  279. package/dist/esm/styles/AppColors.d.ts +42 -2
  280. package/dist/esm/styles/AppColors.js +1 -1
  281. package/dist/esm/styles/common.js +1 -1
  282. package/dist/esm/styles/index.d.ts +30 -0
  283. package/dist/esm/styles/index.js +1 -1
  284. package/dist/esm/types/editor.d.ts +96 -0
  285. package/dist/esm/types/editor.js +1 -0
  286. package/dist/esm/types/enums.d.ts +40 -0
  287. package/dist/esm/types/enums.js +1 -1
  288. package/dist/esm/types/interfaces.d.ts +143 -1
  289. package/editor.d.ts +1 -0
  290. package/editor.js +1 -0
  291. package/ios/NetworkInspectorModule.mm +531 -12
  292. package/package.json +213 -2
  293. package/react-native-inapp-inspector.podspec +1 -1
  294. package/src/native/NativeInspector.ts +65 -4
  295. package/src/native/NativeNetworkInspector.ts +4 -0
@@ -47,6 +47,7 @@ export declare const DebugIcon: ({ color, size }: IconProps) => React.JSX.Elemen
47
47
  export declare const SunIcon: ({ color, size }: IconProps) => React.JSX.Element;
48
48
  export declare const MoonIcon: ({ color, size }: IconProps) => React.JSX.Element;
49
49
  export { BrandCircleIcon } from './BrandCircleIcon';
50
+ export { BrandSquareIcon } from './BrandSquareIcon';
50
51
  export declare const HtmlIcon: ({ color, size }: IconProps) => React.JSX.Element;
51
52
  export declare const CssIcon: ({ color, size }: IconProps) => React.JSX.Element;
52
53
  export declare const JsIcon: ({ color, size }: IconProps) => React.JSX.Element;
@@ -144,6 +145,9 @@ export declare const HelpCircleIcon: ({ color, size, }: IconProps) => React.JSX.
144
145
  export declare const SendIcon: ({ color, size, }: IconProps) => React.JSX.Element;
145
146
  export declare const LifeBuoyIcon: ({ color, size, }: IconProps) => React.JSX.Element;
146
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;
147
151
  export declare const VideoCameraIcon: ({ color, size, }: IconProps) => React.JSX.Element;
148
152
  export declare const MicrophoneIcon: ({ color, size, }: IconProps) => React.JSX.Element;
149
153
  export declare const GifIcon: ({ color, size, }: IconProps) => React.JSX.Element;
@@ -168,3 +172,41 @@ export declare const HeartFaceIcon: ({ color, size, }: IconProps) => React.JSX.E
168
172
  export declare const BellIcon: ({ color, size, }: IconProps) => React.JSX.Element;
169
173
  export declare const NotificationIcon: ({ color, size, }: IconProps) => React.JSX.Element;
170
174
  export declare const CloudPushIcon: ({ color, size, }: IconProps) => React.JSX.Element;
175
+ export declare const SocketIcon: ({ color, size, }: IconProps) => React.JSX.Element;
176
+ export declare const WebsocketIcon: ({ color, size, }: IconProps) => React.JSX.Element;
177
+ export declare const SendFrameIcon: ({ color, size, }: IconProps) => React.JSX.Element;
178
+ export declare const ReceiveFrameIcon: ({ color, size, }: IconProps) => React.JSX.Element;
179
+ export declare const PingIcon: ({ color, size, }: IconProps) => React.JSX.Element;
180
+ export declare const BroadcastIcon: ({ color, size, }: IconProps) => React.JSX.Element;
181
+ export declare const VolumeIcon: ({ color, size, }: IconProps) => React.JSX.Element;
182
+ export declare const BuildingIcon: ({ color, size, }: IconProps) => React.JSX.Element;
183
+ export declare const ArrowUpIcon: ({ color, size, }: IconProps) => React.JSX.Element;
184
+ export declare const ArrowDownIcon: ({ color, size, }: IconProps) => React.JSX.Element;
185
+ export declare const SupportIcon: ({ color, size, }: IconProps) => React.JSX.Element;
186
+ export declare const HeartIcon: ({ color, size, fill, }: IconProps & {
187
+ fill?: string;
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"/>
@@ -80,8 +80,8 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
80
80
  <L d="M4 6h4M4 12h7M4 18h10"stroke={e}strokeWidth="2"strokeLinecap="round"/>
81
81
  <L d="M18 18V6m0 0l-3 3m3-3l3 3"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
82
82
  </>}
83
- </W>,ChevronIcon=({color:e=p.grayTextWeak,size:t=14,direction:I="down"})=>{let C="M6 9l6 6 6-6";return I==="up"?C="M18 15l-6-6-6 6":I==="right"?C="M9 18l6-6-6-6":I==="left"&&(C="M15 18l-6-6 6-6"),<W width={t}height={t}viewBox="0 0 24 24"fill="none">
84
- <L d={C}stroke={e}strokeWidth="2.5"strokeLinecap="round"strokeLinejoin="round"/>
83
+ </W>,ChevronIcon=({color:e=p.grayTextWeak,size:t=14,direction:I="down"})=>{let m="M6 9l6 6 6-6";return I==="up"?m="M18 15l-6-6-6 6":I==="right"?m="M9 18l6-6-6-6":I==="left"&&(m="M15 18l-6-6 6-6"),<W width={t}height={t}viewBox="0 0 24 24"fill="none">
84
+ <L d={m}stroke={e}strokeWidth="2.5"strokeLinecap="round"strokeLinejoin="round"/>
85
85
  </W>},FilterIcon=({color:e=p.grayTextWeak,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
86
86
  <L d="M4 6h16M7 12h10M10 18h4"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
87
87
  </W>,DownloadIcon=({color:e=p.primaryLight,size:t=18})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
@@ -114,7 +114,7 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
114
114
  <L d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"stroke={e}strokeWidth="2"strokeLinecap="round"/>
115
115
  </W>,MoonIcon=({color:e=p.white,size:t=16})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
116
116
  <L d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"fill={e}stroke={e}strokeWidth="1.5"strokeLinecap="round"strokeLinejoin="round"/>
117
- </W>;export{BrandCircleIcon}from"./BrandCircleIcon";export const HtmlIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
117
+ </W>;export{BrandCircleIcon}from"./BrandCircleIcon";export{BrandSquareIcon}from"./BrandSquareIcon";export const HtmlIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
118
118
  <L d="M17.5 8.5L21 12l-3.5 3.5M6.5 8.5L3 12l3.5 3.5M14 4.5l-4 15"stroke={e}strokeWidth="2.5"strokeLinecap="round"strokeLinejoin="round"/>
119
119
  </W>,CssIcon=({color:e=p.grayTextWeak,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
120
120
  <L d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="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"/>
@@ -537,4 +550,124 @@ import"react";import W,{Circle as M,Ellipse as T,Line as S,Path as L,Rect as B}f
537
550
  </W>,NotificationIcon=BellIcon,CloudPushIcon=({color:e=p.brandPurple,size:t=20})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
538
551
  <L d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
539
552
  <L d="m12 13 3 3m0 0-3 3m3-3H7"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
553
+ </W>,SocketIcon=({color:e=p.blue600,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
554
+ <L d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8z"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
555
+ <L d="M12 6v6l4 2"stroke={e}strokeWidth="1.8"strokeLinecap="round"strokeLinejoin="round"/>
556
+ <L d="M4.93 4.93l4.24 4.24m5.66 5.66l4.24 4.24"stroke={e}strokeWidth="1.6"strokeLinecap="round"strokeLinejoin="round"/>
557
+ </W>,WebsocketIcon=({color:e=p.blue600,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
558
+ <L d="M7 8h10M17 8l-3-3M17 8l-3 3"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
559
+ <L d="M17 16H7M7 16l3-3M7 16l3 3"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
560
+ <M cx="4"cy="8"r="1.5"fill={e}/>
561
+ <M cx="20"cy="16"r="1.5"fill={e}/>
562
+ </W>,SendFrameIcon=({color:e=p.blue600,size:t=12})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
563
+ <L d="m12 19V5m-7 7 7-7 7 7"stroke={e}strokeWidth="2.2"strokeLinecap="round"strokeLinejoin="round"/>
564
+ </W>,ReceiveFrameIcon=({color:e=p.emerald600,size:t=12})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
565
+ <L d="m12 5v14m-7-7 7 7 7-7"stroke={e}strokeWidth="2.2"strokeLinecap="round"strokeLinejoin="round"/>
566
+ </W>,PingIcon=({color:e=p.amber600,size:t=12})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
567
+ <L d="M22 12h-4l-3 9L9 3l-3 9H2"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
568
+ </W>,BroadcastIcon=({color:e=p.brandPurple,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
569
+ <L d="M4.93 4.93a10 10 0 0 1 14.14 0M7.76 7.76a6 6 0 0 1 8.48 0"stroke={e}strokeWidth="2"strokeLinecap="round"/>
570
+ <M cx="12"cy="12"r="2"fill={e}/>
571
+ </W>,VolumeIcon=({color:e=p.violet600,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
572
+ <L d="M11 5L6 9H2v6h4l5 4V5zM19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.08"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
573
+ </W>,BuildingIcon=({color:e=p.blue600,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
574
+ <L d="M3 21h18M5 21V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16M9 9h1M9 13h1M9 17h1M14 9h1M14 13h1M14 17h1"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
575
+ </W>,ArrowUpIcon=({color:e=p.green600,size:t=12})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
576
+ <L d="M12 19V5M5 12l7-7 7 7"stroke={e}strokeWidth="2.5"strokeLinecap="round"strokeLinejoin="round"/>
577
+ </W>,ArrowDownIcon=({color:e=p.blue600,size:t=12})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
578
+ <L d="M12 5v14M19 12l-7 7-7-7"stroke={e}strokeWidth="2.5"strokeLinecap="round"strokeLinejoin="round"/>
579
+ </W>,SupportIcon=({color:e=p.white,size:t=14})=><W width={t}height={t}viewBox="0 0 24 24"fill="none">
580
+ <M cx="12"cy="12"r="9.5"stroke={e}strokeWidth="1.8"/>
581
+ <M cx="12"cy="12"r="4"stroke={e}strokeWidth="1.8"/>
582
+ <S x1="4.93"y1="4.93"x2="9.17"y2="9.17"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
583
+ <S x1="14.83"y1="9.17"x2="19.07"y2="4.93"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
584
+ <S x1="14.83"y1="14.83"x2="19.07"y2="19.07"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
585
+ <S x1="4.93"y1="19.07"x2="9.17"y2="14.83"stroke={e}strokeWidth="1.8"strokeLinecap="round"/>
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">
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}/>
540
673
  </W>;
@@ -1,12 +1,12 @@
1
- import T from"react";import{Pressable as A,ScrollView as R,Text as V,View as C}from"react-native";import{AppColors as e}from"../styles/AppColors";import{AppFonts as z}from"../styles/AppFonts";export const DEFAULT_INNER_TAB_THEMES={metadata:e.sky600,headers:e.teal600,request:e.amber600,response:e.brandPurple,req:e.amber600,res:e.brandPurple,output:e.teal600,arguments:e.amber600,stack:e.errorColor,caller:e.sky600,error:e.errorColor,app:e.green600,all:e.brandPurple,live:e.violet600,timeline:e.orange600,persisted:e.teal600,payload:e.violet600,diff:e.green600,raw:e.brandPurple,diagnostics:e.amber600,breadcrumbs:e.orange600,overview:e.sky600,json:e.brandPurple,tree:e.violet600,preview:e.brandPurple,delivery:e.amber600,domainAttrs:e.sky600,pretty:e.violet600,table:e.teal600,production:e.brandPurple,files:e.teal600,packages:e.orange600,media:e.pink600,optimizer:e.violet600,hardware:e.orange600,network:e.teal600,display:e.pink600,runtime:e.amber600,security:e.errorColor,fatal:e.errorColor,promise:e.orange600,render:e.pink600,native:e.cyan600,js:e.amber600,asyncStorage:e.brandPurple,mmkv:e.teal600};const D=T.memo(({tabs:v,activeKey:P,onChange:x,style:i,scrollable:t})=>{const n=v.map(r=>{const o=P===r.key,a=r.themeColor||r.color||DEFAULT_INNER_TAB_THEMES[r.key]||e.brandPurple;return<A key={r.key}onPress={()=>x(r.key)}style={({pressed:S})=>[{flex:t?void 0:1,paddingVertical:7,paddingHorizontal:t?12:6,borderRadius:7,backgroundColor:o?a:"transparent",alignItems:"center",justifyContent:"center",gap:4.5,flexDirection:"row",opacity:S?.8:1},o&&{shadowColor:a,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:3,elevation:2}]}>
1
+ import A from"react";import{Pressable as R,ScrollView as V,Text as D,View as C}from"react-native";import{AppColors as e}from"../styles/AppColors";import{AppFonts as E}from"../styles/AppFonts";export const DEFAULT_INNER_TAB_THEMES={metadata:e.sky600,headers:e.teal600,request:e.amber600,response:e.brandPurple,req:e.amber600,res:e.brandPurple,output:e.teal600,arguments:e.amber600,stack:e.errorColor,caller:e.sky600,error:e.errorColor,app:e.green600,all:e.brandPurple,live:e.violet600,timeline:e.orange600,persisted:e.teal600,payload:e.violet600,diff:e.green600,raw:e.brandPurple,diagnostics:e.amber600,breadcrumbs:e.orange600,overview:e.sky600,json:e.brandPurple,tree:e.violet600,preview:e.brandPurple,delivery:e.amber600,domainAttrs:e.sky600,messages:e.violet600,params:e.teal600,code:e.amber600,pretty:e.violet600,table:e.teal600,production:e.brandPurple,files:e.teal600,packages:e.orange600,media:e.pink600,optimizer:e.violet600,hardware:e.orange600,network:e.teal600,display:e.pink600,runtime:e.amber600,security:e.errorColor,fatal:e.errorColor,promise:e.orange600,render:e.pink600,native:e.cyan600,js:e.amber600,asyncStorage:e.brandPurple,mmkv:e.teal600};const I=A.memo(({tabs:P,activeKey:x,onChange:S,style:i,scrollable:t})=>{const n=P.map(r=>{const o=x===r.key,a=r.themeColor||r.color||DEFAULT_INNER_TAB_THEMES[r.key]||e.brandPurple;return<R key={r.key}onPress={()=>S(r.key)}style={({pressed:T})=>[{flex:t?void 0:1,paddingVertical:7,paddingHorizontal:t?12:6,borderRadius:7,backgroundColor:o?a:"transparent",alignItems:"center",justifyContent:"center",gap:4.5,flexDirection:"row",opacity:T?.8:1},o&&{shadowColor:a,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:3,elevation:2}]}>
2
2
  {r.icon?typeof r.icon=="function"?r.icon(o,a):r.icon:null}
3
- <V numberOfLines={1}style={{fontFamily:z.interBold,fontSize:10.5,color:o?e.white:e.grayText,letterSpacing:.2}}>
3
+ <D numberOfLines={1}style={{fontFamily:E.interBold,fontSize:10.5,color:o?e.white:e.grayText,letterSpacing:.2}}>
4
4
  {r.label}
5
- </V>
6
- </A>});return t?<C style={[{borderRadius:10,backgroundColor:`${e.slate200}80`,padding:3,borderWidth:1,borderColor:e.dividerColor},i]}>
7
- <R horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:4}}>
5
+ </D>
6
+ </R>});return t?<C style={[{borderRadius:10,backgroundColor:`${e.slate200}80`,padding:3,borderWidth:1,borderColor:e.dividerColor},i]}>
7
+ <V horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:4}}>
8
8
  {n}
9
- </R>
9
+ </V>
10
10
  </C>:<C style={[{flexDirection:"row",borderRadius:10,backgroundColor:`${e.slate200}80`,padding:3,borderWidth:1,borderColor:e.dividerColor,gap:3,minWidth:0},i]}>
11
11
  {n}
12
- </C>});export default D;
12
+ </C>});export default I;
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "2.4.1";
1
+ export declare const LIB_VERSION = "2.5.0";
@@ -1 +1 @@
1
- export const LIB_VERSION="2.4.1";
1
+ export const LIB_VERSION="2.5.0";
@@ -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,26 @@
1
+ import type { SocketConnectionRecord, SocketFrame, SocketFrameDirection, SocketFrameType, RouteInfo } from '../types';
2
+ export declare const setSocketRouteInfoProvider: (provider: (() => RouteInfo | null) | null) => void;
3
+ export declare const setSocketModuleEnabled: (enabled: boolean) => void;
4
+ export declare const getSocketModuleEnabled: () => boolean;
5
+ export declare const setMaxSocketRecordsLimit: (limit: number) => void;
6
+ export declare const getMaxSocketRecordsLimit: () => number;
7
+ export declare function getSocketRecords(): SocketConnectionRecord[];
8
+ export declare function clearSocketRecords(): void;
9
+ export declare function deleteSocketRecord(id: string): void;
10
+ export declare function deleteMultipleSocketRecords(ids: string[]): void;
11
+ export declare function subscribeSocketRecords(callback: (records: SocketConnectionRecord[]) => void): () => void;
12
+ export declare function pruneSocketRecords(keepCount?: number): void;
13
+ interface ParsedPayloadInfo {
14
+ data: any;
15
+ type: SocketFrameType;
16
+ eventName?: string;
17
+ size: number;
18
+ }
19
+ export declare function analyzeSocketPayload(raw: any): ParsedPayloadInfo;
20
+ export declare function recordSocketConnection(url: string, options?: Partial<SocketConnectionRecord>): SocketConnectionRecord;
21
+ export declare function recordSocketFrame(socketId: string, rawPayload: any, direction?: SocketFrameDirection, options?: Partial<SocketFrame>): SocketFrame | null;
22
+ export declare function recordSocketClose(socketId: string, closeCode?: number, closeReason?: string): void;
23
+ export declare function recordSocketError(socketId: string, error: any): void;
24
+ export declare function setupSocketLogger(): void;
25
+ export declare function simulateTestSocket(preset?: 'chat' | 'crypto' | 'socketio' | 'echo' | 'custom', customData?: any): SocketConnectionRecord;
26
+ export {};
@@ -0,0 +1,2 @@
1
+ let r=[],m=50,h=!0,b=!1,g=null;const S=new Set;export const setSocketRouteInfoProvider=e=>{g=e},setSocketModuleEnabled=e=>{h=e},getSocketModuleEnabled=()=>h,setMaxSocketRecordsLimit=e=>{m=Math.max(10,Math.min(500,e)),r.length>m&&(r=r.slice(0,m),d())},getMaxSocketRecordsLimit=()=>m;export function getSocketRecords(){return[...r]}export function clearSocketRecords(){r=[],d()}export function deleteSocketRecord(e){r=r.filter(t=>t.id!==e),d()}export function deleteMultipleSocketRecords(e){const t=new Set(e);r=r.filter(s=>!t.has(s.id)),d()}export function subscribeSocketRecords(e){return S.add(e),e([...r]),()=>{S.delete(e)}}export function pruneSocketRecords(e=25){r.length>e&&(r=r.slice(0,e),d())}function d(){const e=[...r];S.forEach(t=>{try{t(e)}catch{}})}function y(){return`ws_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function a(){return`f_${Date.now()}_${Math.random().toString(36).substring(2,7)}`}function z(){try{const e=new Error().stack;if(!e)return;const t=e.split(`
2
+ `);for(const s of t)if(!s.includes("socketLogger")&&!s.includes("NativeInspector")&&!s.includes("InspectorWebSocket")&&!s.includes("node_modules/react-native")&&!s.includes("node_modules/expo")&&s.includes(".js")||s.includes(".tsx")||s.includes(".ts")){const i=s.match(/(?:at\s+)?(?:(.+?)\s+\()?(.*?):(\d+):(\d+)\)?$/);if(i){const n=i[1]||"anonymous",u=i[2]?.split("/").pop()||i[2],l=i[3];return`${u}:${l} (${n})`}}}catch{}}function _(e){const t={};try{const s=e.indexOf("?");if(s>=0){const n=e.substring(s+1).split("#")[0].split("&");for(const u of n){const[l,p]=u.split("=");l&&(t[decodeURIComponent(l)]=p?decodeURIComponent(p):"")}}}catch{}return t}export function analyzeSocketPayload(e){if(e==null)return{data:null,type:"text",size:0};if(typeof e=="string"){const t=(new Blob,e.length);if(/^\d+/.test(e)){if(e.startsWith("2"))return{data:"ping",type:"ping",size:t};if(e.startsWith("3"))return{data:"pong",type:"pong",size:t};if(e.startsWith("42")||e.startsWith("43"))try{const i=e.substring(2),n=JSON.parse(i);if(Array.isArray(n)&&n.length>0){const u=typeof n[0]=="string"?n[0]:"socket.io",l=n.length>1?n.length===2?n[1]:n.slice(1):null;return{data:l!==null?l:n,type:"socket.io",eventName:u,size:t}}}catch{}if(e.startsWith("0"))try{return{data:JSON.parse(e.substring(1)),type:"socket.io",eventName:"handshake",size:t}}catch{}}const s=e.trim();if(s.startsWith("{")&&s.endsWith("}")||s.startsWith("[")&&s.endsWith("]"))try{return{data:JSON.parse(s),type:"json",size:t}}catch{}return{data:e,type:"text",size:t}}return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer?{data:`[ArrayBuffer ${e.byteLength} bytes]`,type:"binary",size:e.byteLength}:typeof Uint8Array<"u"&&e instanceof Uint8Array?{data:`[Uint8Array ${e.byteLength} bytes]`,type:"binary",size:e.byteLength}:typeof Blob<"u"&&e instanceof Blob?{data:`[Blob ${e.size} bytes: ${e.type||"binary"}]`,type:"binary",size:e.size}:typeof e=="object"?{data:e,type:"json",size:JSON.stringify(e).length}:{data:String(e),type:"text",size:String(e).length}}export function recordSocketConnection(e,t){const s=_(e),i=e.includes("/socket.io")||t?.client==="socket.io",n={id:t?.id||y(),url:e,protocols:t?.protocols,readyState:t?.readyState??1,status:t?.status||"open",startTime:t?.startTime||Date.now(),client:t?.client||(i?"socket.io":"websocket"),frames:t?.frames||[],sentCount:t?.sentCount||0,receivedCount:t?.receivedCount||0,totalBytesSent:t?.totalBytesSent||0,totalBytesReceived:t?.totalBytesReceived||0,caller:t?.caller||z(),query:s,headers:t?.headers,routeInfo:t?.routeInfo||g&&g()||void 0};return r.unshift(n),r.length>m&&(r=r.slice(0,m)),d(),n}export function recordSocketFrame(e,t,s="send",i){const n=r.find(p=>p.id===e);if(!n)return null;const u=analyzeSocketPayload(t),l={id:i?.id||a(),timestamp:i?.timestamp||Date.now(),direction:s,type:i?.type||u.type,data:i?.data!==void 0?i.data:u.data,raw:t,size:i?.size!==void 0?i.size:u.size,eventName:i?.eventName||u.eventName,ackId:i?.ackId};return n.frames.push(l),s==="send"?(n.sentCount+=1,n.totalBytesSent+=l.size||0):(n.receivedCount+=1,n.totalBytesReceived+=l.size||0),d(),l}export function recordSocketClose(e,t=1e3,s="Normal closure"){const i=r.find(n=>n.id===e);i&&(i.readyState=3,i.status="closed",i.closeCode=t,i.closeReason=s,i.endTime=Date.now(),i.duration=i.endTime-i.startTime,d())}export function recordSocketError(e,t){const s=r.find(i=>i.id===e);s&&(s.status="error",s.error=typeof t=="string"?t:t?.message||"WebSocket error occurred",d())}const x=typeof global<"u"&&global.WebSocket?global.WebSocket:void 0;export function setupSocketLogger(){if(b||!x)return;class e extends x{constructor(s,i){const n=typeof s=="string"?s:s.toString();if(super(s,i),this._inspectorUrl=n,this._inspectorId=y(),h){const u=_(n),l=n.includes("/socket.io"),p={id:this._inspectorId,url:n,protocols:i,readyState:0,status:"connecting",startTime:Date.now(),client:l?"socket.io":"websocket",frames:[],sentCount:0,receivedCount:0,totalBytesSent:0,totalBytesReceived:0,caller:z(),query:u,routeInfo:g&&g()||void 0};r.unshift(p),r.length>m&&(r=r.slice(0,m)),d(),this.addEventListener("open",()=>{const o=r.find(c=>c.id===this._inspectorId);o&&(o.readyState=1,o.status="open",d())}),this.addEventListener("message",o=>{if(!h)return;const c=r.find(C=>C.id===this._inspectorId);if(!c)return;const f=o?.data,k=analyzeSocketPayload(f),v={id:a(),timestamp:Date.now(),direction:"receive",type:k.type,data:k.data,raw:f,size:k.size,eventName:k.eventName};c.frames.push(v),c.receivedCount+=1,c.totalBytesReceived+=v.size||0,d()}),this.addEventListener("error",o=>{const c=r.find(f=>f.id===this._inspectorId);c&&(c.status="error",c.error=o?.message||"WebSocket connection error",d())}),this.addEventListener("close",o=>{const c=r.find(f=>f.id===this._inspectorId);c&&(c.readyState=3,c.status="closed",c.closeCode=o?.code||1e3,c.closeReason=o?.reason||"Closed",c.endTime=Date.now(),c.duration=c.endTime-c.startTime,d())})}}send(s){if(h&&this._inspectorId){const i=r.find(n=>n.id===this._inspectorId);if(i){const n=analyzeSocketPayload(s),u={id:a(),timestamp:Date.now(),direction:"send",type:n.type,data:n.data,raw:s,size:n.size,eventName:n.eventName};i.frames.push(u),i.sentCount+=1,i.totalBytesSent+=u.size||0,d()}}super.send(s)}}e.CONNECTING=0,e.OPEN=1,e.CLOSING=2,e.CLOSED=3,global.WebSocket=e,b=!0}export function simulateTestSocket(e="chat",t){const s=Date.now();if(e==="chat"){const p=y(),o=s-18450,c={id:p,url:"wss://chat.example.com/v2/rooms/engineering?user=lead_dev",protocols:"chat.v2",readyState:1,status:"open",startTime:o,client:"websocket",sentCount:3,receivedCount:5,totalBytesSent:412,totalBytesReceived:890,caller:"ChatRoomScreen.tsx:84 (initChatWebSocket)",query:{user:"lead_dev",version:"2.0.4"},frames:[{id:a(),timestamp:o+120,direction:"send",type:"json",data:{action:"auth",token:"bearer_token_sec_99182",userId:"usr_81723"},size:78},{id:a(),timestamp:o+380,direction:"receive",type:"json",data:{status:"authenticated",room:"engineering",activeUsers:14},size:64},{id:a(),timestamp:o+2400,direction:"send",type:"json",data:{action:"send_message",message:"Hello team, the new release build is ready! \u{1F680}"},size:82},{id:a(),timestamp:o+3100,direction:"receive",type:"json",data:{user:"Sarah_QA",message:"Awesome! Starting regression tests on iOS 18 now.",timestamp:o+3090},size:114},{id:a(),timestamp:o+7500,direction:"receive",type:"json",data:{user:"Alex_Backend",message:"API response times look great on staging cluster.",timestamp:o+7490},size:98},{id:a(),timestamp:o+12e3,direction:"send",type:"ping",data:"ping",size:4},{id:a(),timestamp:o+12045,direction:"receive",type:"pong",data:"pong",size:4},{id:a(),timestamp:o+16200,direction:"receive",type:"json",data:{event:"typing_indicator",user:"David_Design",status:"typing"},size:56}]};return r.unshift(c),d(),c}if(e==="crypto"){const p=y(),o=s-45e3,c={id:p,url:"wss://stream.binance.com:9443/ws/btcusdt@ticker/ethusdt@ticker",protocols:void 0,readyState:1,status:"open",startTime:o,client:"websocket",sentCount:1,receivedCount:6,totalBytesSent:86,totalBytesReceived:2140,caller:"CryptoLiveTicker.tsx:42 (connectTickerStream)",query:{symbols:"btcusdt,ethusdt"},frames:[{id:a(),timestamp:o+80,direction:"send",type:"json",data:{method:"SUBSCRIBE",params:["btcusdt@ticker","ethusdt@ticker"],id:1},size:86},{id:a(),timestamp:o+250,direction:"receive",type:"json",data:{result:null,id:1},size:24},{id:a(),timestamp:o+1200,direction:"receive",type:"json",data:{s:"BTCUSDT",c:"92,450.00",h:"93,120.00",l:"90,800.00",v:"18420.45",q:"1702891240.50",P:"+2.45%"},size:142},{id:a(),timestamp:o+5400,direction:"receive",type:"json",data:{s:"ETHUSDT",c:"3,420.50",h:"3,480.00",l:"3,360.00",v:"84120.12",q:"287890124.00",P:"+1.82%"},size:138},{id:a(),timestamp:o+18e3,direction:"receive",type:"json",data:{s:"BTCUSDT",c:"92,610.00",h:"93,120.00",l:"90,800.00",v:"18650.10",q:"1724120890.00",P:"+2.62%"},size:142}]};return r.unshift(c),d(),c}if(e==="socketio"){const p=y(),o=s-32e3,c={id:p,url:"https://api.myapp.io/socket.io/?EIO=4&transport=websocket&sid=U9k1l_892Zq",readyState:1,status:"open",startTime:o,client:"socket.io",sentCount:3,receivedCount:4,totalBytesSent:280,totalBytesReceived:560,caller:"SocketIOClient.ts:62 (io.connect)",query:{EIO:"4",transport:"websocket",sid:"U9k1l_892Zq"},frames:[{id:a(),timestamp:o+90,direction:"receive",type:"socket.io",eventName:"handshake",data:{sid:"U9k1l_892Zq",upgrades:[],pingInterval:25e3,pingTimeout:2e4},size:96},{id:a(),timestamp:o+210,direction:"send",type:"socket.io",eventName:"connect_namespace",data:{token:"jwt_auth_pass_token_99"},size:54},{id:a(),timestamp:o+340,direction:"receive",type:"socket.io",eventName:"connect",data:{status:"ok",sid:"U9k1l_892Zq"},size:42},{id:a(),timestamp:o+4200,direction:"send",type:"socket.io",eventName:"subscribe_order_feed",data:{orderId:"ORD_99182",tenantId:"enterprise_gold"},size:72},{id:a(),timestamp:o+8900,direction:"receive",type:"socket.io",eventName:"order_status_updated",data:{orderId:"ORD_99182",status:"DISPATCHED",driverName:"Michael Brown",etaMinutes:12,location:{lat:37.7749,lng:-122.4194}},size:168},{id:a(),timestamp:o+25e3,direction:"send",type:"ping",data:"ping",size:4},{id:a(),timestamp:o+25032,direction:"receive",type:"pong",data:"pong",size:4}]};return r.unshift(c),d(),c}const i=y(),n=s-6e4,u=s-2e3,l={id:i,url:"wss://echo.websocket.events",readyState:3,status:"closed",startTime:n,endTime:u,duration:u-n,closeCode:1e3,closeReason:"Normal session closure",client:"websocket",sentCount:2,receivedCount:2,totalBytesSent:110,totalBytesReceived:110,caller:"HomeScreen.tsx:120 (testWebSocketEcho)",frames:[{id:a(),timestamp:n+200,direction:"send",type:"text",data:"Echo ping test #1",size:17},{id:a(),timestamp:n+380,direction:"receive",type:"text",data:"Echo ping test #1",size:17},{id:a(),timestamp:n+15e3,direction:"send",type:"json",data:{type:"diagnostics",timestamp:n+15e3},size:45},{id:a(),timestamp:n+15210,direction:"receive",type:"json",data:{type:"diagnostics",timestamp:n+15e3},size:45}]};return t&&Object.assign(l,t),r.unshift(l),d(),l}
@@ -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;
@@ -10,6 +10,7 @@ export declare const getStatusColor: (status: number | null) => string;
10
10
  export declare const getDurationColor: (duration: number | null) => string;
11
11
  export declare const getSize: (data: unknown) => string;
12
12
  export declare const formatBytes: (bytes: number) => string;
13
+ export declare const formatByteSize: (bytes: number) => string;
13
14
  export declare const copyToClipboard: (value: unknown, label?: string) => void;
14
15
  export declare const copyImageOrMediaToClipboard: (uri: string, label?: string) => Promise<void>;
15
16
  export declare const getPath: (url: string) => string;