react-native-inapp-inspector 2.5.12 → 2.5.13

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 (186) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  3. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  6. package/android/.gradle/8.9/gc.properties +0 -0
  7. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  8. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  9. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  10. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  11. package/android/.gradle/9.2.0/gc.properties +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  14. package/android/.gradle/vcs-1/gc.properties +0 -0
  15. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  16. package/android/src/main/AndroidManifest.xml +11 -0
  17. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +379 -19
  18. package/android/src/main/res/xml/inappinspector_file_paths.xml +7 -0
  19. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +47 -49
  20. package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  21. package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +76 -0
  22. package/dist/commonjs/components/Inspector/ConsoleExportModal.js +51 -51
  23. package/dist/commonjs/components/Inspector/CrashTab.js +17 -17
  24. package/dist/commonjs/components/Inspector/DebuggingTab.js +24 -24
  25. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +2 -2
  26. package/dist/commonjs/components/Inspector/FabLauncher.js +2 -2
  27. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +2 -2
  28. package/dist/commonjs/components/Inspector/InspectorHeader.js +10 -10
  29. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +10 -10
  30. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +1 -0
  31. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +222 -222
  32. package/dist/commonjs/components/Inspector/NetworkExportModal.d.ts +10 -0
  33. package/dist/commonjs/components/Inspector/NetworkExportModal.js +333 -0
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +48 -41
  35. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +11 -12
  36. package/dist/commonjs/components/Inspector/ReduxDetail.js +17 -19
  37. package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
  38. package/dist/commonjs/components/Inspector/SettingsPanel.js +3 -6
  39. package/dist/commonjs/components/Inspector/SocketCard.js +2 -2
  40. package/dist/commonjs/components/Inspector/SupportPage.js +5 -5
  41. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  42. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +97 -0
  43. package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +2 -0
  44. package/dist/commonjs/components/Inspector/UiInspectorDetail.js +485 -0
  45. package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  46. package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +199 -0
  47. package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +2 -0
  48. package/dist/commonjs/components/Inspector/UiInspectorTab.js +117 -0
  49. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  50. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +148 -0
  51. package/dist/commonjs/components/Inspector/index.d.ts +28 -0
  52. package/dist/commonjs/components/Inspector/index.js +1 -0
  53. package/dist/commonjs/components/LogCard.js +9 -7
  54. package/dist/commonjs/constants/index.js +1 -1
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  56. package/dist/commonjs/constants/telemetryConfig.js +1 -1
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -1
  59. package/dist/commonjs/customHooks/crashHandler.d.ts +1 -1
  60. package/dist/commonjs/customHooks/crashHandler.js +6 -6
  61. package/dist/commonjs/customHooks/uiInspectorManager.d.ts +22 -0
  62. package/dist/commonjs/customHooks/uiInspectorManager.js +1 -0
  63. package/dist/commonjs/helpers/index.js +1 -3
  64. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -0
  65. package/dist/commonjs/helpers/searchQueryParser.js +7 -5
  66. package/dist/commonjs/helpers/shareFormatter.d.ts +16 -0
  67. package/dist/commonjs/helpers/shareFormatter.js +16 -9
  68. package/dist/commonjs/helpers/uiInspectorEngine.d.ts +62 -0
  69. package/dist/commonjs/helpers/uiInspectorEngine.js +19 -0
  70. package/dist/commonjs/i18n/locales/ar.json +1 -1
  71. package/dist/commonjs/i18n/locales/bn.json +1 -1
  72. package/dist/commonjs/i18n/locales/de.json +1 -1
  73. package/dist/commonjs/i18n/locales/en.json +1 -1
  74. package/dist/commonjs/i18n/locales/es.json +1 -1
  75. package/dist/commonjs/i18n/locales/fr.json +1 -1
  76. package/dist/commonjs/i18n/locales/gu.json +1 -1
  77. package/dist/commonjs/i18n/locales/hi.json +1 -1
  78. package/dist/commonjs/i18n/locales/id.json +1 -1
  79. package/dist/commonjs/i18n/locales/it.json +1 -1
  80. package/dist/commonjs/i18n/locales/ja.json +1 -1
  81. package/dist/commonjs/i18n/locales/kn.json +1 -1
  82. package/dist/commonjs/i18n/locales/ko.json +1 -1
  83. package/dist/commonjs/i18n/locales/ml.json +1 -1
  84. package/dist/commonjs/i18n/locales/mr.json +1 -1
  85. package/dist/commonjs/i18n/locales/nl.json +1 -1
  86. package/dist/commonjs/i18n/locales/pa.json +1 -1
  87. package/dist/commonjs/i18n/locales/pl.json +1 -1
  88. package/dist/commonjs/i18n/locales/pt.json +1 -1
  89. package/dist/commonjs/i18n/locales/ru.json +1 -1
  90. package/dist/commonjs/i18n/locales/ta.json +1 -1
  91. package/dist/commonjs/i18n/locales/te.json +1 -1
  92. package/dist/commonjs/i18n/locales/tr.json +1 -1
  93. package/dist/commonjs/i18n/locales/vi.json +1 -1
  94. package/dist/commonjs/i18n/locales/zh.json +1 -1
  95. package/dist/commonjs/index.d.ts +3 -1
  96. package/dist/commonjs/index.js +3 -3
  97. package/dist/commonjs/native/NativeInspector.d.ts +2 -0
  98. package/dist/commonjs/native/NativeInspector.js +1 -1
  99. package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
  100. package/dist/commonjs/types/editor.d.ts +31 -0
  101. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +73 -75
  102. package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  103. package/dist/esm/components/Inspector/BoxModelVisualizer.js +76 -0
  104. package/dist/esm/components/Inspector/ConsoleExportModal.js +67 -67
  105. package/dist/esm/components/Inspector/CrashTab.js +58 -58
  106. package/dist/esm/components/Inspector/DebuggingTab.js +89 -89
  107. package/dist/esm/components/Inspector/DeviceInfoTab.js +2 -2
  108. package/dist/esm/components/Inspector/FabLauncher.js +21 -21
  109. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +23 -23
  110. package/dist/esm/components/Inspector/InspectorHeader.js +26 -26
  111. package/dist/esm/components/Inspector/MediaGalleryTab.js +151 -151
  112. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +1 -0
  113. package/dist/esm/components/Inspector/MediaPreviewModal.js +468 -468
  114. package/dist/esm/components/Inspector/NetworkExportModal.d.ts +10 -0
  115. package/dist/esm/components/Inspector/NetworkExportModal.js +333 -0
  116. package/dist/esm/components/Inspector/NetworkTab.js +118 -111
  117. package/dist/esm/components/Inspector/NpmStarPrompt.js +32 -33
  118. package/dist/esm/components/Inspector/ReduxDetail.js +54 -56
  119. package/dist/esm/components/Inspector/ReduxTab.js +9 -9
  120. package/dist/esm/components/Inspector/SettingsPanel.js +3 -6
  121. package/dist/esm/components/Inspector/SocketCard.js +13 -13
  122. package/dist/esm/components/Inspector/SupportPage.js +5 -5
  123. package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  124. package/dist/esm/components/Inspector/UiA11yAuditPanel.js +97 -0
  125. package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +2 -0
  126. package/dist/esm/components/Inspector/UiInspectorDetail.js +422 -0
  127. package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  128. package/dist/esm/components/Inspector/UiInspectorOverlay.js +138 -0
  129. package/dist/esm/components/Inspector/UiInspectorTab.d.ts +2 -0
  130. package/dist/esm/components/Inspector/UiInspectorTab.js +117 -0
  131. package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  132. package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +148 -0
  133. package/dist/esm/components/Inspector/index.d.ts +28 -0
  134. package/dist/esm/components/Inspector/index.js +1 -0
  135. package/dist/esm/components/LogCard.js +57 -55
  136. package/dist/esm/constants/index.js +1 -1
  137. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  138. package/dist/esm/constants/telemetryConfig.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.d.ts +1 -1
  142. package/dist/esm/customHooks/crashHandler.js +6 -6
  143. package/dist/esm/customHooks/uiInspectorManager.d.ts +22 -0
  144. package/dist/esm/customHooks/uiInspectorManager.js +1 -0
  145. package/dist/esm/helpers/index.js +4 -6
  146. package/dist/esm/helpers/searchQueryParser.d.ts +1 -0
  147. package/dist/esm/helpers/searchQueryParser.js +7 -5
  148. package/dist/esm/helpers/shareFormatter.d.ts +16 -0
  149. package/dist/esm/helpers/shareFormatter.js +20 -13
  150. package/dist/esm/helpers/uiInspectorEngine.d.ts +48 -0
  151. package/dist/esm/helpers/uiInspectorEngine.js +19 -0
  152. package/dist/esm/i18n/locales/ar.json +1 -1
  153. package/dist/esm/i18n/locales/bn.json +1 -1
  154. package/dist/esm/i18n/locales/de.json +1 -1
  155. package/dist/esm/i18n/locales/en.json +1 -1
  156. package/dist/esm/i18n/locales/es.json +1 -1
  157. package/dist/esm/i18n/locales/fr.json +1 -1
  158. package/dist/esm/i18n/locales/gu.json +1 -1
  159. package/dist/esm/i18n/locales/hi.json +1 -1
  160. package/dist/esm/i18n/locales/id.json +1 -1
  161. package/dist/esm/i18n/locales/it.json +1 -1
  162. package/dist/esm/i18n/locales/ja.json +1 -1
  163. package/dist/esm/i18n/locales/kn.json +1 -1
  164. package/dist/esm/i18n/locales/ko.json +1 -1
  165. package/dist/esm/i18n/locales/ml.json +1 -1
  166. package/dist/esm/i18n/locales/mr.json +1 -1
  167. package/dist/esm/i18n/locales/nl.json +1 -1
  168. package/dist/esm/i18n/locales/pa.json +1 -1
  169. package/dist/esm/i18n/locales/pl.json +1 -1
  170. package/dist/esm/i18n/locales/pt.json +1 -1
  171. package/dist/esm/i18n/locales/ru.json +1 -1
  172. package/dist/esm/i18n/locales/ta.json +1 -1
  173. package/dist/esm/i18n/locales/te.json +1 -1
  174. package/dist/esm/i18n/locales/tr.json +1 -1
  175. package/dist/esm/i18n/locales/vi.json +1 -1
  176. package/dist/esm/i18n/locales/zh.json +1 -1
  177. package/dist/esm/index.d.ts +3 -1
  178. package/dist/esm/index.js +7 -7
  179. package/dist/esm/native/NativeInspector.d.ts +2 -0
  180. package/dist/esm/native/NativeInspector.js +1 -1
  181. package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
  182. package/dist/esm/types/editor.d.ts +31 -0
  183. package/ios/NetworkInspectorModule.mm +314 -16
  184. package/package.json +1 -1
  185. package/src/native/NativeInspector.ts +37 -0
  186. package/src/native/NativeNetworkInspector.ts +2 -0
