react-native-inapp-inspector 2.3.23 → 2.3.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/components/AnalyticsDetail.js +8 -8
- package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
- package/dist/commonjs/components/AppHeaderLogo.js +1 -1
- package/dist/commonjs/components/BrandSquareIcon.js +12 -12
- package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
- package/dist/commonjs/components/ConsoleLogCard.js +92 -80
- package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
- package/dist/commonjs/components/EndOfListFooter.js +27 -5
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +30 -298
- package/dist/commonjs/components/Inspector/ConsoleTab.js +38 -93
- package/dist/commonjs/components/Inspector/CrashDetail.js +12 -12
- package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
- package/dist/commonjs/components/Inspector/DebuggingTab.js +9 -9
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +54 -52
- package/dist/commonjs/components/Inspector/InspectorHeader.js +1 -1
- package/dist/commonjs/components/Inspector/LogDetail.js +6 -6
- package/dist/commonjs/components/Inspector/MainScreen.js +23 -25
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
- package/dist/commonjs/components/Inspector/NetworkTab.js +31 -31
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
- package/dist/commonjs/components/Inspector/ReduxDetail.js +1 -1
- package/dist/commonjs/components/Inspector/ReduxTab.js +110 -97
- package/dist/commonjs/components/Inspector/SettingsPanel.js +48 -100
- package/dist/commonjs/components/Inspector/StorageTab.js +56 -52
- package/dist/commonjs/components/Inspector/TabBar.js +29 -26
- package/dist/commonjs/components/JsonViewer.js +169 -164
- package/dist/commonjs/components/LogCard.js +34 -38
- package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
- package/dist/commonjs/components/SegmentedTabs.d.ts +4 -1
- package/dist/commonjs/components/SegmentedTabs.js +8 -8
- package/dist/commonjs/constants/index.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/networkLogger.js +1 -2
- package/dist/commonjs/helpers/index.d.ts +6 -0
- package/dist/commonjs/helpers/index.js +4 -4
- package/dist/commonjs/helpers/memoryManager.d.ts +0 -1
- package/dist/commonjs/helpers/memoryManager.js +1 -1
- package/dist/commonjs/helpers/remoteConfig.js +1 -1
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/i18n/index.d.ts +35 -0
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -0
- package/dist/commonjs/i18n/locales/de.json +1 -0
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -0
- package/dist/commonjs/i18n/locales/fr.json +1 -0
- package/dist/commonjs/i18n/locales/hi.json +1 -0
- package/dist/commonjs/i18n/locales/ja.json +1 -0
- package/dist/commonjs/i18n/locales/ko.json +1 -0
- package/dist/commonjs/i18n/locales/pt.json +1 -0
- package/dist/commonjs/i18n/locales/ru.json +1 -0
- package/dist/commonjs/i18n/locales/zh.json +1 -0
- package/dist/commonjs/index.d.ts +2 -4
- package/dist/commonjs/index.js +2 -2
- package/dist/commonjs/styles/AppColors.d.ts +40 -0
- package/dist/commonjs/styles/AppColors.js +1 -1
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/enums.d.ts +0 -20
- package/dist/commonjs/types/enums.js +1 -1
- package/dist/esm/components/AnalyticsDetail.js +75 -75
- package/dist/esm/components/AnalyticsEventCard.js +20 -17
- package/dist/esm/components/AppHeaderLogo.js +5 -5
- package/dist/esm/components/BrandSquareIcon.js +39 -39
- package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
- package/dist/esm/components/ConsoleLogCard.js +98 -86
- package/dist/esm/components/EndOfListFooter.d.ts +5 -1
- package/dist/esm/components/EndOfListFooter.js +36 -14
- package/dist/esm/components/Inspector/AnalyticsTab.js +47 -315
- package/dist/esm/components/Inspector/ConsoleTab.js +61 -116
- package/dist/esm/components/Inspector/CrashDetail.js +49 -49
- package/dist/esm/components/Inspector/CrashTab.js +75 -65
- package/dist/esm/components/Inspector/DebuggingTab.js +31 -31
- package/dist/esm/components/Inspector/DeviceInfoTab.js +146 -144
- package/dist/esm/components/Inspector/InspectorHeader.js +5 -5
- package/dist/esm/components/Inspector/LogDetail.js +1 -1
- package/dist/esm/components/Inspector/MainScreen.js +51 -53
- package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
- package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
- package/dist/esm/components/Inspector/NetworkTab.js +63 -63
- package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
- package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
- package/dist/esm/components/Inspector/ReduxDetail.js +1 -1
- package/dist/esm/components/Inspector/ReduxTab.js +163 -150
- package/dist/esm/components/Inspector/SettingsPanel.js +136 -188
- package/dist/esm/components/Inspector/StorageTab.js +88 -84
- package/dist/esm/components/Inspector/TabBar.js +37 -34
- package/dist/esm/components/JsonViewer.js +173 -168
- package/dist/esm/components/LogCard.js +38 -42
- package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
- package/dist/esm/components/SegmentedTabs.d.ts +4 -1
- package/dist/esm/components/SegmentedTabs.js +8 -8
- package/dist/esm/constants/index.js +1 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/networkLogger.js +1 -2
- package/dist/esm/helpers/index.d.ts +6 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/helpers/memoryManager.d.ts +0 -1
- package/dist/esm/helpers/memoryManager.js +1 -1
- package/dist/esm/helpers/remoteConfig.js +1 -1
- package/dist/esm/helpers/settingsStore.js +1 -1
- package/dist/esm/i18n/index.d.ts +35 -0
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -0
- package/dist/esm/i18n/locales/de.json +1 -0
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -0
- package/dist/esm/i18n/locales/fr.json +1 -0
- package/dist/esm/i18n/locales/hi.json +1 -0
- package/dist/esm/i18n/locales/ja.json +1 -0
- package/dist/esm/i18n/locales/ko.json +1 -0
- package/dist/esm/i18n/locales/pt.json +1 -0
- package/dist/esm/i18n/locales/ru.json +1 -0
- package/dist/esm/i18n/locales/zh.json +1 -0
- package/dist/esm/index.d.ts +2 -4
- package/dist/esm/index.js +5 -5
- package/dist/esm/styles/AppColors.d.ts +40 -0
- package/dist/esm/styles/AppColors.js +1 -1
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/enums.d.ts +0 -20
- package/dist/esm/types/enums.js +1 -1
- package/package.json +1 -15
- package/dist/commonjs/bundle.d.ts +0 -2
- package/dist/commonjs/bundle.js +0 -1
- package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
- package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
- package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
- package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
- package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
- package/dist/commonjs/customHooks/performanceTracker.js +0 -63
- package/dist/commonjs/performance.d.ts +0 -2
- package/dist/commonjs/performance.js +0 -1
- package/dist/esm/bundle.d.ts +0 -2
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
- package/dist/esm/components/Inspector/BundleTab.js +0 -1297
- package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
- package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
- package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
- package/dist/esm/customHooks/performanceTracker.js +0 -63
- package/dist/esm/performance.d.ts +0 -2
- package/dist/esm/performance.js +0 -1
|
@@ -1,129 +1,74 @@
|
|
|
1
|
-
import
|
|
2
|
-
<
|
|
3
|
-
</
|
|
4
|
-
<
|
|
5
|
-
{r===
|
|
6
|
-
</
|
|
7
|
-
</S>;{const
|
|
8
|
-
<
|
|
9
|
-
Filtered by {
|
|
10
|
-
</
|
|
11
|
-
</S>}},[
|
|
12
|
-
<S style={{backgroundColor:
|
|
13
|
-
<S style={[
|
|
14
|
-
<S style={[
|
|
15
|
-
<
|
|
16
|
-
<
|
|
17
|
-
{
|
|
18
|
-
<S style={{backgroundColor:`${
|
|
19
|
-
<
|
|
20
|
-
{
|
|
21
|
-
</
|
|
1
|
+
import $,{useCallback as O,useMemo as B,useRef as eo}from"react";import{FlatList as So,Platform as ho,Pressable as Co,ScrollView as D,Text as A,TextInput as Io,View as S}from"react-native";import{useInspector as To}from"./InspectorContext";import{useTranslation as xo}from"../../i18n";import V from"../TouchableScale";import Ao from"../AnimatedEntrance";import{ConsoleLogCard as Lo}from"../ConsoleLogCard";import Po from"../EmptyState";import Vo from"../EndOfListFooter";import C from"../../styles";import{AppColors as o}from"../../styles/AppColors";import{AppFonts as z}from"../../styles/AppFonts";import{LogFilter as L}from"../../types";import{SearchIcon as Bo,ClearIcon as Fo,SortArrowIcon as Ho,TrashIcon as Eo,LayersIcon as Ro,UserIcon as $o,InfoCircleIcon as Oo,WarningTriangleIcon as Wo,ErrorCircleIcon as No,AnalyticsIcon as Uo,HeaderPauseIcon as Do}from"../NetworkIcons";const Go=$.memo(()=>{const{t:b}=xo(),{logSearch:h,setLogSearch:k,logSortOrder:G,setLogSortOrder:v,handleDelete:M,logFilters:w,setLogFilters:F,logCounts:T,filteredConsoleLogs:f,visibleConsoleLogs:W,isConsolePaused:H,setIsConsolePaused:_}=To(),Q=eo(null),[N,Y]=$.useState(100),E=B(()=>f.slice(0,N),[f,N]),K=O(({item:e,index:r})=><Ao index={r}distance={8}>
|
|
2
|
+
<Lo item={e}searchStr={h}/>
|
|
3
|
+
</Ao>,[h]),X=O((e,r)=>({length:148,offset:148*r,index:r}),[]),j=O((e,r)=>e?.id?.toString()??r.toString(),[]),q=B(()=>{const e=W.length,r=f.length;if(w.has("all")||!Array.from(w).some(P=>P!=="all"))return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
|
|
4
|
+
<A style={{fontFamily:z.interMedium,fontSize:11,color:o.grayTextWeak,letterSpacing:.2}}>
|
|
5
|
+
{r===e?`Showing ${e} logs`:`Showing ${r} of ${e} logs`}
|
|
6
|
+
</A>
|
|
7
|
+
</S>;{const P=Array.from(w).filter(I=>I!=="all").map(I=>I==="user-log"?"Log":I==="analytics"?"Analytics":I.charAt(0).toUpperCase()+I.slice(1));return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
|
|
8
|
+
<A style={{fontFamily:z.interMedium,fontSize:11,color:o.grayTextWeak,letterSpacing:.2}}>
|
|
9
|
+
Filtered by {P.join(", ")} ({r} of {e} logs)
|
|
10
|
+
</A>
|
|
11
|
+
</S>}},[W.length,f.length,w]),[R,U]=$.useState(!1),J=B(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]"],[]),Z=B(()=>[{id:L.All,label:b("common.all","All"),count:T.all?.split("/")?.[0]??"0",color:o.purple,Icon:Ro},{id:L.UserLog,label:b("console.log","Log"),count:T["user-log"]?.split("/")?.[0]??"0",color:o.teal600,Icon:$o},{id:L.Info,label:b("console.info","Info"),count:T.info?.split("/")?.[0]??"0",color:o.sky600,Icon:Oo},{id:L.Warn,label:b("console.warning","Warn"),count:T.warn?.split("/")?.[0]??"0",color:o.amber600,Icon:Wo},{id:L.Error,label:b("console.error","Error"),count:T.error?.split("/")?.[0]??"0",color:o.errorColor,Icon:No},{id:L.Analytics,label:b("console.analytics","Analytics"),count:T.analytics?.split("/")?.[0]??"0",color:o.violet600,Icon:Uo}],[T,b]);return<S style={{flex:1}}>
|
|
12
|
+
<S style={{backgroundColor:o.white,borderBottomWidth:1,borderBottomColor:o.dividerColor,paddingBottom:6}}>
|
|
13
|
+
<S style={[C.toolbarRow,{marginTop:12,marginBottom:8}]}>
|
|
14
|
+
<S style={[C.searchContainer,R&&{borderColor:o.purple,borderWidth:1.5}]}>
|
|
15
|
+
<Bo color={R?o.purple:o.grayTextWeak}size={16}/>
|
|
16
|
+
<Io placeholder={b("console.searchPlaceholder")}placeholderTextColor={o.grayTextWeak}value={h}onChangeText={k}onFocus={()=>U(!0)}onBlur={()=>U(!1)}style={C.searchInput}autoCorrect={!1}autoCapitalize="none"/>
|
|
17
|
+
{h.length>0&&<S style={{flexDirection:"row",alignItems:"center",gap:4}}>
|
|
18
|
+
<S style={{backgroundColor:`${o.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:2}}>
|
|
19
|
+
<A style={{color:o.purple,fontSize:10,fontFamily:z.interBold}}>
|
|
20
|
+
{f.length}
|
|
21
|
+
</A>
|
|
22
22
|
</S>
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
</
|
|
23
|
+
<Co onPress={()=>k("")}hitSlop={10}style={C.clearBtn}>
|
|
24
|
+
<Fo color={o.grayTextWeak}size={14}/>
|
|
25
|
+
</Co>
|
|
26
26
|
</S>}
|
|
27
27
|
</S>
|
|
28
28
|
|
|
29
|
-
<S style={
|
|
30
|
-
<
|
|
31
|
-
<
|
|
32
|
-
</
|
|
33
|
-
<
|
|
34
|
-
<
|
|
35
|
-
</
|
|
36
|
-
<
|
|
37
|
-
<
|
|
38
|
-
</
|
|
29
|
+
<S style={C.toolbarRight}>
|
|
30
|
+
<V style={[C.toolbarBtn,H&&{borderColor:`${o.darkOrange}50`,backgroundColor:`${o.darkOrange}18`}]}onPress={()=>_(e=>!e)}hitSlop={6}>
|
|
31
|
+
<Do isPaused={H}color={H?o.darkOrange:o.grayTextStrong}size={16}/>
|
|
32
|
+
</V>
|
|
33
|
+
<V style={C.toolbarBtn}onPress={()=>v(e=>e==="newest"?"oldest":"newest")}hitSlop={10}>
|
|
34
|
+
<Ho color={o.grayTextStrong}size={18}direction={G==="newest"?"down":"up"}/>
|
|
35
|
+
</V>
|
|
36
|
+
<V style={[C.toolbarBtn,{borderColor:`${o.errorColor}38`,backgroundColor:`${o.errorColor}0F`}]}onPress={M}hitSlop={6}>
|
|
37
|
+
<Eo color={o.errorColor}size={15}/>
|
|
38
|
+
</V>
|
|
39
39
|
</S>
|
|
40
40
|
</S>
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
{(
|
|
44
|
-
{
|
|
45
|
-
<S style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:r?
|
|
46
|
-
<
|
|
47
|
-
{
|
|
48
|
-
</
|
|
43
|
+
{(R||h.length>0)&&<D horizontal showsHorizontalScrollIndicator={!1}style={{marginBottom:6,maxHeight:30}}contentContainerStyle={{paddingHorizontal:16,flexDirection:"row",alignItems:"center",gap:6}}>
|
|
44
|
+
{J.map(e=>{const r=h.includes(e);return<V key={e}onPress={()=>{k(r?t=>t.replace(e,"").trim():t=>t?`${t} ${e}`.trim():e)}}>
|
|
45
|
+
<S style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:r?o.purple:`${o.purple}14`,borderWidth:1,borderColor:r?o.purple:`${o.purple}30`}}>
|
|
46
|
+
<A style={{fontFamily:z.interBold,fontSize:10,color:r?o.white:o.purple}}>
|
|
47
|
+
{e}
|
|
48
|
+
</A>
|
|
49
49
|
</S>
|
|
50
|
-
</
|
|
51
|
-
</
|
|
50
|
+
</V>})}
|
|
51
|
+
</D>}
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
<S style={{flexDirection:"row",alignItems:"center",gap:
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
{
|
|
61
|
-
</
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
{(()=>{const o=C.has("user-log");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("user-log")?t.delete("user-log"):t.add("user-log"),t.size===0&&t.add("all"),t})}}>
|
|
68
|
-
<S style={[b.statusFilterChip,{backgroundColor:o?e.teal600:e.teal100,borderColor:o?e.teal600:e.teal400,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.teal600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
|
|
69
|
-
<S style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
70
|
-
<He size={13}color={o?e.white:e.teal600}/>
|
|
71
|
-
<T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.teal600,fontFamily:V.interBold}]}>
|
|
72
|
-
{A("console.log","Log")} ({R["user-log"]})
|
|
73
|
-
</T>
|
|
74
|
-
</S>
|
|
75
|
-
</S>
|
|
76
|
-
</I>})()}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
{(()=>{const o=C.has("info");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("info")?t.delete("info"):t.add("info"),t.size===0&&t.add("all"),t})}}>
|
|
80
|
-
<S style={[b.statusFilterChip,{backgroundColor:o?e.sky600:e.sky100,borderColor:o?e.blue700:e.sky400,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.sky600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
|
|
81
|
-
<S style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
82
|
-
<Ee size={13}color={o?e.white:e.sky600}/>
|
|
83
|
-
<T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.sky600,fontFamily:V.interBold}]}>
|
|
84
|
-
{A("console.info","Info")} ({R.info})
|
|
85
|
-
</T>
|
|
86
|
-
</S>
|
|
87
|
-
</S>
|
|
88
|
-
</I>})()}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{(()=>{const o=C.has("warn");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("warn")?t.delete("warn"):t.add("warn"),t.size===0&&t.add("all"),t})}}>
|
|
92
|
-
<S style={[b.statusFilterChip,{backgroundColor:o?e.amber600:e.amber100,borderColor:o?e.amber700:e.amber200,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.amber600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
|
|
93
|
-
<S style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
94
|
-
<We size={13}color={o?e.white:e.amber700}/>
|
|
95
|
-
<T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.amber800Warm,fontFamily:V.interBold}]}>
|
|
96
|
-
{A("console.warning","Warn")} ({R.warn})
|
|
97
|
-
</T>
|
|
98
|
-
</S>
|
|
99
|
-
</S>
|
|
100
|
-
</I>})()}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
{(()=>{const o=C.has("error");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("error")?t.delete("error"):t.add("error"),t.size===0&&t.add("all"),t})}}>
|
|
104
|
-
<S style={[b.statusFilterChip,{backgroundColor:o?e.red500:e.red100,borderColor:o?e.red600:e.errorBorder,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.red500,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
|
|
105
|
-
<S style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
106
|
-
<De size={13}color={o?e.white:e.red500}/>
|
|
107
|
-
<T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.redErrorText,fontFamily:V.interBold}]}>
|
|
108
|
-
{A("console.error","Error")} ({R.error})
|
|
109
|
-
</T>
|
|
110
|
-
</S>
|
|
111
|
-
</S>
|
|
112
|
-
</I>})()}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
{(()=>{const o=C.has("analytics");return<I onPress={()=>{O(r=>{const t=new Set(r);return t.delete("all"),t.has("analytics")?t.delete("analytics"):t.add("analytics"),t.size===0&&t.add("all"),t})}}>
|
|
116
|
-
<S style={[b.statusFilterChip,{backgroundColor:o?e.violet600:e.purple100,borderColor:o?e.purple700:e.purple200,borderRadius:8,paddingHorizontal:10,paddingVertical:6},o&&{shadowColor:e.violet600,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2.5,elevation:2}]}>
|
|
117
|
-
<S style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
118
|
-
<$e size={13}color={o?e.white:e.violet600}/>
|
|
119
|
-
<T numberOfLines={1}style={[b.statusFilterText,{color:o?e.white:e.purpleText,fontFamily:V.interBold}]}>
|
|
120
|
-
{A("console.analytics","Analytics")} ({R.analytics})
|
|
121
|
-
</T>
|
|
53
|
+
|
|
54
|
+
<S style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:12,gap:6}}>
|
|
55
|
+
<D horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
|
|
56
|
+
{Z.map(e=>{const r=e.id==="all"?w.has("all"):w.has(e.id)&&!w.has("all"),t=e.color||o.purple,P=r?o.white:t,I=e.Icon;return<V key={e.id}onPress={()=>{e.id==="all"?F(new Set(["all"])):F(oo=>{const x=new Set(oo);return x.delete("all"),x.has(e.id)?x.delete(e.id):x.add(e.id),x.size===0&&x.add("all"),x})}}>
|
|
57
|
+
<S style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:r?t:`${t}12`,borderWidth:1,borderColor:r?t:`${t}30`,gap:5}}>
|
|
58
|
+
<I size={11}color={P}/>
|
|
59
|
+
<A style={{fontFamily:z.interBold,fontSize:10.5,color:r?o.white:o.primaryBlack}}>
|
|
60
|
+
{e.label}
|
|
61
|
+
</A>
|
|
62
|
+
<S style={{backgroundColor:r?"rgba(255,255,255,0.25)":`${t}20`,paddingHorizontal:5,paddingVertical:1,borderRadius:8}}>
|
|
63
|
+
<A style={{fontFamily:z.interBold,fontSize:9,color:r?o.white:t}}>
|
|
64
|
+
{e.count}
|
|
65
|
+
</A>
|
|
66
|
+
</S>
|
|
122
67
|
</S>
|
|
123
|
-
</
|
|
124
|
-
|
|
125
|
-
</
|
|
68
|
+
</V>})}
|
|
69
|
+
</D>
|
|
70
|
+
</S>
|
|
126
71
|
</S>
|
|
127
72
|
|
|
128
|
-
<
|
|
129
|
-
</S>});export default
|
|
73
|
+
<So ref={Q}data={E}keyExtractor={j}ListHeaderComponent={q}renderItem={K}getItemLayout={X}initialNumToRender={15}maxToRenderPerBatch={10}windowSize={9}removeClippedSubviews={ho.OS==="android"}renderToHardwareTextureAndroid={!0}ListEmptyComponent={<Po isSearch={h.length>0||!w.has("all")}searchQuery={h}customTitle={h.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{k(""),F(new Set(["all"]))}}/>}ListFooterComponent={f.length>0?<Vo count={E.length}totalCount={f.length}label="logs"hasMore={E.length<f.length}onLoadMore={()=>Y(e=>e+10)}/>:null}contentContainerStyle={[C.listContent,f.length===0&&{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
|
|
74
|
+
</S>});export default Go;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import ae,{useMemo as L,useState as
|
|
1
|
+
import ae,{useMemo as L,useState as H}from"react";import{Platform as W,ScrollView as E,StyleSheet as ie,Text as S,TextInput as Ce,View as C}from"react-native";import{useTranslation as Te}from"../../i18n";import{useInspector as xe}from"./InspectorContext";import D from"../TouchableScale";import Se from"../SegmentedTabs";import Q from"../HighlightText";import _ from"../JsonViewer";import $ from"../CopyButton";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as V}from"../../styles/AppFonts";import{exportCrashReport as Be,parseCrashStackTrace as Ve}from"../../customHooks/crashHandler";import{copyToClipboard as q}from"../../helpers";import{SearchIcon as Ie,ClearIcon as Fe,CopyIcon as K,TerminalIcon as Re,LayersIcon as X,ClockIcon as Le,CircleCheckIcon as Y,GlobeIcon as He,AppleIcon as De,AndroidIcon as Ae,StackTraceIcon as We,DiagnosticsIcon as $e,TrailIcon as Me,RawJsonIcon as Oe,AppFramesIcon as Ge,AllFramesIcon as Je}from"../NetworkIcons";const Ne=ae.memo(()=>{const{t:B}=Te(),{selectedCrash:T}=xe(),[F,Z]=H("stack"),[R,G]=H(""),[I,j]=H("app"),[A,J]=H(!1),[N,P]=H(null);if(!T)return null;const z=L(()=>T.parsedStack&&T.parsedStack.length>0?T.parsedStack:T.stack?Ve(T.stack):[],[T]),ee=L(()=>{try{return JSON.parse(JSON.stringify(T))}catch{return T}},[T]),v=L(()=>z.filter(x=>x.isAppCode),[z]),U=L(()=>I==="app"&&v.length>0?v:z,[I,v,z]),M=L(()=>v[0]||z[0]||null,[v,z]),re=()=>{const x=Be(T);q(x,"Crash Report"),J(!0),setTimeout(()=>J(!1),2e3)},te=(x,k)=>{const O=x.raw||`${x.method}@${x.file}:${x.lineNumber}:${x.column}`;q(O,"Stack Frame"),P(k),setTimeout(()=>P(null),1500)},oe=[{key:"stack",label:B("crash.tabStack",{count:z.length}),icon:x=><We size={12}color={x?e.white:e.grayText}/>},{key:"diagnostics",label:B("crash.tabDiagnostics"),icon:x=><$e size={12}color={x?e.white:e.grayText}/>},{key:"breadcrumbs",label:B("crash.tabTrail",{count:T.breadcrumbs?.length||0}),icon:x=><Me size={12}color={x?e.white:e.grayText}/>},{key:"raw",label:B("crash.tabRawJson"),icon:x=><Oe size={12}color={x?e.white:e.grayText}/>}];return<C style={{flex:1,backgroundColor:e.grayBackground}}>
|
|
2
2
|
|
|
3
3
|
<C style={{paddingHorizontal:8,paddingTop:6}}>
|
|
4
4
|
<C style={r.infoBar}>
|
|
@@ -8,7 +8,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
8
8
|
<C style={[r.pillBadge,{backgroundColor:T.isFatal?e.errorCardBg:e.amberBg,borderColor:T.isFatal?e.errorBorder:e.amberWarmBorder}]}>
|
|
9
9
|
<C style={[r.statusDot,{backgroundColor:T.isFatal?e.red600:e.amber600}]}/>
|
|
10
10
|
<S style={[r.pillBadgeText,{color:T.isFatal?e.redErrorText:e.amberWarmText}]}>
|
|
11
|
-
{T.isFatal?
|
|
11
|
+
{T.isFatal?B("crash.fatalCrash"):B("crash.handledException")}
|
|
12
12
|
</S>
|
|
13
13
|
</C>
|
|
14
14
|
|
|
@@ -22,12 +22,12 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
22
22
|
<C style={{flex:1}}/>
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
<
|
|
25
|
+
<D onPress={re}hitSlop={10}style={[r.actionButton,A&&{backgroundColor:e.mintGreenBg,borderColor:e.mintGreenBorder}]}>
|
|
26
26
|
{A?<Y color={e.mintGreenText}size={12}/>:<K color={e.purple}size={12}/>}
|
|
27
27
|
<S style={[r.actionButtonText,A&&{color:e.mintGreenText}]}>
|
|
28
|
-
{
|
|
28
|
+
{B(A?"crash.copied":"crash.copyReport")}
|
|
29
29
|
</S>
|
|
30
|
-
</
|
|
30
|
+
</D>
|
|
31
31
|
</C>
|
|
32
32
|
|
|
33
33
|
|
|
@@ -36,11 +36,11 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
36
36
|
</S>
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
<
|
|
40
|
-
{
|
|
39
|
+
<E horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.metaRow}>
|
|
40
|
+
{M&&<C style={r.metaChip}>
|
|
41
41
|
<Re color={e.grayText}size={11}/>
|
|
42
42
|
<S style={r.metaChipText}numberOfLines={2}>
|
|
43
|
-
{
|
|
43
|
+
{M.file}:{M.lineNumber}
|
|
44
44
|
</S>
|
|
45
45
|
</C>}
|
|
46
46
|
|
|
@@ -52,12 +52,12 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
52
52
|
</C>
|
|
53
53
|
|
|
54
54
|
{T.deviceInfo?.platform&&<C style={r.metaChip}>
|
|
55
|
-
{T.deviceInfo.platform==="ios"?<
|
|
55
|
+
{T.deviceInfo.platform==="ios"?<De color={e.grayText}size={11}/>:<Ae color={e.grayText}size={11}/>}
|
|
56
56
|
<S style={r.metaChipText}>
|
|
57
57
|
{T.deviceInfo.platform.toUpperCase()} {T.deviceInfo.osVersion}
|
|
58
58
|
</S>
|
|
59
59
|
</C>}
|
|
60
|
-
</
|
|
60
|
+
</E>
|
|
61
61
|
</C>
|
|
62
62
|
</C>
|
|
63
63
|
|
|
@@ -70,58 +70,58 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
70
70
|
{(F==="stack"||F==="raw")&&<C style={{paddingHorizontal:12,paddingBottom:6}}>
|
|
71
71
|
<C style={r.searchContainer}>
|
|
72
72
|
<Ie color={e.grayText}size={14}/>
|
|
73
|
-
<Ce style={r.searchInput}placeholder={
|
|
74
|
-
{R.length>0&&<
|
|
73
|
+
<Ce style={r.searchInput}placeholder={B("crash.searchDetailPlaceholder")}placeholderTextColor={e.grayTextWeak}value={R}onChangeText={G}autoCapitalize="none"autoCorrect={!1}/>
|
|
74
|
+
{R.length>0&&<D onPress={()=>G("")}hitSlop={10}>
|
|
75
75
|
<Fe color={e.grayText}size={13}/>
|
|
76
|
-
</
|
|
76
|
+
</D>}
|
|
77
77
|
</C>
|
|
78
78
|
</C>}
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
<
|
|
81
|
+
<E style={{flex:1}}contentContainerStyle={{padding:12,paddingBottom:40,gap:12}}>
|
|
82
82
|
|
|
83
83
|
{F==="stack"&&<C style={{gap:10}}>
|
|
84
84
|
|
|
85
85
|
<C style={r.filterChipsRow}>
|
|
86
|
-
<
|
|
87
|
-
<
|
|
86
|
+
<D onPress={()=>j("app")}style={[r.filterChip,I==="app"&&r.filterChipActive]}>
|
|
87
|
+
<Ge size={12}color={I==="app"?e.white:e.purple}/>
|
|
88
88
|
<S style={[r.filterChipText,I==="app"&&r.filterChipTextActive]}>
|
|
89
|
-
{
|
|
89
|
+
{B("crash.appFrames",{count:v.length})}
|
|
90
90
|
</S>
|
|
91
|
-
</
|
|
91
|
+
</D>
|
|
92
92
|
|
|
93
|
-
<
|
|
94
|
-
<
|
|
93
|
+
<D onPress={()=>j("all")}style={[r.filterChip,I==="all"&&r.filterChipActive]}>
|
|
94
|
+
<Je size={12}color={I==="all"?e.white:e.purple}/>
|
|
95
95
|
<S style={[r.filterChipText,I==="all"&&r.filterChipTextActive]}>
|
|
96
|
-
{
|
|
96
|
+
{B("crash.allFrames",{count:z.length})}
|
|
97
97
|
</S>
|
|
98
|
-
</
|
|
98
|
+
</D>
|
|
99
99
|
</C>
|
|
100
100
|
|
|
101
101
|
|
|
102
|
-
{
|
|
102
|
+
{U.length>0?U.filter(x=>{if(!R.trim())return!0;const k=R.toLowerCase();return x.method.toLowerCase().includes(k)||x.file.toLowerCase().includes(k)}).map((x,k)=>{const O=k===0&&x.isAppCode;return<C key={`frame_${k}`}style={[r.frameCard,O&&r.originFrameCard]}>
|
|
103
103
|
<C style={r.frameCardHeader}>
|
|
104
104
|
<C style={r.frameIndexBadge}>
|
|
105
105
|
<S style={r.frameIndexBadgeText}>
|
|
106
106
|
#{k+1}
|
|
107
107
|
</S>
|
|
108
108
|
</C>
|
|
109
|
-
<C style={[r.frameTypeBadge,x.isAppCode?{backgroundColor:
|
|
110
|
-
<S style={[r.frameTypeBadgeText,x.isAppCode?{color:
|
|
111
|
-
{x.isAppCode?
|
|
109
|
+
<C style={[r.frameTypeBadge,x.isAppCode?{backgroundColor:e.greenSuccessBg,borderColor:e.greenSuccessBorder}:{backgroundColor:e.slate100,borderColor:e.slate200}]}>
|
|
110
|
+
<S style={[r.frameTypeBadgeText,x.isAppCode?{color:e.emerald600}:{color:e.slate500}]}>
|
|
111
|
+
{x.isAppCode?B("crash.frameApp"):B("crash.frameLib")}
|
|
112
112
|
</S>
|
|
113
113
|
</C>
|
|
114
114
|
|
|
115
115
|
<S style={r.frameMethodText}numberOfLines={1}>
|
|
116
|
-
<Q text={x.method||
|
|
116
|
+
<Q text={x.method||B("crash.anonymous")}highlight={R}/>
|
|
117
117
|
</S>
|
|
118
118
|
|
|
119
|
-
<
|
|
120
|
-
{
|
|
119
|
+
<D onPress={()=>te(x,k)}hitSlop={8}style={r.frameCopyBtn}>
|
|
120
|
+
{N===k?<Y color={e.greenColor}size={12}/>:<K color={e.grayText}size={12}/>}
|
|
121
121
|
<S style={r.frameCopyBtnText}>
|
|
122
|
-
{
|
|
122
|
+
{B(N===k?"crash.frameCopied":"crash.frameCopy")}
|
|
123
123
|
</S>
|
|
124
|
-
</
|
|
124
|
+
</D>
|
|
125
125
|
</C>
|
|
126
126
|
|
|
127
127
|
<C style={r.frameLocationRow}>
|
|
@@ -139,7 +139,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
139
139
|
</S>}
|
|
140
140
|
</C>}):<C style={r.emptyContainer}>
|
|
141
141
|
<S style={r.emptyText}>
|
|
142
|
-
{T.stack?T.stack:
|
|
142
|
+
{T.stack?T.stack:B("crash.noStackTrace")}
|
|
143
143
|
</S>
|
|
144
144
|
</C>}
|
|
145
145
|
|
|
@@ -147,7 +147,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
147
147
|
<C style={r.sectionCardHeader}>
|
|
148
148
|
<X color={e.purple}size={14}/>
|
|
149
149
|
<S style={r.sectionCardTitle}>
|
|
150
|
-
{
|
|
150
|
+
{B("crash.componentHierarchy")}
|
|
151
151
|
</S>
|
|
152
152
|
</C>
|
|
153
153
|
<S style={r.componentStackText}>
|
|
@@ -162,9 +162,9 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
162
162
|
<C style={r.sectionCard}>
|
|
163
163
|
<C style={[r.sectionCardHeader,{justifyContent:"space-between"}]}>
|
|
164
164
|
<C style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
165
|
-
<
|
|
165
|
+
<He color={e.purple}size={14}/>
|
|
166
166
|
<S style={r.sectionCardTitle}>
|
|
167
|
-
{
|
|
167
|
+
{B("crash.deviceEnvironment")}
|
|
168
168
|
</S>
|
|
169
169
|
</C>
|
|
170
170
|
<$ value={T.deviceInfo||{platform:W.OS,osVersion:String(W.Version)}}label="Diagnostics"/>
|
|
@@ -172,42 +172,42 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
172
172
|
|
|
173
173
|
<C style={r.diagGrid}>
|
|
174
174
|
<C style={r.diagItem}>
|
|
175
|
-
<S style={r.diagLabel}>{
|
|
175
|
+
<S style={r.diagLabel}>{B("crash.platform")}</S>
|
|
176
176
|
<S style={r.diagValue}>
|
|
177
177
|
{T.deviceInfo?.platform?.toUpperCase()||W.OS.toUpperCase()}
|
|
178
178
|
</S>
|
|
179
179
|
</C>
|
|
180
180
|
|
|
181
181
|
<C style={r.diagItem}>
|
|
182
|
-
<S style={r.diagLabel}>{
|
|
182
|
+
<S style={r.diagLabel}>{B("crash.osVersion")}</S>
|
|
183
183
|
<S style={r.diagValue}>
|
|
184
184
|
{T.deviceInfo?.osVersion||String(W.Version)}
|
|
185
185
|
</S>
|
|
186
186
|
</C>
|
|
187
187
|
|
|
188
188
|
<C style={r.diagItem}>
|
|
189
|
-
<S style={r.diagLabel}>{
|
|
189
|
+
<S style={r.diagLabel}>{B("crash.reactNative")}</S>
|
|
190
190
|
<S style={r.diagValue}>
|
|
191
191
|
{T.deviceInfo?.rnVersion||"0.74+"}
|
|
192
192
|
</S>
|
|
193
193
|
</C>
|
|
194
194
|
|
|
195
195
|
<C style={r.diagItem}>
|
|
196
|
-
<S style={r.diagLabel}>{
|
|
196
|
+
<S style={r.diagLabel}>{B("crash.jsEngine")}</S>
|
|
197
197
|
<S style={r.diagValue}>
|
|
198
|
-
{T.deviceInfo?.isHermes?
|
|
198
|
+
{T.deviceInfo?.isHermes?B("crash.hermesEngine"):B("crash.jsc")}
|
|
199
199
|
</S>
|
|
200
200
|
</C>
|
|
201
201
|
|
|
202
202
|
<C style={r.diagItem}>
|
|
203
|
-
<S style={r.diagLabel}>{
|
|
203
|
+
<S style={r.diagLabel}>{B("crash.architecture")}</S>
|
|
204
204
|
<S style={r.diagValue}>
|
|
205
|
-
{T.deviceInfo?.isFabric?
|
|
205
|
+
{T.deviceInfo?.isFabric?B("crash.fabricNewArch"):B("crash.paperLegacy")}
|
|
206
206
|
</S>
|
|
207
207
|
</C>
|
|
208
208
|
|
|
209
209
|
<C style={r.diagItem}>
|
|
210
|
-
<S style={r.diagLabel}>{
|
|
210
|
+
<S style={r.diagLabel}>{B("crash.appState")}</S>
|
|
211
211
|
<S style={r.diagValue}>
|
|
212
212
|
{T.deviceInfo?.appState||"active"}
|
|
213
213
|
</S>
|
|
@@ -221,7 +221,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
221
221
|
<C style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
222
222
|
<X color={e.purple}size={14}/>
|
|
223
223
|
<S style={r.sectionCardTitle}>
|
|
224
|
-
{
|
|
224
|
+
{B("crash.jsHeapMemory")}
|
|
225
225
|
</S>
|
|
226
226
|
</C>
|
|
227
227
|
<$ value={T.memoryInfo}label="Memory Info"/>
|
|
@@ -229,14 +229,14 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
229
229
|
|
|
230
230
|
<C style={r.diagGrid}>
|
|
231
231
|
<C style={r.diagItem}>
|
|
232
|
-
<S style={r.diagLabel}>{
|
|
232
|
+
<S style={r.diagLabel}>{B("crash.usedHeap")}</S>
|
|
233
233
|
<S style={r.diagValue}>
|
|
234
234
|
{T.memoryInfo.usedJSHeapSize} MB
|
|
235
235
|
</S>
|
|
236
236
|
</C>
|
|
237
237
|
|
|
238
238
|
<C style={r.diagItem}>
|
|
239
|
-
<S style={r.diagLabel}>{
|
|
239
|
+
<S style={r.diagLabel}>{B("crash.totalHeap")}</S>
|
|
240
240
|
<S style={r.diagValue}>
|
|
241
241
|
{T.memoryInfo.totalJSHeapSize} MB
|
|
242
242
|
</S>
|
|
@@ -270,7 +270,7 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
270
270
|
</C>}
|
|
271
271
|
</C>):<C style={r.emptyContainer}>
|
|
272
272
|
<S style={r.emptyText}>
|
|
273
|
-
{
|
|
273
|
+
{B("crash.noBreadcrumbs")}
|
|
274
274
|
</S>
|
|
275
275
|
</C>}
|
|
276
276
|
</C>}
|
|
@@ -279,5 +279,5 @@ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollVie
|
|
|
279
279
|
{F==="raw"&&<C style={r.rawContainer}>
|
|
280
280
|
<_ data={ee}search={R}wrap/>
|
|
281
281
|
</C>}
|
|
282
|
-
</
|
|
283
|
-
</C>});export default
|
|
282
|
+
</E>
|
|
283
|
+
</C>});export default Ne;const r=ie.create({infoBar:{backgroundColor:e.primaryLight,borderRadius:12,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,shadowColor:e.black,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:2,gap:8},badgeRow:{flexDirection:"row",alignItems:"center",gap:8},pillBadge:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:3,borderRadius:12,borderWidth:1,gap:5},statusDot:{width:6,height:6,borderRadius:3},pillBadgeText:{fontFamily:V.interBold,fontSize:9.5,letterSpacing:.4},actionButton:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.purple}14`,borderColor:`${e.purple}33`,borderWidth:1,paddingHorizontal:8,paddingVertical:4,borderRadius:8},actionButtonText:{fontFamily:V.interBold,fontSize:10.5,color:e.purple},titleText:{fontFamily:V.interBold,fontSize:14,color:e.primaryBlack,lineHeight:19},metaRow:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:2},metaChip:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:e.grayBackground,paddingHorizontal:7,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:e.dividerColor},metaChipText:{fontFamily:V.interMedium,fontSize:10,color:e.grayText},searchContainer:{flexDirection:"row",alignItems:"center",backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary,borderRadius:8,paddingHorizontal:10,height:36,gap:8},searchInput:{flex:1,fontFamily:V.interRegular,fontSize:12,color:e.primaryBlack,paddingVertical:0},filterChipsRow:{flexDirection:"row",alignItems:"center",gap:8},filterChip:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary},filterChipActive:{backgroundColor:e.purple,borderColor:e.purple},filterChipText:{fontFamily:V.interMedium,fontSize:11,color:e.grayText},filterChipTextActive:{fontFamily:V.interBold,color:e.white},frameCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},originFrameCard:{borderColor:e.greenMintBorder,backgroundColor:e.greenMintBg},frameCardHeader:{flexDirection:"row",alignItems:"center",gap:8},frameIndexBadge:{minWidth:24,height:18,paddingHorizontal:4,borderRadius:4,backgroundColor:`${e.purple}14`,alignItems:"center",justifyContent:"center"},frameIndexBadgeText:{fontFamily:V.interBold,fontSize:9,color:e.purple},frameTypeBadge:{paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1},frameTypeBadgeText:{fontFamily:V.interBold,fontSize:8.5},frameMethodText:{fontFamily:V.interBold,fontSize:12,color:e.primaryBlack,flex:1},frameLocationRow:{flexDirection:"row",alignItems:"center"},frameFileText:{fontFamily:V.interRegular,fontSize:11,color:e.grayText,flex:1},frameLineText:{fontFamily:V.interBold,fontSize:11,color:e.purple},frameCopyBtn:{flexDirection:"row",alignItems:"center",gap:3,paddingHorizontal:6,paddingVertical:3,borderRadius:5,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.dividerColor},frameCopyBtnText:{fontFamily:V.interBold,fontSize:9,color:e.grayText},frameRawText:{fontFamily:V.interRegular,fontSize:9.5,color:e.grayTextWeak,backgroundColor:`${e.primaryBlack}06`,borderRadius:5,paddingHorizontal:7,paddingVertical:4,overflow:"hidden"},componentStackText:{fontFamily:V.interRegular,fontSize:11,lineHeight:16,color:e.grayText,backgroundColor:`${e.primaryBlack}06`,borderRadius:6,padding:10},sectionCard:{backgroundColor:e.primaryLight,borderRadius:10,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,gap:10},sectionCardHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingBottom:6,borderBottomWidth:1,borderBottomColor:e.dividerColor},sectionCardTitle:{fontFamily:V.interBold,fontSize:12.5,color:e.primaryBlack},diagGrid:{flexDirection:"row",flexWrap:"wrap",rowGap:8,columnGap:12},diagItem:{width:"47%",gap:2},diagLabel:{fontFamily:V.interRegular,fontSize:10,color:e.grayTextWeak},diagValue:{fontFamily:V.interBold,fontSize:11.5,color:e.primaryBlack},breadcrumbCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},breadcrumbHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breadcrumbTag:{backgroundColor:`${e.purple}14`,paddingHorizontal:6,paddingVertical:2,borderRadius:4},breadcrumbTagText:{fontFamily:V.interBold,fontSize:9,color:e.purple},breadcrumbTime:{fontFamily:V.interRegular,fontSize:10,color:e.grayTextWeak},breadcrumbMessage:{fontFamily:V.interRegular,fontSize:11.5,color:e.primaryBlack,marginTop:2},rawContainer:{backgroundColor:e.primaryLight,borderRadius:10,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary},emptyContainer:{padding:16,alignItems:"center",justifyContent:"center",backgroundColor:e.primaryLight,borderRadius:8,borderWidth:1,borderColor:e.grayBorderSecondary},emptyText:{fontFamily:V.interRegular,fontSize:11,color:e.grayText,textAlign:"center"}});
|