react-native-inapp-inspector 2.3.24 → 2.4.0

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 (207) hide show
  1. package/README.md +26 -5
  2. package/dist/commonjs/components/AnalyticsDetail.js +15 -12
  3. package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
  4. package/dist/commonjs/components/AppHeaderLogo.js +4 -6
  5. package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
  6. package/dist/commonjs/components/ConsoleLogCard.js +92 -80
  7. package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
  8. package/dist/commonjs/components/EndOfListFooter.js +27 -5
  9. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1 -1
  10. package/dist/commonjs/components/Inspector/AnalyticsTab.js +27 -299
  11. package/dist/commonjs/components/Inspector/ConsoleTab.js +36 -94
  12. package/dist/commonjs/components/Inspector/CrashDetail.js +11 -10
  13. package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
  14. package/dist/commonjs/components/Inspector/DebuggingTab.js +13 -13
  15. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +107 -71
  16. package/dist/commonjs/components/Inspector/FabLauncher.js +8 -9
  17. package/dist/commonjs/components/Inspector/InspectorHeader.js +93 -70
  18. package/dist/commonjs/components/Inspector/LogDetail.js +10 -7
  19. package/dist/commonjs/components/Inspector/MainScreen.js +66 -30
  20. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
  21. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
  22. package/dist/commonjs/components/Inspector/NetworkDetail.js +29 -28
  23. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +1 -1
  24. package/dist/commonjs/components/Inspector/NetworkTab.js +87 -85
  25. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
  26. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
  27. package/dist/commonjs/components/Inspector/PushCard.d.ts +4 -0
  28. package/dist/commonjs/components/Inspector/PushCard.js +89 -0
  29. package/dist/commonjs/components/Inspector/PushDetail.d.ts +4 -0
  30. package/dist/commonjs/components/Inspector/PushDetail.js +190 -0
  31. package/dist/commonjs/components/Inspector/PushTab.d.ts +3 -0
  32. package/dist/commonjs/components/Inspector/PushTab.js +45 -0
  33. package/dist/commonjs/components/Inspector/ReduxDetail.js +16 -13
  34. package/dist/commonjs/components/Inspector/ReduxTab.js +109 -106
  35. package/dist/commonjs/components/Inspector/SettingsPanel.js +230 -134
  36. package/dist/commonjs/components/Inspector/StorageTab.js +55 -51
  37. package/dist/commonjs/components/Inspector/TabBar.js +30 -26
  38. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +2 -2
  39. package/dist/commonjs/components/JsonViewer.js +151 -159
  40. package/dist/commonjs/components/LogCard.js +34 -38
  41. package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
  42. package/dist/commonjs/components/ModuleErrorBoundary.d.ts +24 -0
  43. package/dist/commonjs/components/ModuleErrorBoundary.js +33 -0
  44. package/dist/commonjs/components/NetworkIcons.d.ts +3 -3
  45. package/dist/commonjs/components/NetworkIcons.js +10 -6
  46. package/dist/commonjs/components/SegmentedTabs.d.ts +8 -2
  47. package/dist/commonjs/components/SegmentedTabs.js +11 -7
  48. package/dist/commonjs/components/ShareButton.d.ts +11 -0
  49. package/dist/commonjs/components/ShareButton.js +6 -0
  50. package/dist/commonjs/constants/index.js +1 -1
  51. package/dist/commonjs/constants/version.d.ts +1 -1
  52. package/dist/commonjs/constants/version.js +1 -1
  53. package/dist/commonjs/customHooks/crashHandler.js +4 -4
  54. package/dist/commonjs/customHooks/networkLogger.js +1 -2
  55. package/dist/commonjs/customHooks/pushNotificationLogger.d.ts +19 -0
  56. package/dist/commonjs/customHooks/pushNotificationLogger.js +1 -0
  57. package/dist/commonjs/helpers/index.d.ts +6 -0
  58. package/dist/commonjs/helpers/index.js +4 -4
  59. package/dist/commonjs/helpers/memoryManager.d.ts +2 -2
  60. package/dist/commonjs/helpers/memoryManager.js +1 -1
  61. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  62. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  63. package/dist/commonjs/helpers/settingsStore.js +1 -1
  64. package/dist/commonjs/helpers/shareFormatter.d.ts +13 -0
  65. package/dist/commonjs/helpers/shareFormatter.js +7 -0
  66. package/dist/commonjs/i18n/index.d.ts +35 -0
  67. package/dist/commonjs/i18n/index.js +1 -1
  68. package/dist/commonjs/i18n/locales/ar.json +1 -0
  69. package/dist/commonjs/i18n/locales/de.json +1 -0
  70. package/dist/commonjs/i18n/locales/en.json +1 -1
  71. package/dist/commonjs/i18n/locales/es.json +1 -0
  72. package/dist/commonjs/i18n/locales/fr.json +1 -0
  73. package/dist/commonjs/i18n/locales/hi.json +1 -0
  74. package/dist/commonjs/i18n/locales/ja.json +1 -0
  75. package/dist/commonjs/i18n/locales/ko.json +1 -0
  76. package/dist/commonjs/i18n/locales/pt.json +1 -0
  77. package/dist/commonjs/i18n/locales/ru.json +1 -0
  78. package/dist/commonjs/i18n/locales/zh.json +1 -0
  79. package/dist/commonjs/index.d.ts +6 -5
  80. package/dist/commonjs/index.js +4 -4
  81. package/dist/commonjs/push.d.ts +4 -0
  82. package/dist/commonjs/push.js +1 -0
  83. package/dist/commonjs/styles/AppColors.d.ts +40 -0
  84. package/dist/commonjs/styles/AppColors.js +1 -1
  85. package/dist/commonjs/styles/index.js +1 -1
  86. package/dist/commonjs/types/enums.d.ts +30 -20
  87. package/dist/commonjs/types/enums.js +1 -1
  88. package/dist/commonjs/types/index.d.ts +10 -0
  89. package/dist/commonjs/types/interfaces.d.ts +63 -7
  90. package/dist/esm/components/AnalyticsDetail.js +84 -81
  91. package/dist/esm/components/AnalyticsEventCard.js +20 -17
  92. package/dist/esm/components/AppHeaderLogo.js +5 -7
  93. package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
  94. package/dist/esm/components/ConsoleLogCard.js +98 -86
  95. package/dist/esm/components/EndOfListFooter.d.ts +5 -1
  96. package/dist/esm/components/EndOfListFooter.js +36 -14
  97. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +14 -14
  98. package/dist/esm/components/Inspector/AnalyticsTab.js +44 -316
  99. package/dist/esm/components/Inspector/ConsoleTab.js +55 -113
  100. package/dist/esm/components/Inspector/CrashDetail.js +53 -52
  101. package/dist/esm/components/Inspector/CrashTab.js +74 -64
  102. package/dist/esm/components/Inspector/DebuggingTab.js +33 -33
  103. package/dist/esm/components/Inspector/DeviceInfoTab.js +174 -138
  104. package/dist/esm/components/Inspector/FabLauncher.js +41 -42
  105. package/dist/esm/components/Inspector/InspectorHeader.js +138 -115
  106. package/dist/esm/components/Inspector/LogDetail.js +24 -21
  107. package/dist/esm/components/Inspector/MainScreen.js +98 -62
  108. package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
  109. package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
  110. package/dist/esm/components/Inspector/NetworkDetail.js +88 -87
  111. package/dist/esm/components/Inspector/NetworkFilterModal.js +8 -8
  112. package/dist/esm/components/Inspector/NetworkTab.js +132 -130
  113. package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
  114. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
  115. package/dist/esm/components/Inspector/PushCard.d.ts +4 -0
  116. package/dist/esm/components/Inspector/PushCard.js +89 -0
  117. package/dist/esm/components/Inspector/PushDetail.d.ts +4 -0
  118. package/dist/esm/components/Inspector/PushDetail.js +190 -0
  119. package/dist/esm/components/Inspector/PushTab.d.ts +3 -0
  120. package/dist/esm/components/Inspector/PushTab.js +45 -0
  121. package/dist/esm/components/Inspector/ReduxDetail.js +40 -37
  122. package/dist/esm/components/Inspector/ReduxTab.js +155 -152
  123. package/dist/esm/components/Inspector/SettingsPanel.js +380 -284
  124. package/dist/esm/components/Inspector/StorageTab.js +177 -173
  125. package/dist/esm/components/Inspector/TabBar.js +38 -34
  126. package/dist/esm/components/Inspector/UpdateAvailableModal.js +1 -1
  127. package/dist/esm/components/JsonViewer.js +161 -169
  128. package/dist/esm/components/LogCard.js +38 -42
  129. package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
  130. package/dist/esm/components/ModuleErrorBoundary.d.ts +24 -0
  131. package/dist/esm/components/ModuleErrorBoundary.js +33 -0
  132. package/dist/esm/components/NetworkIcons.d.ts +3 -3
  133. package/dist/esm/components/NetworkIcons.js +7 -3
  134. package/dist/esm/components/SegmentedTabs.d.ts +8 -2
  135. package/dist/esm/components/SegmentedTabs.js +12 -8
  136. package/dist/esm/components/ShareButton.d.ts +11 -0
  137. package/dist/esm/components/ShareButton.js +6 -0
  138. package/dist/esm/constants/index.js +1 -1
  139. package/dist/esm/constants/version.d.ts +1 -1
  140. package/dist/esm/constants/version.js +1 -1
  141. package/dist/esm/customHooks/crashHandler.js +6 -6
  142. package/dist/esm/customHooks/networkLogger.js +1 -2
  143. package/dist/esm/customHooks/pushNotificationLogger.d.ts +19 -0
  144. package/dist/esm/customHooks/pushNotificationLogger.js +1 -0
  145. package/dist/esm/helpers/index.d.ts +6 -0
  146. package/dist/esm/helpers/index.js +4 -4
  147. package/dist/esm/helpers/memoryManager.d.ts +2 -2
  148. package/dist/esm/helpers/memoryManager.js +1 -1
  149. package/dist/esm/helpers/remoteConfig.js +1 -1
  150. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  151. package/dist/esm/helpers/settingsStore.js +1 -1
  152. package/dist/esm/helpers/shareFormatter.d.ts +13 -0
  153. package/dist/esm/helpers/shareFormatter.js +7 -0
  154. package/dist/esm/i18n/index.d.ts +35 -0
  155. package/dist/esm/i18n/index.js +1 -1
  156. package/dist/esm/i18n/locales/ar.json +1 -0
  157. package/dist/esm/i18n/locales/de.json +1 -0
  158. package/dist/esm/i18n/locales/en.json +1 -1
  159. package/dist/esm/i18n/locales/es.json +1 -0
  160. package/dist/esm/i18n/locales/fr.json +1 -0
  161. package/dist/esm/i18n/locales/hi.json +1 -0
  162. package/dist/esm/i18n/locales/ja.json +1 -0
  163. package/dist/esm/i18n/locales/ko.json +1 -0
  164. package/dist/esm/i18n/locales/pt.json +1 -0
  165. package/dist/esm/i18n/locales/ru.json +1 -0
  166. package/dist/esm/i18n/locales/zh.json +1 -0
  167. package/dist/esm/index.d.ts +6 -5
  168. package/dist/esm/index.js +7 -7
  169. package/dist/esm/push.d.ts +4 -0
  170. package/dist/esm/push.js +1 -0
  171. package/dist/esm/styles/AppColors.d.ts +40 -0
  172. package/dist/esm/styles/AppColors.js +1 -1
  173. package/dist/esm/styles/index.js +1 -1
  174. package/dist/esm/types/enums.d.ts +30 -20
  175. package/dist/esm/types/enums.js +1 -1
  176. package/dist/esm/types/index.d.ts +10 -0
  177. package/dist/esm/types/interfaces.d.ts +63 -7
  178. package/package.json +53 -24
  179. package/src/native/NativeInspector.ts +0 -1
  180. package/dist/commonjs/bundle.d.ts +0 -2
  181. package/dist/commonjs/bundle.js +0 -1
  182. package/dist/commonjs/components/BrandSquareIcon.d.ts +0 -5
  183. package/dist/commonjs/components/BrandSquareIcon.js +0 -112
  184. package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
  185. package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
  186. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
  187. package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
  188. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
  189. package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
  190. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
  191. package/dist/commonjs/customHooks/performanceTracker.js +0 -63
  192. package/dist/commonjs/performance.d.ts +0 -2
  193. package/dist/commonjs/performance.js +0 -1
  194. package/dist/esm/bundle.d.ts +0 -2
  195. package/dist/esm/bundle.js +0 -1
  196. package/dist/esm/components/BrandSquareIcon.d.ts +0 -5
  197. package/dist/esm/components/BrandSquareIcon.js +0 -112
  198. package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
  199. package/dist/esm/components/Inspector/BundleTab.js +0 -1297
  200. package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
  201. package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
  202. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
  203. package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
  204. package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
  205. package/dist/esm/customHooks/performanceTracker.js +0 -63
  206. package/dist/esm/performance.d.ts +0 -2
  207. package/dist/esm/performance.js +0 -1
