react-native-xenon 0.6.0 → 1.0.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 (280) hide show
  1. package/README.md +34 -32
  2. package/lib/commonjs/assets/icons/delete.png +0 -0
  3. package/lib/commonjs/core/refs.js +33 -0
  4. package/lib/commonjs/core/refs.js.map +1 -0
  5. package/lib/commonjs/core/utils.js +40 -9
  6. package/lib/commonjs/core/utils.js.map +1 -1
  7. package/lib/commonjs/hooks/useNetworkInterceptor.js +14 -15
  8. package/lib/commonjs/hooks/useNetworkInterceptor.js.map +1 -1
  9. package/lib/commonjs/interceptors/FetchInterceptor.js +6 -9
  10. package/lib/commonjs/interceptors/FetchInterceptor.js.map +1 -1
  11. package/lib/commonjs/interceptors/WebSocketInterceptor.js +2 -9
  12. package/lib/commonjs/interceptors/WebSocketInterceptor.js.map +1 -1
  13. package/lib/commonjs/interceptors/XHRInterceptor.js +9 -6
  14. package/lib/commonjs/interceptors/XHRInterceptor.js.map +1 -1
  15. package/lib/commonjs/theme/colors.js +10 -5
  16. package/lib/commonjs/theme/colors.js.map +1 -1
  17. package/lib/commonjs/ui/Xenon.js +52 -42
  18. package/lib/commonjs/ui/Xenon.js.map +1 -1
  19. package/lib/commonjs/ui/components/bubble/Bubble.js +37 -28
  20. package/lib/commonjs/ui/components/bubble/Bubble.js.map +1 -1
  21. package/lib/commonjs/ui/components/common/Divider.js +21 -0
  22. package/lib/commonjs/ui/components/common/Divider.js.map +1 -0
  23. package/lib/commonjs/ui/components/common/Icon.js +25 -0
  24. package/lib/commonjs/ui/components/common/Icon.js.map +1 -0
  25. package/lib/commonjs/ui/components/common/IndexedStack.js +46 -0
  26. package/lib/commonjs/ui/components/common/IndexedStack.js.map +1 -0
  27. package/lib/commonjs/ui/components/common/Touchable.js +22 -0
  28. package/lib/commonjs/ui/components/common/Touchable.js.map +1 -0
  29. package/lib/commonjs/ui/components/details/LogMessageDetails.js +24 -11
  30. package/lib/commonjs/ui/components/details/LogMessageDetails.js.map +1 -1
  31. package/lib/commonjs/ui/components/details/NetworkRequestDetails.js +64 -39
  32. package/lib/commonjs/ui/components/details/NetworkRequestDetails.js.map +1 -1
  33. package/lib/commonjs/ui/components/headers/ConsoleHeader.js +30 -0
  34. package/lib/commonjs/ui/components/headers/ConsoleHeader.js.map +1 -0
  35. package/lib/commonjs/ui/components/headers/DebuggerHeader.js +56 -173
  36. package/lib/commonjs/ui/components/headers/DebuggerHeader.js.map +1 -1
  37. package/lib/commonjs/ui/components/headers/Header.js +34 -0
  38. package/lib/commonjs/ui/components/headers/Header.js.map +1 -0
  39. package/lib/commonjs/ui/components/headers/HeaderComponents.js +111 -0
  40. package/lib/commonjs/ui/components/headers/HeaderComponents.js.map +1 -0
  41. package/lib/commonjs/ui/components/headers/NetworkHeader.js +97 -0
  42. package/lib/commonjs/ui/components/headers/NetworkHeader.js.map +1 -0
  43. package/lib/commonjs/ui/components/index.js +0 -7
  44. package/lib/commonjs/ui/components/index.js.map +1 -1
  45. package/lib/commonjs/ui/components/items/ConsolePanelItem.js +8 -4
  46. package/lib/commonjs/ui/components/items/ConsolePanelItem.js.map +1 -1
  47. package/lib/commonjs/ui/components/items/DebuggerHeaderItem.js +7 -10
  48. package/lib/commonjs/ui/components/items/DebuggerHeaderItem.js.map +1 -1
  49. package/lib/commonjs/ui/components/items/NetworkPanelItem.js +54 -13
  50. package/lib/commonjs/ui/components/items/NetworkPanelItem.js.map +1 -1
  51. package/lib/commonjs/ui/components/items/NetworkRequestDetailsItem.js +19 -18
  52. package/lib/commonjs/ui/components/items/NetworkRequestDetailsItem.js.map +1 -1
  53. package/lib/commonjs/ui/components/panels/ConsolePanel.js +19 -10
  54. package/lib/commonjs/ui/components/panels/ConsolePanel.js.map +1 -1
  55. package/lib/commonjs/ui/components/panels/NetworkPanel.js +24 -22
  56. package/lib/commonjs/ui/components/panels/NetworkPanel.js.map +1 -1
  57. package/lib/commonjs/ui/components/panels/Panel.js +25 -0
  58. package/lib/commonjs/ui/components/panels/Panel.js.map +1 -0
  59. package/lib/module/assets/icons/delete.png +0 -0
  60. package/lib/module/core/refs.js +33 -0
  61. package/lib/module/core/refs.js.map +1 -0
  62. package/lib/module/core/utils.js +40 -9
  63. package/lib/module/core/utils.js.map +1 -1
  64. package/lib/module/hooks/useNetworkInterceptor.js +14 -15
  65. package/lib/module/hooks/useNetworkInterceptor.js.map +1 -1
  66. package/lib/module/interceptors/FetchInterceptor.js +6 -9
  67. package/lib/module/interceptors/FetchInterceptor.js.map +1 -1
  68. package/lib/module/interceptors/WebSocketInterceptor.js +2 -9
  69. package/lib/module/interceptors/WebSocketInterceptor.js.map +1 -1
  70. package/lib/module/interceptors/XHRInterceptor.js +9 -6
  71. package/lib/module/interceptors/XHRInterceptor.js.map +1 -1
  72. package/lib/module/theme/colors.js +10 -5
  73. package/lib/module/theme/colors.js.map +1 -1
  74. package/lib/module/ui/Xenon.js +52 -42
  75. package/lib/module/ui/Xenon.js.map +1 -1
  76. package/lib/module/ui/components/bubble/Bubble.js +37 -28
  77. package/lib/module/ui/components/bubble/Bubble.js.map +1 -1
  78. package/lib/module/ui/components/common/Divider.js +21 -0
  79. package/lib/module/ui/components/common/Divider.js.map +1 -0
  80. package/lib/module/ui/components/common/Icon.js +25 -0
  81. package/lib/module/ui/components/common/Icon.js.map +1 -0
  82. package/lib/module/ui/components/common/IndexedStack.js +46 -0
  83. package/lib/module/ui/components/common/IndexedStack.js.map +1 -0
  84. package/lib/module/ui/components/common/Touchable.js +22 -0
  85. package/lib/module/ui/components/common/Touchable.js.map +1 -0
  86. package/lib/module/ui/components/details/LogMessageDetails.js +24 -11
  87. package/lib/module/ui/components/details/LogMessageDetails.js.map +1 -1
  88. package/lib/module/ui/components/details/NetworkRequestDetails.js +64 -39
  89. package/lib/module/ui/components/details/NetworkRequestDetails.js.map +1 -1
  90. package/lib/module/ui/components/headers/ConsoleHeader.js +30 -0
  91. package/lib/module/ui/components/headers/ConsoleHeader.js.map +1 -0
  92. package/lib/module/ui/components/headers/DebuggerHeader.js +56 -173
  93. package/lib/module/ui/components/headers/DebuggerHeader.js.map +1 -1
  94. package/lib/module/ui/components/headers/Header.js +34 -0
  95. package/lib/module/ui/components/headers/Header.js.map +1 -0
  96. package/lib/module/ui/components/headers/HeaderComponents.js +111 -0
  97. package/lib/module/ui/components/headers/HeaderComponents.js.map +1 -0
  98. package/lib/module/ui/components/headers/NetworkHeader.js +97 -0
  99. package/lib/module/ui/components/headers/NetworkHeader.js.map +1 -0
  100. package/lib/module/ui/components/index.js +0 -7
  101. package/lib/module/ui/components/index.js.map +1 -1
  102. package/lib/module/ui/components/items/ConsolePanelItem.js +8 -4
  103. package/lib/module/ui/components/items/ConsolePanelItem.js.map +1 -1
  104. package/lib/module/ui/components/items/DebuggerHeaderItem.js +7 -10
  105. package/lib/module/ui/components/items/DebuggerHeaderItem.js.map +1 -1
  106. package/lib/module/ui/components/items/NetworkPanelItem.js +54 -13
  107. package/lib/module/ui/components/items/NetworkPanelItem.js.map +1 -1
  108. package/lib/module/ui/components/items/NetworkRequestDetailsItem.js +19 -18
  109. package/lib/module/ui/components/items/NetworkRequestDetailsItem.js.map +1 -1
  110. package/lib/module/ui/components/panels/ConsolePanel.js +19 -10
  111. package/lib/module/ui/components/panels/ConsolePanel.js.map +1 -1
  112. package/lib/module/ui/components/panels/NetworkPanel.js +24 -22
  113. package/lib/module/ui/components/panels/NetworkPanel.js.map +1 -1
  114. package/lib/module/ui/components/panels/Panel.js +25 -0
  115. package/lib/module/ui/components/panels/Panel.js.map +1 -0
  116. package/lib/typescript/commonjs/src/core/refs.d.ts +24 -0
  117. package/lib/typescript/commonjs/src/core/refs.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/src/core/utils.d.ts +13 -5
  119. package/lib/typescript/commonjs/src/core/utils.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/src/hooks/useNetworkInterceptor.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/src/interceptors/FetchInterceptor.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/src/interceptors/WebSocketInterceptor.d.ts +0 -1
  123. package/lib/typescript/commonjs/src/interceptors/WebSocketInterceptor.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/src/interceptors/XHRInterceptor.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/src/theme/colors.d.ts +10 -5
  126. package/lib/typescript/commonjs/src/theme/colors.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/src/types/common.d.ts +2 -3
  128. package/lib/typescript/commonjs/src/types/common.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/src/types/http.d.ts +5 -6
  130. package/lib/typescript/commonjs/src/types/http.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/src/types/websocket.d.ts +2 -2
  132. package/lib/typescript/commonjs/src/types/websocket.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/src/ui/Xenon.d.ts +5 -2
  134. package/lib/typescript/commonjs/src/ui/Xenon.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/src/ui/components/bubble/Bubble.d.ts +4 -5
  136. package/lib/typescript/commonjs/src/ui/components/bubble/Bubble.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/src/ui/components/common/Divider.d.ts +4 -0
  138. package/lib/typescript/commonjs/src/ui/components/common/Divider.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/src/ui/components/common/Icon.d.ts +8 -0
  140. package/lib/typescript/commonjs/src/ui/components/common/Icon.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/src/ui/components/common/IndexedStack.d.ts +13 -0
  142. package/lib/typescript/commonjs/src/ui/components/common/IndexedStack.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/src/ui/components/common/Touchable.d.ts +10 -0
  144. package/lib/typescript/commonjs/src/ui/components/common/Touchable.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/src/ui/components/details/LogMessageDetails.d.ts +5 -6
  146. package/lib/typescript/commonjs/src/ui/components/details/LogMessageDetails.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/src/ui/components/details/NetworkRequestDetails.d.ts +5 -6
  148. package/lib/typescript/commonjs/src/ui/components/details/NetworkRequestDetails.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/src/ui/components/headers/ConsoleHeader.d.ts +9 -0
  150. package/lib/typescript/commonjs/src/ui/components/headers/ConsoleHeader.d.ts.map +1 -0
  151. package/lib/typescript/commonjs/src/ui/components/headers/DebuggerHeader.d.ts +9 -1
  152. package/lib/typescript/commonjs/src/ui/components/headers/DebuggerHeader.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/src/ui/components/headers/Header.d.ts +3 -0
  154. package/lib/typescript/commonjs/src/ui/components/headers/Header.d.ts.map +1 -0
  155. package/lib/typescript/commonjs/src/ui/components/headers/HeaderComponents.d.ts +20 -0
  156. package/lib/typescript/commonjs/src/ui/components/headers/HeaderComponents.d.ts.map +1 -0
  157. package/lib/typescript/commonjs/src/ui/components/headers/NetworkHeader.d.ts +9 -0
  158. package/lib/typescript/commonjs/src/ui/components/headers/NetworkHeader.d.ts.map +1 -0
  159. package/lib/typescript/commonjs/src/ui/components/index.d.ts +0 -1
  160. package/lib/typescript/commonjs/src/ui/components/index.d.ts.map +1 -1
  161. package/lib/typescript/commonjs/src/ui/components/items/ConsolePanelItem.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/src/ui/components/items/DebuggerHeaderItem.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/src/ui/components/items/NetworkPanelItem.d.ts +3 -2
  164. package/lib/typescript/commonjs/src/ui/components/items/NetworkPanelItem.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/src/ui/components/items/NetworkRequestDetailsItem.d.ts +4 -5
  166. package/lib/typescript/commonjs/src/ui/components/items/NetworkRequestDetailsItem.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/src/ui/components/panels/ConsolePanel.d.ts +5 -1
  168. package/lib/typescript/commonjs/src/ui/components/panels/ConsolePanel.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/src/ui/components/panels/NetworkPanel.d.ts +5 -1
  170. package/lib/typescript/commonjs/src/ui/components/panels/NetworkPanel.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/src/ui/components/panels/Panel.d.ts +2 -0
  172. package/lib/typescript/commonjs/src/ui/components/panels/Panel.d.ts.map +1 -0
  173. package/lib/typescript/module/src/core/refs.d.ts +24 -0
  174. package/lib/typescript/module/src/core/refs.d.ts.map +1 -0
  175. package/lib/typescript/module/src/core/utils.d.ts +13 -5
  176. package/lib/typescript/module/src/core/utils.d.ts.map +1 -1
  177. package/lib/typescript/module/src/hooks/useNetworkInterceptor.d.ts.map +1 -1
  178. package/lib/typescript/module/src/interceptors/FetchInterceptor.d.ts.map +1 -1
  179. package/lib/typescript/module/src/interceptors/WebSocketInterceptor.d.ts +0 -1
  180. package/lib/typescript/module/src/interceptors/WebSocketInterceptor.d.ts.map +1 -1
  181. package/lib/typescript/module/src/interceptors/XHRInterceptor.d.ts.map +1 -1
  182. package/lib/typescript/module/src/theme/colors.d.ts +10 -5
  183. package/lib/typescript/module/src/theme/colors.d.ts.map +1 -1
  184. package/lib/typescript/module/src/types/common.d.ts +2 -3
  185. package/lib/typescript/module/src/types/common.d.ts.map +1 -1
  186. package/lib/typescript/module/src/types/http.d.ts +5 -6
  187. package/lib/typescript/module/src/types/http.d.ts.map +1 -1
  188. package/lib/typescript/module/src/types/websocket.d.ts +2 -2
  189. package/lib/typescript/module/src/types/websocket.d.ts.map +1 -1
  190. package/lib/typescript/module/src/ui/Xenon.d.ts +5 -2
  191. package/lib/typescript/module/src/ui/Xenon.d.ts.map +1 -1
  192. package/lib/typescript/module/src/ui/components/bubble/Bubble.d.ts +4 -5
  193. package/lib/typescript/module/src/ui/components/bubble/Bubble.d.ts.map +1 -1
  194. package/lib/typescript/module/src/ui/components/common/Divider.d.ts +4 -0
  195. package/lib/typescript/module/src/ui/components/common/Divider.d.ts.map +1 -0
  196. package/lib/typescript/module/src/ui/components/common/Icon.d.ts +8 -0
  197. package/lib/typescript/module/src/ui/components/common/Icon.d.ts.map +1 -0
  198. package/lib/typescript/module/src/ui/components/common/IndexedStack.d.ts +13 -0
  199. package/lib/typescript/module/src/ui/components/common/IndexedStack.d.ts.map +1 -0
  200. package/lib/typescript/module/src/ui/components/common/Touchable.d.ts +10 -0
  201. package/lib/typescript/module/src/ui/components/common/Touchable.d.ts.map +1 -0
  202. package/lib/typescript/module/src/ui/components/details/LogMessageDetails.d.ts +5 -6
  203. package/lib/typescript/module/src/ui/components/details/LogMessageDetails.d.ts.map +1 -1
  204. package/lib/typescript/module/src/ui/components/details/NetworkRequestDetails.d.ts +5 -6
  205. package/lib/typescript/module/src/ui/components/details/NetworkRequestDetails.d.ts.map +1 -1
  206. package/lib/typescript/module/src/ui/components/headers/ConsoleHeader.d.ts +9 -0
  207. package/lib/typescript/module/src/ui/components/headers/ConsoleHeader.d.ts.map +1 -0
  208. package/lib/typescript/module/src/ui/components/headers/DebuggerHeader.d.ts +9 -1
  209. package/lib/typescript/module/src/ui/components/headers/DebuggerHeader.d.ts.map +1 -1
  210. package/lib/typescript/module/src/ui/components/headers/Header.d.ts +3 -0
  211. package/lib/typescript/module/src/ui/components/headers/Header.d.ts.map +1 -0
  212. package/lib/typescript/module/src/ui/components/headers/HeaderComponents.d.ts +20 -0
  213. package/lib/typescript/module/src/ui/components/headers/HeaderComponents.d.ts.map +1 -0
  214. package/lib/typescript/module/src/ui/components/headers/NetworkHeader.d.ts +9 -0
  215. package/lib/typescript/module/src/ui/components/headers/NetworkHeader.d.ts.map +1 -0
  216. package/lib/typescript/module/src/ui/components/index.d.ts +0 -1
  217. package/lib/typescript/module/src/ui/components/index.d.ts.map +1 -1
  218. package/lib/typescript/module/src/ui/components/items/ConsolePanelItem.d.ts.map +1 -1
  219. package/lib/typescript/module/src/ui/components/items/DebuggerHeaderItem.d.ts.map +1 -1
  220. package/lib/typescript/module/src/ui/components/items/NetworkPanelItem.d.ts +3 -2
  221. package/lib/typescript/module/src/ui/components/items/NetworkPanelItem.d.ts.map +1 -1
  222. package/lib/typescript/module/src/ui/components/items/NetworkRequestDetailsItem.d.ts +4 -5
  223. package/lib/typescript/module/src/ui/components/items/NetworkRequestDetailsItem.d.ts.map +1 -1
  224. package/lib/typescript/module/src/ui/components/panels/ConsolePanel.d.ts +5 -1
  225. package/lib/typescript/module/src/ui/components/panels/ConsolePanel.d.ts.map +1 -1
  226. package/lib/typescript/module/src/ui/components/panels/NetworkPanel.d.ts +5 -1
  227. package/lib/typescript/module/src/ui/components/panels/NetworkPanel.d.ts.map +1 -1
  228. package/lib/typescript/module/src/ui/components/panels/Panel.d.ts +2 -0
  229. package/lib/typescript/module/src/ui/components/panels/Panel.d.ts.map +1 -0
  230. package/package.json +4 -4
  231. package/src/assets/icons/delete.png +0 -0
  232. package/src/core/refs.ts +29 -0
  233. package/src/core/utils.ts +45 -14
  234. package/src/hooks/useNetworkInterceptor.ts +20 -27
  235. package/src/interceptors/FetchInterceptor.ts +7 -20
  236. package/src/interceptors/WebSocketInterceptor.ts +2 -11
  237. package/src/interceptors/XHRInterceptor.ts +13 -8
  238. package/src/theme/colors.ts +10 -5
  239. package/src/types/common.ts +2 -3
  240. package/src/types/http.ts +5 -6
  241. package/src/types/websocket.ts +2 -1
  242. package/src/ui/Xenon.tsx +42 -42
  243. package/src/ui/components/bubble/Bubble.tsx +101 -97
  244. package/src/ui/components/common/Divider.tsx +13 -0
  245. package/src/ui/components/common/Icon.tsx +12 -0
  246. package/src/ui/components/common/IndexedStack.tsx +62 -0
  247. package/src/ui/components/common/Touchable.tsx +21 -0
  248. package/src/ui/components/details/LogMessageDetails.tsx +31 -16
  249. package/src/ui/components/details/NetworkRequestDetails.tsx +143 -124
  250. package/src/ui/components/headers/ConsoleHeader.tsx +25 -0
  251. package/src/ui/components/headers/DebuggerHeader.tsx +28 -191
  252. package/src/ui/components/headers/Header.tsx +22 -0
  253. package/src/ui/components/headers/HeaderComponents.tsx +100 -0
  254. package/src/ui/components/headers/NetworkHeader.tsx +85 -0
  255. package/src/ui/components/index.ts +0 -1
  256. package/src/ui/components/items/ConsolePanelItem.tsx +11 -6
  257. package/src/ui/components/items/DebuggerHeaderItem.tsx +8 -11
  258. package/src/ui/components/items/NetworkPanelItem.tsx +64 -15
  259. package/src/ui/components/items/NetworkRequestDetailsItem.tsx +26 -21
  260. package/src/ui/components/panels/ConsolePanel.tsx +23 -10
  261. package/src/ui/components/panels/NetworkPanel.tsx +28 -25
  262. package/src/ui/components/panels/Panel.tsx +17 -0
  263. package/lib/commonjs/ui/components/details/DetailsViewer.js +0 -32
  264. package/lib/commonjs/ui/components/details/DetailsViewer.js.map +0 -1
  265. package/lib/commonjs/ui/components/headers/NetworkPanelHeader.js +0 -81
  266. package/lib/commonjs/ui/components/headers/NetworkPanelHeader.js.map +0 -1
  267. package/lib/module/ui/components/details/DetailsViewer.js +0 -32
  268. package/lib/module/ui/components/details/DetailsViewer.js.map +0 -1
  269. package/lib/module/ui/components/headers/NetworkPanelHeader.js +0 -81
  270. package/lib/module/ui/components/headers/NetworkPanelHeader.js.map +0 -1
  271. package/lib/typescript/commonjs/src/ui/components/details/DetailsViewer.d.ts +0 -2
  272. package/lib/typescript/commonjs/src/ui/components/details/DetailsViewer.d.ts.map +0 -1
  273. package/lib/typescript/commonjs/src/ui/components/headers/NetworkPanelHeader.d.ts +0 -2
  274. package/lib/typescript/commonjs/src/ui/components/headers/NetworkPanelHeader.d.ts.map +0 -1
  275. package/lib/typescript/module/src/ui/components/details/DetailsViewer.d.ts +0 -2
  276. package/lib/typescript/module/src/ui/components/details/DetailsViewer.d.ts.map +0 -1
  277. package/lib/typescript/module/src/ui/components/headers/NetworkPanelHeader.d.ts +0 -2
  278. package/lib/typescript/module/src/ui/components/headers/NetworkPanelHeader.d.ts.map +0 -1
  279. package/src/ui/components/details/DetailsViewer.tsx +0 -19
  280. package/src/ui/components/headers/NetworkPanelHeader.tsx +0 -69
