react-native-inapp-inspector 2.3.18 → 2.3.20

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 (358) hide show
  1. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +57 -0
  2. package/dist/commonjs/analytics.js +1 -24
  3. package/dist/commonjs/bundle.js +1 -16
  4. package/dist/commonjs/capture.d.ts +2 -0
  5. package/dist/commonjs/capture.js +1 -32
  6. package/dist/commonjs/components/AnalyticsDetail.js +92 -623
  7. package/dist/commonjs/components/AnalyticsEventCard.js +54 -350
  8. package/dist/commonjs/components/AnalyticsGraph.js +70 -370
  9. package/dist/commonjs/components/AnimatedEntrance.js +1 -11
  10. package/dist/commonjs/components/AppHeaderLogo.js +7 -134
  11. package/dist/commonjs/components/BrandCircleIcon.js +73 -118
  12. package/dist/commonjs/components/BrandSquareIcon.js +63 -108
  13. package/dist/commonjs/components/CodeSnippet.js +48 -623
  14. package/dist/commonjs/components/ConsoleLogCard.js +63 -537
  15. package/dist/commonjs/components/CopyButton.js +3 -89
  16. package/dist/commonjs/components/DiffViewer.js +19 -83
  17. package/dist/commonjs/components/DomainHeader.js +27 -127
  18. package/dist/commonjs/components/EmptyState.d.ts +1 -0
  19. package/dist/commonjs/components/EmptyState.js +10 -87
  20. package/dist/commonjs/components/EndOfListFooter.js +7 -81
  21. package/dist/commonjs/components/ErrorBoundary.js +72 -566
  22. package/dist/commonjs/components/HeadersSection.js +31 -110
  23. package/dist/commonjs/components/HighlightText.js +17 -58
  24. package/dist/commonjs/components/Inspector/AboutModal.d.ts +6 -0
  25. package/dist/commonjs/components/Inspector/AboutModal.js +351 -0
  26. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +98 -797
  27. package/dist/commonjs/components/Inspector/AnalyticsTab.js +284 -930
  28. package/dist/commonjs/components/Inspector/BundleTab.js +551 -2918
  29. package/dist/commonjs/components/Inspector/ConsoleTab.js +79 -492
  30. package/dist/commonjs/components/Inspector/CrashDetail.js +123 -672
  31. package/dist/commonjs/components/Inspector/CrashFilterModal.js +66 -498
  32. package/dist/commonjs/components/Inspector/CrashTab.js +98 -670
  33. package/dist/commonjs/components/Inspector/DebuggingTab.js +64 -871
  34. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +143 -907
  35. package/dist/commonjs/components/Inspector/FabLauncher.js +85 -54
  36. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +6 -99
  37. package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +9 -0
  38. package/dist/commonjs/components/Inspector/FeedbackModal.js +167 -521
  39. package/dist/commonjs/components/Inspector/InspectorContext.js +1 -21
  40. package/dist/commonjs/components/Inspector/InspectorHeader.js +219 -1093
  41. package/dist/commonjs/components/Inspector/LogDetail.js +168 -994
  42. package/dist/commonjs/components/Inspector/MainScreen.js +60 -332
  43. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +136 -278
  44. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +134 -361
  45. package/dist/commonjs/components/Inspector/NavigationTracker.js +1 -12
  46. package/dist/commonjs/components/Inspector/NetworkDetail.js +96 -432
  47. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +60 -576
  48. package/dist/commonjs/components/Inspector/NetworkTab.js +84 -514
  49. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +17 -433
  50. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +25 -298
  51. package/dist/commonjs/components/Inspector/PerformanceTab.js +182 -1397
  52. package/dist/commonjs/components/Inspector/ReduxDetail.js +188 -1089
  53. package/dist/commonjs/components/Inspector/ReduxTab.js +85 -701
  54. package/dist/commonjs/components/Inspector/SettingsPanel.js +431 -3431
  55. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +11 -180
  56. package/dist/commonjs/components/Inspector/StorageTab.js +93 -826
  57. package/dist/commonjs/components/Inspector/TabBar.js +47 -183
  58. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +34 -408
  59. package/dist/commonjs/components/JsonViewer.js +168 -380
  60. package/dist/commonjs/components/LogCard.js +57 -567
  61. package/dist/commonjs/components/LogSyntaxHighlighter.js +11 -130
  62. package/dist/commonjs/components/MetaAccordion.js +69 -238
  63. package/dist/commonjs/components/MiniBarChart.js +3 -56
  64. package/dist/commonjs/components/MiniLineChart.js +3 -58
  65. package/dist/commonjs/components/NetworkIcons.d.ts +7 -0
  66. package/dist/commonjs/components/NetworkIcons.js +479 -997
  67. package/dist/commonjs/components/QRCodeView.js +5 -79
  68. package/dist/commonjs/components/SectionHeader.js +15 -37
  69. package/dist/commonjs/components/SegmentedTabs.js +7 -61
  70. package/dist/commonjs/components/SkeletonPlaceholder.js +11 -180
  71. package/dist/commonjs/components/Slider.js +15 -243
  72. package/dist/commonjs/components/SourcePageCard.js +30 -89
  73. package/dist/commonjs/components/Toast.js +5 -147
  74. package/dist/commonjs/components/TouchableScale.js +3 -24
  75. package/dist/commonjs/components/TreeNode.js +55 -130
  76. package/dist/commonjs/console.js +1 -16
  77. package/dist/commonjs/constants/index.js +1 -32
  78. package/dist/commonjs/constants/telemetryConfig.js +1 -6
  79. package/dist/commonjs/constants/version.d.ts +1 -1
  80. package/dist/commonjs/constants/version.js +1 -4
  81. package/dist/commonjs/crash.js +1 -23
  82. package/dist/commonjs/customHooks/analyticsLogger.js +1 -250
  83. package/dist/commonjs/customHooks/bundleAnalyzer.js +1 -957
  84. package/dist/commonjs/customHooks/consoleLogger.js +6 -445
  85. package/dist/commonjs/customHooks/crashHandler.js +7 -656
  86. package/dist/commonjs/customHooks/logFilters.js +1 -23
  87. package/dist/commonjs/customHooks/networkLogger.js +2 -536
  88. package/dist/commonjs/customHooks/performanceTracker.js +63 -750
  89. package/dist/commonjs/customHooks/reduxLogger.js +2 -313
  90. package/dist/commonjs/customHooks/storageInspector.js +1 -435
  91. package/dist/commonjs/customHooks/useAccordion.js +1 -18
  92. package/dist/commonjs/decorators/index.js +1 -100
  93. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +1 -148
  94. package/dist/commonjs/helpers/index.js +8 -921
  95. package/dist/commonjs/helpers/memoryManager.js +1 -99
  96. package/dist/commonjs/helpers/qrGenerator.js +1 -367
  97. package/dist/commonjs/helpers/remoteConfig.js +1 -165
  98. package/dist/commonjs/helpers/searchQueryParser.js +1 -62
  99. package/dist/commonjs/helpers/settingsStore.js +1 -144
  100. package/dist/commonjs/helpers/telemetry.js +1 -501
  101. package/dist/commonjs/helpers/toast.js +1 -20
  102. package/dist/commonjs/i18n/index.js +1 -90
  103. package/dist/commonjs/i18n/locales/en.json +1 -1122
  104. package/dist/commonjs/index.js +5 -2153
  105. package/dist/commonjs/metro.js +6 -468
  106. package/dist/commonjs/native/NativeInspector.d.ts +3 -0
  107. package/dist/commonjs/native/NativeInspector.js +1 -402
  108. package/dist/commonjs/native/NativeNetworkInspector.d.ts +1 -0
  109. package/dist/commonjs/native/NativeNetworkInspector.js +1 -4
  110. package/dist/commonjs/network.js +1 -13
  111. package/dist/commonjs/performance.js +1 -29
  112. package/dist/commonjs/redux.js +1 -20
  113. package/dist/commonjs/storage.js +1 -14
  114. package/dist/commonjs/styles/AppColors.js +1 -423
  115. package/dist/commonjs/styles/AppFonts.js +1 -17
  116. package/dist/commonjs/styles/common.js +1 -190
  117. package/dist/commonjs/styles/index.d.ts +6 -0
  118. package/dist/commonjs/styles/index.js +1 -1589
  119. package/dist/commonjs/types/enums.d.ts +2 -1
  120. package/dist/commonjs/types/enums.js +1 -150
  121. package/dist/commonjs/types/index.js +1 -18
  122. package/dist/commonjs/types/interfaces.d.ts +7 -0
  123. package/dist/commonjs/types/interfaces.js +1 -2
  124. package/dist/esm/analytics.js +1 -2
  125. package/dist/esm/bundle.js +1 -2
  126. package/dist/esm/capture.d.ts +2 -0
  127. package/dist/esm/capture.js +1 -29
  128. package/dist/esm/components/AnalyticsDetail.js +171 -664
  129. package/dist/esm/components/AnalyticsEventCard.js +77 -335
  130. package/dist/esm/components/AnalyticsGraph.js +95 -357
  131. package/dist/esm/components/AnimatedEntrance.js +1 -6
  132. package/dist/esm/components/AppHeaderLogo.js +7 -94
  133. package/dist/esm/components/BrandCircleIcon.js +114 -119
  134. package/dist/esm/components/BrandSquareIcon.js +73 -78
  135. package/dist/esm/components/CodeSnippet.js +58 -595
  136. package/dist/esm/components/ConsoleLogCard.js +91 -526
  137. package/dist/esm/components/CopyButton.js +3 -51
  138. package/dist/esm/components/DiffViewer.js +22 -48
  139. package/dist/esm/components/DomainHeader.js +43 -138
  140. package/dist/esm/components/EmptyState.d.ts +1 -0
  141. package/dist/esm/components/EmptyState.js +17 -56
  142. package/dist/esm/components/EndOfListFooter.js +15 -83
  143. package/dist/esm/components/ErrorBoundary.js +125 -582
  144. package/dist/esm/components/HeadersSection.js +52 -93
  145. package/dist/esm/components/HighlightText.js +17 -53
  146. package/dist/esm/components/Inspector/AboutModal.d.ts +6 -0
  147. package/dist/esm/components/Inspector/AboutModal.js +351 -0
  148. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +225 -886
  149. package/dist/esm/components/Inspector/AnalyticsTab.js +296 -904
  150. package/dist/esm/components/Inspector/BundleTab.js +1175 -3502
  151. package/dist/esm/components/Inspector/ConsoleTab.js +113 -488
  152. package/dist/esm/components/Inspector/CrashDetail.js +236 -747
  153. package/dist/esm/components/Inspector/CrashFilterModal.js +149 -541
  154. package/dist/esm/components/Inspector/CrashTab.js +177 -711
  155. package/dist/esm/components/Inspector/DebuggingTab.js +156 -923
  156. package/dist/esm/components/Inspector/DeviceInfoTab.js +199 -924
  157. package/dist/esm/components/Inspector/FabLauncher.js +85 -49
  158. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +14 -70
  159. package/dist/esm/components/Inspector/FeedbackModal.d.ts +9 -0
  160. package/dist/esm/components/Inspector/FeedbackModal.js +182 -499
  161. package/dist/esm/components/Inspector/InspectorContext.js +1 -12
  162. package/dist/esm/components/Inspector/InspectorHeader.js +309 -1145
  163. package/dist/esm/components/Inspector/LogDetail.js +235 -1023
  164. package/dist/esm/components/Inspector/MainScreen.js +86 -320
  165. package/dist/esm/components/Inspector/MediaGalleryTab.js +157 -259
  166. package/dist/esm/components/Inspector/MediaPreviewModal.js +153 -340
  167. package/dist/esm/components/Inspector/NavigationTracker.js +1 -10
  168. package/dist/esm/components/Inspector/NetworkDetail.js +141 -472
  169. package/dist/esm/components/Inspector/NetworkFilterModal.js +122 -597
  170. package/dist/esm/components/Inspector/NetworkTab.js +125 -517
  171. package/dist/esm/components/Inspector/NpmStarPrompt.js +58 -434
  172. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -281
  173. package/dist/esm/components/Inspector/PerformanceTab.js +393 -1570
  174. package/dist/esm/components/Inspector/ReduxDetail.js +307 -1170
  175. package/dist/esm/components/Inspector/ReduxTab.js +144 -722
  176. package/dist/esm/components/Inspector/SettingsPanel.js +647 -3609
  177. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +30 -163
  178. package/dist/esm/components/Inspector/StorageTab.js +172 -866
  179. package/dist/esm/components/Inspector/TabBar.js +52 -183
  180. package/dist/esm/components/Inspector/UpdateAvailableModal.js +79 -416
  181. package/dist/esm/components/JsonViewer.js +179 -353
  182. package/dist/esm/components/LogCard.js +93 -565
  183. package/dist/esm/components/LogSyntaxHighlighter.js +11 -123
  184. package/dist/esm/components/MetaAccordion.js +136 -267
  185. package/dist/esm/components/MiniBarChart.js +3 -18
  186. package/dist/esm/components/MiniLineChart.js +3 -20
  187. package/dist/esm/components/NetworkIcons.d.ts +7 -0
  188. package/dist/esm/components/NetworkIcons.js +481 -817
  189. package/dist/esm/components/QRCodeView.js +8 -45
  190. package/dist/esm/components/SectionHeader.js +22 -39
  191. package/dist/esm/components/SegmentedTabs.js +8 -57
  192. package/dist/esm/components/SkeletonPlaceholder.js +30 -163
  193. package/dist/esm/components/Slider.js +24 -213
  194. package/dist/esm/components/SourcePageCard.js +65 -86
  195. package/dist/esm/components/Toast.js +10 -117
  196. package/dist/esm/components/TouchableScale.js +3 -19
  197. package/dist/esm/components/TreeNode.js +58 -95
  198. package/dist/esm/console.js +1 -2
  199. package/dist/esm/constants/index.js +1 -28
  200. package/dist/esm/constants/telemetryConfig.js +1 -3
  201. package/dist/esm/constants/version.d.ts +1 -1
  202. package/dist/esm/constants/version.js +1 -1
  203. package/dist/esm/crash.js +1 -2
  204. package/dist/esm/customHooks/analyticsLogger.js +1 -230
  205. package/dist/esm/customHooks/bundleAnalyzer.js +1 -944
  206. package/dist/esm/customHooks/consoleLogger.js +6 -432
  207. package/dist/esm/customHooks/crashHandler.js +7 -630
  208. package/dist/esm/customHooks/logFilters.js +1 -20
  209. package/dist/esm/customHooks/networkLogger.js +2 -519
  210. package/dist/esm/customHooks/performanceTracker.js +63 -723
  211. package/dist/esm/customHooks/reduxLogger.js +2 -293
  212. package/dist/esm/customHooks/storageInspector.js +1 -418
  213. package/dist/esm/customHooks/useAccordion.js +1 -16
  214. package/dist/esm/decorators/index.js +1 -95
  215. package/dist/esm/helpers/gaAnalyticsRegistry.js +1 -143
  216. package/dist/esm/helpers/index.js +8 -861
  217. package/dist/esm/helpers/memoryManager.js +1 -91
  218. package/dist/esm/helpers/qrGenerator.js +1 -364
  219. package/dist/esm/helpers/remoteConfig.js +1 -160
  220. package/dist/esm/helpers/searchQueryParser.js +1 -59
  221. package/dist/esm/helpers/settingsStore.js +1 -134
  222. package/dist/esm/helpers/telemetry.js +1 -489
  223. package/dist/esm/helpers/toast.js +1 -15
  224. package/dist/esm/i18n/index.js +1 -78
  225. package/dist/esm/i18n/locales/en.json +1 -1122
  226. package/dist/esm/index.js +7 -1967
  227. package/dist/esm/metro.js +6 -459
  228. package/dist/esm/native/NativeInspector.d.ts +3 -0
  229. package/dist/esm/native/NativeInspector.js +1 -370
  230. package/dist/esm/native/NativeNetworkInspector.d.ts +1 -0
  231. package/dist/esm/native/NativeNetworkInspector.js +1 -2
  232. package/dist/esm/network.js +1 -1
  233. package/dist/esm/performance.js +1 -2
  234. package/dist/esm/redux.js +1 -1
  235. package/dist/esm/storage.js +1 -1
  236. package/dist/esm/styles/AppColors.js +1 -417
  237. package/dist/esm/styles/AppFonts.js +1 -13
  238. package/dist/esm/styles/common.js +1 -186
  239. package/dist/esm/styles/index.d.ts +6 -0
  240. package/dist/esm/styles/index.js +1 -1551
  241. package/dist/esm/types/enums.d.ts +2 -1
  242. package/dist/esm/types/enums.js +1 -147
  243. package/dist/esm/types/index.js +1 -2
  244. package/dist/esm/types/interfaces.d.ts +7 -0
  245. package/dist/esm/types/interfaces.js +1 -1
  246. package/ios/NetworkInspectorModule.mm +253 -136
  247. package/package.json +5 -3
  248. package/react-native-inapp-inspector.podspec +1 -1
  249. package/src/native/NativeInspector.ts +17 -0
  250. package/src/native/NativeNetworkInspector.ts +1 -0
  251. package/src/analytics.ts +0 -35
  252. package/src/bundle.ts +0 -25
  253. package/src/capture.ts +0 -101
  254. package/src/components/AnalyticsDetail.tsx +0 -870
  255. package/src/components/AnalyticsEventCard.tsx +0 -444
  256. package/src/components/AnalyticsGraph.tsx +0 -583
  257. package/src/components/AnimatedEntrance.tsx +0 -20
  258. package/src/components/AppHeaderLogo.tsx +0 -143
  259. package/src/components/BrandCircleIcon.tsx +0 -144
  260. package/src/components/BrandSquareIcon.tsx +0 -184
  261. package/src/components/CodeSnippet.tsx +0 -725
  262. package/src/components/ConsoleLogCard.tsx +0 -679
  263. package/src/components/CopyButton.tsx +0 -87
  264. package/src/components/DiffViewer.tsx +0 -82
  265. package/src/components/DomainHeader.tsx +0 -224
  266. package/src/components/EmptyState.tsx +0 -95
  267. package/src/components/EndOfListFooter.tsx +0 -100
  268. package/src/components/ErrorBoundary.tsx +0 -688
  269. package/src/components/HeadersSection.tsx +0 -172
  270. package/src/components/HighlightText.tsx +0 -100
  271. package/src/components/Inspector/AnalyticsFilterModal.tsx +0 -1250
  272. package/src/components/Inspector/AnalyticsTab.tsx +0 -1362
  273. package/src/components/Inspector/BundleTab.tsx +0 -4768
  274. package/src/components/Inspector/ConsoleTab.tsx +0 -726
  275. package/src/components/Inspector/CrashDetail.tsx +0 -997
  276. package/src/components/Inspector/CrashFilterModal.tsx +0 -721
  277. package/src/components/Inspector/CrashTab.tsx +0 -933
  278. package/src/components/Inspector/DebuggingTab.tsx +0 -1103
  279. package/src/components/Inspector/DeviceInfoTab.tsx +0 -1397
  280. package/src/components/Inspector/FabLauncher.tsx +0 -80
  281. package/src/components/Inspector/FeatureUnderDevNotice.tsx +0 -94
  282. package/src/components/Inspector/FeedbackModal.tsx +0 -626
  283. package/src/components/Inspector/InspectorContext.tsx +0 -28
  284. package/src/components/Inspector/InspectorHeader.tsx +0 -1545
  285. package/src/components/Inspector/LogDetail.tsx +0 -1431
  286. package/src/components/Inspector/MainScreen.tsx +0 -459
  287. package/src/components/Inspector/MediaGalleryTab.tsx +0 -355
  288. package/src/components/Inspector/MediaPreviewModal.tsx +0 -435
  289. package/src/components/Inspector/NavigationTracker.tsx +0 -13
  290. package/src/components/Inspector/NetworkDetail.tsx +0 -795
  291. package/src/components/Inspector/NetworkFilterModal.tsx +0 -730
  292. package/src/components/Inspector/NetworkTab.tsx +0 -820
  293. package/src/components/Inspector/NpmStarPrompt.tsx +0 -532
  294. package/src/components/Inspector/NpmUpdateToast.tsx +0 -387
  295. package/src/components/Inspector/PerformanceTab.tsx +0 -1967
  296. package/src/components/Inspector/ReduxDetail.tsx +0 -1651
  297. package/src/components/Inspector/ReduxTab.tsx +0 -987
  298. package/src/components/Inspector/SettingsPanel.tsx +0 -4580
  299. package/src/components/Inspector/SkeletonPlaceholder.tsx +0 -206
  300. package/src/components/Inspector/StorageTab.tsx +0 -1159
  301. package/src/components/Inspector/TabBar.tsx +0 -263
  302. package/src/components/Inspector/UpdateAvailableModal.tsx +0 -555
  303. package/src/components/JsonViewer.tsx +0 -547
  304. package/src/components/LogCard.tsx +0 -694
  305. package/src/components/LogSyntaxHighlighter.tsx +0 -178
  306. package/src/components/MetaAccordion.tsx +0 -355
  307. package/src/components/MiniBarChart.tsx +0 -42
  308. package/src/components/MiniLineChart.tsx +0 -33
  309. package/src/components/NetworkIcons.tsx +0 -2599
  310. package/src/components/QRCodeView.tsx +0 -75
  311. package/src/components/SectionHeader.tsx +0 -101
  312. package/src/components/SegmentedTabs.tsx +0 -83
  313. package/src/components/SkeletonPlaceholder.tsx +0 -206
  314. package/src/components/Slider.tsx +0 -300
  315. package/src/components/SourcePageCard.tsx +0 -150
  316. package/src/components/Toast.tsx +0 -131
  317. package/src/components/TouchableScale.tsx +0 -61
  318. package/src/components/TreeNode.tsx +0 -171
  319. package/src/console.ts +0 -24
  320. package/src/constants/index.ts +0 -41
  321. package/src/constants/telemetryConfig.ts +0 -4
  322. package/src/constants/version.ts +0 -3
  323. package/src/crash.ts +0 -32
  324. package/src/customHooks/analyticsLogger.ts +0 -336
  325. package/src/customHooks/bundleAnalyzer.ts +0 -1256
  326. package/src/customHooks/consoleLogger.ts +0 -530
  327. package/src/customHooks/crashHandler.ts +0 -944
  328. package/src/customHooks/logFilters.ts +0 -32
  329. package/src/customHooks/networkLogger.ts +0 -624
  330. package/src/customHooks/performanceTracker.ts +0 -1014
  331. package/src/customHooks/reduxLogger.ts +0 -406
  332. package/src/customHooks/storageInspector.ts +0 -513
  333. package/src/customHooks/useAccordion.tsx +0 -27
  334. package/src/decorators/index.ts +0 -184
  335. package/src/helpers/gaAnalyticsRegistry.ts +0 -204
  336. package/src/helpers/index.ts +0 -1092
  337. package/src/helpers/memoryManager.ts +0 -138
  338. package/src/helpers/qrGenerator.ts +0 -430
  339. package/src/helpers/remoteConfig.ts +0 -212
  340. package/src/helpers/searchQueryParser.ts +0 -84
  341. package/src/helpers/settingsStore.ts +0 -171
  342. package/src/helpers/telemetry.ts +0 -568
  343. package/src/helpers/toast.ts +0 -17
  344. package/src/i18n/index.ts +0 -104
  345. package/src/i18n/locales/en.json +0 -1125
  346. package/src/index.tsx +0 -2635
  347. package/src/metro.ts +0 -598
  348. package/src/network.ts +0 -22
  349. package/src/performance.ts +0 -38
  350. package/src/redux.ts +0 -23
  351. package/src/storage.ts +0 -18
  352. package/src/styles/AppColors.ts +0 -455
  353. package/src/styles/AppFonts.ts +0 -26
  354. package/src/styles/common.ts +0 -209
  355. package/src/styles/index.ts +0 -1606
  356. package/src/types/enums.ts +0 -208
  357. package/src/types/index.ts +0 -34
  358. package/src/types/interfaces.ts +0 -530