@@ -1,1297 +0,0 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,n,o){o===void 0&&(o=n);var c=Object.getOwnPropertyDescriptor(r,n);(!c||("get"in c?!r.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return r[n]}}),Object.defineProperty(t,o,c)}):(function(t,r,n,o){o===void 0&&(o=n),t[o]=r[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),__importStar=this&&this.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(n){var o=[];for(var c in n)Object.prototype.hasOwnProperty.call(n,c)&&(o[o.length]=c);return o},t(r)};return function(r){if(r&&r.__esModule)return r;var n={};if(r!=null)for(var o=t(r),c=0;c<o.length;c++)o[c]!=="default"&&__createBinding(n,r,o[c]);return __setModuleDefault(n,r),n}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.downloadBundleFile=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),i18n_1=require("../../i18n"),TouchableScale_1=__importDefault(require("../TouchableScale")),CopyButton_1=__importDefault(require("../CopyButton")),HighlightText_1=__importDefault(require("../HighlightText")),FeatureUnderDevNotice_1=__importDefault(require("./FeatureUnderDevNotice")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),helpers_1=require("../../helpers"),NetworkIcons_1=require("../NetworkIcons"),react_native_svg_1=__importStar(require("react-native-svg")),bundleAnalyzer_1=require("../../customHooks/bundleAnalyzer"),PackageLogoRenderer=({name:t,size:r=28})=>{const n=t.toLowerCase();return n==="react"||n.includes("react-native")&&!n.includes("svg")&&!n.includes("screens")&&!n.includes("gradient")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.npmDark}]}>
2
- <react_native_svg_1.default width={r-6}height={r-6}viewBox="0 0 100 100"fill="none">
3
- <react_native_svg_1.Circle cx="50"cy="50"r="9"fill={AppColors_1.AppColors.reactCyan}/>
4
- <react_native_svg_1.Ellipse cx="50"cy="50"rx="42"ry="16"stroke={AppColors_1.AppColors.reactCyan}strokeWidth="6"/>
5
- <react_native_svg_1.Ellipse cx="50"cy="50"rx="42"ry="16"stroke={AppColors_1.AppColors.reactCyan}strokeWidth="6"transform="rotate(60 50 50)"/>
6
- <react_native_svg_1.Ellipse cx="50"cy="50"rx="42"ry="16"stroke={AppColors_1.AppColors.reactCyan}strokeWidth="6"transform="rotate(120 50 50)"/>
7
- </react_native_svg_1.default>
8
- </react_native_1.View>:n.includes("navigation")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.hermesPurple}]}>
9
- <react_native_svg_1.default width={r-8}height={r-8}viewBox="0 0 100 100"fill="none">
10
- <react_native_svg_1.Circle cx="50"cy="50"r="38"stroke={AppColors_1.AppColors.white}strokeWidth="8"/>
11
- <react_native_svg_1.Path d="M50 20 L68 50 L50 80 L32 50 Z"fill={AppColors_1.AppColors.reactCyan}/>
12
- <react_native_svg_1.Circle cx="50"cy="50"r="6"fill={AppColors_1.AppColors.white}/>
13
- </react_native_svg_1.default>
14
- </react_native_1.View>:n.includes("svg")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.pink400}]}>
15
- <react_native_svg_1.default width={r-8}height={r-8}viewBox="0 0 100 100"fill="none">
16
- <react_native_svg_1.Path d="M20 75 C35 25, 65 25, 80 75"stroke={AppColors_1.AppColors.white}strokeWidth="10"strokeLinecap="round"/>
17
- <react_native_svg_1.Circle cx="20"cy="75"r="8"fill={AppColors_1.AppColors.white}/>
18
- <react_native_svg_1.Circle cx="80"cy="75"r="8"fill={AppColors_1.AppColors.white}/>
19
- <react_native_svg_1.Circle cx="50"cy="38"r="7"fill="#FCE7F3"stroke={AppColors_1.AppColors.white}strokeWidth="3"/>
20
- </react_native_svg_1.default>
21
- </react_native_1.View>:n.includes("axios")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.expoViolet}]}>
22
- <react_native_svg_1.default width={r-6}height={r-6}viewBox="0 0 100 100"fill="none">
23
- <react_native_svg_1.Path d="M22 75 L50 20 L78 75 M33 58 L67 58"stroke={AppColors_1.AppColors.white}strokeWidth="12"strokeLinecap="round"strokeLinejoin="round"/>
24
- <react_native_svg_1.Circle cx="50"cy="20"r="7"fill={AppColors_1.AppColors.reactCyan}/>
25
- </react_native_svg_1.default>
26
- </react_native_1.View>:n.includes("screens")||n.includes("software-mansion")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.reanimatedNavy}]}>
27
- <react_native_svg_1.default width={r-8}height={r-8}viewBox="0 0 100 100"fill="none">
28
- <react_native_svg_1.Path d="M50 15 L88 35 L50 55 L12 35 Z"fill={AppColors_1.AppColors.sky400}/>
29
- <react_native_svg_1.Path d="M12 50 L50 70 L88 50"stroke={AppColors_1.AppColors.white}strokeWidth="8"strokeLinecap="round"/>
30
- <react_native_svg_1.Path d="M12 65 L50 85 L88 65"stroke="#93C5FD"strokeWidth="8"strokeLinecap="round"/>
31
- </react_native_svg_1.default>
32
- </react_native_1.View>:n.includes("gradient")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.rose600}]}>
33
- <react_native_svg_1.default width={r-4}height={r-4}viewBox="0 0 100 100"fill="none">
34
- <react_native_svg_1.Defs>
35
- <react_native_svg_1.LinearGradient id="pkgGrad"x1="0"y1="0"x2="100"y2="100"gradientUnits="userSpaceOnUse">
36
- <react_native_svg_1.Stop offset="0"stopColor="#FF0080"/>
37
- <react_native_svg_1.Stop offset="0.5"stopColor="#7928CA"/>
38
- <react_native_svg_1.Stop offset="1"stopColor="#0070F3"/>
39
- </react_native_svg_1.LinearGradient>
40
- </react_native_svg_1.Defs>
41
- <react_native_svg_1.Rect width="100"height="100"rx="18"fill="url(#pkgGrad)"/>
42
- </react_native_svg_1.default>
43
- </react_native_1.View>:n.includes("i18n")?<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.emerald600}]}>
44
- <react_native_svg_1.default width={r-8}height={r-8}viewBox="0 0 100 100"fill="none">
45
- <react_native_svg_1.Circle cx="50"cy="50"r="38"stroke={AppColors_1.AppColors.white}strokeWidth="8"/>
46
- <react_native_svg_1.Ellipse cx="50"cy="50"rx="18"ry="38"stroke={AppColors_1.AppColors.white}strokeWidth="6"/>
47
- <react_native_svg_1.Path d="M14 50 L86 50"stroke={AppColors_1.AppColors.white}strokeWidth="7"/>
48
- </react_native_svg_1.default>
49
- </react_native_1.View>:<react_native_1.View style={[bundleStyles.pkgLogoWrap,{width:r,height:r,backgroundColor:AppColors_1.AppColors.npmRed}]}>
50
- <react_native_svg_1.default width={r-4}height={r-4}viewBox="0 0 100 100"fill="none">
51
- <react_native_svg_1.Rect width="100"height="100"rx="14"fill={AppColors_1.AppColors.npmRed}/>
52
- <react_native_svg_1.Path d="M18 24 H82 V76 H50 V40 H38 V76 H18 Z"fill={AppColors_1.AppColors.white}/>
53
- </react_native_svg_1.default>
54
- </react_native_1.View>},BundleCategoryIcon=({type:t,size:r=16,color:n=AppColors_1.AppColors.purple})=>{const o={stroke:n,strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round"},c=()=>{switch(t){case"folder":return<react_native_svg_1.G>
55
- <react_native_svg_1.Path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"{...o}/>
56
- </react_native_svg_1.G>;case"ban":return<react_native_svg_1.G>
57
- <react_native_svg_1.Circle cx="12"cy="12"r="8.5"{...o}/>
58
- <react_native_svg_1.Path d="M5.5 5.5 18.5 18.5"{...o}/>
59
- </react_native_svg_1.G>;case"bolt":return<react_native_svg_1.G>
60
- <react_native_svg_1.Path d="M13 2 4.5 13.5 H10.5 L9 22 19.5 9.5 H13.5 Z"{...o}/>
61
- </react_native_svg_1.G>;case"source":return<react_native_svg_1.G>
62
- <react_native_svg_1.Path d="M8.5 7 L4 12 L8.5 17"{...o}/>
63
- <react_native_svg_1.Path d="M15.5 7 L20 12 L15.5 17"{...o}/>
64
- <react_native_svg_1.Path d="M13.5 4.5 L10.5 19.5"{...o}/>
65
- </react_native_svg_1.G>;case"deps":return<react_native_svg_1.G>
66
- <react_native_svg_1.Rect x="4"y="4"width="16"height="16"rx="2.5"{...o}/>
67
- <react_native_svg_1.Path d="M4 9.5 H20"{...o}/>
68
- <react_native_svg_1.Path d="M9.5 9.5 V20"{...o}/>
69
- </react_native_svg_1.G>;case"media":case"image":return<react_native_svg_1.G>
70
- <react_native_svg_1.Rect x="3.5"y="4.5"width="17"height="15"rx="2"{...o}/>
71
- <react_native_svg_1.Circle cx="9"cy="10"r="1.5"{...o}/>
72
- <react_native_svg_1.Path d="M3.5 17.5 L9.5 12.5 L14 16.5 L17 13.5 L20.5 17.5"{...o}/>
73
- </react_native_svg_1.G>;case"overhead":return<react_native_svg_1.G>
74
- <react_native_svg_1.Circle cx="12"cy="12"r="3.2"{...o}/>
75
- <react_native_svg_1.Path d="M12 2.5 V5.5 M12 18.5 V21.5 M2.5 12 H5.5 M18.5 12 H21.5 M5.3 5.3 L7.4 7.4 M16.6 16.6 L18.7 18.7 M18.7 5.3 L16.6 7.4 M7.4 16.6 L5.3 18.7"{...o}/>
76
- </react_native_svg_1.G>;case"typescript":return<react_native_svg_1.G>
77
- <react_native_svg_1.Path d="M6.5 3.5 H14 L18.5 8 V20.5 H6.5 Z"{...o}/>
78
- <react_native_svg_1.Path d="M14 3.5 V8 H18.5"{...o}/>
79
- <react_native_svg_1.Path d="M9.5 13.5 H15 M12 13.5 V16.5 M9.5 16.5 H13"{...o}/>
80
- </react_native_svg_1.G>;case"javascript":return<react_native_svg_1.G>
81
- <react_native_svg_1.Path d="M9.5 3.5 C7.5 3.5 7.5 6.5 7.5 9 C7.5 11 6.5 12 5 12 C6.5 12 7.5 13 7.5 15 C7.5 17.5 7.5 20.5 9.5 20.5"{...o}/>
82
- <react_native_svg_1.Path d="M14.5 3.5 C16.5 3.5 16.5 6.5 16.5 9 C16.5 11 17.5 12 19 12 C17.5 12 16.5 13 16.5 15 C16.5 17.5 16.5 20.5 14.5 20.5"{...o}/>
83
- </react_native_svg_1.G>;case"font":return<react_native_svg_1.G>
84
- <react_native_svg_1.Path d="M8 19 L12 5.5 L16 19"{...o}/>
85
- <react_native_svg_1.Path d="M9.4 14.5 H14.6"{...o}/>
86
- </react_native_svg_1.G>;case"json":return<react_native_svg_1.G>
87
- <react_native_svg_1.Path d="M9 3.5 C7 3.5 7 6 7 8.5 C7 10.5 6 11.5 5 12 C6 12.5 7 13.5 7 15.5 C7 18 7 20.5 9 20.5"{...o}/>
88
- <react_native_svg_1.Circle cx="12"cy="12"r="1.1"fill={n}/>
89
- <react_native_svg_1.Path d="M15 3.5 C17 3.5 17 6 17 8.5 C17 10.5 18 11.5 19 12 C18 12.5 17 13.5 17 15.5 C17 18 17 20.5 15 20.5"{...o}/>
90
- </react_native_svg_1.G>;default:return null}};return<react_native_svg_1.default width={r}height={r}viewBox="0 0 24 24"fill="none">
91
- {c()}
92
- </react_native_svg_1.default>},MediaPreviewThumbnail=({file:t})=>{const[r,n]=(0,react_1.useState)(!1);if(t.ext==="SVG"||t.name.toLowerCase().endsWith(".svg"))return<react_native_1.View style={[bundleStyles.mediaThumbWrap,{backgroundColor:AppColors_1.AppColors.errorCardBg,alignItems:"center",justifyContent:"center",borderColor:AppColors_1.AppColors.errorBorder}]}>
93
- <react_native_svg_1.default width={22}height={22}viewBox="0 0 100 100"fill="none">
94
- <react_native_svg_1.Defs>
95
- <react_native_svg_1.LinearGradient id="svgGradThumb"x1="0"y1="0"x2="100"y2="100"gradientUnits="userSpaceOnUse">
96
- <react_native_svg_1.Stop offset="0"stopColor={AppColors_1.AppColors.rose500}/>
97
- <react_native_svg_1.Stop offset="1"stopColor={AppColors_1.AppColors.rose600}/>
98
- </react_native_svg_1.LinearGradient>
99
- </react_native_svg_1.Defs>
100
- <react_native_svg_1.Circle cx="50"cy="50"r="44"fill="url(#svgGradThumb)"/>
101
-
102
- <react_native_svg_1.Path d="M25 70 C35 30, 65 30, 75 70"stroke={AppColors_1.AppColors.white}strokeWidth="8"strokeLinecap="round"/>
103
- <react_native_svg_1.Circle cx="25"cy="70"r="7"fill={AppColors_1.AppColors.white}/>
104
- <react_native_svg_1.Circle cx="75"cy="70"r="7"fill={AppColors_1.AppColors.white}/>
105
- <react_native_svg_1.Circle cx="50"cy="40"r="6"fill="#FFE4E6"stroke={AppColors_1.AppColors.white}strokeWidth="2"/>
106
- </react_native_svg_1.default>
107
- </react_native_1.View>;if(t.category==="image"&&t.previewUri&&!r)return<react_native_1.View style={bundleStyles.mediaThumbWrap}>
108
- <react_native_1.Image source={{uri:t.previewUri}}style={bundleStyles.mediaThumbImg}resizeMode="cover"onError={()=>n(!0)}/>
109
- </react_native_1.View>;const o=CATEGORY_COLORS[t.category]||CATEGORY_COLORS.typescript;return<react_native_1.View style={[bundleStyles.extChip,{backgroundColor:o.bg,borderColor:`${o.color}40`}]}>
110
- <react_native_1.Text style={[bundleStyles.extChipText,{color:o.color}]}>
111
- {t.ext}
112
- </react_native_1.Text>
113
- </react_native_1.View>};function buildBundleFileTree(t){const r=new Map;for(const o of t){const s=o.path.replace(/^\/+/,"").split("/").filter(Boolean);if(s.length===0)continue;let y=r;for(let u=0;u<s.length;u++){const _=s[u],a=u===s.length-1;y.has(_)||y.set(_,{name:_,fullPath:s.slice(0,u+1).join("/"),isFile:a,fileItem:a?o:void 0,children:new Map}),a||(y=y.get(_).children)}}function n(o){const c=[];for(const[,s]of o.entries()){const y=n(s.children),u=!s.isFile,_=u?y.reduce((v,b)=>v+(b.isFolder?b.fileCount:1),0):1,a=u?y.reduce((v,b)=>v+b.sizeKb,0):s.fileItem?s.fileItem.sizeKb:0;c.push({id:s.fullPath,name:s.name,fullPath:s.fullPath,isFolder:u,fileItem:s.fileItem,sizeKb:a,fileCount:_,children:y})}return c.sort((s,y)=>s.isFolder&&!y.isFolder?-1:!s.isFolder&&y.isFolder?1:s.name.localeCompare(y.name))}return n(r)}const downloadBundleFile=async(t,r)=>{let n="";try{let o="";const c=r||(0,bundleAnalyzer_1.getHostScriptURL)();if(c&&c.startsWith("http")){const s=c.match(/^(https?:\/\/[^/]+)/);s&&(o=s[1])}if(o){const s=t.path.replace(/^\/+/,""),y=`${o}/${s}`,u=await fetch(y);if(u.ok){const _=await u.text();_&&_.length>0&&(n=_)}}}catch{}n||(n=`// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
114
- // File: ${t.name}
115
- // Path: ${t.path}
116
- // Category: ${t.category.toUpperCase()}
117
- // Size: ${t.sizeKb} KB
118
- // Status: ${t.status==="optimal"?"Active in Dependency Graph":"Not consumed / Static"}
119
- // Meta: ${t.meta}
120
- // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
121
-
122
- export default {
123
- id: ${JSON.stringify(t.id)},
124
- name: ${JSON.stringify(t.name)},
125
- path: ${JSON.stringify(t.path)},
126
- category: ${JSON.stringify(t.category)},
127
- sizeKb: ${t.sizeKb},
128
- meta: ${JSON.stringify(t.meta)},
129
- status: ${JSON.stringify(t.status||"optimal")},
130
- };
131
- `);try{await react_native_1.Share.share(react_native_1.Platform.OS==="ios"?{title:t.name,message:n}:{title:`Download ${t.name}`,message:n},{dialogTitle:`Download / Save ${t.name}`})}catch{}try{(0,helpers_1.copyToClipboard)(n,t.name)}catch{}};exports.downloadBundleFile=downloadBundleFile;const BundleTreeNodeView=({node:t,level:r,search:n,totalBundleKb:o,expandedFolders:c,toggleFolder:s,isLastChild:y,onDownload:u})=>{const _=n?!0:!!c[t.fullPath],a=!_,v=r*16+10;if(t.isFolder)return<react_native_1.View style={bundleStyles.treeFolderBlock}>
132
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel={`Folder ${t.name}, ${t.fileCount} ${t.fileCount===1?"file":"files"}, ${t.sizeKb>=1024?`${(t.sizeKb/1024).toFixed(2)} MB`:`${t.sizeKb} KB`}`}accessibilityState={{expanded:_}}accessibilityHint="Double tap to expand or collapse folder"onPress={()=>s(t.fullPath)}style={[bundleStyles.treeFolderRow,{paddingLeft:v}]}>
133
- <react_native_1.View style={bundleStyles.treeRowLeft}>
134
- <react_native_1.View style={{marginRight:4}}>
135
- <NetworkIcons_1.ChevronIcon direction={a?"right":"down"}size={12}color={AppColors_1.AppColors.grayTextWeak}/>
136
- </react_native_1.View>
137
- {a?<NetworkIcons_1.FolderIcon color={AppColors_1.AppColors.amber500}size={15}/>:<NetworkIcons_1.FolderOpenIcon color={AppColors_1.AppColors.amber500}size={15}/>}
138
- <HighlightText_1.default text={t.name+"/"}search={n}style={bundleStyles.treeFolderName}highlightStyle={bundleStyles.searchHighlight}/>
139
- <react_native_1.View style={bundleStyles.treeCountBadge}>
140
- <react_native_1.Text style={bundleStyles.treeCountBadgeText}>
141
- {t.fileCount}{" "}
142
- {t.fileCount===1?(0,i18n_1.t)("bundle.file"):(0,i18n_1.t)("bundle.files")}
143
- </react_native_1.Text>
144
- </react_native_1.View>
145
- </react_native_1.View>
146
-
147
- <react_native_1.View style={bundleStyles.treeRowRight}>
148
- <react_native_1.Text style={bundleStyles.treeFolderSize}>
149
- {t.sizeKb>=1024?(0,i18n_1.t)("bundle.fileSizeMb",{size:(t.sizeKb/1024).toFixed(2)}):(0,i18n_1.t)("bundle.fileSizeKb",{size:t.sizeKb})}
150
- </react_native_1.Text>
151
- <CopyButton_1.default value={()=>({folder:t.fullPath,sizeKb:t.sizeKb,fileCount:t.fileCount})}label={(0,i18n_1.t)("bundle.copyFileInfo",{name:t.name})}/>
152
- </react_native_1.View>
153
- </TouchableScale_1.default>
154
-
155
- {!a&&<react_native_1.View style={bundleStyles.treeChildrenContainer}>
156
- {t.children.map((w,d)=><BundleTreeNodeView key={w.id}node={w}level={r+1}search={n}totalBundleKb={o}expandedFolders={c}toggleFolder={s}isLastChild={d===t.children.length-1}onDownload={u}/>)}
157
- </react_native_1.View>}
158
- </react_native_1.View>;const b=t.fileItem;if(!b)return null;const h=o>0?(b.sizeKb/o*100).toFixed(1):"0",k=b.isConsumed===!1;return<react_native_1.View style={[bundleStyles.treeFileRow,{paddingLeft:v},k&&bundleStyles.treeFileRowUnused]}>
159
- <react_native_1.View style={bundleStyles.treeRowLeft}>
160
- <react_native_1.View style={bundleStyles.treeBranchGuide}>
161
- <react_native_1.Text style={bundleStyles.treeBranchGuideText}>
162
- {y?"\u2514":"\u251C"}
163
- </react_native_1.Text>
164
- </react_native_1.View>
165
-
166
- <MediaPreviewThumbnail file={b}/>
167
-
168
- <HighlightText_1.default text={b.name}search={n}style={bundleStyles.treeFileName}highlightStyle={bundleStyles.searchHighlight}/>
169
-
170
- {k&&<react_native_1.View style={bundleStyles.treeUnusedPill}>
171
- <react_native_1.Text style={bundleStyles.treeUnusedPillText}>
172
- {(0,i18n_1.t)("bundle.notConsumed")}
173
- </react_native_1.Text>
174
- </react_native_1.View>}
175
- </react_native_1.View>
176
-
177
- <react_native_1.View style={bundleStyles.treeRowRight}>
178
- <react_native_1.View style={bundleStyles.treeFileSizeGroup}>
179
- <react_native_1.Text style={[bundleStyles.treeFileSizeText,k&&{color:AppColors_1.AppColors.red600}]}>
180
- {b.sizeKb>=1024?(0,i18n_1.t)("bundle.fileSizeMb",{size:(b.sizeKb/1024).toFixed(2)}):(0,i18n_1.t)("bundle.fileSizeKb",{size:b.sizeKb})}
181
- </react_native_1.Text>
182
- <react_native_1.Text style={bundleStyles.treeFilePctText}>{h}%</react_native_1.Text>
183
- </react_native_1.View>
184
-
185
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5}}>
186
- {u&&<TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel={`Download source code for ${b.name}`}accessibilityHint="Fetches module source code from Metro dev server"onPress={()=>u(b)}style={bundleStyles.treeActionBtn}hitSlop={8}>
187
- <NetworkIcons_1.DownloadIcon size={13}color={AppColors_1.AppColors.sky500}/>
188
- </TouchableScale_1.default>}
189
-
190
- <CopyButton_1.default value={()=>b}label={(0,i18n_1.t)("bundle.fileDetailsJson")}/>
191
- </react_native_1.View>
192
- </react_native_1.View>
193
- </react_native_1.View>},CATEGORY_TABS=[{key:"ALL",labelKey:"bundle.catAll",iconType:"folder"},{key:"UNUSED",labelKey:"bundle.catUnused",iconType:"ban"},{key:"CONSUMED",labelKey:"bundle.catConsumed",iconType:"bolt"},{key:"image",labelKey:"bundle.catImages",iconType:"image"},{key:"typescript",labelKey:"bundle.catTypescript",iconType:"typescript"},{key:"javascript",labelKey:"bundle.catJavascript",iconType:"javascript"},{key:"font",labelKey:"bundle.catFonts",iconType:"font"},{key:"json",labelKey:"bundle.catJson",iconType:"json"}],CATEGORY_COLORS={image:{label:"Images & Media",color:AppColors_1.AppColors.pink500,bg:AppColors_1.AppColors.pink100},typescript:{label:"TypeScript",color:AppColors_1.AppColors.sky500,bg:AppColors_1.AppColors.sky100},javascript:{label:"JavaScript",color:AppColors_1.AppColors.indigo500,bg:AppColors_1.AppColors.indigo50},font:{label:"Fonts",color:AppColors_1.AppColors.purple500,bg:AppColors_1.AppColors.purple100},json:{label:"JSON / Data",color:AppColors_1.AppColors.emerald500,bg:AppColors_1.AppColors.emerald100}},BundleTab=react_1.default.memo(()=>{const{t}=(0,i18n_1.useTranslation)(),[r,n]=(0,react_1.useState)("overview"),[o,c]=(0,react_1.useState)("ios"),[s,y]=(0,react_1.useState)(""),[u,_]=(0,react_1.useState)("ALL"),[a,v]=(0,react_1.useState)(()=>(0,bundleAnalyzer_1.getCachedBundleAnalysis)()||(0,bundleAnalyzer_1.getInitialBundleAnalysis)()),[b,h]=(0,react_1.useState)(!1),k=(0,react_1.useCallback)(()=>{h(!0),(0,bundleAnalyzer_1.analyzeHostAppBundle)(!0).then(e=>{v(e),h(!1)}).catch(()=>{h(!1)})},[]);(0,react_1.useEffect)(()=>{let e=!0;return(0,bundleAnalyzer_1.analyzeHostAppBundle)().then(l=>{e&&(v(l),h(!1))}).catch(()=>{e&&h(!1)}),()=>{e=!1}},[]);const w=!!global.HermesInternal,d=(0,react_1.useMemo)(()=>a?a.files:[],[a]),x=(0,react_1.useMemo)(()=>a?a.packages:[],[a]),i=(0,react_1.useMemo)(()=>{const e=a?.totalDevKb||(a?.totalDevBytes?Math.round(a.totalDevBytes/1024):6144),l=a?.totalDevMb?a.totalDevMb.toFixed(2):(e/1024).toFixed(2),p=a?.splitUp?.nodeModules?.kb||Math.round(e*.52),g=a?.splitUp?.nodeModules?.pct||52,C=a?.splitUp?.metroDevOverhead?.kb||Math.round(e*.21),M=a?.splitUp?.metroDevOverhead?.pct||21,P=a?.splitUp?.appSource?.kb||Math.round(e*.15),I=a?.splitUp?.appSource?.pct||15,B=a?.splitUp?.assetsMedia?.kb||Math.round(e*.12),z=a?.splitUp?.assetsMedia?.pct||12,U=[{key:"node_modules",iconType:"javascript",title:"NPM Dependencies",targetTab:"packages",count:a?.packageCount||x.length||53,sizeKb:p,sizeMb:(p/1024).toFixed(2),pct:g,color:AppColors_1.AppColors.indigo500,desc:`${a?.packageCount||x.length||53} node_modules packages (React Native, React, navigation, axios)`},{key:"metro_runtime",iconType:"bolt",title:"Metro Dev Runtime",targetTab:"optimizer",count:1,sizeKb:C,sizeMb:(C/1024).toFixed(2),pct:M,color:AppColors_1.AppColors.amber500,desc:"Module loader, polyfills, HMR client, and prelude runtime"},{key:"app_source",iconType:"typescript",title:"App Source Code (TSX/JS)",targetTab:"files",count:d.filter(m=>m.category==="typescript"||m.category==="javascript").length||7,sizeKb:P,sizeMb:(P/1024).toFixed(2),pct:I,color:AppColors_1.AppColors.sky500,desc:"Screens, components, navigation, Redux store, and hooks"},{key:"assets_media",iconType:"image",title:"Images & Static Media",targetTab:"media",count:d.filter(m=>m.category==="image"||m.category==="font"||m.category==="json").length||3,sizeKb:B,sizeMb:(B/1024).toFixed(2),pct:z,color:AppColors_1.AppColors.pink500,desc:"Bundled PNG/JPG/SVG drawables, custom fonts, and JSON assets"}];return{totalKb:e,totalMb:l,totalCount:(a?.packageCount||53)+d.length+1,categories:U,nodeModulesKb:p,nodeModulesPct:g,metroKb:C,metroPct:M,appSourceKb:P,appSourcePct:I,assetsMediaKb:B,assetsMediaPct:z,images:{count:d.filter(m=>m.category==="image").length,kb:B,pct:z},ts:{count:d.filter(m=>m.category==="typescript").length,kb:P,pct:I},js:{count:(a?.packageCount||53)+1,kb:p+C,pct:Number((g+M).toFixed(1))},fonts:{count:d.filter(m=>m.category==="font").length,kb:0,pct:0},json:{count:d.filter(m=>m.category==="json").length,kb:Math.round(B*.1),pct:Number((z*.1).toFixed(1))}}},[a,d,x]),T=(0,react_1.useMemo)(()=>d.filter(e=>{const l=!s||e.name.toLowerCase().includes(s.toLowerCase())||e.path.toLowerCase().includes(s.toLowerCase())||e.ext.toLowerCase().includes(s.toLowerCase())||e.meta.toLowerCase().includes(s.toLowerCase()),p=u==="ALL"?!0:u==="UNUSED"?e.isConsumed===!1:u==="CONSUMED"?e.isConsumed!==!1:e.category===u;return l&&p}),[s,u,d]),R=(0,react_1.useMemo)(()=>T.reduce((e,l)=>e+l.sizeKb,0),[T]),[f,L]=(0,react_1.useState)("tree"),[D,F]=(0,react_1.useState)({}),A=(0,react_1.useMemo)(()=>buildBundleFileTree(T),[T]);(0,react_1.useEffect)(()=>{if(A.length>0&&Object.keys(D).length===0){const e={};A.forEach(l=>{l.isFolder&&(e[l.fullPath]=!0,l.children.forEach(p=>{p.isFolder&&(e[p.fullPath]=!0)}))}),F(e)}},[A]);const K=(0,react_1.useCallback)(e=>{F(l=>({...l,[e]:!l[e]}))},[]),$=(0,react_1.useCallback)(()=>{const e={};function l(p){for(const g of p)g.isFolder&&(e[g.fullPath]=!0,l(g.children))}l(A),F(e)},[A]),O=(0,react_1.useCallback)(()=>{F({})},[]),S=(0,react_1.useMemo)(()=>{if(!s)return x;const e=s.toLowerCase();return x.filter(l=>l.name.toLowerCase().includes(e)||l.description.toLowerCase().includes(e)||l.category.toLowerCase().includes(e))},[s,x]),W=(0,react_1.useMemo)(()=>S.reduce((e,l)=>e+l.sizeKb,0),[S]),V=(0,react_1.useMemo)(()=>d.filter(e=>e.category==="image"||e.category==="font"),[d]),H=(0,react_1.useMemo)(()=>V.reduce((e,l)=>e+l.sizeKb,0),[V]),N=[{key:"overview",label:t("bundle.tabOverview"),icon:e=><NetworkIcons_1.LiveStateIcon color={e?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}size={12}/>},{key:"production",label:t("bundle.tabProduction",{count:3}),icon:e=><NetworkIcons_1.TimelineIcon color={e?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}size={12}/>},{key:"files",label:t("bundle.tabFiles",{count:d.length}),icon:e=><NetworkIcons_1.LayersIcon color={e?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}size={12}/>},{key:"packages",label:t("bundle.tabPackages",{count:x.length}),icon:e=><NetworkIcons_1.PackageIcon color={e?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}size={12}/>},{key:"media",label:t("bundle.tabMedia",{count:V.length}),icon:e=><NetworkIcons_1.StorageIcon color={e?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}size={12}/>},{key:"optimizer",label:t("bundle.tabOptimizer"),icon:e=><NetworkIcons_1.MetadataIcon color={e?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}size={12}/>}];return<react_native_1.View style={{flex:1,backgroundColor:AppColors_1.AppColors.grayBackground}}>
194
-
195
- <react_native_1.View style={bundleStyles.topTabWrap}>
196
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={bundleStyles.subTabsScroll}>
197
- {N.map(e=>{const l=r===e.key;return<TouchableScale_1.default key={e.key}accessible={!0}accessibilityRole="tab"accessibilityLabel={`${e.label} tab`}accessibilityState={{selected:l}}accessibilityHint={`Switches to ${e.label} tab`}onPress={()=>n(e.key)}style={[bundleStyles.subTabPill,l&&bundleStyles.subTabPillActive]}>
198
- {e.icon(l)}
199
- <react_native_1.Text style={[bundleStyles.subTabPillText,l&&bundleStyles.subTabPillTextActive]}>
200
- {e.label}
201
- </react_native_1.Text>
202
- </TouchableScale_1.default>})}
203
- </react_native_1.ScrollView>
204
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel={b?"Analyzing Metro bundle":"Reload bundle analysis"}accessibilityHint="Re-probes Metro dev server and refreshes bundle statistics"onPress={k}style={bundleStyles.reloadButton}hitSlop={{top:8,bottom:8,left:8,right:8}}>
205
- {b?<react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.brandPurple}/>:<NetworkIcons_1.RefreshCcwIcon color={AppColors_1.AppColors.brandPurple}size={14}/>}
206
- </TouchableScale_1.default>
207
- </react_native_1.View>
208
-
209
- <FeatureUnderDevNotice_1.default featureName="Metro Bundle Analyzer"/>
210
-
211
-
212
-
213
-
214
- {r==="overview"&&<react_native_1.ScrollView style={{flex:1}}contentContainerStyle={bundleStyles.contentContainer}keyboardShouldPersistTaps="handled">
215
-
216
- <react_native_1.View style={bundleStyles.heroCard}>
217
- <react_native_1.View style={bundleStyles.heroTopRow}>
218
- <react_native_1.View style={bundleStyles.heroIconWrap}>
219
- <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.brandPurple}size={24}/>
220
- </react_native_1.View>
221
- <react_native_1.View style={{flex:1}}>
222
- <react_native_1.Text style={bundleStyles.heroTitle}>
223
- {t("bundle.heroTitle")}
224
- </react_native_1.Text>
225
- {a?.isLive&&a.scriptURL?<react_native_1.View style={{marginTop:4,gap:4}}>
226
- <react_native_1.Text style={bundleStyles.heroSubtitle}>
227
- {t("bundle.heroSubtitle")}
228
- </react_native_1.Text>
229
- <react_native_1.Pressable accessible={!0}accessibilityRole="link"accessibilityLabel={`Live Metro bundle URL: ${a.scriptURL}`}accessibilityHint="Opens Metro bundle script in browser"style={{backgroundColor:`${AppColors_1.AppColors.skyBlue}10`,borderColor:`${AppColors_1.AppColors.skyBlue}30`,borderWidth:1,borderRadius:8,padding:8,marginTop:2}}onPress={()=>react_native_1.Linking.openURL(a.scriptURL)}>
230
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:3}}>
231
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4}}>
232
- <NetworkIcons_1.ExternalLinkIcon color={AppColors_1.AppColors.skyBlue}size={11}/>
233
- <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.skyBlue,letterSpacing:.3,textTransform:"uppercase"}}>
234
- Live Metro URL
235
- </react_native_1.Text>
236
- </react_native_1.View>
237
- <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:9.5,color:AppColors_1.AppColors.grayTextWeak}}>
238
- {a.scriptURL.length} chars
239
- </react_native_1.Text>
240
- </react_native_1.View>
241
- <react_native_1.Text selectable={!0}numberOfLines={1}ellipsizeMode="tail"style={{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.skyBlue,textDecorationLine:"underline",lineHeight:16}}>
242
- {a.scriptURL}
243
- </react_native_1.Text>
244
- </react_native_1.Pressable>
245
- </react_native_1.View>:<react_native_1.Text style={bundleStyles.heroSubtitle}>
246
- {t("bundle.heroSubtitle")}
247
- </react_native_1.Text>}
248
- </react_native_1.View>
249
- <CopyButton_1.default value={()=>({...i,bundle:a})}label={t("bundle.bundleOverviewJson")}/>
250
- </react_native_1.View>
251
-
252
-
253
- <react_native_1.View style={bundleStyles.metricsGrid}>
254
- <react_native_1.View style={bundleStyles.metricBox}>
255
- <react_native_1.Text style={bundleStyles.metricLabel}>
256
- {t("bundle.devBundleSize")}
257
- </react_native_1.Text>
258
- <react_native_1.Text style={bundleStyles.metricValue}>
259
- {t("bundle.mbValue",{size:a?a.totalDevMb:i.totalMb})}
260
- </react_native_1.Text>
261
- <react_native_1.Text style={bundleStyles.metricHint}>
262
- {a?t("bundle.devBundleHint",{kb:a.totalDevKb,modules:a.moduleCount}):t("bundle.trackedFilesHint",{count:d.length})}
263
- </react_native_1.Text>
264
- </react_native_1.View>
265
-
266
- <react_native_1.View style={bundleStyles.metricBox}>
267
- <react_native_1.Text style={bundleStyles.metricLabel}>
268
- {t("bundle.imagesMedia")}
269
- </react_native_1.Text>
270
- <react_native_1.Text style={[bundleStyles.metricValue,{color:AppColors_1.AppColors.pink500}]}>
271
- {t("bundle.fileSizeKb",{size:i.images.kb})}
272
- </react_native_1.Text>
273
- <react_native_1.Text style={bundleStyles.metricHint}>
274
- {t("bundle.pctOfTrackedAssets",{pct:i.images.pct})}
275
- </react_native_1.Text>
276
- </react_native_1.View>
277
-
278
- <react_native_1.View style={bundleStyles.metricBox}>
279
- <react_native_1.Text style={bundleStyles.metricLabel}>
280
- {t("bundle.tsJsSource")}
281
- </react_native_1.Text>
282
- <react_native_1.Text style={[bundleStyles.metricValue,{color:AppColors_1.AppColors.sky500}]}>
283
- {t("bundle.fileSizeKb",{size:i.ts.kb+i.js.kb})}
284
- </react_native_1.Text>
285
- <react_native_1.Text style={bundleStyles.metricHint}>
286
- {t("bundle.pctOfTrackedAssets",{pct:(i.ts.pct+i.js.pct).toFixed(1)})}
287
- </react_native_1.Text>
288
- </react_native_1.View>
289
-
290
- <react_native_1.View style={bundleStyles.metricBox}>
291
- <react_native_1.Text style={bundleStyles.metricLabel}>
292
- {t("bundle.jsEngine")}
293
- </react_native_1.Text>
294
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5,marginTop:2}}>
295
- <react_native_1.View style={[bundleStyles.statusIndicator,{backgroundColor:w?AppColors_1.AppColors.greenColor:AppColors_1.AppColors.darkOrange}]}/>
296
- <react_native_1.Text style={bundleStyles.metricValue}>
297
- {w?"Hermes":"JSC"}
298
- </react_native_1.Text>
299
- </react_native_1.View>
300
- <react_native_1.Text style={bundleStyles.metricHint}>
301
- {t(w?"bundle.bytecodeAot":"bundle.standard")}
302
- </react_native_1.Text>
303
- </react_native_1.View>
304
- </react_native_1.View>
305
- </react_native_1.View>
306
-
307
-
308
- {a&&!a.isLive&&<react_native_1.View style={bundleStyles.liveWarningCard}>
309
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6,flex:1}}>
310
- <NetworkIcons_1.CircleAlertIcon color={AppColors_1.AppColors.amber700}size={16}/>
311
- <react_native_1.View style={{flex:1}}>
312
- <react_native_1.Text style={bundleStyles.liveWarningTitle}>
313
- {t("bundle.liveAnalysisUnavailable")}
314
- </react_native_1.Text>
315
- <react_native_1.Text style={bundleStyles.liveWarningDesc}>
316
- {t("bundle.liveAnalysisUnavailableSub")}
317
- </react_native_1.Text>
318
- </react_native_1.View>
319
- <TouchableScale_1.default onPress={k}style={{backgroundColor:`${AppColors_1.AppColors.amber700}18`,paddingHorizontal:8,paddingVertical:5,borderRadius:6,borderWidth:1,borderColor:`${AppColors_1.AppColors.amber700}30`,flexDirection:"row",alignItems:"center",gap:4}}>
320
- {b?<react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.amber700}/>:<>
321
- <NetworkIcons_1.RefreshCcwIcon color={AppColors_1.AppColors.amber700}size={11}/>
322
- <react_native_1.Text style={{fontSize:10.5,fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.amber700}}>
323
- Retry
324
- </react_native_1.Text>
325
- </>}
326
- </TouchableScale_1.default>
327
- </react_native_1.View>
328
- </react_native_1.View>}
329
-
330
-
331
- <react_native_1.View style={bundleStyles.sectionCard}>
332
- <react_native_1.View style={bundleStyles.sectionHeaderRow}>
333
- <react_native_1.View style={{flex:1,paddingRight:4}}>
334
- <react_native_1.Text style={bundleStyles.sectionTitle}>
335
- {t("bundle.treemapTitle")}
336
- </react_native_1.Text>
337
- <react_native_1.Text style={bundleStyles.sectionSub}>
338
- {t("bundle.treemapSub",{mb:i.totalMb})}
339
- </react_native_1.Text>
340
- </react_native_1.View>
341
- <CopyButton_1.default value={()=>({totalMb:i.totalMb,totalKb:i.totalKb,nodeModules:{kb:i.nodeModulesKb,pct:i.nodeModulesPct},metroRuntime:{kb:i.metroKb,pct:i.metroPct},appSource:{kb:i.appSourceKb,pct:i.appSourcePct},assetsMedia:{kb:i.assetsMediaKb,pct:i.assetsMediaPct}})}label={t("bundle.treemapJson")}/>
342
- </react_native_1.View>
343
-
344
-
345
- <react_native_1.View style={bundleStyles.treemapBar}>
346
- <react_native_1.View style={{flex:i.nodeModulesPct,backgroundColor:AppColors_1.AppColors.indigo500,height:16}}/>
347
- <react_native_1.View style={{flex:i.metroPct,backgroundColor:AppColors_1.AppColors.amber500,height:16}}/>
348
- <react_native_1.View style={{flex:i.appSourcePct,backgroundColor:AppColors_1.AppColors.sky500,height:16}}/>
349
- <react_native_1.View style={{flex:i.assetsMediaPct,backgroundColor:AppColors_1.AppColors.pink500,height:16}}/>
350
- </react_native_1.View>
351
-
352
-
353
- <react_native_1.View style={bundleStyles.legendGrid}>
354
- <react_native_1.View style={bundleStyles.legendItem}>
355
- <BundleCategoryIcon type="javascript"size={13}color={AppColors_1.AppColors.indigo500}/>
356
- <react_native_1.Text style={bundleStyles.legendText}>
357
- Node Modules{" "}
358
- <react_native_1.Text style={bundleStyles.legendVal}>
359
- {i.nodeModulesKb>=1024?`${(i.nodeModulesKb/1024).toFixed(1)} MB`:`${i.nodeModulesKb} KB`}{" "}
360
- ({i.nodeModulesPct}%)
361
- </react_native_1.Text>
362
- </react_native_1.Text>
363
- </react_native_1.View>
364
- <react_native_1.View style={bundleStyles.legendItem}>
365
- <BundleCategoryIcon type="overhead"size={13}color={AppColors_1.AppColors.amber500}/>
366
- <react_native_1.Text style={bundleStyles.legendText}>
367
- Metro Runtime{" "}
368
- <react_native_1.Text style={bundleStyles.legendVal}>
369
- {i.metroKb>=1024?`${(i.metroKb/1024).toFixed(1)} MB`:`${i.metroKb} KB`}{" "}
370
- ({i.metroPct}%)
371
- </react_native_1.Text>
372
- </react_native_1.Text>
373
- </react_native_1.View>
374
- <react_native_1.View style={bundleStyles.legendItem}>
375
- <BundleCategoryIcon type="typescript"size={13}color={AppColors_1.AppColors.sky500}/>
376
- <react_native_1.Text style={bundleStyles.legendText}>
377
- App Source{" "}
378
- <react_native_1.Text style={bundleStyles.legendVal}>
379
- {i.appSourceKb>=1024?`${(i.appSourceKb/1024).toFixed(1)} MB`:`${i.appSourceKb} KB`}{" "}
380
- ({i.appSourcePct}%)
381
- </react_native_1.Text>
382
- </react_native_1.Text>
383
- </react_native_1.View>
384
- <react_native_1.View style={bundleStyles.legendItem}>
385
- <BundleCategoryIcon type="image"size={13}color={AppColors_1.AppColors.pink500}/>
386
- <react_native_1.Text style={bundleStyles.legendText}>
387
- Assets & Media{" "}
388
- <react_native_1.Text style={bundleStyles.legendVal}>
389
- {i.assetsMediaKb>=1024?`${(i.assetsMediaKb/1024).toFixed(1)} MB`:`${i.assetsMediaKb} KB`}{" "}
390
- ({i.assetsMediaPct}%)
391
- </react_native_1.Text>
392
- </react_native_1.Text>
393
- </react_native_1.View>
394
- </react_native_1.View>
395
- </react_native_1.View>
396
-
397
-
398
- <react_native_1.View style={bundleStyles.sectionCard}>
399
- <react_native_1.View style={bundleStyles.sectionHeaderRow}>
400
- <react_native_1.Text style={bundleStyles.sectionTitle}>
401
- {t("bundle.categoryBreakdown")}
402
- </react_native_1.Text>
403
- <CopyButton_1.default value={()=>i}label={t("bundle.categoriesJson")}/>
404
- </react_native_1.View>
405
-
406
- {i.categories.map((e,l)=><react_native_1.Pressable key={l}accessible={!0}accessibilityRole="button"accessibilityLabel={`${e.title}, ${e.sizeKb>=1024?`${e.sizeMb} MB`:`${e.sizeKb} KB`}, ${e.pct}% of bundle`}accessibilityHint={`Double tap to view ${e.title} details`}style={({pressed:p})=>[bundleStyles.catRowCard,p&&{opacity:.85,transform:[{scale:.99}]}]}onPress={()=>n(e.targetTab)}>
407
- <react_native_1.View style={bundleStyles.catRowTop}>
408
- <react_native_1.View style={[bundleStyles.catIconBox,{backgroundColor:`${e.color}15`,borderColor:`${e.color}30`}]}>
409
- <BundleCategoryIcon type={e.iconType}size={18}color={e.color}/>
410
- </react_native_1.View>
411
-
412
- <react_native_1.View style={bundleStyles.catRowTitleWrap}>
413
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6}}>
414
- <react_native_1.Text style={bundleStyles.catRowTitle}numberOfLines={1}>
415
- {e.title}
416
- </react_native_1.Text>
417
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
418
- <react_native_1.Text style={bundleStyles.catRowSize}>
419
- {e.sizeKb>=1024?`${e.sizeMb} MB`:`${e.sizeKb} KB`}
420
- </react_native_1.Text>
421
- <react_native_1.View style={[bundleStyles.catPctPill,{backgroundColor:`${e.color}18`}]}>
422
- <react_native_1.Text style={[bundleStyles.catPctText,{color:e.color}]}>
423
- {e.pct}%
424
- </react_native_1.Text>
425
- </react_native_1.View>
426
- </react_native_1.View>
427
- </react_native_1.View>
428
-
429
- <react_native_1.Text style={bundleStyles.catRowDesc}numberOfLines={2}>
430
- {e.count} items • {e.desc}
431
- </react_native_1.Text>
432
- </react_native_1.View>
433
- </react_native_1.View>
434
-
435
-
436
- <react_native_1.View style={bundleStyles.catProgressTrack}>
437
- <react_native_1.View style={[bundleStyles.catProgressBar,{width:`${e.pct}%`,backgroundColor:e.color}]}/>
438
- </react_native_1.View>
439
- </react_native_1.Pressable>)}
440
-
441
-
442
- <react_native_1.View style={bundleStyles.totalSummaryCard}>
443
- <react_native_1.View style={bundleStyles.totalSummaryRow}>
444
- <react_native_1.View style={bundleStyles.totalSummaryLabelWrap}>
445
- <react_native_1.View style={bundleStyles.totalIconBadge}>
446
- <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.brandPurple}size={16}/>
447
- </react_native_1.View>
448
- <react_native_1.View>
449
- <react_native_1.Text style={bundleStyles.totalSummaryLabel}>
450
- TOTAL BUNDLE ASSETS
451
- </react_native_1.Text>
452
- <react_native_1.Text style={bundleStyles.totalSummarySub}>
453
- {i.totalCount} Tracked Modules & Media Assets
454
- </react_native_1.Text>
455
- </react_native_1.View>
456
- </react_native_1.View>
457
- <react_native_1.View style={{alignItems:"flex-end"}}>
458
- <react_native_1.Text style={bundleStyles.totalSummaryValue}>
459
- {i.totalMb} MB
460
- </react_native_1.Text>
461
- <react_native_1.Text style={bundleStyles.totalSummaryKb}>
462
- {i.totalKb.toLocaleString()} KB
463
- </react_native_1.Text>
464
- </react_native_1.View>
465
- </react_native_1.View>
466
-
467
-
468
- <react_native_1.View style={bundleStyles.totalFormulaGrid}>
469
- <react_native_1.View style={bundleStyles.totalChip}>
470
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.indigo500}]}/>
471
- <react_native_1.Text style={bundleStyles.totalChipText}>
472
- NPM: {(i.nodeModulesKb/1024).toFixed(1)}M (
473
- {i.nodeModulesPct}%)
474
- </react_native_1.Text>
475
- </react_native_1.View>
476
- <react_native_1.View style={bundleStyles.totalChip}>
477
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.amber500}]}/>
478
- <react_native_1.Text style={bundleStyles.totalChipText}>
479
- Metro: {(i.metroKb/1024).toFixed(1)}M (
480
- {i.metroPct}%)
481
- </react_native_1.Text>
482
- </react_native_1.View>
483
- <react_native_1.View style={bundleStyles.totalChip}>
484
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.sky500}]}/>
485
- <react_native_1.Text style={bundleStyles.totalChipText}>
486
- Source: {(i.appSourceKb/1024).toFixed(1)}M (
487
- {i.appSourcePct}%)
488
- </react_native_1.Text>
489
- </react_native_1.View>
490
- <react_native_1.View style={bundleStyles.totalChip}>
491
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.pink500}]}/>
492
- <react_native_1.Text style={bundleStyles.totalChipText}>
493
- Media: {i.assetsMediaKb}K ({i.assetsMediaPct}%)
494
- </react_native_1.Text>
495
- </react_native_1.View>
496
- </react_native_1.View>
497
- </react_native_1.View>
498
- </react_native_1.View>
499
-
500
-
501
- <react_native_1.View style={bundleStyles.sectionCard}>
502
- <react_native_1.View style={bundleStyles.sectionHeaderRow}>
503
- <react_native_1.View style={{flex:1,paddingRight:4}}>
504
- <react_native_1.Text style={bundleStyles.sectionTitle}>
505
- Bundle Subsystem Breakdown
506
- </react_native_1.Text>
507
- <react_native_1.Text style={bundleStyles.sectionSub}>
508
- Granular analysis of packages, application source, engine
509
- runtime & assets
510
- </react_native_1.Text>
511
- </react_native_1.View>
512
- <CopyButton_1.default value={()=>({directPackages:x.filter(e=>e.type==="direct").length,transitivePackages:x.filter(e=>e.type!=="direct").length,hermesEngine:w?"Hermes (Bytecode)":"JSC (Source)",jsDevKb:i.totalKb,jsHermesReleaseKb:Math.round(i.totalKb*.38),appSourceFiles:d.filter(e=>e.category==="typescript"||e.category==="javascript").length,mediaAssets:d.filter(e=>e.category==="image"||e.category==="font"||e.category==="json").length})}label="Subsystem Split JSON"/>
513
- </react_native_1.View>
514
-
515
-
516
- <react_native_1.View style={bundleStyles.subsystemCard}>
517
- <react_native_1.View style={bundleStyles.subsystemHeader}>
518
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
519
- <BundleCategoryIcon type="deps"size={16}color={AppColors_1.AppColors.indigo500}/>
520
- <react_native_1.Text style={bundleStyles.subsystemTitle}>
521
- NPM & Third-Party Dependencies
522
- </react_native_1.Text>
523
- </react_native_1.View>
524
- <react_native_1.View style={[bundleStyles.subsystemBadge,{backgroundColor:`${AppColors_1.AppColors.indigo500}18`}]}>
525
- <react_native_1.Text style={[bundleStyles.subsystemBadgeText,{color:AppColors_1.AppColors.indigo500}]}>
526
- {(i.nodeModulesKb/1024).toFixed(1)} MB •{" "}
527
- {i.nodeModulesPct}%
528
- </react_native_1.Text>
529
- </react_native_1.View>
530
- </react_native_1.View>
531
- <react_native_1.View style={bundleStyles.subsystemGrid}>
532
- <react_native_1.View style={bundleStyles.subsystemItem}>
533
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
534
- Direct:{" "}
535
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
536
- {x.filter(e=>e.type==="direct").length||12}{" "}
537
- pkgs
538
- </react_native_1.Text>
539
- </react_native_1.Text>
540
- </react_native_1.View>
541
- <react_native_1.View style={bundleStyles.subsystemItem}>
542
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
543
- Transitive:{" "}
544
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
545
- {x.filter(e=>e.type!=="direct").length||41}{" "}
546
- pkgs
547
- </react_native_1.Text>
548
- </react_native_1.Text>
549
- </react_native_1.View>
550
- <react_native_1.View style={bundleStyles.subsystemItem}>
551
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
552
- Top Package:{" "}
553
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
554
- {x[0]?.name||"react-native"} (
555
- {x[0]?.sizeKb||1240} KB)
556
- </react_native_1.Text>
557
- </react_native_1.Text>
558
- </react_native_1.View>
559
- </react_native_1.View>
560
- </react_native_1.View>
561
-
562
-
563
- <react_native_1.View style={bundleStyles.subsystemCard}>
564
- <react_native_1.View style={bundleStyles.subsystemHeader}>
565
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
566
- <BundleCategoryIcon type="source"size={16}color={AppColors_1.AppColors.sky500}/>
567
- <react_native_1.Text style={bundleStyles.subsystemTitle}>
568
- Application Source Code
569
- </react_native_1.Text>
570
- </react_native_1.View>
571
- <react_native_1.View style={[bundleStyles.subsystemBadge,{backgroundColor:`${AppColors_1.AppColors.sky500}18`}]}>
572
- <react_native_1.Text style={[bundleStyles.subsystemBadgeText,{color:AppColors_1.AppColors.sky500}]}>
573
- {(i.appSourceKb/1024).toFixed(1)} MB •{" "}
574
- {i.appSourcePct}%
575
- </react_native_1.Text>
576
- </react_native_1.View>
577
- </react_native_1.View>
578
- <react_native_1.View style={bundleStyles.subsystemGrid}>
579
- <react_native_1.View style={bundleStyles.subsystemItem}>
580
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
581
- TypeScript/TSX:{" "}
582
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
583
- {d.filter(e=>e.category==="typescript").length||14}{" "}
584
- files
585
- </react_native_1.Text>
586
- </react_native_1.Text>
587
- </react_native_1.View>
588
- <react_native_1.View style={bundleStyles.subsystemItem}>
589
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
590
- JavaScript/JSX:{" "}
591
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
592
- {d.filter(e=>e.category==="javascript").length||3}{" "}
593
- files
594
- </react_native_1.Text>
595
- </react_native_1.Text>
596
- </react_native_1.View>
597
- <react_native_1.View style={bundleStyles.subsystemItem}>
598
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
599
- Tracked Modules:{" "}
600
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
601
- {d.length||18} files
602
- </react_native_1.Text>
603
- </react_native_1.Text>
604
- </react_native_1.View>
605
- </react_native_1.View>
606
- </react_native_1.View>
607
-
608
-
609
- <react_native_1.View style={bundleStyles.subsystemCard}>
610
- <react_native_1.View style={bundleStyles.subsystemHeader}>
611
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
612
- <BundleCategoryIcon type="bolt"size={16}color={AppColors_1.AppColors.emerald600}/>
613
- <react_native_1.Text style={bundleStyles.subsystemTitle}>
614
- Hermes Bytecode Engine
615
- </react_native_1.Text>
616
- </react_native_1.View>
617
- <react_native_1.View style={[bundleStyles.subsystemBadge,{backgroundColor:`${AppColors_1.AppColors.emerald500}18`}]}>
618
- <react_native_1.Text style={[bundleStyles.subsystemBadgeText,{color:AppColors_1.AppColors.emerald700}]}>
619
- ~62% AOT Compression
620
- </react_native_1.Text>
621
- </react_native_1.View>
622
- </react_native_1.View>
623
- <react_native_1.View style={bundleStyles.subsystemGrid}>
624
- <react_native_1.View style={bundleStyles.subsystemItem}>
625
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
626
- Dev JS Size:{" "}
627
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
628
- {i.totalMb} MB
629
- </react_native_1.Text>
630
- </react_native_1.Text>
631
- </react_native_1.View>
632
- <react_native_1.View style={bundleStyles.subsystemItem}>
633
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
634
- Hermes Bytecode:{" "}
635
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
636
- {(i.totalKb*.38/1024).toFixed(2)} MB
637
- </react_native_1.Text>
638
- </react_native_1.Text>
639
- </react_native_1.View>
640
- <react_native_1.View style={bundleStyles.subsystemItem}>
641
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
642
- Execution:{" "}
643
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
644
- {w?"Hermes JSI Direct":"JSC Standard"}
645
- </react_native_1.Text>
646
- </react_native_1.Text>
647
- </react_native_1.View>
648
- </react_native_1.View>
649
- </react_native_1.View>
650
-
651
-
652
- <react_native_1.View style={bundleStyles.subsystemCard}>
653
- <react_native_1.View style={bundleStyles.subsystemHeader}>
654
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
655
- <BundleCategoryIcon type="media"size={16}color={AppColors_1.AppColors.pink500}/>
656
- <react_native_1.Text style={bundleStyles.subsystemTitle}>
657
- Images, Fonts & Static Assets
658
- </react_native_1.Text>
659
- </react_native_1.View>
660
- <react_native_1.View style={[bundleStyles.subsystemBadge,{backgroundColor:`${AppColors_1.AppColors.pink500}18`}]}>
661
- <react_native_1.Text style={[bundleStyles.subsystemBadgeText,{color:AppColors_1.AppColors.pink500}]}>
662
- {i.assetsMediaKb} KB • {i.assetsMediaPct}%
663
- </react_native_1.Text>
664
- </react_native_1.View>
665
- </react_native_1.View>
666
- <react_native_1.View style={bundleStyles.subsystemGrid}>
667
- <react_native_1.View style={bundleStyles.subsystemItem}>
668
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
669
- Images & Icons:{" "}
670
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
671
- {d.filter(e=>e.category==="image").length||2}{" "}
672
- assets
673
- </react_native_1.Text>
674
- </react_native_1.Text>
675
- </react_native_1.View>
676
- <react_native_1.View style={bundleStyles.subsystemItem}>
677
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
678
- JSON Data:{" "}
679
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
680
- {d.filter(e=>e.category==="json").length||1}{" "}
681
- files
682
- </react_native_1.Text>
683
- </react_native_1.Text>
684
- </react_native_1.View>
685
- <react_native_1.View style={bundleStyles.subsystemItem}>
686
- <react_native_1.Text style={bundleStyles.subsystemItemText}>
687
- Custom Fonts:{" "}
688
- <react_native_1.Text style={bundleStyles.subsystemItemVal}>
689
- {d.filter(e=>e.category==="font").length||0}{" "}
690
- fonts
691
- </react_native_1.Text>
692
- </react_native_1.Text>
693
- </react_native_1.View>
694
- </react_native_1.View>
695
- </react_native_1.View>
696
- </react_native_1.View>
697
- </react_native_1.ScrollView>}
698
-
699
-
700
-
701
-
702
- {r==="production"&&<react_native_1.ScrollView style={{flex:1}}contentContainerStyle={bundleStyles.contentContainer}keyboardShouldPersistTaps="handled">
703
-
704
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={bundleStyles.prodPlatformScroll}>
705
- {[{key:"ios",label:"iOS App (.ipa)",badge:`${a?.production.ios.totalDownloadMb||111.9} MB`},{key:"androidAab",label:"Android AAB (.aab)",badge:`${a?.production.androidAab.totalDownloadMb||38.5} MB`},{key:"androidApk",label:"Universal APK (.apk)",badge:`${a?.production.androidApk.totalInstallMb||364} MB`}].map(e=>{const l=o===e.key;return<TouchableScale_1.default key={e.key}accessible={!0}accessibilityRole="tab"accessibilityLabel={`${e.label}, ${e.badge}`}accessibilityState={{selected:l}}accessibilityHint={`Switches production estimate to ${e.label}`}onPress={()=>c(e.key)}style={[bundleStyles.prodPlatformBtn,l&&bundleStyles.prodPlatformBtnActive]}>
706
- <react_native_1.Text style={[bundleStyles.prodPlatformBtnText,l&&bundleStyles.prodPlatformBtnTextActive]}>
707
- {e.label}
708
- </react_native_1.Text>
709
- <react_native_1.View style={[bundleStyles.prodPlatformBadge,l&&bundleStyles.prodPlatformBadgeActive]}>
710
- <react_native_1.Text style={[bundleStyles.prodPlatformBadgeText,l&&bundleStyles.prodPlatformBadgeTextActive]}>
711
- {e.badge}
712
- </react_native_1.Text>
713
- </react_native_1.View>
714
- </TouchableScale_1.default>})}
715
- </react_native_1.ScrollView>
716
-
717
-
718
- {a&&<react_native_1.View style={bundleStyles.heroCard}>
719
- <react_native_1.View style={bundleStyles.heroTopRow}>
720
- <react_native_1.View style={bundleStyles.heroIconWrap}>
721
- <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.brandPurple}size={24}/>
722
- </react_native_1.View>
723
- <react_native_1.View style={{flex:1}}>
724
- <react_native_1.Text style={bundleStyles.heroTitle}>
725
- {o==="ios"?"iOS Production Binary Footprint":o==="androidAab"?"Google Play App Bundle (.aab)":"Universal Standalone APK (.apk)"}
726
- </react_native_1.Text>
727
- <react_native_1.Text style={bundleStyles.heroSubtitle}>
728
- {o==="ios"?"App Store install & over-the-air cellular download estimates":o==="androidAab"?"Optimized per-device dynamic delivery split APK architecture":"Multi-ABI universal install archive for sideloading & direct distribution"}
729
- </react_native_1.Text>
730
- </react_native_1.View>
731
- <CopyButton_1.default value={()=>a.production[o]}label="Production Binary JSON"/>
732
- </react_native_1.View>
733
-
734
-
735
- <react_native_1.View style={bundleStyles.metricsGrid}>
736
- <react_native_1.View style={bundleStyles.metricBox}>
737
- <react_native_1.Text style={bundleStyles.metricLabel}>INSTALL SIZE</react_native_1.Text>
738
- <react_native_1.Text style={[bundleStyles.metricValue,{color:AppColors_1.AppColors.purple}]}>
739
- {a.production[o].totalInstallMb} MB
740
- </react_native_1.Text>
741
- <react_native_1.Text style={bundleStyles.metricHint}>
742
- On-device uncompressed footprint
743
- </react_native_1.Text>
744
- </react_native_1.View>
745
-
746
- <react_native_1.View style={bundleStyles.metricBox}>
747
- <react_native_1.Text style={bundleStyles.metricLabel}>DOWNLOAD SIZE</react_native_1.Text>
748
- <react_native_1.Text style={[bundleStyles.metricValue,{color:AppColors_1.AppColors.emerald600}]}>
749
- ~{a.production[o].totalDownloadMb} MB
750
- </react_native_1.Text>
751
- <react_native_1.Text style={bundleStyles.metricHint}>
752
- Store network transfer payload
753
- </react_native_1.Text>
754
- </react_native_1.View>
755
-
756
- <react_native_1.View style={bundleStyles.metricBox}>
757
- <react_native_1.Text style={bundleStyles.metricLabel}>COMPRESSION</react_native_1.Text>
758
- <react_native_1.Text style={[bundleStyles.metricValue,{color:AppColors_1.AppColors.sky500}]}>
759
- {a.production[o].compressionRatioPct}%
760
- </react_native_1.Text>
761
- <react_native_1.Text style={bundleStyles.metricHint}>
762
- Bytecode & asset ratio
763
- </react_native_1.Text>
764
- </react_native_1.View>
765
-
766
- <react_native_1.View style={bundleStyles.metricBox}>
767
- <react_native_1.Text style={bundleStyles.metricLabel}>
768
- FORMAT ARCHITECTURE
769
- </react_native_1.Text>
770
- <react_native_1.Text style={[bundleStyles.metricValue,{color:AppColors_1.AppColors.amber700}]}>
771
- {o==="ios"?"Mach-O 64-bit":o==="androidAab"?"Split APKs":"FAT Multi-ABI"}
772
- </react_native_1.Text>
773
- <react_native_1.Text style={bundleStyles.metricHint}>
774
- {o==="ios"?"Apple ARM64 runtime":o==="androidAab"?"Dynamic Google Play delivery":"Sideload universal package"}
775
- </react_native_1.Text>
776
- </react_native_1.View>
777
- </react_native_1.View>
778
- </react_native_1.View>}
779
-
780
-
781
- {a&&<react_native_1.View style={bundleStyles.sectionCard}>
782
- <react_native_1.View style={bundleStyles.sectionHeaderRow}>
783
- <react_native_1.View style={{flex:1,paddingRight:4}}>
784
- <react_native_1.Text style={bundleStyles.sectionTitle}>
785
- Binary Component Architecture
786
- </react_native_1.Text>
787
- <react_native_1.Text style={bundleStyles.sectionSub}>
788
- Compiled native libraries, runtime bytecodes, assets, and
789
- signature blocks
790
- </react_native_1.Text>
791
- </react_native_1.View>
792
- <CopyButton_1.default value={()=>a.production[o].components}label="Components JSON"/>
793
- </react_native_1.View>
794
-
795
-
796
- <react_native_1.View style={bundleStyles.prodTreemapBar}>
797
- {a.production[o].components.map((e,l)=><react_native_1.View key={l}style={{flex:Math.max(e.pct,2),backgroundColor:e.color,height:16}}/>)}
798
- </react_native_1.View>
799
-
800
-
801
- <react_native_1.View style={[bundleStyles.legendGrid,{marginBottom:12}]}>
802
- {a.production[o].components.map((e,l)=><react_native_1.View key={l}style={bundleStyles.legendItem}>
803
- <react_native_1.View style={{width:8,height:8,borderRadius:4,backgroundColor:e.color}}/>
804
- <react_native_1.Text style={bundleStyles.legendText}numberOfLines={1}>
805
- {e.name}{" "}
806
- <react_native_1.Text style={bundleStyles.legendVal}>
807
- {e.sizeMb} MB ({e.pct}%)
808
- </react_native_1.Text>
809
- </react_native_1.Text>
810
- </react_native_1.View>)}
811
- </react_native_1.View>
812
-
813
- {a.production[o].components.map((e,l)=><react_native_1.View key={l}style={bundleStyles.catRowCard}>
814
- <react_native_1.View style={bundleStyles.catRowTop}>
815
- <react_native_1.View style={[bundleStyles.catIconBox,{backgroundColor:`${e.color}15`,borderColor:`${e.color}30`}]}>
816
- <BundleCategoryIcon type={e.category==="native"?"source":e.category==="frameworks"?"deps":e.category==="assets"?"media":e.category==="js"?"javascript":"overhead"}size={18}color={e.color}/>
817
- </react_native_1.View>
818
-
819
- <react_native_1.View style={bundleStyles.catRowTitleWrap}>
820
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6}}>
821
- <react_native_1.Text style={bundleStyles.catRowTitle}numberOfLines={1}>
822
- {e.name}
823
- </react_native_1.Text>
824
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
825
- <react_native_1.Text style={bundleStyles.catRowSize}>
826
- {e.sizeMb} MB
827
- </react_native_1.Text>
828
- <react_native_1.View style={[bundleStyles.catPctPill,{backgroundColor:`${e.color}18`}]}>
829
- <react_native_1.Text style={[bundleStyles.catPctText,{color:e.color}]}>
830
- {e.pct}%
831
- </react_native_1.Text>
832
- </react_native_1.View>
833
- </react_native_1.View>
834
- </react_native_1.View>
835
-
836
- <react_native_1.Text style={bundleStyles.catRowDesc}numberOfLines={2}>
837
- {e.description}
838
- </react_native_1.Text>
839
- </react_native_1.View>
840
- </react_native_1.View>
841
-
842
- <react_native_1.View style={bundleStyles.catProgressTrack}>
843
- <react_native_1.View style={[bundleStyles.catProgressBar,{width:`${e.pct}%`,backgroundColor:e.color}]}/>
844
- </react_native_1.View>
845
-
846
- {e.advice?<react_native_1.View style={[bundleStyles.adviceBadge,bundleStyles.adviceOptimal,{marginTop:6}]}>
847
- <NetworkIcons_1.LightbulbIcon color={AppColors_1.AppColors.emerald700}size={13}/>
848
- <react_native_1.Text style={[bundleStyles.adviceText,{color:AppColors_1.AppColors.emerald700,flex:1,marginLeft:4}]}>
849
- {e.advice}
850
- </react_native_1.Text>
851
- </react_native_1.View>:null}
852
- </react_native_1.View>)}
853
-
854
-
855
- <react_native_1.View style={bundleStyles.totalSummaryCard}>
856
- <react_native_1.View style={bundleStyles.totalSummaryRow}>
857
- <react_native_1.View style={bundleStyles.totalSummaryLabelWrap}>
858
- <react_native_1.View style={bundleStyles.totalIconBadge}>
859
- <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.brandPurple}size={16}/>
860
- </react_native_1.View>
861
- <react_native_1.View>
862
- <react_native_1.Text style={bundleStyles.totalSummaryLabel}>
863
- {o==="ios"?"TOTAL IOS APP BINARY":o==="androidAab"?"TOTAL ANDROID AAB BUNDLE":"TOTAL UNIVERSAL APK"}
864
- </react_native_1.Text>
865
- <react_native_1.Text style={bundleStyles.totalSummarySub}>
866
- {o==="ios"?"App Store install & cellular download estimates":o==="androidAab"?"Google Play dynamic delivery split APK":"Universal standalone sideload package"}
867
- </react_native_1.Text>
868
- </react_native_1.View>
869
- </react_native_1.View>
870
- </react_native_1.View>
871
-
872
-
873
- <react_native_1.View style={bundleStyles.totalFormulaGrid}>
874
- <react_native_1.View style={bundleStyles.totalChip}>
875
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.purple}]}/>
876
- <react_native_1.Text style={bundleStyles.totalChipText}>
877
- Install:{" "}
878
- {a.production[o].totalInstallMb} MB
879
- </react_native_1.Text>
880
- </react_native_1.View>
881
- <react_native_1.View style={bundleStyles.totalChip}>
882
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.sky500}]}/>
883
- <react_native_1.Text style={bundleStyles.totalChipText}>
884
- Download: ~
885
- {a.production[o].totalDownloadMb} MB
886
- </react_native_1.Text>
887
- </react_native_1.View>
888
- <react_native_1.View style={bundleStyles.totalChip}>
889
- <react_native_1.View style={[bundleStyles.totalDot,{backgroundColor:AppColors_1.AppColors.emerald500}]}/>
890
- <react_native_1.Text style={bundleStyles.totalChipText}>
891
- Compression:{" "}
892
- {a.production[o].compressionRatioPct}%
893
- </react_native_1.Text>
894
- </react_native_1.View>
895
- </react_native_1.View>
896
- </react_native_1.View>
897
- </react_native_1.View>}
898
- </react_native_1.ScrollView>}
899
-
900
-
901
-
902
-
903
- {r==="files"&&<react_native_1.View style={{flex:1}}>
904
-
905
- <react_native_1.View style={bundleStyles.filterContainer}>
906
- <react_native_1.View style={bundleStyles.searchRow}>
907
- <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak}size={15}/>
908
- <react_native_1.TextInput accessible={!0}accessibilityRole="search"accessibilityLabel="Search files"accessibilityHint="Type a filename, path, or extension to filter"placeholder={t("bundle.searchFilesPlaceholder")}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}value={s}onChangeText={y}style={bundleStyles.searchInput}autoCorrect={!1}autoCapitalize="none"/>
909
- {s.length>0&&<react_native_1.Pressable accessible={!0}accessibilityRole="button"accessibilityLabel="Clear search input"onPress={()=>y("")}hitSlop={10}>
910
- <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak}size={14}/>
911
- </react_native_1.Pressable>}
912
- <CopyButton_1.default value={()=>T}label={t("bundle.filteredFilesJson")}/>
913
- </react_native_1.View>
914
-
915
-
916
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={bundleStyles.categoryPillsScroll}>
917
- {CATEGORY_TABS.map(e=>{const l=u===e.key,p=e.key==="ALL"?d.length:e.key==="UNUSED"?d.filter(g=>g.isConsumed===!1).length:e.key==="CONSUMED"?d.filter(g=>g.isConsumed!==!1).length:d.filter(g=>g.category===e.key).length;return<TouchableScale_1.default key={e.key}accessible={!0}accessibilityRole="button"accessibilityLabel={`Filter by ${t(e.labelKey)}, ${p} items`}accessibilityState={{selected:l}}accessibilityHint={`Filters files list to ${t(e.labelKey)}`}onPress={()=>_(e.key)}style={[bundleStyles.catPill,l&&bundleStyles.catPillActive,e.key==="UNUSED"&&l&&{backgroundColor:AppColors_1.AppColors.red500,borderColor:AppColors_1.AppColors.red600},e.key==="CONSUMED"&&l&&{backgroundColor:AppColors_1.AppColors.emerald600,borderColor:AppColors_1.AppColors.emerald700}]}>
918
- <BundleCategoryIcon type={e.iconType}size={12}color={l?AppColors_1.AppColors.white:AppColors_1.AppColors.grayTextStrong}/>
919
- <react_native_1.Text style={[bundleStyles.catPillText,l&&bundleStyles.catPillTextActive]}>
920
- {t(e.labelKey)} ({p})
921
- </react_native_1.Text>
922
- </TouchableScale_1.default>})}
923
- </react_native_1.ScrollView>
924
- </react_native_1.View>
925
-
926
-
927
- <react_native_1.ScrollView style={{flex:1}}contentContainerStyle={bundleStyles.contentContainer}keyboardShouldPersistTaps="handled">
928
-
929
- <react_native_1.View style={bundleStyles.treeHeaderRow}>
930
- <react_native_1.View style={bundleStyles.viewModeToggleGroup}>
931
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel="Tree folder view"accessibilityState={{selected:f==="tree"}}onPress={()=>L("tree")}style={[bundleStyles.viewModeBtn,f==="tree"&&bundleStyles.viewModeBtnActive]}>
932
- <react_native_1.Text style={[bundleStyles.viewModeBtnText,f==="tree"&&bundleStyles.viewModeBtnTextActive]}>
933
- {t("bundle.treeView")}
934
- </react_native_1.Text>
935
- </TouchableScale_1.default>
936
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel="Flat list view"accessibilityState={{selected:f==="list"}}onPress={()=>L("list")}style={[bundleStyles.viewModeBtn,f==="list"&&bundleStyles.viewModeBtnActive]}>
937
- <react_native_1.Text style={[bundleStyles.viewModeBtnText,f==="list"&&bundleStyles.viewModeBtnTextActive]}>
938
- {t("bundle.flatList")}
939
- </react_native_1.Text>
940
- </TouchableScale_1.default>
941
- </react_native_1.View>
942
-
943
- {f==="tree"?<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:8}}>
944
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel="Expand all folders"onPress={$}>
945
- <react_native_1.Text style={bundleStyles.treeActionLink}>
946
- {t("bundle.expand")}
947
- </react_native_1.Text>
948
- </TouchableScale_1.default>
949
- <react_native_1.Text style={{color:AppColors_1.AppColors.grayTextWeak,fontSize:11}}>
950
- •
951
- </react_native_1.Text>
952
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel="Collapse all folders"onPress={O}>
953
- <react_native_1.Text style={bundleStyles.treeActionLink}>
954
- {t("bundle.collapse")}
955
- </react_native_1.Text>
956
- </TouchableScale_1.default>
957
- </react_native_1.View>:<react_native_1.Text style={bundleStyles.listHeaderCount}>
958
- {t("bundle.showingFilesOf",{shown:T.length,total:d.length})}
959
- </react_native_1.Text>}
960
- </react_native_1.View>
961
-
962
-
963
- {f==="tree"?<react_native_1.View style={bundleStyles.treeRootCard}>
964
- {A.map((e,l)=><BundleTreeNodeView key={e.id}node={e}level={0}search={s}totalBundleKb={i.totalKb}expandedFolders={D}toggleFolder={K}isLastChild={l===A.length-1}onDownload={p=>(0,exports.downloadBundleFile)(p,a?.scriptURL)}/>)}
965
- </react_native_1.View>:T.map((e,l)=>{const p=CATEGORY_COLORS[e.category]||CATEGORY_COLORS.typescript,g=(e.sizeKb/i.totalKb*100).toFixed(1),C=e.isConsumed===!1;return<react_native_1.View key={e.id}style={[bundleStyles.fileCard,C&&bundleStyles.treeFileCardUnused]}>
966
- <react_native_1.View style={bundleStyles.fileCardTop}>
967
- <react_native_1.View style={bundleStyles.sNoBadge}>
968
- <react_native_1.Text style={bundleStyles.sNoText}>#{l+1}</react_native_1.Text>
969
- </react_native_1.View>
970
-
971
- <MediaPreviewThumbnail file={e}/>
972
-
973
- <react_native_1.View style={{flex:1,paddingHorizontal:4}}>
974
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"}}>
975
- <HighlightText_1.default text={e.name}search={s}style={bundleStyles.fileName}highlightStyle={bundleStyles.searchHighlight}/>
976
- {C?<react_native_1.View style={bundleStyles.unusedBadge}>
977
- <react_native_1.Text style={bundleStyles.unusedBadgeText}>
978
- {t("bundle.notConsumed")}
979
- </react_native_1.Text>
980
- </react_native_1.View>:<react_native_1.View style={bundleStyles.consumedBadge}>
981
- <react_native_1.Text style={bundleStyles.consumedBadgeText}>
982
- {t("bundle.consumed")}
983
- </react_native_1.Text>
984
- </react_native_1.View>}
985
- </react_native_1.View>
986
- <HighlightText_1.default text={e.path}search={s}style={bundleStyles.filePath}highlightStyle={bundleStyles.searchHighlight}numberOfLines={1}/>
987
- </react_native_1.View>
988
-
989
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
990
- <react_native_1.View style={bundleStyles.fileSizeBox}>
991
- <react_native_1.Text style={[bundleStyles.fileSizeKb,C&&{color:AppColors_1.AppColors.amber800Warm}]}>
992
- {e.sizeKb>=1024?t("bundle.fileSizeMb",{size:(e.sizeKb/1024).toFixed(2)}):t("bundle.fileSizeKb",{size:e.sizeKb})}
993
- </react_native_1.Text>
994
- <react_native_1.Text style={bundleStyles.filePercent}>
995
- {g}%
996
- </react_native_1.Text>
997
- </react_native_1.View>
998
- <TouchableScale_1.default onPress={()=>(0,exports.downloadBundleFile)(e,a?.scriptURL)}style={bundleStyles.downloadFileBtn}hitSlop={8}>
999
- <NetworkIcons_1.DownloadIcon size={14}color={AppColors_1.AppColors.sky500}/>
1000
- </TouchableScale_1.default>
1001
- <CopyButton_1.default value={()=>e}label={t("bundle.fileDetailsJson")}/>
1002
- </react_native_1.View>
1003
- </react_native_1.View>
1004
-
1005
- <react_native_1.View style={bundleStyles.fileProgressTrack}>
1006
- <react_native_1.View style={[bundleStyles.fileProgressBar,{width:`${Math.min(100,Math.max(4,Number(g)*4))}%`,backgroundColor:C?AppColors_1.AppColors.red500:p.color}]}/>
1007
- </react_native_1.View>
1008
-
1009
- <react_native_1.View style={bundleStyles.fileCardBottom}>
1010
- <react_native_1.Text style={bundleStyles.fileMetaText}>{e.meta}</react_native_1.Text>
1011
- {e.advice&&<react_native_1.View style={[bundleStyles.adviceBadge,e.status==="warning"&&bundleStyles.adviceWarning,e.status==="optimal"&&bundleStyles.adviceOptimal,C&&bundleStyles.adviceUnused]}>
1012
- {C?<NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.red600}size={12}/>:e.status==="warning"?<NetworkIcons_1.LightbulbIcon color={AppColors_1.AppColors.amber800Warm}size={12}/>:<NetworkIcons_1.SparkleIcon color={AppColors_1.AppColors.emerald700}size={12}/>}
1013
- <react_native_1.Text style={[bundleStyles.adviceText,e.status==="warning"&&{color:AppColors_1.AppColors.amber800Warm},e.status==="optimal"&&{color:AppColors_1.AppColors.emerald700},C&&{color:AppColors_1.AppColors.red600}]}>
1014
- {e.advice}
1015
- </react_native_1.Text>
1016
- </react_native_1.View>}
1017
- </react_native_1.View>
1018
- </react_native_1.View>})}
1019
- </react_native_1.ScrollView>
1020
-
1021
-
1022
- <react_native_1.View style={bundleStyles.stickyFooterBar}>
1023
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1024
- <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple}size={14}/>
1025
- <react_native_1.Text style={bundleStyles.footerTitle}>
1026
- {t("bundle.filesOf",{count:T.length,total:i.totalCount})}
1027
- </react_native_1.Text>
1028
- </react_native_1.View>
1029
- <react_native_1.Text style={bundleStyles.footerSizeVal}>
1030
- {t("bundle.kbMbValue",{kb:R,mb:(R/1024).toFixed(2)})}
1031
- </react_native_1.Text>
1032
- </react_native_1.View>
1033
- </react_native_1.View>}
1034
-
1035
-
1036
-
1037
-
1038
- {r==="packages"&&<react_native_1.View style={{flex:1}}>
1039
- <react_native_1.ScrollView style={{flex:1}}contentContainerStyle={bundleStyles.contentContainer}keyboardShouldPersistTaps="handled">
1040
- <react_native_1.View style={bundleStyles.filterContainer}>
1041
- <react_native_1.View style={bundleStyles.searchRow}>
1042
- <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak}size={15}/>
1043
- <react_native_1.TextInput accessible={!0}accessibilityRole="search"accessibilityLabel="Search packages"accessibilityHint="Type a package name or description to filter"placeholder={t("bundle.searchPackagesPlaceholder")}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}value={s}onChangeText={y}style={bundleStyles.searchInput}autoCorrect={!1}autoCapitalize="none"/>
1044
- {s.length>0&&<react_native_1.Pressable accessible={!0}accessibilityRole="button"accessibilityLabel="Clear search input"onPress={()=>y("")}hitSlop={10}>
1045
- <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak}size={14}/>
1046
- </react_native_1.Pressable>}
1047
- <CopyButton_1.default value={()=>S}label={t("bundle.dependenciesJson")}/>
1048
- </react_native_1.View>
1049
- </react_native_1.View>
1050
-
1051
- <react_native_1.Text style={bundleStyles.listHeaderCount}>
1052
- {t("bundle.showingDependencies",{count:S.length})}
1053
- </react_native_1.Text>
1054
-
1055
- {S.map((e,l)=>{const p=e.version?e.version.replace(/^\^/,""):"",g=!!e.latestVersion&&!!p&&e.latestVersion!==p;return<react_native_1.View key={e.id}style={[bundleStyles.fileCard,e.isDeprecated&&{borderColor:AppColors_1.AppColors.errorBorder,backgroundColor:AppColors_1.AppColors.errorCardBg}]}>
1056
-
1057
- <react_native_1.View style={bundleStyles.fileCardTop}>
1058
- <react_native_1.View style={bundleStyles.sNoBadge}>
1059
- <react_native_1.Text style={bundleStyles.sNoText}>#{l+1}</react_native_1.Text>
1060
- </react_native_1.View>
1061
-
1062
- <PackageLogoRenderer name={e.name}color={e.color}size={28}/>
1063
-
1064
- <react_native_1.View style={{flex:1,paddingHorizontal:4}}>
1065
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"}}>
1066
- <HighlightText_1.default text={e.name}search={s}style={bundleStyles.fileName}highlightStyle={bundleStyles.searchHighlight}/>
1067
- <react_native_1.View style={bundleStyles.versionPill}>
1068
- <react_native_1.Text style={bundleStyles.versionPillText}>
1069
- {p?t("bundle.versionPrefix",{version:p}):t("bundle.bundled")}
1070
- </react_native_1.Text>
1071
- </react_native_1.View>
1072
-
1073
- {e.isDeprecated?<react_native_1.View style={bundleStyles.deprecatedBadge}>
1074
- <react_native_1.Text style={bundleStyles.deprecatedBadgeText}>
1075
- {t("bundle.deprecated")}
1076
- </react_native_1.Text>
1077
- </react_native_1.View>:g?<react_native_1.View style={bundleStyles.updateBadge}>
1078
- <react_native_1.Text style={bundleStyles.updateBadgeText}>
1079
- {t("bundle.updateAvailable",{version:e.latestVersion})}
1080
- </react_native_1.Text>
1081
- </react_native_1.View>:p?<react_native_1.View style={[bundleStyles.updateBadge,{backgroundColor:AppColors_1.AppColors.gray100,borderColor:AppColors_1.AppColors.gray200}]}>
1082
- <react_native_1.Text style={[bundleStyles.updateBadgeText,{color:AppColors_1.AppColors.gray600}]}>
1083
- {t("bundle.upToDate")}
1084
- </react_native_1.Text>
1085
- </react_native_1.View>:<react_native_1.View style={[bundleStyles.updateBadge,{backgroundColor:AppColors_1.AppColors.gray100,borderColor:AppColors_1.AppColors.gray200}]}>
1086
- <react_native_1.Text style={[bundleStyles.updateBadgeText,{color:AppColors_1.AppColors.gray600}]}>
1087
- {t("bundle.bundledBadge")}
1088
- </react_native_1.Text>
1089
- </react_native_1.View>}
1090
- </react_native_1.View>
1091
- </react_native_1.View>
1092
-
1093
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1094
- <react_native_1.View style={bundleStyles.fileSizeBox}>
1095
- <react_native_1.Text style={bundleStyles.fileSizeKb}>
1096
- {t("bundle.fileSizeKb",{size:e.sizeKb})}
1097
- </react_native_1.Text>
1098
- <react_native_1.Text style={bundleStyles.filePercent}>
1099
- {e.percentage}%
1100
- </react_native_1.Text>
1101
- </react_native_1.View>
1102
- <CopyButton_1.default value={()=>e}label={t("bundle.packageDetailsJson")}/>
1103
- </react_native_1.View>
1104
- </react_native_1.View>
1105
-
1106
-
1107
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6,marginTop:4,marginBottom:2}}>
1108
- <react_native_1.View style={[bundleStyles.pkgBadge,{backgroundColor:`${e.color}1F`,borderColor:`${e.color}4D`}]}>
1109
- <react_native_1.Text style={[bundleStyles.pkgBadgeText,{color:e.color}]}>
1110
- {e.category.toUpperCase()}
1111
- </react_native_1.Text>
1112
- </react_native_1.View>
1113
- <react_native_1.Text style={[bundleStyles.filePath,{flex:1,marginTop:0}]}numberOfLines={1}>
1114
- {e.description}
1115
- </react_native_1.Text>
1116
- </react_native_1.View>
1117
-
1118
-
1119
- {e.isDeprecated&&e.deprecationReason&&<react_native_1.View style={bundleStyles.deprecationBox}>
1120
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5}}>
1121
- <NetworkIcons_1.CircleAlertIcon color={AppColors_1.AppColors.errorColor}size={12}/>
1122
- <react_native_1.Text style={bundleStyles.deprecationText}>
1123
- {e.deprecationReason}
1124
- </react_native_1.Text>
1125
- </react_native_1.View>
1126
- </react_native_1.View>}
1127
-
1128
- <react_native_1.View style={bundleStyles.fileProgressTrack}>
1129
- <react_native_1.View style={[bundleStyles.fileProgressBar,{width:`${e.percentage*2}%`,backgroundColor:e.isDeprecated?AppColors_1.AppColors.red500:e.color}]}/>
1130
- </react_native_1.View>
1131
-
1132
-
1133
- <react_native_1.View style={{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginTop:3}}>
1134
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:8}}>
1135
- <react_native_1.View style={bundleStyles.typeTag}>
1136
- <react_native_1.Text style={bundleStyles.typeTagText}>
1137
- {e.type==="direct"?t("bundle.direct"):t("bundle.transitive")}
1138
- </react_native_1.Text>
1139
- </react_native_1.View>
1140
- {e.lastActive&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4}}>
1141
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.grayTextWeak}size={11}/>
1142
- <react_native_1.Text style={bundleStyles.lastActiveText}>
1143
- {e.lastActive}
1144
- </react_native_1.Text>
1145
- </react_native_1.View>}
1146
- </react_native_1.View>
1147
-
1148
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:8}}>
1149
- <react_native_1.Text style={bundleStyles.fileMetaText}>
1150
- {t("bundle.minified",{size:e.sizeKb})}
1151
- </react_native_1.Text>
1152
- <TouchableScale_1.default accessible={!0}accessibilityRole="link"accessibilityLabel={`Open ${e.name} on NPM`}accessibilityHint="Opens NPM package page in browser"onPress={()=>{const C=e.npmUrl||`https://www.npmjs.com/package/${e.name}`;react_native_1.Linking.openURL(C).catch(()=>{})}}style={bundleStyles.npmLinkBtn}>
1153
- <react_native_1.Text style={bundleStyles.npmLinkText}>
1154
- {t("bundle.npmLink")}
1155
- </react_native_1.Text>
1156
- </TouchableScale_1.default>
1157
- </react_native_1.View>
1158
- </react_native_1.View>
1159
- </react_native_1.View>})}
1160
- </react_native_1.ScrollView>
1161
-
1162
-
1163
- <react_native_1.View style={bundleStyles.stickyFooterBar}>
1164
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1165
- <NetworkIcons_1.PackageIcon color={AppColors_1.AppColors.purple}size={14}/>
1166
- <react_native_1.Text style={bundleStyles.footerTitle}>
1167
- {t("bundle.dependenciesCount",{count:S.length})}
1168
- </react_native_1.Text>
1169
- </react_native_1.View>
1170
- <react_native_1.Text style={bundleStyles.footerSizeVal}>
1171
- {t("bundle.kbMbValue",{kb:W,mb:(W/1024).toFixed(2)})}
1172
- </react_native_1.Text>
1173
- </react_native_1.View>
1174
- </react_native_1.View>}
1175
-
1176
-
1177
-
1178
-
1179
- {r==="media"&&<react_native_1.View style={{flex:1}}>
1180
- <react_native_1.ScrollView style={{flex:1}}contentContainerStyle={bundleStyles.contentContainer}keyboardShouldPersistTaps="handled">
1181
- <react_native_1.View style={bundleStyles.tipsCard}>
1182
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:8}}>
1183
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1184
- <NetworkIcons_1.StorageIcon color={AppColors_1.AppColors.purple}size={18}/>
1185
- <react_native_1.Text style={bundleStyles.tipsHeading}>
1186
- {t("bundle.mediaAuditorTitle")}
1187
- </react_native_1.Text>
1188
- </react_native_1.View>
1189
- <CopyButton_1.default value={()=>V}label={t("bundle.mediaAssetsJson")}/>
1190
- </react_native_1.View>
1191
- <react_native_1.Text style={bundleStyles.tipDesc}>
1192
- {t("bundle.mediaAuditorPrefix")}{" "}
1193
- <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.purple}}>
1194
- {i.images.pct+i.fonts.pct}%
1195
- </react_native_1.Text>{" "}
1196
- {t("bundle.mediaAuditorMid",{kb:i.images.kb+i.fonts.kb})}{" "}
1197
- <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.emerald700}}>
1198
- {t("bundle.mediaSavings",{size:540})}
1199
- </react_native_1.Text>{" "}
1200
- {t("bundle.mediaAuditorSuffix")}
1201
- </react_native_1.Text>
1202
- </react_native_1.View>
1203
-
1204
- <react_native_1.Text style={bundleStyles.listHeaderCount}>
1205
- {t("bundle.mediaAssetsList",{count:V.length})}
1206
- </react_native_1.Text>
1207
-
1208
- {V.map((e,l)=><react_native_1.View key={e.id}style={bundleStyles.fileCard}>
1209
- <react_native_1.View style={bundleStyles.fileCardTop}>
1210
- <react_native_1.View style={bundleStyles.sNoBadge}>
1211
- <react_native_1.Text style={bundleStyles.sNoText}>#{l+1}</react_native_1.Text>
1212
- </react_native_1.View>
1213
-
1214
- <MediaPreviewThumbnail file={e}/>
1215
-
1216
- <react_native_1.View style={{flex:1}}>
1217
- <react_native_1.Text style={bundleStyles.fileName}>{e.name}</react_native_1.Text>
1218
- <react_native_1.Text style={bundleStyles.filePath}>{e.path}</react_native_1.Text>
1219
- </react_native_1.View>
1220
-
1221
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1222
- <react_native_1.View style={bundleStyles.fileSizeBox}>
1223
- <react_native_1.Text style={bundleStyles.fileSizeKb}>
1224
- {t("bundle.fileSizeKb",{size:e.sizeKb})}
1225
- </react_native_1.Text>
1226
- </react_native_1.View>
1227
- <TouchableScale_1.default accessible={!0}accessibilityRole="button"accessibilityLabel={`Download ${e.name}`}accessibilityHint="Downloads media asset file"onPress={()=>(0,exports.downloadBundleFile)(e,a?.scriptURL)}style={bundleStyles.downloadFileBtn}hitSlop={8}>
1228
- <NetworkIcons_1.DownloadIcon size={14}color={AppColors_1.AppColors.sky500}/>
1229
- </TouchableScale_1.default>
1230
- <CopyButton_1.default value={()=>e}label={t("bundle.mediaItemJson")}/>
1231
- </react_native_1.View>
1232
- </react_native_1.View>
1233
-
1234
- <react_native_1.View style={bundleStyles.fileCardBottom}>
1235
- <react_native_1.Text style={bundleStyles.fileMetaText}>{e.meta}</react_native_1.Text>
1236
- {e.advice&&<react_native_1.View style={[bundleStyles.adviceBadge,e.status==="warning"&&bundleStyles.adviceWarning,e.status==="optimal"&&bundleStyles.adviceOptimal]}>
1237
- {e.status==="warning"?<NetworkIcons_1.LightbulbIcon color={AppColors_1.AppColors.amber800Warm}size={12}/>:<NetworkIcons_1.SparkleIcon color={AppColors_1.AppColors.emerald700}size={12}/>}
1238
- <react_native_1.Text style={[bundleStyles.adviceText,e.status==="warning"&&{color:AppColors_1.AppColors.amber800Warm},e.status==="optimal"&&{color:AppColors_1.AppColors.emerald700}]}>
1239
- {e.advice}
1240
- </react_native_1.Text>
1241
- </react_native_1.View>}
1242
- </react_native_1.View>
1243
- </react_native_1.View>)}
1244
- </react_native_1.ScrollView>
1245
-
1246
-
1247
- <react_native_1.View style={bundleStyles.stickyFooterBar}>
1248
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1249
- <NetworkIcons_1.StorageIcon color={AppColors_1.AppColors.purple}size={14}/>
1250
- <react_native_1.Text style={bundleStyles.footerTitle}>
1251
- {t("bundle.mediaAndFonts",{count:V.length})}
1252
- </react_native_1.Text>
1253
- </react_native_1.View>
1254
- <react_native_1.Text style={bundleStyles.footerSizeVal}>
1255
- {t("bundle.kbMbValue",{kb:H,mb:(H/1024).toFixed(2)})}
1256
- </react_native_1.Text>
1257
- </react_native_1.View>
1258
- </react_native_1.View>}
1259
-
1260
-
1261
-
1262
-
1263
- {r==="optimizer"&&<react_native_1.ScrollView style={{flex:1}}contentContainerStyle={bundleStyles.contentContainer}keyboardShouldPersistTaps="handled">
1264
- <react_native_1.View style={bundleStyles.tipsCard}>
1265
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:12}}>
1266
- <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
1267
- <NetworkIcons_1.CircleAlertIcon color={AppColors_1.AppColors.purple}size={18}/>
1268
- <react_native_1.Text style={bundleStyles.tipsHeading}>
1269
- {t("bundle.optimizerTitle")}
1270
- </react_native_1.Text>
1271
- </react_native_1.View>
1272
- <CopyButton_1.default value={()=>[t("bundle.optTip1Title"),`${t("bundle.optTip2Title")} (${t(w?"bundle.active":"bundle.actionRequired")})`,t("bundle.optTip3Title"),t("bundle.optTip4Title"),t("bundle.optTip5Title")]}label={t("bundle.optimizationChecklist")}/>
1273
- </react_native_1.View>
1274
-
1275
- {[{iconType:"image",iconColor:AppColors_1.AppColors.pink500,title:t("bundle.optTip1Title"),desc:t("bundle.optTip1Desc"),badge:t("bundle.highImpact"),badgeColor:AppColors_1.AppColors.pink500},{iconType:"bolt",iconColor:w?AppColors_1.AppColors.emerald500:AppColors_1.AppColors.amber500,title:t("bundle.optTip2Title"),desc:t(w?"bundle.optTip2DescActive":"bundle.optTip2DescInactive"),badge:t(w?"bundle.active":"bundle.actionRequired"),badgeColor:w?AppColors_1.AppColors.emerald500:AppColors_1.AppColors.amber500},{iconType:"font",iconColor:AppColors_1.AppColors.purple500,title:t("bundle.optTip3Title"),desc:t("bundle.optTip3Desc"),badge:t("bundle.mediumImpact"),badgeColor:AppColors_1.AppColors.purple500},{iconType:"source",iconColor:AppColors_1.AppColors.sky500,title:t("bundle.optTip4Title"),desc:t("bundle.optTip4Desc"),badge:t("bundle.bestPractice"),badgeColor:AppColors_1.AppColors.sky500},{iconType:"overhead",iconColor:AppColors_1.AppColors.indigo500,title:t("bundle.optTip5Title"),desc:t("bundle.optTip5Desc"),badge:t("bundle.bestPractice"),badgeColor:AppColors_1.AppColors.indigo500}].map((e,l)=><react_native_1.View key={l}style={bundleStyles.tipItem}>
1276
- <react_native_1.View style={bundleStyles.tipItemHeader}>
1277
- <react_native_1.View style={bundleStyles.tipTitleWrap}>
1278
- <react_native_1.View style={bundleStyles.sNoBadge}>
1279
- <react_native_1.Text style={bundleStyles.sNoText}>#{l+1}</react_native_1.Text>
1280
- </react_native_1.View>
1281
- <BundleCategoryIcon type={e.iconType}size={14}color={e.iconColor}/>
1282
- <react_native_1.Text style={bundleStyles.tipTitle}>{e.title}</react_native_1.Text>
1283
- </react_native_1.View>
1284
- <react_native_1.View style={bundleStyles.tipActionWrap}>
1285
- <react_native_1.View style={[bundleStyles.impactBadge,{backgroundColor:`${e.badgeColor}18`,borderColor:`${e.badgeColor}40`}]}>
1286
- <react_native_1.Text style={[bundleStyles.impactBadgeText,{color:e.badgeColor}]}>
1287
- {e.badge}
1288
- </react_native_1.Text>
1289
- </react_native_1.View>
1290
- <CopyButton_1.default value={()=>e}label={t("bundle.tipDetails")}/>
1291
- </react_native_1.View>
1292
- </react_native_1.View>
1293
- <react_native_1.Text style={bundleStyles.tipDesc}>{e.desc}</react_native_1.Text>
1294
- </react_native_1.View>)}
1295
- </react_native_1.View>
1296
- </react_native_1.ScrollView>}
1297
- </react_native_1.View>}),bundleStyles=react_native_1.StyleSheet.create({topTabWrap:{backgroundColor:AppColors_1.AppColors.white,paddingVertical:8,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,flexDirection:"row",alignItems:"center",paddingRight:10},reloadButton:{padding:8,borderRadius:20,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,alignItems:"center",justifyContent:"center",marginLeft:4},analyzingContainer:{flex:1,alignItems:"center",justifyContent:"center",gap:8,padding:24},analyzingText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13,color:AppColors_1.AppColors.primaryBlack},analyzingHint:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayTextWeak},subTabsScroll:{paddingHorizontal:12,gap:8,flexDirection:"row",alignItems:"center"},subTabPill:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingVertical:7,borderRadius:20,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},subTabPillActive:{backgroundColor:AppColors_1.AppColors.brandPurple,borderColor:AppColors_1.AppColors.brandPurple,shadowColor:AppColors_1.AppColors.brandPurple,shadowOffset:{width:0,height:2},shadowOpacity:.2,shadowRadius:3,elevation:2},subTabPillText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11.5,color:AppColors_1.AppColors.grayTextStrong},subTabPillTextActive:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.white},contentContainer:{padding:16,paddingBottom:40,gap:14},heroCard:{backgroundColor:AppColors_1.AppColors.white,borderRadius:14,padding:16,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,shadowColor:AppColors_1.AppColors.primaryBlack,shadowOffset:{width:0,height:2},shadowOpacity:.04,shadowRadius:6,elevation:2},heroTopRow:{flexDirection:"row",alignItems:"flex-start",gap:12,marginBottom:16},heroIconWrap:{width:44,height:44,borderRadius:12,backgroundColor:`${AppColors_1.AppColors.brandPurple}12`,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:`${AppColors_1.AppColors.brandPurple}25`},heroTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:16,color:AppColors_1.AppColors.primaryBlack},heroSubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:12,color:AppColors_1.AppColors.grayTextWeak,marginTop:2},metricsGrid:{flexDirection:"row",flexWrap:"wrap",gap:8},metricBox:{flex:1,minWidth:"45%",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:10,padding:10,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},metricLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.5},metricValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:14,color:AppColors_1.AppColors.primaryBlack,marginTop:3},metricHint:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10.5,color:AppColors_1.AppColors.grayText,marginTop:2},statusIndicator:{width:8,height:8,borderRadius:4},prodPlatformScroll:{flexDirection:"row",alignItems:"center",gap:8,paddingBottom:4},prodPlatformBtn:{flexDirection:"row",alignItems:"center",paddingVertical:7,paddingHorizontal:12,borderRadius:20,backgroundColor:AppColors_1.AppColors.white,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,gap:6},prodPlatformBtnActive:{backgroundColor:AppColors_1.AppColors.brandPurple,borderColor:AppColors_1.AppColors.brandPurple,shadowColor:AppColors_1.AppColors.brandPurple,shadowOffset:{width:0,height:2},shadowOpacity:.18,shadowRadius:3,elevation:2},prodPlatformBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11.5,color:AppColors_1.AppColors.grayTextStrong},prodPlatformBtnTextActive:{color:AppColors_1.AppColors.white},prodPlatformBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:10,backgroundColor:`${AppColors_1.AppColors.purple}14`},prodPlatformBadgeActive:{backgroundColor:"rgba(255, 255, 255, 0.25)"},prodPlatformBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.purple},prodPlatformBadgeTextActive:{color:AppColors_1.AppColors.white},sectionCard:{backgroundColor:AppColors_1.AppColors.white,borderRadius:14,padding:14,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,overflow:"hidden"},sectionHeaderRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:10,gap:8},sectionTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13,color:AppColors_1.AppColors.primaryBlack},sectionSub:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextWeak},treemapBar:{flexDirection:"row",borderRadius:6,overflow:"hidden",height:16,marginBottom:12,backgroundColor:AppColors_1.AppColors.slate200},prodTreemapBar:{flexDirection:"row",borderRadius:6,overflow:"hidden",height:16,marginBottom:12,backgroundColor:AppColors_1.AppColors.slate200},legendGrid:{flexDirection:"row",flexWrap:"wrap",gap:8},legendItem:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:8,paddingVertical:5,borderRadius:8,backgroundColor:`${AppColors_1.AppColors.slate200}40`,borderWidth:1,borderColor:`${AppColors_1.AppColors.dividerColor}`,flexShrink:0},legendText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextStrong},legendVal:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.primaryBlack},subsystemCard:{backgroundColor:AppColors_1.AppColors.white,borderRadius:12,padding:12,marginBottom:8,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,gap:8},subsystemHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},subsystemTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},subsystemBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:6},subsystemBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10},subsystemGrid:{flexDirection:"row",flexWrap:"wrap",gap:6},subsystemItem:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},subsystemItemText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10.5,color:AppColors_1.AppColors.grayTextStrong},subsystemItemVal:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.primaryBlack},catRowCard:{backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:12,padding:12,marginBottom:8,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,gap:8},catRowTop:{flexDirection:"row",alignItems:"flex-start",gap:10},catIconBox:{width:36,height:36,borderRadius:10,borderWidth:1,alignItems:"center",justifyContent:"center",flexShrink:0},catRowTitleWrap:{flex:1,minWidth:0,gap:2},catRowTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13,color:AppColors_1.AppColors.primaryBlack,flex:1},catRowDesc:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10.5,color:AppColors_1.AppColors.grayTextWeak,lineHeight:14.5},catRowSize:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},catRowRight:{alignItems:"flex-end",justifyContent:"center",flexShrink:0,minWidth:64},catRowPct:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},catPctPill:{paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:5},catPctText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5},catProgressTrack:{height:5,borderRadius:2.5,backgroundColor:`${AppColors_1.AppColors.slate200}`,overflow:"hidden",marginTop:2},catProgressBar:{height:"100%",borderRadius:2.5},filterContainer:{backgroundColor:AppColors_1.AppColors.white,borderRadius:12,padding:10,marginHorizontal:16,marginTop:12,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,gap:8},searchRow:{flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,paddingHorizontal:10,height:36,gap:8},searchInput:{flex:1,fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:12,color:AppColors_1.AppColors.primaryBlack,padding:0},categoryPillsScroll:{gap:6,paddingVertical:2},catPill:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:10,paddingVertical:5,borderRadius:16,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},catPillActive:{backgroundColor:AppColors_1.AppColors.brandPurple,borderColor:AppColors_1.AppColors.brandPurple},catPillText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextStrong},catPillTextActive:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.white},listHeaderCount:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextWeak,paddingHorizontal:4},treeHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:2,marginBottom:6},viewModeToggleGroup:{flexDirection:"row",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,padding:2,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},viewModeBtn:{paddingHorizontal:10,paddingVertical:5,borderRadius:6},viewModeBtnActive:{backgroundColor:AppColors_1.AppColors.brandPurple,shadowColor:AppColors_1.AppColors.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},viewModeBtnText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextStrong},viewModeBtnTextActive:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.white},treeActionLink:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11.5,color:AppColors_1.AppColors.purple},treeRootCard:{backgroundColor:AppColors_1.AppColors.white,borderRadius:12,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,overflow:"hidden",marginBottom:16},treeFolderBlock:{borderBottomWidth:react_native_1.StyleSheet.hairlineWidth,borderBottomColor:AppColors_1.AppColors.dividerColor},treeFolderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:8,paddingRight:10,backgroundColor:`${AppColors_1.AppColors.purple}06`},treeRowLeft:{flexDirection:"row",alignItems:"center",gap:6,flex:1,marginRight:6},treeRowRight:{flexDirection:"row",alignItems:"center",gap:6},treeChevron:{fontSize:12,color:AppColors_1.AppColors.purple,fontFamily:AppFonts_1.AppFonts.interBold,width:12,textAlign:"center"},treeFolderName:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},treeCountBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:8,backgroundColor:`${AppColors_1.AppColors.purple}14`},treeCountBadgeText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:9.5,color:AppColors_1.AppColors.purple},treeFolderSize:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextStrong},treeChildrenContainer:{backgroundColor:AppColors_1.AppColors.white},treeFileRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:6,paddingRight:10,borderBottomWidth:react_native_1.StyleSheet.hairlineWidth,borderBottomColor:`${AppColors_1.AppColors.dividerColor}80`,backgroundColor:AppColors_1.AppColors.white},treeFileRowUnused:{backgroundColor:`${AppColors_1.AppColors.red500}06`},treeBranchGuide:{width:12,alignItems:"center",justifyContent:"center"},treeBranchGuideText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.dividerColor},treeFileName:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.primaryBlack,flexShrink:1},treeUnusedPill:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,backgroundColor:`${AppColors_1.AppColors.red500}18`},treeUnusedPillText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9,color:AppColors_1.AppColors.red600},treeFileSizeGroup:{alignItems:"flex-end"},treeFileSizeText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.primaryBlack},treeFilePctText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:9,color:AppColors_1.AppColors.grayTextWeak},fileCard:{backgroundColor:AppColors_1.AppColors.white,borderRadius:12,padding:12,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor,gap:6,marginBottom:8},fileCardTop:{flexDirection:"row",alignItems:"center",gap:8},sNoBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,backgroundColor:`${AppColors_1.AppColors.purple}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}30`,minWidth:26,alignItems:"center",justifyContent:"center"},sNoText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.purple},extChip:{paddingHorizontal:6,paddingVertical:3,borderRadius:5,borderWidth:1},extChipText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,letterSpacing:.4},pkgBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:5,borderWidth:1},pkgBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9,letterSpacing:.4},pkgLogoWrap:{borderRadius:7,borderWidth:1,alignItems:"center",justifyContent:"center",backgroundColor:AppColors_1.AppColors.white,borderColor:AppColors_1.AppColors.dividerColor,overflow:"hidden"},pkgLogoFallbackText:{fontFamily:AppFonts_1.AppFonts.interBold},mediaThumbWrap:{width:32,height:32,borderRadius:6,overflow:"hidden",backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},mediaThumbImg:{width:"100%",height:"100%"},fileName:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},versionPill:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,backgroundColor:`${AppColors_1.AppColors.purple}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}26`},versionPillText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.purple},pkgVersion:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextWeak},filePath:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10.5,color:AppColors_1.AppColors.grayTextWeak,marginTop:1},fileSizeBox:{alignItems:"flex-end"},downloadFileBtn:{padding:6,borderRadius:6,backgroundColor:`${AppColors_1.AppColors.sky500}14`,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:`${AppColors_1.AppColors.sky500}28`},treeActionBtn:{padding:4,borderRadius:4,backgroundColor:`${AppColors_1.AppColors.sky500}14`,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:`${AppColors_1.AppColors.sky500}28`},fileSizeKb:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.primaryBlack},filePercent:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},fileProgressTrack:{height:4,borderRadius:2,backgroundColor:AppColors_1.AppColors.grayBackground,overflow:"hidden",marginVertical:2},fileProgressBar:{height:"100%",borderRadius:2},fileCardBottom:{gap:4},fileMetaText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10.5,color:AppColors_1.AppColors.grayTextWeak},typeTag:{backgroundColor:AppColors_1.AppColors.grayBackground,paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},typeTagText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:9.5,color:AppColors_1.AppColors.grayText},npmLinkBtn:{flexDirection:"row",alignItems:"center",gap:3,paddingHorizontal:7,paddingVertical:2,borderRadius:5,backgroundColor:AppColors_1.AppColors.npmRedTint,borderWidth:1,borderColor:AppColors_1.AppColors.npmRedBorder},npmLinkText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.npmRed},deprecatedBadge:{paddingHorizontal:6,paddingVertical:1.5,borderRadius:4,backgroundColor:AppColors_1.AppColors.red100,borderWidth:1,borderColor:AppColors_1.AppColors.errorBorder},deprecatedBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9,color:AppColors_1.AppColors.red600,letterSpacing:.3},updateBadge:{paddingHorizontal:6,paddingVertical:1.5,borderRadius:4,backgroundColor:AppColors_1.AppColors.green100,borderWidth:1,borderColor:AppColors_1.AppColors.greenBorder},updateBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9,color:AppColors_1.AppColors.emerald700},lastActiveText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},deprecationBox:{backgroundColor:AppColors_1.AppColors.errorCardBg,borderRadius:6,paddingHorizontal:8,paddingVertical:5,borderWidth:1,borderColor:AppColors_1.AppColors.errorBorder,marginTop:3},deprecationText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10.5,color:AppColors_1.AppColors.rose700,lineHeight:14},unusedBadge:{paddingHorizontal:6,paddingVertical:1.5,borderRadius:4,backgroundColor:AppColors_1.AppColors.red100,borderWidth:1,borderColor:AppColors_1.AppColors.errorBorder},unusedBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.red600},consumedBadge:{paddingHorizontal:6,paddingVertical:1.5,borderRadius:4,backgroundColor:AppColors_1.AppColors.green100,borderWidth:1,borderColor:AppColors_1.AppColors.greenBorder},consumedBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.emerald600},treeFolderChevronWrap:{width:18,height:18,borderRadius:9,backgroundColor:`${AppColors_1.AppColors.purple}14`,alignItems:"center",justifyContent:"center"},treeFileCardUnused:{borderColor:AppColors_1.AppColors.errorBorder,backgroundColor:AppColors_1.AppColors.red50},adviceUnused:{backgroundColor:AppColors_1.AppColors.errorCardBg,borderWidth:1,borderColor:AppColors_1.AppColors.errorBorder},liveWarningCard:{flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.amber100,borderWidth:1,borderColor:AppColors_1.AppColors.amber200,borderRadius:10,padding:12,marginBottom:12},liveWarningTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.amber800Warm,marginBottom:2},liveWarningDesc:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10.5,lineHeight:14,color:AppColors_1.AppColors.amber800Warm},adviceBadge:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:5,borderRadius:6,marginTop:4,gap:6},adviceWarning:{backgroundColor:AppColors_1.AppColors.amber100,borderWidth:1,borderColor:AppColors_1.AppColors.amber200},adviceOptimal:{backgroundColor:AppColors_1.AppColors.green100,borderWidth:1,borderColor:AppColors_1.AppColors.greenBorder},adviceText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10.5,lineHeight:14,flex:1},impactBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},impactBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9},searchHighlight:{backgroundColor:AppColors_1.AppColors.yellow200,color:AppColors_1.AppColors.yellow800,fontFamily:AppFonts_1.AppFonts.interBold},tipsCard:{backgroundColor:AppColors_1.AppColors.purple50,borderRadius:14,padding:14,borderWidth:1,borderColor:AppColors_1.AppColors.purple200},tipsHeading:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.purple800},totalSummaryCard:{marginTop:10,backgroundColor:`${AppColors_1.AppColors.brandPurple}0B`,borderRadius:12,padding:12,borderWidth:1,borderColor:`${AppColors_1.AppColors.brandPurple}25`,gap:8},totalSummaryRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},totalSummaryLabelWrap:{flexDirection:"row",alignItems:"center",gap:8},totalIconBadge:{width:32,height:32,borderRadius:8,backgroundColor:`${AppColors_1.AppColors.brandPurple}15`,alignItems:"center",justifyContent:"center"},totalSummaryLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11.5,color:AppColors_1.AppColors.brandPurple,letterSpacing:.6},totalSummarySub:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.grayTextWeak,marginTop:1},totalSummaryValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:15,color:AppColors_1.AppColors.primaryBlack},totalSummaryKb:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},totalFormulaGrid:{flexDirection:"row",flexWrap:"wrap",gap:6,paddingTop:6,borderTopWidth:1,borderTopColor:`${AppColors_1.AppColors.brandPurple}15`},totalChip:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:AppColors_1.AppColors.white,borderRadius:6,paddingHorizontal:6,paddingVertical:3,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},totalDot:{width:6,height:6,borderRadius:3},totalChipText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.primaryBlack},totalSummaryFormula:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10.5,color:AppColors_1.AppColors.grayText,lineHeight:15},stickyFooterBar:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",backgroundColor:AppColors_1.AppColors.white,paddingHorizontal:16,paddingTop:10,paddingBottom:react_native_1.Platform.OS==="ios"?24:12,borderTopWidth:1,borderTopColor:AppColors_1.AppColors.dividerColor,shadowColor:AppColors_1.AppColors.primaryBlack,shadowOffset:{width:0,height:-2},shadowOpacity:.05,shadowRadius:4,elevation:3},footerTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.primaryBlack},footerSizeVal:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.purple},tipItem:{marginBottom:10,backgroundColor:AppColors_1.AppColors.white,padding:12,borderRadius:10,borderWidth:1,borderColor:AppColors_1.AppColors.purple200,gap:6},tipItemHeader:{flexDirection:"row",alignItems:"flex-start",justifyContent:"space-between",gap:8},tipTitleWrap:{flexDirection:"row",alignItems:"center",gap:6,flex:1,flexShrink:1},tipActionWrap:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0},tipTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.purple900,flex:1,flexShrink:1},tipDesc:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.gray500,lineHeight:16}});exports.default=BundleTab;