@@ -1,155 +1,162 @@
1
- import G,{useCallback as ue,useMemo as M,useRef as qe}from"react";import{FlatList as We,Pressable as Ge,ScrollView as _e,Text as I,TextInput as Qe,View as C}from"react-native";import{useInspector as Ue}from"./InspectorContext";import N from"../TouchableScale";import Ie from"../AnimatedEntrance";import Ke from"../DomainHeader";import Xe from"../LogCard";import Je from"../EmptyState";import Ye from"../EndOfListFooter";import Ze from"./NetworkFilterModal";import S from"../../styles";import{AppColors as o}from"../../styles/AppColors";import{AppFonts as k}from"../../styles/AppFonts";import{METHOD_COLORS as Ve}from"../../constants";import{isUrlHidden as eo}from"../../helpers";import{useTranslation as oo}from"../../i18n";import{SearchIcon as Co,ClearIcon as So,TrashIcon as To,SortArrowIcon as Io,FilterIcon as Vo,ChevronIcon as Fo,CheckIcon as Ro,CircleCheckIcon as Lo,CircleXIcon as Bo,LayersIcon as Fe,ClockIcon as Po,RequestIcon as Eo,ResponseIcon as $o,AtomIcon as Do}from"../NetworkIcons";const Mo=G.memo(()=>{const{groupedData:_,loadMoreSection:ge,search:R,setSearch:j,setSearchScope:pe,quickFilter:Q,setQuickFilter:se,handleDelete:Re,isGroupByPageEnabled:F,setIsGroupByPageEnabled:Le,selectedLogs:U,sortOrder:Be,setSortOrder:K,statusFilters:L,setStatusFilters:q,methodFilters:B,setMethodFilters:v,latencyFilter:O,setLatencyFilter:X,protocolFilter:A,setProtocolFilter:J,networkSortBy:H,setNetworkSortBy:Y,filteredLogs:E,logs:Z,hiddenUrlPatterns:ee,toggleSectionFilter:me,toggleSectionCollapse:he,minStart:ye,totalRange:fe,newLogIds:we,toggleSelect:Ce,setSelected:Se,maxNetworkLogs:ne}=Ue(),{t:oe}=oo(),Pe=qe(null),[Ee,be]=G.useState(!1),[Te,ze]=G.useState(!1),[te,xe]=G.useState(ne||50);G.useEffect(()=>{xe(ne||50)},[R,Q,ne]);const de=M(()=>F?_:_.slice(0,te),[F,_,te]),$e=ue(e=>e?.id?String(e.id):"",[]),$=M(()=>L.size>0&&!L.has("all")||B.size>0&&!B.has("all")||O!=="all"||A!=="all"||H!=="time_desc",[L,B,O,A,H]),De=M(()=>{let e=0;return L.size>0&&!L.has("all")&&(e+=L.size),B.size>0&&!B.has("all")&&(e+=B.size),O!=="all"&&e++,A!=="all"&&e++,H!=="time_desc"&&e++,e},[L,B,O,A,H]),Me=M(()=>({statusCodes:L.size>0?new Set(L):new Set(["all"]),methods:B.size>0?new Set(B):new Set(["all"]),latency:O,protocol:A,sortBy:H}),[L,B,O,A,H]),Ne=ue(e=>{e.statusCodes.has("all")||e.statusCodes.size===0?q(new Set):q(new Set(e.statusCodes)),e.methods.has("all")||e.methods.size===0?v(new Set):v(new Set([...e.methods].map(T=>T))),X(e.latency||"all"),J(e.protocol||"all"),Y(e.sortBy||"time_desc"),e.sortBy==="time_asc"?K("oldest"):K("newest")},[q,v,X,J,Y,K]),re=M(()=>!ee||ee.length===0?Z:Z.filter(e=>!eo(e.url,ee)),[Z,ee]),P=M(()=>{let e=0,T=0,z=0,x=0,W=0,le=0;return re.forEach(V=>{const b=typeof V.status=="number"?V.status:parseInt(String(V.status),10);V.status===0||V.status==null||!isNaN(b)&&b>=400?e++:!isNaN(b)&&b>=200&&b<400&&T++,(V.duration||0)>=500&&z++;const ie=(V.method||"").toUpperCase();ie==="POST"&&x++,ie==="GET"&&W++;const D=(V.url||"").toLowerCase(),ae=(V.client||"").toLowerCase();(D.includes("graphql")||ae.includes("graphql")||ae.includes("apollo"))&&le++}),{all:re.length,errors:e,success:T,slow:z,post:x,get:W,graphql:le}},[re]),Oe=M(()=>[{id:"all",label:"All",count:P.all,color:o.purple},{id:"errors",label:"Errors",count:P.errors,color:o.errorColor},{id:"success",label:"2xx OK",count:P.success,color:o.greenColor},{id:"slow",label:"Slow >500ms",count:P.slow,color:o.warningIconGold},{id:"POST",label:"POST",count:P.post,color:Ve.POST||o.blue500},{id:"GET",label:"GET",count:P.get,color:Ve.GET||o.emerald500},{id:"graphql",label:"GraphQL",count:P.graphql,color:o.graphqlPink}],[P]),Ae=ue(({item:e,index:T})=>{if(e.type==="header")return<Ie index={T}distance={8}>
2
- <Ke pageName={e.pageName}color={e.color}stats={e.stats}activeFilters={e.activeFilters}onToggleFilter={me}isCollapsed={e.isCollapsed}onToggleCollapse={he}isFirst={e.isFirst}timestamp={e.timestamp}/>
3
- </Ie>;if(e.type==="loadMore"){const{pageName:V,color:b,remainingCount:ie,totalCount:D,loadedCount:ae,loadMoreStep:ce,hasMore:He}=e;return<C style={[S.treeNodeRow,S.treeNodeRowLast]}>
4
- <C style={S.treeLines}>
5
- <C style={[S.modernTreeLine,{borderColor:b},S.modernTreeLineLast]}/>
6
- </C>
7
- <C style={S.treeCardWrapper}>
8
- {He?<N onPress={()=>ge(V,ce||10)}hitSlop={6}style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:9,paddingHorizontal:12,marginVertical:3,marginRight:2,borderRadius:10,backgroundColor:`${b}14`,borderWidth:1.5,borderColor:`${b}40`,shadowColor:b,shadowOffset:{width:0,height:1.5},shadowOpacity:.1,shadowRadius:3,elevation:2}}>
9
- <C style={{flexDirection:"row",alignItems:"center",gap:8}}>
10
- <C style={{width:22,height:22,borderRadius:11,backgroundColor:b,alignItems:"center",justifyContent:"center",shadowColor:b,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:2,elevation:1}}>
11
- <Fo color={o.white}size={9}direction="down"/>
12
- </C>
13
- <C>
1
+ import H,{useCallback as ge,useMemo as D,useRef as We}from"react";import{FlatList as _e,Pressable as Qe,ScrollView as Ue,Text as I,TextInput as Ke,View as S}from"react-native";import{useInspector as Xe}from"./InspectorContext";import $ from"../TouchableScale";import Le from"../AnimatedEntrance";import Je from"../DomainHeader";import Ye from"../LogCard";import Ze from"../EmptyState";import So from"../EndOfListFooter";import Co from"./NetworkFilterModal";import To from"./NetworkExportModal";import C from"../../styles";import{AppColors as o}from"../../styles/AppColors";import{AppFonts as k}from"../../styles/AppFonts";import{METHOD_COLORS as Re}from"../../constants";import{isUrlHidden as xo}from"../../helpers";import{useTranslation as zo}from"../../i18n";import{SearchIcon as Io,ClearIcon as Vo,TrashIcon as Fo,SortArrowIcon as Lo,FilterIcon as Ro,ChevronIcon as Bo,CheckIcon as Po,CircleCheckIcon as Eo,CircleXIcon as $o,LayersIcon as Be,ClockIcon as Mo,RequestIcon as Ao,ResponseIcon as Do,AtomIcon as No,ExportIcon as Oo}from"../NetworkIcons";const vo=H.memo(()=>{const{groupedData:U,loadMoreSection:me,search:F,setSearch:K,setSearchScope:he,quickFilter:X,setQuickFilter:de,handleDelete:Pe,isGroupByPageEnabled:q,setIsGroupByPageEnabled:Ee,selectedLogs:J,sortOrder:$e,setSortOrder:Y,statusFilters:L,setStatusFilters:G,methodFilters:R,setMethodFilters:W,latencyFilter:N,setLatencyFilter:Z,protocolFilter:O,setProtocolFilter:ee,networkSortBy:v,setNetworkSortBy:oe,filteredLogs:B,logs:te,hiddenUrlPatterns:re,toggleSectionFilter:fe,toggleSectionCollapse:ye,minStart:we,totalRange:Se,newLogIds:Ce,toggleSelect:be,setSelected:Te,maxNetworkLogs:ce}=Xe(),{t:_}=zo(),xe=We(null),[Me,ze]=H.useState(!1),[Ae,Ie]=H.useState(!1),[Ve,ke]=H.useState(!1),[le,Fe]=H.useState(ce||50),ie=!!(F&&F.trim().length>0),P=q&&!ie;H.useEffect(()=>{Fe(ce||50),ie&&xe.current?.scrollToOffset({offset:0,animated:!1})},[F,X,ce,ie]);const ue=D(()=>P?U:U.slice(0,le),[P,U,le]),De=ge(e=>e?.id?String(e.id):"",[]),M=D(()=>L.size>0&&!L.has("all")||R.size>0&&!R.has("all")||N!=="all"||O!=="all"||v!=="time_desc",[L,R,N,O,v]),Ne=D(()=>{let e=0;return L.size>0&&!L.has("all")&&(e+=L.size),R.size>0&&!R.has("all")&&(e+=R.size),N!=="all"&&e++,O!=="all"&&e++,v!=="time_desc"&&e++,e},[L,R,N,O,v]),Oe=D(()=>({statusCodes:L.size>0?new Set(L):new Set(["all"]),methods:R.size>0?new Set(R):new Set(["all"]),latency:N,protocol:O,sortBy:v}),[L,R,N,O,v]),ve=ge(e=>{e.statusCodes.has("all")||e.statusCodes.size===0?G(new Set):G(new Set(e.statusCodes)),e.methods.has("all")||e.methods.size===0?W(new Set):W(new Set([...e.methods].map(T=>T))),Z(e.latency||"all"),ee(e.protocol||"all"),oe(e.sortBy||"time_desc"),e.sortBy==="time_asc"?Y("oldest"):Y("newest")},[G,W,Z,ee,oe,Y]),j=D(()=>!re||re.length===0?te:te.filter(e=>!xo(e.url,re)),[te,re]),E=D(()=>{let e=0,T=0,x=0,z=0,Q=0,ae=0;return j.forEach(V=>{const b=typeof V.status=="number"?V.status:parseInt(String(V.status),10);V.status===0||V.status==null||!isNaN(b)&&b>=400?e++:!isNaN(b)&&b>=200&&b<400&&T++,(V.duration||0)>=500&&x++;const se=(V.method||"").toUpperCase();se==="POST"&&z++,se==="GET"&&Q++;const A=(V.url||"").toLowerCase(),ne=(V.client||"").toLowerCase();(A.includes("graphql")||ne.includes("graphql")||ne.includes("apollo"))&&ae++}),{all:j.length,errors:e,success:T,slow:x,post:z,get:Q,graphql:ae}},[j]),He=D(()=>[{id:"all",label:"All",count:E.all,color:o.purple},{id:"errors",label:"Errors",count:E.errors,color:o.errorColor},{id:"success",label:"2xx OK",count:E.success,color:o.greenColor},{id:"slow",label:"Slow >500ms",count:E.slow,color:o.warningIconGold},{id:"POST",label:"POST",count:E.post,color:Re.POST||o.blue500},{id:"GET",label:"GET",count:E.get,color:Re.GET||o.emerald500},{id:"graphql",label:"GraphQL",count:E.graphql,color:o.graphqlPink}],[E]),qe=ge(({item:e,index:T})=>{if(e.type==="header")return<Le index={T}distance={8}>
2
+ <Je pageName={e.pageName}color={e.color}stats={e.stats}activeFilters={e.activeFilters}onToggleFilter={fe}isCollapsed={e.isCollapsed}onToggleCollapse={ye}isFirst={e.isFirst}timestamp={e.timestamp}/>
3
+ </Le>;if(e.type==="loadMore"){const{pageName:V,color:b,remainingCount:se,totalCount:A,loadedCount:ne,loadMoreStep:pe,hasMore:Ge}=e;return<S style={[C.treeNodeRow,C.treeNodeRowLast]}>
4
+ <S style={C.treeLines}>
5
+ <S style={[C.modernTreeLine,{borderColor:b},C.modernTreeLineLast]}/>
6
+ </S>
7
+ <S style={C.treeCardWrapper}>
8
+ {Ge?<$ onPress={()=>me(V,pe||10)}hitSlop={6}style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:9,paddingHorizontal:12,marginVertical:3,marginRight:2,borderRadius:10,backgroundColor:`${b}14`,borderWidth:1.5,borderColor:`${b}40`,shadowColor:b,shadowOffset:{width:0,height:1.5},shadowOpacity:.1,shadowRadius:3,elevation:2}}>
9
+ <S style={{flexDirection:"row",alignItems:"center",gap:8}}>
10
+ <S style={{width:22,height:22,borderRadius:11,backgroundColor:b,alignItems:"center",justifyContent:"center",shadowColor:b,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:2,elevation:1}}>
11
+ <Bo color={o.white}size={9}direction="down"/>
12
+ </S>
13
+ <S>
14
14
  <I style={{fontFamily:k.interBold,fontSize:12,color:b}}>
15
- {oe("footer.loadMoreRequests",{count:ce,defaultValue:`Load ${ce} More Requests`})}
15
+ {_("footer.loadMoreRequests",{count:pe,defaultValue:`Load ${pe} More Requests`})}
16
16
  </I>
17
17
  <I style={{fontFamily:k.interRegular,fontSize:9.5,color:o.grayTextWeak,marginTop:1}}>
18
- Showing {ae} of {D} requests
18
+ Showing {ne} of {A} requests
19
19
  </I>
20
- </C>
21
- </C>
20
+ </S>
21
+ </S>
22
22
 
23
- <C style={{flexDirection:"row",alignItems:"center",backgroundColor:`${b}25`,paddingHorizontal:8,paddingVertical:4,borderRadius:8,borderWidth:1,borderColor:`${b}40`,gap:3}}>
23
+ <S style={{flexDirection:"row",alignItems:"center",backgroundColor:`${b}25`,paddingHorizontal:8,paddingVertical:4,borderRadius:8,borderWidth:1,borderColor:`${b}40`,gap:3}}>
24
24
  <I style={{fontFamily:k.interBold,fontSize:10.5,color:b}}>
25
- +{ie}
25
+ +{se}
26
26
  </I>
27
27
  <I style={{fontFamily:k.interRegular,fontSize:9,color:b}}>
28
28
  more
29
29
  </I>
30
- </C>
31
- </N>:<C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:7,paddingHorizontal:11,marginVertical:3,marginRight:2,borderRadius:9,backgroundColor:`${b}0A`,borderWidth:1,borderColor:`${b}25`}}>
32
- <C style={{flexDirection:"row",alignItems:"center",gap:7}}>
33
- <C style={{width:17,height:17,borderRadius:8.5,backgroundColor:`${b}25`,alignItems:"center",justifyContent:"center"}}>
34
- <Ro color={b}size={8}/>
35
- </C>
30
+ </S>
31
+ </$>:<S style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:7,paddingHorizontal:11,marginVertical:3,marginRight:2,borderRadius:9,backgroundColor:`${b}0A`,borderWidth:1,borderColor:`${b}25`}}>
32
+ <S style={{flexDirection:"row",alignItems:"center",gap:7}}>
33
+ <S style={{width:17,height:17,borderRadius:8.5,backgroundColor:`${b}25`,alignItems:"center",justifyContent:"center"}}>
34
+ <Po color={b}size={8}/>
35
+ </S>
36
36
  <I style={{fontFamily:k.interMedium,fontSize:11,color:o.grayTextStrong}}>
37
- {oe("footer.allLoaded",{count:D,defaultValue:`All ${D} requests loaded`})}
37
+ {_("footer.allLoaded",{count:A,defaultValue:`All ${A} requests loaded`})}
38
38
  </I>
39
- </C>
39
+ </S>
40
40
 
41
- <C style={{backgroundColor:`${b}18`,paddingHorizontal:7,paddingVertical:2,borderRadius:6}}>
41
+ <S style={{backgroundColor:`${b}18`,paddingHorizontal:7,paddingVertical:2,borderRadius:6}}>
42
42
  <I style={{fontFamily:k.interBold,fontSize:9.5,color:b}}>
43
- {D}/{D}
43
+ {A}/{A}
44
44
  </I>
45
- </C>
46
- </C>}
47
- </C>
48
- </C>}const{log:z,isLast:x,color:W}=e,le=de.slice(0,T).filter(V=>!V.type).length;return<Ie index={T}distance={8}style={F?[S.treeNodeRow,x&&S.treeNodeRowLast]:{marginBottom:5,marginHorizontal:5}}>
49
- {F&&<C style={S.treeLines}>
50
- <C style={[S.modernTreeLine,{borderColor:W},x&&S.modernTreeLineLast]}/>
51
- {!x&&<C style={[S.modernTreeBranch,{borderColor:W}]}/>}
52
- </C>}
53
- <C style={F?S.treeCardWrapper:{flex:1}}>
54
- <Xe testID={`inspector.network.item.${le}`}item={z}isSelected={U.has(z.id)}onToggleSelect={Ce}onPress={()=>{Se(z)}}timelineMinStart={ye}timelineTotalRange={fe}isNew={we.has(z.id)}searchStr={R}/>
55
- </C>
56
- </Ie>},[de,F,ye,fe,we,U,Ce,R,me,he,ge,Se,oe]);return<C style={{flex:1}}>
57
- <C style={{marginTop:6}}>
45
+ </S>
46
+ </S>}
47
+ </S>
48
+ </S>}const{log:x,isLast:z,color:Q}=e,ae=ue.slice(0,T).filter(V=>!V.type).length;return<Le index={T}distance={8}style={P?[C.treeNodeRow,z&&C.treeNodeRowLast]:{marginBottom:5,marginHorizontal:5}}>
49
+ {P&&<S style={C.treeLines}>
50
+ <S style={[C.modernTreeLine,{borderColor:Q},z&&C.modernTreeLineLast]}/>
51
+ {!z&&<S style={[C.modernTreeBranch,{borderColor:Q}]}/>}
52
+ </S>}
53
+ <S style={P?C.treeCardWrapper:{flex:1}}>
54
+ <Ye testID={`inspector.network.item.${ae}`}item={x}isSelected={J.has(x.id)}onToggleSelect={be}onPress={()=>{Te(x)}}timelineMinStart={we}timelineTotalRange={Se}isNew={Ce.has(x.id)}searchStr={F}/>
55
+ </S>
56
+ </Le>},[ue,P,we,Se,Ce,J,be,F,fe,ye,me,Te,_]);return<S style={{flex:1}}>
57
+ <S style={{marginTop:6}}>
58
58
 