@@ -1,949 +1,288 @@
1
- import React, { useEffect, useMemo, useState } from 'react';
2
- import { Modal, Pressable, ScrollView, StyleSheet, Text, TouchableOpacity, View, } from 'react-native';
3
- import { useInspector } from './InspectorContext';
4
- import { AppColors } from '../../styles/AppColors';
5
- import { AppFonts } from '../../styles/AppFonts';
6
- import { getEventCategory } from '../../helpers';
7
- import { FilterIcon, CloseWhite, CheckIcon, CartIcon, GlobeIcon, BoltIcon, SparkleIcon, MoneyIcon, ClockIcon, HourglassIcon, FlameIcon, PinIcon, RepeatIcon, TargetGoalIcon, UserIcon, UserCheckIcon, PackageBoxIcon, CodeBracketsIcon, } from '../NetworkIcons';
8
- import TouchableScale from '../TouchableScale';
9
- const DEFAULT_FILTERS = {
10
- categories: new Set(['all']),
11
- screens: new Set(),
12
- sources: new Set(['all']),
13
- userTypes: new Set(['all']),
14
- timeWindow: 'all',
15
- payloadComplexity: 'all',
16
- hasRevenue: false,
17
- hasItems: false,
18
- hasUserProps: false,
19
- hasParams: false,
20
- onlyDuplicates: false,
21
- onlyConversions: false,
22
- sortBy: 'time_desc',
23
- };
24
- const AnalyticsFilterModal = ({ visible, onClose, }) => {
25
- const { analyticsEvents, analyticsSearch, analyticsFilters, setAnalyticsFilters, } = useInspector();
26
- const [draft, setDraft] = useState(() => ({
27
- ...analyticsFilters,
28
- categories: new Set(analyticsFilters.categories),
29
- screens: new Set(analyticsFilters.screens),
30
- sources: new Set(analyticsFilters.sources || ['all']),
31
- userTypes: new Set(analyticsFilters.userTypes || ['all']),
32
- }));
33
- useEffect(() => {
34
- if (visible) {
35
- setDraft({
36
- ...analyticsFilters,
37
- categories: new Set(analyticsFilters.categories),
38
- screens: new Set(analyticsFilters.screens),
39
- sources: new Set(analyticsFilters.sources || ['all']),
40
- userTypes: new Set(analyticsFilters.userTypes || ['all']),
41
- });
42
- }
43
- }, [visible, analyticsFilters]);
44
- const uniqueScreens = useMemo(() => {
45
- const screens = new Set();
46
- for (const e of analyticsEvents) {
47
- const scr = e.screenName ||
48
- e.params?.firebase_screen ||
49
- e.params?.screen_name ||
50
- e.params?.firebase_screen_class ||
51
- e.screenClass;
52
- if (scr && typeof scr === 'string' && scr.trim() !== '') {
53
- screens.add(scr.trim());
54
- }
55
- }
56
- return Array.from(screens);
57
- }, [analyticsEvents]);
58
- const toggleCategory = (cat) => {
59
- setDraft(prev => {
60
- const next = new Set(prev.categories);
61
- if (cat === 'all') {
62
- return { ...prev, categories: new Set(['all']) };
63
- }
64
- next.delete('all');
65
- if (next.has(cat)) {
66
- next.delete(cat);
67
- if (next.size === 0)
68
- next.add('all');
69
- }
70
- else {
71
- next.add(cat);
72
- }
73
- return { ...prev, categories: next };
74
- });
75
- };
76
- const toggleScreen = (scr) => {
77
- setDraft(prev => {
78
- const next = new Set(prev.screens);
79
- if (next.has(scr)) {
80
- next.delete(scr);
81
- }
82
- else {
83
- next.add(scr);
84
- }
85
- return { ...prev, screens: next };
86
- });
87
- };
88
- const toggleSource = (src) => {
89
- setDraft(prev => {
90
- const next = new Set(prev.sources);
91
- if (src === 'all') {
92
- return { ...prev, sources: new Set(['all']) };
93
- }
94
- next.delete('all');
95
- if (next.has(src)) {
96
- next.delete(src);
97
- if (next.size === 0)
98
- next.add('all');
99
- }
100
- else {
101
- next.add(src);
102
- }
103
- return { ...prev, sources: next };
104
- });
105
- };
106
- const toggleUserType = (ut) => {
107
- setDraft(prev => {
108
- const next = new Set(prev.userTypes);
109
- if (ut === 'all') {
110
- return { ...prev, userTypes: new Set(['all']) };
111
- }
112
- next.delete('all');
113
- if (next.has(ut)) {
114
- next.delete(ut);
115
- if (next.size === 0)
116
- next.add('all');
117
- }
118
- else {
119
- next.add(ut);
120
- }
121
- return { ...prev, userTypes: next };
122
- });
123
- };
124
- const toggleFlag = (key) => {
125
- setDraft(prev => ({
126
- ...prev,
127
- [key]: !prev[key],
128
- }));
129
- };
130
- const setTimeWindow = (tw) => {
131
- setDraft(prev => ({ ...prev, timeWindow: tw }));
132
- };
133
- const setPayloadComplexity = (pc) => {
134
- setDraft(prev => ({ ...prev, payloadComplexity: pc }));
135
- };
136
- const setSort = (sortBy) => {
137
- setDraft(prev => ({ ...prev, sortBy }));
138
- };
139
- const handleResetDraft = () => {
140
- setDraft({
141
- categories: new Set(['all']),
142
- screens: new Set(),
143
- sources: new Set(['all']),
144
- userTypes: new Set(['all']),
145
- timeWindow: 'all',
146
- payloadComplexity: 'all',
147
- hasRevenue: false,
148
- hasItems: false,
149
- hasUserProps: false,
150
- hasParams: false,
151
- onlyDuplicates: false,
152
- onlyConversions: false,
153
- sortBy: 'time_desc',
154
- });
155
- };
156
- const handleApply = () => {
157
- setAnalyticsFilters({
158
- ...draft,
159
- categories: new Set(draft.categories),
160
- screens: new Set(draft.screens),
161
- sources: new Set(draft.sources),
162
- userTypes: new Set(draft.userTypes),
163
- });
164
- onClose();
165
- };
166
- const handleDiscard = () => {
167
- setDraft({
168
- ...analyticsFilters,
169
- categories: new Set(analyticsFilters.categories),
170
- screens: new Set(analyticsFilters.screens),
171
- sources: new Set(analyticsFilters.sources || ['all']),
172
- userTypes: new Set(analyticsFilters.userTypes || ['all']),
173
- });
174
- onClose();
175
- };
176
- const draftMatchCount = useMemo(() => {
177
- let events = analyticsEvents;
178
- if (analyticsSearch) {
179
- const s = analyticsSearch.toLowerCase();
180
- events = events.filter(e => e.name.toLowerCase().includes(s) ||
181
- JSON.stringify(e.params || {}).toLowerCase().includes(s) ||
182
- (e.screenName ?? '').toLowerCase().includes(s) ||
183
- (e.pageTitle ?? '').toLowerCase().includes(s));
184
- }
185
- if (draft.categories.size > 0 && !draft.categories.has('all')) {
186
- events = events.filter(e => {
187
- const cat = getEventCategory(e.name);
188
- return draft.categories.has(cat);
189
- });
190
- }
191
- if (draft.timeWindow !== 'all') {
192
- const now = Date.now();
193
- const cutoff = draft.timeWindow === '1m'
194
- ? now - 60 * 1000
195
- : draft.timeWindow === '5m'
196
- ? now - 5 * 60 * 1000
197
- : draft.timeWindow === '15m'
198
- ? now - 15 * 60 * 1000
199
- : now - 60 * 60 * 1000;
200
- events = events.filter(e => e.timestamp >= cutoff);
201
- }
202
- if (draft.sources.size > 0 && !draft.sources.has('all')) {
203
- events = events.filter(e => draft.sources.has(e.source || 'manual'));
204
- }
205
- if (draft.userTypes.size > 0 && !draft.userTypes.has('all')) {
206
- events = events.filter(e => {
207
- const isIdentified = Boolean(e.userId && e.userId.trim() !== '');
208
- if (draft.userTypes.has('identified') && isIdentified)
209
- return true;
210
- if (draft.userTypes.has('anonymous') && !isIdentified)
211
- return true;
212
- return false;
213
- });
214
- }
215
- if (draft.payloadComplexity !== 'all') {
216
- events = events.filter(e => {
217
- const count = e.params ? Object.keys(e.params).length : 0;
218
- if (draft.payloadComplexity === 'none')
219
- return count === 0;
220
- if (draft.payloadComplexity === 'simple')
221
- return count >= 1 && count <= 5;
222
- if (draft.payloadComplexity === 'heavy')
223
- return count > 5;
224
- return true;
225
- });
226
- }
227
- if (draft.onlyConversions) {
228
- const CONVERSION_PATTERNS = [
229
- 'purchase',
230
- 'item_purchase',
231
- 'ecommerce_purchase',
232
- 'sign_up',
233
- 'login',
234
- 'lead',
235
- 'generate_lead',
236
- 'tutorial_complete',
237
- 'add_payment_info',
238
- 'begin_checkout',
239
- ];
240
- events = events.filter(e => CONVERSION_PATTERNS.some(pat => e.name.toLowerCase().includes(pat)));
241
- }
242
- if (draft.screens.size > 0) {
243
- events = events.filter(e => {
244
- const scr = e.screenName ||
245
- e.params?.firebase_screen ||
246
- e.params?.screen_name ||
247
- e.params?.firebase_screen_class ||
248
- e.screenClass ||
249
- '';
250
- return draft.screens.has(scr);
251
- });
252
- }
253
- if (draft.hasRevenue) {
254
- events = events.filter(e => {
255
- const val = e.params?.value ?? e.params?.price;
256
- return val !== undefined && val !== null && Number(val) > 0;
257
- });
258
- }
259
- if (draft.hasItems) {
260
- events = events.filter(e => Array.isArray(e.params?.items) && e.params.items.length > 0);
261
- }
262
- if (draft.hasUserProps) {
263
- events = events.filter(e => e.userProperties && Object.keys(e.userProperties).length > 0);
264
- }
265
- if (draft.hasParams) {
266
- events = events.filter(e => e.params && Object.keys(e.params).length > 0);
267
- }
268
- return events.length;
269
- }, [analyticsEvents, analyticsSearch, draft]);
270
- const isAllCategories = draft.categories.has('all') || draft.categories.size === 0;
271
- const isAllSources = draft.sources.has('all') || draft.sources.size === 0;
272
- const isAllUserTypes = draft.userTypes.has('all') || draft.userTypes.size === 0;
273
- return (<Modal visible={visible} transparent animationType="fade" onRequestClose={handleDiscard}>
274
- <View style={styles.backdrop}>
275
- <Pressable style={StyleSheet.absoluteFill} onPress={handleDiscard}/>
1
+ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as Ce,Pressable as Ae,ScrollView as Ie,StyleSheet as Y,Text as T,TouchableOpacity as R,View as P}from"react-native";import{useInspector as ze}from"./InspectorContext";import{AppColors as l}from"../../styles/AppColors";import{AppFonts as A}from"../../styles/AppFonts";import{getEventCategory as Be}from"../../helpers";import{FilterIcon as Ve,CloseWhite as Re,CheckIcon as L,CartIcon as We,GlobeIcon as _e,BoltIcon as Z,SparkleIcon as J,MoneyIcon as M,ClockIcon as $,HourglassIcon as Oe,FlameIcon as Ee,PinIcon as K,RepeatIcon as De,TargetGoalIcon as X,UserIcon as Q,UserCheckIcon as Fe,PackageBoxIcon as Ue,CodeBracketsIcon as Te}from"../NetworkIcons";import S from"../TouchableScale";const Je={categories:new Set(["all"]),screens:new Set,sources:new Set(["all"]),userTypes:new Set(["all"]),timeWindow:"all",payloadComplexity:"all",hasRevenue:!1,hasItems:!1,hasUserProps:!1,hasParams:!1,onlyDuplicates:!1,onlyConversions:!1,sortBy:"time_desc"},He=({visible:W,onClose:G})=>{const{analyticsEvents:z,analyticsSearch:_,analyticsFilters:v,setAnalyticsFilters:pe}=ze(),[t,C]=ve(()=>({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])}));Se(()=>{W&&C({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])})},[W,v]);const O=q(()=>{const s=new Set;for(const i of z){const r=i.screenName||i.params?.firebase_screen||i.params?.screen_name||i.params?.firebase_screen_class||i.screenClass;r&&typeof r=="string"&&r.trim()!==""&&s.add(r.trim())}return Array.from(s)},[z]),I=s=>{C(i=>{const r=new Set(i.categories);return s==="all"?{...i,categories:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,categories:r})})},me=s=>{C(i=>{const r=new Set(i.screens);return r.has(s)?r.delete(s):r.add(s),{...i,screens:r}})},E=s=>{C(i=>{const r=new Set(i.sources);return s==="all"?{...i,sources:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,sources:r})})},D=s=>{C(i=>{const r=new Set(i.userTypes);return s==="all"?{...i,userTypes:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,userTypes:r})})},k=s=>{C(i=>({...i,[s]:!i[s]}))},Pe=s=>{C(i=>({...i,timeWindow:s}))},we=s=>{C(i=>({...i,payloadComplexity:s}))},B=s=>{C(i=>({...i,sortBy:s}))},ge=()=>{C({categories:new Set(["all"]),screens:new Set,sources:new Set(["all"]),userTypes:new Set(["all"]),timeWindow:"all",payloadComplexity:"all",hasRevenue:!1,hasItems:!1,hasUserProps:!1,hasParams:!1,onlyDuplicates:!1,onlyConversions:!1,sortBy:"time_desc"})},xe=()=>{pe({...t,categories:new Set(t.categories),screens:new Set(t.screens),sources:new Set(t.sources),userTypes:new Set(t.userTypes)}),G()},V=()=>{C({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])}),G()},be=q(()=>{let s=z;if(_){const i=_.toLowerCase();s=s.filter(r=>r.name.toLowerCase().includes(i)||JSON.stringify(r.params||{}).toLowerCase().includes(i)||(r.screenName??"").toLowerCase().includes(i)||(r.pageTitle??"").toLowerCase().includes(i))}if(t.categories.size>0&&!t.categories.has("all")&&(s=s.filter(i=>{const r=Be(i.name);return t.categories.has(r)})),t.timeWindow!=="all"){const i=Date.now(),r=t.timeWindow==="1m"?i-60*1e3:t.timeWindow==="5m"?i-300*1e3:t.timeWindow==="15m"?i-900*1e3:i-3600*1e3;s=s.filter(N=>N.timestamp>=r)}if(t.sources.size>0&&!t.sources.has("all")&&(s=s.filter(i=>t.sources.has(i.source||"manual"))),t.userTypes.size>0&&!t.userTypes.has("all")&&(s=s.filter(i=>{const r=!!(i.userId&&i.userId.trim()!=="");return!!(t.userTypes.has("identified")&&r||t.userTypes.has("anonymous")&&!r)})),t.payloadComplexity!=="all"&&(s=s.filter(i=>{const r=i.params?Object.keys(i.params).length:0;return t.payloadComplexity==="none"?r===0:t.payloadComplexity==="simple"?r>=1&&r<=5:t.payloadComplexity==="heavy"?r>5:!0})),t.onlyConversions){const i=["purchase","item_purchase","ecommerce_purchase","sign_up","login","lead","generate_lead","tutorial_complete","add_payment_info","begin_checkout"];s=s.filter(r=>i.some(N=>r.name.toLowerCase().includes(N)))}return t.screens.size>0&&(s=s.filter(i=>{const r=i.screenName||i.params?.firebase_screen||i.params?.screen_name||i.params?.firebase_screen_class||i.screenClass||"";return t.screens.has(r)})),t.hasRevenue&&(s=s.filter(i=>{const r=i.params?.value??i.params?.price;return r!=null&&Number(r)>0})),t.hasItems&&(s=s.filter(i=>Array.isArray(i.params?.items)&&i.params.items.length>0)),t.hasUserProps&&(s=s.filter(i=>i.userProperties&&Object.keys(i.userProperties).length>0)),t.hasParams&&(s=s.filter(i=>i.params&&Object.keys(i.params).length>0)),s.length},[z,_,t]),F=t.categories.has("all")||t.categories.size===0,U=t.sources.has("all")||t.sources.size===0,H=t.userTypes.has("all")||t.userTypes.size===0;return<Ce visible={W}transparent animationType="fade"onRequestClose={V}>
2
+ <P style={e.backdrop}>
3
+ <Ae style={Y.absoluteFill}onPress={V}/>
276
4
 
