react-native-inapp-inspector 2.3.5 → 2.3.6

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 (226) hide show
  1. package/dist/commonjs/analytics.d.ts +0 -4
  2. package/dist/commonjs/analytics.js +0 -4
  3. package/dist/commonjs/bundle.d.ts +0 -4
  4. package/dist/commonjs/bundle.js +0 -4
  5. package/dist/commonjs/components/AnalyticsDetail.js +18 -27
  6. package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
  7. package/dist/commonjs/components/AnalyticsGraph.js +10 -15
  8. package/dist/commonjs/components/AppHeaderLogo.js +0 -3
  9. package/dist/commonjs/components/BrandCircleIcon.js +15 -15
  10. package/dist/commonjs/components/BrandSquareIcon.js +20 -20
  11. package/dist/commonjs/components/CodeSnippet.js +6 -19
  12. package/dist/commonjs/components/ConsoleLogCard.js +0 -1
  13. package/dist/commonjs/components/CopyButton.js +0 -4
  14. package/dist/commonjs/components/DiffViewer.js +0 -2
  15. package/dist/commonjs/components/DomainHeader.js +0 -4
  16. package/dist/commonjs/components/EmptyState.js +0 -3
  17. package/dist/commonjs/components/ErrorBoundary.js +5 -10
  18. package/dist/commonjs/components/HeadersSection.js +0 -5
  19. package/dist/commonjs/components/HighlightText.js +1 -4
  20. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
  21. package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
  22. package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
  23. package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
  24. package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
  25. package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
  26. package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
  27. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
  28. package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
  29. package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
  30. package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
  31. package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
  32. package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
  33. package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
  35. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
  36. package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
  37. package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
  38. package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
  39. package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
  40. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
  41. package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
  42. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
  43. package/dist/commonjs/components/JsonViewer.js +3 -10
  44. package/dist/commonjs/components/LogCard.js +7 -7
  45. package/dist/commonjs/components/MetaAccordion.js +1 -7
  46. package/dist/commonjs/components/NetworkIcons.js +12 -16
  47. package/dist/commonjs/components/SectionHeader.js +0 -4
  48. package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
  49. package/dist/commonjs/components/Slider.js +6 -6
  50. package/dist/commonjs/components/SourcePageCard.js +0 -4
  51. package/dist/commonjs/components/TreeNode.js +0 -4
  52. package/dist/commonjs/console.d.ts +0 -4
  53. package/dist/commonjs/console.js +0 -4
  54. package/dist/commonjs/constants/index.js +6 -9
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +7 -0
  56. package/dist/commonjs/constants/telemetryConfig.js +10 -0
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -3
  59. package/dist/commonjs/crash.d.ts +0 -4
  60. package/dist/commonjs/crash.js +0 -4
  61. package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
  62. package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
  63. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
  64. package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
  65. package/dist/commonjs/customHooks/consoleLogger.js +0 -16
  66. package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
  67. package/dist/commonjs/customHooks/crashHandler.js +0 -55
  68. package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
  69. package/dist/commonjs/customHooks/logFilters.js +0 -11
  70. package/dist/commonjs/customHooks/networkLogger.js +2 -13
  71. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
  72. package/dist/commonjs/customHooks/performanceTracker.js +0 -31
  73. package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
  74. package/dist/commonjs/customHooks/reduxLogger.js +0 -51
  75. package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
  76. package/dist/commonjs/customHooks/storageInspector.js +1 -56
  77. package/dist/commonjs/decorators/index.d.ts +0 -37
  78. package/dist/commonjs/decorators/index.js +0 -42
  79. package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
  80. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
  81. package/dist/commonjs/helpers/index.d.ts +0 -7
  82. package/dist/commonjs/helpers/index.js +1 -42
  83. package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
  84. package/dist/commonjs/helpers/memoryManager.js +0 -13
  85. package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
  86. package/dist/commonjs/helpers/searchQueryParser.js +0 -18
  87. package/dist/commonjs/helpers/settingsStore.js +0 -8
  88. package/dist/commonjs/helpers/telemetry.d.ts +2 -0
  89. package/dist/commonjs/helpers/telemetry.js +302 -0
  90. package/dist/commonjs/i18n/index.d.ts +0 -9
  91. package/dist/commonjs/i18n/index.js +0 -15
  92. package/dist/commonjs/index.js +15 -97
  93. package/dist/commonjs/native/NativeInspector.d.ts +0 -54
  94. package/dist/commonjs/native/NativeInspector.js +0 -56
  95. package/dist/commonjs/network.d.ts +0 -4
  96. package/dist/commonjs/network.js +0 -4
  97. package/dist/commonjs/performance.d.ts +0 -4
  98. package/dist/commonjs/performance.js +0 -4
  99. package/dist/commonjs/redux.d.ts +0 -4
  100. package/dist/commonjs/redux.js +0 -4
  101. package/dist/commonjs/storage.d.ts +0 -4
  102. package/dist/commonjs/storage.js +0 -4
  103. package/dist/commonjs/styles/AppColors.d.ts +0 -3
  104. package/dist/commonjs/styles/AppColors.js +15 -30
  105. package/dist/commonjs/styles/AppFonts.d.ts +0 -4
  106. package/dist/commonjs/styles/AppFonts.js +0 -4
  107. package/dist/commonjs/styles/common.js +0 -11
  108. package/dist/commonjs/styles/index.js +0 -8
  109. package/dist/commonjs/types/enums.js +0 -3
  110. package/dist/commonjs/types/interfaces.d.ts +3 -3
  111. package/dist/esm/analytics.d.ts +0 -4
  112. package/dist/esm/analytics.js +0 -4
  113. package/dist/esm/bundle.d.ts +0 -4
  114. package/dist/esm/bundle.js +0 -4
  115. package/dist/esm/components/AnalyticsDetail.js +18 -27
  116. package/dist/esm/components/AnalyticsEventCard.js +9 -12
  117. package/dist/esm/components/AnalyticsGraph.js +10 -15
  118. package/dist/esm/components/AppHeaderLogo.js +0 -3
  119. package/dist/esm/components/BrandCircleIcon.js +15 -15
  120. package/dist/esm/components/BrandSquareIcon.js +20 -20
  121. package/dist/esm/components/CodeSnippet.js +6 -19
  122. package/dist/esm/components/ConsoleLogCard.js +0 -1
  123. package/dist/esm/components/CopyButton.js +0 -4
  124. package/dist/esm/components/DiffViewer.js +0 -2
  125. package/dist/esm/components/DomainHeader.js +0 -4
  126. package/dist/esm/components/EmptyState.js +0 -3
  127. package/dist/esm/components/ErrorBoundary.js +5 -10
  128. package/dist/esm/components/HeadersSection.js +0 -5
  129. package/dist/esm/components/HighlightText.js +1 -4
  130. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
  131. package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
  132. package/dist/esm/components/Inspector/BundleTab.js +56 -84
  133. package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
  134. package/dist/esm/components/Inspector/CrashDetail.js +18 -20
  135. package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
  136. package/dist/esm/components/Inspector/CrashTab.js +11 -20
  137. package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
  138. package/dist/esm/components/Inspector/FabLauncher.js +1 -1
  139. package/dist/esm/components/Inspector/InspectorContext.js +0 -2
  140. package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
  141. package/dist/esm/components/Inspector/LogDetail.js +27 -29
  142. package/dist/esm/components/Inspector/MainScreen.js +9 -10
  143. package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
  144. package/dist/esm/components/Inspector/NetworkTab.js +14 -14
  145. package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
  146. package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
  147. package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
  148. package/dist/esm/components/Inspector/ReduxTab.js +11 -20
  149. package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
  150. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
  151. package/dist/esm/components/Inspector/StorageTab.js +14 -26
  152. package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
  153. package/dist/esm/components/JsonViewer.js +3 -10
  154. package/dist/esm/components/LogCard.js +7 -7
  155. package/dist/esm/components/MetaAccordion.js +1 -7
  156. package/dist/esm/components/NetworkIcons.js +12 -16
  157. package/dist/esm/components/SectionHeader.js +0 -4
  158. package/dist/esm/components/SkeletonPlaceholder.js +6 -6
  159. package/dist/esm/components/Slider.js +6 -6
  160. package/dist/esm/components/SourcePageCard.js +0 -4
  161. package/dist/esm/components/TreeNode.js +0 -4
  162. package/dist/esm/console.d.ts +0 -4
  163. package/dist/esm/console.js +0 -4
  164. package/dist/esm/constants/index.js +6 -9
  165. package/dist/esm/constants/telemetryConfig.d.ts +7 -0
  166. package/dist/esm/constants/telemetryConfig.js +7 -0
  167. package/dist/esm/constants/version.d.ts +1 -1
  168. package/dist/esm/constants/version.js +1 -3
  169. package/dist/esm/crash.d.ts +0 -4
  170. package/dist/esm/crash.js +0 -4
  171. package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
  172. package/dist/esm/customHooks/analyticsLogger.js +3 -59
  173. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
  174. package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
  175. package/dist/esm/customHooks/consoleLogger.js +0 -16
  176. package/dist/esm/customHooks/crashHandler.d.ts +0 -28
  177. package/dist/esm/customHooks/crashHandler.js +0 -55
  178. package/dist/esm/customHooks/logFilters.d.ts +0 -4
  179. package/dist/esm/customHooks/logFilters.js +0 -11
  180. package/dist/esm/customHooks/networkLogger.js +2 -13
  181. package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
  182. package/dist/esm/customHooks/performanceTracker.js +0 -31
  183. package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
  184. package/dist/esm/customHooks/reduxLogger.js +0 -51
  185. package/dist/esm/customHooks/storageInspector.d.ts +0 -40
  186. package/dist/esm/customHooks/storageInspector.js +1 -56
  187. package/dist/esm/decorators/index.d.ts +0 -37
  188. package/dist/esm/decorators/index.js +0 -42
  189. package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
  190. package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
  191. package/dist/esm/helpers/index.d.ts +0 -7
  192. package/dist/esm/helpers/index.js +1 -42
  193. package/dist/esm/helpers/memoryManager.d.ts +0 -11
  194. package/dist/esm/helpers/memoryManager.js +0 -13
  195. package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
  196. package/dist/esm/helpers/searchQueryParser.js +0 -18
  197. package/dist/esm/helpers/settingsStore.js +0 -8
  198. package/dist/esm/helpers/telemetry.d.ts +2 -0
  199. package/dist/esm/helpers/telemetry.js +298 -0
  200. package/dist/esm/i18n/index.d.ts +0 -9
  201. package/dist/esm/i18n/index.js +0 -15
  202. package/dist/esm/index.js +15 -97
  203. package/dist/esm/native/NativeInspector.d.ts +0 -54
  204. package/dist/esm/native/NativeInspector.js +0 -56
  205. package/dist/esm/network.d.ts +0 -4
  206. package/dist/esm/network.js +0 -4
  207. package/dist/esm/performance.d.ts +0 -4
  208. package/dist/esm/performance.js +0 -4
  209. package/dist/esm/redux.d.ts +0 -4
  210. package/dist/esm/redux.js +0 -4
  211. package/dist/esm/storage.d.ts +0 -4
  212. package/dist/esm/storage.js +0 -4
  213. package/dist/esm/styles/AppColors.d.ts +0 -3
  214. package/dist/esm/styles/AppColors.js +15 -30
  215. package/dist/esm/styles/AppFonts.d.ts +0 -4
  216. package/dist/esm/styles/AppFonts.js +0 -4
  217. package/dist/esm/styles/common.js +0 -11
  218. package/dist/esm/styles/index.js +0 -8
  219. package/dist/esm/types/enums.js +0 -3
  220. package/dist/esm/types/interfaces.d.ts +3 -3
  221. package/package.json +2 -2
  222. package/src/constants/telemetryConfig.ts +16 -0
  223. package/src/constants/version.ts +1 -1
  224. package/src/helpers/telemetry.ts +341 -0
  225. package/src/index.tsx +15 -1
  226. package/src/types/interfaces.ts +3 -0
