react-native-inapp-inspector 1.1.18 → 1.1.19

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 (291) hide show
  1. package/dist/commonjs/constants/version.d.ts +1 -1
  2. package/dist/commonjs/constants/version.js +1 -1
  3. package/dist/esm/constants/version.d.ts +1 -1
  4. package/dist/esm/constants/version.js +1 -1
  5. package/package.json +2 -4
  6. package/assets/banner_dark.svg +0 -186
  7. package/assets/banner_light.svg +0 -186
  8. package/assets/icon_circle.svg +0 -148
  9. package/assets/icon_square.svg +0 -148
  10. package/assets/social_preview.png +0 -0
  11. package/assets/walkthrough.gif +0 -0
  12. package/dist/commonjs/assets/svgAssets.d.ts +0 -3
  13. package/dist/commonjs/assets/svgAssets.js +0 -17
  14. package/dist/commonjs/components/AnalyticsTabView.d.ts +0 -15
  15. package/dist/commonjs/components/AnalyticsTabView.js +0 -157
  16. package/dist/commonjs/components/ApiDetailView.d.ts +0 -22
  17. package/dist/commonjs/components/ApiDetailView.js +0 -304
  18. package/dist/commonjs/components/ApisTabView.d.ts +0 -33
  19. package/dist/commonjs/components/ApisTabView.js +0 -235
  20. package/dist/commonjs/components/ConsoleLogDetailView.d.ts +0 -9
  21. package/dist/commonjs/components/ConsoleLogDetailView.js +0 -278
  22. package/dist/commonjs/components/ConsoleLogsTabView.d.ts +0 -24
  23. package/dist/commonjs/components/ConsoleLogsTabView.js +0 -354
  24. package/dist/commonjs/components/FloatingBubble.d.ts +0 -14
  25. package/dist/commonjs/components/FloatingBubble.js +0 -75
  26. package/dist/commonjs/components/Inspector/InsightsDashboard.d.ts +0 -3
  27. package/dist/commonjs/components/Inspector/InsightsDashboard.js +0 -619
  28. package/dist/commonjs/components/Inspector/WebViewTab.d.ts +0 -3
  29. package/dist/commonjs/components/Inspector/WebViewTab.js +0 -757
  30. package/dist/commonjs/components/InspectorHeader.d.ts +0 -19
  31. package/dist/commonjs/components/InspectorHeader.js +0 -329
  32. package/dist/commonjs/components/InspectorTabBar.d.ts +0 -16
  33. package/dist/commonjs/components/InspectorTabBar.js +0 -90
  34. package/dist/commonjs/components/NavigationTracker.d.ts +0 -7
  35. package/dist/commonjs/components/NavigationTracker.js +0 -76
  36. package/dist/commonjs/components/ReduxTabView.d.ts +0 -9
  37. package/dist/commonjs/components/ReduxTabView.js +0 -56
  38. package/dist/commonjs/components/ReduxTreeView.d.ts +0 -16
  39. package/dist/commonjs/components/ReduxTreeView.js +0 -1257
  40. package/dist/commonjs/components/SettingsView.d.ts +0 -13
  41. package/dist/commonjs/components/SettingsView.js +0 -328
  42. package/dist/commonjs/customHooks/webViewLogger.d.ts +0 -24
  43. package/dist/commonjs/customHooks/webViewLogger.js +0 -452
  44. package/dist/commonjs/enums/index.d.ts +0 -39
  45. package/dist/commonjs/enums/index.js +0 -50
  46. package/dist/commonjs/i18n/en.json +0 -144
  47. package/dist/esm/assets/svgAssets.d.ts +0 -3
  48. package/dist/esm/assets/svgAssets.js +0 -14
  49. package/dist/esm/components/AnalyticsTabView.d.ts +0 -15
  50. package/dist/esm/components/AnalyticsTabView.js +0 -151
  51. package/dist/esm/components/ApiDetailView.d.ts +0 -22
  52. package/dist/esm/components/ApiDetailView.js +0 -264
  53. package/dist/esm/components/ApisTabView.d.ts +0 -33
  54. package/dist/esm/components/ApisTabView.js +0 -196
  55. package/dist/esm/components/ConsoleLogDetailView.d.ts +0 -9
  56. package/dist/esm/components/ConsoleLogDetailView.js +0 -271
  57. package/dist/esm/components/ConsoleLogsTabView.d.ts +0 -24
  58. package/dist/esm/components/ConsoleLogsTabView.js +0 -348
  59. package/dist/esm/components/FloatingBubble.d.ts +0 -14
  60. package/dist/esm/components/FloatingBubble.js +0 -68
  61. package/dist/esm/components/Inspector/InsightsDashboard.d.ts +0 -3
  62. package/dist/esm/components/Inspector/InsightsDashboard.js +0 -614
  63. package/dist/esm/components/Inspector/WebViewTab.d.ts +0 -3
  64. package/dist/esm/components/Inspector/WebViewTab.js +0 -752
  65. package/dist/esm/components/InspectorHeader.d.ts +0 -19
  66. package/dist/esm/components/InspectorHeader.js +0 -323
  67. package/dist/esm/components/InspectorTabBar.d.ts +0 -16
  68. package/dist/esm/components/InspectorTabBar.js +0 -84
  69. package/dist/esm/components/NavigationTracker.d.ts +0 -7
  70. package/dist/esm/components/NavigationTracker.js +0 -39
  71. package/dist/esm/components/ReduxTabView.d.ts +0 -9
  72. package/dist/esm/components/ReduxTabView.js +0 -50
  73. package/dist/esm/components/ReduxTreeView.d.ts +0 -16
  74. package/dist/esm/components/ReduxTreeView.js +0 -1218
  75. package/dist/esm/components/SettingsView.d.ts +0 -13
  76. package/dist/esm/components/SettingsView.js +0 -321
  77. package/dist/esm/customHooks/webViewLogger.d.ts +0 -24
  78. package/dist/esm/customHooks/webViewLogger.js +0 -405
  79. package/dist/esm/enums/index.d.ts +0 -39
  80. package/dist/esm/enums/index.js +0 -47
  81. package/dist/esm/i18n/en.json +0 -144
  82. package/example/.bundle/config +0 -2
  83. package/example/.eslintrc.js +0 -4
  84. package/example/.prettierrc.js +0 -5
  85. package/example/.watchmanconfig +0 -1
  86. package/example/App.tsx +0 -879
  87. package/example/Gemfile +0 -17
  88. package/example/README.md +0 -53
  89. package/example/__tests__/App.test.tsx +0 -13
  90. package/example/android/app/build.gradle +0 -147
  91. package/example/android/app/debug.keystore +0 -0
  92. package/example/android/app/proguard-rules.pro +0 -10
  93. package/example/android/app/src/main/AndroidManifest.xml +0 -27
  94. package/example/android/app/src/main/java/com/example/MainActivity.kt +0 -22
  95. package/example/android/app/src/main/java/com/example/MainApplication.kt +0 -52
  96. package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -37
  97. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  98. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  99. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  100. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  101. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  102. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  103. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  104. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  105. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  106. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  107. package/example/android/app/src/main/res/values/strings.xml +0 -3
  108. package/example/android/app/src/main/res/values/styles.xml +0 -9
  109. package/example/android/build.gradle +0 -48
  110. package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  111. package/example/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  112. package/example/android/gradle.properties +0 -45
  113. package/example/android/gradlew +0 -248
  114. package/example/android/gradlew.bat +0 -98
  115. package/example/android/settings.gradle +0 -25
  116. package/example/app.json +0 -4
  117. package/example/assets/app_icon.png +0 -0
  118. package/example/babel.config.js +0 -3
  119. package/example/guidance/Video-WalkThrough.mp4 +0 -0
  120. package/example/index.js +0 -9
  121. package/example/ios/.xcode.env +0 -11
  122. package/example/ios/Podfile +0 -34
  123. package/example/ios/Podfile.lock +0 -2303
  124. package/example/ios/example/AppDelegate.swift +0 -48
  125. package/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json +0 -62
  126. package/example/ios/example/Images.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
  127. package/example/ios/example/Images.xcassets/Contents.json +0 -6
  128. package/example/ios/example/Info.plist +0 -60
  129. package/example/ios/example/LaunchScreen.storyboard +0 -47
  130. package/example/ios/example/PrivacyInfo.xcprivacy +0 -37
  131. package/example/ios/example.xcodeproj/project.pbxproj +0 -498
  132. package/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme +0 -88
  133. package/example/ios/example.xcworkspace/contents.xcworkspacedata +0 -10
  134. package/example/jest.config.js +0 -3
  135. package/example/metro.config.js +0 -45
  136. package/example/package-lock.json +0 -13508
  137. package/example/package.json +0 -54
  138. package/example/polyfill.js +0 -13
  139. package/example/tsconfig.json +0 -8
  140. package/fonts/Inter/Inter.ttc +0 -0
  141. package/fonts/Inter/InterVariable-Italic.ttf +0 -0
  142. package/fonts/Inter/InterVariable.ttf +0 -0
  143. package/fonts/Inter/LICENSE.txt +0 -92
  144. package/fonts/Inter/extras/otf/Inter-Black.otf +0 -0
  145. package/fonts/Inter/extras/otf/Inter-BlackItalic.otf +0 -0
  146. package/fonts/Inter/extras/otf/Inter-Bold.otf +0 -0
  147. package/fonts/Inter/extras/otf/Inter-BoldItalic.otf +0 -0
  148. package/fonts/Inter/extras/otf/Inter-ExtraBold.otf +0 -0
  149. package/fonts/Inter/extras/otf/Inter-ExtraBoldItalic.otf +0 -0
  150. package/fonts/Inter/extras/otf/Inter-ExtraLight.otf +0 -0
  151. package/fonts/Inter/extras/otf/Inter-ExtraLightItalic.otf +0 -0
  152. package/fonts/Inter/extras/otf/Inter-Italic.otf +0 -0
  153. package/fonts/Inter/extras/otf/Inter-Light.otf +0 -0
  154. package/fonts/Inter/extras/otf/Inter-LightItalic.otf +0 -0
  155. package/fonts/Inter/extras/otf/Inter-Medium.otf +0 -0
  156. package/fonts/Inter/extras/otf/Inter-MediumItalic.otf +0 -0
  157. package/fonts/Inter/extras/otf/Inter-Regular.otf +0 -0
  158. package/fonts/Inter/extras/otf/Inter-SemiBold.otf +0 -0
  159. package/fonts/Inter/extras/otf/Inter-SemiBoldItalic.otf +0 -0
  160. package/fonts/Inter/extras/otf/Inter-Thin.otf +0 -0
  161. package/fonts/Inter/extras/otf/Inter-ThinItalic.otf +0 -0
  162. package/fonts/Inter/extras/otf/InterDisplay-Black.otf +0 -0
  163. package/fonts/Inter/extras/otf/InterDisplay-BlackItalic.otf +0 -0
  164. package/fonts/Inter/extras/otf/InterDisplay-Bold.otf +0 -0
  165. package/fonts/Inter/extras/otf/InterDisplay-BoldItalic.otf +0 -0
  166. package/fonts/Inter/extras/otf/InterDisplay-ExtraBold.otf +0 -0
  167. package/fonts/Inter/extras/otf/InterDisplay-ExtraBoldItalic.otf +0 -0
  168. package/fonts/Inter/extras/otf/InterDisplay-ExtraLight.otf +0 -0
  169. package/fonts/Inter/extras/otf/InterDisplay-ExtraLightItalic.otf +0 -0
  170. package/fonts/Inter/extras/otf/InterDisplay-Italic.otf +0 -0
  171. package/fonts/Inter/extras/otf/InterDisplay-Light.otf +0 -0
  172. package/fonts/Inter/extras/otf/InterDisplay-LightItalic.otf +0 -0
  173. package/fonts/Inter/extras/otf/InterDisplay-Medium.otf +0 -0
  174. package/fonts/Inter/extras/otf/InterDisplay-MediumItalic.otf +0 -0
  175. package/fonts/Inter/extras/otf/InterDisplay-Regular.otf +0 -0
  176. package/fonts/Inter/extras/otf/InterDisplay-SemiBold.otf +0 -0
  177. package/fonts/Inter/extras/otf/InterDisplay-SemiBoldItalic.otf +0 -0
  178. package/fonts/Inter/extras/otf/InterDisplay-Thin.otf +0 -0
  179. package/fonts/Inter/extras/otf/InterDisplay-ThinItalic.otf +0 -0
  180. package/fonts/Inter/extras/ttf/Inter-Black.ttf +0 -0
  181. package/fonts/Inter/extras/ttf/Inter-BlackItalic.ttf +0 -0
  182. package/fonts/Inter/extras/ttf/Inter-Bold.ttf +0 -0
  183. package/fonts/Inter/extras/ttf/Inter-BoldItalic.ttf +0 -0
  184. package/fonts/Inter/extras/ttf/Inter-ExtraBold.ttf +0 -0
  185. package/fonts/Inter/extras/ttf/Inter-ExtraBoldItalic.ttf +0 -0
  186. package/fonts/Inter/extras/ttf/Inter-ExtraLight.ttf +0 -0
  187. package/fonts/Inter/extras/ttf/Inter-ExtraLightItalic.ttf +0 -0
  188. package/fonts/Inter/extras/ttf/Inter-Italic.ttf +0 -0
  189. package/fonts/Inter/extras/ttf/Inter-Light.ttf +0 -0
  190. package/fonts/Inter/extras/ttf/Inter-LightItalic.ttf +0 -0
  191. package/fonts/Inter/extras/ttf/Inter-Medium.ttf +0 -0
  192. package/fonts/Inter/extras/ttf/Inter-MediumItalic.ttf +0 -0
  193. package/fonts/Inter/extras/ttf/Inter-Regular.ttf +0 -0
  194. package/fonts/Inter/extras/ttf/Inter-SemiBold.ttf +0 -0
  195. package/fonts/Inter/extras/ttf/Inter-SemiBoldItalic.ttf +0 -0
  196. package/fonts/Inter/extras/ttf/Inter-Thin.ttf +0 -0
  197. package/fonts/Inter/extras/ttf/Inter-ThinItalic.ttf +0 -0
  198. package/fonts/Inter/extras/ttf/InterDisplay-Black.ttf +0 -0
  199. package/fonts/Inter/extras/ttf/InterDisplay-BlackItalic.ttf +0 -0
  200. package/fonts/Inter/extras/ttf/InterDisplay-Bold.ttf +0 -0
  201. package/fonts/Inter/extras/ttf/InterDisplay-BoldItalic.ttf +0 -0
  202. package/fonts/Inter/extras/ttf/InterDisplay-ExtraBold.ttf +0 -0
  203. package/fonts/Inter/extras/ttf/InterDisplay-ExtraBoldItalic.ttf +0 -0
  204. package/fonts/Inter/extras/ttf/InterDisplay-ExtraLight.ttf +0 -0
  205. package/fonts/Inter/extras/ttf/InterDisplay-ExtraLightItalic.ttf +0 -0
  206. package/fonts/Inter/extras/ttf/InterDisplay-Italic.ttf +0 -0
  207. package/fonts/Inter/extras/ttf/InterDisplay-Light.ttf +0 -0
  208. package/fonts/Inter/extras/ttf/InterDisplay-LightItalic.ttf +0 -0
  209. package/fonts/Inter/extras/ttf/InterDisplay-Medium.ttf +0 -0
  210. package/fonts/Inter/extras/ttf/InterDisplay-MediumItalic.ttf +0 -0
  211. package/fonts/Inter/extras/ttf/InterDisplay-Regular.ttf +0 -0
  212. package/fonts/Inter/extras/ttf/InterDisplay-SemiBold.ttf +0 -0
  213. package/fonts/Inter/extras/ttf/InterDisplay-SemiBoldItalic.ttf +0 -0
  214. package/fonts/Inter/extras/ttf/InterDisplay-Thin.ttf +0 -0
  215. package/fonts/Inter/extras/ttf/InterDisplay-ThinItalic.ttf +0 -0
  216. package/fonts/Inter/extras/woff-hinted/Inter-Black.woff2 +0 -0
  217. package/fonts/Inter/extras/woff-hinted/Inter-BlackItalic.woff2 +0 -0
  218. package/fonts/Inter/extras/woff-hinted/Inter-Bold.woff2 +0 -0
  219. package/fonts/Inter/extras/woff-hinted/Inter-BoldItalic.woff2 +0 -0
  220. package/fonts/Inter/extras/woff-hinted/Inter-ExtraBold.woff2 +0 -0
  221. package/fonts/Inter/extras/woff-hinted/Inter-ExtraBoldItalic.woff2 +0 -0
  222. package/fonts/Inter/extras/woff-hinted/Inter-ExtraLight.woff2 +0 -0
  223. package/fonts/Inter/extras/woff-hinted/Inter-ExtraLightItalic.woff2 +0 -0
  224. package/fonts/Inter/extras/woff-hinted/Inter-Italic.woff2 +0 -0
  225. package/fonts/Inter/extras/woff-hinted/Inter-Light.woff2 +0 -0
  226. package/fonts/Inter/extras/woff-hinted/Inter-LightItalic.woff2 +0 -0
  227. package/fonts/Inter/extras/woff-hinted/Inter-Medium.woff2 +0 -0
  228. package/fonts/Inter/extras/woff-hinted/Inter-MediumItalic.woff2 +0 -0
  229. package/fonts/Inter/extras/woff-hinted/Inter-Regular.woff2 +0 -0
  230. package/fonts/Inter/extras/woff-hinted/Inter-SemiBold.woff2 +0 -0
  231. package/fonts/Inter/extras/woff-hinted/Inter-SemiBoldItalic.woff2 +0 -0
  232. package/fonts/Inter/extras/woff-hinted/Inter-Thin.woff2 +0 -0
  233. package/fonts/Inter/extras/woff-hinted/Inter-ThinItalic.woff2 +0 -0
  234. package/fonts/Inter/extras/woff-hinted/InterDisplay-Black.woff2 +0 -0
  235. package/fonts/Inter/extras/woff-hinted/InterDisplay-BlackItalic.woff2 +0 -0
  236. package/fonts/Inter/extras/woff-hinted/InterDisplay-Bold.woff2 +0 -0
  237. package/fonts/Inter/extras/woff-hinted/InterDisplay-BoldItalic.woff2 +0 -0
  238. package/fonts/Inter/extras/woff-hinted/InterDisplay-ExtraBold.woff2 +0 -0
  239. package/fonts/Inter/extras/woff-hinted/InterDisplay-ExtraBoldItalic.woff2 +0 -0
  240. package/fonts/Inter/extras/woff-hinted/InterDisplay-ExtraLight.woff2 +0 -0
  241. package/fonts/Inter/extras/woff-hinted/InterDisplay-ExtraLightItalic.woff2 +0 -0
  242. package/fonts/Inter/extras/woff-hinted/InterDisplay-Italic.woff2 +0 -0
  243. package/fonts/Inter/extras/woff-hinted/InterDisplay-Light.woff2 +0 -0
  244. package/fonts/Inter/extras/woff-hinted/InterDisplay-LightItalic.woff2 +0 -0
  245. package/fonts/Inter/extras/woff-hinted/InterDisplay-Medium.woff2 +0 -0
  246. package/fonts/Inter/extras/woff-hinted/InterDisplay-MediumItalic.woff2 +0 -0
  247. package/fonts/Inter/extras/woff-hinted/InterDisplay-Regular.woff2 +0 -0
  248. package/fonts/Inter/extras/woff-hinted/InterDisplay-SemiBold.woff2 +0 -0
  249. package/fonts/Inter/extras/woff-hinted/InterDisplay-SemiBoldItalic.woff2 +0 -0
  250. package/fonts/Inter/extras/woff-hinted/InterDisplay-Thin.woff2 +0 -0
  251. package/fonts/Inter/extras/woff-hinted/InterDisplay-ThinItalic.woff2 +0 -0
  252. package/fonts/Inter/help.txt +0 -165
  253. package/fonts/Inter/web/Inter-Black.woff2 +0 -0
  254. package/fonts/Inter/web/Inter-BlackItalic.woff2 +0 -0
  255. package/fonts/Inter/web/Inter-Bold.woff2 +0 -0
  256. package/fonts/Inter/web/Inter-BoldItalic.woff2 +0 -0
  257. package/fonts/Inter/web/Inter-ExtraBold.woff2 +0 -0
  258. package/fonts/Inter/web/Inter-ExtraBoldItalic.woff2 +0 -0
  259. package/fonts/Inter/web/Inter-ExtraLight.woff2 +0 -0
  260. package/fonts/Inter/web/Inter-ExtraLightItalic.woff2 +0 -0
  261. package/fonts/Inter/web/Inter-Italic.woff2 +0 -0
  262. package/fonts/Inter/web/Inter-Light.woff2 +0 -0
  263. package/fonts/Inter/web/Inter-LightItalic.woff2 +0 -0
  264. package/fonts/Inter/web/Inter-Medium.woff2 +0 -0
  265. package/fonts/Inter/web/Inter-MediumItalic.woff2 +0 -0
  266. package/fonts/Inter/web/Inter-Regular.woff2 +0 -0
  267. package/fonts/Inter/web/Inter-SemiBold.woff2 +0 -0
  268. package/fonts/Inter/web/Inter-SemiBoldItalic.woff2 +0 -0
  269. package/fonts/Inter/web/Inter-Thin.woff2 +0 -0
  270. package/fonts/Inter/web/Inter-ThinItalic.woff2 +0 -0
  271. package/fonts/Inter/web/InterDisplay-Black.woff2 +0 -0
  272. package/fonts/Inter/web/InterDisplay-BlackItalic.woff2 +0 -0
  273. package/fonts/Inter/web/InterDisplay-Bold.woff2 +0 -0
  274. package/fonts/Inter/web/InterDisplay-BoldItalic.woff2 +0 -0
  275. package/fonts/Inter/web/InterDisplay-ExtraBold.woff2 +0 -0
  276. package/fonts/Inter/web/InterDisplay-ExtraBoldItalic.woff2 +0 -0
  277. package/fonts/Inter/web/InterDisplay-ExtraLight.woff2 +0 -0
  278. package/fonts/Inter/web/InterDisplay-ExtraLightItalic.woff2 +0 -0
  279. package/fonts/Inter/web/InterDisplay-Italic.woff2 +0 -0
  280. package/fonts/Inter/web/InterDisplay-Light.woff2 +0 -0
  281. package/fonts/Inter/web/InterDisplay-LightItalic.woff2 +0 -0
  282. package/fonts/Inter/web/InterDisplay-Medium.woff2 +0 -0
  283. package/fonts/Inter/web/InterDisplay-MediumItalic.woff2 +0 -0
  284. package/fonts/Inter/web/InterDisplay-Regular.woff2 +0 -0
  285. package/fonts/Inter/web/InterDisplay-SemiBold.woff2 +0 -0
  286. package/fonts/Inter/web/InterDisplay-SemiBoldItalic.woff2 +0 -0
  287. package/fonts/Inter/web/InterDisplay-Thin.woff2 +0 -0
  288. package/fonts/Inter/web/InterDisplay-ThinItalic.woff2 +0 -0
  289. package/fonts/Inter/web/InterVariable-Italic.woff2 +0 -0
  290. package/fonts/Inter/web/InterVariable.woff2 +0 -0
  291. package/fonts/Inter/web/inter.css +0 -148