277
- <View style={styles.modalCard}>
5
+ <P style={e.modalCard}>
278
6
 
279
- <View style={styles.header}>
280
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
281
- <View style={styles.headerIconBox}>
282
- <FilterIcon color={AppColors.brandPurple} size={15}/>
283
- </View>
284
- <View>
285
- <Text style={styles.headerTitle}>Analytics Filters</Text>
286
- <Text style={styles.headerSubtitle}>
7
+ <P style={e.header}>
8
+ <P style={{flexDirection:"row",alignItems:"center",gap:8}}>
9
+ <P style={e.headerIconBox}>
10
+ <Ve color={l.brandPurple}size={15}/>
11
+ </P>
12
+ <P>
13
+ <T style={e.headerTitle}>Analytics Filters</T>
14
+ <T style={e.headerSubtitle}>
287
15
  GA4 Telemetry Dimensions & Metrics
288
- </Text>
289
- </View>
290
- </View>
16
+ </T>
17
+ </P>
18
+ </P>
291
19
 
292
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
293
- <TouchableOpacity onPress={handleResetDraft} hitSlop={8} style={styles.resetBtn}>
294
- <Text style={styles.resetBtnText}>Reset All</Text>
295
- </TouchableOpacity>
20
+ <P style={{flexDirection:"row",alignItems:"center",gap:8}}>
21
+ <R onPress={ge}hitSlop={8}style={e.resetBtn}>
22
+ <T style={e.resetBtnText}>Reset All</T>
23
+ </R>
296
24
 
