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,783 +0,0 @@
1
- import React, {useState} from 'react';
2
- import {
3
- Alert,
4
- Dimensions,
5
- Image,
6
- Modal,
7
- Platform,
8
- StyleSheet,
9
- Text,
10
- TouchableOpacity,
11
- View,
12
- } from 'react-native';
13
- import {AppColors} from '../../styles/AppColors';
14
- import {AppFonts} from '../../styles/AppFonts';
15
- import TouchableScale from '../TouchableScale';
16
- import {
17
- ChevronDownIcon,
18
- ExpandCollapseIcon,
19
- FilmIcon,
20
- GifIcon,
21
- ImageIcon,
22
- PauseIcon,
23
- PlayIcon,
24
- RepeatIcon,
25
- TrashIcon,
26
- } from '../NetworkIcons';
27
- import {CapturedMediaItem, ScreenCapture} from '../../capture';
28
- import {formatBytes} from '../../helpers';
29
- import {showToast} from '../../helpers/toast';
30
- import {useTranslation} from '../../i18n';
31
-
32
- interface MediaPreviewModalProps {
33
- item: CapturedMediaItem | null;
34
- visible: boolean;
35
- onClose: () => void;
36
- onDelete: (item: CapturedMediaItem) => void;
37
- onConvertToGif?: (item: CapturedMediaItem) => void;
38
- }
39
-
40
- export const MediaPreviewModal: React.FC<MediaPreviewModalProps> = ({
41
- item,
42
- visible,
43
- onClose,
44
- onDelete,
45
- onConvertToGif,
46
- }) => {
47
- const {t} = useTranslation();
48
- const [isConverting, setIsConverting] = useState(false);
49
- const [imageError, setImageError] = useState(false);
50
- const [isExpanded, setIsExpanded] = useState(false);
51
- const [isPlaying, setIsPlaying] = useState(false);
52
- const [playbackSpeed, setPlaybackSpeed] = useState<'1.0x' | '1.5x' | '2.0x'>('1.0x');
53
- const [isLooping, setIsLooping] = useState(true);
54
- const [scrubPosition, setScrubPosition] = useState(0.4);
55
-
56
- if (!item) return null;
57
-
58
- const handlePlayVideo = async () => {
59
- try {
60
- setIsPlaying(true);
61
- await ScreenCapture.playVideo(item.uri);
62
- } catch {
63
- showToast(t('mediaGallery.playError', 'Unable to play video'));
64
- } finally {
65
- setIsPlaying(false);
66
- }
67
- };
68
-
69
- const handleDelete = () => {
70
- Alert.alert(
71
- t('mediaGallery.deleteTitle'),
72
- t('mediaGallery.deleteMessage', {filename: item.filename}),
73
- [
74
- {text: t('common.cancel'), style: 'cancel'},
75
- {
76
- text: t('mediaGallery.delete'),
77
- style: 'destructive',
78
- onPress: () => {
79
- onDelete(item);
80
- onClose();
81
- },
82
- },
83
- ],
84
- );
85
- };
86
-
87
- const handleConvert = async () => {
88
- if (!onConvertToGif) return;
89
- setIsConverting(true);
90
- try {
91
- await onConvertToGif(item);
92
- showToast(t('mediaGallery.convertedSuccess'));
93
- } catch {
94
- showToast(t('mediaGallery.convertFailed'));
95
- } finally {
96
- setIsConverting(false);
97
- }
98
- };
99
-
100
- const isVideo = item.type === 'video';
101
- const isGif = item.type === 'gif';
102
- const durationSec = item.durationMs ? (item.durationMs / 1000).toFixed(1) : null;
103
- const formattedDuration = durationSec
104
- ? `00:${Number(durationSec) < 10 ? '0' : ''}${durationSec}`
105
- : '00:05.0';
106
- const hasBottomToolbar = isVideo || isGif;
107
-
108
- return (
109
- <Modal
110
- visible={visible}
111
- transparent={true}
112
- animationType="fade"
113
- onRequestClose={onClose}>
114
- <View style={previewStyles.overlay}>
115
- {/* Header Bar */}
116
- <View style={previewStyles.header}>
117
- <View style={previewStyles.headerLeft}>
118
- <View
119
- style={[
120
- previewStyles.badge,
121
- {
122
- borderColor: isVideo
123
- ? `${AppColors.sky400}80`
124
- : isGif
125
- ? `${AppColors.warningAmber}80`
126
- : `${AppColors.emerald500}80`,
127
- backgroundColor: isVideo
128
- ? `${AppColors.sky400}20`
129
- : isGif
130
- ? `${AppColors.warningAmber}20`
131
- : `${AppColors.emerald500}20`,
132
- },
133
- ]}>
134
- {isVideo ? (
135
- <FilmIcon size={13} color={AppColors.sky400} />
136
- ) : isGif ? (
137
- <GifIcon size={13} color={AppColors.warningAmber} />
138
- ) : (
139
- <ImageIcon size={13} color={AppColors.emerald500} />
140
- )}
141
- <Text
142
- style={[
143
- previewStyles.badgeText,
144
- {
145
- color: isVideo
146
- ? AppColors.sky400
147
- : isGif
148
- ? AppColors.warningAmber
149
- : AppColors.emerald500,
150
- },
151
- ]}>
152
- {item.format.toUpperCase()}
153
- </Text>
154
- </View>
155
- <View style={{flex: 1, minWidth: 0}}>
156
- <Text style={previewStyles.title} numberOfLines={1}>
157
- {item.filename}
158
- </Text>
159
- <Text style={previewStyles.subtitle}>
160
- {formatBytes(item.sizeBytes)} • {new Date(item.timestamp).toLocaleTimeString([], {hour: '2-digit', minute: '2-digit', second: '2-digit'})}
161
- </Text>
162
- </View>
163
- </View>
164
-
165
- {/* Top Actions: Delete, Expand/Contract, Minimize */}
166
- <View style={previewStyles.headerRight}>
167
- <TouchableScale
168
- accessible={true}
169
- accessibilityRole="button"
170
- accessibilityLabel={t('mediaGallery.delete')}
171
- onPress={handleDelete}
172
- style={previewStyles.headerDeleteBtn}
173
- hitSlop={{top: 10, bottom: 10, left: 10, right: 10}}>
174
- <TrashIcon size={14} color={AppColors.red500} />
175
- </TouchableScale>
176
-
177
- <TouchableOpacity
178
- accessible={true}
179
- accessibilityRole="button"
180
- accessibilityLabel={isExpanded ? t('mediaGallery.collapse', 'Exit Fullscreen') : t('mediaGallery.expand', 'Expand Fullscreen')}
181
- onPress={() => setIsExpanded(!isExpanded)}
182
- style={[
183
- previewStyles.headerIconBtn,
184
- isExpanded && {backgroundColor: `${AppColors.sky400}30`, borderColor: `${AppColors.sky400}70`},
185
- ]}
186
- hitSlop={{top: 10, bottom: 10, left: 10, right: 10}}>
187
- <ExpandCollapseIcon
188
- size={14}
189
- isExpanded={isExpanded}
190
- color={isExpanded ? AppColors.sky400 : AppColors.white}
191
- />
192
- </TouchableOpacity>
193
-
194
- <TouchableOpacity
195
- accessible={true}
196
- accessibilityRole="button"
197
- accessibilityLabel={t('mediaGallery.minimize', 'Minimize')}
198
- onPress={onClose}
199
- style={previewStyles.headerIconBtn}
200
- hitSlop={{top: 10, bottom: 10, left: 10, right: 10}}>
201
- <ChevronDownIcon size={15} color={AppColors.white} />
202
- </TouchableOpacity>
203
- </View>
204
- </View>
205
-
206
- {/* Media Preview Stage */}
207
- <View
208
- style={[
209
- previewStyles.stage,
210
- isExpanded && previewStyles.stageExpanded,
211
- !hasBottomToolbar && {
212
- paddingBottom: Platform.OS === 'ios' ? 34 : 16,
213
- },
214
- ]}>
215
- <TouchableOpacity
216
- activeOpacity={isVideo ? 0.9 : 1}
217
- onPress={isVideo ? handlePlayVideo : undefined}
218
- style={[
219
- previewStyles.previewCard,
220
- isExpanded && previewStyles.previewCardExpanded,
221
- ]}>
222
- {isVideo ? (
223
- item.thumbnailUri && !imageError ? (
224
- <>
225
- <Image
226
- source={{uri: item.thumbnailUri}}
227
- style={previewStyles.image}
228
- resizeMode="contain"
229
- onError={() => setImageError(true)}
230
- />
231
- <View style={previewStyles.videoImageOverlay} />
232
- </>
233
- ) : (
234
- <View style={previewStyles.videoFallbackBackdrop}>
235
- <View style={previewStyles.videoFallbackGlow} />
236
- <FilmIcon size={52} color={AppColors.sky400} />
237
- <Text style={previewStyles.videoFallbackTitle}>
238
- {t('mediaGallery.playVideo', 'Play Video')}
239
- </Text>
240
- <Text style={previewStyles.videoFallbackSubtitle}>
241
- {item.width && item.height ? `${item.width} × ${item.height}` : 'HD Video'} • MP4
242
- </Text>
243
- </View>
244
- )
245
- ) : (
246
- <Image
247
- source={{uri: item.uri}}
248
- style={previewStyles.image}
249
- resizeMode="contain"
250
- onError={() => setImageError(true)}
251
- />
252
- )}
253
-
254
- {/* Central Play Button Overlay for Videos */}
255
- {isVideo && (
256
- <View style={previewStyles.centerPlayOverlay}>
257
- <View style={previewStyles.centerPlayCircle}>
258
- <PlayIcon size={30} color={AppColors.white} />
259
- </View>
260
- <Text style={previewStyles.centerPlayText}>
261
- {t('mediaGallery.playVideo', 'Play Video')}
262
- </Text>
263
- </View>
264
- )}
265
-
266
- {/* Video overlay badge with playback duration */}
267
- {isVideo && (
268
- <View style={previewStyles.videoBadgeOverlay}>
269
- <View style={previewStyles.playPill}>
270
- <FilmIcon size={13} color={AppColors.white} />
271
- <Text style={previewStyles.playPillText}>
272
- {durationSec ? `${durationSec}s` : 'VIDEO'}
273
- </Text>
274
- </View>
275
- </View>
276
- )}
277
-
278
- {/* GIF loop badge */}
279
- {isGif && (
280
- <View style={previewStyles.videoBadgeOverlay}>
281
- <View style={[previewStyles.playPill, {backgroundColor: `${AppColors.warningAmber}CC`}]}>
282
- <GifIcon size={13} color={AppColors.white} />
283
- <Text style={previewStyles.playPillText}>ANIMATED GIF</Text>
284
- </View>
285
- </View>
286
- )}
287
-
288
- {/* Floating Meta Chip inside Card */}
289
- <View style={previewStyles.floatingMetaBadge}>
290
- <Text style={previewStyles.floatingMetaText}>
291
- {item.width && item.height ? `${item.width} × ${item.height} • ` : ''}
292
- {formatBytes(item.sizeBytes)}
293
- {durationSec ? ` • ${durationSec}s` : ''}
294
- </Text>
295
- </View>
296
- </TouchableOpacity>
297
- </View>
298
-
299
- {/* Video Controls & Scrub Bar (For Videos) */}
300
- {isVideo && (
301
- <View style={previewStyles.videoControlsPanel}>
302
- {/* Timeline Progress Bar */}
303
- <View style={previewStyles.progressSection}>
304
- <Text style={previewStyles.timeLabel}>
305
- 00:0{Math.floor(scrubPosition * (Number(durationSec) || 5))}
306
- </Text>
307
- <TouchableOpacity
308
- activeOpacity={0.8}
309
- onPress={() => setScrubPosition(pos => (pos >= 0.9 ? 0.1 : pos + 0.3))}
310
- style={previewStyles.progressTrack}>
311
- <View
312
- style={[
313
- previewStyles.progressFill,
314
- {width: `${Math.max(10, Math.min(100, scrubPosition * 100))}%`},
315
- ]}
316
- />
317
- <View
318
- style={[
319
- previewStyles.scrubberThumb,
320
- {left: `${Math.max(8, Math.min(96, scrubPosition * 100))}%`},
321
- ]}
322
- />
323
- </TouchableOpacity>
324
- <Text style={previewStyles.timeLabel}>{formattedDuration}</Text>
325
- </View>
326
-
327
- {/* Extra Controls: Play/Pause, Speed, Loop */}
328
- <View style={previewStyles.controlsRow}>
329
- {/* Play / Pause toggle */}
330
- <TouchableOpacity
331
- onPress={handlePlayVideo}
332
- style={previewStyles.controlActionPill}>
333
- {isPlaying ? (
334
- <PauseIcon size={14} color={AppColors.sky400} />
335
- ) : (
336
- <PlayIcon size={14} color={AppColors.sky400} />
337
- )}
338
- <Text style={[previewStyles.controlActionText, {color: AppColors.sky400}]}>
339
- {isPlaying ? t('mediaGallery.pause', 'Pause') : t('mediaGallery.play', 'Play')}
340
- </Text>
341
- </TouchableOpacity>
342
-
343
- {/* Playback Speed selector */}
344
- <View style={previewStyles.speedGroup}>
345
- {(['1.0x', '1.5x', '2.0x'] as const).map(speed => (
346
- <TouchableOpacity
347
- key={speed}
348
- onPress={() => setPlaybackSpeed(speed)}
349
- style={[
350
- previewStyles.speedBtn,
351
- playbackSpeed === speed && previewStyles.speedBtnActive,
352
- ]}>
353
- <Text
354
- style={[
355
- previewStyles.speedText,
356
- playbackSpeed === speed && previewStyles.speedTextActive,
357
- ]}>
358
- {speed}
359
- </Text>
360
- </TouchableOpacity>
361
- ))}
362
- </View>
363
-
364
- {/* Loop Toggle */}
365
- <TouchableOpacity
366
- onPress={() => setIsLooping(!isLooping)}
367
- style={[
368
- previewStyles.loopPill,
369
- isLooping && previewStyles.loopPillActive,
370
- ]}>
371
- <RepeatIcon
372
- size={12}
373
- color={isLooping ? AppColors.sky400 : AppColors.whiteAlpha60}
374
- />
375
- <Text
376
- style={[
377
- previewStyles.loopText,
378
- isLooping && previewStyles.loopTextActive,
379
- ]}>
380
- {isLooping ? 'Loop: ON' : 'Loop: OFF'}
381
- </Text>
382
- </TouchableOpacity>
383
- </View>
384
- </View>
385
- )}
386
-
387
- {/* Bottom Primary Actions */}
388
- {hasBottomToolbar && (
389
- <View style={previewStyles.footer}>
390
- {isVideo && (
391
- <TouchableScale
392
- onPress={handlePlayVideo}
393
- style={[
394
- previewStyles.actionBtn,
395
- {
396
- backgroundColor: `${AppColors.sky400}25`,
397
- borderColor: `${AppColors.sky400}70`,
398
- },
399
- ]}>
400
- <PlayIcon size={15} color={AppColors.sky400} />
401
- <Text style={[previewStyles.actionText, {color: AppColors.sky400, fontFamily: AppFonts.interSemiBold}]}>
402
- {t('mediaGallery.playVideo', 'Play Video')}
403
- </Text>
404
- </TouchableScale>
405
- )}
406
-
407
- {onConvertToGif && isVideo && (
408
- <TouchableScale
409
- onPress={handleConvert}
410
- disabled={isConverting}
411
- style={[
412
- previewStyles.actionBtn,
413
- {
414
- backgroundColor: `${AppColors.warningAmber}25`,
415
- borderColor: `${AppColors.warningAmber}70`,
416
- },
417
- ]}>
418
- <GifIcon size={15} color={AppColors.warningAmber} />
419
- <Text style={[previewStyles.actionText, {color: AppColors.warningAmber}]}>
420
- {isConverting ? t('mediaGallery.converting') : t('mediaGallery.convertToGif')}
421
- </Text>
422
- </TouchableScale>
423
- )}
424
- </View>
425
- )}
426
- </View>
427
- </Modal>
428
- );
429
- };
430
-
431
- const previewStyles = StyleSheet.create({
432
- overlay: {
433
- flex: 1,
434
- backgroundColor: '#090D16FA',
435
- justifyContent: 'space-between',
436
- },
437
- header: {
438
- flexDirection: 'row',
439
- alignItems: 'center',
440
- justifyContent: 'space-between',
441
- paddingHorizontal: 16,
442
- paddingTop: Platform.OS === 'ios' ? 52 : 20,
443
- paddingBottom: 14,
444
- borderBottomWidth: 1,
445
- borderBottomColor: AppColors.borderGlassLight,
446
- backgroundColor: AppColors.headerGlassDark,
447
- },
448
- headerLeft: {
449
- flexDirection: 'row',
450
- alignItems: 'center',
451
- gap: 10,
452
- flex: 1,
453
- minWidth: 0,
454
- marginRight: 10,
455
- },
456
- headerRight: {
457
- flexDirection: 'row',
458
- alignItems: 'center',
459
- gap: 8,
460
- },
461
- badge: {
462
- flexDirection: 'row',
463
- alignItems: 'center',
464
- gap: 4,
465
- paddingHorizontal: 8,
466
- paddingVertical: 4,
467
- borderRadius: 6,
468
- borderWidth: 1,
469
- },
470
- badgeText: {
471
- fontFamily: AppFonts.interBold,
472
- fontSize: 10.5,
473
- letterSpacing: 0.4,
474
- },
475
- title: {
476
- fontFamily: AppFonts.interSemiBold,
477
- fontSize: 13.5,
478
- color: AppColors.white,
479
- },
480
- subtitle: {
481
- fontFamily: AppFonts.interRegular,
482
- fontSize: 11,
483
- color: AppColors.whiteAlpha60,
484
- marginTop: 1,
485
- },
486
- headerDeleteBtn: {
487
- width: 32,
488
- height: 32,
489
- borderRadius: 16,
490
- backgroundColor: `${AppColors.red500}20`,
491
- borderWidth: 1,
492
- borderColor: `${AppColors.red500}60`,
493
- alignItems: 'center',
494
- justifyContent: 'center',
495
- },
496
- headerIconBtn: {
497
- width: 32,
498
- height: 32,
499
- borderRadius: 16,
500
- backgroundColor: AppColors.whiteAlpha12,
501
- borderWidth: 1,
502
- borderColor: AppColors.whiteAlpha20,
503
- alignItems: 'center',
504
- justifyContent: 'center',
505
- },
506
- stage: {
507
- flex: 1,
508
- alignItems: 'center',
509
- justifyContent: 'center',
510
- paddingHorizontal: 10,
511
- paddingTop: 10,
512
- paddingBottom: 10,
513
- },
514
- stageExpanded: {
515
- paddingHorizontal: 0,
516
- paddingTop: 0,
517
- paddingBottom: 0,
518
- },
519
- previewCard: {
520
- flex: 1,
521
- width: '100%',
522
- borderRadius: 14,
523
- overflow: 'hidden',
524
- backgroundColor: '#05070D',
525
- borderWidth: 1,
526
- borderColor: AppColors.borderGlassLight,
527
- alignItems: 'center',
528
- justifyContent: 'center',
529
- position: 'relative',
530
- },
531
- previewCardExpanded: {
532
- borderRadius: 0,
533
- borderWidth: 0,
534
- },
535
- image: {
536
- width: '100%',
537
- height: '100%',
538
- },
539
- videoImageOverlay: {
540
- ...StyleSheet.absoluteFillObject,
541
- backgroundColor: 'rgba(5, 7, 13, 0.25)',
542
- },
543
- videoFallbackBackdrop: {
544
- flex: 1,
545
- width: '100%',
546
- backgroundColor: '#070C18',
547
- alignItems: 'center',
548
- justifyContent: 'center',
549
- gap: 8,
550
- },
551
- videoFallbackGlow: {
552
- position: 'absolute',
553
- width: 140,
554
- height: 140,
555
- borderRadius: 70,
556
- backgroundColor: `${AppColors.sky400}18`,
557
- },
558
- videoFallbackTitle: {
559
- fontFamily: AppFonts.interSemiBold,
560
- fontSize: 15,
561
- color: AppColors.white,
562
- marginTop: 8,
563
- },
564
- videoFallbackSubtitle: {
565
- fontFamily: AppFonts.interRegular,
566
- fontSize: 12,
567
- color: AppColors.whiteAlpha60,
568
- },
569
- centerPlayOverlay: {
570
- position: 'absolute',
571
- alignItems: 'center',
572
- justifyContent: 'center',
573
- gap: 8,
574
- },
575
- centerPlayCircle: {
576
- width: 64,
577
- height: 64,
578
- borderRadius: 32,
579
- backgroundColor: `${AppColors.sky400}E0`,
580
- alignItems: 'center',
581
- justifyContent: 'center',
582
- paddingLeft: 3,
583
- shadowColor: AppColors.sky400,
584
- shadowOffset: {width: 0, height: 4},
585
- shadowOpacity: 0.5,
586
- shadowRadius: 10,
587
- elevation: 8,
588
- },
589
- centerPlayText: {
590
- fontFamily: AppFonts.interSemiBold,
591
- fontSize: 13,
592
- color: AppColors.white,
593
- letterSpacing: 0.3,
594
- textShadowColor: 'rgba(0,0,0,0.7)',
595
- textShadowOffset: {width: 0, height: 1},
596
- textShadowRadius: 3,
597
- },
598
- videoBadgeOverlay: {
599
- position: 'absolute',
600
- bottom: 12,
601
- left: 12,
602
- },
603
- playPill: {
604
- flexDirection: 'row',
605
- alignItems: 'center',
606
- gap: 6,
607
- backgroundColor: `${AppColors.slate900}D9`,
608
- paddingHorizontal: 10,
609
- paddingVertical: 5,
610
- borderRadius: 16,
611
- borderWidth: 1,
612
- borderColor: AppColors.whiteAlpha20,
613
- },
614
- playPillText: {
615
- fontFamily: AppFonts.interSemiBold,
616
- fontSize: 11,
617
- color: AppColors.white,
618
- letterSpacing: 0.3,
619
- },
620
- floatingMetaBadge: {
621
- position: 'absolute',
622
- bottom: 10,
623
- backgroundColor: `${AppColors.slate900}D9`,
624
- paddingHorizontal: 10,
625
- paddingVertical: 4.5,
626
- borderRadius: 8,
627
- borderWidth: 1,
628
- borderColor: AppColors.whiteAlpha15,
629
- alignItems: 'center',
630
- justifyContent: 'center',
631
- },
632
- floatingMetaText: {
633
- fontFamily: AppFonts.interMedium,
634
- fontSize: 10.5,
635
- color: AppColors.slate200,
636
- letterSpacing: 0.2,
637
- },
638
- videoControlsPanel: {
639
- paddingHorizontal: 16,
640
- paddingTop: 8,
641
- paddingBottom: 6,
642
- backgroundColor: AppColors.headerGlassDark,
643
- borderTopWidth: 1,
644
- borderTopColor: AppColors.borderGlassLight,
645
- gap: 8,
646
- },
647
- progressSection: {
648
- flexDirection: 'row',
649
- alignItems: 'center',
650
- gap: 10,
651
- },
652
- timeLabel: {
653
- fontFamily: AppFonts.interMedium,
654
- fontSize: 11,
655
- color: AppColors.whiteAlpha60,
656
- minWidth: 42,
657
- },
658
- progressTrack: {
659
- flex: 1,
660
- height: 6,
661
- borderRadius: 3,
662
- backgroundColor: AppColors.whiteAlpha15,
663
- justifyContent: 'center',
664
- position: 'relative',
665
- },
666
- progressFill: {
667
- height: '100%',
668
- borderRadius: 3,
669
- backgroundColor: AppColors.sky400,
670
- },
671
- scrubberThumb: {
672
- position: 'absolute',
673
- width: 12,
674
- height: 12,
675
- borderRadius: 6,
676
- backgroundColor: AppColors.white,
677
- borderWidth: 2,
678
- borderColor: AppColors.sky400,
679
- top: -3,
680
- marginLeft: -6,
681
- },
682
- controlsRow: {
683
- flexDirection: 'row',
684
- alignItems: 'center',
685
- justifyContent: 'space-between',
686
- paddingVertical: 2,
687
- },
688
- controlActionPill: {
689
- flexDirection: 'row',
690
- alignItems: 'center',
691
- gap: 5,
692
- paddingHorizontal: 10,
693
- paddingVertical: 5,
694
- borderRadius: 6,
695
- backgroundColor: `${AppColors.sky400}18`,
696
- borderWidth: 1,
697
- borderColor: `${AppColors.sky400}50`,
698
- },
699
- controlActionText: {
700
- fontFamily: AppFonts.interSemiBold,
701
- fontSize: 11.5,
702
- },
703
- speedGroup: {
704
- flexDirection: 'row',
705
- alignItems: 'center',
706
- backgroundColor: AppColors.whiteAlpha08,
707
- borderRadius: 6,
708
- borderWidth: 1,
709
- borderColor: AppColors.whiteAlpha12,
710
- padding: 2,
711
- gap: 2,
712
- },
713
- speedBtn: {
714
- paddingHorizontal: 7,
715
- paddingVertical: 3,
716
- borderRadius: 4,
717
- },
718
- speedBtnActive: {
719
- backgroundColor: `${AppColors.sky400}30`,
720
- },
721
- speedText: {
722
- fontFamily: AppFonts.interMedium,
723
- fontSize: 10.5,
724
- color: AppColors.whiteAlpha60,
725
- },
726
- speedTextActive: {
727
- color: AppColors.sky400,
728
- fontFamily: AppFonts.interBold,
729
- },
730
- loopPill: {
731
- flexDirection: 'row',
732
- alignItems: 'center',
733
- gap: 4,
734
- paddingHorizontal: 8,
735
- paddingVertical: 5,
736
- borderRadius: 6,
737
- backgroundColor: AppColors.whiteAlpha08,
738
- borderWidth: 1,
739
- borderColor: AppColors.whiteAlpha12,
740
- },
741
- loopPillActive: {
742
- backgroundColor: `${AppColors.sky400}18`,
743
- borderColor: `${AppColors.sky400}50`,
744
- },
745
- loopText: {
746
- fontFamily: AppFonts.interMedium,
747
- fontSize: 10.5,
748
- color: AppColors.whiteAlpha60,
749
- },
750
- loopTextActive: {
751
- color: AppColors.sky400,
752
- fontFamily: AppFonts.interSemiBold,
753
- },
754
- footer: {
755
- flexDirection: 'row',
756
- alignItems: 'center',
757
- justifyContent: 'center',
758
- flexWrap: 'wrap',
759
- gap: 8,
760
- paddingHorizontal: 16,
761
- paddingTop: 8,
762
- paddingBottom: Platform.OS === 'ios' ? 34 : 16,
763
- borderTopWidth: 1,
764
- borderTopColor: AppColors.borderGlassLight,
765
- backgroundColor: AppColors.headerGlassDark,
766
- },
767
- actionBtn: {
768
- flexDirection: 'row',
769
- alignItems: 'center',
770
- gap: 6,
771
- paddingHorizontal: 16,
772
- paddingVertical: 9,
773
- borderRadius: 8,
774
- backgroundColor: AppColors.whiteAlpha08,
775
- borderWidth: 1,
776
- borderColor: AppColors.whiteAlpha15,
777
- },
778
- actionText: {
779
- fontFamily: AppFonts.interMedium,
780
- fontSize: 12,
781
- color: AppColors.white,
782
- },
783
- });