59
- <C style={S.toolbarRow}>
60
- <C style={[S.searchContainer,Te&&{borderColor:o.purple,borderWidth:1.5}]}>
61
- <Co color={Te?o.purple:o.grayTextWeak}size={15}/>
62
- <Qe placeholder="Search URL, status, method, headers, body..."placeholderTextColor={o.grayTextWeak}value={R}onChangeText={j}onFocus={()=>ze(!0)}onBlur={()=>ze(!1)}style={S.searchInput}autoCorrect={!1}autoCapitalize="none"/>
59
+ <S style={C.toolbarRow}>
60
+ <S style={[C.searchContainer,Ve&&{borderColor:o.purple,borderWidth:1.5}]}>
61
+ <Io color={Ve?o.purple:o.grayTextWeak}size={15}/>
62
+ <Ke placeholder={_("network.searchPlaceholder","Search APIs...")}placeholderTextColor={o.grayTextWeak}value={F}onChangeText={K}onFocus={()=>ke(!0)}onBlur={()=>ke(!1)}style={C.searchInput}autoCorrect={!1}autoCapitalize="none"/>
63
63
 
64
- {R.length>0&&<C style={{flexDirection:"row",alignItems:"center",gap:4}}>
65
- <C style={{backgroundColor:`${o.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:1.5}}>
64
+ {F.length>0&&<S style={{flexDirection:"row",alignItems:"center",gap:4}}>
65
+ <S style={{backgroundColor:`${o.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:1.5}}>
66
66
  <I style={{color:o.purple,fontSize:9.5,fontFamily:k.interBold}}>
67
- {E.length}
67
+ {B.length}
68
68
  </I>
69
- </C>
70
- <Ge onPress={()=>j("")}hitSlop={10}style={S.clearBtn}>
71
- <So color={o.grayTextWeak}size={13}/>
72
- </Ge>
73
- </C>}
74
- </C>
69
+ </S>
70
+ <Qe onPress={()=>K("")}hitSlop={10}style={C.clearBtn}>
71
+ <Vo color={o.grayTextWeak}size={13}/>
72
+ </Qe>
73
+ </S>}
74
+ </S>
75
75
 