297
- <TouchableOpacity onPress={handleDiscard} hitSlop={10} style={styles.closeBtn}>
298
- <CloseWhite />
299
- </TouchableOpacity>
300
- </View>
301
- </View>
25
+ <R onPress={V}hitSlop={10}style={e.closeBtn}>
26
+ <Re/>
27
+ </R>
28
+ </P>
29
+ </P>
302
30
 
303
31
 
304
- <ScrollView style={{ maxHeight: 460 }} contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={true}>
32
+ <Ie style={{maxHeight:460}}contentContainerStyle={e.scrollContent}showsVerticalScrollIndicator={!0}>
305
33
 
306
- <View style={styles.section}>
307
- <View style={styles.sectionHeaderRow}>
308
- <ClockIcon color={AppColors.grayTextWeak} size={12}/>
309
- <Text style={styles.sectionTitle}>TIME HORIZON</Text>
310
- </View>
311
- <View style={styles.chipsWrap}>
312
- {[
313
- { key: 'all', label: 'All Time' },
314
- { key: '1m', label: 'Last 1 min' },
315
- { key: '5m', label: 'Last 5 mins' },
316
- { key: '15m', label: 'Last 15 mins' },
317
- { key: '1h', label: 'Last 1 hour' },
318
- ].map(item => (<TouchableScale key={item.key} onPress={() => setTimeWindow(item.key)} style={[
319
- styles.filterPill,
320
- draft.timeWindow === item.key &&
321
- styles.filterPillActive,
322
- ]}>
323
- <Text style={[
324
- styles.filterPillText,
325
- draft.timeWindow === item.key &&
326
- styles.filterPillTextActive,
327
- ]}>
328
- {item.label}
329
- </Text>
330
- </TouchableScale>))}
331
- </View>
332
- </View>
34
+ <P style={e.section}>
35
+ <P style={e.sectionHeaderRow}>
36
+ <$ color={l.grayTextWeak}size={12}/>
37
+ <T style={e.sectionTitle}>TIME HORIZON</T>
38
+ </P>
39
+ <P style={e.chipsWrap}>
40
+ {[{key:"all",label:"All Time"},{key:"1m",label:"Last 1 min"},{key:"5m",label:"Last 5 mins"},{key:"15m",label:"Last 15 mins"},{key:"1h",label:"Last 1 hour"}].map(s=><S key={s.key}onPress={()=>Pe(s.key)}style={[e.filterPill,t.timeWindow===s.key&&e.filterPillActive]}>
41
+ <T style={[e.filterPillText,t.timeWindow===s.key&&e.filterPillTextActive]}>
42
+ {s.label}
43
+ </T>
44
+ </S>)}
45
+ </P>
46
+ </P>
333
47
 
