react-native-inapp-inspector 1.1.28 → 1.1.31

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 (77) hide show
  1. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.java +29 -80
  2. package/dist/commonjs/components/AnalyticsDetail.js +668 -108
  3. package/dist/commonjs/components/AppHeaderLogo.js +15 -15
  4. package/dist/commonjs/components/ConsoleLogCard.js +112 -66
  5. package/dist/commonjs/components/CopyButton.js +15 -1
  6. package/dist/commonjs/components/DomainHeader.js +64 -32
  7. package/dist/commonjs/components/HighlightText.js +7 -1
  8. package/dist/commonjs/components/Inspector/AnalyticsTab.js +332 -221
  9. package/dist/commonjs/components/Inspector/ConsoleTab.js +162 -56
  10. package/dist/commonjs/components/Inspector/InspectorHeader.js +70 -119
  11. package/dist/commonjs/components/Inspector/LogDetail.js +53 -17
  12. package/dist/commonjs/components/Inspector/MainScreen.js +4 -0
  13. package/dist/commonjs/components/Inspector/NetworkDetail.js +24 -24
  14. package/dist/commonjs/components/Inspector/NetworkTab.js +4 -1
  15. package/dist/commonjs/components/Inspector/ReduxDetail.js +237 -42
  16. package/dist/commonjs/components/Inspector/ReduxTab.js +456 -35
  17. package/dist/commonjs/components/JsonViewer.js +26 -4
  18. package/dist/commonjs/components/LogCard.js +103 -11
  19. package/dist/commonjs/components/NetworkIcons.js +19 -10
  20. package/dist/commonjs/components/Toast.d.ts +3 -0
  21. package/dist/commonjs/components/Toast.js +152 -0
  22. package/dist/commonjs/components/TouchableScale.d.ts +1 -0
  23. package/dist/commonjs/components/TouchableScale.js +3 -3
  24. package/dist/commonjs/components/TreeNode.js +12 -2
  25. package/dist/commonjs/constants/index.js +6 -6
  26. package/dist/commonjs/constants/version.d.ts +1 -1
  27. package/dist/commonjs/constants/version.js +1 -1
  28. package/dist/commonjs/customHooks/reduxLogger.js +128 -5
  29. package/dist/commonjs/helpers/index.d.ts +4 -0
  30. package/dist/commonjs/helpers/index.js +107 -92
  31. package/dist/commonjs/helpers/toast.d.ts +4 -0
  32. package/dist/commonjs/helpers/toast.js +20 -0
  33. package/dist/commonjs/i18n/locales/en.json +49 -3
  34. package/dist/commonjs/styles/AppColors.d.ts +6 -0
  35. package/dist/commonjs/styles/AppColors.js +6 -0
  36. package/dist/commonjs/styles/index.d.ts +82 -15
  37. package/dist/commonjs/styles/index.js +92 -26
  38. package/dist/commonjs/types/interfaces.d.ts +7 -0
  39. package/dist/esm/components/AnalyticsDetail.js +670 -110
  40. package/dist/esm/components/AppHeaderLogo.js +15 -15
  41. package/dist/esm/components/ConsoleLogCard.js +114 -68
  42. package/dist/esm/components/CopyButton.js +15 -1
  43. package/dist/esm/components/DomainHeader.js +64 -32
  44. package/dist/esm/components/HighlightText.js +7 -1
  45. package/dist/esm/components/Inspector/AnalyticsTab.js +334 -223
  46. package/dist/esm/components/Inspector/ConsoleTab.js +163 -57
  47. package/dist/esm/components/Inspector/InspectorHeader.js +71 -120
  48. package/dist/esm/components/Inspector/LogDetail.js +55 -19
  49. package/dist/esm/components/Inspector/MainScreen.js +4 -0
  50. package/dist/esm/components/Inspector/NetworkDetail.js +25 -25
  51. package/dist/esm/components/Inspector/NetworkTab.js +4 -1
  52. package/dist/esm/components/Inspector/ReduxDetail.js +239 -44
  53. package/dist/esm/components/Inspector/ReduxTab.js +458 -37
  54. package/dist/esm/components/JsonViewer.js +26 -4
  55. package/dist/esm/components/LogCard.js +105 -13
  56. package/dist/esm/components/NetworkIcons.js +19 -10
  57. package/dist/esm/components/Toast.d.ts +3 -0
  58. package/dist/esm/components/Toast.js +117 -0
  59. package/dist/esm/components/TouchableScale.d.ts +1 -0
  60. package/dist/esm/components/TouchableScale.js +3 -3
  61. package/dist/esm/components/TreeNode.js +12 -2
  62. package/dist/esm/constants/index.js +6 -6
  63. package/dist/esm/constants/version.d.ts +1 -1
  64. package/dist/esm/constants/version.js +1 -1
  65. package/dist/esm/customHooks/reduxLogger.js +128 -5
  66. package/dist/esm/helpers/index.d.ts +4 -0
  67. package/dist/esm/helpers/index.js +102 -92
  68. package/dist/esm/helpers/toast.d.ts +4 -0
  69. package/dist/esm/helpers/toast.js +15 -0
  70. package/dist/esm/i18n/locales/en.json +49 -3
  71. package/dist/esm/styles/AppColors.d.ts +6 -0
  72. package/dist/esm/styles/AppColors.js +6 -0
  73. package/dist/esm/styles/index.d.ts +82 -15
  74. package/dist/esm/styles/index.js +92 -26
  75. package/dist/esm/types/interfaces.d.ts +7 -0
  76. package/ios/NetworkInspectorModule.m +0 -10
  77. package/package.json +13 -10