76
- <C style={S.toolbarRight}>
77
- <N style={[S.toolbarBtn,{borderColor:`${o.errorColor}38`,backgroundColor:`${o.errorColor}0F`}]}onPress={Re}hitSlop={6}>
78
- <To color={o.errorColor}size={15}/>
79
- {U.size>0&&<C style={S.trashBadge}>
80
- <I style={S.trashBadgeText}>
81
- {U.size}
76
+ <S style={C.toolbarRight}>
77
+ <$ style={[C.toolbarBtn,{borderColor:`${o.purple}38`,backgroundColor:`${o.purple}0F`}]}onPress={()=>Ie(!0)}hitSlop={6}testID="inspector.network.exportBtn">
78
+ <Oo color={o.purple}size={15}/>
79
+ </$>
80
+
81
+ <$ style={[C.toolbarBtn,{borderColor:`${o.errorColor}38`,backgroundColor:`${o.errorColor}0F`}]}onPress={Pe}hitSlop={6}>
82
+ <Fo color={o.errorColor}size={15}/>
83
+ {J.size>0&&<S style={C.trashBadge}>
84
+ <I style={C.trashBadgeText}>
85
+ {J.size}
82
86
  </I>
83
- </C>}
84
- </N>
87
+ </S>}
88
+ </$>
85
89
 