334
48
 
335
- <View style={styles.section}>
336
- <View style={styles.sectionHeaderRow}>
337
- <TargetGoalIcon color={AppColors.grayTextWeak} size={12}/>
338
- <Text style={styles.sectionTitle}>EVENT CATEGORIES</Text>
339
- </View>
340
- <View style={styles.chipsWrap}>
341
- <TouchableScale onPress={() => toggleCategory('all')} style={[
342
- styles.filterPill,
343
- isAllCategories && styles.filterPillActive,
344
- ]}>
345
- {isAllCategories && (<CheckIcon color={AppColors.white} size={12}/>)}
346
- <Text style={[
347
- styles.filterPillText,
348
- isAllCategories && styles.filterPillTextActive,
349
- ]}>
49
+ <P style={e.section}>
50
+ <P style={e.sectionHeaderRow}>
51
+ <X color={l.grayTextWeak}size={12}/>
52
+ <T style={e.sectionTitle}>EVENT CATEGORIES</T>
53
+ </P>
54
+ <P style={e.chipsWrap}>
55
+ <S onPress={()=>I("all")}style={[e.filterPill,F&&e.filterPillActive]}>
56
+ {F&&<L color={l.white}size={12}/>}
57
+ <T style={[e.filterPillText,F&&e.filterPillTextActive]}>
350
58
  All Categories
351
- </Text>
352
- </TouchableScale>
59
+ </T>
60
+ </S>
353
61
 
354
- <TouchableScale onPress={() => toggleCategory('ecommerce')} style={[
355
- styles.filterPill,
356
- draft.categories.has('ecommerce') &&
357
- styles.filterPillActive,
358
- ]}>
359
- <CartIcon color={draft.categories.has('ecommerce')
360
- ? AppColors.white
361
- : AppColors.amber700} size={13}/>
362
- <Text style={[
363
- styles.filterPillText,
364
- draft.categories.has('ecommerce') &&
365
- styles.filterPillTextActive,
366
- ]}>
62
+ <S onPress={()=>I("ecommerce")}style={[e.filterPill,t.categories.has("ecommerce")&&e.filterPillActive]}>
63
+ <We color={t.categories.has("ecommerce")?l.white:l.amber700}size={13}/>
64
+ <T style={[e.filterPillText,t.categories.has("ecommerce")&&e.filterPillTextActive]}>
367
65
  Ecommerce
368
- </Text>
369
- </TouchableScale>
66
+ </T>
67
+ </S>
370
68
 
371
- <TouchableScale onPress={() => toggleCategory('page_view')} style={[
372
- styles.filterPill,
373
- draft.categories.has('page_view') &&
374
- styles.filterPillActive,
375
- ]}>
376
- <GlobeIcon color={draft.categories.has('page_view')
377
- ? AppColors.white
378
- : AppColors.sky600} size={13}/>
379
- <Text style={[
380
- styles.filterPillText,
381
- draft.categories.has('page_view') &&
382
- styles.filterPillTextActive,
383
- ]}>
69
+ <S onPress={()=>I("page_view")}style={[e.filterPill,t.categories.has("page_view")&&e.filterPillActive]}>
70
+ <_e color={t.categories.has("page_view")?l.white:l.sky600}size={13}/>
71
+ <T style={[e.filterPillText,t.categories.has("page_view")&&e.filterPillTextActive]}>
384
72
  Screens & Pages
385
- </Text>
386
- </TouchableScale>
73
+ </T>
74
+ </S>
387
75
 
388
- <TouchableScale onPress={() => toggleCategory('system')} style={[
389
- styles.filterPill,
390
- draft.categories.has('system') &&
391
- styles.filterPillActive,
392
- ]}>
393
- <BoltIcon color={draft.categories.has('system')
394
- ? AppColors.white
395
- : AppColors.purple} size={13}/>
396
- <Text style={[
397
- styles.filterPillText,
398
- draft.categories.has('system') &&
399
- styles.filterPillTextActive,
400
- ]}>
76
+ <S onPress={()=>I("system")}style={[e.filterPill,t.categories.has("system")&&e.filterPillActive]}>
77
+ <Z color={t.categories.has("system")?l.white:l.purple}size={13}/>
78
+ <T style={[e.filterPillText,t.categories.has("system")&&e.filterPillTextActive]}>
401
79
  System & Lifecycle
402
- </Text>
403
- </TouchableScale>
80
+ </T>
81
+ </S>
404
82
 
405
- <TouchableScale onPress={() => toggleCategory('custom')} style={[
406
- styles.filterPill,
407
- draft.categories.has('custom') &&
408
- styles.filterPillActive,
409
- ]}>
410
- <SparkleIcon color={draft.categories.has('custom')
411
- ? AppColors.white
412
- : AppColors.brandPurple} size={13}/>
413
- <Text style={[
414
- styles.filterPillText,
415
- draft.categories.has('custom') &&
416
- styles.filterPillTextActive,
417
- ]}>
83
+ <S onPress={()=>I("custom")}style={[e.filterPill,t.categories.has("custom")&&e.filterPillActive]}>
84
+ <J color={t.categories.has("custom")?l.white:l.brandPurple}size={13}/>
85
+ <T style={[e.filterPillText,t.categories.has("custom")&&e.filterPillTextActive]}>
418
86
  Custom Events
419
- </Text>
420
- </TouchableScale>
421
- </View>
422
- </View>
87
+ </T>
88
+ </S>
89
+ </P>
90
+ </P>
423
91
 
424
92
 
425
- <View style={styles.section}>
426
- <View style={styles.sectionHeaderRow}>
427
- <MoneyIcon color={AppColors.grayTextWeak} size={12}/>
428
- <Text style={styles.sectionTitle}>
93
+ <P style={e.section}>
94
+ <P style={e.sectionHeaderRow}>
95
+ <M color={l.grayTextWeak}size={12}/>
96
+ <T style={e.sectionTitle}>
429
97
  MONETIZATION & ATTRIBUTES
