react-native-inapp-inspector 2.3.5 → 2.3.7
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.
- package/dist/commonjs/analytics.d.ts +0 -4
- package/dist/commonjs/analytics.js +0 -4
- package/dist/commonjs/bundle.d.ts +0 -4
- package/dist/commonjs/bundle.js +0 -4
- package/dist/commonjs/components/AnalyticsDetail.js +18 -27
- package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
- package/dist/commonjs/components/AnalyticsGraph.js +10 -15
- package/dist/commonjs/components/AppHeaderLogo.js +0 -3
- package/dist/commonjs/components/BrandCircleIcon.js +15 -15
- package/dist/commonjs/components/BrandSquareIcon.js +20 -20
- package/dist/commonjs/components/CodeSnippet.js +6 -19
- package/dist/commonjs/components/ConsoleLogCard.js +0 -1
- package/dist/commonjs/components/CopyButton.js +0 -4
- package/dist/commonjs/components/DiffViewer.js +0 -2
- package/dist/commonjs/components/DomainHeader.js +0 -4
- package/dist/commonjs/components/EmptyState.js +0 -3
- package/dist/commonjs/components/ErrorBoundary.js +5 -10
- package/dist/commonjs/components/HeadersSection.js +0 -5
- package/dist/commonjs/components/HighlightText.js +1 -4
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
- package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
- package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
- package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
- package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
- package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
- package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
- package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
- package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
- package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
- package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
- package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
- package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
- package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/commonjs/components/JsonViewer.js +3 -10
- package/dist/commonjs/components/LogCard.js +7 -7
- package/dist/commonjs/components/MetaAccordion.js +1 -7
- package/dist/commonjs/components/NetworkIcons.js +12 -16
- package/dist/commonjs/components/SectionHeader.js +0 -4
- package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Slider.js +6 -6
- package/dist/commonjs/components/SourcePageCard.js +0 -4
- package/dist/commonjs/components/TreeNode.js +0 -4
- package/dist/commonjs/console.d.ts +0 -4
- package/dist/commonjs/console.js +0 -4
- package/dist/commonjs/constants/index.js +6 -9
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -0
- package/dist/commonjs/constants/telemetryConfig.js +6 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -3
- package/dist/commonjs/crash.d.ts +0 -4
- package/dist/commonjs/crash.js +0 -4
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
- package/dist/commonjs/customHooks/consoleLogger.js +0 -16
- package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
- package/dist/commonjs/customHooks/crashHandler.js +0 -55
- package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
- package/dist/commonjs/customHooks/logFilters.js +0 -11
- package/dist/commonjs/customHooks/networkLogger.js +2 -13
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
- package/dist/commonjs/customHooks/performanceTracker.js +0 -31
- package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
- package/dist/commonjs/customHooks/reduxLogger.js +0 -51
- package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
- package/dist/commonjs/customHooks/storageInspector.js +1 -56
- package/dist/commonjs/decorators/index.d.ts +0 -37
- package/dist/commonjs/decorators/index.js +0 -42
- package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/commonjs/helpers/index.d.ts +0 -7
- package/dist/commonjs/helpers/index.js +1 -42
- package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
- package/dist/commonjs/helpers/memoryManager.js +0 -13
- package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
- package/dist/commonjs/helpers/searchQueryParser.js +0 -18
- package/dist/commonjs/helpers/settingsStore.js +0 -8
- package/dist/commonjs/helpers/telemetry.d.ts +2 -0
- package/dist/commonjs/helpers/telemetry.js +136 -0
- package/dist/commonjs/i18n/index.d.ts +0 -9
- package/dist/commonjs/i18n/index.js +0 -15
- package/dist/commonjs/index.js +15 -97
- package/dist/commonjs/native/NativeInspector.d.ts +0 -54
- package/dist/commonjs/native/NativeInspector.js +0 -56
- package/dist/commonjs/network.d.ts +0 -4
- package/dist/commonjs/network.js +0 -4
- package/dist/commonjs/performance.d.ts +0 -4
- package/dist/commonjs/performance.js +0 -4
- package/dist/commonjs/redux.d.ts +0 -4
- package/dist/commonjs/redux.js +0 -4
- package/dist/commonjs/storage.d.ts +0 -4
- package/dist/commonjs/storage.js +0 -4
- package/dist/commonjs/styles/AppColors.d.ts +0 -3
- package/dist/commonjs/styles/AppColors.js +15 -30
- package/dist/commonjs/styles/AppFonts.d.ts +0 -4
- package/dist/commonjs/styles/AppFonts.js +0 -4
- package/dist/commonjs/styles/common.js +0 -11
- package/dist/commonjs/styles/index.js +0 -8
- package/dist/commonjs/types/enums.js +0 -3
- package/dist/commonjs/types/interfaces.d.ts +3 -3
- package/dist/esm/analytics.d.ts +0 -4
- package/dist/esm/analytics.js +0 -4
- package/dist/esm/bundle.d.ts +0 -4
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/components/AnalyticsDetail.js +18 -27
- package/dist/esm/components/AnalyticsEventCard.js +9 -12
- package/dist/esm/components/AnalyticsGraph.js +10 -15
- package/dist/esm/components/AppHeaderLogo.js +0 -3
- package/dist/esm/components/BrandCircleIcon.js +15 -15
- package/dist/esm/components/BrandSquareIcon.js +20 -20
- package/dist/esm/components/CodeSnippet.js +6 -19
- package/dist/esm/components/ConsoleLogCard.js +0 -1
- package/dist/esm/components/CopyButton.js +0 -4
- package/dist/esm/components/DiffViewer.js +0 -2
- package/dist/esm/components/DomainHeader.js +0 -4
- package/dist/esm/components/EmptyState.js +0 -3
- package/dist/esm/components/ErrorBoundary.js +5 -10
- package/dist/esm/components/HeadersSection.js +0 -5
- package/dist/esm/components/HighlightText.js +1 -4
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/esm/components/Inspector/BundleTab.js +56 -84
- package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
- package/dist/esm/components/Inspector/CrashDetail.js +18 -20
- package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/esm/components/Inspector/CrashTab.js +11 -20
- package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/esm/components/Inspector/FabLauncher.js +1 -1
- package/dist/esm/components/Inspector/InspectorContext.js +0 -2
- package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
- package/dist/esm/components/Inspector/LogDetail.js +27 -29
- package/dist/esm/components/Inspector/MainScreen.js +9 -10
- package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
- package/dist/esm/components/Inspector/NetworkTab.js +14 -14
- package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
- package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
- package/dist/esm/components/Inspector/ReduxTab.js +11 -20
- package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
- package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Inspector/StorageTab.js +14 -26
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/esm/components/JsonViewer.js +3 -10
- package/dist/esm/components/LogCard.js +7 -7
- package/dist/esm/components/MetaAccordion.js +1 -7
- package/dist/esm/components/NetworkIcons.js +12 -16
- package/dist/esm/components/SectionHeader.js +0 -4
- package/dist/esm/components/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Slider.js +6 -6
- package/dist/esm/components/SourcePageCard.js +0 -4
- package/dist/esm/components/TreeNode.js +0 -4
- package/dist/esm/console.d.ts +0 -4
- package/dist/esm/console.js +0 -4
- package/dist/esm/constants/index.js +6 -9
- package/dist/esm/constants/telemetryConfig.d.ts +3 -0
- package/dist/esm/constants/telemetryConfig.js +3 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -3
- package/dist/esm/crash.d.ts +0 -4
- package/dist/esm/crash.js +0 -4
- package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/esm/customHooks/analyticsLogger.js +3 -59
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
- package/dist/esm/customHooks/consoleLogger.js +0 -16
- package/dist/esm/customHooks/crashHandler.d.ts +0 -28
- package/dist/esm/customHooks/crashHandler.js +0 -55
- package/dist/esm/customHooks/logFilters.d.ts +0 -4
- package/dist/esm/customHooks/logFilters.js +0 -11
- package/dist/esm/customHooks/networkLogger.js +2 -13
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
- package/dist/esm/customHooks/performanceTracker.js +0 -31
- package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
- package/dist/esm/customHooks/reduxLogger.js +0 -51
- package/dist/esm/customHooks/storageInspector.d.ts +0 -40
- package/dist/esm/customHooks/storageInspector.js +1 -56
- package/dist/esm/decorators/index.d.ts +0 -37
- package/dist/esm/decorators/index.js +0 -42
- package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/esm/helpers/index.d.ts +0 -7
- package/dist/esm/helpers/index.js +1 -42
- package/dist/esm/helpers/memoryManager.d.ts +0 -11
- package/dist/esm/helpers/memoryManager.js +0 -13
- package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
- package/dist/esm/helpers/searchQueryParser.js +0 -18
- package/dist/esm/helpers/settingsStore.js +0 -8
- package/dist/esm/helpers/telemetry.d.ts +2 -0
- package/dist/esm/helpers/telemetry.js +132 -0
- package/dist/esm/i18n/index.d.ts +0 -9
- package/dist/esm/i18n/index.js +0 -15
- package/dist/esm/index.js +15 -97
- package/dist/esm/native/NativeInspector.d.ts +0 -54
- package/dist/esm/native/NativeInspector.js +0 -56
- package/dist/esm/network.d.ts +0 -4
- package/dist/esm/network.js +0 -4
- package/dist/esm/performance.d.ts +0 -4
- package/dist/esm/performance.js +0 -4
- package/dist/esm/redux.d.ts +0 -4
- package/dist/esm/redux.js +0 -4
- package/dist/esm/storage.d.ts +0 -4
- package/dist/esm/storage.js +0 -4
- package/dist/esm/styles/AppColors.d.ts +0 -3
- package/dist/esm/styles/AppColors.js +15 -30
- package/dist/esm/styles/AppFonts.d.ts +0 -4
- package/dist/esm/styles/AppFonts.js +0 -4
- package/dist/esm/styles/common.js +0 -11
- package/dist/esm/styles/index.js +0 -8
- package/dist/esm/types/enums.js +0 -3
- package/dist/esm/types/interfaces.d.ts +3 -3
- package/package.json +2 -2
- package/src/constants/telemetryConfig.ts +6 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/telemetry.ts +161 -0
- package/src/index.tsx +15 -1
- package/src/types/interfaces.ts +3 -0
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sub-module entry point: react-native-inapp-inspector/analytics
|
|
3
|
-
* Clean tree-shaking & isolated Firebase/custom Analytics logger.
|
|
4
|
-
*/
|
|
5
1
|
export { setupAnalyticsLogger, autoSetupAnalyticsLogger, logAnalyticsEvent, subscribeAnalyticsEvents, clearAnalyticsEvents, getAnalyticsEvents, isAnalyticsConnected, isFirebaseAnalyticsPatched, setAnalyticsModuleEnabled, getAnalyticsModuleEnabled, getCurrentUserProperties, getCurrentUserId, getDefaultEventParameters, getCollectionEnabled, setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
|
|
6
2
|
export { getEventCategory, registerGAPlugin, type GAPlugin, } from './helpers/gaAnalyticsRegistry';
|
|
7
3
|
export type { AnalyticsEvent, AnalyticsEventSource, GAEventCategory, } from './types';
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerGAPlugin = exports.getEventCategory = exports.pruneAnalyticsLogs = exports.getMaxAnalyticsLogsLimit = exports.setMaxAnalyticsLogsLimit = exports.getCollectionEnabled = exports.getDefaultEventParameters = exports.getCurrentUserId = exports.getCurrentUserProperties = exports.getAnalyticsModuleEnabled = exports.setAnalyticsModuleEnabled = exports.isFirebaseAnalyticsPatched = exports.isAnalyticsConnected = exports.getAnalyticsEvents = exports.clearAnalyticsEvents = exports.subscribeAnalyticsEvents = exports.logAnalyticsEvent = exports.autoSetupAnalyticsLogger = exports.setupAnalyticsLogger = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Sub-module entry point: react-native-inapp-inspector/analytics
|
|
6
|
-
* Clean tree-shaking & isolated Firebase/custom Analytics logger.
|
|
7
|
-
*/
|
|
8
4
|
var analyticsLogger_1 = require("./customHooks/analyticsLogger");
|
|
9
5
|
Object.defineProperty(exports, "setupAnalyticsLogger", { enumerable: true, get: function () { return analyticsLogger_1.setupAnalyticsLogger; } });
|
|
10
6
|
Object.defineProperty(exports, "autoSetupAnalyticsLogger", { enumerable: true, get: function () { return analyticsLogger_1.autoSetupAnalyticsLogger; } });
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sub-module entry point: react-native-inapp-inspector/bundle
|
|
3
|
-
* Clean tree-shaking & isolated JS bundle size analyzer.
|
|
4
|
-
*/
|
|
5
1
|
export { analyzeHostAppBundle, parseBundleSource, getInitialBundleAnalysis, getCachedBundleAnalysis, clearCachedBundleAnalysis, setBundleModuleEnabled, getBundleModuleEnabled, getHostScriptURL, trackRuntimeModuleExecution, trackRuntimeDefine, type HostBundleAnalysisResult, type HostBundleFileItem, type HostBundlePackageItem, type HostBinaryComponentItem, type FileTypeCategory, } from './customHooks/bundleAnalyzer';
|
|
6
2
|
export { BundleSubTab, } from './types';
|
package/dist/commonjs/bundle.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BundleSubTab = exports.trackRuntimeDefine = exports.trackRuntimeModuleExecution = exports.getHostScriptURL = exports.getBundleModuleEnabled = exports.setBundleModuleEnabled = exports.clearCachedBundleAnalysis = exports.getCachedBundleAnalysis = exports.getInitialBundleAnalysis = exports.parseBundleSource = exports.analyzeHostAppBundle = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Sub-module entry point: react-native-inapp-inspector/bundle
|
|
6
|
-
* Clean tree-shaking & isolated JS bundle size analyzer.
|
|
7
|
-
*/
|
|
8
4
|
var bundleAnalyzer_1 = require("./customHooks/bundleAnalyzer");
|
|
9
5
|
Object.defineProperty(exports, "analyzeHostAppBundle", { enumerable: true, get: function () { return bundleAnalyzer_1.analyzeHostAppBundle; } });
|
|
10
6
|
Object.defineProperty(exports, "parseBundleSource", { enumerable: true, get: function () { return bundleAnalyzer_1.parseBundleSource; } });
|
|
@@ -38,13 +38,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const react_1 = __importStar(require("react"));
|
|
40
40
|
const react_native_1 = require("react-native");
|
|
41
|
-
// Components
|
|
42
41
|
const CopyButton_1 = __importDefault(require("./CopyButton"));
|
|
43
42
|
const JsonViewer_1 = __importDefault(require("./JsonViewer"));
|
|
44
43
|
const SegmentedTabs_1 = __importDefault(require("./SegmentedTabs"));
|
|
45
44
|
const HighlightText_1 = __importDefault(require("./HighlightText"));
|
|
46
45
|
const AnimatedEntrance_1 = __importDefault(require("./AnimatedEntrance"));
|
|
47
|
-
// Helpers & Icons
|
|
48
46
|
const AppFonts_1 = require("../styles/AppFonts");
|
|
49
47
|
const AppColors_1 = require("../styles/AppColors");
|
|
50
48
|
const helpers_1 = require("../helpers");
|
|
@@ -60,7 +58,6 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
60
58
|
const paramKeys = (0, react_1.useMemo)(() => Object.keys(params), [params]);
|
|
61
59
|
const userPropKeys = (0, react_1.useMemo)(() => Object.keys(userProperties), [userProperties]);
|
|
62
60
|
const category = (0, react_1.useMemo)(() => (0, gaAnalyticsRegistry_1.getEventCategory)(event.name, params), [event.name, params]);
|
|
63
|
-
// Combined full JSON payload
|
|
64
61
|
const fullJsonData = (0, react_1.useMemo)(() => ({
|
|
65
62
|
name: event.name,
|
|
66
63
|
timestamp: event.timestamp,
|
|
@@ -73,7 +70,6 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
73
70
|
params,
|
|
74
71
|
...(userPropKeys.length > 0 ? { userProperties } : {}),
|
|
75
72
|
}), [event, params, userPropKeys.length, userProperties]);
|
|
76
|
-
// E-commerce revenue calculation
|
|
77
73
|
const revenueInfo = (0, react_1.useMemo)(() => {
|
|
78
74
|
const val = params.value ?? params.price;
|
|
79
75
|
const currency = params.currency ?? 'USD';
|
|
@@ -85,14 +81,12 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
85
81
|
}
|
|
86
82
|
return null;
|
|
87
83
|
}, [params]);
|
|
88
|
-
// Items count if an items array exists
|
|
89
84
|
const itemsCount = (0, react_1.useMemo)(() => {
|
|
90
85
|
if (Array.isArray(params.items)) {
|
|
91
86
|
return params.items.length;
|
|
92
87
|
}
|
|
93
88
|
return null;
|
|
94
89
|
}, [params.items]);
|
|
95
|
-
// Screen Context
|
|
96
90
|
const screenContext = (0, react_1.useMemo)(() => {
|
|
97
91
|
return (event.screenName ||
|
|
98
92
|
params.firebase_screen ||
|
|
@@ -101,7 +95,6 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
101
95
|
event.screenClass ||
|
|
102
96
|
params.firebase_screen_class);
|
|
103
97
|
}, [event.screenName, event.screenClass, params]);
|
|
104
|
-
// Filtered parameter entries
|
|
105
98
|
const filteredParamEntries = (0, react_1.useMemo)(() => {
|
|
106
99
|
const entries = Object.entries(params);
|
|
107
100
|
if (!paramSearch.trim())
|
|
@@ -112,7 +105,6 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
112
105
|
return k.toLowerCase().includes(q) || valStr.toLowerCase().includes(q);
|
|
113
106
|
});
|
|
114
107
|
}, [params, paramSearch]);
|
|
115
|
-
// Category Theme Meta
|
|
116
108
|
const catMeta = (0, react_1.useMemo)(() => {
|
|
117
109
|
switch (category) {
|
|
118
110
|
case 'ecommerce':
|
|
@@ -168,12 +160,12 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
168
160
|
];
|
|
169
161
|
return (<react_native_1.ScrollView style={detailStyles.scroll} contentContainerStyle={detailStyles.content} showsVerticalScrollIndicator contentInsetAdjustmentBehavior="never" automaticallyAdjustContentInsets={false}>
|
|
170
162
|
|
|
171
|
-
|
|
163
|
+
|
|
172
164
|
<react_native_1.View style={detailStyles.heroCard}>
|
|
173
|
-
|
|
165
|
+
|
|
174
166
|
<react_native_1.View style={detailStyles.heroTopRow}>
|
|
175
167
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap', flex: 1 }}>
|
|
176
|
-
|
|
168
|
+
|
|
177
169
|
<react_native_1.View style={[
|
|
178
170
|
detailStyles.sourceBadge,
|
|
179
171
|
event.source === 'firebase'
|
|
@@ -200,7 +192,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
200
192
|
</react_native_1.Text>
|
|
201
193
|
</react_native_1.View>
|
|
202
194
|
|
|
203
|
-
|
|
195
|
+
|
|
204
196
|
<react_native_1.View style={[
|
|
205
197
|
detailStyles.catBadge,
|
|
206
198
|
{ backgroundColor: catMeta.bg, borderColor: catMeta.border },
|
|
@@ -212,18 +204,18 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
212
204
|
</react_native_1.View>
|
|
213
205
|
</react_native_1.View>
|
|
214
206
|
|
|
215
|
-
|
|
207
|
+
|
|
216
208
|
<CopyButton_1.default value={JSON.stringify(fullJsonData, null, 2)} label={t('analytics.eventDetails')}/>
|
|
217
209
|
</react_native_1.View>
|
|
218
210
|
|
|
219
|
-
|
|
211
|
+
|
|
220
212
|
<react_native_1.View style={detailStyles.titleRow}>
|
|
221
213
|
<react_native_1.Text style={detailStyles.eventTitle} selectable numberOfLines={2}>
|
|
222
214
|
{event.name}
|
|
223
215
|
</react_native_1.Text>
|
|
224
216
|
</react_native_1.View>
|
|
225
217
|
|
|
226
|
-
|
|
218
|
+
|
|
227
219
|
<react_native_1.View style={detailStyles.metaRow}>
|
|
228
220
|
<react_native_1.View style={detailStyles.timePill}>
|
|
229
221
|
<NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.purple} size={11}/>
|
|
@@ -240,7 +232,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
240
232
|
</react_native_1.View>)}
|
|
241
233
|
</react_native_1.View>
|
|
242
234
|
|
|
243
|
-
|
|
235
|
+
|
|
244
236
|
<react_native_1.View style={detailStyles.metricsBar}>
|
|
245
237
|
<react_native_1.View style={detailStyles.metricPill}>
|
|
246
238
|
<react_native_1.Text style={detailStyles.metricLabel}>Params:</react_native_1.Text>
|
|
@@ -273,14 +265,14 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
273
265
|
</react_native_1.View>
|
|
274
266
|
</react_native_1.View>
|
|
275
267
|
|
|
276
|
-
|
|
268
|
+
|
|
277
269
|
<react_native_1.View style={detailStyles.tabsWrap}>
|
|
278
270
|
<SegmentedTabs_1.default tabs={viewTabs} activeKey={activeViewTab} onChange={key => setActiveViewTab(key)}/>
|
|
279
271
|
</react_native_1.View>
|
|
280
272
|
|
|
281
|
-
|
|
273
|
+
|
|
282
274
|
{activeViewTab === 'overview' && (<react_native_1.View style={detailStyles.tabContent}>
|
|
283
|
-
|
|
275
|
+
|
|
284
276
|
{(event.userId || event.sessionId || event.trackingId) && (<react_native_1.View style={detailStyles.sectionCard}>
|
|
285
277
|
<react_native_1.View style={detailStyles.sectionHeader}>
|
|
286
278
|
<NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={12}/>
|
|
@@ -302,7 +294,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
302
294
|
</react_native_1.View>
|
|
303
295
|
</react_native_1.View>)}
|
|
304
296
|
|
|
305
|
-
|
|
297
|
+
|
|
306
298
|
<react_native_1.View style={detailStyles.sectionCard}>
|
|
307
299
|
<react_native_1.View style={detailStyles.sectionHeaderBetween}>
|
|
308
300
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -316,7 +308,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
316
308
|
</react_native_1.Text>
|
|
317
309
|
</react_native_1.View>
|
|
318
310
|
|
|
319
|
-
|
|
311
|
+
|
|
320
312
|
{paramKeys.length > 4 && (<react_native_1.View style={detailStyles.searchBar}>
|
|
321
313
|
<NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={13}/>
|
|
322
314
|
<react_native_1.TextInput placeholder="Filter parameters by key or value..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={paramSearch} onChangeText={setParamSearch} style={detailStyles.searchInput} autoCorrect={false} autoCapitalize="none"/>
|
|
@@ -346,7 +338,6 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
346
338
|
else if (isObject)
|
|
347
339
|
typeStr = 'object';
|
|
348
340
|
const valString = isObject ? JSON.stringify(val, null, 2) : String(val);
|
|
349
|
-
// Highlight standard GA4 ecom/screen keys
|
|
350
341
|
const isKeyHighlighted = key === 'value' ||
|
|
351
342
|
key === 'price' ||
|
|
352
343
|
key === 'currency' ||
|
|
@@ -355,7 +346,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
355
346
|
key === 'item_name';
|
|
356
347
|
return (<AnimatedEntrance_1.default key={key} index={pIdx} distance={4}>
|
|
357
348
|
<react_native_1.View style={detailStyles.paramCard}>
|
|
358
|
-
|
|
349
|
+
|
|
359
350
|
<react_native_1.View style={detailStyles.paramCardHeader}>
|
|
360
351
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flex: 1, minWidth: 0 }}>
|
|
361
352
|
<HighlightText_1.default text={key} search={paramSearch} style={[
|
|
@@ -372,7 +363,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
372
363
|
<CopyButton_1.default value={valString} label={key}/>
|
|
373
364
|
</react_native_1.View>
|
|
374
365
|
|
|
375
|
-
|
|
366
|
+
|
|
376
367
|
<react_native_1.View style={detailStyles.paramValBox}>
|
|
377
368
|
{isObject ? (<JsonViewer_1.default data={val} search={paramSearch} hideTabs wrap/>) : (<HighlightText_1.default text={valString} search={paramSearch} style={detailStyles.paramValText} highlightStyle={detailStyles.highlight} selectable/>)}
|
|
378
369
|
</react_native_1.View>
|
|
@@ -382,7 +373,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
382
373
|
</react_native_1.View>)}
|
|
383
374
|
</react_native_1.View>
|
|
384
375
|
|
|
385
|
-
|
|
376
|
+
|
|
386
377
|
{userPropKeys.length > 0 && (<react_native_1.View style={detailStyles.sectionCard}>
|
|
387
378
|
<react_native_1.View style={detailStyles.sectionHeader}>
|
|
388
379
|
<NetworkIcons_1.SparkleIcon color={AppColors_1.AppColors.purple} size={12}/>
|
|
@@ -401,12 +392,12 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
401
392
|
</react_native_1.View>)}
|
|
402
393
|
</react_native_1.View>)}
|
|
403
394
|
|
|
404
|
-
|
|
395
|
+
|
|
405
396
|
{activeViewTab === 'tree' && (<react_native_1.View style={detailStyles.jsonContainer}>
|
|
406
397
|
<JsonViewer_1.default data={fullJsonData} defaultExpandDepth={1} mode="pretty" fullHeight/>
|
|
407
398
|
</react_native_1.View>)}
|
|
408
399
|
|
|
409
|
-
|
|
400
|
+
|
|
410
401
|
{activeViewTab === 'raw' && (<react_native_1.View style={detailStyles.jsonContainer}>
|
|
411
402
|
<JsonViewer_1.default data={fullJsonData} mode="raw" fullHeight/>
|
|
412
403
|
</react_native_1.View>)}
|
|
@@ -45,7 +45,6 @@ const i18n_1 = require("../i18n");
|
|
|
45
45
|
const HighlightText_1 = __importDefault(require("./HighlightText"));
|
|
46
46
|
const TouchableScale_1 = __importDefault(require("./TouchableScale"));
|
|
47
47
|
const NetworkIcons_1 = require("./NetworkIcons");
|
|
48
|
-
// ─── Component ────────────────────────────────────────────────────────────────
|
|
49
48
|
const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ event, onPress, isNew = false, searchStr = '', msSincePrev, computedScreenName, }) {
|
|
50
49
|
const { t } = (0, i18n_1.useTranslation)();
|
|
51
50
|
const color = (0, helpers_1.getEventColor)(event.name);
|
|
@@ -55,7 +54,6 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
55
54
|
: 0;
|
|
56
55
|
const catKey = (0, helpers_1.getEventCategory)(event.name);
|
|
57
56
|
const tagColors = (0, helpers_1.getCategoryColors)(catKey);
|
|
58
|
-
// Flash animation for newly logged events
|
|
59
57
|
const flashOpacity = (0, react_1.useRef)(new react_native_1.Animated.Value(isNew ? 1 : 0)).current;
|
|
60
58
|
(0, react_1.useEffect)(() => {
|
|
61
59
|
if (isNew) {
|
|
@@ -75,7 +73,7 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
75
73
|
? t('analytics.systemCategory')
|
|
76
74
|
: t('analytics.customCategory');
|
|
77
75
|
return (<react_native_1.View style={cardStyles.container}>
|
|
78
|
-
|
|
76
|
+
|
|
79
77
|
{showGap && (<react_native_1.View style={cardStyles.gapContainer}>
|
|
80
78
|
<react_native_1.View style={cardStyles.gapLine}/>
|
|
81
79
|
<react_native_1.Text style={[cardStyles.gapText, { color: AppColors_1.AppColors.grayTextWeak }]}>
|
|
@@ -84,7 +82,7 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
84
82
|
<react_native_1.View style={cardStyles.gapLine}/>
|
|
85
83
|
</react_native_1.View>)}
|
|
86
84
|
|
|
87
|
-
|
|
85
|
+
|
|
88
86
|
<TouchableScale_1.default onPress={onPress} style={[
|
|
89
87
|
cardStyles.modernCard,
|
|
90
88
|
{
|
|
@@ -103,10 +101,10 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
103
101
|
},
|
|
104
102
|
]}/>
|
|
105
103
|
|
|
106
|
-
|
|
104
|
+
|
|
107
105
|
<react_native_1.View style={cardStyles.cardHeader}>
|
|
108
106
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 7, flex: 1 }}>
|
|
109
|
-
|
|
107
|
+
|
|
110
108
|
<react_native_1.View style={[
|
|
111
109
|
cardStyles.iconBadge,
|
|
112
110
|
{ backgroundColor: tagColors.bg, borderColor: tagColors.border },
|
|
@@ -114,10 +112,10 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
114
112
|
{catKey === 'ecommerce' ? (<NetworkIcons_1.CartIcon color={tagColors.text} size={12}/>) : catKey === 'page_view' ? (<NetworkIcons_1.GlobeIcon color={tagColors.text} size={12}/>) : catKey === 'system' ? (<NetworkIcons_1.BoltIcon color={tagColors.text} size={12}/>) : (<NetworkIcons_1.SparkleIcon color={tagColors.text} size={12}/>)}
|
|
115
113
|
</react_native_1.View>
|
|
116
114
|
|
|
117
|
-
|
|
115
|
+
|
|
118
116
|
<HighlightText_1.default text={event.name} search={searchStr} style={[cardStyles.eventName, { color: AppColors_1.AppColors.primaryBlack }]} highlightStyle={cardStyles.highlight} numberOfLines={1}/>
|
|
119
117
|
|
|
120
|
-
|
|
118
|
+
|
|
121
119
|
<react_native_1.View style={[
|
|
122
120
|
cardStyles.categoryBadge,
|
|
123
121
|
{ backgroundColor: tagColors.bg, borderColor: tagColors.border },
|
|
@@ -127,7 +125,7 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
127
125
|
</react_native_1.Text>
|
|
128
126
|
</react_native_1.View>
|
|
129
127
|
|
|
130
|
-
|
|
128
|
+
|
|
131
129
|
{event.count !== undefined && event.count > 0 ? (<react_native_1.View style={[
|
|
132
130
|
cardStyles.duplicateBadge,
|
|
133
131
|
event.count === 1 && {
|
|
@@ -144,7 +142,7 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
144
142
|
</react_native_1.View>) : null}
|
|
145
143
|
</react_native_1.View>
|
|
146
144
|
|
|
147
|
-
|
|
145
|
+
|
|
148
146
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 3 }}>
|
|
149
147
|
<NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.grayTextWeak} size={10}/>
|
|
150
148
|
<react_native_1.Text style={[cardStyles.timestamp, { color: AppColors_1.AppColors.grayTextWeak }]}>
|
|
@@ -153,7 +151,7 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
153
151
|
</react_native_1.View>
|
|
154
152
|
</react_native_1.View>
|
|
155
153
|
|
|
156
|
-
|
|
154
|
+
|
|
157
155
|
<react_native_1.View style={cardStyles.cardBody}>
|
|
158
156
|
<react_native_1.View style={cardStyles.chipsRow}>
|
|
159
157
|
{(() => {
|
|
@@ -268,7 +266,6 @@ const AnalyticsEventCard = react_1.default.memo(function AnalyticsEventCard({ ev
|
|
|
268
266
|
</TouchableScale_1.default>
|
|
269
267
|
</react_native_1.View>);
|
|
270
268
|
});
|
|
271
|
-
// ─── Styles ───────────────────────────────────────────────────────────────────
|
|
272
269
|
const cardStyles = react_native_1.StyleSheet.create({
|
|
273
270
|
container: {
|
|
274
271
|
paddingHorizontal: 10,
|
|
@@ -45,10 +45,8 @@ const BAR_HEIGHT = 24;
|
|
|
45
45
|
const PADDING_Y = 12;
|
|
46
46
|
const AnalyticsGraph = ({ event, accentColor }) => {
|
|
47
47
|
const params = event.params || {};
|
|
48
|
-
// 1. Check for E-commerce items array
|
|
49
48
|
const itemsArray = Array.isArray(params.items) ? params.items : null;
|
|
50
49
|
const filteredItems = itemsArray?.filter((item) => typeof item.price === 'number') || [];
|
|
51
|
-
// 2. Discover root-level numeric fields (exclude ids)
|
|
52
50
|
const rootNumericKeys = [];
|
|
53
51
|
Object.entries(params).forEach(([k, v]) => {
|
|
54
52
|
if (typeof v === 'number' &&
|
|
@@ -57,7 +55,6 @@ const AnalyticsGraph = ({ event, accentColor }) => {
|
|
|
57
55
|
rootNumericKeys.push({ key: k, value: v });
|
|
58
56
|
}
|
|
59
57
|
});
|
|
60
|
-
// 3. Discover dates (YYYY-MM-DD format commonly used in booking/flights)
|
|
61
58
|
const dateKeys = [];
|
|
62
59
|
Object.entries(params).forEach(([k, v]) => {
|
|
63
60
|
if (typeof v === 'string' &&
|
|
@@ -69,7 +66,6 @@ const AnalyticsGraph = ({ event, accentColor }) => {
|
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
68
|
});
|
|
72
|
-
// 4. Calculate parameter types
|
|
73
69
|
const paramTypes = { string: 0, number: 0, boolean: 0, object: 0 };
|
|
74
70
|
const strings = [];
|
|
75
71
|
Object.entries(params).forEach(([k, v]) => {
|
|
@@ -91,7 +87,7 @@ const AnalyticsGraph = ({ event, accentColor }) => {
|
|
|
91
87
|
const typeData = [
|
|
92
88
|
{ label: 'Strings', value: paramTypes.string, color: AppColors_1.AppColors.purple },
|
|
93
89
|
{ label: 'Numbers', value: paramTypes.number, color: AppColors_1.AppColors.skyBlue },
|
|
94
|
-
{ label: 'Booleans', value: paramTypes.boolean, color: AppColors_1.AppColors.amber500 },
|
|
90
|
+
{ label: 'Booleans', value: paramTypes.boolean, color: AppColors_1.AppColors.amber500 },
|
|
95
91
|
{ label: 'Objects', value: paramTypes.object, color: AppColors_1.AppColors.greenColor },
|
|
96
92
|
].filter(d => d.value > 0);
|
|
97
93
|
strings.sort((a, b) => b.value - a.value);
|
|
@@ -101,8 +97,8 @@ const AnalyticsGraph = ({ event, accentColor }) => {
|
|
|
101
97
|
const hasDatesChart = dateKeys.length > 0;
|
|
102
98
|
const hasStringsChart = topStrings.length > 0;
|
|
103
99
|
const hasTypeData = typeData.length > 0;
|
|
104
|
-
const screenWidth = react_native_1.Dimensions.get('window').width - 60;
|
|
105
|
-
const rightMargin = 40;
|
|
100
|
+
const screenWidth = react_native_1.Dimensions.get('window').width - 60;
|
|
101
|
+
const rightMargin = 40;
|
|
106
102
|
const maxBarWidth = screenWidth - rightMargin;
|
|
107
103
|
return (<react_native_1.View style={graphStyles.container}>
|
|
108
104
|
<react_native_1.Text style={graphStyles.headerTitle}>Data Visualization</react_native_1.Text>
|
|
@@ -136,7 +132,6 @@ const AnalyticsGraph = ({ event, accentColor }) => {
|
|
|
136
132
|
</react_native_1.View>)}
|
|
137
133
|
</react_native_1.View>);
|
|
138
134
|
};
|
|
139
|
-
// --- Donut Chart Helpers ---
|
|
140
135
|
const polarToCartesian = (centerX, centerY, radius, angleInDegrees) => {
|
|
141
136
|
const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0;
|
|
142
137
|
return {
|
|
@@ -221,7 +216,7 @@ const GaugeChart = ({ data, accentColor, }) => {
|
|
|
221
216
|
}}>
|
|
222
217
|
{data.map(d => {
|
|
223
218
|
const fillPct = Math.min(Math.abs(d.value) / maxVal, 1);
|
|
224
|
-
const strokeDashoffset = Math.max(circumference - fillPct * circumference, 0.001);
|
|
219
|
+
const strokeDashoffset = Math.max(circumference - fillPct * circumference, 0.001);
|
|
225
220
|
return (<react_native_1.View key={d.label} style={{ alignItems: 'center', width: 70 }}>
|
|
226
221
|
<react_native_svg_1.default width="60" height="60" viewBox="0 0 60 60">
|
|
227
222
|
<react_native_svg_1.Circle cx="30" cy="30" r={radius} stroke={AppColors_1.AppColors.grayBorderSecondary} strokeWidth={stroke} fill="none"/>
|
|
@@ -297,7 +292,7 @@ const CalendarChart = ({ data, accentColor, }) => {
|
|
|
297
292
|
shadowOffset: { width: 0, height: 2 },
|
|
298
293
|
elevation: 2,
|
|
299
294
|
}}>
|
|
300
|
-
|
|
295
|
+
|
|
301
296
|
<react_native_1.View style={{
|
|
302
297
|
backgroundColor: accentColor,
|
|
303
298
|
height: 18,
|
|
@@ -314,7 +309,7 @@ const CalendarChart = ({ data, accentColor, }) => {
|
|
|
314
309
|
{monthText} {yearText}
|
|
315
310
|
</react_native_1.Text>
|
|
316
311
|
</react_native_1.View>
|
|
317
|
-
|
|
312
|
+
|
|
318
313
|
<react_native_1.View style={{
|
|
319
314
|
flex: 1,
|
|
320
315
|
justifyContent: 'center',
|
|
@@ -359,18 +354,18 @@ const BarChart = ({ data, accentColor, maxBarWidth, isGradient = false, }) => {
|
|
|
359
354
|
const y = i * (BAR_HEIGHT + PADDING_Y);
|
|
360
355
|
const barWidth = Math.max((d.value / maxVal) * maxBarWidth, 2);
|
|
361
356
|
return (<react_1.default.Fragment key={d.label}>
|
|
362
|
-
|
|
357
|
+
|
|
363
358
|
<react_native_svg_1.Text x={0} y={y + 12} fill={AppColors_1.AppColors.grayTextStrong} fontSize="11" fontFamily={AppFonts_1.AppFonts.interMedium}>
|
|
364
359
|
{d.label}
|
|
365
360
|
</react_native_svg_1.Text>
|
|
366
361
|
|
|
367
|
-
|
|
362
|
+
|
|
368
363
|
<react_native_svg_1.Line x1={0} y1={y + 24} x2={maxBarWidth} y2={y + 24} stroke={AppColors_1.AppColors.grayBorderSecondary} strokeDasharray="4"/>
|
|
369
364
|
|
|
370
|
-
|
|
365
|
+
|
|
371
366
|
<react_native_svg_1.Rect x={0} y={y + 16} width={barWidth} height={14} fill={isGradient ? 'url(#barGrad)' : accentColor} rx={4} opacity={0.85}/>
|
|
372
367
|
|
|
373
|
-
|
|
368
|
+
|
|
374
369
|
<react_native_svg_1.Text x={barWidth + 6} y={y + 26} fill={AppColors_1.AppColors.primaryBlack} fontSize="11" fontFamily={AppFonts_1.AppFonts.interBold}>
|
|
375
370
|
{d.value}
|
|
376
371
|
</react_native_svg_1.Text>
|
|
@@ -42,7 +42,6 @@ const react_native_1 = require("react-native");
|
|
|
42
42
|
const BrandSquareIcon_1 = __importDefault(require("./BrandSquareIcon"));
|
|
43
43
|
const AppHeaderLogo = ({ size = 46, customIcon, }) => {
|
|
44
44
|
const [loadError, setLoadError] = (0, react_1.useState)(false);
|
|
45
|
-
// 1. If customIcon is explicitly provided, render it directly edge-to-edge
|
|
46
45
|
if (customIcon) {
|
|
47
46
|
if (react_1.default.isValidElement(customIcon)) {
|
|
48
47
|
const clonedIcon = react_1.default.cloneElement(customIcon, {
|
|
@@ -72,7 +71,6 @@ const AppHeaderLogo = ({ size = 46, customIcon, }) => {
|
|
|
72
71
|
<react_native_1.Image source={customIcon} style={logoStyles.image} resizeMode="cover"/>
|
|
73
72
|
</react_native_1.View>);
|
|
74
73
|
}
|
|
75
|
-
// 2. Dynamically query installed native app icon (AppIcon on iOS, ic_launcher on Android)
|
|
76
74
|
if (!loadError && react_native_1.Platform.OS !== 'web') {
|
|
77
75
|
const nativeSource = react_native_1.Platform.select({
|
|
78
76
|
ios: { uri: 'AppIcon' },
|
|
@@ -90,7 +88,6 @@ const AppHeaderLogo = ({ size = 46, customIcon, }) => {
|
|
|
90
88
|
<react_native_1.Image source={nativeSource} style={logoStyles.image} resizeMode="cover" onError={() => setLoadError(true)}/>
|
|
91
89
|
</react_native_1.View>);
|
|
92
90
|
}
|
|
93
|
-
// 3. Fallback: Inspector's Signature Owl Brand Logo
|
|
94
91
|
return (<react_native_1.View style={[
|
|
95
92
|
logoStyles.svgContainer,
|
|
96
93
|
{
|
|
@@ -98,18 +98,18 @@ const BrandCircleIcon = ({ size = 56 }) => {
|
|
|
98
98
|
<react_native_svg_1.Circle cx="128" cy="128" r="121.4" fill="none" stroke="url(#edge)" strokeOpacity={0.7} strokeWidth={1.4}/>
|
|
99
99
|
<react_native_svg_1.Circle cx="128" cy="128" r="100" fill="url(#halo)"/>
|
|
100
100
|
<react_native_svg_1.G transform="translate(128 132) scale(1.05) translate(-128 -134)">
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
<react_native_svg_1.Path d="M74 124 C58 154 60 190 86 204 C79 176 77 148 88 126 Z" fill="url(#wing)" stroke="url(#beam)" strokeWidth={2.5} strokeOpacity={0.45}/>
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
<react_native_svg_1.Path d="M182 124 C198 154 196 190 170 204 C177 176 179 148 168 126 Z" fill="url(#wing)" stroke="url(#beam)" strokeWidth={2.5} strokeOpacity={0.45}/>
|
|
105
|
-
|
|
105
|
+
|
|
106
106
|
<react_native_svg_1.Path d="M62 150 C58 104 70 70 90 58 L98 42 L116 62 Q128 57 140 62 L158 42 L166 58 C186 70 198 104 194 150 C198 180 184 204 152 212 C140 216 116 216 104 212 C72 204 58 180 62 150 Z" fill="url(#owlbody)" stroke="url(#beam)" strokeWidth={4} strokeLinejoin="round"/>
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
<react_native_svg_1.Path d="M99 48 L114 62 L104 63 L98 55 Z" fill="#080F22" opacity={0.5}/>
|
|
110
110
|
<react_native_svg_1.Path d="M157 48 L142 62 L152 63 L158 55 Z" fill="#080F22" opacity={0.5}/>
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
<react_native_svg_1.G stroke="#22325A" strokeWidth={2.2} fill="none" strokeLinecap="round" opacity={0.75}>
|
|
114
114
|
<react_native_svg_1.Path d="M80 138 q-5 26 3 50"/>
|
|
115
115
|
<react_native_svg_1.Path d="M90 134 q-4 26 3 48"/>
|
|
@@ -117,10 +117,10 @@ const BrandCircleIcon = ({ size = 56 }) => {
|
|
|
117
117
|
<react_native_svg_1.Path d="M166 134 q4 26 -3 48"/>
|
|
118
118
|
</react_native_svg_1.G>
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
|
|
121
121
|
<react_native_svg_1.Path d="M128 126 C151 126 164 148 162 174 C160 198 146 212 128 212 C110 212 96 198 94 174 C92 148 105 126 128 126 Z" fill="url(#belly)"/>
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
<react_native_svg_1.G stroke="#3E588C" strokeWidth={2.3} fill="none" strokeLinecap="round" opacity={0.4}>
|
|
125
125
|
<react_native_svg_1.Path d="M110 154 Q118 162 126 154"/>
|
|
126
126
|
<react_native_svg_1.Path d="M126 154 Q134 162 142 154"/>
|
|
@@ -131,7 +131,7 @@ const BrandCircleIcon = ({ size = 56 }) => {
|
|
|
131
131
|
<react_native_svg_1.Path d="M128 190 Q136 198 144 190"/>
|
|
132
132
|
</react_native_svg_1.G>
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
<react_native_svg_1.Rect x={107} y={161} width={42} height={32} rx={9} fill="#0C1426" stroke="url(#beam)" strokeWidth={2} strokeOpacity={0.7}/>
|
|
136
136
|
<react_native_svg_1.G stroke="#8FD0EC" strokeWidth={3} strokeLinecap="round" strokeLinejoin="round" fill="none">
|
|
137
137
|
<react_native_svg_1.Path d="M122 170 L115 177 L122 184"/>
|
|
@@ -139,27 +139,27 @@ const BrandCircleIcon = ({ size = 56 }) => {
|
|
|
139
139
|
<react_native_svg_1.Path d="M130 168 L126 186"/>
|
|
140
140
|
</react_native_svg_1.G>
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
|
|
143
143
|
<react_native_svg_1.Path d="M128 92 C148 70 186 78 186 108 C186 134 160 152 128 152 C96 152 70 134 70 108 C70 78 108 70 128 92 Z" fill="url(#faceplate)" stroke="#52709E" strokeWidth={2.6} strokeOpacity={0.7}/>
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
<react_native_svg_1.Path d="M128 96 L128 120" stroke="#52709E" strokeWidth={2} strokeLinecap="round" strokeOpacity={0.45}/>
|
|
146
146
|
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
<react_native_svg_1.G stroke="url(#beak)" strokeWidth={5} strokeLinecap="round" fill="none">
|
|
149
149
|
<react_native_svg_1.Path d="M111 209 L105 224 M111 209 L111 226 M111 209 L117 224"/>
|
|
150
150
|
<react_native_svg_1.Path d="M145 209 L139 224 M145 209 L145 226 M145 209 L151 224"/>
|
|
151
151
|
</react_native_svg_1.G>
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
<react_native_svg_1.Circle cx={153} cy={107} r={17} fill="url(#iris)" stroke="#1A1205" strokeWidth={2.2}/>
|
|
155
155
|
<react_native_svg_1.Circle cx={153} cy={108} r={8.2} fill="#0A0E18"/>
|
|
156
156
|
<react_native_svg_1.Circle cx={156.2} cy={104} r={3.1} fill="#ffffff" opacity={0.95}/>
|
|
157
157
|
<react_native_svg_1.Circle cx={149.6} cy={111} r={1.6} fill="#ffffff" opacity={0.7}/>
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
|
|
160
160
|
<react_native_svg_1.Path d="M123.5 123 Q128 121 132.5 123 Q131 132 128 134.5 Q125 132 123.5 123 Z" fill="url(#beak)"/>
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
|
|
163
163
|
<react_native_svg_1.Circle cx={95} cy={103} r={20} fill="url(#iris)" stroke="#1A1205" strokeWidth={2.6}/>
|
|
164
164
|
<react_native_svg_1.Circle cx={95} cy={104} r={10} fill="#0A0E18"/>
|
|
165
165
|
<react_native_svg_1.Circle cx={98.6} cy={100} r={3.4} fill="#ffffff" opacity={0.95}/>
|
|
@@ -170,7 +170,7 @@ const BrandCircleIcon = ({ size = 56 }) => {
|
|
|
170
170
|
<react_native_svg_1.Line x1={75} y1={123} x2={54} y2={147} stroke="url(#beam)" strokeWidth={8.5} strokeLinecap="round"/>
|
|
171
171
|
<react_native_svg_1.Circle cx={95} cy={103} r={28} fill="none" stroke="url(#beam)" strokeWidth={7}/>
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
<react_native_svg_1.Ellipse cx={83} cy={127} rx={9} ry={6} fill="url(#blush)"/>
|
|
175
175
|
<react_native_svg_1.Ellipse cx={167} cy={122} rx={9} ry={6} fill="url(#blush)"/>
|
|
176
176
|
</react_native_svg_1.G>
|