86
- <N style={[S.toolbarBtn,F&&{borderColor:o.purple,backgroundColor:`${o.purple}15`}]}onPress={()=>Le(e=>!e)}hitSlop={6}accessibilityLabel={F?"Page Accordion Grouping Enabled (Tap for Plain List)":"Plain List Enabled (Tap for Page Accordion)"}accessibilityRole="button">
87
- <Fe color={F?o.purple:o.grayTextStrong}size={16}/>
88
- {F&&<C style={S.activeFilterDot}/>}
89
- </N>
90
+ <$ style={[C.toolbarBtn,q&&{borderColor:o.purple,backgroundColor:`${o.purple}15`}]}onPress={()=>Ee(e=>!e)}hitSlop={6}accessibilityLabel={ie?"Page Accordion Grouping Preserved (Temporarily in List View for Search Results)":q?"Page Accordion Grouping Enabled (Tap for Plain List)":"Plain List Enabled (Tap for Page Accordion)"}accessibilityRole="button">
91
+ <Be color={q?o.purple:o.grayTextStrong}size={16}/>
92
+ {q&&<S style={C.activeFilterDot}/>}
93
+ </$>
90
94
 
91
- <N style={S.toolbarBtn}onPress={()=>K(e=>e==="newest"?"oldest":"newest")}hitSlop={10}>
92
- <Io direction={Be==="newest"?"down":"up"}color={o.grayTextStrong}size={18}/>
93
- </N>
94
- </C>
95
- </C>
95
+ <$ style={C.toolbarBtn}onPress={()=>Y(e=>e==="newest"?"oldest":"newest")}hitSlop={10}>
96
+ <Lo direction={$e==="newest"?"down":"up"}color={o.grayTextStrong}size={18}/>
97
+ </$>
98
+ </S>
99
+ </S>
96
100
 
97
101
 
98
- <C style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:8,gap:6}}>
99
- <_e horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
100
- {Oe.map(e=>{const T=Q===e.id,z=e.color||o.purple,x=T?o.white:z;return<N testID={`inspector.network.filter.${e.id.toLowerCase()}`}key={e.id}onPress={()=>{se(T?"all":e.id)}}>
101
- <C style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:T?z:`${z}12`,borderWidth:1,borderColor:T?z:`${z}30`,gap:5}}>
102
- {e.id==="all"&&<Fe size={11}color={x}/>}
103
- {e.id==="errors"&&<Bo size={11}color={x}/>}
104
- {e.id==="success"&&<Lo size={11}color={x}/>}
105
- {e.id==="slow"&&<Po size={11}color={x}/>}
106
- {e.id==="POST"&&<Eo size={11}color={x}/>}
107
- {e.id==="GET"&&<$o size={11}color={x}/>}
108
- {e.id==="graphql"&&<Do size={11}color={x}/>}
102
+ <S style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:8,gap:6}}>
103
+ <Ue horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
104
+ {He.map(e=>{const T=X===e.id,x=e.color||o.purple,z=T?o.white:x;return<$ testID={`inspector.network.filter.${e.id.toLowerCase()}`}key={e.id}onPress={()=>{de(T?"all":e.id)}}>
105
+ <S style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:T?x:`${x}12`,borderWidth:1,borderColor:T?x:`${x}30`,gap:5}}>
106
+ {e.id==="all"&&<Be size={11}color={z}/>}
107
+ {e.id==="errors"&&<$o size={11}color={z}/>}
108
+ {e.id==="success"&&<Eo size={11}color={z}/>}
109
+ {e.id==="slow"&&<Mo size={11}color={z}/>}
110
+ {e.id==="POST"&&<Ao size={11}color={z}/>}
111
+ {e.id==="GET"&&<Do size={11}color={z}/>}
112
+ {e.id==="graphql"&&<No size={11}color={z}/>}
109
113
  <I style={{fontFamily:k.interBold,fontSize:10.5,color:T?o.white:o.primaryBlack}}>
110
114
  {e.label}
111
115
  </I>
112
- <C style={{backgroundColor:T?"rgba(255,255,255,0.25)":`${z}20`,paddingHorizontal:5,paddingVertical:1,borderRadius:8}}>
113
- <I style={{fontFamily:k.interBold,fontSize:9,color:T?o.white:z}}>
116
+ <S style={{backgroundColor:T?"rgba(255,255,255,0.25)":`${x}20`,paddingHorizontal:5,paddingVertical:1,borderRadius:8}}>
117
+ <I style={{fontFamily:k.interBold,fontSize:9,color:T?o.white:x}}>
114
118
  {e.count}
115
119
  </I>
116
- </C>
117
- </C>
118
- </N>})}
119
- </_e>
120
+ </S>
121
+ </S>
122
+ </$>})}
123
+ </Ue>
120
124
 
121
- <N onPress={()=>be(!0)}style={{flexShrink:0}}>
122
- <C style={{flexDirection:"row",alignItems:"center",paddingHorizontal:10,paddingVertical:4.5,borderRadius:8,backgroundColor:$?`${o.purple}20`:o.grayBackground,borderWidth:1,borderColor:$?o.purple:o.grayBorderSecondary,gap:5,shadowColor:o.black,shadowOpacity:.04,shadowRadius:2,shadowOffset:{width:0,height:1},elevation:1}}>
123
- <Vo size={11}color={$?o.purple:o.grayText}/>
124
- <I style={{fontFamily:k.interBold,fontSize:10.5,color:$?o.purple:o.grayText}}>
125
- {oe("network.moreFilters","More Filters")}
125
+ <$ onPress={()=>ze(!0)}style={{flexShrink:0}}>
126
+ <S style={{flexDirection:"row",alignItems:"center",paddingHorizontal:10,paddingVertical:4.5,borderRadius:8,backgroundColor:M?`${o.purple}20`:o.grayBackground,borderWidth:1,borderColor:M?o.purple:o.grayBorderSecondary,gap:5,shadowColor:o.black,shadowOpacity:.04,shadowRadius:2,shadowOffset:{width:0,height:1},elevation:1}}>
127
+ <Ro size={11}color={M?o.purple:o.grayText}/>
128
+ <I style={{fontFamily:k.interBold,fontSize:10.5,color:M?o.purple:o.grayText}}>
129
+ {_("network.moreFilters","More Filters")}
126
130
  </I>