430
- </Text>
431
- </View>
432
- <View style={styles.chipsWrap}>
433
- <TouchableScale onPress={() => toggleFlag('onlyConversions')} style={[
434
- styles.filterPill,
435
- draft.onlyConversions && styles.filterPillActive,
436
- ]}>
437
- <TargetGoalIcon color={draft.onlyConversions
438
- ? AppColors.white
439
- : AppColors.brandPurple} size={13}/>
440
- <Text style={[
441
- styles.filterPillText,
442
- draft.onlyConversions && styles.filterPillTextActive,
443
- ]}>
98
+ </T>
99
+ </P>
100
+ <P style={e.chipsWrap}>
101
+ <S onPress={()=>k("onlyConversions")}style={[e.filterPill,t.onlyConversions&&e.filterPillActive]}>
102
+ <X color={t.onlyConversions?l.white:l.brandPurple}size={13}/>
103
+ <T style={[e.filterPillText,t.onlyConversions&&e.filterPillTextActive]}>
444
104
  Conversion Events Only
445
- </Text>
446
- </TouchableScale>
105
+ </T>
106
+ </S>
447
107
 
448
- <TouchableScale onPress={() => toggleFlag('hasRevenue')} style={[
449
- styles.filterPill,
450
- draft.hasRevenue && styles.filterPillActive,
451
- ]}>
452
- <MoneyIcon color={draft.hasRevenue
453
- ? AppColors.white
454
- : AppColors.emerald600} size={13}/>
455
- <Text style={[
456
- styles.filterPillText,
457
- draft.hasRevenue && styles.filterPillTextActive,
458
- ]}>
108
+ <S onPress={()=>k("hasRevenue")}style={[e.filterPill,t.hasRevenue&&e.filterPillActive]}>
109
+ <M color={t.hasRevenue?l.white:l.emerald600}size={13}/>
110
+ <T style={[e.filterPillText,t.hasRevenue&&e.filterPillTextActive]}>
459
111
  With Revenue (Value &gt; 0)
460
- </Text>
461
- </TouchableScale>
112
+ </T>
113
+ </S>
462
114
 
463
- <TouchableScale onPress={() => toggleFlag('hasItems')} style={[
464
- styles.filterPill,
465
- draft.hasItems && styles.filterPillActive,
466
- ]}>
467
- <PackageBoxIcon color={draft.hasItems
468
- ? AppColors.white
469
- : AppColors.amber700} size={13}/>
470
- <Text style={[
471
- styles.filterPillText,
472
- draft.hasItems && styles.filterPillTextActive,
473
- ]}>
115
+ <S onPress={()=>k("hasItems")}style={[e.filterPill,t.hasItems&&e.filterPillActive]}>
116
+ <Ue color={t.hasItems?l.white:l.amber700}size={13}/>
117
+ <T style={[e.filterPillText,t.hasItems&&e.filterPillTextActive]}>
474
118
  With Items Payload
475
- </Text>
476
- </TouchableScale>
119
+ </T>
120
+ </S>
477
121
 
478
- <TouchableScale onPress={() => toggleFlag('hasUserProps')} style={[
479
- styles.filterPill,
480
- draft.hasUserProps && styles.filterPillActive,
481
- ]}>
482
- <SparkleIcon color={draft.hasUserProps
483
- ? AppColors.white
484
- : AppColors.brandPurple} size={13}/>
485
- <Text style={[
486
- styles.filterPillText,
487
- draft.hasUserProps && styles.filterPillTextActive,
488
- ]}>
122
+ <S onPress={()=>k("hasUserProps")}style={[e.filterPill,t.hasUserProps&&e.filterPillActive]}>
123
+ <J color={t.hasUserProps?l.white:l.brandPurple}size={13}/>
124
+ <T style={[e.filterPillText,t.hasUserProps&&e.filterPillTextActive]}>
489
125
  With User Properties
490
- </Text>
491
- </TouchableScale>
126
+ </T>
127
+ </S>
492
128
 
493
- <TouchableScale onPress={() => toggleFlag('hasParams')} style={[
494
- styles.filterPill,
495
- draft.hasParams && styles.filterPillActive,
496
- ]}>
497
- <CodeBracketsIcon color={draft.hasParams
498
- ? AppColors.white
499
- : AppColors.grayText} size={13}/>
500
- <Text style={[
501
- styles.filterPillText,
502
- draft.hasParams && styles.filterPillTextActive,
503
- ]}>
129
+ <S onPress={()=>k("hasParams")}style={[e.filterPill,t.hasParams&&e.filterPillActive]}>
130
+ <Te color={t.hasParams?l.white:l.grayText}size={13}/>
131
+ <T style={[e.filterPillText,t.hasParams&&e.filterPillTextActive]}>
504
132
  With Custom Params
505
- </Text>
506
- </TouchableScale>
133
+ </T>
134
+ </S>
507
135
 
508
- <TouchableScale onPress={() => toggleFlag('onlyDuplicates')} style={[
509
- styles.filterPill,
510
- draft.onlyDuplicates && styles.filterPillActive,
511
- ]}>
512
- <RepeatIcon color={draft.onlyDuplicates
513
- ? AppColors.white
514
- : AppColors.rose600} size={13}/>
515
- <Text style={[
516
- styles.filterPillText,
517
- draft.onlyDuplicates && styles.filterPillTextActive,
518
- ]}>
136
+ <S onPress={()=>k("onlyDuplicates")}style={[e.filterPill,t.onlyDuplicates&&e.filterPillActive]}>
137
+ <De color={t.onlyDuplicates?l.white:l.rose600}size={13}/>
138
+ <T style={[e.filterPillText,t.onlyDuplicates&&e.filterPillTextActive]}>
519
139
  Frequent Only (&gt; 1×)
520
- </Text>
521
- </TouchableScale>
522
- </View>
523
- </View>
140
+ </T>
141
+ </S>
142
+ </P>
143
+ </P>
524
144
 
525
145
 
526
- <View style={styles.section}>
527
- <View style={styles.sectionHeaderRow}>
528
- <UserIcon color={AppColors.grayTextWeak} size={12}/>
529
- <Text style={styles.sectionTitle}>USER IDENTIFICATION</Text>
530
- </View>
531
- <View style={styles.chipsWrap}>
532
- <TouchableScale onPress={() => toggleUserType('all')} style={[
533
- styles.filterPill,
534
- isAllUserTypes && styles.filterPillActive,
535
- ]}>
536
- {isAllUserTypes && (<CheckIcon color={AppColors.white} size={12}/>)}
537
- <Text style={[
538
- styles.filterPillText,
539
- isAllUserTypes && styles.filterPillTextActive,
540
- ]}>
146
+ <P style={e.section}>
147
+ <P style={e.sectionHeaderRow}>
148
+ <Q color={l.grayTextWeak}size={12}/>
149
+ <T style={e.sectionTitle}>USER IDENTIFICATION</T>
150
+ </P>
151
+ <P style={e.chipsWrap}>
152
+ <S onPress={()=>D("all")}style={[e.filterPill,H&&e.filterPillActive]}>
153
+ {H&&<L color={l.white}size={12}/>}
154
+ <T style={[e.filterPillText,H&&e.filterPillTextActive]}>
541
155
  All Users
542
- </Text>
543
- </TouchableScale>
156
+ </T>
157
+ </S>
544
158
 
545
- <TouchableScale onPress={() => toggleUserType('identified')} style={[
546
- styles.filterPill,
547
- draft.userTypes.has('identified') &&
548
- styles.filterPillActive,
549
- ]}>
550
- <UserCheckIcon color={draft.userTypes.has('identified')
551
- ? AppColors.white
552
- : AppColors.greenColor} size={13}/>
553
- <Text style={[
554
- styles.filterPillText,
555
- draft.userTypes.has('identified') &&
556
- styles.filterPillTextActive,
557
- ]}>
159
+ <S onPress={()=>D("identified")}style={[e.filterPill,t.userTypes.has("identified")&&e.filterPillActive]}>
160
+ <Fe color={t.userTypes.has("identified")?l.white:l.greenColor}size={13}/>
161
+ <T style={[e.filterPillText,t.userTypes.has("identified")&&e.filterPillTextActive]}>
558
162
  Identified (User ID)
559
- </Text>
560
- </TouchableScale>
163
+ </T>
164
+ </S>
561
165
 
562
- <TouchableScale onPress={() => toggleUserType('anonymous')} style={[
563
- styles.filterPill,
564
- draft.userTypes.has('anonymous') &&
565
- styles.filterPillActive,
566
- ]}>
567
- <UserIcon color={draft.userTypes.has('anonymous')
568
- ? AppColors.white
569
- : AppColors.grayTextWeak} size={13}/>
570
- <Text style={[
571
- styles.filterPillText,
572
- draft.userTypes.has('anonymous') &&
573
- styles.filterPillTextActive,
574
- ]}>
166
+ <S onPress={()=>D("anonymous")}style={[e.filterPill,t.userTypes.has("anonymous")&&e.filterPillActive]}>
167
+ <Q color={t.userTypes.has("anonymous")?l.white:l.grayTextWeak}size={13}/>
168
+ <T style={[e.filterPillText,t.userTypes.has("anonymous")&&e.filterPillTextActive]}>
575
169
  Anonymous
576
- </Text>
577
- </TouchableScale>
578
- </View>
579
- </View>
170
+ </T>
171
+ </S>
172
+ </P>
173
+ </P>
580
174
 
581
175
 
582
- <View style={styles.section}>
583
- <View style={styles.sectionHeaderRow}>
584
- <BoltIcon color={AppColors.grayTextWeak} size={12}/>
585
- <Text style={styles.sectionTitle}>EVENT SOURCE</Text>
586
- </View>
587
- <View style={styles.chipsWrap}>
588
- <TouchableScale onPress={() => toggleSource('all')} style={[
589
- styles.filterPill,
590
- isAllSources && styles.filterPillActive,
591
- ]}>
592
- {isAllSources && (<CheckIcon color={AppColors.white} size={12}/>)}
593
- <Text style={[
594
- styles.filterPillText,
595
- isAllSources && styles.filterPillTextActive,
596
- ]}>
176
+ <P style={e.section}>
177
+ <P style={e.sectionHeaderRow}>
178
+ <Z color={l.grayTextWeak}size={12}/>
179
+ <T style={e.sectionTitle}>EVENT SOURCE</T>
180
+ </P>
181
+ <P style={e.chipsWrap}>
182
+ <S onPress={()=>E("all")}style={[e.filterPill,U&&e.filterPillActive]}>
183
+ {U&&<L color={l.white}size={12}/>}
184
+ <T style={[e.filterPillText,U&&e.filterPillTextActive]}>
597
185
  All Sources