@@ -49,10 +49,8 @@ const helpers_1 = require("../../helpers");
49
49
  const NetworkIcons_1 = require("../NetworkIcons");
50
50
  const react_native_svg_1 = __importStar(require("react-native-svg"));
51
51
  const bundleAnalyzer_1 = require("../../customHooks/bundleAnalyzer");
52
- // ─── High-Fidelity Vector Package & NPM Logos ────────────────────────────────
53
52
  const PackageLogoRenderer = ({ name, size = 28 }) => {
54
53
  const lowerName = name.toLowerCase();
55
- // 1. React & React Native (Official Cyan Atom Orbital)
56
54
  if (lowerName === 'react' ||
57
55
  (lowerName.includes('react-native') &&
58
56
  !lowerName.includes('svg') &&
@@ -70,7 +68,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
70
68
  </react_native_svg_1.default>
71
69
  </react_native_1.View>);
72
70
  }
73
- // 2. React Navigation (Official Violet/Cyan Compass)
74
71
  if (lowerName.includes('navigation')) {
75
72
  return (<react_native_1.View style={[
76
73
  bundleStyles.pkgLogoWrap,
@@ -83,7 +80,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
83
80
  </react_native_svg_1.default>
84
81
  </react_native_1.View>);
85
82
  }
86
- // 3. React Native SVG (Bezier Path Vector Art)
87
83
  if (lowerName.includes('svg')) {
88
84
  return (<react_native_1.View style={[
89
85
  bundleStyles.pkgLogoWrap,
@@ -97,7 +93,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
97
93
  </react_native_svg_1.default>
98
94
  </react_native_1.View>);
99
95
  }
100
- // 4. Axios (Official Indigo & Cyan Network Adapter)
101
96
  if (lowerName.includes('axios')) {
102
97
  return (<react_native_1.View style={[
103
98
  bundleStyles.pkgLogoWrap,
@@ -109,7 +104,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
109
104
  </react_native_svg_1.default>
110
105
  </react_native_1.View>);
111
106
  }
112
- // 5. React Native Screens (Software Mansion Deep Indigo Stack)
113
107
  if (lowerName.includes('screens') || lowerName.includes('software-mansion')) {
114
108
  return (<react_native_1.View style={[
115
109
  bundleStyles.pkgLogoWrap,
@@ -126,7 +120,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
126
120
  </react_native_svg_1.default>
127
121
  </react_native_1.View>);
128
122
  }
129
- // 6. Linear Gradient (Vibrant Color Spectrum)
130
123
  if (lowerName.includes('gradient')) {
131
124
  return (<react_native_1.View style={[
132
125
  bundleStyles.pkgLogoWrap,
@@ -144,7 +137,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
144
137
  </react_native_svg_1.default>
145
138
  </react_native_1.View>);
146
139
  }
147
- // 7. i18next & Translations (Emerald Globe)
148
140
  if (lowerName.includes('i18n')) {
149
141
  return (<react_native_1.View style={[
150
142
  bundleStyles.pkgLogoWrap,
@@ -157,7 +149,6 @@ const PackageLogoRenderer = ({ name, size = 28 }) => {
157
149
  </react_native_svg_1.default>
158
150
  </react_native_1.View>);
159
151
  }
160
- // 8. Official Red NPM Logo Box (Universal Default NPM Branding)
161
152
  return (<react_native_1.View style={[
162
153
  bundleStyles.pkgLogoWrap,
163
154
  { width: size, height: size, backgroundColor: AppColors_1.AppColors.npmRed },
@@ -244,10 +235,8 @@ const BundleCategoryIcon = ({ type, size = 16, color = AppColors_1.AppColors.pur
244
235
  {renderGlyph()}
245
236
  </react_native_svg_1.default>);
246
237
  };
247
- // ─── Media File Thumbnail Component ──────────────────────────────────────────
248
238
  const MediaPreviewThumbnail = ({ file }) => {
249
239
  const [loadError, setLoadError] = (0, react_1.useState)(false);
250
- // 1. If it's an SVG file, render an inline vector thumbnail preview
251
240
  if (file.ext === 'SVG' || file.name.toLowerCase().endsWith('.svg')) {
252
241
  return (<react_native_1.View style={[
253
242
  bundleStyles.mediaThumbWrap,
@@ -266,7 +255,7 @@ const MediaPreviewThumbnail = ({ file }) => {
266
255
  </react_native_svg_1.LinearGradient>
267
256
  </react_native_svg_1.Defs>
268
257
  <react_native_svg_1.Circle cx="50" cy="50" r="44" fill="url(#svgGradThumb)"/>
269
- {/* Vector bezier path pen graphic */}
258
+
270
259
  <react_native_svg_1.Path d="M25 70 C35 30, 65 30, 75 70" stroke={AppColors_1.AppColors.white} strokeWidth="8" strokeLinecap="round"/>
271
260
  <react_native_svg_1.Circle cx="25" cy="70" r="7" fill={AppColors_1.AppColors.white}/>
272
261
  <react_native_svg_1.Circle cx="75" cy="70" r="7" fill={AppColors_1.AppColors.white}/>
@@ -274,7 +263,6 @@ const MediaPreviewThumbnail = ({ file }) => {
274
263
  </react_native_svg_1.default>
275
264
  </react_native_1.View>);
276
265
  }
277
- // 2. Raster Image (PNG, JPG, WebP) with valid preview URI
278
266
  if (file.category === 'image' && file.previewUri && !loadError) {
279
267
  return (<react_native_1.View style={bundleStyles.mediaThumbWrap}>
280
268
  <react_native_1.Image source={{ uri: file.previewUri }} style={bundleStyles.mediaThumbImg} resizeMode="cover" onError={() => setLoadError(true)}/>
@@ -342,7 +330,6 @@ function buildBundleFileTree(files) {
342
330
  children,
343
331
  });
344
332
  }
345
- // Sort folders first, then files alphabetically
346
333
  return nodes.sort((a, b) => {
347
334
  if (a.isFolder && !b.isFolder)
348
335
  return -1;
@@ -355,7 +342,6 @@ function buildBundleFileTree(files) {
355
342
  }
356
343
  const downloadBundleFile = async (file, scriptURL) => {
357
344
  let content = '';
358
- // 1. Attempt to fetch real source code from Metro dev server dynamically
359
345
  try {
360
346
  let devServerOrigin = '';
361
347
  const activeUrl = scriptURL || (0, bundleAnalyzer_1.getHostScriptURL)();
@@ -378,7 +364,6 @@ const downloadBundleFile = async (file, scriptURL) => {
378
364
  }
379
365
  }
380
366
  catch { }
381
- // 2. If dev server direct fetch is unavailable, provide structured module descriptor with full path
382
367
  if (!content) {
383
368
  content = `// ─────────────────────────────────────────────────────────────
384
369
  // File: ${file.name}
@@ -402,7 +387,6 @@ export default {
402
387
  };
403
388
  `;
404
389
  }
405
- // 3. Trigger native Share / Download sheet
406
390
  try {
407
391
  await react_native_1.Share.share(react_native_1.Platform.OS === 'ios'
408
392
  ? {
@@ -417,7 +401,6 @@ export default {
417
401
  });
418
402
  }
419
403
  catch { }
420
- // 4. Also copy directly to clipboard for quick paste in VS Code or external editor
421
404
  try {
422
405
  (0, helpers_1.copyToClipboard)(content, file.name);
423
406
  }
@@ -468,7 +451,6 @@ const BundleTreeNodeView = ({ node, level, search, totalBundleKb, expandedFolder
468
451
  </react_native_1.View>)}
469
452
  </react_native_1.View>);
470
453
  }
471
- // File item inside tree
472
454
  const file = node.fileItem;
473
455
  if (!file)
474
456
  return null;
@@ -567,7 +549,6 @@ const BundleTab = react_1.default.memo(() => {
567
549
  const [prodPlatform, setProdPlatform] = (0, react_1.useState)('ios');
568
550
  const [search, setSearch] = (0, react_1.useState)('');
569
551
  const [activeCategory, setActiveCategory] = (0, react_1.useState)('ALL');
570
- // ─── Live Host App Bundle Analysis (fetched from Metro / runtime) ─────────
571
552
  const [analysis, setAnalysis] = (0, react_1.useState)(() => (0, bundleAnalyzer_1.getCachedBundleAnalysis)() || (0, bundleAnalyzer_1.getInitialBundleAnalysis)());
572
553
  const [isAnalyzing, setIsAnalyzing] = (0, react_1.useState)(false);
573
554
  const refreshAnalysis = (0, react_1.useCallback)(() => {
@@ -599,12 +580,9 @@ const BundleTab = react_1.default.memo(() => {
599
580
  mounted = false;
600
581
  };
601
582
  }, []);
602
- // Check if Hermes is running
603
583
  const isHermes = Boolean(global.HermesInternal);
604
- // Dynamic files & packages derived from the analyzed host bundle
605
584
  const bundleFiles = (0, react_1.useMemo)(() => (analysis ? analysis.files : []), [analysis]);
606
585
  const bundlePackages = (0, react_1.useMemo)(() => (analysis ? analysis.packages : []), [analysis]);
607
- // Comprehensive bundle summary (full Metro bundle calculation e.g. 6.0 MB)
608
586
  const summary = (0, react_1.useMemo)(() => {
609
587
  const totalKb = analysis?.totalDevKb ||
610
588
  (analysis?.totalDevBytes
@@ -713,7 +691,6 @@ const BundleTab = react_1.default.memo(() => {
713
691
  },
714
692
  };
715
693
  }, [analysis, bundleFiles, bundlePackages]);
716
- // Filtered files
717
694
  const filteredFiles = (0, react_1.useMemo)(() => {
718
695
  return bundleFiles.filter(file => {
719
696
  const matchSearch = !search ||
@@ -734,7 +711,6 @@ const BundleTab = react_1.default.memo(() => {
734
711
  const filteredTotalKb = (0, react_1.useMemo)(() => {
735
712
  return filteredFiles.reduce((acc, f) => acc + f.sizeKb, 0);
736
713
  }, [filteredFiles]);
737
- // Tree View State & Node Generation (Top folders expanded by default)
738
714
  const [filesViewMode, setFilesViewMode] = (0, react_1.useState)('tree');
739
715
  const [expandedFolders, setExpandedFolders] = (0, react_1.useState)({});
740
716
  const fileTreeNodes = (0, react_1.useMemo)(() => {
@@ -778,7 +754,6 @@ const BundleTab = react_1.default.memo(() => {
778
754
  const collapseAllFolders = (0, react_1.useCallback)(() => {
779
755
  setExpandedFolders({});
780
756
  }, []);
781
- // Filtered Packages
782
757
  const filteredPackages = (0, react_1.useMemo)(() => {
783
758
  if (!search)
784
759
  return bundlePackages;
@@ -790,7 +765,6 @@ const BundleTab = react_1.default.memo(() => {
790
765
  const packagesTotalKb = (0, react_1.useMemo)(() => {
791
766
  return filteredPackages.reduce((acc, p) => acc + p.sizeKb, 0);
792
767
  }, [filteredPackages]);
793
- // Media files (Images + Fonts)
794
768
  const mediaFiles = (0, react_1.useMemo)(() => {
795
769
  return bundleFiles.filter(f => f.category === 'image' || f.category === 'font');
796
770
  }, [bundleFiles]);
@@ -830,7 +804,7 @@ const BundleTab = react_1.default.memo(() => {
830
804
  },
831
805
  ];
832
806
  return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
833
- {/* ─── Top Sub-Tabs Navigation Bar (Scrollable Pill Bar + Dynamic Refresh) ─── */}
807
+
834
808
  <react_native_1.View style={bundleStyles.topTabWrap}>
835
809
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={{ flex: 1 }} contentContainerStyle={bundleStyles.subTabsScroll}>
836
810
  {subTabs.map(tab => {
@@ -854,11 +828,11 @@ const BundleTab = react_1.default.memo(() => {
854
828
  </TouchableScale_1.default>
855
829
  </react_native_1.View>
856
830
 
857
- {/* ══════════════════════════════════════════════════════════════════════ */}
858
- {/* ── 1. TAB: OVERVIEW & TREEMAP ───────────────────────────────────────── */}
859
- {/* ══════════════════════════════════════════════════════════════════════ */}
831
+
832
+
833
+
860
834
  {activeSubTab === 'overview' && (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
861
- {/* Hero Overview Card */}
835
+
862
836
  <react_native_1.View style={bundleStyles.heroCard}>
863
837
  <react_native_1.View style={bundleStyles.heroTopRow}>
864
838
  <react_native_1.View style={bundleStyles.heroIconWrap}>
@@ -927,7 +901,7 @@ const BundleTab = react_1.default.memo(() => {
927
901
  <CopyButton_1.default value={() => ({ ...summary, bundle: analysis })} label={t('bundle.bundleOverviewJson')}/>
928
902
  </react_native_1.View>
929
903
 
930
- {/* 4-Stat Metric Grid */}
904
+
931
905
  <react_native_1.View style={bundleStyles.metricsGrid}>
932
906
  <react_native_1.View style={bundleStyles.metricBox}>
933
907
  <react_native_1.Text style={bundleStyles.metricLabel}>
@@ -1008,7 +982,7 @@ const BundleTab = react_1.default.memo(() => {
1008
982
  </react_native_1.View>
1009
983
  </react_native_1.View>
1010
984
 
1011
- {/* Live analysis unavailable warning */}
985
+
1012
986
  {analysis && !analysis.isLive && (<react_native_1.View style={bundleStyles.liveWarningCard}>
1013
987
  <react_native_1.View style={{
1014
988
  flexDirection: 'row',
@@ -1050,7 +1024,7 @@ const BundleTab = react_1.default.memo(() => {
1050
1024
  </react_native_1.View>
1051
1025
  </react_native_1.View>)}
1052
1026
 
1053
- {/* Visual Type Distribution Ratio Bar */}
1027
+
1054
1028
  <react_native_1.View style={bundleStyles.sectionCard}>
1055
1029
  <react_native_1.View style={bundleStyles.sectionHeaderRow}>
1056
1030
  <react_native_1.View style={{ flex: 1, paddingRight: 4 }}>
@@ -1080,7 +1054,7 @@ const BundleTab = react_1.default.memo(() => {
1080
1054
  })} label={t('bundle.treemapJson')}/>
1081
1055
  </react_native_1.View>
1082
1056
 
1083
- {/* Stacked Colored Bar for Full 6.0 MB Bundle */}
1057
+
1084
1058
  <react_native_1.View style={bundleStyles.treemapBar}>
1085
1059
  <react_native_1.View style={{
1086
1060
  flex: summary.nodeModulesPct,
@@ -1104,7 +1078,7 @@ const BundleTab = react_1.default.memo(() => {
1104
1078
  }}/>
1105
1079
  </react_native_1.View>
1106
1080
 
1107
- {/* Legend Grid */}
1081
+
1108
1082
  <react_native_1.View style={bundleStyles.legendGrid}>
1109
1083
  <react_native_1.View style={bundleStyles.legendItem}>
1110
1084
  <BundleCategoryIcon type="javascript" size={13} color={AppColors_1.AppColors.indigo500}/>
@@ -1157,7 +1131,7 @@ const BundleTab = react_1.default.memo(() => {
1157
1131
  </react_native_1.View>
1158
1132
  </react_native_1.View>
1159
1133
 
1160
- {/* Detailed Category Footprint Cards */}
1134
+
1161
1135
  <react_native_1.View style={bundleStyles.sectionCard}>
1162
1136
  <react_native_1.View style={bundleStyles.sectionHeaderRow}>
1163
1137
  <react_native_1.Text style={bundleStyles.sectionTitle}>
@@ -1221,7 +1195,7 @@ const BundleTab = react_1.default.memo(() => {
1221
1195
  </react_native_1.View>
1222
1196
  </react_native_1.View>
1223
1197
 
1224
- {/* Modern Rounded Progress Bar */}
1198
+
1225
1199
  <react_native_1.View style={bundleStyles.catProgressTrack}>
1226
1200
  <react_native_1.View style={[
1227
1201
  bundleStyles.catProgressBar,
@@ -1230,7 +1204,7 @@ const BundleTab = react_1.default.memo(() => {
1230
1204
  </react_native_1.View>
1231
1205
  </react_native_1.Pressable>))}
1232
1206
 
1233
- {/* Executive Total Summation Card */}
1207
+
1234
1208
  <react_native_1.View style={bundleStyles.totalSummaryCard}>
1235
1209
  <react_native_1.View style={bundleStyles.totalSummaryRow}>
1236
1210
  <react_native_1.View style={bundleStyles.totalSummaryLabelWrap}>
@@ -1256,7 +1230,7 @@ const BundleTab = react_1.default.memo(() => {
1256
1230
  </react_native_1.View>
1257
1231
  </react_native_1.View>
1258
1232
 
1259
- {/* 4-Pill Chip Breakdown */}
1233
+
1260
1234
  <react_native_1.View style={bundleStyles.totalFormulaGrid}>
1261
1235
  <react_native_1.View style={bundleStyles.totalChip}>
1262
1236
  <react_native_1.View style={[
@@ -1301,7 +1275,7 @@ const BundleTab = react_1.default.memo(() => {
1301
1275
  </react_native_1.View>
1302
1276
  </react_native_1.View>
1303
1277
 
1304
- {/* Detailed Subsystem Architecture Split-up */}
1278
+
1305
1279
  <react_native_1.View style={bundleStyles.sectionCard}>
1306
1280
  <react_native_1.View style={bundleStyles.sectionHeaderRow}>
1307
1281
  <react_native_1.View style={{ flex: 1, paddingRight: 4 }}>
@@ -1327,7 +1301,7 @@ const BundleTab = react_1.default.memo(() => {
1327
1301
  })} label="Subsystem Split JSON"/>
1328
1302
  </react_native_1.View>
1329
1303
 
1330
- {/* 1. NPM Dependencies Layer */}
1304
+
1331
1305
  <react_native_1.View style={bundleStyles.subsystemCard}>
1332
1306
  <react_native_1.View style={bundleStyles.subsystemHeader}>
1333
1307
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
@@ -1382,7 +1356,7 @@ const BundleTab = react_1.default.memo(() => {
1382
1356
  </react_native_1.View>
1383
1357
  </react_native_1.View>
1384
1358
 
1385
- {/* 2. App Source Code Layer */}
1359
+
1386
1360
  <react_native_1.View style={bundleStyles.subsystemCard}>
1387
1361
  <react_native_1.View style={bundleStyles.subsystemHeader}>
1388
1362
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
@@ -1436,7 +1410,7 @@ const BundleTab = react_1.default.memo(() => {
1436
1410
  </react_native_1.View>
1437
1411
  </react_native_1.View>
1438
1412
 
1439
- {/* 3. Hermes Optimization & Bytecode Engine */}
1413
+
1440
1414
  <react_native_1.View style={bundleStyles.subsystemCard}>
1441
1415
  <react_native_1.View style={bundleStyles.subsystemHeader}>
1442
1416
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
@@ -1485,7 +1459,7 @@ const BundleTab = react_1.default.memo(() => {
1485
1459
  </react_native_1.View>
1486
1460
  </react_native_1.View>
1487
1461
 
1488
- {/* 4. Assets & Media Layer */}
1462
+
1489
1463
  <react_native_1.View style={bundleStyles.subsystemCard}>
1490
1464
  <react_native_1.View style={bundleStyles.subsystemHeader}>
1491
1465
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
@@ -1542,11 +1516,11 @@ const BundleTab = react_1.default.memo(() => {
1542
1516
  </react_native_1.View>
1543
1517
  </react_native_1.ScrollView>)}
1544
1518
 
1545
- {/* ══════════════════════════════════════════════════════════════════════ */}
1546
- {/* ── 2. TAB: PRODUCTION BUILDS & PLATFORMS ───────────────────────────── */}
1547
- {/* ══════════════════════════════════════════════════════════════════════ */}
1519
+
1520
+
1521
+
1548
1522
  {activeSubTab === 'production' && (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
1549
- {/* Platform Segmented Switcher (Horizontally Scrollable) */}
1523
+
1550
1524
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={bundleStyles.prodPlatformScroll}>
1551
1525
  {[
1552
1526
  {
@@ -1591,7 +1565,7 @@ const BundleTab = react_1.default.memo(() => {
1591
1565
  })}
1592
1566
  </react_native_1.ScrollView>
1593
1567
 
1594
- {/* Production Platform Metrics Hero */}
1568
+
1595
1569
  {analysis && (<react_native_1.View style={bundleStyles.heroCard}>
1596
1570
  <react_native_1.View style={bundleStyles.heroTopRow}>
1597
1571
  <react_native_1.View style={bundleStyles.heroIconWrap}>
@@ -1616,7 +1590,7 @@ const BundleTab = react_1.default.memo(() => {
1616
1590
  <CopyButton_1.default value={() => analysis.production[prodPlatform]} label="Production Binary JSON"/>
1617
1591
  </react_native_1.View>
1618
1592
 
1619
- {/* 4-Stat Balanced 2x2 Metric Grid */}
1593
+
1620
1594
  <react_native_1.View style={bundleStyles.metricsGrid}>
1621
1595
  <react_native_1.View style={bundleStyles.metricBox}>
1622
1596
  <react_native_1.Text style={bundleStyles.metricLabel}>INSTALL SIZE</react_native_1.Text>
@@ -1682,7 +1656,7 @@ const BundleTab = react_1.default.memo(() => {
1682
1656
  </react_native_1.View>
1683
1657
  </react_native_1.View>)}
1684
1658
 
1685
- {/* Component Breakdown Cards */}
1659
+
1686
1660
  {analysis && (<react_native_1.View style={bundleStyles.sectionCard}>
1687
1661
  <react_native_1.View style={bundleStyles.sectionHeaderRow}>
1688
1662
  <react_native_1.View style={{ flex: 1, paddingRight: 4 }}>
@@ -1697,7 +1671,7 @@ const BundleTab = react_1.default.memo(() => {
1697
1671
  <CopyButton_1.default value={() => analysis.production[prodPlatform].components} label="Components JSON"/>
1698
1672
  </react_native_1.View>
1699
1673
 
1700
- {/* Visual Binary Component Ratio Bar */}
1674
+
1701
1675
  <react_native_1.View style={bundleStyles.prodTreemapBar}>
1702
1676
  {analysis.production[prodPlatform].components.map((comp, cIdx) => (<react_native_1.View key={cIdx} style={{
1703
1677
  flex: Math.max(comp.pct, 2),
@@ -1706,7 +1680,7 @@ const BundleTab = react_1.default.memo(() => {
1706
1680
  }}/>))}
1707
1681
  </react_native_1.View>
1708
1682
 
1709
- {/* Production Binary Legend */}
1683
+
1710
1684
  <react_native_1.View style={[bundleStyles.legendGrid, { marginBottom: 12 }]}>
1711
1685
  {analysis.production[prodPlatform].components.map((comp, cIdx) => (<react_native_1.View key={cIdx} style={bundleStyles.legendItem}>
1712
1686
  <react_native_1.View style={{
@@ -1804,7 +1778,7 @@ const BundleTab = react_1.default.memo(() => {
1804
1778
  </react_native_1.View>) : null}
1805
1779
  </react_native_1.View>))}
1806
1780
 
1807
- {/* Total Platform Binary Summary with JS Source Bundle Comparison */}
1781
+
1808
1782
  <react_native_1.View style={bundleStyles.totalSummaryCard}>
1809
1783
  <react_native_1.View style={bundleStyles.totalSummaryRow}>
1810
1784
  <react_native_1.View style={bundleStyles.totalSummaryLabelWrap}>
@@ -1830,7 +1804,7 @@ const BundleTab = react_1.default.memo(() => {
1830
1804
  </react_native_1.View>
1831
1805
  </react_native_1.View>
1832
1806
 
1833
- {/* Platform Metric Grid Chips */}
1807
+
1834
1808
  <react_native_1.View style={bundleStyles.totalFormulaGrid}>
1835
1809
  <react_native_1.View style={bundleStyles.totalChip}>
1836
1810
  <react_native_1.View style={[
@@ -1867,11 +1841,11 @@ const BundleTab = react_1.default.memo(() => {
1867
1841
  </react_native_1.View>)}
1868
1842
  </react_native_1.ScrollView>)}
1869
1843
 
1870
- {/* ══════════════════════════════════════════════════════════════════════ */}
1871
- {/* ── 2. TAB: FILES BREAKDOWN ─────────────────────────────────────────── */}
1872
- {/* ══════════════════════════════════════════════════════════════════════ */}
1844
+
1845
+
1846
+
1873
1847
  {activeSubTab === 'files' && (<react_native_1.View style={{ flex: 1 }}>
1874
- {/* Search & Category Filter */}
1848
+
1875
1849
  <react_native_1.View style={bundleStyles.filterContainer}>
1876
1850
  <react_native_1.View style={bundleStyles.searchRow}>
1877
1851
  <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={15}/>
@@ -1882,7 +1856,7 @@ const BundleTab = react_1.default.memo(() => {
1882
1856
  <CopyButton_1.default value={() => filteredFiles} label={t('bundle.filteredFilesJson')}/>
1883
1857
  </react_native_1.View>
1884
1858
 
1885
- {/* Category Filter Chips */}
1859
+
1886
1860
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={bundleStyles.categoryPillsScroll}>
1887
1861
  {CATEGORY_TABS.map(tab => {
1888
1862
  const isActive = activeCategory === tab.key;
@@ -1919,9 +1893,9 @@ const BundleTab = react_1.default.memo(() => {
1919
1893
  </react_native_1.ScrollView>
1920
1894
  </react_native_1.View>
1921
1895
 
1922
- {/* Files List / Tree Content */}
1896
+
1923
1897
  <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
1924
- {/* View Mode Toggle Header Bar */}
1898
+
1925
1899
  <react_native_1.View style={bundleStyles.treeHeaderRow}>
1926
1900
  <react_native_1.View style={bundleStyles.viewModeToggleGroup}>
1927
1901
  <TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="Tree folder view" accessibilityState={{ selected: filesViewMode === 'tree' }} onPress={() => setFilesViewMode('tree')} style={[
@@ -1972,12 +1946,10 @@ const BundleTab = react_1.default.memo(() => {
1972
1946
  </react_native_1.Text>)}
1973
1947
  </react_native_1.View>
1974
1948
 
1975
- {/* ── MODE 1: DIRECTORY TREE VIEW ── */}
1949
+
1976
1950
  {filesViewMode === 'tree' ? (<react_native_1.View style={bundleStyles.treeRootCard}>
1977
1951
  {fileTreeNodes.map((node, nIdx) => (<BundleTreeNodeView key={node.id} node={node} level={0} search={search} totalBundleKb={summary.totalKb} expandedFolders={expandedFolders} toggleFolder={toggleFolder} isLastChild={nIdx === fileTreeNodes.length - 1} onDownload={f => (0, exports.downloadBundleFile)(f, analysis?.scriptURL)}/>))}
1978
- </react_native_1.View>) : (
1979
- /* ── MODE 2: FLAT LIST VIEW ── */
1980
- filteredFiles.map((file, index) => {
1952
+ </react_native_1.View>) : (filteredFiles.map((file, index) => {
1981
1953
  const categoryMeta = CATEGORY_COLORS[file.category] || CATEGORY_COLORS.typescript;
1982
1954
  const pctOfTotal = ((file.sizeKb / summary.totalKb) *
1983
1955
  100).toFixed(1);
@@ -2082,7 +2054,7 @@ const BundleTab = react_1.default.memo(() => {
2082
2054
  }))}
2083
2055
  </react_native_1.ScrollView>
2084
2056
 
2085
- {/* Sticky Total Bundle Size Footer */}
2057
+
2086
2058
  <react_native_1.View style={bundleStyles.stickyFooterBar}>
2087
2059
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
2088
2060
  <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={14}/>
@@ -2102,9 +2074,9 @@ const BundleTab = react_1.default.memo(() => {
2102
2074
  </react_native_1.View>
2103
2075
  </react_native_1.View>)}
2104
2076
 
2105
- {/* ══════════════════════════════════════════════════════════════════════ */}
2106
- {/* ── 3. TAB: PACKAGES & NODE_MODULES ─────────────────────────────────── */}
2107
- {/* ══════════════════════════════════════════════════════════════════════ */}
2077
+
2078
+
2079
+
2108
2080
  {activeSubTab === 'packages' && (<react_native_1.View style={{ flex: 1 }}>
2109
2081
  <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
2110
2082
  <react_native_1.View style={bundleStyles.filterContainer}>
@@ -2138,7 +2110,7 @@ const BundleTab = react_1.default.memo(() => {
2138
2110
  backgroundColor: AppColors_1.AppColors.errorCardBg,
2139
2111
  },
2140
2112
  ]}>
2141
- {/* Header Row: #s.no + Logo + Package Name + Version Pill + Update/Deprecated Badges + Size & Copy */}
2113
+
2142
2114
  <react_native_1.View style={bundleStyles.fileCardTop}>
2143
2115
  <react_native_1.View style={bundleStyles.sNoBadge}>
2144
2116
  <react_native_1.Text style={bundleStyles.sNoText}>#{index + 1}</react_native_1.Text>
@@ -2221,7 +2193,7 @@ const BundleTab = react_1.default.memo(() => {
2221
2193
  </react_native_1.View>
2222
2194
  </react_native_1.View>
2223
2195
 
2224
- {/* Subtitle Row: Category Chip + Description */}
2196
+
2225
2197
  <react_native_1.View style={{
2226
2198
  flexDirection: 'row',
2227
2199
  alignItems: 'center',
@@ -2245,7 +2217,7 @@ const BundleTab = react_1.default.memo(() => {
2245
2217
  </react_native_1.Text>
2246
2218
  </react_native_1.View>
2247
2219
 
2248
- {/* Deprecation Warning Banner if deprecated */}
2220
+
2249
2221
  {pkg.isDeprecated && pkg.deprecationReason && (<react_native_1.View style={bundleStyles.deprecationBox}>
2250
2222
  <react_native_1.View style={{
2251
2223
  flexDirection: 'row',
@@ -2271,7 +2243,7 @@ const BundleTab = react_1.default.memo(() => {
2271
2243
  ]}/>
2272
2244
  </react_native_1.View>
2273
2245
 
2274
- {/* Footer Row: Type Tag + Last Active + NPM Link Button */}
2246
+
2275
2247
  <react_native_1.View style={{
2276
2248
  flexDirection: 'row',
2277
2249
  justifyContent: 'space-between',
@@ -2325,7 +2297,7 @@ const BundleTab = react_1.default.memo(() => {
2325
2297
  })}
2326
2298
  </react_native_1.ScrollView>
2327
2299
 
2328
- {/* Sticky Total Package Size Footer */}
2300
+
2329
2301
  <react_native_1.View style={bundleStyles.stickyFooterBar}>
2330
2302
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
2331
2303
  <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.purple} size={14}/>
@@ -2344,9 +2316,9 @@ const BundleTab = react_1.default.memo(() => {
2344
2316
  </react_native_1.View>
2345
2317
  </react_native_1.View>)}
2346
2318
 
2347
- {/* ══════════════════════════════════════════════════════════════════════ */}
2348
- {/* ── 4. TAB: MEDIA & ASSET AUDITOR ───────────────────────────────────── */}
2349
- {/* ══════════════════════════════════════════════════════════════════════ */}
2319
+
2320
+
2321
+
2350
2322
  {activeSubTab === 'media' && (<react_native_1.View style={{ flex: 1 }}>
2351
2323
  <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
2352
2324
  <react_native_1.View style={bundleStyles.tipsCard}>
@@ -2443,7 +2415,7 @@ const BundleTab = react_1.default.memo(() => {
2443
2415
  </react_native_1.View>))}
2444
2416
  </react_native_1.ScrollView>
2445
2417
 
2446
- {/* Sticky Total Media Size Footer */}
2418
+
2447
2419
  <react_native_1.View style={bundleStyles.stickyFooterBar}>
2448
2420
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
2449
2421
  <NetworkIcons_1.StorageIcon color={AppColors_1.AppColors.purple} size={14}/>
@@ -2460,9 +2432,9 @@ const BundleTab = react_1.default.memo(() => {
2460
2432
  </react_native_1.View>
2461
2433
  </react_native_1.View>)}
2462
2434
 
2463
- {/* ══════════════════════════════════════════════════════════════════════ */}
2464
- {/* ── 5. TAB: OPTIMIZER CHECKLIST ─────────────────────────────────────── */}
2465
- {/* ══════════════════════════════════════════════════════════════════════ */}
2435
+
2436
+
2437
+
2466
2438
  {activeSubTab === 'optimizer' && (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={bundleStyles.contentContainer} keyboardShouldPersistTaps="handled">
2467
2439
  <react_native_1.View style={bundleStyles.tipsCard}>
2468
2440
  <react_native_1.View style={{
@@ -163,7 +163,7 @@ const ConsoleTab = react_1.default.memo(() => {
163
163
  </react_native_1.View>
164
164
  </react_native_1.View>
165
165
 
166
- {/* Quick Tag Search Suggestions Bar */}
166
+
167
167
  {(isSearchFocused || logSearch.length > 0) && (<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={{ marginBottom: 6, maxHeight: 30 }} contentContainerStyle={{
168
168
  paddingHorizontal: 16,
169
169
  flexDirection: 'row',
@@ -213,7 +213,7 @@ const ConsoleTab = react_1.default.memo(() => {
213
213
  alignItems: 'center',
214
214
  gap: 8,
215
215
  }}>
216
- {/* All Filter */}
216
+
217
217
  {(() => {
218
218
  const active = logFilters.has('all');
219
219
  return (<TouchableScale_1.default onPress={() => {
@@ -256,7 +256,7 @@ const ConsoleTab = react_1.default.memo(() => {
256
256
  </TouchableScale_1.default>);
257
257
  })()}
258
258
 
259
- {/* User Log / Standard Log Filter */}
259
+
260
260
  {(() => {
261
261
  const active = logFilters.has('user-log');
262
262
  return (<TouchableScale_1.default onPress={() => {
@@ -308,7 +308,7 @@ const ConsoleTab = react_1.default.memo(() => {
308
308
  </TouchableScale_1.default>);
309
309
  })()}
310
310
 
311
- {/* Info Filter */}
311
+
312
312
  {(() => {
313
313
  const active = logFilters.has('info');
314
314
  return (<TouchableScale_1.default onPress={() => {
@@ -360,7 +360,7 @@ const ConsoleTab = react_1.default.memo(() => {
360
360
  </TouchableScale_1.default>);
361
361
  })()}
362
362
 
363
- {/* Warning Filter */}
363
+
364
364
  {(() => {
365
365
  const active = logFilters.has('warn');
366
366
  return (<TouchableScale_1.default onPress={() => {
@@ -412,7 +412,7 @@ const ConsoleTab = react_1.default.memo(() => {
412
412
  </TouchableScale_1.default>);
413
413
  })()}
414
414
 
415
- {/* Error Filter */}
415
+
416
416
  {(() => {
417
417
  const active = logFilters.has('error');
418
418
  return (<TouchableScale_1.default onPress={() => {
@@ -464,7 +464,7 @@ const ConsoleTab = react_1.default.memo(() => {
464
464
  </TouchableScale_1.default>);
465
465
  })()}
466
466
 
467
- {/* Analytics Filter */}
467
+
468
468
  {(() => {
469
469
  const active = logFilters.has('analytics');
470
470
  return (<TouchableScale_1.default onPress={() => {