127
- {$&&<C style={{backgroundColor:o.purple,paddingHorizontal:4.5,paddingVertical:1,borderRadius:6}}>
131
+ {M&&<S style={{backgroundColor:o.purple,paddingHorizontal:4.5,paddingVertical:1,borderRadius:6}}>
128
132
  <I style={{fontFamily:k.interBold,fontSize:8.5,color:o.white}}>
129
- {De}
133
+ {Ne}
130
134
  </I>
131
- </C>}
132
- </C>
133
- </N>
134
- </C>
135
+ </S>}
136
+ </S>
137
+ </$>
138
+ </S>
135
139
 
136
140
 
137
- {(Q!=="all"||R.trim().length>0||$||E.length!==Z.length)&&<C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginHorizontal:8,marginBottom:8,paddingHorizontal:8,paddingVertical:5.5,backgroundColor:`${o.purple}10`,borderRadius:8,borderWidth:1,borderColor:`${o.purple}25`}}>
141
+ {(X!=="all"||F.trim().length>0||M||B.length!==te.length)&&<S style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginHorizontal:8,marginBottom:8,paddingHorizontal:8,paddingVertical:5.5,backgroundColor:`${o.purple}10`,borderRadius:8,borderWidth:1,borderColor:`${o.purple}25`}}>
138
142
  <I style={{fontFamily:k.interMedium,fontSize:10.5,color:o.purple}}>
139
- Showing {E.length} of {re.length} requests
143
+ Showing {B.length} of {j.length} requests
140
144
  </I>
141
- <N onPress={()=>{j(""),se("all"),q(new Set),v(new Set),X("all"),J("all"),Y("time_desc"),pe("all")}}>
145
+ <$ onPress={()=>{K(""),de("all"),G(new Set),W(new Set),Z("all"),ee("all"),oe("time_desc"),he("all")}}>
142
146
  <I style={{fontFamily:k.interBold,fontSize:10.5,color:o.errorColor}}>
143
147
  Clear All Filters
144
148
  </I>