598
- </Text>
599
- </TouchableScale>
186
+ </T>
187
+ </S>
600
188
 
601
- <TouchableScale onPress={() => toggleSource('firebase')} style={[
602
- styles.filterPill,
603
- draft.sources.has('firebase') &&
604
- styles.filterPillActive,
605
- ]}>
606
- <Text style={[
607
- styles.filterPillText,
608
- draft.sources.has('firebase') &&
609
- styles.filterPillTextActive,
610
- ]}>
189
+ <S onPress={()=>E("firebase")}style={[e.filterPill,t.sources.has("firebase")&&e.filterPillActive]}>
190
+ <T style={[e.filterPillText,t.sources.has("firebase")&&e.filterPillTextActive]}>
611
191
  Firebase / GA SDK
612
- </Text>
613
- </TouchableScale>
192
+ </T>
193
+ </S>
614
194
 
615
- <TouchableScale onPress={() => toggleSource('manual')} style={[
616
- styles.filterPill,
617
- draft.sources.has('manual') &&
618
- styles.filterPillActive,
619
- ]}>
620
- <Text style={[
621
- styles.filterPillText,
622
- draft.sources.has('manual') &&
623
- styles.filterPillTextActive,
624
- ]}>
195
+ <S onPress={()=>E("manual")}style={[e.filterPill,t.sources.has("manual")&&e.filterPillActive]}>
196
+ <T style={[e.filterPillText,t.sources.has("manual")&&e.filterPillTextActive]}>
625
197
  In-App Logger
626
- </Text>
627
- </TouchableScale>
628
- </View>
629
- </View>
198
+ </T>
199
+ </S>
200
+ </P>
201
+ </P>
630
202
 
631
203
 
632
- <View style={styles.section}>
633
- <View style={styles.sectionHeaderRow}>
634
- <CodeBracketsIcon color={AppColors.grayTextWeak} size={12}/>
635
- <Text style={styles.sectionTitle}>PAYLOAD COMPLEXITY</Text>
636
- </View>
637
- <View style={styles.chipsWrap}>
638
- {[
639
- { key: 'all', label: 'All Payloads' },
640
- { key: 'none', label: '0 Params' },
641
- { key: 'simple', label: '1 - 5 Params' },
642
- { key: 'heavy', label: '> 5 Params' },
643
- ].map(item => (<TouchableScale key={item.key} onPress={() => setPayloadComplexity(item.key)} style={[
644
- styles.filterPill,
645
- draft.payloadComplexity === item.key &&
646
- styles.filterPillActive,
647
- ]}>
648
- <Text style={[
649
- styles.filterPillText,
650
- draft.payloadComplexity === item.key &&
651
- styles.filterPillTextActive,
652
- ]}>
653
- {item.label}
654
- </Text>
655
- </TouchableScale>))}
656
- </View>
657
- </View>
204
+ <P style={e.section}>
205
+ <P style={e.sectionHeaderRow}>
206
+ <Te color={l.grayTextWeak}size={12}/>
207
+ <T style={e.sectionTitle}>PAYLOAD COMPLEXITY</T>
208
+ </P>
209
+ <P style={e.chipsWrap}>
210
+ {[{key:"all",label:"All Payloads"},{key:"none",label:"0 Params"},{key:"simple",label:"1 - 5 Params"},{key:"heavy",label:"> 5 Params"}].map(s=><S key={s.key}onPress={()=>we(s.key)}style={[e.filterPill,t.payloadComplexity===s.key&&e.filterPillActive]}>
211
+ <T style={[e.filterPillText,t.payloadComplexity===s.key&&e.filterPillTextActive]}>
212
+ {s.label}
213
+ </T>
214
+ </S>)}
215
+ </P>
216
+ </P>
658
217
 
659
218
 
660
- {uniqueScreens.length > 0 && (<View style={styles.section}>
661
- <View style={styles.sectionHeaderRow}>
662
- <PinIcon color={AppColors.grayTextWeak} size={12}/>
663
- <Text style={styles.sectionTitle}>
664
- DISCOVERED SCREENS ({uniqueScreens.length})
665
- </Text>
666
- </View>
667
- <View style={styles.chipsWrap}>
668
- {uniqueScreens.map(scr => {
669
- const isSelected = draft.screens.has(scr);
670
- return (<TouchableScale key={scr} onPress={() => toggleScreen(scr)} style={[
671
- styles.filterPill,
672
- isSelected && styles.filterPillActive,
673
- ]}>
674
- <PinIcon color={isSelected
675
- ? AppColors.white
676
- : AppColors.amber700} size={12}/>
677
- <Text style={[
678
- styles.filterPillText,
679
- isSelected && styles.filterPillTextActive,
680
- ]}>
681
- {scr}
682
- </Text>
683
- </TouchableScale>);
684
- })}
685
- </View>
686
- </View>)}
219
+ {O.length>0&&<P style={e.section}>
220
+ <P style={e.sectionHeaderRow}>
221
+ <K color={l.grayTextWeak}size={12}/>
222
+ <T style={e.sectionTitle}>
223
+ DISCOVERED SCREENS ({O.length})
224
+ </T>
225
+ </P>
226
+ <P style={e.chipsWrap}>
227
+ {O.map(s=>{const i=t.screens.has(s);return<S key={s}onPress={()=>me(s)}style={[e.filterPill,i&&e.filterPillActive]}>
228
+ <K color={i?l.white:l.amber700}size={12}/>
229
+ <T style={[e.filterPillText,i&&e.filterPillTextActive]}>
230
+ {s}
231
+ </T>
232
+ </S>})}
233
+ </P>
234
+ </P>}
687
235
 
688
236
 
689
- <View style={styles.section}>
690
- <View style={styles.sectionHeaderRow}>
691
- <ClockIcon color={AppColors.grayTextWeak} size={12}/>
692
- <Text style={styles.sectionTitle}>SORT ORDER</Text>
693
- </View>
694
- <View style={styles.chipsWrap}>
695
- <TouchableScale onPress={() => setSort('time_desc')} style={[
696
- styles.filterPill,
697
- draft.sortBy === 'time_desc' &&
698
- styles.filterPillActive,
699
- ]}>
700
- <ClockIcon color={draft.sortBy === 'time_desc'
701
- ? AppColors.white
702
- : AppColors.grayText} size={12}/>
703
- <Text style={[
704
- styles.filterPillText,
705
- draft.sortBy === 'time_desc' &&
706
- styles.filterPillTextActive,
707
- ]}>
237
+ <P style={e.section}>
238
+ <P style={e.sectionHeaderRow}>
239
+ <$ color={l.grayTextWeak}size={12}/>
240
+ <T style={e.sectionTitle}>SORT ORDER</T>
241
+ </P>
242
+ <P style={e.chipsWrap}>
243
+ <S onPress={()=>B("time_desc")}style={[e.filterPill,t.sortBy==="time_desc"&&e.filterPillActive]}>
244
+ <$ color={t.sortBy==="time_desc"?l.white:l.grayText}size={12}/>
245
+ <T style={[e.filterPillText,t.sortBy==="time_desc"&&e.filterPillTextActive]}>
708
246
  Newest First (Default)
709
- </Text>
710
- </TouchableScale>
247
+ </T>
248
+ </S>
711
249
 
712
- <TouchableScale onPress={() => setSort('time_asc')} style={[
713
- styles.filterPill,
714
- draft.sortBy === 'time_asc' &&
715
- styles.filterPillActive,
716
- ]}>
717
- <HourglassIcon color={draft.sortBy === 'time_asc'
718
- ? AppColors.white
719
- : AppColors.grayText} size={12}/>
720
- <Text style={[
721
- styles.filterPillText,
722
- draft.sortBy === 'time_asc' &&
723
- styles.filterPillTextActive,
724
- ]}>
250
+ <S onPress={()=>B("time_asc")}style={[e.filterPill,t.sortBy==="time_asc"&&e.filterPillActive]}>
251
+ <Oe color={t.sortBy==="time_asc"?l.white:l.grayText}size={12}/>
252
+ <T style={[e.filterPillText,t.sortBy==="time_asc"&&e.filterPillTextActive]}>
725
253
  Oldest First
726
- </Text>
727
- </TouchableScale>
254
+ </T>
255
+ </S>
728
256
 
729
- <TouchableScale onPress={() => setSort('revenue_desc')} style={[
730
- styles.filterPill,
731
- draft.sortBy === 'revenue_desc' &&
732
- styles.filterPillActive,
733
- ]}>
734
- <MoneyIcon color={draft.sortBy === 'revenue_desc'
735
- ? AppColors.white
736
- : AppColors.emerald600} size={12}/>
737
- <Text style={[
738
- styles.filterPillText,
739
- draft.sortBy === 'revenue_desc' &&
740
- styles.filterPillTextActive,
741
- ]}>
257
+ <S onPress={()=>B("revenue_desc")}style={[e.filterPill,t.sortBy==="revenue_desc"&&e.filterPillActive]}>
258
+ <M color={t.sortBy==="revenue_desc"?l.white:l.emerald600}size={12}/>
259
+ <T style={[e.filterPillText,t.sortBy==="revenue_desc"&&e.filterPillTextActive]}>
742
260
  Highest Revenue
743
- </Text>
744
- </TouchableScale>
261
+ </T>
262
+ </S>
745
263
 
746
- <TouchableScale onPress={() => setSort('count_desc')} style={[
747
- styles.filterPill,
748
- draft.sortBy === 'count_desc' &&
749
- styles.filterPillActive,
750
- ]}>
751
- <FlameIcon color={draft.sortBy === 'count_desc'
752
- ? AppColors.white
753
- : AppColors.darkOrange} size={12}/>
754
- <Text style={[
755
- styles.filterPillText,
756
- draft.sortBy === 'count_desc' &&
757
- styles.filterPillTextActive,
758
- ]}>
264
+ <S onPress={()=>B("count_desc")}style={[e.filterPill,t.sortBy==="count_desc"&&e.filterPillActive]}>
265
+ <Ee color={t.sortBy==="count_desc"?l.white:l.darkOrange}size={12}/>
266
+ <T style={[e.filterPillText,t.sortBy==="count_desc"&&e.filterPillTextActive]}>
759
267
  Most Frequent
