react-native-inapp-inspector 2.3.24 → 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.
Files changed (145) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +8 -8
  2. package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
  3. package/dist/commonjs/components/AppHeaderLogo.js +1 -1
  4. package/dist/commonjs/components/BrandSquareIcon.js +12 -12
  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/AnalyticsTab.js +30 -298
  10. package/dist/commonjs/components/Inspector/ConsoleTab.js +38 -93
  11. package/dist/commonjs/components/Inspector/CrashDetail.js +12 -12
  12. package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
  13. package/dist/commonjs/components/Inspector/DebuggingTab.js +9 -9
  14. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +54 -52
  15. package/dist/commonjs/components/Inspector/InspectorHeader.js +1 -1
  16. package/dist/commonjs/components/Inspector/MainScreen.js +23 -25
  17. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
  18. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
  19. package/dist/commonjs/components/Inspector/NetworkTab.js +31 -31
  20. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
  21. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
  22. package/dist/commonjs/components/Inspector/ReduxTab.js +110 -97
  23. package/dist/commonjs/components/Inspector/SettingsPanel.js +48 -100
  24. package/dist/commonjs/components/Inspector/StorageTab.js +56 -52
  25. package/dist/commonjs/components/Inspector/TabBar.js +29 -26
  26. package/dist/commonjs/components/JsonViewer.js +169 -164
  27. package/dist/commonjs/components/LogCard.js +34 -38
  28. package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
  29. package/dist/commonjs/components/SegmentedTabs.d.ts +4 -1
  30. package/dist/commonjs/components/SegmentedTabs.js +8 -8
  31. package/dist/commonjs/constants/index.js +1 -1
  32. package/dist/commonjs/constants/version.d.ts +1 -1
  33. package/dist/commonjs/constants/version.js +1 -1
  34. package/dist/commonjs/customHooks/networkLogger.js +1 -2
  35. package/dist/commonjs/helpers/index.d.ts +6 -0
  36. package/dist/commonjs/helpers/index.js +4 -4
  37. package/dist/commonjs/helpers/memoryManager.d.ts +0 -1
  38. package/dist/commonjs/helpers/memoryManager.js +1 -1
  39. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  40. package/dist/commonjs/helpers/settingsStore.js +1 -1
  41. package/dist/commonjs/i18n/index.d.ts +35 -0
  42. package/dist/commonjs/i18n/index.js +1 -1
  43. package/dist/commonjs/i18n/locales/ar.json +1 -0
  44. package/dist/commonjs/i18n/locales/de.json +1 -0
  45. package/dist/commonjs/i18n/locales/en.json +1 -1
  46. package/dist/commonjs/i18n/locales/es.json +1 -0
  47. package/dist/commonjs/i18n/locales/fr.json +1 -0
  48. package/dist/commonjs/i18n/locales/hi.json +1 -0
  49. package/dist/commonjs/i18n/locales/ja.json +1 -0
  50. package/dist/commonjs/i18n/locales/ko.json +1 -0
  51. package/dist/commonjs/i18n/locales/pt.json +1 -0
  52. package/dist/commonjs/i18n/locales/ru.json +1 -0
  53. package/dist/commonjs/i18n/locales/zh.json +1 -0
  54. package/dist/commonjs/index.d.ts +2 -4
  55. package/dist/commonjs/index.js +2 -2
  56. package/dist/commonjs/styles/AppColors.d.ts +40 -0
  57. package/dist/commonjs/styles/AppColors.js +1 -1
  58. package/dist/commonjs/styles/index.js +1 -1
  59. package/dist/commonjs/types/enums.d.ts +0 -20
  60. package/dist/commonjs/types/enums.js +1 -1
  61. package/dist/esm/components/AnalyticsDetail.js +75 -75
  62. package/dist/esm/components/AnalyticsEventCard.js +20 -17
  63. package/dist/esm/components/AppHeaderLogo.js +5 -5
  64. package/dist/esm/components/BrandSquareIcon.js +39 -39
  65. package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
  66. package/dist/esm/components/ConsoleLogCard.js +98 -86
  67. package/dist/esm/components/EndOfListFooter.d.ts +5 -1
  68. package/dist/esm/components/EndOfListFooter.js +36 -14
  69. package/dist/esm/components/Inspector/AnalyticsTab.js +47 -315
  70. package/dist/esm/components/Inspector/ConsoleTab.js +61 -116
  71. package/dist/esm/components/Inspector/CrashDetail.js +49 -49
  72. package/dist/esm/components/Inspector/CrashTab.js +75 -65
  73. package/dist/esm/components/Inspector/DebuggingTab.js +31 -31
  74. package/dist/esm/components/Inspector/DeviceInfoTab.js +146 -144
  75. package/dist/esm/components/Inspector/InspectorHeader.js +5 -5
  76. package/dist/esm/components/Inspector/MainScreen.js +51 -53
  77. package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
  78. package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
  79. package/dist/esm/components/Inspector/NetworkTab.js +63 -63
  80. package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
  81. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
  82. package/dist/esm/components/Inspector/ReduxTab.js +163 -150
  83. package/dist/esm/components/Inspector/SettingsPanel.js +136 -188
  84. package/dist/esm/components/Inspector/StorageTab.js +88 -84
  85. package/dist/esm/components/Inspector/TabBar.js +37 -34
  86. package/dist/esm/components/JsonViewer.js +173 -168
  87. package/dist/esm/components/LogCard.js +38 -42
  88. package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
  89. package/dist/esm/components/SegmentedTabs.d.ts +4 -1
  90. package/dist/esm/components/SegmentedTabs.js +8 -8
  91. package/dist/esm/constants/index.js +1 -1
  92. package/dist/esm/constants/version.d.ts +1 -1
  93. package/dist/esm/constants/version.js +1 -1
  94. package/dist/esm/customHooks/networkLogger.js +1 -2
  95. package/dist/esm/helpers/index.d.ts +6 -0
  96. package/dist/esm/helpers/index.js +4 -4
  97. package/dist/esm/helpers/memoryManager.d.ts +0 -1
  98. package/dist/esm/helpers/memoryManager.js +1 -1
  99. package/dist/esm/helpers/remoteConfig.js +1 -1
  100. package/dist/esm/helpers/settingsStore.js +1 -1
  101. package/dist/esm/i18n/index.d.ts +35 -0
  102. package/dist/esm/i18n/index.js +1 -1
  103. package/dist/esm/i18n/locales/ar.json +1 -0
  104. package/dist/esm/i18n/locales/de.json +1 -0
  105. package/dist/esm/i18n/locales/en.json +1 -1
  106. package/dist/esm/i18n/locales/es.json +1 -0
  107. package/dist/esm/i18n/locales/fr.json +1 -0
  108. package/dist/esm/i18n/locales/hi.json +1 -0
  109. package/dist/esm/i18n/locales/ja.json +1 -0
  110. package/dist/esm/i18n/locales/ko.json +1 -0
  111. package/dist/esm/i18n/locales/pt.json +1 -0
  112. package/dist/esm/i18n/locales/ru.json +1 -0
  113. package/dist/esm/i18n/locales/zh.json +1 -0
  114. package/dist/esm/index.d.ts +2 -4
  115. package/dist/esm/index.js +5 -5
  116. package/dist/esm/styles/AppColors.d.ts +40 -0
  117. package/dist/esm/styles/AppColors.js +1 -1
  118. package/dist/esm/styles/index.js +1 -1
  119. package/dist/esm/types/enums.d.ts +0 -20
  120. package/dist/esm/types/enums.js +1 -1
  121. package/package.json +1 -15
  122. package/dist/commonjs/bundle.d.ts +0 -2
  123. package/dist/commonjs/bundle.js +0 -1
  124. package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
  125. package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
  126. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
  127. package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
  128. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
  129. package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
  130. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
  131. package/dist/commonjs/customHooks/performanceTracker.js +0 -63
  132. package/dist/commonjs/performance.d.ts +0 -2
  133. package/dist/commonjs/performance.js +0 -1
  134. package/dist/esm/bundle.d.ts +0 -2
  135. package/dist/esm/bundle.js +0 -1
  136. package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
  137. package/dist/esm/components/Inspector/BundleTab.js +0 -1297
  138. package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
  139. package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
  140. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
  141. package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
  142. package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
  143. package/dist/esm/customHooks/performanceTracker.js +0 -63
  144. package/dist/esm/performance.d.ts +0 -2
  145. package/dist/esm/performance.js +0 -1