145
- </N>
146
- </C>}
147
- </C>
149
+ </$>
150
+ </S>}
151
+ </S>
152
+
153
+ <_e ref={xe}data={ue}keyExtractor={De}renderItem={qe}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}ListEmptyComponent={<Ze isSearch={F.length>0||M||X!=="all"}searchQuery={F}customTitle={F.length>0?"No matching API requests":"No network activity"}onClearSearch={()=>{K(""),G(new Set),W(new Set),Z("all"),ee("all"),oe("time_desc"),de("all"),he("all")}}/>}ListFooterComponent={U.length>0?<S style={{paddingBottom:24}}>
154
+ <So count={P?B.length:Math.min(le,B.length)}totalCount={B.length}label="requests"hasMore={!P&&B.length>le}loadMoreStep={30}onLoadMore={()=>Fe(e=>e+30)}/>
155
+ </S>:null}style={{flex:1}}contentContainerStyle={[C.listContent,{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
148
156
 
149
- <We ref={Pe}data={de}keyExtractor={$e}renderItem={Ae}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}ListEmptyComponent={<Je isSearch={R.length>0||$||Q!=="all"}searchQuery={R}customTitle={R.length>0?"No matching API requests":"No network activity"}onClearSearch={()=>{j(""),q(new Set),v(new Set),X("all"),J("all"),Y("time_desc"),se("all"),pe("all")}}/>}ListFooterComponent={_.length>0?<C style={{paddingBottom:24}}>
150
- <Ye count={F?E.length:Math.min(te,E.length)}totalCount={E.length}label="requests"hasMore={!F&&E.length>te}loadMoreStep={30}onLoadMore={()=>xe(e=>e+30)}/>
151
- </C>:null}style={{flex:1}}contentContainerStyle={[S.listContent,{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
157
+
158
+ <Co visible={Me}onClose={()=>ze(!1)}filters={Oe}onApply={ve}searchQuery={F}/>
152
159
 
153
160
 
154
- <Ze visible={Ee}onClose={()=>be(!1)}filters={Me}onApply={Ne}searchQuery={R}/>
155
- </C>});export default Mo;
161
+ <To visible={Ae}onClose={()=>Ie(!1)}filteredLogs={B}allLogs={j}/>
162
+ </S>});export default vo;
@@ -1,78 +1,77 @@
1
- import{useEffect as K,useRef as z,useState as J}from"react";import{Animated as r,Linking as j,Modal as Q,Platform as I,StyleSheet as F,Text as T,TouchableOpacity as P,View as S}from"react-native";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as x}from"../../styles/AppFonts";import E from"../TouchableScale";import{loadSettings as C,saveSettings as B}from"../../helpers/settingsStore";import{trackTelemetryEvent as R}from"../../helpers/telemetry";import{StarIcon as M,CloseWhite as X,CheckIcon as Z,GitHubIcon as St,NpmIcon as Tt}from"../NetworkIcons";const xt=7200*60*1e3,Ct="https://github.com/vengatmacuser/react-native-inapp-inspector",Bt="https://www.npmjs.com/package/react-native-inapp-inspector";export const NpmStarPrompt=()=>{const[L,H]=J(!1),_=z(new r.Value(200)).current,A=z(new r.Value(0)).current,O=z(new r.Value(1)).current;K(()=>{let o=!0;async function $(){try{const k=await C();if(k.starPromptActioned)return;const D=Date.now(),Y=k.starPromptFirstSeen||D;k.starPromptFirstSeen||await B({...k,starPromptFirstSeen:D});const q=k.starPromptLastShown||Y;D-q>=xt&&Math.random()<.65&&o&&setTimeout(()=>{o&&N()},1800)}catch{}}return $(),()=>{o=!1}},[]);const N=async()=>{H(!0);try{const o=await C();await B({...o,starPromptLastShown:Date.now()}),R("npm_star_prompt_shown",{trigger:"5_day_interval",platform:I.OS})}catch{}r.parallel([r.spring(_,{toValue:0,friction:8,tension:50,useNativeDriver:!0}),r.timing(A,{toValue:1,duration:250,useNativeDriver:!0})]).start(),r.loop(r.sequence([r.timing(O,{toValue:1.15,duration:900,useNativeDriver:!0}),r.timing(O,{toValue:1,duration:900,useNativeDriver:!0})])).start()},V=o=>{r.parallel([r.timing(A,{toValue:0,duration:180,useNativeDriver:!0}),r.timing(_,{toValue:200,duration:180,useNativeDriver:!0})]).start(()=>{H(!1),o&&o()})},G=async()=>{try{const o=await C();await B({...o,starPromptActioned:!0}),R("npm_star_prompt_action",{action:"starred",platform:I.OS})}catch{}V(()=>{j.openURL(Ct).catch(()=>{j.openURL(Bt).catch(()=>{})})})},W=async()=>{try{const o=await C();await B({...o,starPromptActioned:!0}),R("npm_star_prompt_action",{action:"already_starred",platform:I.OS})}catch{}V()},v=async()=>{try{const o=await C();await B({...o,starPromptLastShown:Date.now()}),R("npm_star_prompt_action",{action:"remind_later",platform:I.OS})}catch{}V()},U=async()=>{try{const o=await C();await B({...o,starPromptActioned:!0}),R("npm_star_prompt_action",{action:"dont_ask_again",platform:I.OS})}catch{}V()};return L?<Q transparent visible={L}animationType="none"onRequestClose={v}>
2
- <r.View style={[e.backdrop,{opacity:A}]}>
3
- <P style={F.absoluteFill}activeOpacity={1}onPress={v}/>
1
+ import{useEffect as J,useRef as L,useState as Q}from"react";import{Animated as r,Linking as M,Modal as X,Platform as R,StyleSheet as F,Text as T,TouchableOpacity as _,View as S}from"react-native";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as C}from"../../styles/AppFonts";import N from"../TouchableScale";import{t as x}from"../../i18n";import{loadSettings as B,saveSettings as k}from"../../helpers/settingsStore";import{trackTelemetryEvent as V}from"../../helpers/telemetry";import{StarIcon as E,CloseWhite as Z,CheckIcon as St,GitHubIcon as Tt,NpmIcon as Ct}from"../NetworkIcons";const Bt=7200*60*1e3,kt="https://github.com/vengatmacuser/react-native-inapp-inspector",It="https://www.npmjs.com/package/react-native-inapp-inspector";export const NpmStarPrompt=()=>{const[j,H]=Q(!1),A=L(new r.Value(200)).current,O=L(new r.Value(0)).current,D=L(new r.Value(1)).current;J(()=>{let o=!0;async function Y(){try{const I=await B();if(I.starPromptActioned)return;const z=Date.now(),q=I.starPromptFirstSeen||z;I.starPromptFirstSeen||await k({...I,starPromptFirstSeen:z});const K=I.starPromptLastShown||q;z-K>=Bt&&Math.random()<.65&&o&&setTimeout(()=>{o&&G()},1800)}catch{}}return Y(),()=>{o=!1}},[]);const G=async()=>{H(!0);try{const o=await B();await k({...o,starPromptLastShown:Date.now()}),V("npm_star_prompt_shown",{trigger:"5_day_interval",platform:R.OS})}catch{}r.parallel([r.spring(A,{toValue:0,friction:8,tension:50,useNativeDriver:!0}),r.timing(O,{toValue:1,duration:250,useNativeDriver:!0})]).start(),r.loop(r.sequence([r.timing(D,{toValue:1.15,duration:900,useNativeDriver:!0}),r.timing(D,{toValue:1,duration:900,useNativeDriver:!0})])).start()},P=o=>{r.parallel([r.timing(O,{toValue:0,duration:180,useNativeDriver:!0}),r.timing(A,{toValue:200,duration:180,useNativeDriver:!0})]).start(()=>{H(!1),o&&o()})},W=async()=>{try{const o=await B();await k({...o,starPromptActioned:!0}),V("npm_star_prompt_action",{action:"starred",platform:R.OS})}catch{}P(()=>{M.openURL(kt).catch(()=>{M.openURL(It).catch(()=>{})})})},U=async()=>{try{const o=await B();await k({...o,starPromptActioned:!0}),V("npm_star_prompt_action",{action:"already_starred",platform:R.OS})}catch{}P()},v=async()=>{try{const o=await B();await k({...o,starPromptLastShown:Date.now()}),V("npm_star_prompt_action",{action:"remind_later",platform:R.OS})}catch{}P()},$=async()=>{try{const o=await B();await k({...o,starPromptActioned:!0}),V("npm_star_prompt_action",{action:"dont_ask_again",platform:R.OS})}catch{}P()};return j?<X transparent visible={j}animationType="none"onRequestClose={v}>
2
+ <r.View style={[e.backdrop,{opacity:O}]}>
3
+ <_ style={F.absoluteFill}activeOpacity={1}onPress={v}/>
4
4
 
5
- <r.View style={[e.cardContainer,{transform:[{translateY:_}]}]}>
5
+ <r.View style={[e.cardContainer,{transform:[{translateY:A}]}]}>
6
6
 
7
7
  <S style={e.headerIconWrapper}>
8
- <r.View style={[e.iconGlow,{transform:[{scale:O}]}]}/>
8
+ <r.View style={[e.iconGlow,{transform:[{scale:D}]}]}/>
9
9
  <S style={e.iconCircle}>
10
- <M size={26}color={t.amber500}/>
10
+ <E size={26}color={t.amber500}/>
11
11
  </S>
12
12
  </S>
13
13
 
14
14
 
15
- <P onPress={v}hitSlop={{top:10,bottom:10,left:10,right:10}}style={e.closeBtn}>
16
- <X size={12}color={t.grayText}/>
17
- </P>
15
+ <_ onPress={v}hitSlop={{top:10,bottom:10,left:10,right:10}}style={e.closeBtn}>
16
+ <Z size={12}color={t.grayText}/>
17
+ </_>
18
18
 
19
19
 
20
20
  <S style={e.pillBadge}>
21
- <T style={e.pillBadgeText}>SUPPORT OPEN SOURCE</T>
21
+ <T style={e.pillBadgeText}>{x("support.supportOpenSource","SUPPORT OPEN SOURCE")}</T>
22
22
  </S>
23
23
 
24
24
 
25
- <T style={e.title}>Enjoying In-App Inspector?</T>
25
+ <T style={e.title}>{x("support.enjoyingTitle","Enjoying In-App Inspector?")}</T>
26
26
  <T style={e.description}>
27
- If this debugging tool saves you time, please consider giving us a
28
- star on GitHub & npm. Your support helps us build more features!
27
+ {x("support.enjoyingSubtitle","If this debugging tool saves you time, please consider giving us a star on GitHub & npm. Your support helps us build more features!")}
29
28
  </T>
30
29
 
31
30
 
32
31
  <S style={e.metricsBar}>
33
32
  <S style={e.metricItem}>
34
- <St size={13}color={t.grayText}/>
35
- <T style={e.metricText}>GitHub Star</T>
33
+ <Tt size={13}color={t.grayText}/>
34
+ <T style={e.metricText}>{x("support.githubStar","GitHub Star")}</T>
36
35
  </S>
37
36
  <S style={e.metricDot}/>
38
37
  <S style={e.metricItem}>
39
- <Tt size={13}color={t.npmRed}/>
40
- <T style={e.metricText}>npm Package</T>
38
+ <Ct size={13}color={t.npmRed}/>
39
+ <T style={e.metricText}>{x("support.npmPackage","npm Package")}</T>
41
40
  </S>
42
41
  <S style={e.metricDot}/>
43
42
  <S style={e.metricItem}>
44
- <T style={e.metricText}>100% Free</T>
43
+ <T style={e.metricText}>{x("support.free100","100% Free")}</T>
45
44
  </S>
46
45
  </S>
47
46
 
48
47
 
49
- <E accessible={!0}accessibilityRole="button"accessibilityLabel="Star on GitHub"onPress={G}style={e.primaryButton}>
48
+ <N accessible={!0}accessibilityRole="button"accessibilityLabel="Star on GitHub"onPress={W}style={e.primaryButton}>
50
49
  <S style={e.primaryButtonContent}>
51
- <M size={16}color={t.white}/>
52
- <T style={e.primaryButtonText}>Star on GitHub & npm</T>
50
+ <E size={16}color={t.white}/>
51
+ <T style={e.primaryButtonText}>{x("support.starOnGithubNpm","Star on GitHub & npm")}</T>
53
52
  </S>
54
- </E>
53
+ </N>
55
54
 
56
55
 
57
- <E accessible={!0}accessibilityRole="button"accessibilityLabel="I already starred"onPress={W}style={e.secondaryButton}>
56
+ <N accessible={!0}accessibilityRole="button"accessibilityLabel="I already starred"onPress={U}style={e.secondaryButton}>
58
57
  <S style={e.secondaryButtonContent}>
59
- <Z size={13}color={t.purple}/>
60
- <T style={e.secondaryButtonText}>I Already Starred</T>
58
+ <St size={13}color={t.purple}/>
59
+ <T style={e.secondaryButtonText}>{x("support.alreadyStarred","I Already Starred")}</T>
61
60
  </S>
62
- </E>
61
+ </N>
63
62
 
64
63
 
65
64
  <S style={e.footerRow}>
66
- <P onPress={v}hitSlop={{top:8,bottom:8,left:8,right:8}}>
67
- <T style={e.footerLinkText}>Remind Me Later</T>
68
- </P>
65
+ <_ onPress={v}hitSlop={{top:8,bottom:8,left:8,right:8}}>
66
+ <T style={e.footerLinkText}>{x("support.remindMeLater","Remind Me Later")}</T>
67
+ </_>
69
68
 
70
69
  <S style={e.footerSeparator}/>
71
70
 
72
- <P onPress={U}hitSlop={{top:8,bottom:8,left:8,right:8}}>
73
- <T style={e.footerLinkTextMuted}>Don't Ask Again</T>
74
- </P>
71
+ <_ onPress={$}hitSlop={{top:8,bottom:8,left:8,right:8}}>
72
+ <T style={e.footerLinkTextMuted}>{x("support.dontAskAgain","Don't Ask Again")}</T>
73
+ </_>
75
74
  </S>
76
75
  </r.View>
77
76
  </r.View>
78
- </Q>:null};const e=F.create({backdrop:{...F.absoluteFillObject,backgroundColor:"rgba(15, 23, 42, 0.65)",justifyContent:"center",alignItems:"center",paddingHorizontal:20,zIndex:99999},cardContainer:{width:"100%",maxWidth:380,backgroundColor:t.white,borderRadius:22,padding:22,alignItems:"center",shadowColor:t.black,shadowOffset:{width:0,height:8},shadowOpacity:.22,shadowRadius:20,elevation:12,borderWidth:1.5,borderColor:`${t.purple}25`},headerIconWrapper:{position:"relative",alignItems:"center",justifyContent:"center",marginBottom:12},iconGlow:{position:"absolute",width:68,height:68,borderRadius:34,backgroundColor:`${t.amber500}22`},iconCircle:{width:54,height:54,borderRadius:27,backgroundColor:t.amber100,borderWidth:2,borderColor:t.amber200,alignItems:"center",justifyContent:"center"},closeBtn:{position:"absolute",top:14,right:14,width:28,height:28,borderRadius:14,backgroundColor:t.grayBackground,alignItems:"center",justifyContent:"center"},pillBadge:{backgroundColor:`${t.purple}14`,paddingHorizontal:9,paddingVertical:3,borderRadius:10,marginBottom:8},pillBadgeText:{fontFamily:x.interBold,fontSize:9.5,color:t.purple,letterSpacing:.6},title:{fontFamily:x.interBold,fontSize:18,lineHeight:23,color:t.primaryBlack,textAlign:"center",marginBottom:6},description:{fontFamily:x.interRegular,fontSize:12.5,lineHeight:18,color:t.grayText,textAlign:"center",marginBottom:14,paddingHorizontal:8},metricsBar:{flexDirection:"row",alignItems:"center",justifyContent:"center",backgroundColor:t.grayBackground,paddingVertical:7,paddingHorizontal:14,borderRadius:10,marginBottom:16,gap:8},metricItem:{flexDirection:"row",alignItems:"center",gap:4},metricText:{fontFamily:x.interMedium,fontSize:11,color:t.primaryBlack},metricDot:{width:3.5,height:3.5,borderRadius:2,backgroundColor:t.dividerColor},primaryButton:{width:"100%",backgroundColor:t.purple,borderRadius:12,paddingVertical:12,alignItems:"center",justifyContent:"center",marginBottom:8,shadowColor:t.purple,shadowOffset:{width:0,height:4},shadowOpacity:.3,shadowRadius:8,elevation:4},primaryButtonContent:{flexDirection:"row",alignItems:"center",gap:7},primaryButtonText:{fontFamily:x.interBold,fontSize:14,color:t.white},secondaryButton:{width:"100%",backgroundColor:`${t.purple}10`,borderWidth:1,borderColor:`${t.purple}30`,borderRadius:12,paddingVertical:10,alignItems:"center",justifyContent:"center",marginBottom:14},secondaryButtonContent:{flexDirection:"row",alignItems:"center",gap:6},secondaryButtonText:{fontFamily:x.interBold,fontSize:13,color:t.purple},footerRow:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:12},footerLinkText:{fontFamily:x.interMedium,fontSize:11.5,color:t.grayText},footerSeparator:{width:1,height:12,backgroundColor:t.dividerColor},footerLinkTextMuted:{fontFamily:x.interRegular,fontSize:11.5,color:t.grayTextWeak}});export default NpmStarPrompt;
77
+ </X>:null};const e=F.create({backdrop:{...F.absoluteFillObject,backgroundColor:"rgba(15, 23, 42, 0.65)",justifyContent:"center",alignItems:"center",paddingHorizontal:20,zIndex:99999},cardContainer:{width:"100%",maxWidth:380,backgroundColor:t.white,borderRadius:22,padding:22,alignItems:"center",shadowColor:t.black,shadowOffset:{width:0,height:8},shadowOpacity:.22,shadowRadius:20,elevation:12,borderWidth:1.5,borderColor:`${t.purple}25`},headerIconWrapper:{position:"relative",alignItems:"center",justifyContent:"center",marginBottom:12},iconGlow:{position:"absolute",width:68,height:68,borderRadius:34,backgroundColor:`${t.amber500}22`},iconCircle:{width:54,height:54,borderRadius:27,backgroundColor:t.amber100,borderWidth:2,borderColor:t.amber200,alignItems:"center",justifyContent:"center"},closeBtn:{position:"absolute",top:14,right:14,width:28,height:28,borderRadius:14,backgroundColor:t.grayBackground,alignItems:"center",justifyContent:"center"},pillBadge:{backgroundColor:`${t.purple}14`,paddingHorizontal:9,paddingVertical:3,borderRadius:10,marginBottom:8},pillBadgeText:{fontFamily:C.interBold,fontSize:9.5,color:t.purple,letterSpacing:.6},title:{fontFamily:C.interBold,fontSize:18,lineHeight:23,color:t.primaryBlack,textAlign:"center",marginBottom:6},description:{fontFamily:C.interRegular,fontSize:12.5,lineHeight:18,color:t.grayText,textAlign:"center",marginBottom:14,paddingHorizontal:8},metricsBar:{flexDirection:"row",alignItems:"center",justifyContent:"center",backgroundColor:t.grayBackground,paddingVertical:7,paddingHorizontal:14,borderRadius:10,marginBottom:16,gap:8},metricItem:{flexDirection:"row",alignItems:"center",gap:4},metricText:{fontFamily:C.interMedium,fontSize:11,color:t.primaryBlack},metricDot:{width:3.5,height:3.5,borderRadius:2,backgroundColor:t.dividerColor},primaryButton:{width:"100%",backgroundColor:t.purple,borderRadius:12,paddingVertical:12,alignItems:"center",justifyContent:"center",marginBottom:8,shadowColor:t.purple,shadowOffset:{width:0,height:4},shadowOpacity:.3,shadowRadius:8,elevation:4},primaryButtonContent:{flexDirection:"row",alignItems:"center",gap:7},primaryButtonText:{fontFamily:C.interBold,fontSize:14,color:t.white},secondaryButton:{width:"100%",backgroundColor:`${t.purple}10`,borderWidth:1,borderColor:`${t.purple}30`,borderRadius:12,paddingVertical:10,alignItems:"center",justifyContent:"center",marginBottom:14},secondaryButtonContent:{flexDirection:"row",alignItems:"center",gap:6},secondaryButtonText:{fontFamily:C.interBold,fontSize:13,color:t.purple},footerRow:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:12},footerLinkText:{fontFamily:C.interMedium,fontSize:11.5,color:t.grayText},footerSeparator:{width:1,height:12,backgroundColor:t.dividerColor},footerLinkTextMuted:{fontFamily:C.interRegular,fontSize:11.5,color:t.grayTextWeak}});export default NpmStarPrompt;