760
- </Text>
761
- </TouchableScale>
762
- </View>
763
- </View>
764
- </ScrollView>
268
+ </T>
269
+ </S>
270
+ </P>
271
+ </P>
272
+ </Ie>
765
273
 
766
274
 
767
- <View style={styles.footer}>
768
- <TouchableOpacity onPress={handleDiscard} style={styles.discardBtn} activeOpacity={0.8}>
769
- <Text style={styles.discardBtnText}>Discard</Text>
770
- </TouchableOpacity>
275
+ <P style={e.footer}>
276
+ <R onPress={V}style={e.discardBtn}activeOpacity={.8}>
277
+ <T style={e.discardBtnText}>Discard</T>
278
+ </R>
771
279
 
772
- <TouchableOpacity onPress={handleApply} style={styles.applyBtn} activeOpacity={0.85}>
773
- <Text style={styles.applyBtnText}>
774
- Apply ({draftMatchCount} Events)
775
- </Text>
776
- </TouchableOpacity>
777
- </View>
778
- </View>
779
- </View>
780
- </Modal>);
781
- };
782
- const styles = StyleSheet.create({
783
- backdrop: {
784
- flex: 1,
785
- backgroundColor: `${AppColors.primaryBlack}85`,
786
- justifyContent: 'center',
787
- alignItems: 'center',
788
- padding: 16,
789
- },
790
- modalCard: {
791
- width: '100%',
792
- maxWidth: 440,
793
- backgroundColor: AppColors.white,
794
- borderRadius: 14,
795
- borderWidth: 1,
796
- borderColor: AppColors.dividerColor,
797
- shadowColor: AppColors.black,
798
- shadowOpacity: 0.18,
799
- shadowRadius: 12,
800
- shadowOffset: { width: 0, height: 4 },
801
- elevation: 8,
802
- overflow: 'hidden',
803
- },
804
- header: {
805
- flexDirection: 'row',
806
- alignItems: 'center',
807
- justifyContent: 'space-between',
808
- paddingHorizontal: 14,
809
- paddingVertical: 12,
810
- borderBottomWidth: 1,
811
- borderBottomColor: AppColors.dividerColor,
812
- backgroundColor: `${AppColors.brandPurple}08`,
813
- },
814
- headerIconBox: {
815
- width: 28,
816
- height: 28,
817
- borderRadius: 7,
818
- backgroundColor: `${AppColors.brandPurple}18`,
819
- alignItems: 'center',
820
- justifyContent: 'center',
821
- },
822
- headerTitle: {
823
- fontFamily: AppFonts.interBold,
824
- fontSize: 13.5,
825
- color: AppColors.primaryBlack,
826
- },
827
- headerSubtitle: {
828
- fontFamily: AppFonts.interMedium,
829
- fontSize: 10,
830
- color: AppColors.grayTextWeak,
831
- },
832
- resetBtn: {
833
- paddingHorizontal: 8,
834
- paddingVertical: 4,
835
- borderRadius: 5,
836
- backgroundColor: `${AppColors.darkOrange}14`,
837
- borderWidth: 1,
838
- borderColor: `${AppColors.darkOrange}30`,
839
- },
840
- resetBtnText: {
841
- fontFamily: AppFonts.interBold,
842
- fontSize: 10,
843
- color: AppColors.darkOrange,
844
- },
845
- closeBtn: {
846
- width: 24,
847
- height: 24,
848
- borderRadius: 12,
849
- backgroundColor: `${AppColors.primaryBlack}18`,
850
- alignItems: 'center',
851
- justifyContent: 'center',
852
- },
853
- scrollContent: {
854
- padding: 14,
855
- gap: 14,
856
- },
857
- section: {
858
- gap: 7,
859
- },
860
- sectionHeaderRow: {
861
- flexDirection: 'row',
862
- alignItems: 'center',
863
- gap: 5,
864
- },
865
- sectionTitle: {
866
- fontFamily: AppFonts.interBold,
867
- fontSize: 9.5,
868
- color: AppColors.grayTextWeak,
869
- letterSpacing: 0.5,
870
- },
871
- chipsWrap: {
872
- flexDirection: 'row',
873
- flexWrap: 'wrap',
874
- gap: 6.5,
875
- },
876
- filterPill: {
877
- flexDirection: 'row',
878
- alignItems: 'center',
879
- gap: 5,
880
- paddingHorizontal: 9,
881
- paddingVertical: 5.5,
882
- borderRadius: 7,
883
- backgroundColor: AppColors.grayBackground,
884
- borderWidth: 1,
885
- borderColor: AppColors.dividerColor,
886
- },
887
- filterPillActive: {
888
- backgroundColor: AppColors.brandPurple,
889
- borderColor: AppColors.brandPurple,
890
- shadowColor: AppColors.brandPurple,
891
- shadowOffset: { width: 0, height: 1 },
892
- shadowOpacity: 0.25,
893
- shadowRadius: 3,
894
- elevation: 2,
895
- },
896
- filterPillText: {
897
- fontFamily: AppFonts.interMedium,
898
- fontSize: 11,
899
- color: AppColors.primaryBlack,
900
- },
901
- filterPillTextActive: {
902
- color: AppColors.white,
903
- fontFamily: AppFonts.interBold,
904
- },
905
- footer: {
906
- flexDirection: 'row',
907
- alignItems: 'center',
908
- gap: 10,
909
- paddingHorizontal: 14,
910
- paddingVertical: 12,
911
- borderTopWidth: 1,
912
- borderTopColor: AppColors.dividerColor,
913
- backgroundColor: AppColors.grayBackground,
914
- },
915
- discardBtn: {
916
- flex: 1,
917
- paddingVertical: 9.5,
918
- borderRadius: 8,
919
- borderWidth: 1,
920
- borderColor: AppColors.dividerColor,
921
- backgroundColor: AppColors.white,
922
- alignItems: 'center',
923
- justifyContent: 'center',
924
- },
925
- discardBtnText: {
926
- fontFamily: AppFonts.interBold,
927
- fontSize: 12.5,
928
- color: AppColors.grayTextStrong,
929
- },
930
- applyBtn: {
931
- flex: 2,
932
- backgroundColor: AppColors.brandPurple,
933
- paddingVertical: 9.5,
934
- borderRadius: 8,
935
- alignItems: 'center',
936
- justifyContent: 'center',
937
- shadowColor: AppColors.brandPurple,
938
- shadowOffset: { width: 0, height: 1 },
939
- shadowOpacity: 0.25,
940
- shadowRadius: 3,
941
- elevation: 2,
942
- },
943
- applyBtnText: {
944
- fontFamily: AppFonts.interBold,
945
- fontSize: 12.5,
946
- color: AppColors.white,
947
- },
948
- });
949
- export default AnalyticsFilterModal;
280
+ <R onPress={xe}style={e.applyBtn}activeOpacity={.85}>
281
+ <T style={e.applyBtnText}>
282
+ Apply ({be} Events)
283
+ </T>
284
+ </R>
285
+ </P>
286
+ </P>
287
+ </P>
288
+ </Ce>},e=Y.create({backdrop:{flex:1,backgroundColor:`${l.primaryBlack}85`,justifyContent:"center",alignItems:"center",padding:16},modalCard:{width:"100%",maxWidth:440,backgroundColor:l.white,borderRadius:14,borderWidth:1,borderColor:l.dividerColor,shadowColor:l.black,shadowOpacity:.18,shadowRadius:12,shadowOffset:{width:0,height:4},elevation:8,overflow:"hidden"},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:14,paddingVertical:12,borderBottomWidth:1,borderBottomColor:l.dividerColor,backgroundColor:`${l.brandPurple}08`},headerIconBox:{width:28,height:28,borderRadius:7,backgroundColor:`${l.brandPurple}18`,alignItems:"center",justifyContent:"center"},headerTitle:{fontFamily:A.interBold,fontSize:13.5,color:l.primaryBlack},headerSubtitle:{fontFamily:A.interMedium,fontSize:10,color:l.grayTextWeak},resetBtn:{paddingHorizontal:8,paddingVertical:4,borderRadius:5,backgroundColor:`${l.darkOrange}14`,borderWidth:1,borderColor:`${l.darkOrange}30`},resetBtnText:{fontFamily:A.interBold,fontSize:10,color:l.darkOrange},closeBtn:{width:24,height:24,borderRadius:12,backgroundColor:`${l.primaryBlack}18`,alignItems:"center",justifyContent:"center"},scrollContent:{padding:14,gap:14},section:{gap:7},sectionHeaderRow:{flexDirection:"row",alignItems:"center",gap:5},sectionTitle:{fontFamily:A.interBold,fontSize:9.5,color:l.grayTextWeak,letterSpacing:.5},chipsWrap:{flexDirection:"row",flexWrap:"wrap",gap:6.5},filterPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:5.5,borderRadius:7,backgroundColor:l.grayBackground,borderWidth:1,borderColor:l.dividerColor},filterPillActive:{backgroundColor:l.brandPurple,borderColor:l.brandPurple,shadowColor:l.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:3,elevation:2},filterPillText:{fontFamily:A.interMedium,fontSize:11,color:l.primaryBlack},filterPillTextActive:{color:l.white,fontFamily:A.interBold},footer:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:14,paddingVertical:12,borderTopWidth:1,borderTopColor:l.dividerColor,backgroundColor:l.grayBackground},discardBtn:{flex:1,paddingVertical:9.5,borderRadius:8,borderWidth:1,borderColor:l.dividerColor,backgroundColor:l.white,alignItems:"center",justifyContent:"center"},discardBtnText:{fontFamily:A.interBold,fontSize:12.5,color:l.grayTextStrong},applyBtn:{flex:2,backgroundColor:l.brandPurple,paddingVertical:9.5,borderRadius:8,alignItems:"center",justifyContent:"center",shadowColor:l.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:3,elevation:2},applyBtnText:{fontFamily:A.interBold,fontSize:12.5,color:l.white}});export default He;