react-native-inapp-inspector 2.2.2 → 2.2.3

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 (97) hide show
  1. package/dist/commonjs/constants/version.d.ts +1 -1
  2. package/dist/commonjs/constants/version.js +1 -1
  3. package/dist/esm/constants/version.d.ts +1 -1
  4. package/dist/esm/constants/version.js +1 -1
  5. package/package.json +2 -1
  6. package/src/analytics.ts +35 -0
  7. package/src/bundle.ts +25 -0
  8. package/src/components/AnalyticsDetail.tsx +865 -0
  9. package/src/components/AnalyticsEventCard.tsx +441 -0
  10. package/src/components/AnalyticsGraph.tsx +583 -0
  11. package/src/components/AnimatedEntrance.tsx +64 -0
  12. package/src/components/AppHeaderLogo.tsx +109 -0
  13. package/src/components/BrandCircleIcon.tsx +144 -0
  14. package/src/components/BrandSquareIcon.tsx +144 -0
  15. package/src/components/CodeSnippet.tsx +725 -0
  16. package/src/components/ConsoleLogCard.tsx +628 -0
  17. package/src/components/CopyButton.tsx +87 -0
  18. package/src/components/DiffViewer.tsx +82 -0
  19. package/src/components/DomainHeader.tsx +237 -0
  20. package/src/components/EmptyState.tsx +73 -0
  21. package/src/components/EndOfListFooter.tsx +100 -0
  22. package/src/components/ErrorBoundary.tsx +688 -0
  23. package/src/components/HeadersSection.tsx +192 -0
  24. package/src/components/HighlightText.tsx +100 -0
  25. package/src/components/Inspector/AnalyticsFilterModal.tsx +1250 -0
  26. package/src/components/Inspector/AnalyticsTab.tsx +1336 -0
  27. package/src/components/Inspector/BundleTab.tsx +4731 -0
  28. package/src/components/Inspector/ConsoleTab.tsx +702 -0
  29. package/src/components/Inspector/CrashDetail.tsx +941 -0
  30. package/src/components/Inspector/CrashFilterModal.tsx +721 -0
  31. package/src/components/Inspector/CrashTab.tsx +871 -0
  32. package/src/components/Inspector/FabLauncher.tsx +80 -0
  33. package/src/components/Inspector/InspectorContext.tsx +28 -0
  34. package/src/components/Inspector/InspectorHeader.tsx +973 -0
  35. package/src/components/Inspector/LogDetail.tsx +1427 -0
  36. package/src/components/Inspector/MainScreen.tsx +258 -0
  37. package/src/components/Inspector/NavigationTracker.tsx +13 -0
  38. package/src/components/Inspector/NetworkDetail.tsx +794 -0
  39. package/src/components/Inspector/NetworkTab.tsx +1095 -0
  40. package/src/components/Inspector/NpmUpdateToast.tsx +392 -0
  41. package/src/components/Inspector/PerformanceTab.tsx +1894 -0
  42. package/src/components/Inspector/ReduxDetail.tsx +1651 -0
  43. package/src/components/Inspector/ReduxTab.tsx +954 -0
  44. package/src/components/Inspector/SettingsPanel.tsx +3181 -0
  45. package/src/components/Inspector/TabBar.tsx +187 -0
  46. package/src/components/Inspector/TelemetryConsentModal.tsx +392 -0
  47. package/src/components/Inspector/UpdateAvailableModal.tsx +545 -0
  48. package/src/components/JsonViewer.tsx +486 -0
  49. package/src/components/LogCard.tsx +491 -0
  50. package/src/components/LogSyntaxHighlighter.tsx +178 -0
  51. package/src/components/MetaAccordion.tsx +340 -0
  52. package/src/components/MiniBarChart.tsx +42 -0
  53. package/src/components/MiniLineChart.tsx +33 -0
  54. package/src/components/NetworkIcons.tsx +2118 -0
  55. package/src/components/SectionHeader.tsx +113 -0
  56. package/src/components/SegmentedTabs.tsx +83 -0
  57. package/src/components/Slider.tsx +300 -0
  58. package/src/components/SourcePageCard.tsx +148 -0
  59. package/src/components/Toast.tsx +131 -0
  60. package/src/components/TouchableScale.tsx +91 -0
  61. package/src/components/TreeNode.tsx +186 -0
  62. package/src/console.ts +24 -0
  63. package/src/constants/index.ts +38 -0
  64. package/src/constants/version.ts +3 -0
  65. package/src/crash.ts +32 -0
  66. package/src/customHooks/analyticsLogger.ts +336 -0
  67. package/src/customHooks/bundleAnalyzer.ts +1231 -0
  68. package/src/customHooks/consoleLogger.ts +497 -0
  69. package/src/customHooks/crashHandler.ts +944 -0
  70. package/src/customHooks/logFilters.ts +32 -0
  71. package/src/customHooks/networkLogger.ts +419 -0
  72. package/src/customHooks/performanceTracker.ts +1014 -0
  73. package/src/customHooks/reduxLogger.ts +406 -0
  74. package/src/customHooks/useAccordion.tsx +60 -0
  75. package/src/decorators/index.ts +184 -0
  76. package/src/helpers/gaAnalyticsRegistry.ts +204 -0
  77. package/src/helpers/index.ts +860 -0
  78. package/src/helpers/memoryManager.ts +138 -0
  79. package/src/helpers/searchQueryParser.ts +283 -0
  80. package/src/helpers/settingsStore.ts +171 -0
  81. package/src/helpers/telemetry.ts +505 -0
  82. package/src/helpers/toast.ts +17 -0
  83. package/src/i18n/index.ts +69 -0
  84. package/src/i18n/locales/en.json +1052 -0
  85. package/src/index.tsx +2336 -0
  86. package/src/native/NativeInspector.ts +397 -0
  87. package/src/native/NativeNetworkInspector.ts +24 -0
  88. package/src/network.ts +22 -0
  89. package/src/performance.ts +38 -0
  90. package/src/redux.ts +23 -0
  91. package/src/styles/AppColors.ts +408 -0
  92. package/src/styles/AppFonts.ts +8 -0
  93. package/src/styles/common.ts +209 -0
  94. package/src/styles/index.ts +1570 -0
  95. package/src/types/enums.ts +194 -0
  96. package/src/types/index.ts +34 -0
  97. package/src/types/interfaces.ts +515 -0