@@ -1,4 +1,6 @@
1
- import { Clipboard, Platform, ToastAndroid, Alert, NativeModules, Linking, TurboModuleRegistry, } from 'react-native';
1
+ import { Platform, ToastAndroid, Alert, NativeModules, Linking, } from 'react-native';
2
+ import Clipboard from '@react-native-clipboard/clipboard';
3
+ import { showToast } from './toast';
2
4
  // Stylesheet
3
5
  import { AppColors } from '../styles/AppColors';
4
6
  // Constants
@@ -23,6 +25,19 @@ export const formatDateTime = (timestamp) => {
23
25
  const seconds = pad(date.getSeconds());
24
26
  return `${day}/${month}/${year} ${hours}:${minutes}:${seconds}`;
25
27
  };
28
+ export const formatTimestamp = (timestamp) => {
29
+ try {
30
+ const date = new Date(timestamp);
31
+ const hours = date.getHours().toString().padStart(2, '0');
32
+ const minutes = date.getMinutes().toString().padStart(2, '0');
33
+ const seconds = date.getSeconds().toString().padStart(2, '0');
34
+ const ms = date.getMilliseconds().toString().padStart(3, '0');
35
+ return `${hours}:${minutes}:${seconds}.${ms}`;
36
+ }
37
+ catch {
38
+ return '—';
39
+ }
40
+ };
26
41
  export const getStatusColor = (status) => {
27
42
  if (!status || status === 0)
28
43
  return AppColors.errorColor;
@@ -52,104 +67,43 @@ export const getSize = (data) => {
52
67
  return '—';
53
68
  }
54
69
  };
