react-native-inapp-inspector 2.3.19 → 2.3.21

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 (353) hide show
  1. package/README.md +14 -14
  2. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +67 -0
  3. package/dist/commonjs/analytics.js +1 -24
  4. package/dist/commonjs/bundle.js +1 -16
  5. package/dist/commonjs/capture.js +1 -35
  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.js +10 -87
  19. package/dist/commonjs/components/EndOfListFooter.js +7 -81
  20. package/dist/commonjs/components/ErrorBoundary.js +72 -566
  21. package/dist/commonjs/components/HeadersSection.js +31 -110
  22. package/dist/commonjs/components/HighlightText.js +17 -58
  23. package/dist/commonjs/components/Inspector/AboutModal.d.ts +6 -0
  24. package/dist/commonjs/components/Inspector/AboutModal.js +243 -0
  25. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +98 -797
  26. package/dist/commonjs/components/Inspector/AnalyticsTab.js +284 -930
  27. package/dist/commonjs/components/Inspector/BundleTab.js +551 -2918
  28. package/dist/commonjs/components/Inspector/ConsoleTab.js +79 -492
  29. package/dist/commonjs/components/Inspector/CrashDetail.js +123 -672
  30. package/dist/commonjs/components/Inspector/CrashFilterModal.js +66 -498
  31. package/dist/commonjs/components/Inspector/CrashTab.js +98 -670
  32. package/dist/commonjs/components/Inspector/DebuggingTab.js +74 -875
  33. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +143 -907
  34. package/dist/commonjs/components/Inspector/FabLauncher.js +42 -466
  35. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +6 -99
  36. package/dist/commonjs/components/Inspector/InspectorContext.js +1 -21
  37. package/dist/commonjs/components/Inspector/InspectorHeader.js +191 -1110
  38. package/dist/commonjs/components/Inspector/LogDetail.js +168 -994
  39. package/dist/commonjs/components/Inspector/MainScreen.js +52 -335
  40. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +97 -644
  41. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +90 -605
  42. package/dist/commonjs/components/Inspector/NavigationTracker.js +1 -12
  43. package/dist/commonjs/components/Inspector/NetworkDetail.js +89 -411
  44. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +60 -576
  45. package/dist/commonjs/components/Inspector/NetworkTab.js +84 -514
  46. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +18 -434
  47. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +25 -298
  48. package/dist/commonjs/components/Inspector/PerformanceTab.js +182 -1397
  49. package/dist/commonjs/components/Inspector/ReduxDetail.js +188 -1089
  50. package/dist/commonjs/components/Inspector/ReduxTab.js +85 -701
  51. package/dist/commonjs/components/Inspector/SettingsPanel.js +427 -3807
  52. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +11 -180
  53. package/dist/commonjs/components/Inspector/StorageTab.js +93 -826
  54. package/dist/commonjs/components/Inspector/TabBar.js +36 -334
  55. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +37 -412
  56. package/dist/commonjs/components/JsonViewer.js +168 -381
  57. package/dist/commonjs/components/LogCard.js +57 -567
  58. package/dist/commonjs/components/LogSyntaxHighlighter.js +11 -130
  59. package/dist/commonjs/components/MetaAccordion.js +69 -238
  60. package/dist/commonjs/components/MiniBarChart.js +3 -56
  61. package/dist/commonjs/components/MiniLineChart.js +3 -58
  62. package/dist/commonjs/components/NetworkIcons.d.ts +13 -0
  63. package/dist/commonjs/components/NetworkIcons.js +521 -1022
  64. package/dist/commonjs/components/QRCodeView.js +5 -79
  65. package/dist/commonjs/components/SectionHeader.js +15 -37
  66. package/dist/commonjs/components/SegmentedTabs.js +7 -62
  67. package/dist/commonjs/components/SkeletonPlaceholder.js +11 -180
  68. package/dist/commonjs/components/Slider.js +15 -243
  69. package/dist/commonjs/components/SourcePageCard.js +30 -89
  70. package/dist/commonjs/components/Toast.js +5 -147
  71. package/dist/commonjs/components/TouchableScale.js +3 -24
  72. package/dist/commonjs/components/TreeNode.js +55 -130
  73. package/dist/commonjs/console.js +1 -16
  74. package/dist/commonjs/constants/index.js +1 -32
  75. package/dist/commonjs/constants/telemetryConfig.js +1 -6
  76. package/dist/commonjs/constants/version.d.ts +1 -1
  77. package/dist/commonjs/constants/version.js +1 -4
  78. package/dist/commonjs/crash.js +1 -23
  79. package/dist/commonjs/customHooks/analyticsLogger.js +1 -250
  80. package/dist/commonjs/customHooks/bundleAnalyzer.js +1 -957
  81. package/dist/commonjs/customHooks/consoleLogger.js +6 -445
  82. package/dist/commonjs/customHooks/crashHandler.js +7 -656
  83. package/dist/commonjs/customHooks/logFilters.js +1 -23
  84. package/dist/commonjs/customHooks/networkLogger.js +2 -536
  85. package/dist/commonjs/customHooks/performanceTracker.js +63 -750
  86. package/dist/commonjs/customHooks/reduxLogger.js +2 -313
  87. package/dist/commonjs/customHooks/storageInspector.js +1 -435
  88. package/dist/commonjs/customHooks/useAccordion.js +1 -18
  89. package/dist/commonjs/decorators/index.js +1 -100
  90. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +1 -148
  91. package/dist/commonjs/helpers/index.d.ts +1 -0
  92. package/dist/commonjs/helpers/index.js +8 -921
  93. package/dist/commonjs/helpers/memoryManager.js +1 -99
  94. package/dist/commonjs/helpers/qrGenerator.js +1 -367
  95. package/dist/commonjs/helpers/remoteConfig.js +1 -165
  96. package/dist/commonjs/helpers/searchQueryParser.js +1 -62
  97. package/dist/commonjs/helpers/settingsStore.js +1 -144
  98. package/dist/commonjs/helpers/telemetry.js +1 -501
  99. package/dist/commonjs/helpers/toast.js +1 -20
  100. package/dist/commonjs/i18n/index.js +1 -90
  101. package/dist/commonjs/i18n/locales/en.json +1 -1140
  102. package/dist/commonjs/index.js +5 -2168
  103. package/dist/commonjs/metro.js +6 -468
  104. package/dist/commonjs/native/NativeInspector.d.ts +1 -0
  105. package/dist/commonjs/native/NativeInspector.js +1 -415
  106. package/dist/commonjs/native/NativeNetworkInspector.js +1 -4
  107. package/dist/commonjs/network.js +1 -13
  108. package/dist/commonjs/performance.js +1 -29
  109. package/dist/commonjs/redux.js +1 -20
  110. package/dist/commonjs/storage.js +1 -14
  111. package/dist/commonjs/styles/AppColors.js +1 -423
  112. package/dist/commonjs/styles/AppFonts.js +1 -17
  113. package/dist/commonjs/styles/common.js +1 -190
  114. package/dist/commonjs/styles/index.d.ts +6 -0
  115. package/dist/commonjs/styles/index.js +1 -1589
  116. package/dist/commonjs/types/enums.d.ts +0 -1
  117. package/dist/commonjs/types/enums.js +1 -152
  118. package/dist/commonjs/types/index.js +1 -18
  119. package/dist/commonjs/types/interfaces.d.ts +2 -2
  120. package/dist/commonjs/types/interfaces.js +1 -2
  121. package/dist/esm/analytics.js +1 -2
  122. package/dist/esm/bundle.js +1 -2
  123. package/dist/esm/capture.js +1 -32
  124. package/dist/esm/components/AnalyticsDetail.js +171 -664
  125. package/dist/esm/components/AnalyticsEventCard.js +77 -335
  126. package/dist/esm/components/AnalyticsGraph.js +95 -357
  127. package/dist/esm/components/AnimatedEntrance.js +1 -6
  128. package/dist/esm/components/AppHeaderLogo.js +7 -94
  129. package/dist/esm/components/BrandCircleIcon.js +114 -119
  130. package/dist/esm/components/BrandSquareIcon.js +73 -78
  131. package/dist/esm/components/CodeSnippet.js +58 -595
  132. package/dist/esm/components/ConsoleLogCard.js +91 -526
  133. package/dist/esm/components/CopyButton.js +3 -51
  134. package/dist/esm/components/DiffViewer.js +22 -48
  135. package/dist/esm/components/DomainHeader.js +43 -138
  136. package/dist/esm/components/EmptyState.js +17 -56
  137. package/dist/esm/components/EndOfListFooter.js +15 -83
  138. package/dist/esm/components/ErrorBoundary.js +125 -582
  139. package/dist/esm/components/HeadersSection.js +52 -93
  140. package/dist/esm/components/HighlightText.js +17 -53
  141. package/dist/esm/components/Inspector/AboutModal.d.ts +6 -0
  142. package/dist/esm/components/Inspector/AboutModal.js +243 -0
  143. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +225 -886
  144. package/dist/esm/components/Inspector/AnalyticsTab.js +296 -904
  145. package/dist/esm/components/Inspector/BundleTab.js +1175 -3502
  146. package/dist/esm/components/Inspector/ConsoleTab.js +113 -488
  147. package/dist/esm/components/Inspector/CrashDetail.js +236 -747
  148. package/dist/esm/components/Inspector/CrashFilterModal.js +149 -541
  149. package/dist/esm/components/Inspector/CrashTab.js +177 -711
  150. package/dist/esm/components/Inspector/DebuggingTab.js +164 -925
  151. package/dist/esm/components/Inspector/DeviceInfoTab.js +199 -924
  152. package/dist/esm/components/Inspector/FabLauncher.js +68 -454
  153. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +14 -70
  154. package/dist/esm/components/Inspector/InspectorContext.js +1 -12
  155. package/dist/esm/components/Inspector/InspectorHeader.js +282 -1163
  156. package/dist/esm/components/Inspector/LogDetail.js +235 -1023
  157. package/dist/esm/components/Inspector/MainScreen.js +78 -323
  158. package/dist/esm/components/Inspector/MediaGalleryTab.js +143 -650
  159. package/dist/esm/components/Inspector/MediaPreviewModal.js +138 -613
  160. package/dist/esm/components/Inspector/NavigationTracker.js +1 -10
  161. package/dist/esm/components/Inspector/NetworkDetail.js +138 -455
  162. package/dist/esm/components/Inspector/NetworkFilterModal.js +122 -597
  163. package/dist/esm/components/Inspector/NetworkTab.js +125 -517
  164. package/dist/esm/components/Inspector/NpmStarPrompt.js +58 -434
  165. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -281
  166. package/dist/esm/components/Inspector/PerformanceTab.js +393 -1570
  167. package/dist/esm/components/Inspector/ReduxDetail.js +307 -1170
  168. package/dist/esm/components/Inspector/ReduxTab.js +144 -722
  169. package/dist/esm/components/Inspector/SettingsPanel.js +643 -3985
  170. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +30 -163
  171. package/dist/esm/components/Inspector/StorageTab.js +172 -866
  172. package/dist/esm/components/Inspector/TabBar.js +45 -305
  173. package/dist/esm/components/Inspector/UpdateAvailableModal.js +80 -418
  174. package/dist/esm/components/JsonViewer.js +179 -354
  175. package/dist/esm/components/LogCard.js +93 -565
  176. package/dist/esm/components/LogSyntaxHighlighter.js +11 -123
  177. package/dist/esm/components/MetaAccordion.js +136 -267
  178. package/dist/esm/components/MiniBarChart.js +3 -18
  179. package/dist/esm/components/MiniLineChart.js +3 -20
  180. package/dist/esm/components/NetworkIcons.d.ts +13 -0
  181. package/dist/esm/components/NetworkIcons.js +523 -838
  182. package/dist/esm/components/QRCodeView.js +8 -45
  183. package/dist/esm/components/SectionHeader.js +22 -39
  184. package/dist/esm/components/SegmentedTabs.js +8 -58
  185. package/dist/esm/components/SkeletonPlaceholder.js +30 -163
  186. package/dist/esm/components/Slider.js +24 -213
  187. package/dist/esm/components/SourcePageCard.js +65 -86
  188. package/dist/esm/components/Toast.js +10 -117
  189. package/dist/esm/components/TouchableScale.js +3 -19
  190. package/dist/esm/components/TreeNode.js +58 -95
  191. package/dist/esm/console.js +1 -2
  192. package/dist/esm/constants/index.js +1 -28
  193. package/dist/esm/constants/telemetryConfig.js +1 -3
  194. package/dist/esm/constants/version.d.ts +1 -1
  195. package/dist/esm/constants/version.js +1 -1
  196. package/dist/esm/crash.js +1 -2
  197. package/dist/esm/customHooks/analyticsLogger.js +1 -230
  198. package/dist/esm/customHooks/bundleAnalyzer.js +1 -944
  199. package/dist/esm/customHooks/consoleLogger.js +6 -432
  200. package/dist/esm/customHooks/crashHandler.js +7 -630
  201. package/dist/esm/customHooks/logFilters.js +1 -20
  202. package/dist/esm/customHooks/networkLogger.js +2 -519
  203. package/dist/esm/customHooks/performanceTracker.js +63 -723
  204. package/dist/esm/customHooks/reduxLogger.js +2 -293
  205. package/dist/esm/customHooks/storageInspector.js +1 -418
  206. package/dist/esm/customHooks/useAccordion.js +1 -16
  207. package/dist/esm/decorators/index.js +1 -95
  208. package/dist/esm/helpers/gaAnalyticsRegistry.js +1 -143
  209. package/dist/esm/helpers/index.d.ts +1 -0
  210. package/dist/esm/helpers/index.js +8 -861
  211. package/dist/esm/helpers/memoryManager.js +1 -91
  212. package/dist/esm/helpers/qrGenerator.js +1 -364
  213. package/dist/esm/helpers/remoteConfig.js +1 -160
  214. package/dist/esm/helpers/searchQueryParser.js +1 -59
  215. package/dist/esm/helpers/settingsStore.js +1 -134
  216. package/dist/esm/helpers/telemetry.js +1 -489
  217. package/dist/esm/helpers/toast.js +1 -15
  218. package/dist/esm/i18n/index.js +1 -78
  219. package/dist/esm/i18n/locales/en.json +1 -1140
  220. package/dist/esm/index.js +7 -1982
  221. package/dist/esm/metro.js +6 -459
  222. package/dist/esm/native/NativeInspector.d.ts +1 -0
  223. package/dist/esm/native/NativeInspector.js +1 -382
  224. package/dist/esm/native/NativeNetworkInspector.js +1 -2
  225. package/dist/esm/network.js +1 -1
  226. package/dist/esm/performance.js +1 -2
  227. package/dist/esm/redux.js +1 -1
  228. package/dist/esm/storage.js +1 -1
  229. package/dist/esm/styles/AppColors.js +1 -417
  230. package/dist/esm/styles/AppFonts.js +1 -13
  231. package/dist/esm/styles/common.js +1 -186
  232. package/dist/esm/styles/index.d.ts +6 -0
  233. package/dist/esm/styles/index.js +1 -1551
  234. package/dist/esm/types/enums.d.ts +0 -1
  235. package/dist/esm/types/enums.js +1 -149
  236. package/dist/esm/types/index.js +1 -2
  237. package/dist/esm/types/interfaces.d.ts +2 -2
  238. package/dist/esm/types/interfaces.js +1 -1
  239. package/ios/NetworkInspectorModule.mm +60 -12
  240. package/package.json +5 -3
  241. package/src/native/NativeInspector.ts +18 -0
  242. package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +0 -7
  243. package/dist/commonjs/components/Inspector/FeedbackModal.js +0 -552
  244. package/dist/esm/components/Inspector/FeedbackModal.d.ts +0 -7
  245. package/dist/esm/components/Inspector/FeedbackModal.js +0 -515
  246. package/src/analytics.ts +0 -35
  247. package/src/bundle.ts +0 -25
  248. package/src/capture.ts +0 -109
  249. package/src/components/AnalyticsDetail.tsx +0 -870
  250. package/src/components/AnalyticsEventCard.tsx +0 -444
  251. package/src/components/AnalyticsGraph.tsx +0 -583
  252. package/src/components/AnimatedEntrance.tsx +0 -20
  253. package/src/components/AppHeaderLogo.tsx +0 -143
  254. package/src/components/BrandCircleIcon.tsx +0 -144
  255. package/src/components/BrandSquareIcon.tsx +0 -184
  256. package/src/components/CodeSnippet.tsx +0 -725
  257. package/src/components/ConsoleLogCard.tsx +0 -679
  258. package/src/components/CopyButton.tsx +0 -87
  259. package/src/components/DiffViewer.tsx +0 -82
  260. package/src/components/DomainHeader.tsx +0 -224
  261. package/src/components/EmptyState.tsx +0 -97
  262. package/src/components/EndOfListFooter.tsx +0 -100
  263. package/src/components/ErrorBoundary.tsx +0 -688
  264. package/src/components/HeadersSection.tsx +0 -172
  265. package/src/components/HighlightText.tsx +0 -100
  266. package/src/components/Inspector/AnalyticsFilterModal.tsx +0 -1250
  267. package/src/components/Inspector/AnalyticsTab.tsx +0 -1362
  268. package/src/components/Inspector/BundleTab.tsx +0 -4768
  269. package/src/components/Inspector/ConsoleTab.tsx +0 -726
  270. package/src/components/Inspector/CrashDetail.tsx +0 -997
  271. package/src/components/Inspector/CrashFilterModal.tsx +0 -721
  272. package/src/components/Inspector/CrashTab.tsx +0 -933
  273. package/src/components/Inspector/DebuggingTab.tsx +0 -1103
  274. package/src/components/Inspector/DeviceInfoTab.tsx +0 -1397
  275. package/src/components/Inspector/FabLauncher.tsx +0 -590
  276. package/src/components/Inspector/FeatureUnderDevNotice.tsx +0 -94
  277. package/src/components/Inspector/FeedbackModal.tsx +0 -626
  278. package/src/components/Inspector/InspectorContext.tsx +0 -28
  279. package/src/components/Inspector/InspectorHeader.tsx +0 -1583
  280. package/src/components/Inspector/LogDetail.tsx +0 -1431
  281. package/src/components/Inspector/MainScreen.tsx +0 -460
  282. package/src/components/Inspector/MediaGalleryTab.tsx +0 -829
  283. package/src/components/Inspector/MediaPreviewModal.tsx +0 -783
  284. package/src/components/Inspector/NavigationTracker.tsx +0 -13
  285. package/src/components/Inspector/NetworkDetail.tsx +0 -778
  286. package/src/components/Inspector/NetworkFilterModal.tsx +0 -730
  287. package/src/components/Inspector/NetworkTab.tsx +0 -820
  288. package/src/components/Inspector/NpmStarPrompt.tsx +0 -532
  289. package/src/components/Inspector/NpmUpdateToast.tsx +0 -387
  290. package/src/components/Inspector/PerformanceTab.tsx +0 -1967
  291. package/src/components/Inspector/ReduxDetail.tsx +0 -1651
  292. package/src/components/Inspector/ReduxTab.tsx +0 -987
  293. package/src/components/Inspector/SettingsPanel.tsx +0 -5136
  294. package/src/components/Inspector/SkeletonPlaceholder.tsx +0 -206
  295. package/src/components/Inspector/StorageTab.tsx +0 -1159
  296. package/src/components/Inspector/TabBar.tsx +0 -431
  297. package/src/components/Inspector/UpdateAvailableModal.tsx +0 -555
  298. package/src/components/JsonViewer.tsx +0 -549
  299. package/src/components/LogCard.tsx +0 -694
  300. package/src/components/LogSyntaxHighlighter.tsx +0 -178
  301. package/src/components/MetaAccordion.tsx +0 -355
  302. package/src/components/MiniBarChart.tsx +0 -42
  303. package/src/components/MiniLineChart.tsx +0 -33
  304. package/src/components/NetworkIcons.tsx +0 -2655
  305. package/src/components/QRCodeView.tsx +0 -75
  306. package/src/components/SectionHeader.tsx +0 -101
  307. package/src/components/SegmentedTabs.tsx +0 -84
  308. package/src/components/SkeletonPlaceholder.tsx +0 -206
  309. package/src/components/Slider.tsx +0 -300
  310. package/src/components/SourcePageCard.tsx +0 -150
  311. package/src/components/Toast.tsx +0 -131
  312. package/src/components/TouchableScale.tsx +0 -61
  313. package/src/components/TreeNode.tsx +0 -171
  314. package/src/console.ts +0 -24
  315. package/src/constants/index.ts +0 -41
  316. package/src/constants/telemetryConfig.ts +0 -4
  317. package/src/constants/version.ts +0 -3
  318. package/src/crash.ts +0 -32
  319. package/src/customHooks/analyticsLogger.ts +0 -336
  320. package/src/customHooks/bundleAnalyzer.ts +0 -1256
  321. package/src/customHooks/consoleLogger.ts +0 -530
  322. package/src/customHooks/crashHandler.ts +0 -944
  323. package/src/customHooks/logFilters.ts +0 -32
  324. package/src/customHooks/networkLogger.ts +0 -624
  325. package/src/customHooks/performanceTracker.ts +0 -1014
  326. package/src/customHooks/reduxLogger.ts +0 -406
  327. package/src/customHooks/storageInspector.ts +0 -513
  328. package/src/customHooks/useAccordion.tsx +0 -27
  329. package/src/decorators/index.ts +0 -184
  330. package/src/helpers/gaAnalyticsRegistry.ts +0 -204
  331. package/src/helpers/index.ts +0 -1092
  332. package/src/helpers/memoryManager.ts +0 -138
  333. package/src/helpers/qrGenerator.ts +0 -430
  334. package/src/helpers/remoteConfig.ts +0 -212
  335. package/src/helpers/searchQueryParser.ts +0 -84
  336. package/src/helpers/settingsStore.ts +0 -171
  337. package/src/helpers/telemetry.ts +0 -568
  338. package/src/helpers/toast.ts +0 -17
  339. package/src/i18n/index.ts +0 -104
  340. package/src/i18n/locales/en.json +0 -1141
  341. package/src/index.tsx +0 -2650
  342. package/src/metro.ts +0 -598
  343. package/src/network.ts +0 -22
  344. package/src/performance.ts +0 -38
  345. package/src/redux.ts +0 -23
  346. package/src/storage.ts +0 -18
  347. package/src/styles/AppColors.ts +0 -455
  348. package/src/styles/AppFonts.ts +0 -26
  349. package/src/styles/common.ts +0 -209
  350. package/src/styles/index.ts +0 -1606
  351. package/src/types/enums.ts +0 -210
  352. package/src/types/index.ts +0 -34
  353. package/src/types/interfaces.ts +0 -535
@@ -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;