@@ -0,0 +1,1570 @@
1
+ import {StyleSheet, Platform} from 'react-native';
2
+ import AppColors, {updateAppColorsTheme, getThemeColors} from './AppColors';
3
+ import {AppFonts} from './AppFonts';
4
+ import commonStyles, {rebuildCommonStyles} from './common';
5
+
6
+ export {commonStyles};
7
+
8
+ export const getRawStyles = (colors: typeof AppColors) => ({
9
+ header: {
10
+ flexDirection: 'row',
11
+ alignItems: 'center',
12
+ paddingHorizontal: 10,
13
+ paddingVertical: 8,
14
+ zIndex: 10,
15
+ minHeight: 52,
16
+ shadowColor: colors.black,
17
+ shadowOffset: {width: 0, height: 2},
18
+ shadowOpacity: 0.08,
19
+ shadowRadius: 4,
20
+ elevation: 3,
21
+ },
22
+ headerLeft: {
23
+ flex: 1,
24
+ minWidth: 0,
25
+ alignItems: 'flex-start',
26
+ },
27
+ headerCenter: {
28
+ flex: 1,
29
+ minWidth: 0,
30
+ alignItems: 'center',
31
+ justifyContent: 'center',
32
+ paddingHorizontal: 4,
33
+ },
34
+ headerRight: {
35
+ flexShrink: 0,
36
+ flexDirection: 'row',
37
+ alignItems: 'center',
38
+ justifyContent: 'flex-end',
39
+ gap: 5,
40
+ },
41
+ headerTitle: {
42
+ fontFamily: AppFonts.interBold,
43
+ color: colors.primaryLight,
44
+ fontSize: 15,
45
+ letterSpacing: 0.3,
46
+ paddingBottom: 4,
47
+ },
48
+ envBadge: {
49
+ paddingHorizontal: 6,
50
+ paddingVertical: 2,
51
+ borderRadius: 6,
52
+ borderWidth: 1,
53
+ alignItems: 'center',
54
+ justifyContent: 'center',
55
+ marginBottom: 4,
56
+ },
57
+ envBadgeText: {
58
+ fontFamily: AppFonts.interBold,
59
+ fontSize: 9.5,
60
+ letterSpacing: 0.5,
61
+ },
62
+ headerDetailCenter: {
63
+ alignItems: 'center',
64
+ justifyContent: 'center',
65
+ width: '100%',
66
+ },
67
+ headerDetailRow: {
68
+ flexDirection: 'row',
69
+ alignItems: 'center',
70
+ gap: 8,
71
+ maxWidth: '100%',
72
+ },
73
+ headerMethodBadge: {
74
+ paddingHorizontal: 6,
75
+ paddingVertical: 3,
76
+ borderRadius: 6,
77
+ shadowColor: colors.black,
78
+ shadowOffset: {width: 0, height: 1},
79
+ shadowOpacity: 0.1,
80
+ shadowRadius: 2,
81
+ elevation: 1,
82
+ },
83
+ headerMethodText: {
84
+ fontFamily: AppFonts.interBold,
85
+ color: colors.primaryLight,
86
+ fontSize: 10,
87
+ letterSpacing: 0.5,
88
+ },
89
+ headerDetailTitle: {
90
+ fontFamily: AppFonts.interMedium,
91
+ color: colors.primaryLight,
92
+ fontSize: 15,
93
+ flexShrink: 1,
94
+ letterSpacing: 0.2,
95
+ },
96
+ headerDetailSubRow: {
97
+ flexDirection: 'row',
98
+ alignItems: 'center',
99
+ gap: 6,
100
+ marginTop: 4,
101
+ },
102
+ headerStatusDot: {
103
+ width: 7,
104
+ height: 7,
105
+ borderRadius: 3.5,
106
+ shadowColor: colors.black,
107
+ shadowOffset: {width: 0, height: 1},
108
+ shadowOpacity: 0.2,
109
+ shadowRadius: 1,
110
+ elevation: 1,
111
+ },
112
+ headerSubTitle: {
113
+ fontFamily: AppFonts.interMedium,
114
+ color: colors.primaryLight,
115
+ fontSize: 11,
116
+ opacity: 0.95,
117
+ letterSpacing: 0.2,
118
+ },
119
+ headerCountBadge: {
120
+ flexDirection: 'row',
121
+ alignItems: 'center',
122
+ backgroundColor: `${colors.black}33`,
123
+ paddingHorizontal: 12,
124
+ paddingVertical: 6,
125
+ borderRadius: 16,
126
+ gap: 6,
127
+ borderWidth: 0.5,
128
+ borderColor: `${colors.white}33`,
129
+ shadowColor: colors.black,
130
+ shadowOffset: {width: 0, height: 1},
131
+ shadowOpacity: 0.1,
132
+ shadowRadius: 2,
133
+ elevation: 2,
134
+ },
135
+ headerCountText: {
136
+ fontFamily: AppFonts.interMedium,
137
+ color: `${colors.white}F2`,
138
+ fontSize: 12,
139
+ letterSpacing: 0.2,
140
+ },
141
+
142
+ listContent: {paddingBottom: Platform.OS === 'ios' ? 44 : 32},
143
+ // #2 — scroll-to-top button, always shown at the bottom right.
144
+ scrollTopBtn: {
145
+ position: 'absolute',
146
+ bottom: 22,
147
+ right: 16,
148
+ width: 38,
149
+ height: 38,
150
+ borderRadius: 19,
151
+ backgroundColor: colors.purple,
152
+ alignItems: 'center',
153
+ justifyContent: 'center',
154
+ shadowColor: colors.black,
155
+ shadowOffset: {width: 0, height: 3},
156
+ shadowOpacity: 0.3,
157
+ shadowRadius: 6,
158
+ elevation: 12,
159
+ zIndex: 999,
160
+ },
161
+ detailScroll: {flex: 1},
162
+
163
+ closeButtonSquare: {
164
+ width: 30,
165
+ height: 30,
166
+ borderRadius: 7,
167
+ backgroundColor: `${colors.white}2B`,
168
+ alignItems: 'center',
169
+ justifyContent: 'center',
170
+ borderWidth: 1,
171
+ borderColor: `${colors.white}33`,
172
+ overflow: 'hidden',
173
+ },
174
+
175
+ fabWrapper: {
176
+ position: 'absolute',
177
+ bottom: 180,
178
+ right: 20,
179
+ alignItems: 'center',
180
+ justifyContent: 'center',
181
+ zIndex: 99999,
182
+ elevation: 15,
183
+ shadowColor: colors.purple,
184
+ shadowOffset: {width: 0, height: 8},
185
+ shadowOpacity: 0.4,
186
+ shadowRadius: 12,
187
+ },
188
+ fabPulseRing: {
189
+ position: 'absolute',
190
+ width: 60,
191
+ height: 60,
192
+ borderRadius: 30,
193
+ backgroundColor: `${colors.purple}25`,
194
+ },
195
+ // #4 — circular clipping mask for the FAB shine sweep.
196
+ fabShineClip: {
197
+ position: 'absolute',
198
+ width: 62,
199
+ height: 62,
200
+ borderRadius: 31,
201
+ overflow: 'hidden',
202
+ },
203
+ // #4 — diagonal light streak that sweeps across the launcher.
204
+ fabShineStreak: {
205
+ position: 'absolute',
206
+ top: -20,
207
+ width: 26,
208
+ height: 102,
209
+ transform: [{rotate: '25deg'}],
210
+ },
211
+ fabGreenDot: {
212
+ position: 'absolute',
213
+ top: 2,
214
+ right: 2,
215
+ width: 12,
216
+ height: 12,
217
+ borderRadius: 6,
218
+ backgroundColor: colors.greenA400,
219
+ borderWidth: 2,
220
+ borderColor: colors.primaryLight,
221
+ shadowColor: colors.black,
222
+ shadowOffset: {width: 0, height: 1},
223
+ shadowOpacity: 0.2,
224
+ shadowRadius: 1.5,
225
+ elevation: 2,
226
+ },
227
+
228
+
229
+ toolbarRow: {
230
+ flexDirection: 'row',
231
+ alignItems: 'center',
232
+ justifyContent: 'space-between',
233
+ paddingHorizontal: 12,
234
+ marginBottom: 10,
235
+ gap: 10,
236
+ marginTop: 4,
237
+ },
238
+ toolbarRight: {
239
+ flexDirection: 'row',
240
+ alignItems: 'center',
241
+ gap: 10,
242
+ },
243
+ toolbarBtn: {
244
+ width: 34,
245
+ height: 34,
246
+ borderRadius: 17,
247
+ alignItems: 'center',
248
+ justifyContent: 'center',
249
+ backgroundColor: colors.primaryLight,
250
+ borderWidth: 1.5,
251
+ borderColor: colors.grayBorderSecondary,
252
+ ...(Platform.OS === 'ios'
253
+ ? {
254
+ shadowColor: colors.black,
255
+ shadowOffset: {width: 0, height: 1},
256
+ shadowOpacity: 0.04,
257
+ shadowRadius: 2,
258
+ }
259
+ : {
260
+ elevation: 0,
261
+ }),
262
+ },
263
+ toolbarBtnActive: {
264
+ borderColor: colors.purple,
265
+ backgroundColor: colors.purpleShade50,
266
+ shadowOpacity: 0.08,
267
+ shadowRadius: 3,
268
+ elevation: 2,
269
+ },
270
+ trashBadge: {
271
+ position: 'absolute',
272
+ top: -4,
273
+ right: -4,
274
+ backgroundColor: colors.errorColor,
275
+ borderRadius: 10,
276
+ minWidth: 18,
277
+ height: 18,
278
+ alignItems: 'center',
279
+ justifyContent: 'center',
280
+ borderWidth: 1.5,
281
+ borderColor: colors.primaryLight,
282
+ },
283
+ trashBadgeText: {
284
+ color: colors.primaryLight,
285
+ fontFamily: AppFonts.interBold,
286
+ fontSize: 9,
287
+ },
288
+
289
+ filtersContainer: {
290
+ paddingHorizontal: 12,
291
+ paddingBottom: 10,
292
+ },
293
+ filtersHeading: {
294
+ fontFamily: AppFonts.interBold,
295
+ color: colors.grayTextStrong,
296
+ fontSize: 11,
297
+ textTransform: 'uppercase',
298
+ letterSpacing: 0.6,
299
+ marginBottom: 6,
300
+ },
301
+ statusRowContent: {
302
+ alignItems: 'center',
303
+ paddingVertical: 2,
304
+ },
305
+ statusFilterWrap: {marginRight: 6},
306
+ statusFilterChip: {
307
+ flexDirection: 'row',
308
+ alignItems: 'center',
309
+ paddingHorizontal: 9,
310
+ height: 32,
311
+ justifyContent: 'center',
312
+ borderRadius: 24,
313
+ borderWidth: 1.5,
314
+ borderColor: colors.grayBorderSecondary,
315
+ backgroundColor: colors.primaryLight,
316
+ shadowColor: colors.black,
317
+ shadowOffset: {width: 0, height: 1},
318
+ shadowOpacity: 0.04,
319
+ shadowRadius: 2,
320
+ elevation: 1,
321
+ },
322
+ statusFilterActive: {
323
+ borderColor: colors.purple,
324
+ backgroundColor: colors.purpleShade50,
325
+ },
326
+ filterCheckbox: {
327
+ width: 13,
328
+ height: 13,
329
+ borderRadius: 3,
330
+ borderWidth: 1.5,
331
+ borderColor: colors.grayBorderSecondary,
332
+ backgroundColor: colors.primaryLight,
333
+ alignItems: 'center',
334
+ justifyContent: 'center',
335
+ marginRight: 6,
336
+ },
337
+ filterCheckboxActive: {
338
+ borderColor: 'transparent',
339
+ },
340
+ filterChipIcon: {
341
+ marginRight: 5,
342
+ },
343
+ methodBadgeMini: {
344
+ width: 4.5,
345
+ height: 13,
346
+ borderRadius: 2,
347
+ marginRight: 6,
348
+ },
349
+ statusFilterText: {
350
+ fontFamily: AppFonts.interMedium,
351
+ color: colors.grayText,
352
+ fontSize: 11.5,
353
+ },
354
+
355
+ resultCount: {
356
+ fontFamily: AppFonts.interRegular,
357
+ color: colors.grayTextWeak,
358
+ fontSize: 12,
359
+ marginHorizontal: 16,
360
+ marginBottom: 8,
361
+ marginTop: 4,
362
+ letterSpacing: 0.2,
363
+ },
364
+
365
+ searchContainer: {
366
+ flex: 1,
367
+ flexDirection: 'row',
368
+ alignItems: 'center',
369
+ backgroundColor: colors.primaryLight,
370
+ borderRadius: 24,
371
+ paddingHorizontal: 10,
372
+ paddingVertical: 4,
373
+ borderWidth: 1.5,
374
+ borderColor: colors.grayBorderSecondary,
375
+ shadowColor: colors.black,
376
+ shadowOffset: {width: 0, height: 1},
377
+ shadowOpacity: 0.04,
378
+ shadowRadius: 2,
379
+ elevation: 1,
380
+ },
381
+ searchInput: {
382
+ flex: 1,
383
+ fontFamily: AppFonts.interRegular,
384
+ color: colors.primaryBlack,
385
+ paddingVertical: Platform.OS === 'ios' ? 5 : 2,
386
+ marginLeft: 6,
387
+ fontSize: 14,
388
+ },
389
+ clearBtn: {padding: 4},
390
+
391
+ domainHeaderCard: {
392
+ marginHorizontal: 8,
393
+ marginTop: 10,
394
+ marginBottom: 4,
395
+ paddingHorizontal: 8,
396
+ paddingVertical: 7,
397
+ borderRadius: 9,
398
+ backgroundColor: colors.grayBackground,
399
+ borderWidth: 1,
400
+ borderColor: colors.grayBorderSecondary,
401
+ },
402
+ domainHeaderCardExpanded: {
403
+ borderBottomLeftRadius: 0,
404
+ borderBottomRightRadius: 0,
405
+ borderBottomWidth: 0,
406
+ marginBottom: 0,
407
+ },
408
+ domainHeaderTopRow: {
409
+ flexDirection: 'row',
410
+ alignItems: 'center',
411
+ justifyContent: 'space-between',
412
+ },
413
+ domainHeaderLeft: {
414
+ flexDirection: 'row',
415
+ alignItems: 'center',
416
+ flex: 1,
417
+ minWidth: 0,
418
+ marginRight: 6,
419
+ gap: 6,
420
+ },
421
+ domainIconWrap: {
422
+ width: 22,
423
+ height: 22,
424
+ borderRadius: 5,
425
+ alignItems: 'center',
426
+ justifyContent: 'center',
427
+ },
428
+ domainTitleText: {
429
+ fontFamily: AppFonts.interBold,
430
+ fontSize: 13,
431
+ fontWeight: '700',
432
+ color: colors.primaryBlack,
433
+ textTransform: 'capitalize',
434
+ },
435
+ domainSummaryRow: {
436
+ flexDirection: 'row',
437
+ alignItems: 'center',
438
+ gap: 6,
439
+ marginTop: 1,
440
+ },
441
+ domainSummaryText: {
442
+ fontFamily: AppFonts.interRegular,
443
+ fontSize: 10,
444
+ color: colors.grayTextWeak,
445
+ },
446
+ domainPctText: {
447
+ fontFamily: AppFonts.interBold,
448
+ fontSize: 9.5,
449
+ },
450
+ domainProgressSection: {
451
+ marginTop: 8,
452
+ gap: 4,
453
+ width: '100%',
454
+ },
455
+ domainProgressTrack: {
456
+ flexDirection: 'row',
457
+ height: 4,
458
+ borderRadius: 2,
459
+ overflow: 'hidden',
460
+ backgroundColor: '#E2E8F0',
461
+ width: '100%',
462
+ },
463
+ domainProgressSegment: {
464
+ height: '100%',
465
+ },
466
+ domainProgressLabelsRow: {
467
+ flexDirection: 'row',
468
+ alignItems: 'center',
469
+ justifyContent: 'space-between',
470
+ paddingHorizontal: 2,
471
+ },
472
+ domainProgressRateText: {
473
+ fontFamily: AppFonts.interBold,
474
+ fontSize: 9.5,
475
+ color: colors.grayTextStrong,
476
+ },
477
+ domainProgressSummaryText: {
478
+ fontFamily: AppFonts.interMedium,
479
+ fontSize: 9,
480
+ color: colors.grayTextWeak,
481
+ },
482
+ domainStatsGroup: {
483
+ flexDirection: 'row',
484
+ alignItems: 'center',
485
+ flexShrink: 0,
486
+ gap: 4,
487
+ },
488
+ domainStatPill: {
489
+ flexDirection: 'row',
490
+ alignItems: 'center',
491
+ gap: 3,
492
+ paddingHorizontal: 5,
493
+ paddingVertical: 2.5,
494
+ borderRadius: 5,
495
+ borderWidth: 1,
496
+ borderColor: colors.grayBorderSecondary,
497
+ backgroundColor: colors.primaryLight,
498
+ },
499
+ domainStatText: {
500
+ fontFamily: AppFonts.interBold,
501
+ fontSize: 9.5,
502
+ },
503
+
504
+ treeNodeRow: {
505
+ flexDirection: 'row',
506
+ alignItems: 'stretch',
507
+ marginHorizontal: 8,
508
+ paddingRight: 4,
509
+ paddingLeft: 0,
510
+ backgroundColor: colors.grayBackground,
511
+ borderLeftWidth: 1,
512
+ borderRightWidth: 1,
513
+ borderColor: colors.grayBorderSecondary,
514
+ },
515
+ treeNodeRowLast: {
516
+ borderBottomWidth: 1,
517
+ borderBottomLeftRadius: 10,
518
+ borderBottomRightRadius: 10,
519
+ marginBottom: 8,
520
+ paddingBottom: 6,
521
+ },
522
+ treeLines: {
523
+ width: 14,
524
+ position: 'relative',
525
+ },
526
+ modernTreeLine: {
527
+ position: 'absolute',
528
+ left: 7,
529
+ top: 0,
530
+ width: 7,
531
+ height: '100%',
532
+ borderLeftWidth: 1.5,
533
+ opacity: 0.5,
534
+ },
535
+ modernTreeLineLast: {
536
+ height: '50%',
537
+ borderBottomWidth: 1.5,
538
+ borderBottomLeftRadius: 8,
539
+ },
540
+ modernTreeBranch: {
541
+ position: 'absolute',
542
+ left: 7,
543
+ top: '50%',
544
+ width: 7,
545
+ borderTopWidth: 1.5,
546
+ opacity: 0.5,
547
+ },
548
+ treeCardWrapper: {
549
+ flex: 1,
550
+ paddingVertical: 3,
551
+ },
552
+
553
+ card: {
554
+ marginHorizontal: 0,
555
+ marginVertical: 0,
556
+ borderRadius: 12,
557
+ overflow: 'hidden',
558
+ shadowColor: colors.black,
559
+ shadowOffset: {width: 0, height: 2},
560
+ shadowOpacity: 0.05,
561
+ shadowRadius: 4,
562
+ elevation: 2,
563
+ borderWidth: 1,
564
+ borderColor: colors.grayBorderSecondary,
565
+ backgroundColor: colors.primaryLight,
566
+ },
567
+ cardBody: {
568
+ paddingHorizontal: 12,
569
+ paddingTop: 10,
570
+ paddingBottom: 9,
571
+ },
572
+
573
+ cardHeaderRow: {
574
+ flexDirection: 'row',
575
+ alignItems: 'center',
576
+ justifyContent: 'space-between',
577
+ marginBottom: 4,
578
+ },
579
+ cardHeaderLeft: {
580
+ flexDirection: 'row',
581
+ alignItems: 'center',
582
+ flex: 1,
583
+ marginRight: 8,
584
+ gap: 6,
585
+ },
586
+ cardHeaderRight: {
587
+ flexDirection: 'row',
588
+ alignItems: 'center',
589
+ gap: 5,
590
+ },
591
+
592
+ smallCheckbox: {
593
+ width: 15,
594
+ height: 15,
595
+ borderRadius: 4,
596
+ borderWidth: 1.8,
597
+ borderColor: colors.grayTextWeak,
598
+ alignItems: 'center',
599
+ justifyContent: 'center',
600
+ backgroundColor: colors.white,
601
+ },
602
+ smallCheckboxChecked: {
603
+ backgroundColor: colors.purple,
604
+ borderColor: colors.purple,
605
+ },
606
+
607
+ serialNumber: {
608
+ fontFamily: AppFonts.interBold,
609
+ color: colors.grayTextWeak,
610
+ fontSize: 10,
611
+ },
612
+
613
+ methodBadge: {
614
+ paddingHorizontal: 6.5,
615
+ paddingVertical: 2.5,
616
+ borderRadius: 5,
617
+ alignItems: 'center',
618
+ justifyContent: 'center',
619
+ borderWidth: 1,
620
+ borderColor: 'rgba(255, 255, 255, 0.3)',
621
+ ...(Platform.OS === 'ios'
622
+ ? {
623
+ shadowColor: colors.black,
624
+ shadowOffset: {width: 0, height: 1},
625
+ shadowOpacity: 0.12,
626
+ shadowRadius: 2,
627
+ }
628
+ : {
629
+ elevation: 1,
630
+ }),
631
+ },
632
+ methodBadgeText: {
633
+ fontFamily: AppFonts.interBold,
634
+ fontSize: 9.5,
635
+ letterSpacing: 0.6,
636
+ color: colors.white,
637
+ },
638
+
639
+ cardHostText: {
640
+ fontFamily: AppFonts.interMedium,
641
+ fontSize: 12,
642
+ color: colors.primaryBlack,
643
+ flexShrink: 1,
644
+ },
645
+
646
+ statusPill: {
647
+ paddingHorizontal: 6,
648
+ paddingVertical: 2,
649
+ borderRadius: 6,
650
+ borderWidth: 1,
651
+ alignItems: 'center',
652
+ justifyContent: 'center',
653
+ },
654
+ statusPillText: {
655
+ fontFamily: AppFonts.interBold,
656
+ fontSize: 10,
657
+ },
658
+
659
+ cardSlugBox: {
660
+ flexDirection: 'row',
661
+ alignItems: 'center',
662
+ justifyContent: 'space-between',
663
+ backgroundColor: `${colors.brandPurple}08`,
664
+ borderRadius: 8,
665
+ borderWidth: 1,
666
+ borderColor: `${colors.brandPurple}18`,
667
+ paddingHorizontal: 8,
668
+ paddingVertical: 6,
669
+ marginVertical: 5,
670
+ gap: 6,
671
+ },
672
+ slugLeft: {
673
+ flexDirection: 'row',
674
+ alignItems: 'flex-start',
675
+ flex: 1,
676
+ gap: 6,
677
+ },
678
+ slugTag: {
679
+ fontFamily: AppFonts.interBold,
680
+ fontSize: 8.5,
681
+ color: colors.brandPurple,
682
+ letterSpacing: 0.5,
683
+ backgroundColor: `${colors.brandPurple}15`,
684
+ paddingHorizontal: 4,
685
+ paddingVertical: 1.5,
686
+ borderRadius: 4,
687
+ marginTop: 1,
688
+ },
689
+ slugText: {
690
+ fontFamily: AppFonts.interMedium,
691
+ fontSize: 11.5,
692
+ lineHeight: 15.5,
693
+ color: colors.primaryBlack,
694
+ flex: 1,
695
+ },
696
+ slugRight: {
697
+ flexDirection: 'row',
698
+ alignItems: 'center',
699
+ gap: 4,
700
+ },
701
+
702
+ cardFooterRow: {
703
+ flexDirection: 'row',
704
+ alignItems: 'center',
705
+ justifyContent: 'space-between',
706
+ marginTop: 2,
707
+ },
708
+ cardDateRow: {
709
+ flexDirection: 'row',
710
+ alignItems: 'center',
711
+ gap: 3.5,
712
+ },
713
+ cardDateText: {
714
+ fontFamily: AppFonts.interRegular,
715
+ color: colors.grayTextWeak,
716
+ fontSize: 10,
717
+ letterSpacing: 0.1,
718
+ },
719
+ cardFooterRight: {
720
+ flexDirection: 'row',
721
+ alignItems: 'center',
722
+ gap: 5,
723
+ },
724
+
725
+ chip: {
726
+ flexDirection: 'row',
727
+ alignItems: 'center',
728
+ gap: 3.5,
729
+ paddingHorizontal: 5,
730
+ paddingVertical: 2,
731
+ borderRadius: 5,
732
+ borderWidth: 1,
733
+ },
734
+ chipText: {
735
+ fontFamily: AppFonts.interBold,
736
+ fontSize: 9.5,
737
+ },
738
+
739
+ empty: {
740
+ flex: 1,
741
+ alignItems: 'center',
742
+ justifyContent: 'center',
743
+ },
744
+ emptyContainer: {
745
+ flex: 1,
746
+ alignItems: 'center',
747
+ justifyContent: 'center',
748
+ paddingVertical: 80,
749
+ paddingHorizontal: 20,
750
+ },
751
+ emptyIconWrap: {
752
+ width: 72,
753
+ height: 72,
754
+ borderRadius: 36,
755
+ backgroundColor: colors.purpleShade50,
756
+ alignItems: 'center',
757
+ justifyContent: 'center',
758
+ marginBottom: 20,
759
+ shadowColor: colors.black,
760
+ shadowOffset: {width: 0, height: 2},
761
+ shadowOpacity: 0.06,
762
+ shadowRadius: 4,
763
+ elevation: 1,
764
+ },
765
+ emptyTitle: {
766
+ fontFamily: AppFonts.interBold,
767
+ color: colors.grayTextStrong,
768
+ fontSize: 18,
769
+ marginBottom: 8,
770
+ letterSpacing: 0.3,
771
+ },
772
+ emptySub: {
773
+ fontFamily: AppFonts.interRegular,
774
+ color: colors.grayTextWeak,
775
+ fontSize: 14,
776
+ textAlign: 'center',
777
+ lineHeight: 20,
778
+ letterSpacing: 0.2,
779
+ },
780
+ reloadBtn: {
781
+ marginTop: 28,
782
+ paddingHorizontal: 24,
783
+ paddingVertical: 12,
784
+ backgroundColor: colors.purple,
785
+ borderRadius: 24,
786
+ shadowColor: colors.purple,
787
+ shadowOffset: {width: 0, height: 4},
788
+ shadowOpacity: 0.35,
789
+ shadowRadius: 8,
790
+ elevation: 5,
791
+ },
792
+ reloadBtnText: {
793
+ color: colors.white,
794
+ fontFamily: AppFonts.interBold,
795
+ fontSize: 14,
796
+ letterSpacing: 0.3,
797
+ },
798
+
799
+ detailInfoBar: {
800
+ borderRadius: 14,
801
+ paddingVertical: 14,
802
+ paddingHorizontal: 10,
803
+ marginBottom: 12,
804
+ borderWidth: 1,
805
+ borderColor: colors.grayBorderSecondary,
806
+ backgroundColor: colors.primaryLight,
807
+ shadowColor: colors.black,
808
+ shadowOffset: {width: 0, height: 2},
809
+ shadowOpacity: 0.05,
810
+ shadowRadius: 4,
811
+ elevation: 2,
812
+ },
813
+ detailInfoTop: {
814
+ flexDirection: 'row',
815
+ alignItems: 'center',
816
+ justifyContent: 'space-between',
817
+ paddingBottom: 10,
818
+ },
819
+ detailInfoRight: {flexDirection: 'row', alignItems: 'center', gap: 6},
820
+
821
+ metaContainer: {
822
+ backgroundColor: colors.primaryLight,
823
+ borderWidth: 1,
824
+ borderColor: colors.grayBorderSecondary,
825
+ borderRadius: 14,
826
+ marginBottom: 12,
827
+ overflow: 'hidden',
828
+ shadowColor: colors.black,
829
+ shadowOffset: {width: 0, height: 2},
830
+ shadowOpacity: 0.05,
831
+ shadowRadius: 4,
832
+ elevation: 2,
833
+ },
834
+ metaHeader: {
835
+ flexDirection: 'row',
836
+ alignItems: 'center',
837
+ justifyContent: 'space-between',
838
+ paddingHorizontal: 12,
839
+ paddingVertical: 10,
840
+ borderBottomWidth: 1,
841
+ borderBottomColor: colors.dividerColor,
842
+ backgroundColor: colors.primaryLight,
843
+ },
844
+ metaTitle: {
845
+ fontFamily: AppFonts.interBold,
846
+ color: colors.grayTextStrong,
847
+ fontSize: 12,
848
+ letterSpacing: 0.6,
849
+ textTransform: 'uppercase',
850
+ },
851
+ metaBody: {paddingHorizontal: 12, paddingBottom: 8, paddingTop: 4},
852
+ metaRow: {
853
+ flexDirection: 'row',
854
+ alignItems: 'center',
855
+ justifyContent: 'space-between',
856
+ paddingVertical: 8,
857
+ },
858
+ metaDivider: {height: 1, backgroundColor: colors.dividerColor},
859
+ metaLabelRow: {flexDirection: 'row', alignItems: 'center', gap: 8},
860
+ metaLabel: {
861
+ fontFamily: AppFonts.interBold,
862
+ color: colors.grayText,
863
+ fontSize: 13,
864
+ },
865
+ metaValue: {
866
+ fontFamily: AppFonts.interMedium,
867
+ color: colors.primaryBlack,
868
+ fontSize: 13,
869
+ },
870
+ metaValueRow: {flexDirection: 'row', alignItems: 'center', gap: 8},
871
+
872
+ perfBadge: {
873
+ paddingHorizontal: 8,
874
+ paddingVertical: 2,
875
+ borderRadius: 6,
876
+ borderWidth: 1,
877
+ },
878
+ perfBadgeText: {
879
+ fontFamily: AppFonts.interBold,
880
+ fontSize: 11,
881
+ },
882
+
883
+
884
+ detailSearchRow: {
885
+ flexDirection: 'row',
886
+ alignItems: 'center',
887
+ marginBottom: 10,
888
+ },
889
+ detailSearchBox: {
890
+ flex: 1,
891
+ flexDirection: 'row',
892
+ alignItems: 'center',
893
+ justifyContent: 'space-between',
894
+ backgroundColor: colors.primaryLight,
895
+ borderRadius: 12,
896
+ paddingLeft: 16,
897
+ borderWidth: 1,
898
+ borderColor: colors.grayBorderSecondary,
899
+ },
900
+ detailSearchInput: {
901
+ flex: 1,
902
+ fontFamily: AppFonts.interRegular,
903
+ color: colors.primaryBlack,
904
+ height: 40,
905
+ },
906
+
907
+ sectionContainer: {
908
+ backgroundColor: colors.primaryLight,
909
+ borderWidth: 1,
910
+ borderColor: colors.grayBorderSecondary,
911
+ borderRadius: 12,
912
+ marginBottom: 10,
913
+ overflow: 'hidden',
914
+ },
915
+ sectionHeaderGradient: {
916
+ backgroundColor: colors.grayBackground,
917
+ paddingVertical: 12,
918
+ paddingHorizontal: 8,
919
+ borderBottomWidth: 1,
920
+ borderBottomColor: colors.dividerColor,
921
+ },
922
+ sectionHeaderRow: {
923
+ flexDirection: 'row',
924
+ alignItems: 'center',
925
+ justifyContent: 'space-between',
926
+ },
927
+ sectionTitleRow: {
928
+ flexDirection: 'row',
929
+ alignItems: 'center',
930
+ gap: 8,
931
+ flex: 1,
932
+ marginRight: 8,
933
+ },
934
+ sectionTitle: {
935
+ fontFamily: AppFonts.interBold,
936
+ color: colors.grayTextStrong,
937
+ fontSize: 14,
938
+ flexShrink: 1,
939
+ },
940
+ sectionHeaderActions: {flexDirection: 'row', alignItems: 'center', gap: 6},
941
+
942
+ htCard: {
943
+ backgroundColor: colors.primaryLight,
944
+ borderRadius: 12,
945
+ borderWidth: 1,
946
+ borderColor: colors.grayBorderSecondary,
947
+ borderLeftWidth: 3,
948
+ marginBottom: 10,
949
+ overflow: 'hidden',
950
+ },
951
+ htCardHeader: {
952
+ flexDirection: 'row',
953
+ alignItems: 'center',
954
+ paddingHorizontal: 8,
955
+ paddingVertical: 10,
956
+ gap: 8,
957
+ borderBottomWidth: 1,
958
+ borderBottomColor: colors.dividerColor,
959
+ backgroundColor: colors.primaryLight,
960
+ },
961
+ htIconWrap: {
962
+ width: 28,
963
+ height: 28,
964
+ borderRadius: 8,
965
+ alignItems: 'center',
966
+ justifyContent: 'center',
967
+ },
968
+ htTitle: {
969
+ fontFamily: AppFonts.interBold,
970
+ color: colors.grayTextStrong,
971
+ fontSize: 13,
972
+ flexShrink: 1,
973
+ },
974
+ htBadge: {
975
+ borderRadius: 10,
976
+ paddingHorizontal: 7,
977
+ paddingVertical: 2,
978
+ borderWidth: 1,
979
+ },
980
+ htBadgeText: {
981
+ fontFamily: AppFonts.interBold,
982
+ fontSize: 10,
983
+ },
984
+ htHeaderSpacer: {flex: 1},
985
+ htChevronBtn: {
986
+ width: 30,
987
+ height: 30,
988
+ borderRadius: 8,
989
+ borderWidth: 1,
990
+ borderColor: colors.grayBorderSecondary,
991
+ backgroundColor: colors.primaryLight,
992
+ alignItems: 'center',
993
+ justifyContent: 'center',
994
+ },
995
+ htColHeadRow: {
996
+ flexDirection: 'row',
997
+ paddingHorizontal: 8,
998
+ paddingVertical: 6,
999
+ backgroundColor: colors.graySurface,
1000
+ borderBottomWidth: 1,
1001
+ borderBottomColor: colors.dividerColor,
1002
+ },
1003
+ htColHead: {
1004
+ fontFamily: AppFonts.interBold,
1005
+ color: colors.grayTextWeak,
1006
+ fontSize: 10,
1007
+ letterSpacing: 0.8,
1008
+ textTransform: 'uppercase',
1009
+ },
1010
+ htRow: {
1011
+ flexDirection: 'row',
1012
+ paddingHorizontal: 8,
1013
+ paddingVertical: 0,
1014
+ alignItems: 'flex-start',
1015
+ },
1016
+ htRowBorder: {
1017
+ borderBottomWidth: StyleSheet.hairlineWidth,
1018
+ borderBottomColor: colors.dividerColor,
1019
+ },
1020
+ htKeyCell: {
1021
+ width: '30%',
1022
+ paddingVertical: 10,
1023
+ paddingRight: 4,
1024
+ },
1025
+ htKey: {
1026
+ fontFamily: AppFonts.interMedium,
1027
+ color: colors.purple,
1028
+ fontSize: 11,
1029
+ lineHeight: 16,
1030
+ },
1031
+ htCellDivider: {
1032
+ width: StyleSheet.hairlineWidth,
1033
+ backgroundColor: colors.dividerColor,
1034
+ alignSelf: 'stretch',
1035
+ marginVertical: 4,
1036
+ },
1037
+ htValueCell: {
1038
+ flex: 1,
1039
+ paddingVertical: 10,
1040
+ paddingLeft: 6,
1041
+ },
1042
+ htValue: {
1043
+ fontFamily: AppFonts.interRegular,
1044
+ color: colors.primaryBlack,
1045
+ fontSize: 11,
1046
+ lineHeight: 17,
1047
+ },
1048
+ htExpandRow: {
1049
+ marginTop: 4,
1050
+ },
1051
+ htExpandText: {
1052
+ fontFamily: AppFonts.interBold,
1053
+ color: colors.purple,
1054
+ fontSize: 10,
1055
+ letterSpacing: 0.3,
1056
+ },
1057
+ htCopyBtn: {
1058
+ paddingHorizontal: 6,
1059
+ paddingVertical: 12,
1060
+ alignItems: 'center',
1061
+ justifyContent: 'center',
1062
+ },
1063
+ htEmpty: {
1064
+ paddingHorizontal: 12,
1065
+ paddingVertical: 16,
1066
+ alignItems: 'center',
1067
+ },
1068
+ htEmptyText: {
1069
+ fontFamily: AppFonts.interRegular,
1070
+ color: colors.grayTextWeak,
1071
+ fontSize: 12,
1072
+ },
1073
+
1074
+ iconSquareBtn: {
1075
+ width: 30,
1076
+ height: 30,
1077
+ borderRadius: 8,
1078
+ borderWidth: 1,
1079
+ borderColor: colors.grayBorderSecondary,
1080
+ backgroundColor: colors.grayBackground,
1081
+ alignItems: 'center',
1082
+ justifyContent: 'center',
1083
+ },
1084
+ iconSquareBtnSuccess: {
1085
+ borderColor: colors.greenColor,
1086
+ backgroundColor: colors.greenStatus,
1087
+ },
1088
+ iconSquareBtnActive: {
1089
+ borderColor: colors.skyBlue,
1090
+ backgroundColor: colors.purpleShade50,
1091
+ },
1092
+
1093
+ codeBlockScroll: {width: '100%', backgroundColor: 'transparent'},
1094
+ codeBlock: {
1095
+ paddingTop: 12,
1096
+ paddingHorizontal: 8,
1097
+ paddingBottom: 16,
1098
+ minWidth: '100%',
1099
+ },
1100
+ codeSyntax: {
1101
+ color: colors.grayTextWeak,
1102
+ fontFamily: AppFonts.interRegular,
1103
+ fontSize: 12.5,
1104
+ lineHeight: 18,
1105
+ },
1106
+ codeKey: {
1107
+ color: colors.purple,
1108
+ fontFamily: AppFonts.interBold,
1109
+ fontSize: 12.5,
1110
+ lineHeight: 18,
1111
+ },
1112
+ codeText: {
1113
+ color: colors.greenBaggageText,
1114
+ fontFamily: AppFonts.interRegular,
1115
+ fontSize: 12.5,
1116
+ lineHeight: 18,
1117
+ },
1118
+ codeTextNil: {
1119
+ color: colors.errorColor,
1120
+ fontFamily: AppFonts.interMedium,
1121
+ fontSize: 12.5,
1122
+ lineHeight: 18,
1123
+ },
1124
+
1125
+ treeRow: {flexDirection: 'row', alignItems: 'center', paddingVertical: 6},
1126
+ treeKeyMargin: {marginRight: 6},
1127
+
1128
+ highlight: {
1129
+ backgroundColor: colors.paleYellow,
1130
+ color: colors.primaryBlack,
1131
+ },
1132
+ arrayBadge: {
1133
+ backgroundColor: colors.purpleShade50,
1134
+ borderColor: colors.purple,
1135
+ borderWidth: 1,
1136
+ borderRadius: 6,
1137
+ paddingHorizontal: 6,
1138
+ paddingVertical: 2,
1139
+ },
1140
+ arrayBadgeText: {
1141
+ fontFamily: AppFonts.interMedium,
1142
+ color: colors.purple,
1143
+ fontSize: 11,
1144
+ },
1145
+ objectBadge: {
1146
+ backgroundColor: colors.grayBackground,
1147
+ borderColor: colors.grayTextWeak,
1148
+ borderWidth: 1,
1149
+ borderRadius: 6,
1150
+ paddingHorizontal: 6,
1151
+ paddingVertical: 2,
1152
+ },
1153
+ objectBadgeText: {
1154
+ fontFamily: AppFonts.interMedium,
1155
+ color: colors.grayTextWeak,
1156
+ fontSize: 11,
1157
+ },
1158
+
1159
+ diffBlock: {
1160
+ paddingTop: 12,
1161
+ paddingHorizontal: 12,
1162
+ paddingBottom: 16,
1163
+ gap: 4,
1164
+ },
1165
+ diffAdded: {
1166
+ color: colors.greenColor,
1167
+ fontFamily: AppFonts.interRegular,
1168
+ fontSize: 12,
1169
+ },
1170
+ diffRemoved: {
1171
+ color: colors.errorColor,
1172
+ fontFamily: AppFonts.interRegular,
1173
+ fontSize: 12,
1174
+ },
1175
+ diffChanged: {
1176
+ color: colors.lightOrange,
1177
+ fontFamily: AppFonts.interRegular,
1178
+ fontSize: 12,
1179
+ },
1180
+
1181
+ filePreviewNode: {paddingVertical: 8, marginVertical: 4},
1182
+ filePreviewCard: {
1183
+ flexDirection: 'row',
1184
+ alignItems: 'center',
1185
+ backgroundColor: colors.grayBackground,
1186
+ borderRadius: 10,
1187
+ padding: 10,
1188
+ borderWidth: 1,
1189
+ borderColor: colors.grayBorderSecondary,
1190
+ gap: 12,
1191
+ maxWidth: 300,
1192
+ },
1193
+ filePreviewThumb: {
1194
+ width: 44,
1195
+ height: 44,
1196
+ borderRadius: 6,
1197
+ backgroundColor: colors.grayBorderSecondary,
1198
+ },
1199
+ filePreviewDoc: {
1200
+ width: 44,
1201
+ height: 44,
1202
+ borderRadius: 6,
1203
+ backgroundColor: colors.graySurface,
1204
+ alignItems: 'center',
1205
+ justifyContent: 'center',
1206
+ },
1207
+ filePreviewName: {
1208
+ fontFamily: AppFonts.interMedium,
1209
+ color: colors.primaryBlack,
1210
+ fontSize: 13,
1211
+ marginBottom: 2,
1212
+ },
1213
+ filePreviewType: {
1214
+ fontFamily: AppFonts.interRegular,
1215
+ color: colors.grayText,
1216
+ fontSize: 11,
1217
+ },
1218
+
1219
+ imagePreviewWrapper: {
1220
+ width: '100%',
1221
+ height: 200,
1222
+ borderRadius: 12,
1223
+ overflow: 'hidden',
1224
+ marginBottom: 16,
1225
+ backgroundColor: colors.grayBackground,
1226
+ borderWidth: 1,
1227
+ borderColor: colors.grayBorderSecondary,
1228
+ },
1229
+ imagePreview: {
1230
+ width: '100%',
1231
+ height: '100%',
1232
+ },
1233
+ imageDownloadBtn: {
1234
+ position: 'absolute',
1235
+ bottom: 12,
1236
+ right: 12,
1237
+ width: 36,
1238
+ height: 36,
1239
+ borderRadius: 18,
1240
+ backgroundColor: `${colors.white}E6`,
1241
+ alignItems: 'center',
1242
+ justifyContent: 'center',
1243
+ shadowColor: colors.black,
1244
+ shadowOffset: {width: 0, height: 2},
1245
+ shadowOpacity: 0.2,
1246
+ shadowRadius: 4,
1247
+ elevation: 3,
1248
+ },
1249
+
1250
+ sourcePageCard: {
1251
+ backgroundColor: colors.primaryLight,
1252
+ borderWidth: 1,
1253
+ borderColor: colors.grayBorderSecondary,
1254
+ borderRadius: 12,
1255
+ marginBottom: 10,
1256
+ overflow: 'hidden',
1257
+ },
1258
+ sourcePageAccordionHeader: {
1259
+ flexDirection: 'row',
1260
+ alignItems: 'center',
1261
+ justifyContent: 'space-between',
1262
+ paddingHorizontal: 12,
1263
+ paddingVertical: 10,
1264
+ borderBottomWidth: 1,
1265
+ borderBottomColor: colors.dividerColor,
1266
+ backgroundColor: colors.primaryLight,
1267
+ },
1268
+ sourcePageTop: {
1269
+ flexDirection: 'row',
1270
+ alignItems: 'center',
1271
+ gap: 10,
1272
+ flex: 1,
1273
+ },
1274
+ sourcePageHeaderRight: {
1275
+ flexDirection: 'row',
1276
+ alignItems: 'center',
1277
+ gap: 6,
1278
+ },
1279
+ sourcePageIcon: {
1280
+ width: 36,
1281
+ height: 36,
1282
+ borderRadius: 10,
1283
+ backgroundColor: colors.purpleShade50,
1284
+ borderWidth: 1,
1285
+ borderColor: `${colors.purple}30`,
1286
+ alignItems: 'center',
1287
+ justifyContent: 'center',
1288
+ },
1289
+ sourcePageLabel: {
1290
+ fontFamily: AppFonts.interRegular,
1291
+ color: colors.grayText,
1292
+ fontSize: 11,
1293
+ marginBottom: 2,
1294
+ },
1295
+ sourcePageValue: {
1296
+ fontFamily: AppFonts.interBold,
1297
+ color: colors.purple,
1298
+ fontSize: 14,
1299
+ },
1300
+ sourceParamsBox: {
1301
+ borderTopWidth: 1,
1302
+ borderTopColor: colors.dividerColor,
1303
+ },
1304
+ paramsAccordionHeader: {
1305
+ flexDirection: 'row',
1306
+ alignItems: 'center',
1307
+ justifyContent: 'space-between',
1308
+ paddingHorizontal: 12,
1309
+ paddingVertical: 10,
1310
+ borderBottomWidth: 1,
1311
+ borderBottomColor: colors.dividerColor,
1312
+ backgroundColor: colors.grayBackground,
1313
+ },
1314
+ paramsAccordionLeft: {
1315
+ flexDirection: 'row',
1316
+ alignItems: 'center',
1317
+ gap: 8,
1318
+ },
1319
+ paramsAccordionRight: {
1320
+ flexDirection: 'row',
1321
+ alignItems: 'center',
1322
+ gap: 6,
1323
+ },
1324
+ sourceParamsLabel: {
1325
+ fontFamily: AppFonts.interBold,
1326
+ color: colors.grayTextStrong,
1327
+ fontSize: 12,
1328
+ letterSpacing: 0.4,
1329
+ textTransform: 'uppercase',
1330
+ },
1331
+ paramsBody: {
1332
+ paddingHorizontal: 12,
1333
+ paddingBottom: 8,
1334
+ paddingTop: 4,
1335
+ },
1336
+ paramRow: {
1337
+ flexDirection: 'row',
1338
+ alignItems: 'center',
1339
+ justifyContent: 'space-between',
1340
+ paddingVertical: 10,
1341
+ gap: 8,
1342
+ },
1343
+ paramRowBorder: {
1344
+ borderBottomWidth: 1,
1345
+ borderBottomColor: colors.dividerColor,
1346
+ },
1347
+ paramKey: {
1348
+ fontFamily: AppFonts.Sfprotext,
1349
+ color: colors.purple,
1350
+ fontSize: 12,
1351
+ flex: 1,
1352
+ },
1353
+ paramValueRow: {
1354
+ flexDirection: 'row',
1355
+ alignItems: 'center',
1356
+ gap: 8,
1357
+ flex: 2,
1358
+ justifyContent: 'flex-end',
1359
+ },
1360
+ paramValue: {
1361
+ fontFamily: AppFonts.Sfprotext,
1362
+ color: colors.greenBaggageText,
1363
+ fontSize: 12,
1364
+ textAlign: 'right',
1365
+ flexShrink: 1,
1366
+ },
1367
+ headerGradient: {
1368
+ width: '100%',
1369
+ borderTopLeftRadius: 20,
1370
+ borderTopRightRadius: 20,
1371
+ overflow: 'hidden',
1372
+ },
1373
+
1374
+ // Status chip used in MetaAccordion
1375
+ statusChip: {
1376
+ paddingHorizontal: 10,
1377
+ paddingVertical: 4,
1378
+ borderRadius: 8,
1379
+ borderWidth: 1,
1380
+ },
1381
+ statusText: {
1382
+ fontFamily: AppFonts.interBold,
1383
+ fontSize: 12,
1384
+ },
1385
+
1386
+ // ─── Tab Bar ───────────────────────────────────────────────────────────────
1387
+
1388
+ // ─── Screen Grouping Headers ───────────────────────────────────────────────
1389
+ modalBackdrop: {
1390
+ flex: 1,
1391
+ backgroundColor: `${colors.black}73`,
1392
+ justifyContent: 'flex-end',
1393
+ },
1394
+ modalBackdropPressable: {
1395
+ ...StyleSheet.absoluteFillObject,
1396
+ },
1397
+ modalContentCard: {
1398
+ height: '90%',
1399
+ backgroundColor: colors.grayBackground,
1400
+ borderTopLeftRadius: 20,
1401
+ borderTopRightRadius: 20,
1402
+ overflow: 'hidden',
1403
+ shadowColor: colors.black,
1404
+ shadowOffset: {width: 0, height: -4},
1405
+ shadowOpacity: 0.15,
1406
+ shadowRadius: 10,
1407
+ elevation: 24,
1408
+ },
1409
+ tabBarContainer: {
1410
+ backgroundColor: colors.primaryLight,
1411
+ borderBottomWidth: 1,
1412
+ borderBottomColor: colors.dividerColor,
1413
+ paddingVertical: 8,
1414
+ paddingHorizontal: 12,
1415
+ },
1416
+ contentTabButton: {
1417
+ flexDirection: 'row',
1418
+ alignItems: 'center',
1419
+ paddingHorizontal: 10,
1420
+ paddingVertical: 5,
1421
+ borderRadius: 8,
1422
+ marginRight: 10,
1423
+ backgroundColor: colors.grayBackground,
1424
+ borderWidth: 1,
1425
+ borderColor: colors.dividerColor,
1426
+ },
1427
+ contentTabButtonActive: {
1428
+ backgroundColor: colors.purple,
1429
+ borderColor: colors.purple,
1430
+ shadowColor: colors.purple,
1431
+ shadowOffset: {width: 0, height: 2},
1432
+ shadowOpacity: 0.12,
1433
+ shadowRadius: 3,
1434
+ elevation: 3,
1435
+ },
1436
+ contentTabButtonText: {
1437
+ fontFamily: AppFonts.interMedium,
1438
+ fontSize: 11.5,
1439
+ color: colors.grayText,
1440
+ },
1441
+ contentTabButtonTextActive: {
1442
+ color: colors.white,
1443
+ fontFamily: AppFonts.interBold,
1444
+ },
1445
+ analyticsHeaderCard: {
1446
+ backgroundColor: colors.primaryLight,
1447
+ borderRadius: 12,
1448
+ borderWidth: 1,
1449
+ borderColor: `${colors.brandPurple}20`,
1450
+ padding: 12,
1451
+ marginHorizontal: 10,
1452
+ marginTop: 8,
1453
+ marginBottom: 6,
1454
+ shadowColor: colors.black,
1455
+ shadowOpacity: 0.03,
1456
+ shadowRadius: 4,
1457
+ shadowOffset: {width: 0, height: 1},
1458
+ elevation: 1,
1459
+ },
1460
+ analyticsHeaderTop: {
1461
+ flexDirection: 'row',
1462
+ justifyContent: 'space-between',
1463
+ alignItems: 'center',
1464
+ },
1465
+ analyticsHeaderTitle: {
1466
+ fontFamily: AppFonts.interBold,
1467
+ fontSize: 13.5,
1468
+ color: colors.primaryBlack,
1469
+ },
1470
+ statusDot: {
1471
+ width: 6,
1472
+ height: 6,
1473
+ borderRadius: 3,
1474
+ },
1475
+ analyticsHeaderSubtitle: {
1476
+ fontFamily: AppFonts.interMedium,
1477
+ fontSize: 11,
1478
+ color: colors.grayTextWeak,
1479
+ marginTop: 2,
1480
+ },
1481
+ analyticsHeaderToggle: {
1482
+ paddingVertical: 4.5,
1483
+ paddingHorizontal: 9,
1484
+ borderRadius: 7,
1485
+ backgroundColor: `${colors.brandPurple}12`,
1486
+ borderWidth: 1,
1487
+ borderColor: `${colors.brandPurple}25`,
1488
+ },
1489
+ analyticsHeaderToggleText: {
1490
+ fontFamily: AppFonts.interBold,
1491
+ fontSize: 10.5,
1492
+ color: colors.brandPurple,
1493
+ },
1494
+ analyticsStatsRow: {
1495
+ flexDirection: 'row',
1496
+ gap: 8,
1497
+ borderTopWidth: 1,
1498
+ borderTopColor: colors.dividerColor,
1499
+ paddingTop: 10,
1500
+ },
1501
+ analyticsStatBox: {
1502
+ flex: 1,
1503
+ backgroundColor: colors.grayBackground,
1504
+ borderRadius: 6,
1505
+ paddingVertical: 6,
1506
+ alignItems: 'center',
1507
+ },
1508
+ analyticsStatValue: {
1509
+ fontFamily: AppFonts.interBold,
1510
+ fontSize: 14,
1511
+ color: colors.primaryBlack,
1512
+ },
1513
+ analyticsStatLabel: {
1514
+ fontFamily: AppFonts.interRegular,
1515
+ fontSize: 9,
1516
+ color: colors.grayText,
1517
+ marginTop: 1,
1518
+ },
1519
+ analyticsHeaderDetails: {
1520
+ borderTopWidth: 1,
1521
+ borderTopColor: colors.dividerColor,
1522
+ paddingTop: 10,
1523
+ marginTop: 10,
1524
+ },
1525
+ detailsGroupTitle: {
1526
+ fontFamily: AppFonts.interBold,
1527
+ fontSize: 11,
1528
+ color: colors.purple,
1529
+ marginBottom: 6,
1530
+ },
1531
+ detailsRow: {
1532
+ flexDirection: 'row',
1533
+ justifyContent: 'space-between',
1534
+ paddingVertical: 4,
1535
+ borderBottomWidth: 0.5,
1536
+ borderBottomColor: colors.dividerColor,
1537
+ },
1538
+ detailsKey: {
1539
+ fontFamily: AppFonts.interMedium,
1540
+ fontSize: 11,
1541
+ color: colors.primaryBlack,
1542
+ },
1543
+ detailsValue: {
1544
+ fontFamily: AppFonts.interRegular,
1545
+ fontSize: 11,
1546
+ color: colors.grayText,
1547
+ },
1548
+ });
1549
+
1550
+ const styles = {} as any;
1551
+
1552
+ const rebuildStyles = (isDark: boolean) => {
1553
+ const colors = isDark ? getThemeColors(true) : AppColors;
1554
+ const newStyles = getRawStyles(colors);
1555
+
1556
+ // Clear old keys and copy new ones
1557
+ Object.keys(styles).forEach(key => delete styles[key]);
1558
+ Object.assign(styles, newStyles);
1559
+ };
1560
+
1561
+ // Initial build
1562
+ rebuildStyles(false);
1563
+
1564
+ export const toggleGlobalTheme = (isDark: boolean) => {
1565
+ updateAppColorsTheme(isDark);
1566
+ rebuildStyles(isDark);
1567
+ rebuildCommonStyles(isDark ? getThemeColors(true) : AppColors);
1568
+ };
1569
+
1570
+ export default styles;