55
- // Safely detect and load clipboard natively without static require() calls that Metro fails on
56
- const getClipboardModule = () => {
57
- // 1. Check our built-in native module (NetworkInspectorModule)
58
- try {
59
- const tmReg = TurboModuleRegistry || globalThis.__turboModuleProxy;
60
- const inspectorMod = NativeModules?.NetworkInspectorModule ||
61
- (tmReg?.get ? tmReg.get('NetworkInspectorModule') : null);
62
- if (inspectorMod && typeof inspectorMod.copyToClipboard === 'function') {
63
- return {
64
- setString: (str) => inspectorMod.copyToClipboard(str),
65
- setStringAsync: (str) => inspectorMod.copyToClipboard(str),
66
- };
67
- }
70
+ export const copyToClipboard = (value, label) => {
71
+ const resolved = typeof value === 'function' ? value() : value;
72
+ let textToCopy = '';
73
+ if (typeof resolved === 'string') {
74
+ textToCopy = resolved;
68
75
  }
69
- catch { }
70
- // 2. Check TurboModuleRegistry (TurboModules / New Architecture)
71
- try {
72
- const tmReg = TurboModuleRegistry || globalThis.__turboModuleProxy;
73
- if (tmReg?.get) {
74
- const tm = tmReg.get('RNCClipboard') ||
75
- tmReg.get('NativeClipboard') ||
76
- tmReg.get('ExpoClipboard');
77
- if (tm &&
78
- (typeof tm.setString === 'function' ||
79
- typeof tm.setStringAsync === 'function')) {
80
- return tm;
81
- }
76
+ else {
77
+ try {
78
+ textToCopy = JSON.stringify(resolved, null, 2);
79
+ }
80
+ catch {
81
+ textToCopy = String(resolved);
82
82
  }
83
83
  }
84
- catch { }
85
- // 3. Check legacy NativeModules table (Bridge / Old Architecture)
84
+ // Use @react-native-clipboard/clipboard npm package
86
85
  try {
87
- if (NativeModules?.RNCClipboard &&
88
- typeof NativeModules.RNCClipboard.setString === 'function') {
89
- return NativeModules.RNCClipboard;
86
+ if (typeof Clipboard?.setString === 'function') {
87
+ Clipboard.setString(textToCopy);
90
88
  }
91
- if (NativeModules?.ExpoClipboard &&
92
- typeof NativeModules.ExpoClipboard.setStringAsync === 'function') {
93
- return NativeModules.ExpoClipboard;
94
- }
95
- if (NativeModules?.Clipboard &&
96
- typeof NativeModules.Clipboard.setString === 'function') {
97
- return NativeModules.Clipboard;
89
+ else if (typeof Clipboard?.default?.setString === 'function') {
90
+ Clipboard.default.setString(textToCopy);
98
91
  }
99
92
  }
100
- catch { }
101
- // 4. Check legacy React Native core Clipboard
102
- try {
103
- if (Clipboard && typeof Clipboard.setString === 'function') {
104
- return Clipboard;
93
+ catch (err) {
94
+ if (__DEV__) {
95
+ console.warn('[NetworkInspector] Clipboard.setString failed:', err);
105
96
  }
106
97
  }
107
- catch { }
108
- return null;
109
- };
110
- export const copyToClipboard = (value, label) => {
111
- const resolved = typeof value === 'function' ? value() : value;
112
- const text = typeof resolved === 'string' ? resolved : JSON.stringify(resolved, null, 2);
113
- const textToCopy = text ?? '';
114
- let copied = false;
98
+ // Trigger floating in-app bottom toast notification
115
99
  try {
116
- const cb = getClipboardModule();
117
- if (cb) {
118
- if (typeof cb.setStringAsync === 'function') {
119
- cb.setStringAsync(textToCopy);
120
- copied = true;
121
- }
122
- else if (typeof cb.setString === 'function') {
123
- cb.setString(textToCopy);
124
- copied = true;
125
- }
126
- }
100
+ showToast(label ? `${label} copied to clipboard` : 'Copied to clipboard');
127
101
  }
128
102
  catch { }
129
- // Built-in native module direct invocation
130
- if (!copied) {
131
- try {
132
- const inspectorMod = NativeModules?.NetworkInspectorModule;
133
- if (inspectorMod && typeof inspectorMod.copyToClipboard === 'function') {
134
- inspectorMod.copyToClipboard(textToCopy);
135
- copied = true;
136
- }
137
- }
138
- catch { }
139
- }
140
- if (!copied) {
141
- try {
142
- if (typeof navigator !== 'undefined' && navigator?.clipboard?.writeText) {
143
- navigator.clipboard.writeText(textToCopy);
144
- copied = true;
145
- }
146
- }
147
- catch { }
148
- }
149
- // Visual toast feedback on Android if ToastAndroid exists
103
+ // Native Android Toast fallback
150
104
  try {
151
105
  if (Platform.OS === 'android' && ToastAndroid?.show) {
152
- ToastAndroid.show(`${label} copied`, ToastAndroid.SHORT);
106
+ ToastAndroid.show(label ? `${label} copied to clipboard` : 'Copied to clipboard', ToastAndroid.SHORT);
153
107
  }
154
108
  }
155
109
  catch { }
@@ -535,11 +489,16 @@ export const parseStackLine = (rawLine, isOrigin = false) => {
535
489
  (functionName === 'next' && isNative);
536
490
  const isDependency = cleanPath.includes('node_modules') ||
537
491
  cleanPath.includes('react-native/Libraries') ||
538
- (cleanPath.includes('react-native-inapp-inspector') && !cleanPath.includes('/example/'));
492
+ (cleanPath.includes('react-native-inapp-inspector') &&
493
+ !cleanPath.includes('/example/'));
539
494
  const isUserCode = !isNative &&
540
495
  !isInternalBytecode &&
541
496
  !isDependency &&
542
- (fileExt === 'tsx' || fileExt === 'jsx' || fileExt === 'ts' || fileExt === 'js' || !fileName.includes('.bundle'));
497
+ (fileExt === 'tsx' ||
498
+ fileExt === 'jsx' ||
499
+ fileExt === 'ts' ||
500
+ fileExt === 'js' ||
501
+ !fileName.includes('.bundle'));
543
502
  const frameType = isUserCode
544
503
  ? 'app'
545
504
  : isDependency
@@ -547,7 +506,10 @@ export const parseStackLine = (rawLine, isOrigin = false) => {
547
506
  : isNative
548
507
  ? 'native'
549
508
  : 'runtime';
550
- const isRuntimeNoise = isInternalBytecode || isNative || functionName === 'asyncGeneratorStep' || functionName === '_next';
509
+ const isRuntimeNoise = isInternalBytecode ||
510
+ isNative ||
511
+ functionName === 'asyncGeneratorStep' ||
512
+ functionName === '_next';
551
513
  // Format clean relative project path
552
514
  let relativePath = cleanPath;
553
515
  if (relativePath.includes('/example/')) {
@@ -567,6 +529,7 @@ export const parseStackLine = (rawLine, isOrigin = false) => {
567
529
  functionName,
568
530
  fileName,
569
531
  fullPath: relativePath,
532
+ rawFilePath: fullPath,
570
533
  fileExt,
571
534
  frameType,
572
535
  isUserCode,
@@ -577,6 +540,46 @@ export const parseStackLine = (rawLine, isOrigin = false) => {
577
540
  copyableLocation,
578
541
  };
579
542
  };
543
+ /** Opens a file and line number directly in VS Code / system editor */
544
+ export const openInVSCode = (filePath, lineNumber, columnNumber) => {
545
+ const numLine = lineNumber ? Number(lineNumber) : 1;
546
+ const numCol = columnNumber ? Number(columnNumber) : 1;
547
+ const line = lineNumber ? `:${lineNumber}` : '';
548
+ const col = columnNumber ? `:${columnNumber}` : '';
549
+ const cleanPath = filePath.replace(/^file:\/\//, '');
550
+ // 1. Notify Metro dev server on host to launch editor directly on local system
551
+ const metroHosts = [
552
+ 'http://localhost:8081',
553
+ 'http://127.0.0.1:8081',
554
+ 'http://10.0.2.2:8081',
555
+ ];
556
+ metroHosts.forEach(host => {
557
+ try {
558
+ fetch(`${host}/open-stack-frame`, {
559
+ method: 'POST',
560
+ headers: { 'Content-Type': 'application/json' },
561
+ body: JSON.stringify({
562
+ file: cleanPath,
563
+ lineNumber: numLine,
564
+ column: numCol,
565
+ }),
566
+ }).catch(() => { });
567
+ }
568
+ catch { }
569
+ });
570
+ // 2. Also invoke native URL scheme handlers
571
+ const vscodeUrl = `vscode://file/${cleanPath.replace(/^\/+/, '')}${line}${col}`;
572
+ const cursorUrl = `cursor://file/${cleanPath.replace(/^\/+/, '')}${line}${col}`;
573
+ const vscodeInsidersUrl = `vscode-insiders://file/${cleanPath.replace(/^\/+/, '')}${line}${col}`;
574
+ Linking.openURL(vscodeUrl).catch(() => {
575
+ Linking.openURL(cursorUrl).catch(() => {
576
+ Linking.openURL(vscodeInsidersUrl).catch(() => {
577
+ // Fallback: Copy to clipboard so user can jump immediately
578
+ copyToClipboard(`${cleanPath}${line}${col}`, 'Location');
579
+ });
580
+ });
581
+ });
582
+ };
580
583
  // ─── Analytics Helpers ────────────────────────────────────────────────────────
581
584
  export const ANALYTICS_EVENT_PALETTE = [
582
585
  AppColors.googleBlue,
@@ -631,7 +634,11 @@ export const getCategoryColors = (category) => {
631
634
  export const getRuntimeDiagnostics = () => {
632
635
  const isHermes = typeof global.HermesInternal !== 'undefined';
633
636
  const isV8 = typeof global._v8runtime !== 'undefined';
634
- const engineType = isHermes ? 'hermes' : isV8 ? 'v8' : 'jsc';
637
+ const engineType = isHermes
638
+ ? 'hermes'
639
+ : isV8
640
+ ? 'v8'
641
+ : 'jsc';
635
642
  const isFabric = typeof global.nativeFabricUIManager !== 'undefined' ||
636
643
  Boolean(global.__turboModuleProxy);
637
644
  const archType = isFabric ? 'fabric' : 'paper';
@@ -641,11 +648,14 @@ export const getRuntimeDiagnostics = () => {
641
648
  const hermesStats = global.HermesInternal?.getInstrumentedStats?.();
642
649
  if (hermesStats?.js_heap_size) {
643
650
  usedHeapMb = Number((hermesStats.js_heap_size / (1024 * 1024)).toFixed(1));
644
- totalAllocMb = Number(((hermesStats.js_allocated_bytes || hermesStats.js_heap_size * 1.6) / (1024 * 1024)).toFixed(1));
651
+ totalAllocMb = Number(((hermesStats.js_allocated_bytes || hermesStats.js_heap_size * 1.6) /
652
+ (1024 * 1024)).toFixed(1));
645
653
  }
646
654
  else if (global.performance?.memory?.usedJSHeapSize) {
647
- usedHeapMb = Number((global.performance.memory.usedJSHeapSize / (1024 * 1024)).toFixed(1));
648
- totalAllocMb = Number((global.performance.memory.totalJSHeapSize / (1024 * 1024)).toFixed(1));
655
+ usedHeapMb = Number((global.performance.memory.usedJSHeapSize /
656
+ (1024 * 1024)).toFixed(1));
657
+ totalAllocMb = Number((global.performance.memory.totalJSHeapSize /
658
+ (1024 * 1024)).toFixed(1));
649
659
  }
650
660
  }
651
661
  catch { }
@@ -0,0 +1,4 @@
1
+ type ToastListener = (message: string) => void;
2
+ export declare const showToast: (message: string) => void;
3
+ export declare const subscribeToast: (listener: ToastListener) => () => void;
4
+ export {};
@@ -0,0 +1,15 @@
1
+ const listeners = new Set();
2
+ export const showToast = (message) => {
3
+ listeners.forEach(fn => {
4
+ try {
5
+ fn(message);
6
+ }
7
+ catch { }
8
+ });
9
+ };
10
+ export const subscribeToast = (listener) => {
11
+ listeners.add(listener);
12
+ return () => {
13
+ listeners.delete(listener);
14
+ };
15
+ };
@@ -15,7 +15,10 @@
15
15
  "expandAll": "Expand All",
16
16
  "viewOnNpm": "View on NPM",
17
17
  "later": "Later",
18
- "source": "SOURCE"
18
+ "source": "SOURCE",
19
+ "open": "Open",
20
+ "openInBrowser": "Open in Browser",
21
+ "openInBrowserPrompt": "Are you sure you want to open this URL in your external browser?"
19
22
  },
20
23
  "header": {
21
24
  "updateAvailableTitle": "Update Available",
@@ -279,7 +282,19 @@
279
282
  "timeNow": "NOW",
280
283
  "selectedBucket": "Bucket: {{time}} ({{count}} events)",
281
284
  "totalRevenue": "Revenue",
282
- "activeDistribution": "Category Split"
285
+ "activeDistribution": "Category Split",
286
+ "allCategory": "All",
287
+ "screensCategory": "Screens",
288
+ "overviewTab": "Overview",
289
+ "jsonTreeTab": "JSON Tree",
290
+ "rawPayloadTab": "Raw Payload",
291
+ "sessionContext": "Session Context",
292
+ "userPropertiesSnapshot": "User Properties Snapshot",
293
+ "parameterKeys": "Parameters ({{count}})",
294
+ "searchParameters": "Search parameters...",
295
+ "noParamsFound": "No parameters match your search",
296
+ "sourceFirebase": "FIREBASE GA4",
297
+ "sourceCustom": "CUSTOM / MANUAL"
283
298
  },
284
299
  "redux": {
285
300
  "title": "Redux",
@@ -305,7 +320,38 @@
305
320
  "connectionStatus": "Connected",
306
321
  "connectionStatusNone": "Not connected",
307
322
  "autoRefresh": "Auto-refresh",
308
- "paused": "Paused"
323
+ "paused": "Paused",
324
+ "liveState": "Live State",
325
+ "timeline": "Timeline",
326
+ "persisted": "Persisted",
327
+ "storage": "Storage",
328
+ "metadata": "Metadata",
329
+ "inMemory": "In-Memory",
330
+ "slice": "SLICE",
331
+ "rootKeys": "Root Keys",
332
+ "size": "Size",
333
+ "actions": "actions",
334
+ "keys": "Keys",
335
+ "last": "Last",
336
+ "live": "Live",
337
+ "loading": "Loading",
338
+ "error": "Error",
339
+ "empty": "Empty",
340
+ "payload": "Payload",
341
+ "actionPayload": "Action Payload:",
342
+ "stateChangesDiff": "State Changes (Diff):",
343
+ "tapToInspectAction": "Tap to inspect action payload & diff changes",
344
+ "noDispatchedActions": "No dispatched actions recorded for this slice yet.",
345
+ "sliceJson": "Slice JSON",
346
+ "originSaga": "SAGA",
347
+ "originThunk": "THUNK",
348
+ "originUi": "UI",
349
+ "originDirect": "DIRECT",
350
+ "originListener": "LISTENER",
351
+ "triggeredFrom": "Triggered From:",
352
+ "openInEditor": "Open in Editor",
353
+ "callStack": "Call Stack Trace",
354
+ "sliceOrigin": "Slice / Origin"
309
355
  },
310
356
  "performance": {
311
357
  "title": "Performance",
@@ -124,6 +124,9 @@ declare const LightColors: {
124
124
  emerald700: string;
125
125
  pink100: string;
126
126
  sky100: string;
127
+ teal100: string;
128
+ teal700: string;
129
+ purple700: string;
127
130
  indigo50: string;
128
131
  gray100: string;
129
132
  gray200: string;
@@ -279,6 +282,9 @@ export declare const getThemeColors: (isDark: boolean) => {
279
282
  emerald700: string;
280
283
  pink100: string;
281
284
  sky100: string;
285
+ teal100: string;
286
+ teal700: string;
287
+ purple700: string;
282
288
  indigo50: string;
283
289
  gray100: string;
284
290
  gray200: string;
@@ -130,6 +130,9 @@ const LightColors = {
130
130
  emerald700: '#047857',
131
131
  pink100: '#FCE7F3',
132
132
  sky100: '#E0F2FE',
133
+ teal100: '#CCFBF1',
134
+ teal700: '#0F766E',
135
+ purple700: '#6D28D9',
133
136
  indigo50: '#EEF2FF',
134
137
  gray100: '#F3F4F6',
135
138
  gray200: '#E5E7EB',
@@ -300,6 +303,9 @@ const DarkColors = {
300
303
  emerald700: '#34D399',
301
304
  pink100: '#341626',
302
305
  sky100: '#0C2744',
306
+ teal100: '#134E4A',
307
+ teal700: '#2DD4BF',
308
+ purple700: '#8B5CF6',
303
309
  indigo50: '#1E1B3A',
304
310
  gray100: '#2A2438',
305
311
  gray200: '#362C4E',
@@ -20,17 +20,22 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
20
20
  };
21
21
  headerLeft: {
22
22
  flex: number;
23
+ minWidth: number;
23
24
  alignItems: string;
24
25
  };
25
26
  headerCenter: {
26
27
  flex: number;
28
+ minWidth: number;
27
29
  alignItems: string;
30
+ justifyContent: string;
31
+ paddingHorizontal: number;
28
32
  };
29
33
  headerRight: {
30
- flex: number;
34
+ flexShrink: number;
31
35
  flexDirection: string;
32
36
  alignItems: string;
33
37
  justifyContent: string;
38
+ gap: number;
34
39
  };
35
40
  headerTitle: {
36
41
  fontFamily: string;
@@ -176,6 +181,7 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
176
181
  justifyContent: string;
177
182
  borderWidth: number;
178
183
  borderColor: string;
184
+ overflow: string;
179
185
  };
180
186
  fabWrapper: {
181
187
  position: string;
@@ -250,6 +256,13 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
250
256
  gap: number;
251
257
  };
252
258
  toolbarBtn: {
259
+ shadowColor: string;
260
+ shadowOffset: {
261
+ width: number;
262
+ height: number;
263
+ };
264
+ shadowOpacity: number;
265
+ shadowRadius: number;
253
266
  width: number;
254
267
  height: number;
255
268
  borderRadius: number;
@@ -258,14 +271,16 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
258
271
  backgroundColor: string;
259
272
  borderWidth: number;
260
273
  borderColor: string;
261
- shadowColor: string;
262
- shadowOffset: {
263
- width: number;
264
- height: number;
265
- };
266
- shadowOpacity: number;
267
- shadowRadius: number;
274
+ } | {
268
275
  elevation: number;
276
+ width: number;
277
+ height: number;
278
+ borderRadius: number;
279
+ alignItems: string;
280
+ justifyContent: string;
281
+ backgroundColor: string;
282
+ borderWidth: number;
283
+ borderColor: string;
269
284
  };
270
285
  toolbarBtnActive: {
271
286
  borderColor: string;
@@ -412,6 +427,12 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
412
427
  borderWidth: number;
413
428
  borderColor: string;
414
429
  };
430
+ domainHeaderCardExpanded: {
431
+ borderBottomLeftRadius: number;
432
+ borderBottomRightRadius: number;
433
+ borderBottomWidth: number;
434
+ marginBottom: number;
435
+ };
415
436
  domainHeaderTopRow: {
416
437
  flexDirection: string;
417
438
  alignItems: string;
@@ -421,6 +442,8 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
421
442
  flexDirection: string;
422
443
  alignItems: string;
423
444
  flex: number;
445
+ minWidth: number;
446
+ marginRight: number;
424
447
  gap: number;
425
448
  };
426
449
  domainIconWrap: {
@@ -452,21 +475,42 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
452
475
  fontFamily: string;
453
476
  fontSize: number;
454
477
  };
478
+ domainProgressSection: {
479
+ marginTop: number;
480
+ gap: number;
481
+ width: string;
482
+ };
455
483
  domainProgressTrack: {
456
484
  flexDirection: string;
457
485
  height: number;
458
486
  borderRadius: number;
459
487
  overflow: string;
460
488
  backgroundColor: string;
461
- marginTop: number;
462
489
  width: string;
463
490
  };
464
491
  domainProgressSegment: {
465
492
  height: string;
466
493
  };
494
+ domainProgressLabelsRow: {
495
+ flexDirection: string;
496
+ alignItems: string;
497
+ justifyContent: string;
498
+ paddingHorizontal: number;
499
+ };
500
+ domainProgressRateText: {
501
+ fontFamily: string;
502
+ fontSize: number;
503
+ color: string;
504
+ };
505
+ domainProgressSummaryText: {
506
+ fontFamily: string;
507
+ fontSize: number;
508
+ color: string;
509
+ };
467
510
  domainStatsGroup: {
468
511
  flexDirection: string;
469
512
  alignItems: string;
513
+ flexShrink: number;
470
514
  gap: number;
471
515
  };
472
516
  domainStatPill: {
@@ -487,8 +531,20 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
487
531
  treeNodeRow: {
488
532
  flexDirection: string;
489
533
  alignItems: string;
490
- paddingLeft: number;
534
+ marginHorizontal: number;
491
535
  paddingRight: number;
536
+ paddingLeft: number;
537
+ backgroundColor: string;
538
+ borderLeftWidth: number;
539
+ borderRightWidth: number;
540
+ borderColor: string;
541
+ };
542
+ treeNodeRowLast: {
543
+ borderBottomWidth: number;
544
+ borderBottomLeftRadius: number;
545
+ borderBottomRightRadius: number;
546
+ marginBottom: number;
547
+ paddingBottom: number;
492
548
  };
493
549
  treeLines: {
494
550
  width: number;
@@ -580,11 +636,6 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
580
636
  fontSize: number;
581
637
  };
582
638
  methodBadge: {
583
- paddingHorizontal: number;
584
- paddingVertical: number;
585
- borderRadius: number;
586
- alignItems: string;
587
- justifyContent: string;
588
639
  shadowColor: string;
589
640
  shadowOffset: {
590
641
  width: number;
@@ -592,12 +643,28 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
592
643
  };
593
644
  shadowOpacity: number;
594
645
  shadowRadius: number;
646
+ paddingHorizontal: number;
647
+ paddingVertical: number;
648
+ borderRadius: number;
649
+ alignItems: string;
650
+ justifyContent: string;
651
+ borderWidth: number;
652
+ borderColor: string;
653
+ } | {
595
654
  elevation: number;
655
+ paddingHorizontal: number;
656
+ paddingVertical: number;
657
+ borderRadius: number;
658
+ alignItems: string;
659
+ justifyContent: string;
660
+ borderWidth: number;
661
+ borderColor: string;
596
662
  };
597
663
  methodBadgeText: {
598
664
  fontFamily: string;
599
665
  fontSize: number;
600
666
  letterSpacing: number;
667
+ color: string;
601
668
  };
602
669
  cardHostText: {
603
670
  fontFamily: string;