@@ -1,1257 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.ReduxTreeView = void 0;
40
- const react_1 = __importStar(require("react"));
41
- const react_native_1 = require("react-native");
42
- const AppColors_1 = require("../styles/AppColors");
43
- const AppFonts_1 = require("../styles/AppFonts");
44
- const NetworkIcons_1 = require("./NetworkIcons");
45
- const JsonViewer_1 = __importDefault(require("./JsonViewer"));
46
- const DiffViewer_1 = __importDefault(require("./DiffViewer"));
47
- const TouchableScale_1 = __importDefault(require("./TouchableScale"));
48
- const SegmentedTabs_1 = __importDefault(require("./SegmentedTabs"));
49
- const CopyButton_1 = __importDefault(require("./CopyButton"));
50
- const helpers_1 = require("../helpers");
51
- const settingsStore_1 = require("../helpers/settingsStore");
52
- // Enable LayoutAnimation for Android
53
- if (react_native_1.Platform.OS === 'android') {
54
- react_native_1.UIManager.setLayoutAnimationEnabledExperimental?.(true);
55
- }
56
- const animateLayout = () => {
57
- react_native_1.LayoutAnimation.configureNext(react_native_1.LayoutAnimation.Presets.easeInEaseOut);
58
- };
59
- // Chevron pointing left (for back buttons)
60
- const BackChevronIcon = ({ color = AppColors_1.AppColors.purple, size = 12 }) => (<react_native_1.View style={{ transform: [{ rotate: '180deg' }], marginRight: 4 }}>
61
- <NetworkIcons_1.ChevronIcon color={color} size={size}/>
62
- </react_native_1.View>);
63
- // Chevron pointing right (for list items)
64
- const ForwardChevronIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 12 }) => (<react_native_1.View style={{ transform: [{ rotate: '0deg' }], marginLeft: 'auto' }}>
65
- <NetworkIcons_1.ChevronIcon color={color} size={size}/>
66
- </react_native_1.View>);
67
- // Helper: check if a value recursively contains a string term
68
- const valueContainsTerm = (val, term) => {
69
- if (!term)
70
- return true;
71
- const t = term.toLowerCase();
72
- if (val === null || val === undefined)
73
- return false;
74
- if (typeof val !== 'object') {
75
- return String(val).toLowerCase().includes(t);
76
- }
77
- if (Array.isArray(val)) {
78
- return val.some(item => valueContainsTerm(item, term));
79
- }
80
- return Object.keys(val).some(key => key.toLowerCase().includes(t) || valueContainsTerm(val[key], term));
81
- };
82
- exports.ReduxTreeView = react_1.default.memo(({ state, actionHistory = [], lastActionMap = {}, search = '', onSearchChange, autoRefresh = true, onToggleAutoRefresh, onClearHistory, onDetailOpenChange, selectedSliceKey = null, onSelectSliceKey, selectedActionId = null, onSelectActionId, }) => {
83
- const [activeTab, setActiveTab] = (0, react_1.useState)('state');
84
- const [actionSubTab, setActionSubTab] = (0, react_1.useState)('payload');
85
- // local fallbacks if props are not provided
86
- const [localSliceKey, setLocalSliceKey] = (0, react_1.useState)(null);
87
- const [localActionId, setLocalActionId] = (0, react_1.useState)(null);
88
- const activeSliceKey = onSelectSliceKey ? selectedSliceKey : localSliceKey;
89
- const activeActionId = onSelectActionId ? selectedActionId : localActionId;
90
- const setActiveSliceKey = (key) => {
91
- if (onSelectSliceKey)
92
- onSelectSliceKey(key);
93
- else
94
- setLocalSliceKey(key);
95
- };
96
- const setActiveActionId = (id) => {
97
- if (onSelectActionId)
98
- onSelectActionId(id);
99
- else
100
- setLocalActionId(id);
101
- };
102
- // Expand / collapse all states for detail views
103
- const [sliceForceOpen, setSliceForceOpen] = (0, react_1.useState)(undefined);
104
- const [actionForceOpen, setActionForceOpen] = (0, react_1.useState)(undefined);
105
- const [searchModeType, setSearchModeType] = (0, react_1.useState)(true);
106
- const [searchModeData, setSearchModeData] = (0, react_1.useState)(true);
107
- // Sorting directions
108
- const [stateSortAsc, setStateSortAsc] = (0, react_1.useState)(true);
109
- const [actionSortAsc, setActionSortAsc] = (0, react_1.useState)(false);
110
- // Persistence-related states for State Slice details
111
- const [sliceDetailTab, setSliceDetailTab] = (0, react_1.useState)('live');
112
- const [isPersisted, setIsPersisted] = (0, react_1.useState)(false);
113
- const [persistedData, setPersistedData] = (0, react_1.useState)(null);
114
- (0, react_1.useEffect)(() => {
115
- if (activeSliceKey === null) {
116
- setIsPersisted(false);
117
- setPersistedData(null);
118
- setSliceDetailTab('live');
119
- return;
120
- }
121
- async function checkPersistence() {
122
- try {
123
- const storage = (0, settingsStore_1.getCustomStorage)();
124
- if (!storage) {
125
- setIsPersisted(false);
126
- setPersistedData(null);
127
- return;
128
- }
129
- // Check direct key: persist:sliceKey
130
- let raw = await storage.getItem(`persist:${activeSliceKey}`);
131
- if (raw) {
132
- try {
133
- setPersistedData(JSON.parse(raw));
134
- }
135
- catch {
136
- setPersistedData(raw);
137
- }
138
- setIsPersisted(true);
139
- return;
140
- }
141
- // Check root key: persist:root
142
- let rootRaw = await storage.getItem('persist:root');
143
- if (rootRaw) {
144
- const parsedRoot = JSON.parse(rootRaw);
145
- if (parsedRoot && parsedRoot[activeSliceKey] !== undefined) {
146
- const nested = parsedRoot[activeSliceKey];
147
- try {
148
- setPersistedData(typeof nested === 'string' ? JSON.parse(nested) : nested);
149
- }
150
- catch {
151
- setPersistedData(nested);
152
- }
153
- setIsPersisted(true);
154
- return;
155
- }
156
- }
157
- }
158
- catch (e) {
159
- console.log('Error checking Redux persistence:', e);
160
- }
161
- setIsPersisted(false);
162
- setPersistedData(null);
163
- }
164
- checkPersistence();
165
- }, [activeSliceKey]);
166
- const handleClearPersistence = () => {
167
- react_native_1.Alert.alert('Clear Persisted State', `Are you sure you want to delete the persisted storage item for the slice "${activeSliceKey}"? This will clear the value from device storage, but the current active in-memory Redux state will remain unchanged until the next app reload.`, [
168
- { text: 'Cancel', style: 'cancel' },
169
- {
170
- text: 'Delete',
171
- style: 'destructive',
172
- onPress: async () => {
173
- try {
174
- const storage = (0, settingsStore_1.getCustomStorage)();
175
- if (!storage)
176
- return;
177
- // Delete direct key
178
- if (typeof storage.removeItem === 'function') {
179
- await storage.removeItem(`persist:${activeSliceKey}`);
180
- }
181
- else {
182
- await storage.setItem(`persist:${activeSliceKey}`, '');
183
- }
184
- // Delete from root key
185
- let rootRaw = await storage.getItem('persist:root');
186
- if (rootRaw) {
187
- const parsed = JSON.parse(rootRaw);
188
- if (parsed && parsed[activeSliceKey] !== undefined) {
189
- delete parsed[activeSliceKey];
190
- await storage.setItem('persist:root', JSON.stringify(parsed));
191
- }
192
- }
193
- setIsPersisted(false);
194
- setPersistedData(null);
195
- setSliceDetailTab('live');
196
- if (react_native_1.Platform.OS === 'android') {
197
- react_native_1.ToastAndroid.show('Persisted state cleared', react_native_1.ToastAndroid.SHORT);
198
- }
199
- else {
200
- react_native_1.Alert.alert('Cleared', 'Persisted state has been cleared from device storage.');
201
- }
202
- }
203
- catch (err) {
204
- react_native_1.Alert.alert('Error', 'Failed to clear persisted state.');
205
- }
206
- }
207
- }
208
- ]);
209
- };
210
- const isSearching = search.trim().length > 0;
211
- (0, react_1.useEffect)(() => {
212
- onDetailOpenChange?.(activeSliceKey !== null || activeActionId !== null);
213
- return () => {
214
- onDetailOpenChange?.(false);
215
- };
216
- }, [activeSliceKey, activeActionId, onDetailOpenChange]);
217
- // Reset details view when tab changes
218
- const switchTab = (tab) => {
219
- animateLayout();
220
- setActiveTab(tab);
221
- setActiveSliceKey(null);
222
- setActiveActionId(null);
223
- setSliceForceOpen(undefined);
224
- setActionForceOpen(undefined);
225
- };
226
- const handleGoBackSlice = () => {
227
- animateLayout();
228
- setActiveSliceKey(null);
229
- setSliceForceOpen(undefined);
230
- };
231
- const handleGoBackAction = () => {
232
- animateLayout();
233
- setActiveActionId(null);
234
- setActionForceOpen(undefined);
235
- };
236
- // Filtered state keys based on search query
237
- const filteredStateKeys = (0, react_1.useMemo)(() => {
238
- if (!state || typeof state !== 'object')
239
- return [];
240
- const keys = Object.keys(state);
241
- let result = keys;
242
- if (isSearching) {
243
- result = keys.filter(key => {
244
- const typeMatch = searchModeType && key.toLowerCase().includes(search.toLowerCase());
245
- const dataMatch = searchModeData && valueContainsTerm(state[key], search);
246
- return typeMatch || dataMatch;
247
- });
248
- }
249
- return [...result].sort((a, b) => {
250
- const comparison = a.localeCompare(b);
251
- return stateSortAsc ? comparison : -comparison;
252
- });
253
- }, [state, search, isSearching, searchModeType, searchModeData, stateSortAsc]);
254
- // Filtered action history based on search query
255
- const filteredActionHistory = (0, react_1.useMemo)(() => {
256
- if (!actionHistory)
257
- return [];
258
- let result = actionHistory;
259
- if (isSearching) {
260
- result = actionHistory.filter(action => {
261
- const typeMatch = searchModeType && action.type.toLowerCase().includes(search.toLowerCase());
262
- const payloadMatch = searchModeData && action.payload && valueContainsTerm(action.payload, search);
263
- return typeMatch || payloadMatch;
264
- });
265
- }
266
- return [...result].sort((a, b) => {
267
- const comparison = a.id - b.id;
268
- return actionSortAsc ? comparison : -comparison;
269
- });
270
- }, [actionHistory, search, isSearching, searchModeType, searchModeData, actionSortAsc]);
271
- // Find currently selected action object
272
- const selectedAction = (0, react_1.useMemo)(() => {
273
- if (activeActionId === null)
274
- return null;
275
- return actionHistory.find(a => a.id === activeActionId) || null;
276
- }, [activeActionId, actionHistory]);
277
- if (!state || typeof state !== 'object') {
278
- return (<react_native_1.View style={styles.errorContainer}>
279
- <react_native_1.Text style={styles.errorText}>No connected Redux store state found.</react_native_1.Text>
280
- </react_native_1.View>);
281
- }
282
- // ── Render Detail View: State Slice ──
283
- if (activeTab === 'state' && activeSliceKey !== null) {
284
- const sliceData = state[activeSliceKey];
285
- const fieldsCount = typeof sliceData === 'object' && sliceData !== null
286
- ? Object.keys(sliceData).length
287
- : 1;
288
- const sliceTabs = [
289
- { key: 'live', label: 'Live State' },
290
- ...(isPersisted
291
- ? [{ key: 'persisted', label: `Persisted (${(0, helpers_1.getSize)(persistedData)})` }]
292
- : []),
293
- { key: 'metadata', label: 'Metadata' },
294
- ];
295
- return (<react_native_1.View style={{ flex: 1 }}>
296
- {/* Detail info header bar */}
297
- <react_native_1.View style={styles.apiLikeInfoBar}>
298
- <react_native_1.View style={{
299
- flexDirection: 'row',
300
- alignItems: 'center',
301
- justifyContent: 'space-between',
302
- marginBottom: 8,
303
- }}>
304
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
305
- <react_native_1.View style={[styles.apiMethodBadge, { backgroundColor: AppColors_1.AppColors.purple }]}>
306
- <react_native_1.Text style={styles.apiMethodBadgeText}>REDUX</react_native_1.Text>
307
- </react_native_1.View>
308
- <react_native_1.View style={[
309
- styles.apiMethodBadge,
310
- {
311
- backgroundColor: `${AppColors_1.AppColors.brandPurple}18`,
312
- borderWidth: 1,
313
- borderColor: `${AppColors_1.AppColors.brandPurple}40`,
314
- },
315
- ]}>
316
- <react_native_1.Text style={[styles.apiMethodBadgeText, { color: AppColors_1.AppColors.brandPurple }]}>
317
- SLICE
318
- </react_native_1.Text>
319
- </react_native_1.View>
320
- {isPersisted && (<react_native_1.View style={[styles.apiMethodBadge, { backgroundColor: AppColors_1.AppColors.emerald500 }]}>
321
- <react_native_1.Text style={styles.apiMethodBadgeText}>PERSISTED</react_native_1.Text>
322
- </react_native_1.View>)}
323
- <react_native_1.View style={styles.apiChip}>
324
- <react_native_1.Text style={styles.apiChipText}>{(0, helpers_1.getSize)(sliceData)}</react_native_1.Text>
325
- </react_native_1.View>
326
- <react_native_1.View style={styles.apiChip}>
327
- <react_native_1.Text style={styles.apiChipText}>
328
- {fieldsCount} {fieldsCount === 1 ? 'field' : 'fields'}
329
- </react_native_1.Text>
330
- </react_native_1.View>
331
- </react_native_1.View>
332
-
333
- <CopyButton_1.default value={JSON.stringify(sliceDetailTab === 'live' ? sliceData : persistedData, null, 2)} label={`Slice '${activeSliceKey}'`}/>
334
- </react_native_1.View>
335
-
336
- <react_native_1.Text style={styles.apiTitleText} selectable={true}>
337
- {activeSliceKey}
338
- </react_native_1.Text>
339
-
340
- <react_native_1.View style={styles.apiMetaRow}>
341
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.grayTextWeak} size={11}/>
342
- <react_native_1.Text style={styles.apiMetaText}>
343
- Last updated: {lastActionMap[activeSliceKey] ? lastActionMap[activeSliceKey].timestamp : 'Initial'}
344
- </react_native_1.Text>
345
- </react_native_1.View>
346
- </react_native_1.View>
347
-
348
- {/* Back button row + sub-tabs */}
349
- <react_native_1.View style={{ paddingHorizontal: 12, paddingTop: 8, paddingBottom: 4 }}>
350
- <react_native_1.View style={{
351
- flexDirection: 'row',
352
- alignItems: 'center',
353
- justifyContent: 'space-between',
354
- marginBottom: 8,
355
- }}>
356
- <TouchableScale_1.default onPress={handleGoBackSlice} style={styles.backBtn} hitSlop={12}>
357
- <BackChevronIcon color={AppColors_1.AppColors.purple} size={12}/>
358
- <react_native_1.Text style={styles.backBtnText}>State Slices</react_native_1.Text>
359
- </TouchableScale_1.default>
360
-
361
- {isPersisted && sliceDetailTab === 'persisted' && (<TouchableScale_1.default onPress={handleClearPersistence} style={[styles.detailHeaderBtn, { borderColor: `${AppColors_1.AppColors.errorColor}40` }]} hitSlop={8}>
362
- <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={14}/>
363
- </TouchableScale_1.default>)}
364
- </react_native_1.View>
365
-
366
- <SegmentedTabs_1.default tabs={sliceTabs} activeKey={sliceDetailTab} onChange={key => {
367
- animateLayout();
368
- setSliceDetailTab(key);
369
- }}/>
370
- </react_native_1.View>
371
-
372
- {/* Search row (for live/persisted tabs) */}
373
- {sliceDetailTab !== 'metadata' && (<react_native_1.View style={{ paddingHorizontal: 12, paddingTop: 4, paddingBottom: 4 }}>
374
- <react_native_1.View style={{
375
- flexDirection: 'row',
376
- alignItems: 'center',
377
- backgroundColor: AppColors_1.AppColors.purpleShade50,
378
- borderRadius: 8,
379
- paddingHorizontal: 10,
380
- borderWidth: 1,
381
- borderColor: AppColors_1.AppColors.dividerColor,
382
- height: 36,
383
- }}>
384
- <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={15}/>
385
- <react_native_1.TextInput placeholder="Search in slice keys or values..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={search} onChangeText={onSearchChange} style={{
386
- flex: 1,
387
- fontFamily: AppFonts_1.AppFonts.interRegular,
388
- fontSize: 12,
389
- color: AppColors_1.AppColors.grayTextStrong,
390
- paddingHorizontal: 8,
391
- paddingVertical: 0,
392
- }} autoCorrect={false} autoCapitalize="none"/>
393
- {search.length > 0 && (<react_native_1.Pressable onPress={() => onSearchChange?.('')} hitSlop={10}>
394
- <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={13}/>
395
- </react_native_1.Pressable>)}
396
- </react_native_1.View>
397
- </react_native_1.View>)}
398
-
399
- {/* Scrollable Tab Content */}
400
- <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ paddingHorizontal: 12, paddingTop: 6, paddingBottom: 28, flexGrow: 1 }} showsVerticalScrollIndicator={true} keyboardShouldPersistTaps="handled">
401
- {sliceDetailTab === 'metadata' ? (<react_native_1.View style={{
402
- backgroundColor: AppColors_1.AppColors.primaryLight,
403
- borderRadius: 10,
404
- borderWidth: 1,
405
- borderColor: AppColors_1.AppColors.dividerColor,
406
- overflow: 'hidden',
407
- paddingHorizontal: 12,
408
- paddingVertical: 4,
409
- }}>
410
- {[
411
- { label: 'Slice Name', value: activeSliceKey },
412
- { label: 'Fields Count', value: `${fieldsCount} root keys` },
413
- { label: 'State Size', value: (0, helpers_1.getSize)(sliceData) },
414
- {
415
- label: 'Persistence',
416
- value: isPersisted ? `Persisted (${(0, helpers_1.getSize)(persistedData)})` : 'Not Persisted',
417
- },
418
- {
419
- label: 'Last Dispatched Action',
420
- value: lastActionMap[activeSliceKey] ? lastActionMap[activeSliceKey].type : 'None',
421
- },
422
- {
423
- label: 'Last Updated At',
424
- value: lastActionMap[activeSliceKey] ? lastActionMap[activeSliceKey].timestamp : 'Initial',
425
- },
426
- ].map((row, rIdx) => (<react_native_1.View key={rIdx} style={{
427
- flexDirection: 'row',
428
- justifyContent: 'space-between',
429
- alignItems: 'center',
430
- paddingVertical: 9,
431
- borderBottomWidth: rIdx < 5 ? 1 : 0,
432
- borderBottomColor: AppColors_1.AppColors.grayBorderSecondary,
433
- }}>
434
- <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interMedium, fontSize: 11.5, color: AppColors_1.AppColors.grayTextWeak }}>
435
- {row.label}
436
- </react_native_1.Text>
437
- <react_native_1.Text selectable style={{
438
- fontFamily: AppFonts_1.AppFonts.interBold,
439
- fontSize: 11.5,
440
- color: AppColors_1.AppColors.primaryBlack,
441
- maxWidth: '60%',
442
- textAlign: 'right',
443
- }}>
444
- {row.value}
445
- </react_native_1.Text>
446
- </react_native_1.View>))}
447
- </react_native_1.View>) : (<JsonViewer_1.default data={sliceDetailTab === 'live' ? sliceData : (persistedData ?? 'No persisted data')} search={search} forceOpen={sliceForceOpen !== undefined ? sliceForceOpen : (isSearching ? true : undefined)} fullHeight={true}/>)}
448
- </react_native_1.ScrollView>
449
- </react_native_1.View>);
450
- }
451
- // ── Render Detail View: Timeline Action ──
452
- if (activeTab === 'timeline' && selectedAction !== null) {
453
- const affectedSlices = selectedAction.affectedSlices || [];
454
- const actionTabs = [
455
- { key: 'payload', label: 'Payload' },
456
- { key: 'diff', label: 'Diff Changes' },
457
- { key: 'state', label: 'Snapshot' },
458
- { key: 'metadata', label: 'Metadata' },
459
- ];
460
- return (<react_native_1.View style={{ flex: 1 }}>
461
- {/* Detail info header bar */}
462
- <react_native_1.View style={styles.apiLikeInfoBar}>
463
- <react_native_1.View style={{
464
- flexDirection: 'row',
465
- alignItems: 'center',
466
- justifyContent: 'space-between',
467
- marginBottom: 8,
468
- }}>
469
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
470
- <react_native_1.View style={[styles.apiMethodBadge, { backgroundColor: AppColors_1.AppColors.purple }]}>
471
- <react_native_1.Text style={styles.apiMethodBadgeText}>REDUX</react_native_1.Text>
472
- </react_native_1.View>
473
- <react_native_1.View style={[styles.apiMethodBadge, { backgroundColor: AppColors_1.AppColors.amber500 }]}>
474
- <react_native_1.Text style={styles.apiMethodBadgeText}>ACTION</react_native_1.Text>
475
- </react_native_1.View>
476
- <react_native_1.View style={styles.apiChip}>
477
- <react_native_1.Text style={styles.apiChipText}>#{selectedAction.id}</react_native_1.Text>
478
- </react_native_1.View>
479
- <react_native_1.View style={styles.apiChip}>
480
- <react_native_1.Text style={styles.apiChipText}>{(0, helpers_1.getSize)(selectedAction.payload)}</react_native_1.Text>
481
- </react_native_1.View>
482
- </react_native_1.View>
483
-
484
- <CopyButton_1.default value={JSON.stringify(actionSubTab === 'payload'
485
- ? selectedAction.payload
486
- : actionSubTab === 'diff'
487
- ? { prev: selectedAction.prevState, next: selectedAction.nextState }
488
- : selectedAction.nextState, null, 2)} label={actionSubTab === 'payload' ? 'Action Payload' : 'State Snapshot'}/>
489
- </react_native_1.View>
490
-
491
- <react_native_1.Text style={styles.apiTitleText} selectable={true}>
492
- {selectedAction.type}
493
- </react_native_1.Text>
494
-
495
- <react_native_1.View style={styles.apiMetaRow}>
496
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.grayTextWeak} size={11}/>
497
- <react_native_1.Text style={styles.apiMetaText}>
498
- Dispatched: {selectedAction.timestamp}
499
- </react_native_1.Text>
500
- </react_native_1.View>
501
-
502
- {/* Affected Slices Tags list */}
503
- {affectedSlices.length > 0 && (<react_native_1.View style={[styles.detailAffectedTags, { marginTop: 6, paddingHorizontal: 0, paddingBottom: 0 }]}>
504
- <react_native_1.Text style={styles.affectedTagsLabel}>AFFECTED SLICES:</react_native_1.Text>
505
- <react_native_1.View style={styles.detailTagsList}>
506
- {affectedSlices.map(slice => (<react_native_1.View key={slice} style={styles.sliceTag}>
507
- <react_native_1.Text style={styles.sliceTagText}>{slice}</react_native_1.Text>
508
- </react_native_1.View>))}
509
- </react_native_1.View>
510
- </react_native_1.View>)}
511
- </react_native_1.View>
512
-
513
- {/* Back button row + sub-tabs */}
514
- <react_native_1.View style={{ paddingHorizontal: 12, paddingTop: 8, paddingBottom: 4 }}>
515
- <react_native_1.View style={{
516
- flexDirection: 'row',
517
- alignItems: 'center',
518
- justifyContent: 'space-between',
519
- marginBottom: 8,
520
- }}>
521
- <TouchableScale_1.default onPress={handleGoBackAction} style={styles.backBtn} hitSlop={12}>
522
- <BackChevronIcon color={AppColors_1.AppColors.purple} size={12}/>
523
- <react_native_1.Text style={styles.backBtnText}>Actions Timeline</react_native_1.Text>
524
- </TouchableScale_1.default>
525
- </react_native_1.View>
526
-
527
- <SegmentedTabs_1.default tabs={actionTabs} activeKey={actionSubTab} onChange={key => {
528
- animateLayout();
529
- setActionSubTab(key);
530
- }}/>
531
- </react_native_1.View>
532
-
533
- {/* Scrollable Tab Content */}
534
- <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ paddingHorizontal: 12, paddingTop: 6, paddingBottom: 28, flexGrow: 1 }} showsVerticalScrollIndicator={true} keyboardShouldPersistTaps="handled">
535
- {actionSubTab === 'payload' && (<JsonViewer_1.default data={selectedAction.payload ?? 'No payload data'} wrap forceOpen={actionForceOpen !== undefined ? actionForceOpen : undefined} fullHeight={true}/>)}
536
-
537
- {actionSubTab === 'diff' && (<DiffViewer_1.default oldData={selectedAction.prevState} newData={selectedAction.nextState}/>)}
538
-
539
- {actionSubTab === 'state' && (<JsonViewer_1.default data={selectedAction.nextState} wrap forceOpen={actionForceOpen !== undefined ? actionForceOpen : undefined} fullHeight={true}/>)}
540
-
541
- {actionSubTab === 'metadata' && (<react_native_1.View style={{
542
- backgroundColor: AppColors_1.AppColors.primaryLight,
543
- borderRadius: 10,
544
- borderWidth: 1,
545
- borderColor: AppColors_1.AppColors.dividerColor,
546
- overflow: 'hidden',
547
- paddingHorizontal: 12,
548
- paddingVertical: 4,
549
- }}>
550
- {[
551
- { label: 'Action Type', value: selectedAction.type },
552
- { label: 'Action ID', value: `#${selectedAction.id}` },
553
- { label: 'Dispatched At', value: selectedAction.timestamp },
554
- { label: 'Payload Size', value: (0, helpers_1.getSize)(selectedAction.payload) },
555
- { label: 'Snapshot Size', value: (0, helpers_1.getSize)(selectedAction.nextState) },
556
- {
557
- label: 'Affected Slices',
558
- value: affectedSlices.length > 0 ? affectedSlices.join(', ') : 'None',
559
- },
560
- ].map((row, rIdx) => (<react_native_1.View key={rIdx} style={{
561
- flexDirection: 'row',
562
- justifyContent: 'space-between',
563
- alignItems: 'center',
564
- paddingVertical: 9,
565
- borderBottomWidth: rIdx < 5 ? 1 : 0,
566
- borderBottomColor: AppColors_1.AppColors.grayBorderSecondary,
567
- }}>
568
- <react_native_1.Text style={{ fontFamily: AppFonts_1.AppFonts.interMedium, fontSize: 11.5, color: AppColors_1.AppColors.grayTextWeak }}>
569
- {row.label}
570
- </react_native_1.Text>
571
- <react_native_1.Text selectable style={{
572
- fontFamily: AppFonts_1.AppFonts.interBold,
573
- fontSize: 11.5,
574
- color: AppColors_1.AppColors.primaryBlack,
575
- maxWidth: '60%',
576
- textAlign: 'right',
577
- }}>
578
- {row.value}
579
- </react_native_1.Text>
580
- </react_native_1.View>))}
581
- </react_native_1.View>)}
582
- </react_native_1.ScrollView>
583
- </react_native_1.View>);
584
- }
585
- // ── Render List Views (Default) ──
586
- return (<react_native_1.View style={styles.container}>
587
- {/* ── Control Bar ── */}
588
- <react_native_1.View style={styles.toolbar}>
589
- <react_native_1.View style={styles.statusSection}>
590
- <react_native_1.View style={[styles.statusBadge, autoRefresh ? styles.statusBadgeActive : styles.statusBadgePaused]}>
591
- <react_native_1.View style={[styles.statusDot, autoRefresh ? styles.statusDotActive : styles.statusDotPaused]}/>
592
- <react_native_1.Text style={[styles.statusBadgeText, autoRefresh ? styles.statusTextActive : styles.statusTextPaused]}>
593
- {autoRefresh ? 'LIVE' : 'PAUSED'}
594
- </react_native_1.Text>
595
- </react_native_1.View>
596
- </react_native_1.View>
597
-
598
- <react_native_1.View style={styles.toolbarActions}>
599
- {/* Sorting Toggle Button */}
600
- <TouchableScale_1.default onPress={() => {
601
- animateLayout();
602
- if (activeTab === 'state') {
603
- setStateSortAsc(prev => !prev);
604
- }
605
- else {
606
- setActionSortAsc(prev => !prev);
607
- }
608
- }} style={styles.iconBtn} hitSlop={8}>
609
- <NetworkIcons_1.SortIcon ascending={activeTab === 'state' ? stateSortAsc : actionSortAsc} color={AppColors_1.AppColors.purple} size={15}/>
610
- </TouchableScale_1.default>
611
-
612
- {onToggleAutoRefresh && (<TouchableScale_1.default onPress={onToggleAutoRefresh} style={styles.iconBtn} hitSlop={8}>
613
- <NetworkIcons_1.HeaderPauseIcon isPaused={!autoRefresh} color={AppColors_1.AppColors.purple} size={15}/>
614
- </TouchableScale_1.default>)}
615
- {onClearHistory && (<TouchableScale_1.default onPress={onClearHistory} style={[styles.iconBtn, { borderColor: AppColors_1.AppColors.errorColor + '40', backgroundColor: AppColors_1.AppColors.errorColor + '08' }]} hitSlop={8}>
616
- <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={15}/>
617
- </TouchableScale_1.default>)}
618
- </react_native_1.View>
619
- </react_native_1.View>
620
-
621
- {/* ── Search Bar ── */}
622
- {onSearchChange && (<react_native_1.View style={styles.searchContainer}>
623
- <react_native_1.View style={styles.searchBar}>
624
- <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
625
- <react_native_1.TextInput placeholder="Search keys, values, or action payloads..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={search} onChangeText={onSearchChange} style={styles.searchInput} autoCorrect={false} autoCapitalize="none"/>
626
- {search.length > 0 && (<TouchableScale_1.default onPress={() => onSearchChange('')} hitSlop={10}>
627
- <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
628
- </TouchableScale_1.default>)}
629
- </react_native_1.View>
630
- <react_native_1.View style={styles.filterChipRow}>
631
- <react_native_1.Text style={styles.filterChipLabel}>FILTER BY:</react_native_1.Text>
632
- <react_native_1.Pressable onPress={() => {
633
- animateLayout();
634
- if (searchModeType && !searchModeData)
635
- return; // Prevent disabling both
636
- setSearchModeType(!searchModeType);
637
- }} style={[styles.filterChip, searchModeType && styles.filterChipActive]}>
638
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
639
- <NetworkIcons_1.SignalIcon color={searchModeType ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayText} size={11}/>
640
- <react_native_1.Text style={[styles.filterChipText, searchModeType && styles.filterChipTextActive]}>
641
- Type / Key
642
- </react_native_1.Text>
643
- </react_native_1.View>
644
- </react_native_1.Pressable>
645
- <react_native_1.Pressable onPress={() => {
646
- animateLayout();
647
- if (!searchModeType && searchModeData)
648
- return; // Prevent disabling both
649
- setSearchModeData(!searchModeData);
650
- }} style={[styles.filterChip, searchModeData && styles.filterChipActive]}>
651
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
652
- <NetworkIcons_1.LayersIcon color={searchModeData ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayText} size={11}/>
653
- <react_native_1.Text style={[styles.filterChipText, searchModeData && styles.filterChipTextActive]}>
654
- Payload Data
655
- </react_native_1.Text>
656
- </react_native_1.View>
657
- </react_native_1.Pressable>
658
- </react_native_1.View>
659
- </react_native_1.View>)}
660
-
661
- {/* ── Tab Selector ── */}
662
- <react_native_1.View style={styles.tabContainer}>
663
- <react_native_1.Pressable style={[styles.tabButton, activeTab === 'state' && styles.tabButtonActive]} onPress={() => switchTab('state')}>
664
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
665
- <NetworkIcons_1.LayersIcon color={activeTab === 'state' ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayText} size={12}/>
666
- <react_native_1.Text style={[styles.tabButtonText, activeTab === 'state' && styles.tabButtonTextActive]}>
667
- State Slices ({filteredStateKeys.length})
668
- </react_native_1.Text>
669
- </react_native_1.View>
670
- </react_native_1.Pressable>
671
- <react_native_1.Pressable style={[styles.tabButton, activeTab === 'timeline' && styles.tabButtonActive]} onPress={() => switchTab('timeline')}>
672
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
673
- <NetworkIcons_1.TerminalIcon color={activeTab === 'timeline' ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayText} size={12}/>
674
- <react_native_1.Text style={[styles.tabButtonText, activeTab === 'timeline' && styles.tabButtonTextActive]}>
675
- Actions ({filteredActionHistory.length})
676
- </react_native_1.Text>
677
- </react_native_1.View>
678
- </react_native_1.Pressable>
679
- </react_native_1.View>
680
-
681
- {/* ── State List View ── */}
682
- {activeTab === 'state' && (<react_native_1.ScrollView style={styles.scrollList} contentContainerStyle={styles.scrollContent}>
683
- {filteredStateKeys.length === 0 ? (<react_native_1.View style={styles.emptyState}>
684
- <react_native_1.Text style={styles.emptyStateText}>
685
- {isSearching ? 'No store slices match your search.' : 'Redux store contains no state.'}
686
- </react_native_1.Text>
687
- </react_native_1.View>) : (filteredStateKeys.map(reducerKey => {
688
- const sliceData = state[reducerKey];
689
- const fieldsCount = typeof sliceData === 'object' && sliceData !== null
690
- ? Object.keys(sliceData).length
691
- : 1;
692
- const lastAction = lastActionMap[reducerKey];
693
- const lastUpdatedTime = lastAction ? lastAction.timestamp : 'Initial';
694
- return (<TouchableScale_1.default key={reducerKey} onPress={() => {
695
- animateLayout();
696
- setActiveSliceKey(reducerKey);
697
- }} style={styles.listRow}>
698
- <react_native_1.View style={styles.sliceIcon}>
699
- <NetworkIcons_1.FolderIcon color={AppColors_1.AppColors.purple} size={11}/>
700
- </react_native_1.View>
701
- <react_native_1.View style={styles.rowMain}>
702
- <react_native_1.Text style={styles.rowTitle}>{reducerKey}</react_native_1.Text>
703
- <react_native_1.Text style={styles.rowSub}>
704
- {(0, helpers_1.getSize)(sliceData)} • {fieldsCount} {fieldsCount === 1 ? 'field' : 'fields'} • Updated: {lastUpdatedTime}
705
- </react_native_1.Text>
706
- </react_native_1.View>
707
- <ForwardChevronIcon color={AppColors_1.AppColors.grayTextWeak} size={10}/>
708
- </TouchableScale_1.default>);
709
- }))}
710
- </react_native_1.ScrollView>)}
711
-
712
- {/* ── Timeline List View ── */}
713
- {activeTab === 'timeline' && (<react_native_1.ScrollView style={styles.scrollList} contentContainerStyle={styles.scrollContent}>
714
- {filteredActionHistory.length === 0 ? (<react_native_1.View style={styles.emptyState}>
715
- <react_native_1.Text style={styles.emptyStateText}>
716
- {isSearching
717
- ? 'No actions match your search.'
718
- : 'No actions dispatched yet. Trigger an action in the app to populate history.'}
719
- </react_native_1.Text>
720
- </react_native_1.View>) : (filteredActionHistory.map(action => {
721
- const id = action.id;
722
- const affectedSlices = action.affectedSlices || [];
723
- return (<TouchableScale_1.default key={id} onPress={() => {
724
- animateLayout();
725
- setActiveActionId(id);
726
- }} style={styles.listRow}>
727
- <react_native_1.View style={styles.seqBadge}>
728
- <react_native_1.Text style={styles.seqText}>#{action.id}</react_native_1.Text>
729
- </react_native_1.View>
730
- <react_native_1.View style={styles.rowMain}>
731
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
732
- <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.purple} size={11}/>
733
- <react_native_1.Text style={styles.actionTitleText} numberOfLines={1}>{action.type}</react_native_1.Text>
734
- </react_native_1.View>
735
- <react_native_1.View style={styles.actionMetaRow}>
736
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.grayTextWeak} size={9}/>
737
- <react_native_1.Text style={styles.actionTimeText}>{action.timestamp} • {(0, helpers_1.getSize)(action.payload)}</react_native_1.Text>
738
- </react_native_1.View>
739
- {affectedSlices.length > 0 && (<react_native_1.View style={styles.tagsContainer}>
740
- {affectedSlices.map(slice => (<react_native_1.View key={slice} style={styles.sliceTagMini}>
741
- <react_native_1.Text style={styles.sliceTagMiniText}>{slice}</react_native_1.Text>
742
- </react_native_1.View>))}
743
- </react_native_1.View>)}
744
- </react_native_1.View>
745
- <ForwardChevronIcon color={AppColors_1.AppColors.grayTextWeak} size={10}/>
746
- </TouchableScale_1.default>);
747
- }))}
748
- </react_native_1.ScrollView>)}
749
- </react_native_1.View>);
750
- });
751
- const styles = react_native_1.StyleSheet.create({
752
- container: {
753
- flex: 1,
754
- backgroundColor: AppColors_1.AppColors.grayBackground,
755
- },
756
- scrollList: {
757
- flex: 1,
758
- },
759
- errorContainer: {
760
- padding: 24,
761
- alignItems: 'center',
762
- },
763
- errorText: {
764
- fontFamily: AppFonts_1.AppFonts.interRegular,
765
- fontSize: 12,
766
- color: AppColors_1.AppColors.grayTextWeak,
767
- },
768
- toolbar: {
769
- flexDirection: 'row',
770
- alignItems: 'center',
771
- justifyContent: 'space-between',
772
- paddingHorizontal: 12,
773
- paddingVertical: 10,
774
- backgroundColor: AppColors_1.AppColors.primaryLight,
775
- borderBottomWidth: 1,
776
- borderBottomColor: AppColors_1.AppColors.dividerColor,
777
- },
778
- statusSection: {
779
- flexDirection: 'row',
780
- alignItems: 'center',
781
- },
782
- statusBadge: {
783
- flexDirection: 'row',
784
- alignItems: 'center',
785
- paddingHorizontal: 8,
786
- paddingVertical: 3,
787
- borderRadius: 12,
788
- borderWidth: 1,
789
- },
790
- statusBadgeActive: {
791
- backgroundColor: AppColors_1.AppColors.greenStatus,
792
- borderColor: AppColors_1.AppColors.greenColor + '30',
793
- },
794
- statusBadgePaused: {
795
- backgroundColor: AppColors_1.AppColors.grayBackground,
796
- borderColor: AppColors_1.AppColors.grayBorderSecondary,
797
- },
798
- statusDot: {
799
- width: 6,
800
- height: 6,
801
- borderRadius: 3,
802
- marginRight: 6,
803
- },
804
- statusDotActive: {
805
- backgroundColor: AppColors_1.AppColors.greenBaggageText,
806
- },
807
- statusDotPaused: {
808
- backgroundColor: AppColors_1.AppColors.grayTextWeak,
809
- },
810
- statusBadgeText: {
811
- fontFamily: AppFonts_1.AppFonts.interBold,
812
- fontSize: 9,
813
- letterSpacing: 0.5,
814
- },
815
- statusTextActive: {
816
- color: AppColors_1.AppColors.greenBaggageText,
817
- },
818
- statusTextPaused: {
819
- color: AppColors_1.AppColors.grayText,
820
- },
821
- toolbarActions: {
822
- flexDirection: 'row',
823
- alignItems: 'center',
824
- gap: 8,
825
- },
826
- iconBtn: {
827
- width: 28,
828
- height: 28,
829
- borderRadius: 6,
830
- borderWidth: 1,
831
- borderColor: AppColors_1.AppColors.purple + '40',
832
- backgroundColor: AppColors_1.AppColors.purpleShade50,
833
- alignItems: 'center',
834
- justifyContent: 'center',
835
- },
836
- searchContainer: {
837
- backgroundColor: AppColors_1.AppColors.primaryLight,
838
- borderBottomWidth: 1,
839
- borderBottomColor: AppColors_1.AppColors.dividerColor,
840
- paddingBottom: 10,
841
- },
842
- searchBar: {
843
- flexDirection: 'row',
844
- alignItems: 'center',
845
- backgroundColor: AppColors_1.AppColors.grayBackground,
846
- borderRadius: 8,
847
- marginHorizontal: 12,
848
- marginTop: 10,
849
- marginBottom: 8,
850
- paddingHorizontal: 10,
851
- borderWidth: 1,
852
- borderColor: AppColors_1.AppColors.dividerColor,
853
- height: 36,
854
- },
855
- filterChipRow: {
856
- flexDirection: 'row',
857
- alignItems: 'center',
858
- paddingHorizontal: 12,
859
- gap: 8,
860
- },
861
- filterChipLabel: {
862
- fontFamily: AppFonts_1.AppFonts.interBold,
863
- fontSize: 9,
864
- color: AppColors_1.AppColors.grayTextWeak,
865
- letterSpacing: 0.5,
866
- marginRight: 2,
867
- },
868
- filterChip: {
869
- paddingHorizontal: 10,
870
- paddingVertical: 4,
871
- borderRadius: 12,
872
- backgroundColor: AppColors_1.AppColors.grayBackground,
873
- borderWidth: 1,
874
- borderColor: AppColors_1.AppColors.grayBorderSecondary,
875
- },
876
- filterChipActive: {
877
- backgroundColor: AppColors_1.AppColors.purpleShade50,
878
- borderColor: AppColors_1.AppColors.purple,
879
- },
880
- filterChipText: {
881
- fontFamily: AppFonts_1.AppFonts.interMedium,
882
- fontSize: 10,
883
- color: AppColors_1.AppColors.grayText,
884
- },
885
- filterChipTextActive: {
886
- color: AppColors_1.AppColors.purple,
887
- fontFamily: AppFonts_1.AppFonts.interBold,
888
- },
889
- searchInput: {
890
- flex: 1,
891
- fontFamily: AppFonts_1.AppFonts.interRegular,
892
- fontSize: 12,
893
- color: AppColors_1.AppColors.grayTextStrong,
894
- marginLeft: 6,
895
- padding: 0,
896
- },
897
- tabContainer: {
898
- flexDirection: 'row',
899
- backgroundColor: AppColors_1.AppColors.dividerColor,
900
- borderRadius: 8,
901
- padding: 3,
902
- marginHorizontal: 12,
903
- marginTop: 10,
904
- marginBottom: 10,
905
- },
906
- tabButton: {
907
- flex: 1,
908
- paddingVertical: 7,
909
- alignItems: 'center',
910
- justifyContent: 'center',
911
- borderRadius: 6,
912
- },
913
- tabButtonActive: {
914
- backgroundColor: AppColors_1.AppColors.primaryLight,
915
- shadowColor: AppColors_1.AppColors.shadowColorString,
916
- shadowOffset: { width: 0, height: 1 },
917
- shadowOpacity: 0.08,
918
- shadowRadius: 2,
919
- elevation: 2,
920
- },
921
- tabButtonText: {
922
- fontFamily: AppFonts_1.AppFonts.interMedium,
923
- fontSize: 12,
924
- color: AppColors_1.AppColors.grayText,
925
- },
926
- tabButtonTextActive: {
927
- color: AppColors_1.AppColors.purple,
928
- fontFamily: AppFonts_1.AppFonts.interBold,
929
- },
930
- scrollContent: {
931
- paddingBottom: 24,
932
- paddingHorizontal: 12,
933
- },
934
- emptyState: {
935
- padding: 24,
936
- alignItems: 'center',
937
- },
938
- emptyStateText: {
939
- fontFamily: AppFonts_1.AppFonts.interRegular,
940
- fontSize: 12,
941
- color: AppColors_1.AppColors.grayTextWeak,
942
- textAlign: 'center',
943
- },
944
- listRow: {
945
- flexDirection: 'row',
946
- alignItems: 'center',
947
- backgroundColor: AppColors_1.AppColors.primaryLight,
948
- paddingHorizontal: 12,
949
- paddingVertical: 14,
950
- borderRadius: 10,
951
- borderWidth: 1,
952
- borderColor: AppColors_1.AppColors.grayBorderSecondary,
953
- marginBottom: 8,
954
- shadowColor: AppColors_1.AppColors.shadowColorString,
955
- shadowOffset: { width: 0, height: 1 },
956
- shadowOpacity: 0.03,
957
- shadowRadius: 2,
958
- elevation: 1,
959
- },
960
- rowMain: {
961
- flex: 1,
962
- marginLeft: 10,
963
- },
964
- rowTitle: {
965
- fontFamily: AppFonts_1.AppFonts.interBold,
966
- fontSize: 13.5,
967
- color: AppColors_1.AppColors.primaryBlack,
968
- },
969
- rowSub: {
970
- fontFamily: AppFonts_1.AppFonts.interRegular,
971
- fontSize: 10,
972
- color: AppColors_1.AppColors.grayTextWeak,
973
- marginTop: 2,
974
- },
975
- sliceIcon: {
976
- width: 22,
977
- height: 22,
978
- borderRadius: 6,
979
- backgroundColor: AppColors_1.AppColors.purpleShade50,
980
- alignItems: 'center',
981
- justifyContent: 'center',
982
- },
983
- seqBadge: {
984
- backgroundColor: AppColors_1.AppColors.grayBackground,
985
- borderColor: AppColors_1.AppColors.grayBorderSecondary,
986
- borderWidth: 1,
987
- borderRadius: 4,
988
- paddingHorizontal: 5,
989
- paddingVertical: 2,
990
- alignItems: 'center',
991
- justifyContent: 'center',
992
- minWidth: 28,
993
- },
994
- seqText: {
995
- fontFamily: AppFonts_1.AppFonts.interBold,
996
- fontSize: 9.5,
997
- color: AppColors_1.AppColors.grayText,
998
- },
999
- actionTitleText: {
1000
- fontFamily: AppFonts_1.AppFonts.interBold,
1001
- fontSize: 13,
1002
- color: AppColors_1.AppColors.purple,
1003
- },
1004
- actionMetaRow: {
1005
- flexDirection: 'row',
1006
- alignItems: 'center',
1007
- gap: 4,
1008
- marginTop: 2,
1009
- },
1010
- actionTimeText: {
1011
- fontFamily: AppFonts_1.AppFonts.interRegular,
1012
- fontSize: 9.5,
1013
- color: AppColors_1.AppColors.grayTextWeak,
1014
- },
1015
- tagsContainer: {
1016
- flexDirection: 'row',
1017
- flexWrap: 'wrap',
1018
- gap: 4,
1019
- marginTop: 4,
1020
- },
1021
- sliceTagMini: {
1022
- backgroundColor: AppColors_1.AppColors.purpleShade50,
1023
- borderColor: AppColors_1.AppColors.purple + '20',
1024
- borderWidth: 1,
1025
- borderRadius: 3,
1026
- paddingHorizontal: 4,
1027
- paddingVertical: 0.5,
1028
- },
1029
- sliceTagMiniText: {
1030
- fontFamily: AppFonts_1.AppFonts.interMedium,
1031
- fontSize: 8.5,
1032
- color: AppColors_1.AppColors.purple,
1033
- },
1034
- // ── Detail Views Styles ──
1035
- detailHeaderBar: {
1036
- flexDirection: 'row',
1037
- alignItems: 'center',
1038
- paddingHorizontal: 12,
1039
- paddingVertical: 12,
1040
- backgroundColor: AppColors_1.AppColors.primaryLight,
1041
- borderBottomWidth: 1,
1042
- borderBottomColor: AppColors_1.AppColors.dividerColor,
1043
- },
1044
- backBtn: {
1045
- flexDirection: 'row',
1046
- alignItems: 'center',
1047
- paddingVertical: 6,
1048
- paddingRight: 8,
1049
- },
1050
- backBtnText: {
1051
- fontFamily: AppFonts_1.AppFonts.interBold,
1052
- fontSize: 12.5,
1053
- color: AppColors_1.AppColors.purple,
1054
- },
1055
- detailHeaderInfo: {
1056
- flex: 1,
1057
- marginLeft: 10,
1058
- marginRight: 10,
1059
- },
1060
- detailTitle: {
1061
- fontFamily: AppFonts_1.AppFonts.interBold,
1062
- fontSize: 13.5,
1063
- color: AppColors_1.AppColors.primaryBlack,
1064
- },
1065
- detailSub: {
1066
- fontFamily: AppFonts_1.AppFonts.interRegular,
1067
- fontSize: 10,
1068
- color: AppColors_1.AppColors.grayTextWeak,
1069
- marginTop: 2,
1070
- },
1071
- detailHeaderActions: {
1072
- flexDirection: 'row',
1073
- alignItems: 'center',
1074
- gap: 6,
1075
- },
1076
- detailHeaderBtn: {
1077
- padding: 6,
1078
- borderRadius: 6,
1079
- borderWidth: 1,
1080
- borderColor: AppColors_1.AppColors.purple + '20',
1081
- backgroundColor: AppColors_1.AppColors.purpleShade50,
1082
- alignItems: 'center',
1083
- justifyContent: 'center',
1084
- width: 28,
1085
- height: 28,
1086
- },
1087
- detailCopyBtn: {
1088
- padding: 6,
1089
- borderRadius: 6,
1090
- borderWidth: 1,
1091
- borderColor: AppColors_1.AppColors.purple + '20',
1092
- backgroundColor: AppColors_1.AppColors.purpleShade50,
1093
- },
1094
- detailTimeRow: {
1095
- flexDirection: 'row',
1096
- alignItems: 'center',
1097
- gap: 4,
1098
- marginTop: 1,
1099
- },
1100
- detailTimeText: {
1101
- fontFamily: AppFonts_1.AppFonts.interRegular,
1102
- fontSize: 10,
1103
- color: AppColors_1.AppColors.grayTextWeak,
1104
- },
1105
- detailAffectedTags: {
1106
- paddingHorizontal: 12,
1107
- paddingVertical: 8,
1108
- backgroundColor: AppColors_1.AppColors.grayBackground,
1109
- borderBottomWidth: 1,
1110
- borderBottomColor: AppColors_1.AppColors.dividerColor,
1111
- },
1112
- affectedTagsLabel: {
1113
- fontFamily: AppFonts_1.AppFonts.interBold,
1114
- fontSize: 9,
1115
- color: AppColors_1.AppColors.grayTextWeak,
1116
- letterSpacing: 0.5,
1117
- marginBottom: 4,
1118
- },
1119
- detailTagsList: {
1120
- flexDirection: 'row',
1121
- flexWrap: 'wrap',
1122
- gap: 4,
1123
- },
1124
- sliceTag: {
1125
- backgroundColor: AppColors_1.AppColors.purpleShade50,
1126
- borderColor: AppColors_1.AppColors.purple + '20',
1127
- borderWidth: 1,
1128
- borderRadius: 4,
1129
- paddingHorizontal: 6,
1130
- paddingVertical: 1.5,
1131
- },
1132
- sliceTagText: {
1133
- fontFamily: AppFonts_1.AppFonts.interMedium,
1134
- fontSize: 9.5,
1135
- color: AppColors_1.AppColors.purple,
1136
- },
1137
- subTabRow: {
1138
- flexDirection: 'row',
1139
- padding: 8,
1140
- gap: 8,
1141
- backgroundColor: AppColors_1.AppColors.primaryLight,
1142
- borderBottomWidth: 1,
1143
- borderBottomColor: AppColors_1.AppColors.dividerColor,
1144
- },
1145
- subTabPill: {
1146
- paddingHorizontal: 12,
1147
- paddingVertical: 5,
1148
- borderRadius: 12,
1149
- backgroundColor: AppColors_1.AppColors.grayBackground,
1150
- borderWidth: 1,
1151
- borderColor: AppColors_1.AppColors.grayBorderSecondary,
1152
- },
1153
- subTabPillActive: {
1154
- backgroundColor: AppColors_1.AppColors.purple,
1155
- borderColor: AppColors_1.AppColors.purple,
1156
- },
1157
- subTabPillText: {
1158
- fontFamily: AppFonts_1.AppFonts.interMedium,
1159
- fontSize: 10.5,
1160
- color: AppColors_1.AppColors.grayText,
1161
- },
1162
- subTabPillTextActive: {
1163
- color: AppColors_1.AppColors.white,
1164
- fontFamily: AppFonts_1.AppFonts.interBold,
1165
- },
1166
- detailScrollContent: {
1167
- paddingBottom: 24,
1168
- },
1169
- jsonViewerContainer: {
1170
- paddingHorizontal: 12,
1171
- paddingVertical: 8,
1172
- },
1173
- detailBox: {
1174
- padding: 10,
1175
- },
1176
- detailBoxHeader: {
1177
- flexDirection: 'row',
1178
- alignItems: 'center',
1179
- justifyContent: 'space-between',
1180
- marginBottom: 8,
1181
- paddingHorizontal: 4,
1182
- },
1183
- detailBoxTitle: {
1184
- fontFamily: AppFonts_1.AppFonts.interBold,
1185
- fontSize: 10,
1186
- color: AppColors_1.AppColors.grayTextWeak,
1187
- letterSpacing: 0.5,
1188
- textTransform: 'uppercase',
1189
- },
1190
- apiLikeInfoBar: {
1191
- paddingHorizontal: 16,
1192
- paddingVertical: 14,
1193
- backgroundColor: AppColors_1.AppColors.primaryLight,
1194
- borderBottomWidth: 1,
1195
- borderBottomColor: AppColors_1.AppColors.dividerColor,
1196
- },
1197
- apiBadgeRow: {
1198
- flexDirection: 'row',
1199
- alignItems: 'center',
1200
- gap: 6,
1201
- marginBottom: 8,
1202
- },
1203
- apiMethodBadge: {
1204
- paddingHorizontal: 8,
1205
- paddingVertical: 2,
1206
- borderRadius: 4,
1207
- alignItems: 'center',
1208
- justifyContent: 'center',
1209
- },
1210
- apiMethodBadgeText: {
1211
- fontFamily: AppFonts_1.AppFonts.interBold,
1212
- fontSize: 9.5,
1213
- color: AppColors_1.AppColors.white,
1214
- letterSpacing: 0.5,
1215
- },
1216
- apiChip: {
1217
- paddingHorizontal: 7,
1218
- paddingVertical: 2,
1219
- borderRadius: 4,
1220
- backgroundColor: `${AppColors_1.AppColors.purple}0F`,
1221
- borderWidth: 1,
1222
- borderColor: `${AppColors_1.AppColors.purple}26`,
1223
- alignItems: 'center',
1224
- justifyContent: 'center',
1225
- },
1226
- apiChipText: {
1227
- fontFamily: AppFonts_1.AppFonts.interBold,
1228
- fontSize: 9.5,
1229
- color: AppColors_1.AppColors.purple,
1230
- },
1231
- apiTitleText: {
1232
- fontFamily: AppFonts_1.AppFonts.interBold,
1233
- fontSize: 16,
1234
- color: AppColors_1.AppColors.primaryBlack,
1235
- marginBottom: 8,
1236
- },
1237
- apiMetaRow: {
1238
- flexDirection: 'row',
1239
- alignItems: 'center',
1240
- gap: 4,
1241
- },
1242
- apiMetaText: {
1243
- fontFamily: AppFonts_1.AppFonts.interRegular,
1244
- fontSize: 11,
1245
- color: AppColors_1.AppColors.grayTextWeak,
1246
- },
1247
- contentDetailSubHeader: {
1248
- flexDirection: 'row',
1249
- alignItems: 'center',
1250
- justifyContent: 'space-between',
1251
- paddingHorizontal: 12,
1252
- paddingVertical: 10,
1253
- borderBottomWidth: 1,
1254
- borderBottomColor: AppColors_1.AppColors.dividerColor,
1255
- backgroundColor: AppColors_1.AppColors.primaryLight,
1256
- },
1257
- });