@@ -0,0 +1,29 @@
1
+ import { createRef } from 'react';
2
+ import type { IndexedStackMethods } from '../ui/components/common/IndexedStack';
3
+
4
+ export enum DebuggerVisibility {
5
+ Hidden = -1,
6
+ Bubble = 0,
7
+ Panel = 1,
8
+ }
9
+
10
+ export enum PanelState {
11
+ Network = 0,
12
+ Console = 1,
13
+ NetworkDetail = 2,
14
+ ConsoleDetail = 3,
15
+ }
16
+
17
+ export enum HeaderState {
18
+ Debugger = 0,
19
+ Network = 1,
20
+ Console = 2,
21
+ }
22
+
23
+ const refs = {
24
+ debugger: createRef<IndexedStackMethods<DebuggerVisibility>>(),
25
+ panel: createRef<IndexedStackMethods<PanelState>>(),
26
+ header: createRef<IndexedStackMethods<HeaderState>>(),
27
+ };
28
+
29
+ export default refs;
package/src/core/utils.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  import { URL } from 'react-native-url-polyfill';
2
- import { NetworkType, type HttpRequest, type WebSocketRequest } from '../types';
2
+ import { NetworkType, type HttpRequest, type LogMessage, type WebSocketRequest } from '../types';
3
+ import colors from '../theme/colors';
4
+
5
+ export const getNetworkUtils = (data?: HttpRequest | WebSocketRequest) => {
6
+ if (!data || !data.url) return {};
3
7
 
4
- export const getNetworkUtils = (data: HttpRequest | WebSocketRequest) => {
5
8
  const isHttp = data?.type !== NetworkType.WS;
6
9
  const requestUrl = new URL(data.url);
7
10
 
8
11
  const overviewShown = !!data.url;
9
- const headersShown = isHttp && (!!data.requestHeaders || !!data.responseHeaders);
12
+ const httpHeadersShown = isHttp && (!!data.requestHeaders?.size || !!data.responseHeaders?.size);
13
+ const websocketHeadersShown = !isHttp && !!Object.keys(data.options?.headers ?? {}).length;
14
+ const headersShown = httpHeadersShown || websocketHeadersShown;
10
15
  const requestShown = isHttp && (!!requestUrl.search || !!data.body);
11
16
  const responseShown = isHttp && !!data.response;
12
17
  const messagesShown = !isHttp && !!data.messages;
@@ -22,6 +27,33 @@ export const getNetworkUtils = (data: HttpRequest | WebSocketRequest) => {
22
27
  };
23
28
  };
24
29
 
30
+ const hexToHexAlpha = (hex: string, opacity: number) =>
31
+ `${hex}${`${(Math.min(Math.max(opacity, 0), 1) * 255).toString(16)}0`.slice(0, 2)}`;
32
+
33
+ export const getConsoleTypeColor = (type: LogMessage['type']) => {
34
+ let color: string;
35
+ switch (type) {
36
+ case 'log':
37
+ color = colors.white;
38
+ break;
39
+ case 'info':
40
+ color = colors.blue;
41
+ break;
42
+ case 'warn':
43
+ case 'debug':
44
+ case 'trace':
45
+ color = colors.yellow;
46
+ break;
47
+ case 'error':
48
+ color = colors.red;
49
+ break;
50
+ default:
51
+ color = colors.white;
52
+ }
53
+
54
+ return hexToHexAlpha(color, 0.25);
55
+ };
56
+
25
57
  //#region metrics
26
58
  export const getVerticalSafeMargin = (screenHeight: number) => screenHeight / 8;
27
59
 
@@ -36,7 +68,7 @@ export const getHttpInterceptorId = () => {
36
68
  //#endregion
37
69
 
38
70
  //#region formatters
39
- export const limitChar = (value: any, limit = 5000) => {
71
+ const limitChar = (value: any, limit = 5000) => {
40
72
  const stringValue = typeof value === 'string' ? value : JSON.stringify(value ?? '');
41
73
 
42
74
  return stringValue.length > limit
@@ -53,24 +85,23 @@ export const keyValueToString = (
53
85
 
54
86
  export const formatRequestMethod = (method?: string) => method ?? 'GET';
55
87
 
56
- export const formatRequestDuration = (duration?: number) =>
57
- duration ? `${duration}ms` : 'pending';
88
+ export const formatRequestDuration = (startTime?: number, endTime?: number) => {
89
+ if (typeof startTime !== 'number' || typeof endTime !== 'number') return 'pending';
90
+ return `${endTime - startTime}ms`;
91
+ };
58
92
 
59
93
  export const formatRequestStatusCode = (statusCode?: number) => `${statusCode ?? 'pending'}`;
60
94
 
61
- export const formatLogMessage = (type: string, values: any[]) => {
62
- const message: string = values.reduce(
63
- (pre, cur, index) => pre + (!index ? '' : ', ') + limitChar(cur),
64
- '',
65
- );
66
-
67
- return `${type.toUpperCase()}: ${message}`;
95
+ export const formatLogMessage = (values: any[]) => {
96
+ return values.reduce((pre, cur, index) => pre + (!index ? '' : ', ') + limitChar(cur), '');
68
97
  };
69
98
 
70
99
  export const beautify = (data: any, beautified: boolean) => {
100
+ if (!data) return '';
101
+
71
102
  try {
72
103
  const res = typeof data === 'string' ? JSON.parse(data) : data;
73
- return beautified ? JSON.stringify(res, null, 2) : limitChar(res);
104
+ return beautified ? JSON.stringify(res, null, 4) : limitChar(res);
74
105
  } catch (error) {
75
106
  return limitChar(data);
76
107
  }
@@ -53,15 +53,10 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
53
53
  setNetworkRequests((draft: NetworkRequests<HttpRequest>) => {
54
54
  if (!draft.get(id)) return draft;
55
55
 
56
- const requestHeaderNewLine: Parameters<typeof keyValueToString>[2] = draft.get(id)!
57
- .requestHeadersString?.length
58
- ? 'leading'
59
- : null;
60
-
61
- const currentHeaderLine = keyValueToString(header, value, requestHeaderNewLine);
56
+ const currentHeaderLine = keyValueToString(header, value);
62
57
 
63
58
  const fetchRequestHeaderLineRegex = RegExp(
64
- keyValueToString(NETWORK_REQUEST_HEADER, NetworkType.Fetch, requestHeaderNewLine),
59
+ keyValueToString(NETWORK_REQUEST_HEADER, NetworkType.Fetch),
65
60
  'gi',
66
61
  );
67
62
 
@@ -72,20 +67,19 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
72
67
  if (isFetchInXHR) {
73
68
  draft.delete(id);
74
69
  } else {
75
- draft.get(id)!.requestHeadersString ??= '';
76
- draft.get(id)!.requestHeadersString += currentHeaderLine;
77
- draft.get(id)!.requestHeaders ??= {};
78
- draft.get(id)!.requestHeaders![header] = value;
70
+ draft.get(id)!.requestHeaders ??= new Map();
71
+ draft.get(id)!.requestHeaders!.set(header, value);
79
72
  }
80
73
  });
81
74
  };
82
75
 
83
- const sendCallback: HttpHandlers['send'] = (id, data) => {
76
+ const sendCallback: HttpHandlers['send'] = (id, startTime, data) => {
84
77
  if (!id) return;
85
78
 
86
79
  setNetworkRequests((draft: NetworkRequests<HttpRequest>) => {
87
80
  if (!draft.get(id)) return draft;
88
81
 
82
+ draft.get(id)!.startTime = startTime;
89
83
  draft.get(id)!.body = data;
90
84
  });
91
85
  };
@@ -111,7 +105,7 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
111
105
  id,
112
106
  status,
113
107
  timeout,
114
- duration,
108
+ endTime,
115
109
  response,
116
110
  responseURL,
117
111
  responseType,
@@ -123,7 +117,7 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
123
117
 
124
118
  draft.get(id)!.status = status;
125
119
  draft.get(id)!.timeout = timeout;
126
- draft.get(id)!.duration = duration;
120
+ draft.get(id)!.endTime = endTime;
127
121
  draft.get(id)!.response = response;
128
122
  if (responseURL) draft.get(id)!.url = responseURL;
129
123
  draft.get(id)!.responseType = responseType;
@@ -148,11 +142,18 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
148
142
  }, [setNetworkRequests]);
149
143
 
150
144
  const enableWebSocketInterception = useCallback(() => {
151
- const connectCallback: WebSocketHandlers['connect'] = (url, protocols, options, socketId) => {
145
+ const connectCallback: WebSocketHandlers['connect'] = (
146
+ startTime,
147
+ url,
148
+ protocols,
149
+ options,
150
+ socketId,
151
+ ) => {
152
152
  if (typeof socketId !== 'number') return;
153
153
 
154
154
  setNetworkRequests((draft: NetworkRequests<WebSocketRequest>) => {
155
155
  draft.set(`${socketId}`, {
156
+ startTime,
156
157
  url,
157
158
  type: NetworkType.WS,
158
159
  protocols,
@@ -168,11 +169,7 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
168
169
  if (!draft.get(`${socketId}`)) return draft;
169
170
 
170
171
  draft.get(`${socketId}`)!.messages ??= '';
171
- draft.get(`${socketId}`)!.messages += keyValueToString(
172
- 'SENT',
173
- data,
174
- draft.get(`${socketId}`)!.messages?.length ? 'leading' : null,
175
- );
172
+ draft.get(`${socketId}`)!.messages += keyValueToString('SENT', data);
176
173
  });
177
174
  };
178
175
 
@@ -187,13 +184,13 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
187
184
  });
188
185
  };
189
186
 
190
- const onOpenCallback: WebSocketHandlers['onOpen'] = (socketId, duration) => {
187
+ const onOpenCallback: WebSocketHandlers['onOpen'] = (socketId, endTime) => {
191
188
  if (typeof socketId !== 'number') return;
192
189
 
193
190
  setNetworkRequests((draft: NetworkRequests<WebSocketRequest>) => {
194
191
  if (!draft.get(`${socketId}`)) return draft;
195
192
 
196
- draft.get(`${socketId}`)!.duration = duration;
193
+ draft.get(`${socketId}`)!.endTime = endTime;
197
194
  });
198
195
  };
199
196
 
@@ -204,11 +201,7 @@ export default function useNetworkInterceptor({ autoEnabled }: NetworkIntercepto
204
201
  if (!draft.get(`${socketId}`)) return draft;
205
202
 
206
203
  draft.get(`${socketId}`)!.messages ??= '';
207
- draft.get(`${socketId}`)!.messages += keyValueToString(
208
- 'RECEIVED',
209
- message,
210
- draft.get(`${socketId}`)!.messages?.length ? 'leading' : null,
211
- );
204
+ draft.get(`${socketId}`)!.messages += keyValueToString('RECEIVED', message);
212
205
  });
213
206
  };
214
207
 
@@ -1,11 +1,5 @@
1
1
  import { NETWORK_REQUEST_HEADER } from '../core/constants';
2
- import {
3
- formatRequestMethod,
4
- frozen,
5
- getHttpInterceptorId,
6
- keyValueToString,
7
- singleton,
8
- } from '../core/utils';
2
+ import { formatRequestMethod, frozen, getHttpInterceptorId, singleton } from '../core/utils';
9
3
  import { NetworkType } from '../types';
10
4
  import HttpInterceptor from './HttpInterceptor';
11
5
 
@@ -77,13 +71,11 @@ export default class FetchInterceptor extends HttpInterceptor {
77
71
  //#endregion
78
72
 
79
73
  //#region send
80
- const startTime = Date.now();
81
- sendCallback?.(interceptionId, init?.body ?? null);
74
+ sendCallback?.(interceptionId, Date.now(), init?.body ?? null);
82
75
  //#endregion
83
76
 
84
77
  const response = await originalFetch.call(this, input, requestInit);
85
78
 
86
- const endTime = Date.now();
87
79
  const clonedResponse = response.clone();
88
80
  const clonedResponseHeaders = clonedResponse.headers;
89
81
 
@@ -94,28 +86,23 @@ export default class FetchInterceptor extends HttpInterceptor {
94
86
  const responseContentType = contentTypeString ? contentTypeString.split(';')[0] : undefined;
95
87
  const responseSize = contentLengthString ? parseInt(contentLengthString, 10) : undefined;
96
88
 
97
- let responseHeaders: string = '';
89
+ let responseHeaders: Map<string, string> = new Map();
98
90
 
99
- for (const [headerKey, headerValue] of clonedResponseHeaders.entries()) {
100
- responseHeaders += keyValueToString(
101
- headerKey,
102
- headerValue,
103
- responseHeaders.length ? 'leading' : null,
104
- );
105
- }
91
+ clonedResponseHeaders.forEach((headerValue: string, headerKey: string) => {
92
+ responseHeaders.set(headerKey, headerValue);
93
+ });
106
94
 
107
95
  headerReceivedCallback?.(interceptionId, responseContentType, responseSize, responseHeaders);
108
96
  //#endregion
109
97
 
110
98
  //#region response
111
99
  const responseBody: string | null = await clonedResponse.text().catch(() => null);
112
- const duration = endTime - startTime;
113
100
 
114
101
  responseCallback?.(
115
102
  interceptionId,
116
103
  clonedResponse.status,
117
104
  0,
118
- duration,
105
+ Date.now(),
119
106
  responseBody,
120
107
  clonedResponse.url,
121
108
  clonedResponse.type,
@@ -23,7 +23,6 @@ export default class WebSocketInterceptor extends NetworkInterceptor<WebSocketHa
23
23
 
24
24
  private eventEmitter: NativeEventEmitter | null = null;
25
25
  private subscriptions: EmitterSubscription[] = [];
26
- private readonly startTimes: Map<number, number> = new Map();
27
26
 
28
27
  private arrayBufferToString(data?: string) {
29
28
  try {
@@ -44,12 +43,7 @@ export default class WebSocketInterceptor extends NetworkInterceptor<WebSocketHa
44
43
 
45
44
  this.subscriptions = [
46
45
  this.eventEmitter.addListener('websocketOpen', ev => {
47
- const startTime = this.startTimes.get(ev.id);
48
- const endTime = Date.now();
49
- const duration = endTime - (startTime ?? 0);
50
- this.startTimes.delete(ev.id);
51
-
52
- this.handlers.onOpen?.(ev.id, duration);
46
+ this.handlers.onOpen?.(ev.id, Date.now());
53
47
  }),
54
48
  this.eventEmitter.addListener('websocketMessage', ev => {
55
49
  this.handlers.onMessage?.(
@@ -82,11 +76,8 @@ export default class WebSocketInterceptor extends NetworkInterceptor<WebSocketHa
82
76
 
83
77
  const { connectCallback, sendCallback, closeCallback } = this.getCallbacks();
84
78
 
85
- const startTimes = this.startTimes;
86
79
  NativeWebSocketModule.connect = function (...args) {
87
- connectCallback?.(...args);
88
-
89
- startTimes.set(args[3], Date.now());
80
+ connectCallback?.(Date.now(), ...args);
90
81
 
91
82
  originalWebSocketConnect.call(this, ...args);
92
83
  };
@@ -37,9 +37,7 @@ export default class XHRInterceptor extends HttpInterceptor {
37
37
  };
38
38
 
39
39
  XMLHttpRequest.prototype.send = function (data) {
40
- sendCallback?.(this._interceptionId, data);
41
-
42
- const startTime = Date.now();
40
+ sendCallback?.(this._interceptionId, Date.now(), data);
43
41
 
44
42
  this.addEventListener?.('readystatechange', () => {
45
43
  if (!isInterceptorEnabled()) return;
@@ -54,23 +52,30 @@ export default class XHRInterceptor extends HttpInterceptor {
54
52
 
55
53
  const responseSize = contentLengthString ? parseInt(contentLengthString, 10) : undefined;
56
54
 
55
+ const responseHeadersArray = this.getAllResponseHeaders().split('\n');
56
+ const responseHeaders = responseHeadersArray.reduce<Map<string, string>>(
57
+ (acc, header) => {
58
+ const [key, value] = header.split(': ');
59
+ if (key && value) acc.set(key, value);
60
+ return acc;
61
+ },
62
+ new Map(),
63
+ );
64
+
57
65
  headerReceivedCallback?.(
58
66
  this._interceptionId,
59
67
  responseContentType,
60
68
  responseSize,
61
- this.getAllResponseHeaders(),
69
+ responseHeaders,
62
70
  );
63
71
  }
64
72
 
65
73
  if (this.readyState === this.DONE) {
66
- const endTime = Date.now();
67
- const duration = endTime - startTime;
68
-
69
74
  responseCallback?.(
70
75
  this._interceptionId,
71
76
  this.status,
72
77
  this.timeout,
73
- duration,
78
+ Date.now(),
74
79
  this.response,
75
80
  this.responseURL,
76
81
  this.responseType,
@@ -1,9 +1,14 @@
1
1
  const colors = Object.freeze({
2
- black: '#000000',
3
- red: '#ef4444',
4
- green: '#22c55e',
5
- gray: '#888888',
6
- lightGray: '#AAAAAA',
2
+ black: '#0a0a0a',
3
+ red: '#ff6467',
4
+ green: '#05df72',
5
+ blue: '#51a2ff',
6
+ yellow: '#fcc800',
7
+ cyan: '#00d3f2',
8
+ purple: '#a684ff',
9
+ gray: '#a1a1a1',
10
+ lightGray: '#e5e5e5',
11
+ white: '#ffffff',
7
12
  });
8
13
 
9
14
  export default colors;
@@ -16,15 +16,14 @@ export type ID = string | undefined;
16
16
  export interface NetworkRequest {
17
17
  url: string;
18
18
  status?: number;
19
- duration?: number;
19
+ startTime?: number;
20
+ endTime?: number;
20
21
  }
21
22
 
22
23
  export type DetailTab = 'overview' | 'headers' | 'request' | 'response' | 'messages' | 'logMessage';
23
24
 
24
25
  export interface DebuggerState {
25
- visibility: 'hidden' | 'bubble' | 'panel';
26
26
  position: 'top' | 'bottom';
27
- selectedPanel: DebuggerPanel | null;
28
27
  detailsData:
29
28
  | {
30
29
  type: DebuggerPanel.Network;
package/src/types/http.ts CHANGED
@@ -3,12 +3,11 @@ import type { ID, NetworkRequest, NetworkType } from './common';
3
3
  export interface HttpRequest extends NetworkRequest {
4
4
  type: NetworkType.Fetch | NetworkType.XHR;
5
5
  method: string;
6
- requestHeaders?: Record<string, string>;
7
- requestHeadersString?: string;
6
+ requestHeaders?: Map<string, string>;
8
7
  body?: any;
9
8
  responseContentType?: string;
10
9
  responseSize?: number;
11
- responseHeaders?: string;
10
+ responseHeaders?: Map<string, string>;
12
11
  timeout?: number;
13
12
  response?: any;
14
13
  responseType?: string;
@@ -17,13 +16,13 @@ export interface HttpRequest extends NetworkRequest {
17
16
  export interface HttpHandlers {
18
17
  open: ((id: ID, type: HttpRequest['type'], method: string, url: string) => void) | null;
19
18
  requestHeader: ((id: ID, header: string, value: string) => void) | null;
20
- send: ((id: ID, data?: any) => void) | null;
19
+ send: ((id: ID, startTime: number, data?: any) => void) | null;
21
20
  headerReceived:
22
21
  | ((
23
22
  id: ID,
24
23
  responseContentType: string | undefined,
25
24
  responseSize: number | undefined,
26
- responseHeaders: string,
25
+ responseHeaders: HttpRequest['responseHeaders'],
27
26
  ) => void)
28
27
  | null;
29
28
  response:
@@ -31,7 +30,7 @@ export interface HttpHandlers {
31
30
  id: ID,
32
31
  status: number | undefined,
33
32
  timeout: number | undefined,
34
- duration: number,
33
+ endTime: number,
35
34
  response: any,
36
35
  responseURL: string | undefined,
37
36
  responseType: string | undefined,
@@ -16,6 +16,7 @@ export interface WebSocketRequest extends NetworkRequest {
16
16
  export interface WebSocketHandlers {
17
17
  connect:
18
18
  | ((
19
+ startTime: number,
19
20
  url: string,
20
21
  protocols?: WebSocketRequest['protocols'],
21
22
  options?: WebSocketRequest['options'],
@@ -24,7 +25,7 @@ export interface WebSocketHandlers {
24
25
  | null;
25
26
  send: ((data: string, socketId: number) => void) | null;
26
27
  close: ((code: number, reason: string, socketId: number) => void) | null;
27
- onOpen: ((socketId: number, duration: number) => void) | null;
28
+ onOpen: ((socketId: number, endTime: number) => void) | null;
28
29
  onMessage: ((socketId: number, message: any) => void) | null;
29
30
  onError: ((socketId: number, error: WebSocketRequest['serverError']) => void) | null;
30
31
  onClose: ((socketId: number, data: WebSocketRequest['serverClose']) => void) | null;
package/src/ui/Xenon.tsx CHANGED
@@ -1,15 +1,18 @@
1
1
  import { enableMapSet } from 'immer';
2
- import { createRef, memo, useImperativeHandle, useMemo, useRef } from 'react';
3
- import { Animated, Platform, StyleSheet, useWindowDimensions } from 'react-native';
2
+ import { createRef, memo, useImperativeHandle, useMemo, type ReactNode } from 'react';
3
+ import { Platform, StyleSheet, useWindowDimensions } from 'react-native';
4
4
  import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
5
+ import { FullWindowOverlay } from 'react-native-screens';
5
6
  import { useImmer } from 'use-immer';
6
7
  import MainContext from '../contexts/MainContext';
7
- import { getVerticalSafeMargin } from '../core/utils';
8
+ import refs, { DebuggerVisibility } from '../core/refs';
8
9
  import { useConsoleInterceptor, useNetworkInterceptor } from '../hooks';
9
10
  import colors from '../theme/colors';
10
- import { DebuggerPanel, type DebuggerState } from '../types';
11
- import { Bubble, ConsolePanel, DebuggerHeader, DetailsViewer, NetworkPanel } from './components';
12
- import { FullWindowOverlay } from 'react-native-screens';
11
+ import { type DebuggerState } from '../types';
12
+ import { Bubble } from './components';
13
+ import IndexedStack from './components/common/IndexedStack';
14
+ import Header from './components/headers/Header';
15
+ import Panel from './components/panels/Panel';
13
16
 
14
17
  namespace Xenon {
15
18
  interface Methods {
@@ -19,10 +22,12 @@ namespace Xenon {
19
22
  }
20
23
 
21
24
  interface Props {
25
+ disabled?: boolean;
22
26
  autoInspectNetworkEnabled?: boolean;
23
27
  autoInspectConsoleEnabled?: boolean;
24
28
  bubbleSize?: number;
25
29
  idleBubbleOpacity?: number;
30
+ children?: ReactNode;
26
31
  }
27
32
 
28
33
  enableMapSet();
@@ -32,10 +37,13 @@ namespace Xenon {
32
37
  container: {
33
38
  flex: 1,
34
39
  ...StyleSheet.absoluteFillObject,
40
+ pointerEvents: 'box-none',
35
41
  top: undefined,
36
42
  bottom: undefined,
37
- zIndex: 9999,
43
+ ...(Platform.OS === 'android' ? { zIndex: 9999 } : {}),
38
44
  backgroundColor: colors.lightGray,
45
+ borderBottomColor: colors.gray,
46
+ borderBottomWidth: StyleSheet.hairlineWidth,
39
47
  },
40
48
  safeArea: {
41
49
  flex: 1,
@@ -54,20 +62,12 @@ namespace Xenon {
54
62
  idleBubbleOpacity = 0.5,
55
63
  }: Props) => {
56
64
  const { width, height } = useWindowDimensions();
57
- const pan = useRef(new Animated.ValueXY({ x: 0, y: getVerticalSafeMargin(height) }));
58
65
 
59
66
  const [debuggerState, setDebuggerState] = useImmer<DebuggerState>({
60
- visibility: 'hidden',
61
67
  position: 'bottom',
62
- selectedPanel: DebuggerPanel.Network,
63
68
  detailsData: null,
64
69
  });
65
70
 
66
- const detailsShown = useMemo(
67
- () => !debuggerState.selectedPanel && !!debuggerState.detailsData,
68
- [debuggerState.detailsData, debuggerState.selectedPanel],
69
- );
70
-
71
71
  const containerStyle = useMemo(
72
72
  () => [
73
73
  styles.container,
@@ -81,73 +81,73 @@ namespace Xenon {
81
81
  });
82
82
 
83
83
  const consoleInterceptor = useConsoleInterceptor({
84
+ // Disable console log tracking in development to prevent infinite loops
85
+ // autoEnabled: __DEV__ ? false : autoInspectConsoleEnabled,
84
86
  autoEnabled: autoInspectConsoleEnabled,
85
87
  });
86
88
 
87
89
  useImperativeHandle(ref, () => {
88
- const changeVisibility = (condition: boolean, value: DebuggerState['visibility']) => {
90
+ const changeVisibility = (condition: boolean, value: DebuggerVisibility) => {
89
91
  if (!condition) return;
90
92
 
91
- setDebuggerState(draft => {
92
- draft.visibility = value;
93
- });
93
+ refs.debugger.current?.setCurrentIndex(value);
94
94
  };
95
95
 
96
96
  return {
97
97
  isVisible() {
98
- return debuggerState.visibility !== 'hidden';
98
+ return refs.debugger.current?.getCurrentIndex() !== DebuggerVisibility.Hidden;
99
99
  },
100
100
  show() {
101
- changeVisibility(!this.isVisible(), 'bubble');
101
+ changeVisibility(!this.isVisible(), DebuggerVisibility.Bubble);
102
102
  },
103
103
  hide() {
104
- changeVisibility(this.isVisible(), 'hidden');
104
+ changeVisibility(this.isVisible(), DebuggerVisibility.Hidden);
105
105
  },
106
106
  };
107
- }, [debuggerState.visibility, setDebuggerState]);
107
+ }, []);
108
108
 
109
109
  return (
110
110
  <MainContext.Provider
111
111
  value={{ debuggerState, setDebuggerState, networkInterceptor, consoleInterceptor }}
112
112
  >
113
- {debuggerState.visibility === 'bubble' && (
113
+ <IndexedStack defaultIndex={DebuggerVisibility.Hidden} id="debugger" ref={refs.debugger}>
114
114
  <Bubble
115
115
  bubbleSize={bubbleSize}
116
116
  idleBubbleOpacity={idleBubbleOpacity}
117
- pan={pan}
118
117
  screenWidth={width}
119
118
  screenHeight={height}
120
119
  />
121
- )}
122
120
 
123
- {debuggerState.visibility === 'panel' && (
124
121
  <SafeAreaProvider style={containerStyle}>
125
122
  <SafeAreaView style={styles.safeArea}>
126
- <DebuggerHeader />
127
- {debuggerState.selectedPanel === DebuggerPanel.Network && <NetworkPanel />}
128
- {debuggerState.selectedPanel === DebuggerPanel.Console && <ConsolePanel />}
129
- {detailsShown && <DetailsViewer />}
123
+ <Header />
124
+ <Panel />
130
125
  </SafeAreaView>
131
126
  </SafeAreaProvider>
132
- )}
127
+ </IndexedStack>
133
128
  </MainContext.Provider>
134
129
  );
135
130
  },
136
131
  );
137
132
 
138
- export function Component(props: Props) {
139
- if (Platform.OS === 'ios') {
140
- return (
141
- <FullWindowOverlay>
133
+ export function Wrapper({ disabled = false, children, ...props }: Props) {
134
+ if (disabled) return children;
135
+
136
+ return (
137
+ <>
138
+ {children}
139
+ {Platform.OS === 'ios' ? (
140
+ <FullWindowOverlay>
141
+ <Debugger {...props} />
142
+ </FullWindowOverlay>
143
+ ) : (
142
144
  <Debugger {...props} />
143
- </FullWindowOverlay>
144
- );
145
- }
146
-
147
- return <Debugger {...props} />;
145
+ )}
146
+ </>
147
+ );
148
148
  }
149
149
 
150
- Component.displayName = 'Xenon';
150
+ Wrapper.displayName = 'Xenon';
151
151
  }
152
152
 
153
153
  export default Xenon;