@@ -1,185 +1,190 @@
1
- import ge,{useState as H,useEffect as ee,useMemo as v}from"react";import{ScrollView as I,View as F,Text as T,StyleSheet as ue,TouchableOpacity as A,Platform as we}from"react-native";import{useTranslation as Te}from"../i18n";import Ce from"./TreeNode";import L from"./HighlightText";import Se from"./TouchableScale";import{PrettyIcon as Ve,RawIcon as Be,TableIcon as Ee,ChevronIcon as De,CopyIcon as Re,CheckIcon as We}from"./NetworkIcons";import{getSize as Ie,copyToClipboard as Ae}from"../helpers";import{triggerNativeHaptic as Oe}from"../native/NativeInspector";const C=we.select({ios:"Menlo",android:"monospace",default:"monospace"}),He=t=>t===null?{label:"null",color:"#E11D48",bg:"#FFF1F2",border:"#FECDD3"}:t===void 0?{label:"undef",color:"#E11D48",bg:"#FFF1F2",border:"#FECDD3"}:Array.isArray(t)?{label:`arr[${t.length}]`,color:"#2563EB",bg:"#EFF6FF",border:"#BFDBFE"}:typeof t=="object"?{label:`obj{${Object.keys(t).length}}`,color:"#7C3AED",bg:"#F5F3FF",border:"#DDD6FE"}:typeof t=="number"?{label:"num",color:"#D97706",bg:"#FEF3C7",border:"#FDE68A"}:typeof t=="boolean"?{label:"bool",color:"#DB2777",bg:"#FDF2F8",border:"#FBCFE8"}:{label:"str",color:"#059669",bg:"#ECFDF5",border:"#A7F3D0"},Le=ge.memo(({itemKey:t,val:f,search:O,index:$})=>{const[k,z]=H(!1),P=f!==null&&typeof f=="object",E=He(f);let V="";if(f===null)V="null";else if(f===void 0)V="undefined";else if(P)try{V=JSON.stringify(f,null,2)}catch{V=String(f)}else V=String(f);const _=V.includes(`
2
- `)||V.length>80;return<F style={[e.tableRow,$%2===1&&e.tableRowAlt]}>
3
-
4
- <F style={e.tableColKey}>
5
- <L text={t}search={O}style={e.tableCellKey}highlightStyle={e.highlight}/>
6
- <F style={[e.typePill,{backgroundColor:E.bg,borderColor:E.border}]}>
7
- <T style={[e.typePillText,{color:E.color}]}>
8
- {E.label}
1
+ import Q,{useState as L,useEffect as le,useMemo as v,useCallback as He}from"react";import{ScrollView as O,View as T,Text as S,StyleSheet as Ie,TouchableOpacity as Te,Platform as Ae}from"react-native";import{useTranslation as je}from"../i18n";import Pe from"./TreeNode";import X from"./HighlightText";import N from"./TouchableScale";import{PrettyIcon as Oe,RawIcon as Le,TableIcon as Ne,ChevronIcon as De,CopyIcon as Ee,CheckIcon as Je}from"./NetworkIcons";import{AppColors as t}from"../styles/AppColors";import{getSize as Ke,copyToClipboard as Me}from"../helpers";import{triggerNativeHaptic as $e}from"../native/NativeInspector";const V=Ae.select({ios:"Menlo",android:"monospace",default:"monospace"}),Ge=o=>o===null?{label:"null",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:o===void 0?{label:"undef",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:Array.isArray(o)?{label:`arr[${o.length}]`,color:t.blue600,bg:t.blueBg,border:t.sky100}:typeof o=="object"?{label:`obj{${Object.keys(o).length}}`,color:t.violet600,bg:t.purple50,border:t.purple200}:typeof o=="number"?{label:"num",color:t.amber600,bg:t.amber100,border:t.amber200}:typeof o=="boolean"?{label:"bool",color:t.pink600,bg:t.roseBg,border:t.roseBorder}:{label:"str",color:t.emerald600,bg:t.emeraldBg,border:t.emeraldBorder},Ce=Q.memo(({text:o,search:C,detectLinks:A})=>{const k=o.trim();let F=e.rawMonospaceText;return k.startsWith('"')?F=e.syntaxString:k==="null"||k.startsWith("null,")||k==="undefined"?F=e.syntaxNull:k==="true"||k.startsWith("true,")||k==="false"||k.startsWith("false,")?F=e.syntaxBoolean:/^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?,?$/.test(k)&&(F=e.syntaxNumber),<X text={o}search={C}detectLinks={A}style={F}selectable={!0}highlightStyle={e.highlight}/>}),Ye=Q.memo(({line:o,search:C,detectLinks:A})=>{const k=o.match(/^(\s+)(.*)$/),F=k?k[1]:"",j=k?k[2]:o,P=F?F.replace(/ /g,"\xB7 ").replace(/ /g,"\xB7"):"",W=j.match(/^("(?:[^"\\]|\\.)*")(\s*:\s*)(.*)$/);if(W){const H=W[1],J=W[2],z=W[3];return<T style={e.rawLineContentRow}>
2
+ {P.length>0&&<S style={e.indentDots}>{P}</S>}
3
+ <X text={H}search={C}style={e.syntaxKey}selectable={!0}highlightStyle={e.highlight}/>
4
+ <S style={e.syntaxColon}>{J}</S>
5
+ <Ce text={z}search={C}detectLinks={A}/>
6
+ </T>}return<T style={e.rawLineContentRow}>
7
+ {P.length>0&&<S style={e.indentDots}>{P}</S>}
8
+ <Ce text={j}search={C}detectLinks={A}/>
9
+ </T>}),Ue=Q.memo(({itemKey:o,val:C,search:A,index:k})=>{const[F,j]=L(!1),P=C!==null&&typeof C=="object",W=Ge(C);let H="";if(C===null)H="null";else if(C===void 0)H="undefined";else if(P)try{H=JSON.stringify(C,null,2)}catch{H=String(C)}else H=String(C);const J=H.includes(`
10
+ `)||H.length>80;return<T style={[e.tableRow,k%2===1&&e.tableRowAlt]}>
11
+
12
+ <T style={e.tableColKey}>
13
+ <X text={o}search={A}style={e.tableCellKey}highlightStyle={e.highlight}/>
14
+ <T style={[e.typePill,{backgroundColor:W.bg,borderColor:W.border}]}>
15
+ <S style={[e.typePillText,{color:W.color}]}>
16
+ {W.label}
17
+ </S>
9
18
  </T>
10
- </F>
11
- </F>
19
+ </T>
12
20
 
13
-
14
- <F style={e.tableColVal}>
15
- <F style={P?e.tableCodeBox:void 0}>
16
- <L text={V}search={O}style={[e.tableCellValue,f==null?e.syntaxNull:void 0,typeof f=="number"?e.syntaxNumber:void 0,typeof f=="boolean"?e.syntaxBoolean:void 0,typeof f=="string"?e.syntaxString:void 0]}highlightStyle={e.highlight}numberOfLines={k?void 0:3}selectable={!0}/>
17
- </F>
18
- {_&&<A onPress={()=>z(R=>!R)}hitSlop={6}style={e.showMoreBtn}>
19
- <T style={e.showMoreText}>
20
- {k?"Collapse":"Expand"}
21
- </T>
22
- <De direction={k?"up":"down"}size={9}color="#4F46E5"/>
23
- </A>}
24
- </F>
25
- </F>}),Pe=ge.memo(({data:t,search:f,forceOpen:O,defaultExpandDepth:$=1,wrap:k,fullHeight:z=!1,maxHeight:P,mode:E,onModeChange:V,hideTabs:_=!1})=>{const{t:R}=Te(),[ye,te]=H(E??"raw"),[oe,re]=H(!1),[N,le]=H(k??!1),[G,ne]=H(O),S=V&&E?E:ye,Y=m=>{te(m),V&&V(m)};ee(()=>{k!==void 0&&le(k)},[k]),ee(()=>{O!==void 0&&ne(O)},[O]);const ie=v(()=>{if(t==null)return"";if(typeof t=="string")return t;try{return JSON.stringify(t,null,2)??""}catch{return String(t)||""}},[t]),D=v(()=>{if(typeof t=="string")return t;try{return JSON.stringify(t)??""}catch{return String(t)||""}},[t]),pe=D,[be,ae]=H(!1),se=5e4,q=typeof D=="string"?D:"",U=q.length>se&&!be,Q=U?q.slice(0,se):q,Ne=typeof ie=="string"?ie:"",K=v(()=>Q?Q.split(`
26
- `):[""],[Q]),ce=K.length,Fe=v(()=>Ie(t),[t]);ee(()=>{E&&te(E)},[E]);const fe=()=>{Oe("success"),Ae(pe||D,"JSON"),re(!0),setTimeout(()=>re(!1),1200)},X=typeof t=="object"&&t!==null,he=t==null||X&&Object.keys(t).length===0,de=()=>{if(!X)return<F style={e.tableRow}>
27
- <F style={e.tableColKey}>
28
- <T style={e.tableCellKey}>{R("network.jsonViewer.value")}</T>
29
- </F>
30
- <F style={e.tableColVal}>
31
- <T style={e.tableCellValue}>{String(t)}</T>
32
- </F>
33
- </F>;let m=Object.keys(t);if(f&&f.trim().length>0){const x=f.trim().toLowerCase();m=m.filter(B=>{const W=t[B],M=typeof W=="object"&&W!==null?JSON.stringify(W):String(W);return B.toLowerCase().includes(x)||M.toLowerCase().includes(x)})}return m.length===0?<F style={e.emptyContainer}>
34
- <T style={e.emptyText}>
35
- {f&&f.trim().length>0?"No matching keys or values found":R("network.jsonViewer.emptyTable")}
36
- </T>
37
- </F>:<F style={e.tableView}>
38
-
39
- <F style={e.tableHeaderRow}>
40
- <T style={[e.tableHeaderCell,{flex:2}]}>KEY / PROPERTY</T>
41
- <T style={[e.tableHeaderCell,{flex:3}]}>VALUE</T>
42
- </F>
43
- {m.map((x,B)=><Le key={x}index={B}itemKey={x}val={t[x]}search={f}/>)}
44
- </F>},J=<Ce data={t}search={f}forceOpen={G}defaultExpandDepth={G?99:$}/>;return<F style={[e.container,z&&{flex:1}]}>
45
-
46
- <F style={e.snippetHeader}>
47
21
 
48
- <F style={e.headerLeft}>
49
- <F style={e.langBadge}>
50
- <T style={e.langBadgeText}>JSON</T>
51
- </F>
52
- <F style={e.metaBadge}>
53
- <T style={e.metaBadgeText}numberOfLines={1}ellipsizeMode="tail">
54
- {ce} {ce===1?"line":"lines"} · {Fe}
22
+ <T style={e.tableColVal}>
23
+ <T style={P?e.tableCodeBox:void 0}>
24
+ <X text={H}search={A}style={[e.tableCellValue,C==null?e.syntaxNull:void 0,typeof C=="number"?e.syntaxNumber:void 0,typeof C=="boolean"?e.syntaxBoolean:void 0,typeof C=="string"?e.syntaxString:void 0]}highlightStyle={e.highlight}numberOfLines={F?void 0:3}selectable={!0}/>
25
+ </T>
26
+ {J&&<Te onPress={()=>j(z=>!z)}hitSlop={6}style={e.showMoreBtn}>
27
+ <S style={e.showMoreText}>
28
+ {F?"Collapse":"Expand"}
29
+ </S>
30
+ <De direction={F?"up":"down"}size={9}color="#4F46E5"/>
31
+ </Te>}
32
+ </T>
33
+ </T>}),_e=Q.memo(({data:o,search:C,forceOpen:A,defaultExpandDepth:k=1,wrap:F,fullHeight:j=!1,maxHeight:P,mode:W,onModeChange:H,hideTabs:J=!1})=>{const{t:z}=je(),[Se,ne]=L(W??"pretty"),[ie,ae]=L(!1),[K,se]=L(F??!0),[D,Ve]=L("compact"),[M,ce]=L(A),[Be,ke]=L(!1),R=H&&W?W:Se,Z=B=>{ne(B),H&&H(B)};le(()=>{F!==void 0&&se(F)},[F]),le(()=>{A!==void 0&&ce(A)},[A]),le(()=>{W&&ne(W)},[W]);const E=v(()=>{if(o==null)return"";if(typeof o=="string"){const B=o.trim();try{const I=JSON.parse(B);return JSON.stringify(I,null,2)}catch{return o}}try{return JSON.stringify(o,null,2)??""}catch{return String(o)||""}},[o]),ee=v(()=>{if(typeof o=="string"){const B=o.trim();try{const I=JSON.parse(B);return JSON.stringify(I)}catch{return o}}try{return JSON.stringify(o)??""}catch{return String(o)||""}},[o]),de=D==="formatted"?E:ee,ge=5e4,$=typeof de=="string"?de:"",ye=$.length>ge&&!Be,te=ye?$.slice(0,ge):$,oe=v(()=>te?te.split(`
34
+ `):[""],[te]),pe=v(()=>R==="raw"?oe.length:E?E.split(`
35
+ `).length:1,[R,oe.length,E]),Fe=v(()=>Ke(o),[o]),ze=He(()=>{$e("success"),Me(D==="compact"?ee:E,"JSON"),ae(!0),setTimeout(()=>ae(!1),1200)},[D,ee,E]),re=typeof o=="object"&&o!==null,Re=o==null||re&&Object.keys(o).length===0,ue=()=>{if(!re)return<T style={e.tableRow}>
36
+ <T style={e.tableColKey}>
37
+ <S style={e.tableCellKey}>
38
+ {z("network.jsonViewer.value")}
39
+ </S>
55
40
  </T>
56
- </F>
57
- </F>
58
-
59
-
60
- <F style={e.headerRight}>
61
- {!_&&<F style={e.snippetTabs}>
62
- <A onPress={()=>Y("pretty")}activeOpacity={.7}hitSlop={{top:8,bottom:8,left:4,right:4}}style={[e.snippetTabBtn,S==="pretty"&&e.snippetTabBtnActive]}>
63
- <Ve color={S==="pretty"?"#FFFFFF":"#64748B"}size={11}/>
64
- <T style={[e.snippetTabText,S==="pretty"&&e.snippetTabTextActive]}>
65
- {R("network.jsonViewer.pretty")}
66
- </T>
67
- </A>
68
-
69
- <A onPress={()=>Y("raw")}activeOpacity={.7}hitSlop={{top:8,bottom:8,left:4,right:4}}style={[e.snippetTabBtn,S==="raw"&&e.snippetTabBtnActive]}>
70
- <Be color={S==="raw"?"#FFFFFF":"#64748B"}size={11}/>
71
- <T style={[e.snippetTabText,S==="raw"&&e.snippetTabTextActive]}>
72
- {R("network.jsonViewer.raw")}
73
- </T>
74
- </A>
75
-
76
- <A onPress={()=>Y("table")}activeOpacity={.7}hitSlop={{top:8,bottom:8,left:4,right:4}}style={[e.snippetTabBtn,S==="table"&&e.snippetTabBtnActive]}>
77
- <Ee color={S==="table"?"#FFFFFF":"#64748B"}size={11}/>
78
- <T style={[e.snippetTabText,S==="table"&&e.snippetTabTextActive]}>
79
- {R("network.jsonViewer.table")}
80
- </T>
81
- </A>
82
- </F>}
83
-
41
+ <T style={e.tableColVal}>
42
+ <S style={e.tableCellValue}>{String(o)}</S>
43
+ </T>
44
+ </T>;let B=Object.keys(o);if(C&&C.trim().length>0){const I=C.trim().toLowerCase();B=B.filter(U=>{const _=o[U],We=typeof _=="object"&&_!==null?JSON.stringify(_):String(_);return U.toLowerCase().includes(I)||We.toLowerCase().includes(I)})}return B.length===0?<T style={e.emptyContainer}>
45
+ <S style={e.emptyText}>
46
+ {C&&C.trim().length>0?"No matching keys or values found":z("network.jsonViewer.emptyTable")}
47
+ </S>
48
+ </T>:<T style={e.tableView}>
84
49
 
85
- {S==="pretty"&&X&&<A onPress={()=>ne(m=>!m)}hitSlop={{top:6,bottom:6,left:4,right:4}}style={e.toolToggleBtn}>
86
- <T style={e.toolToggleText}>
87
- {G?"Fold":"Expand"}
50
+ <T style={e.tableHeaderRow}>
51
+ <S style={[e.tableHeaderCell,{flex:2}]}>
52
+ KEY / PROPERTY
53
+ </S>
54
+ <S style={[e.tableHeaderCell,{flex:3}]}>VALUE</S>
55
+ </T>
56
+ {B.map((I,U)=><Ue key={I}index={U}itemKey={I}val={o[I]}search={C}/>)}
57
+ </T>},Y=<Pe data={o}search={C}forceOpen={M}defaultExpandDepth={M?99:k}/>,q=()=><T style={e.rawLinesWrapper}>
58
+ {oe.map((B,I)=><T key={I}style={e.rawCodeLineRow}>
59
+
60
+ <T style={e.gutterCell}>
61
+ <S style={e.gutterNumber}selectable={!1}>
62
+ {I+1}
63
+ </S>
88
64
  </T>
89
- </A>}
90
65
 
91
-
92
- {S==="raw"&&<A onPress={()=>le(m=>!m)}hitSlop={{top:6,bottom:6,left:4,right:4}}style={[e.toolToggleBtn,N&&e.toolToggleBtnActive]}>
93
- <T style={[e.toolToggleText,N&&e.toolToggleTextActive]}>
94
- Wrap
66
+
67
+ <T style={e.rawTextCell}>
68
+ <Ye line={B}search={C}detectLinks={$.length<2e4}/>
95
69
  </T>
96
- </A>}
70
+ </T>)}
71
+ </T>,be=()=>ye?<Te onPress={()=>ke(!0)}activeOpacity={.8}style={e.truncationBanner}>
72
+ <S style={e.truncationText}>
73
+ Showing first 50 KB ({Math.round($.length/1024)} KB
74
+ total) · Tap to load full payload
75
+ </S>
76
+ </Te>:null,G=v(()=>Array.isArray(o)?{label:`ARRAY [${o.length}]`,color:t.blue600,bg:`${t.blue600}12`,border:`${t.blue600}30`}:o&&typeof o=="object"?{label:`OBJECT {${Object.keys(o).length}}`,color:t.violet600,bg:`${t.violet600}12`,border:`${t.violet600}30`}:{label:"JSON",color:t.slate700,bg:`${t.slate700}10`,border:`${t.slate700}25`},[o]);return<T style={[e.container,j&&{flex:1}]}>
77
+
78
+ <T style={e.snippetHeader}>
79
+
80
+ <T style={e.headerLeft}>
81
+ <T style={[e.langBadge,{backgroundColor:G.bg,borderColor:G.border}]}>
82
+ <T style={[e.langDot,{backgroundColor:G.color}]}/>
83
+ <S style={[e.langBadgeText,{color:G.color}]}>
84
+ {G.label}
85
+ </S>
86
+ </T>
87
+ <T style={e.metaBadge}>
88
+ <S style={e.metaBadgeText}numberOfLines={1}ellipsizeMode="tail">
89
+ {Fe} · {pe} {pe===1?z("jsonViewer.line","line"):z("jsonViewer.lines","lines")}
90
+ </S>
91
+ </T>
92
+ </T>
97
93
 
98
94
 
99
- <Se onPress={fe}hitSlop={8}style={[e.copyBtn,oe&&e.copyBtnSuccess]}>
100
- {oe?<We color="#10B981"size={13}/>:<Re color="#64748B"size={13}/>}
101
- </Se>
102
- </F>
103
- </F>
104
-
105
- <F style={[e.editorBody,z&&{flex:1,maxHeight:void 0},!z&&P!=null&&{maxHeight:P}]}>
106
-
107
- {S==="pretty"&&(he?<F style={e.emptyContainer}>
108
- <T style={e.emptyText}>
109
- {R("network.jsonViewer.emptyPayload")}
110
- </T>
111
- </F>:N?z?<I style={{flex:1}}contentContainerStyle={e.prettyContainer}>
112
- {J}
113
- </I>:<F style={e.prettyContainer}>{J}</F>:z?<I style={{flex:1}}contentContainerStyle={{flexGrow:1}}>
114
- <I horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
115
- {J}
116
- </I>
117
- </I>:<I horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
118
- {J}
119
- </I>)}
95
+ <T style={e.headerRight}>
96
+ {!J&&<T style={e.snippetTabs}>
97
+ <N onPress={()=>Z("pretty")}style={[e.snippetTabBtn,R==="pretty"&&[e.snippetTabBtnActive,{backgroundColor:t.brandPurple,shadowColor:t.brandPurple}]]}>
98
+ <Oe color={R==="pretty"?t.white:t.grayTextWeak}size={11}/>
99
+ <S style={[e.snippetTabText,R==="pretty"&&e.snippetTabTextActive]}>
100
+ {z("network.jsonViewer.pretty","Pretty")}
101
+ </S>
102
+ </N>
120
103
 
121
-
122
- {S==="raw"&&(z?<I style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
123
- <F style={e.rawEditorRow}>
124
-
125
- <F style={e.gutter}>
126
- {K.map((m,x)=><T key={x}style={e.gutterNumber}>
127
- {x+1}
128
- </T>)}
129
- </F>
104
+ <N onPress={()=>Z("raw")}style={[e.snippetTabBtn,R==="raw"&&[e.snippetTabBtnActive,{backgroundColor:t.sky600,shadowColor:t.sky600}]]}>
105
+ <Le color={R==="raw"?t.white:t.grayTextWeak}size={11}/>
106
+ <S style={[e.snippetTabText,R==="raw"&&e.snippetTabTextActive]}>
107
+ {z("network.jsonViewer.raw","Raw")}
108
+ </S>
109
+ </N>
130
110
 
131
-
132
- <I horizontal={!N}showsHorizontalScrollIndicator={!0}style={{flex:1}}>
133
- <F style={e.rawTextContainer}>
134
- {K.map((m,x)=>{const B=m.match(/^(\s+)(.*)$/);if(B){const W=B[1],M=B[2],Z=W.replace(/ /g,"\xB7 ").replace(/ /g,"\xB7");return<F key={x}style={e.rawCodeLineRow}>
135
- <T style={e.indentDots}>{Z}</T>
136
- <L text={M}search={f}detectLinks={D.length<2e4}style={e.rawMonospaceText}selectable={!0}highlightStyle={e.highlight}/>
137
- </F>}return<F key={x}style={e.rawCodeLineRow}>
138
- <L text={m}search={f}detectLinks={D.length<2e4}style={e.rawMonospaceText}selectable={!0}highlightStyle={e.highlight}/>
139
- </F>})}
140
- </F>
141
- </I>
142
- </F>
111
+ <N onPress={()=>Z("table")}style={[e.snippetTabBtn,R==="table"&&[e.snippetTabBtnActive,{backgroundColor:t.teal600,shadowColor:t.teal600}]]}>
112
+ <Ne color={R==="table"?t.white:t.grayTextWeak}size={11}/>
113
+ <S style={[e.snippetTabText,R==="table"&&e.snippetTabTextActive]}>
114
+ {z("network.jsonViewer.table","Table")}
115
+ </S>
116
+ </N>
117
+ </T>}
143
118
 
144
- {U&&<A onPress={()=>ae(!0)}style={e.truncationBanner}>
145
- <T style={e.truncationText}>
146
- Showing first 50 KB ({Math.round(D.length/1024)} KB total) · Tap to load full payload
147
- </T>
148
- </A>}
149
- </I>:<F>
150
- <F style={e.rawEditorRow}>
151
-
152
- <F style={e.gutter}>
153
- {K.map((m,x)=><T key={x}style={e.gutterNumber}>
154
- {x+1}
155
- </T>)}
156
- </F>
119
+
120
+ {R==="pretty"&&re&&<N onPress={()=>ce(B=>!B)}style={[e.toolToggleBtn,M&&e.toolToggleBtnActive]}>
121
+ <S style={[e.toolToggleText,M&&e.toolToggleTextActive]}>
122
+ {M?z("jsonViewer.fold","Fold"):z("jsonViewer.expand","Expand")}
123
+ </S>
124
+ </N>}
157
125
 
158
-
159
- <I horizontal={!N}showsHorizontalScrollIndicator={!0}style={{flex:1}}>
160
- <F style={e.rawTextContainer}>
161
- {K.map((m,x)=>{const B=m.match(/^(\s+)(.*)$/);if(B){const W=B[1],M=B[2],Z=W.replace(/ /g,"\xB7 ").replace(/ /g,"\xB7");return<F key={x}style={e.rawCodeLineRow}>
162
- <T style={e.indentDots}>{Z}</T>
163
- <L text={M}search={f}detectLinks={D.length<2e4}style={e.rawMonospaceText}selectable={!0}highlightStyle={e.highlight}/>
164
- </F>}return<F key={x}style={e.rawCodeLineRow}>
165
- <L text={m}search={f}detectLinks={D.length<2e4}style={e.rawMonospaceText}selectable={!0}highlightStyle={e.highlight}/>
166
- </F>})}
167
- </F>
168
- </I>
169
- </F>
126
+
127
+ {R==="raw"&&<N onPress={()=>Ve(B=>B==="compact"?"formatted":"compact")}style={[e.toolToggleBtn,D==="compact"&&e.toolToggleBtnActive]}>
128
+ <S style={[e.toolToggleText,D==="compact"&&e.toolToggleTextActive]}>
129
+ {D==="compact"?z("jsonViewer.min","Min"):z("jsonViewer.indent","Indent")}
130
+ </S>
131
+ </N>}
170
132
 
171
- {U&&<A onPress={()=>ae(!0)}style={e.truncationBanner}>
172
- <T style={e.truncationText}>
173
- Showing first 50 KB ({Math.round(D.length/1024)} KB total) · Tap to load full payload
174
- </T>
175
- </A>}
176
- </F>)}
133
+
134
+ {R==="raw"&&<N onPress={()=>se(B=>!B)}style={[e.toolToggleBtn,K&&e.toolToggleBtnActive]}>
135
+ <S style={[e.toolToggleText,K&&e.toolToggleTextActive]}>
136
+ {z("jsonViewer.wrap","Wrap")}
137
+ </S>
138
+ </N>}
139
+
140
+
141
+ <N onPress={ze}hitSlop={6}style={[e.copyBtn,ie&&e.copyBtnSuccess]}>
142
+ {ie?<Je color={t.emerald500}size={12}/>:<Ee color={t.grayTextWeak}size={12}/>}
143
+ </N>
144
+ </T>
145
+ </T>
177
146
 
178
147
 
179
- {S==="table"&&(z?<I style={{flex:1}}>
180
- {de()}
181
- </I>:<F style={e.tableView}>
182
- {de()}
183
- </F>)}
184
- </F>
185
- </F>}),e=ue.create({container:{backgroundColor:"#FFFFFF",borderRadius:12,borderWidth:1.5,borderColor:"#E2E8F0",overflow:"hidden",shadowColor:"#4F46E5",shadowOpacity:.05,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2,width:"100%"},snippetHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:"#F1F5F9",borderBottomWidth:1,borderBottomColor:"#E2E8F0",paddingHorizontal:8,paddingVertical:6,gap:6},headerLeft:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:1,minWidth:0},langBadge:{backgroundColor:"#FFFFFF",borderRadius:4,borderWidth:1,borderColor:"#CBD5E1",paddingHorizontal:5,paddingVertical:2},langBadgeText:{fontFamily:C,fontSize:9.5,color:"#475569",fontWeight:"700",letterSpacing:.4},metaBadge:{backgroundColor:"#FFFFFF",borderRadius:4,borderWidth:1,borderColor:"#CBD5E1",paddingHorizontal:5,paddingVertical:2,flexShrink:1},metaBadgeText:{fontFamily:C,fontSize:9.5,color:"#64748B",fontWeight:"600"},metaStats:{fontFamily:C,fontSize:9.5,color:"#64748B",flexShrink:1},headerRight:{flexDirection:"row",alignItems:"center",gap:5},snippetTabs:{flexDirection:"row",alignItems:"center",backgroundColor:"#E2E8F0",borderRadius:6,padding:2,borderWidth:1,borderColor:"#CBD5E1",gap:2},snippetTabBtn:{flexDirection:"row",alignItems:"center",gap:3.5,paddingVertical:2.5,paddingHorizontal:6,borderRadius:4},snippetTabBtnActive:{backgroundColor:"#4F46E5",shadowColor:"#4F46E5",shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:1},snippetTabText:{fontFamily:C,fontSize:9.5,color:"#64748B",fontWeight:"600"},snippetTabTextActive:{color:"#FFFFFF",fontWeight:"700"},toolToggleBtn:{paddingHorizontal:6,paddingVertical:2.5,borderRadius:5,backgroundColor:"#FFFFFF",borderWidth:1,borderColor:"#CBD5E1",alignItems:"center",justifyContent:"center"},toolToggleBtnActive:{backgroundColor:"#EEF2FF",borderColor:"#C7D2FE"},toolToggleText:{fontFamily:C,fontSize:9.5,color:"#64748B",fontWeight:"600"},toolToggleTextActive:{color:"#4F46E5",fontWeight:"700"},copyBtn:{width:24,height:24,borderRadius:5,backgroundColor:"#FFFFFF",borderWidth:1,borderColor:"#CBD5E1",alignItems:"center",justifyContent:"center"},copyBtnSuccess:{borderColor:"#10B981",backgroundColor:"#ECFDF5"},editorBody:{backgroundColor:"#FFFFFF",minHeight:100},prettyContainer:{padding:12,minWidth:"100%",backgroundColor:"#FFFFFF"},rawEditorRow:{flexDirection:"row",alignItems:"stretch",minHeight:100},gutter:{backgroundColor:"#F1F5F9",borderRightWidth:1,borderRightColor:"#E2E8F0",paddingVertical:10,paddingHorizontal:8,alignItems:"flex-end",userSelect:"none"},gutterNumber:{fontFamily:C,fontSize:11.5,height:18,lineHeight:18,color:"#94A3B8",textAlign:"right"},rawTextContainer:{paddingVertical:10,paddingHorizontal:12,backgroundColor:"#FFFFFF"},rawCodeLineRow:{flexDirection:"row",alignItems:"center",height:18},indentDots:{fontFamily:C,fontSize:11.5,lineHeight:18,color:"#CBD5E1",letterSpacing:.5},rawMonospaceText:{fontFamily:C,fontSize:11.5,lineHeight:18,color:"#0F172A"},truncationBanner:{margin:10,backgroundColor:"#EEF2FF",paddingVertical:8,paddingHorizontal:12,borderRadius:6,alignItems:"center",borderWidth:1,borderColor:"#C7D2FE"},truncationText:{fontFamily:C,fontSize:10.5,color:"#4F46E5",fontWeight:"600"},tableView:{flex:1},tableHeaderRow:{flexDirection:"row",backgroundColor:"#F1F5F9",borderBottomWidth:1,borderBottomColor:"#E2E8F0",paddingVertical:7,paddingHorizontal:12},tableHeaderCell:{fontFamily:C,fontSize:10,color:"#475569",fontWeight:"700",letterSpacing:.5},tableRow:{flexDirection:"row",borderBottomWidth:1,borderBottomColor:"#F1F5F9",paddingVertical:8,paddingHorizontal:12,alignItems:"flex-start",backgroundColor:"#FFFFFF"},tableRowAlt:{backgroundColor:"#F8FAFC"},tableColKey:{flex:2,paddingRight:8},tableColVal:{flex:3},tableCellKey:{fontFamily:C,fontSize:11.5,fontWeight:"700",color:"#4F46E5"},typePill:{alignSelf:"flex-start",borderRadius:4,borderWidth:1,paddingHorizontal:4,paddingVertical:1,marginTop:3},typePillText:{fontFamily:C,fontSize:9,fontWeight:"700"},tableCellValue:{fontFamily:C,fontSize:11.5,color:"#0F172A",lineHeight:17},tableCodeBox:{backgroundColor:"#F1F5F9",borderRadius:6,borderWidth:1,borderColor:"#E2E8F0",padding:6},showMoreBtn:{flexDirection:"row",alignItems:"center",gap:4,alignSelf:"flex-start",marginTop:4,paddingVertical:2,paddingHorizontal:4},showMoreText:{fontFamily:C,fontSize:10,color:"#4F46E5",fontWeight:"600"},emptyContainer:{padding:24,alignItems:"center",justifyContent:"center"},emptyText:{fontFamily:C,fontSize:11.5,color:"#64748B"},highlight:{backgroundColor:"#FEF08A",color:"#854D0E",fontFamily:C,fontWeight:"700",borderRadius:2,paddingHorizontal:2},syntaxNull:{color:"#E11D48",fontStyle:"italic"},syntaxNumber:{color:"#D97706"},syntaxBoolean:{color:"#DB2777"},syntaxString:{color:"#059669"}});export default Pe;
148
+ <T style={[e.editorBody,j&&{flex:1,maxHeight:void 0},!j&&P!=null&&{maxHeight:P}]}>
149
+
150
+ {R==="pretty"&&(Re?<T style={e.emptyContainer}>
151
+ <S style={e.emptyText}>
152
+ {z("network.jsonViewer.emptyPayload")}
153
+ </S>
154
+ </T>:K?j?<O style={{flex:1}}contentContainerStyle={e.prettyContainer}showsVerticalScrollIndicator={!0}>
155
+ {Y}
156
+ </O>:<T style={e.prettyContainer}>{Y}</T>:j?<O style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
157
+ <O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
158
+ {Y}
159
+ </O>
160
+ </O>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.prettyContainer}>
161
+ {Y}
162
+ </O>)}
163
+
164
+
165
+ {R==="raw"&&(j?<O style={e.fullHeightScrollView}contentContainerStyle={e.fullHeightScrollContent}showsVerticalScrollIndicator={!0}showsHorizontalScrollIndicator={!1}>
166
+ {K?<T style={e.rawEditorFullWidth}>
167
+ {q()}
168
+ </T>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.rawHorizontalContent}>
169
+ <T style={{flexDirection:"column"}}>
170
+ {q()}
171
+ </T>
172
+ </O>}
173
+ {be()}
174
+ </O>:<T style={e.rawEditorAutoHeight}>
175
+ {K?<T style={e.rawEditorFullWidth}>
176
+ {q()}
177
+ </T>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.rawHorizontalContent}>
178
+ <T style={{flexDirection:"column"}}>
179
+ {q()}
180
+ </T>
181
+ </O>}
182
+ {be()}
183
+ </T>)}
184
+
185
+
186
+ {R==="table"&&(j?<O style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
187
+ {ue()}
188
+ </O>:<T style={e.tableView}>{ue()}</T>)}
189
+ </T>
190
+ </T>}),e=Ie.create({container:{backgroundColor:t.white,borderRadius:12,borderWidth:1,borderColor:t.grayBorderSecondary,overflow:"hidden",shadowColor:t.brandPurple,shadowOpacity:.04,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2,width:"100%"},snippetHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:t.grayBackground,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary,paddingHorizontal:8,paddingVertical:5,gap:6,minHeight:38},headerLeft:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:1,minWidth:0},langBadge:{flexDirection:"row",alignItems:"center",backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,gap:4.5},langDot:{width:5,height:5,borderRadius:2.5,backgroundColor:t.emerald500},langBadgeText:{fontFamily:V,fontSize:9.5,color:t.primaryBlack,fontWeight:"700",letterSpacing:.3},metaBadge:{backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,flexShrink:1},metaBadgeText:{fontFamily:V,fontSize:9.5,color:t.grayTextWeak,fontWeight:"600"},headerRight:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},snippetTabs:{flexDirection:"row",alignItems:"center",backgroundColor:`${t.grayBorderSecondary}66`,borderRadius:7,padding:2,borderWidth:1,borderColor:t.dividerColor,gap:2},snippetTabBtn:{flexDirection:"row",alignItems:"center",gap:3.5,paddingVertical:2.5,paddingHorizontal:6,borderRadius:5},snippetTabBtnActive:{backgroundColor:t.brandPurple,shadowColor:t.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:2,elevation:1},snippetTabText:{fontFamily:V,fontSize:9.5,color:t.grayTextWeak,fontWeight:"600"},snippetTabTextActive:{color:t.white,fontWeight:"700"},toolToggleBtn:{paddingHorizontal:6,paddingVertical:3,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},toolToggleBtnActive:{backgroundColor:t.purple50,borderColor:t.purple200},toolToggleText:{fontFamily:V,fontSize:9.5,color:t.grayTextWeak,fontWeight:"600"},toolToggleTextActive:{color:t.brandPurple,fontWeight:"700"},copyBtn:{width:25,height:25,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},copyBtnSuccess:{borderColor:t.greenMintBorder,backgroundColor:t.greenMintBg},editorBody:{backgroundColor:"#FFFFFF",minHeight:80},prettyContainer:{padding:10,minWidth:"100%",backgroundColor:"#FFFFFF"},fullHeightScrollView:{flex:1},fullHeightScrollContent:{flexGrow:1},rawEditorAutoHeight:{width:"100%"},rawEditorFullWidth:{width:"100%"},rawHorizontalContent:{minWidth:"100%"},rawLinesWrapper:{paddingVertical:6,backgroundColor:"#FFFFFF",width:"100%"},rawCodeLineRow:{flexDirection:"row",alignItems:"flex-start",minHeight:20,width:"100%"},gutterCell:{width:38,paddingRight:8,paddingTop:1,alignItems:"flex-end",justifyContent:"flex-start",borderRightWidth:1,borderRightColor:"#E2E8F0",backgroundColor:"#F8FAFC",userSelect:"none"},gutterNumber:{fontFamily:V,fontSize:11,lineHeight:18,color:"#94A3B8",textAlign:"right"},rawTextCell:{flex:1,paddingLeft:8,paddingRight:8,paddingTop:1,alignItems:"flex-start"},rawLineContentRow:{flexDirection:"row",alignItems:"flex-start",flexWrap:"wrap",minHeight:18},indentDots:{fontFamily:V,fontSize:11.5,lineHeight:18,color:"#CBD5E1",letterSpacing:.5},rawMonospaceText:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.slate900},syntaxKey:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.syntaxKey,fontWeight:"700"},syntaxColon:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.syntaxColon,marginRight:4},syntaxString:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.syntaxString},syntaxNumber:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.syntaxNumber},syntaxBoolean:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.syntaxBoolean},syntaxNull:{fontFamily:V,fontSize:11.5,lineHeight:18,color:t.syntaxNull,fontStyle:"italic"},truncationBanner:{margin:10,backgroundColor:t.purple50,paddingVertical:8,paddingHorizontal:12,borderRadius:6,alignItems:"center",borderWidth:1,borderColor:t.purple200},truncationText:{fontFamily:V,fontSize:10.5,color:t.brandPurple,fontWeight:"600"},tableView:{flex:1,width:"100%"},tableHeaderRow:{flexDirection:"row",backgroundColor:t.slate100,borderBottomWidth:1,borderBottomColor:t.slate200,paddingVertical:7,paddingHorizontal:12},tableHeaderCell:{fontFamily:V,fontSize:10,color:t.slate600,fontWeight:"700",letterSpacing:.5},tableRow:{flexDirection:"row",borderBottomWidth:1,borderBottomColor:t.slate100,paddingVertical:8,paddingHorizontal:12,alignItems:"flex-start",backgroundColor:t.white},tableRowAlt:{backgroundColor:t.slate50},tableColKey:{flex:2,paddingRight:8},tableColVal:{flex:3},tableCellKey:{fontFamily:V,fontSize:11.5,fontWeight:"700",color:t.brandPurple},typePill:{alignSelf:"flex-start",borderRadius:4,borderWidth:1,paddingHorizontal:4,paddingVertical:1,marginTop:3},typePillText:{fontFamily:V,fontSize:9,fontWeight:"700"},tableCellValue:{fontFamily:V,fontSize:11.5,color:t.slate900,lineHeight:17},tableCodeBox:{backgroundColor:t.slate100,borderRadius:6,borderWidth:1,borderColor:t.slate200,padding:6},showMoreBtn:{flexDirection:"row",alignItems:"center",gap:4,alignSelf:"flex-start",marginTop:4,paddingVertical:2,paddingHorizontal:4},showMoreText:{fontFamily:V,fontSize:10,color:t.brandPurple,fontWeight:"600"},emptyContainer:{padding:24,alignItems:"center",justifyContent:"center"},emptyText:{fontFamily:V,fontSize:11.5,color:t.slate500},highlight:{backgroundColor:t.yellow200,color:t.yellow800,fontFamily:V,fontWeight:"700",borderRadius:2,paddingHorizontal:2}});export default _e;
@@ -1,20 +1,20 @@
1
- import oe,{useEffect as te,useRef as le,useMemo as j}from"react";import{Alert as ae,Animated as W,Linking as D,View as C,Pressable as A,Text as T,StyleSheet as U}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as e}from"../styles/AppColors";import{METHOD_COLORS as E}from"../constants";import{getStatusColor as Be,getDurationColor as Se,formatDateTime as Re,getSize as ze,getPath as Ve,getBaseUrl as He}from"../helpers";import{CalendarIcon as Le,ClockIcon as N,SizeIcon as $e,CircleCheckIcon as Ie,CircleAlertIcon as We,CircleXIcon as De,RepeatIcon as Fe,PinIcon as Oe}from"./NetworkIcons";import{AppFonts as B}from"../styles/AppFonts";import Pe from"./HighlightText";import Me from"./TouchableScale";import{useTranslation as je}from"../i18n";const Ae=oe.memo(function({item:r,onPress:_,timelineMinStart:Ee,timelineTotalRange:qe,isNew:$,isSelected:F,onToggleSelect:G,searchStr:J}){const{t:H}=je(),O=E[r.method]??E.ALL,S=j(()=>{try{const t=new URL(r.url),V=t.host,M=t.pathname+(t.search?t.search:""),re=t.protocol==="https:";return{host:V,path:M||"/",isHttps:re}}catch{const t=r.url.toLowerCase().startsWith("https:"),V=Ve(r.url);return{host:He(r.url).replace(/^https?:\/\//,""),path:V||r.url,isHttps:t}}},[r.url]),P=j(()=>{if(!r.caller||r.caller==="Unknown")return null;const t=r.caller.split(/[\/\\]/);return(t[t.length-1]||r.caller).replace(/\?.*$/,"").replace(/^[a-zA-Z0-9_$]+@/,"")},[r.caller]),K=t=>{t?.stopPropagation?.(),ae.alert(H("common.openInBrowser")||"Open in Browser",`${H("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
1
+ import ee,{useEffect as re,useRef as oe,useMemo as te}from"react";import{Alert as ne,Animated as D,Linking as F,View as C,Pressable as M,Text as T,StyleSheet as A}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as e}from"../styles/AppColors";import{METHOD_COLORS as U}from"../constants";import{getStatusColor as Be,getDurationColor as Se,formatDateTime as He,getSize as Re,getPath as Ve,getBaseUrl as ze}from"../helpers";import{CalendarIcon as Le,ClockIcon as E,SizeIcon as Ie,CircleCheckIcon as $e,CircleAlertIcon as De,CircleXIcon as Fe,RepeatIcon as Oe,ForwardChevronIcon as We}from"./NetworkIcons";import{AppFonts as B}from"../styles/AppFonts";import Pe from"./HighlightText";import Me from"./TouchableScale";import{useTranslation as Ae}from"../i18n";const Ue=ee.memo(function({item:r,onPress:q,timelineMinStart:qe,timelineTotalRange:Ne,isNew:I,isSelected:O,onToggleSelect:N,searchStr:G}){const{t:V}=Ae(),W=U[r.method]??U.ALL,H=te(()=>{try{const t=new URL(r.url),L=t.host,v=t.pathname+(t.search?t.search:""),Z=t.protocol==="https:";return{host:L,path:v||"/",isHttps:Z}}catch{const t=r.url.toLowerCase().startsWith("https:"),L=Ve(r.url);return{host:ze(r.url).replace(/^https?:\/\//,""),path:L||r.url,isHttps:t}}},[r.url]),J=t=>{t?.stopPropagation?.(),ne.alert(V("common.openInBrowser")||"Open in Browser",`${V("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
2
2
 
3
- ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.open")||"Open",onPress:()=>{D.canOpenURL(r.url).then(V=>{V?D.openURL(r.url):D.openURL(r.url).catch(()=>{})}).catch(()=>{})}}])},R=r.status===0||r.status!=null&&r.status>=400,z=r.status==null,I=Be(r.status),L=Se(r.duration),Q=z?e.darkOrange:R?e.errorColor:e.greenColor,v=le(new W.Value($?.35:0)).current;te(()=>{$&&W.timing(v,{toValue:0,duration:1200,useNativeDriver:!1}).start()},[$]);const X=()=>{if(z)return"...";if(r.status===0||r.status==null)return H("network.statusFailed")||"FAILED";const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t===200?"200 OK":t===201?"201 Created":t===204?"204 No Content":t===304?"304 Not Modified":t===400?"400 Bad Req":t===401?"401 Unauth":t===403?"403 Forbidden":t===404?"404 Not Found":t===500?"500 Error":String(r.status)},Z=()=>{if(z)return<N color={e.darkOrange}size={10}/>;const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t>=200&&t<300?<Ie color={e.greenColor}size={10}/>:t>=300&&t<400?<Fe color={e.amber700}size={10}/>:t>=400&&t<500?<We color={e.darkOrange}size={10}/>:<De color={e.errorColor}size={10}/>},Y=Re(r.startTime),ee=r.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={o.container}>
4
- <Me onPress={_}style={[o.card,{borderLeftWidth:3.5,borderLeftColor:Q,backgroundColor:R?e.errorCardBg:e.white}]}>
3
+ ${r.url}`,[{text:V("common.cancel")||"Cancel",style:"cancel"},{text:V("common.open")||"Open",onPress:()=>{F.canOpenURL(r.url).then(L=>{L?F.openURL(r.url):F.openURL(r.url).catch(()=>{})}).catch(()=>{})}}])},S=r.status===0||r.status!=null&&r.status>=400,R=r.status==null,$=Be(r.status),z=Se(r.duration),K=R?e.darkOrange:S?e.errorColor:e.greenColor,P=oe(new D.Value(I?.35:0)).current;re(()=>{I&&D.timing(P,{toValue:0,duration:1200,useNativeDriver:!1}).start()},[I]);const Q=()=>{if(R)return"...";if(r.status===0||r.status==null)return V("network.statusFailed")||"FAILED";const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t===200?"200 OK":t===201?"201 Created":t===204?"204 No Content":t===304?"304 Not Modified":t===400?"400 Bad Req":t===401?"401 Unauth":t===403?"403 Forbidden":t===404?"404 Not Found":t===500?"500 Error":String(r.status)},X=()=>{if(R)return<E color={e.darkOrange}size={10}/>;const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t>=200&&t<300?<$e color={e.greenColor}size={10}/>:t>=300&&t<400?<Oe color={e.amber700}size={10}/>:t>=400&&t<500?<De color={e.darkOrange}size={10}/>:<Fe color={e.errorColor}size={10}/>},_=He(r.startTime),Y=r.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={o.container}>
4
+ <Me onPress={q}style={[o.card,{borderLeftWidth:3.5,borderLeftColor:K,backgroundColor:S?e.errorCardBg:e.white}]}>
5
5
  <C style={o.cardBody}>
6
6
 
7
7
  <C style={o.cardHeaderRow}>
8
8
  <C style={o.cardHeaderLeft}>
9
- <A onPress={()=>G(r.id)}hitSlop={12}style={[o.smallCheckbox,F&&o.smallCheckboxChecked]}>
10
- {F&&<Ce width={9}height={9}viewBox="0 0 24 24"fill="none">
9
+ <M onPress={()=>N(r.id)}hitSlop={12}style={[o.smallCheckbox,O&&o.smallCheckboxChecked]}>
10
+ {O&&<Ce width={9}height={9}viewBox="0 0 24 24"fill="none">
11
11
  <Te d="M20 6L9 17l-5-5"stroke={e.white}strokeWidth="4"strokeLinecap="round"strokeLinejoin="round"/>
12
12
  </Ce>}
13
- </A>
13
+ </M>
14
14
 
15
15
  <T style={o.serialNumber}>#{r.id+1}</T>
16
16
 
17
- <C style={[o.methodBadge,{backgroundColor:O}]}>
17
+ <C style={[o.methodBadge,{backgroundColor:W}]}>
18
18
  <T style={o.methodBadgeText}>
19
19
  {r.method}
20
20
  </T>
@@ -34,20 +34,23 @@ ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.op
34
34
  </C>}
35
35
  </C>
36
36
 
37
- <C style={[o.statusPill,{backgroundColor:R?`${e.errorColor}14`:z?`${e.darkOrange}14`:`${I}14`,borderColor:R?`${e.errorColor}33`:z?`${e.darkOrange}33`:`${I}33`}]}>
38
- {Z()}
39
- <T style={[o.statusPillText,{color:R?e.errorColor:z?e.darkOrange:I}]}>
37
+ <C style={o.cardHeaderRight}>
38
+ <C style={[o.statusPill,{backgroundColor:S?`${e.errorColor}14`:R?`${e.darkOrange}14`:`${$}14`,borderColor:S?`${e.errorColor}33`:R?`${e.darkOrange}33`:`${$}33`}]}>
40
39
  {X()}
41
- </T>
40
+ <T style={[o.statusPillText,{color:S?e.errorColor:R?e.darkOrange:$}]}>
41
+ {Q()}
42
+ </T>
43
+ </C>
44
+ <We color={e.grayTextWeak}size={13}/>
42
45
  </C>
43
46
  </C>
44
47
 
45
48
 
46
- <A onPress={K}hitSlop={6}style={o.urlBox}>
49
+ <M onPress={J}hitSlop={6}style={o.urlBox}>
47
50
  <C style={o.urlMainRow}>
48
- <Pe text={S.path}search={J}style={o.pathText}highlightStyle={o.highlight}numberOfLines={2}ellipsizeMode="middle"/>
51
+ <Pe text={H.path}search={G}style={o.pathText}highlightStyle={o.highlight}numberOfLines={1}ellipsizeMode="middle"/>
49
52
  <C style={o.urlBadgeRow}>
50
- {ee&&<C style={o.jsonBadge}>
53
+ {Y&&<C style={o.jsonBadge}>
51
54
  <T style={o.jsonBadgeText}>.json</T>
52
55
  </C>}
53
56
  {r.duplicateCount!=null&&r.duplicateCount>1&&<C style={o.dupBadge}>
@@ -56,45 +59,38 @@ ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.op
56
59
  </C>
57
60
  </C>
58
61
 
59
- {S.host?<C style={o.hostRow}>
60
- <C style={[o.protoBadge,{backgroundColor:S.isHttps?`${e.emerald600}12`:`${e.amber600}12`,borderColor:S.isHttps?`${e.emerald600}2B`:`${e.amber600}2B`}]}>
61
- <T style={[o.protoBadgeText,{color:S.isHttps?e.emerald600:e.amber700}]}>
62
- {S.isHttps?"HTTPS":"HTTP"}
63
- </T>
64
- </C>
65
- <T style={o.hostText}numberOfLines={1}ellipsizeMode="tail">
66
- {S.host}
62
+ <C style={o.hostRow}>
63
+ <C style={[o.protoBadge,{backgroundColor:H.isHttps?`${e.emerald600}12`:`${e.amber600}12`,borderColor:H.isHttps?`${e.emerald600}2B`:`${e.amber600}2B`}]}>
64
+ <T style={[o.protoBadgeText,{color:H.isHttps?e.emerald600:e.amber700}]}>
65
+ {H.isHttps?"HTTPS":"HTTP"}
67
66
  </T>
68
- </C>:null}
69
- </A>
67
+ </C>
68
+ <T style={o.hostText}numberOfLines={1}ellipsizeMode="tail">
69
+ {H.host||r.url}
70
+ </T>
71
+ </C>
72
+ </M>
70
73
 
71
74
 
72
75
  <C style={o.cardFooterRow}>
73
76
  <C style={o.footerLeft}>
74
77
  <C style={o.cardDateRow}>
75
78
  <Le color={e.grayTextWeak}size={10}/>
76
- <T style={o.cardDateText}>{Y}</T>
79
+ <T style={o.cardDateText}numberOfLines={1}>{_}</T>
77
80
  </C>
78
-
79
- {P&&<C style={o.callerChip}>
80
- <Oe color={e.sky600}size={8.5}/>
81
- <T style={o.callerChipText}numberOfLines={1}ellipsizeMode="middle">
82
- {P}
83
- </T>
84
- </C>}
85
81
  </C>
86
82
 
87
83
  <C style={o.footerRight}>
88
84
  {r.response!=null&&<C style={o.metaStatChip}>
89
- <$e color={e.purple}size={9}/>
85
+ <Ie color={e.purple}size={9}/>
90
86
  <T style={o.metaStatText}>
91
- {ze(r.response)}
87
+ {Re(r.response)}
92
88
  </T>
93
89
  </C>}
94
90
 
95
- {r.duration!=null&&!R&&<C style={[o.metaStatChip,{backgroundColor:`${L}12`,borderColor:`${L}2E`}]}>
96
- <N color={L}size={9}/>
97
- <T style={[o.metaStatText,{color:L}]}>
91
+ {r.duration!=null&&!S&&<C style={[o.metaStatChip,{backgroundColor:`${z}12`,borderColor:`${z}2E`}]}>
92
+ <E color={z}size={9}/>
93
+ <T style={[o.metaStatText,{color:z}]}>
98
94
  {r.duration}ms
99
95
  </T>
100
96
  </C>}
@@ -102,11 +98,11 @@ ${r.url}`,[{text:H("common.cancel")||"Cancel",style:"cancel"},{text:H("common.op
102
98
  </C>
103
99
 
104
100
 
105
- {typeof r.duration=="number"&&r.duration>0&&!R&&<C style={o.waterfallContainer}>
106
- <C style={[o.waterfallBar,{width:`${Math.min(100,Math.max(6,r.duration/1200*100))}%`,backgroundColor:L}]}/>
107
- </C>}
101
+ <C style={o.waterfallContainer}>
102
+ {typeof r.duration=="number"&&r.duration>0&&!S&&<C style={[o.waterfallBar,{width:`${Math.min(100,Math.max(6,r.duration/1200*100))}%`,backgroundColor:z}]}/>}
103
+ </C>
108
104
  </C>
109
105
 
110
- {$&&<W.View pointerEvents="none"style={[U.absoluteFill,{backgroundColor:O,opacity:v}]}/>}
106
+ {I&&<D.View pointerEvents="none"style={[A.absoluteFill,{backgroundColor:W,opacity:P}]}/>}
111
107
  </Me>
112
- </C>}),o=U.create({container:{paddingHorizontal:8,paddingVertical:3},card:{alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:e.dividerColor,shadowColor:e.shadowColorString},cardBody:{paddingHorizontal:11,paddingTop:8,paddingBottom:7},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:5,minHeight:20},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:6,gap:5,minWidth:0,flexWrap:"wrap"},smallCheckbox:{width:14,height:14,borderRadius:3.5,borderWidth:1.5,borderColor:e.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:e.white},smallCheckboxChecked:{backgroundColor:e.purple,borderColor:e.purple},serialNumber:{fontFamily:B.interBold,color:e.grayTextWeak,fontSize:9.5},methodBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:B.interBold,fontSize:9,lineHeight:11,letterSpacing:.5,color:e.white},chip:{paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,borderWidth:1},chipText:{fontFamily:B.interBold,fontSize:8.5,lineHeight:11},statusPill:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:6.5,paddingVertical:2,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:B.interBold,fontSize:9.5,lineHeight:12},urlBox:{backgroundColor:e.grayBackground,borderRadius:7,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:8,paddingVertical:5,marginVertical:3,gap:3},urlMainRow:{flexDirection:"row",alignItems:"flex-start",justifyContent:"space-between",gap:6},pathText:{fontFamily:B.interBold,fontSize:12,lineHeight:16,color:e.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}2E`,borderWidth:1,paddingHorizontal:4,paddingVertical:1,borderRadius:3},jsonBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.darkOrange},dupBadge:{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}2E`,borderWidth:1,paddingHorizontal:4,paddingVertical:1,borderRadius:3},dupBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.purple},hostRow:{flexDirection:"row",alignItems:"center",gap:4.5},protoBadge:{paddingHorizontal:4,paddingVertical:1,borderRadius:3,borderWidth:1},protoBadgeText:{fontFamily:B.interBold,fontSize:7.5,lineHeight:9},hostText:{fontFamily:B.interMedium,fontSize:10,lineHeight:13,color:e.grayTextWeak,flex:1},highlight:{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginTop:3,gap:6},footerLeft:{flexDirection:"row",alignItems:"center",gap:5,flex:1,minWidth:0},footerRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3},cardDateText:{fontFamily:B.interRegular,fontSize:9.5,lineHeight:12,color:e.slate400},callerChip:{flexDirection:"row",alignItems:"center",gap:2.5,backgroundColor:e.skySoftBg,borderColor:e.skySoftBorder,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:4,flexShrink:1,minWidth:0},callerChipText:{color:e.skySoftText,fontSize:8.5,lineHeight:11,fontFamily:B.interBold},metaStatChip:{flexDirection:"row",alignItems:"center",gap:2.5,backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder,borderWidth:1,paddingHorizontal:5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:B.interBold,color:e.violetSoftText,fontSize:9,lineHeight:11},waterfallContainer:{height:2,width:"100%",backgroundColor:e.graySurface,borderRadius:1,overflow:"hidden",marginTop:5},waterfallBar:{height:"100%",borderRadius:1}});export default Ae;
108
+ </C>}),o=A.create({container:{paddingHorizontal:8,paddingVertical:4,height:126,justifyContent:"center"},card:{height:118,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:e.dividerColor,shadowColor:e.shadowColorString},cardBody:{height:"100%",paddingHorizontal:12,paddingTop:9,paddingBottom:7,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:8,gap:6,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0},smallCheckbox:{width:15,height:15,borderRadius:4,borderWidth:1.5,borderColor:e.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:e.white},smallCheckboxChecked:{backgroundColor:e.purple,borderColor:e.purple},serialNumber:{fontFamily:B.interBold,color:e.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:7,paddingVertical:2.5,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:B.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:e.white},chip:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},chipText:{fontFamily:B.interBold,fontSize:9,lineHeight:12},statusPill:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:2.5,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:B.interBold,fontSize:10,lineHeight:13},urlBox:{backgroundColor:e.grayBackground,borderRadius:7,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:9,paddingVertical:5,height:48,minHeight:48,maxHeight:48,justifyContent:"center",gap:3,overflow:"hidden"},urlMainRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},pathText:{fontFamily:B.interBold,fontSize:12,lineHeight:16,color:e.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},jsonBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.darkOrange},dupBadge:{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.purple},hostRow:{flexDirection:"row",alignItems:"center",gap:5,minHeight:15},protoBadge:{paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5,borderWidth:1},protoBadgeText:{fontFamily:B.interBold,fontSize:8,lineHeight:10},hostText:{fontFamily:B.interMedium,fontSize:10,lineHeight:13,color:e.grayTextWeak,flex:1},highlight:{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:6},footerLeft:{flexDirection:"row",alignItems:"center",gap:6,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:B.interRegular,fontSize:10,lineHeight:13,color:e.slate400},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:B.interBold,color:e.violetSoftText,fontSize:9,lineHeight:12},waterfallContainer:{height:2.5,width:"100%",backgroundColor:e.graySurface,borderRadius:1.5,overflow:"hidden",marginTop:2},waterfallBar:{height:"100%",borderRadius:1.5}});export default Ue;
@@ -1,4 +1,4 @@
1
- import F from"react";import{StyleSheet as G,Text as T}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{escapeRegex as U,handleOpenExternalLink as H}from"../helpers";const M=/("(?:\\.|[^"\\])*"(?=\s*:))|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\b(?:true|false)\b)|(\b(?:null|undefined|NaN)\b)|(https?:\/\/[^\s"',]+)|(\[[\w\s_-]+\])|([{}[\],:])|([^"'\d\s{}[\],:]+|[ \t\r\n]+)/g;export const tokenizeText=l=>{if(!l)return[];const t=[];let e;for(M.lastIndex=0;(e=M.exec(l))!==null;)e[1]?t.push({type:"key",value:e[1]}):e[2]?t.push({type:"string",value:e[2]}):e[3]?t.push({type:"number",value:e[3]}):e[4]?t.push({type:"boolean",value:e[4]}):e[5]?t.push({type:"null",value:e[5]}):e[6]?t.push({type:"url",value:e[6]}):e[7]?t.push({type:"tag",value:e[7]}):e[8]?t.push({type:"bracket",value:e[8]}):e[9]&&t.push({type:"plain",value:e[9]});return t};const X=l=>{switch(l){case"key":return r.sky600||"#0369a1";case"string":return r.emerald600||"#059669";case"number":return r.amber600||"#d97706";case"boolean":return r.purple||"#7c3aed";case"null":return r.red600||"#dc2626";case"url":return"#0284c7";case"tag":return r.violet600||"#7c3aed";case"bracket":return r.slate500||"#64748b";default:return r.primaryBlack||"#1e293b"}};export const LogSyntaxHighlighter=F.memo(({text:l,search:t,numberOfLines:e,style:O,detectLinks:L=!0})=>{if(!l)return null;const z=F.useMemo(()=>tokenizeText(l),[l]),A=(n,S)=>{const K=X(n.type),C=n.type==="url",P=n.type==="key",R={color:K,fontFamily:P?w.interBold:w.interRegular,textDecorationLine:C?"underline":"none"};if(!t||t.trim().length===0)return<T key={S}style={R}onPress={C&&L?()=>H(n.value):void 0}>
1
+ import F from"react";import{StyleSheet as G,Text as T}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{escapeRegex as U,handleOpenExternalLink as H}from"../helpers";const M=/("(?:\\.|[^"\\])*"(?=\s*:))|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\b(?:true|false)\b)|(\b(?:null|undefined|NaN)\b)|(https?:\/\/[^\s"',]+)|(\[[\w\s_-]+\])|([{}[\],:])|([^"'\d\s{}[\],:]+|[ \t\r\n]+)/g;export const tokenizeText=l=>{if(!l)return[];const t=[];let e;for(M.lastIndex=0;(e=M.exec(l))!==null;)e[1]?t.push({type:"key",value:e[1]}):e[2]?t.push({type:"string",value:e[2]}):e[3]?t.push({type:"number",value:e[3]}):e[4]?t.push({type:"boolean",value:e[4]}):e[5]?t.push({type:"null",value:e[5]}):e[6]?t.push({type:"url",value:e[6]}):e[7]?t.push({type:"tag",value:e[7]}):e[8]?t.push({type:"bracket",value:e[8]}):e[9]&&t.push({type:"plain",value:e[9]});return t};const X=l=>{switch(l){case"key":return r.sky600;case"string":return r.emerald600;case"number":return r.amber600;case"boolean":return r.purple;case"null":return r.red600;case"url":return r.sky600;case"tag":return r.violet600;case"bracket":return r.slate500;default:return r.primaryBlack}};export const LogSyntaxHighlighter=F.memo(({text:l,search:t,numberOfLines:e,style:O,detectLinks:L=!0})=>{if(!l)return null;const z=F.useMemo(()=>tokenizeText(l),[l]),A=(n,S)=>{const K=X(n.type),C=n.type==="url",P=n.type==="key",R={color:K,fontFamily:P?w.interBold:w.interRegular,textDecorationLine:C?"underline":"none"};if(!t||t.trim().length===0)return<T key={S}style={R}onPress={C&&L?()=>H(n.value):void 0}>
2
2
  {n.value}
3
3
  </T>;const _=new RegExp(`(${U(t.trim())})`,"gi"),D=n.value.split(_);return<T key={S}style={R}>
4
4
  {D.map((E,B)=>E.toLowerCase()===t.trim().toLowerCase()?<T key={B}style={[R,N.searchHighlight]}>
@@ -3,7 +3,9 @@ import { ViewStyle } from 'react-native';
3
3
  export interface SegmentedTab {
4
4
  key: string;
5
5
  label: string;
6
- icon?: (isActive: boolean) => React.ReactNode;
6
+ themeColor?: string;
7
+ color?: string;
8
+ icon?: (isActive: boolean, themeColor?: string) => React.ReactNode;
7
9
  }
8
10
  interface SegmentedTabsProps {
9
11
  tabs: SegmentedTab[];
@@ -11,5 +13,6 @@ interface SegmentedTabsProps {
11
13
  onChange: (key: string) => void;
12
14
  style?: ViewStyle | ViewStyle[];
13
15
  }
16
+ export declare const DEFAULT_INNER_TAB_THEMES: Record<string, string>;
14
17
  declare const SegmentedTabs: React.MemoExoticComponent<({ tabs, activeKey, onChange, style }: SegmentedTabsProps) => React.JSX.Element>;
15
18
  export default SegmentedTabs;