react-native-inapp-inspector 2.4.0 → 2.4.2

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 (231) hide show
  1. package/README.ar.md +163 -0
  2. package/README.de.md +163 -0
  3. package/README.es.md +164 -0
  4. package/README.fr.md +163 -0
  5. package/README.hi.md +163 -0
  6. package/README.ja.md +180 -0
  7. package/README.ko.md +163 -0
  8. package/README.md +340 -243
  9. package/README.pt-BR.md +163 -0
  10. package/README.ru.md +163 -0
  11. package/README.zh-CN.md +387 -0
  12. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +82 -21
  13. package/assets/banner_dark.svg +186 -0
  14. package/assets/banner_light.svg +186 -0
  15. package/assets/icon_circle.svg +148 -0
  16. package/assets/icon_square.svg +369 -0
  17. package/assets/inapp_inspector_icon.gif +0 -0
  18. package/assets/inapp_inspector_icon_original.gif +0 -0
  19. package/assets/social_preview.png +0 -0
  20. package/assets/walkthrough.gif +0 -0
  21. package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
  22. package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
  23. package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
  24. package/dist/commonjs/components/AppHeaderLogo.js +7 -5
  25. package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
  26. package/dist/commonjs/components/BrandSquareIcon.js +139 -0
  27. package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
  28. package/dist/commonjs/components/ConsoleLogCard.js +23 -39
  29. package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
  30. package/dist/commonjs/components/Inspector/AnalyticsTab.js +16 -16
  31. package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
  32. package/dist/commonjs/components/Inspector/ConfirmationModal.js +32 -0
  33. package/dist/commonjs/components/Inspector/ConsoleTab.js +15 -15
  34. package/dist/commonjs/components/Inspector/CrashTab.js +25 -23
  35. package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
  36. package/dist/commonjs/components/Inspector/FabLauncher.js +22 -30
  37. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
  38. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  39. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +90 -0
  40. package/dist/commonjs/components/Inspector/MainScreen.js +46 -33
  41. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +21 -19
  42. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +85 -101
  43. package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
  44. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
  45. package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
  46. package/dist/commonjs/components/Inspector/PushCard.js +5 -4
  47. package/dist/commonjs/components/Inspector/PushDetail.js +32 -23
  48. package/dist/commonjs/components/Inspector/PushTab.js +13 -13
  49. package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
  50. package/dist/commonjs/components/Inspector/ReduxTab.js +14 -14
  51. package/dist/commonjs/components/Inspector/SettingsPanel.js +258 -139
  52. package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
  53. package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
  54. package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
  55. package/dist/commonjs/components/Inspector/SocketDetail.js +317 -0
  56. package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
  57. package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
  58. package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
  59. package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
  60. package/dist/commonjs/components/Inspector/StorageTab.js +34 -32
  61. package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
  62. package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
  63. package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
  64. package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
  65. package/dist/commonjs/components/Inspector/TabBar.js +24 -23
  66. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
  67. package/dist/commonjs/components/JsonViewer.js +7 -7
  68. package/dist/commonjs/components/LogCard.d.ts +3 -2
  69. package/dist/commonjs/components/LogCard.js +17 -14
  70. package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
  71. package/dist/commonjs/components/ModuleErrorBoundary.js +2 -2
  72. package/dist/commonjs/components/NetworkIcons.d.ts +15 -0
  73. package/dist/commonjs/components/NetworkIcons.js +38 -3
  74. package/dist/commonjs/components/SegmentedTabs.js +1 -1
  75. package/dist/commonjs/constants/version.d.ts +1 -1
  76. package/dist/commonjs/constants/version.js +1 -1
  77. package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
  78. package/dist/commonjs/customHooks/socketLogger.js +2 -0
  79. package/dist/commonjs/helpers/index.js +3 -3
  80. package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
  81. package/dist/commonjs/helpers/memoryManager.js +1 -1
  82. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  83. package/dist/commonjs/helpers/searchQueryParser.js +5 -1
  84. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  85. package/dist/commonjs/helpers/settingsStore.js +1 -1
  86. package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
  87. package/dist/commonjs/helpers/shareFormatter.js +8 -7
  88. package/dist/commonjs/i18n/index.d.ts +99 -1
  89. package/dist/commonjs/i18n/index.js +1 -1
  90. package/dist/commonjs/i18n/locales/ar.json +1 -1
  91. package/dist/commonjs/i18n/locales/bn.json +1 -0
  92. package/dist/commonjs/i18n/locales/de.json +1 -1
  93. package/dist/commonjs/i18n/locales/en.json +1 -1
  94. package/dist/commonjs/i18n/locales/es.json +1 -1
  95. package/dist/commonjs/i18n/locales/fr.json +1 -1
  96. package/dist/commonjs/i18n/locales/gu.json +1 -0
  97. package/dist/commonjs/i18n/locales/hi.json +1 -1
  98. package/dist/commonjs/i18n/locales/id.json +1 -0
  99. package/dist/commonjs/i18n/locales/it.json +1 -0
  100. package/dist/commonjs/i18n/locales/ja.json +1 -1
  101. package/dist/commonjs/i18n/locales/kn.json +1 -0
  102. package/dist/commonjs/i18n/locales/ko.json +1 -1
  103. package/dist/commonjs/i18n/locales/ml.json +1 -0
  104. package/dist/commonjs/i18n/locales/mr.json +1 -0
  105. package/dist/commonjs/i18n/locales/nl.json +1 -0
  106. package/dist/commonjs/i18n/locales/pa.json +1 -0
  107. package/dist/commonjs/i18n/locales/pl.json +1 -0
  108. package/dist/commonjs/i18n/locales/pt.json +1 -1
  109. package/dist/commonjs/i18n/locales/ru.json +1 -1
  110. package/dist/commonjs/i18n/locales/ta.json +1 -0
  111. package/dist/commonjs/i18n/locales/te.json +1 -0
  112. package/dist/commonjs/i18n/locales/tr.json +1 -0
  113. package/dist/commonjs/i18n/locales/vi.json +1 -0
  114. package/dist/commonjs/i18n/locales/zh.json +1 -1
  115. package/dist/commonjs/index.d.ts +13 -13
  116. package/dist/commonjs/index.js +5 -4
  117. package/dist/commonjs/native/NativeInspector.d.ts +1 -0
  118. package/dist/commonjs/socket.d.ts +4 -0
  119. package/dist/commonjs/socket.js +1 -0
  120. package/dist/commonjs/styles/index.d.ts +23 -0
  121. package/dist/commonjs/styles/index.js +1 -1
  122. package/dist/commonjs/types/enums.d.ts +40 -0
  123. package/dist/commonjs/types/enums.js +1 -1
  124. package/dist/commonjs/types/interfaces.d.ts +122 -1
  125. package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
  126. package/dist/esm/components/AnimatedBrandOwl.js +175 -0
  127. package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
  128. package/dist/esm/components/AppHeaderLogo.js +7 -5
  129. package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
  130. package/dist/esm/components/BrandSquareIcon.js +139 -0
  131. package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
  132. package/dist/esm/components/ConsoleLogCard.js +61 -77
  133. package/dist/esm/components/Inspector/AboutModal.js +85 -95
  134. package/dist/esm/components/Inspector/AnalyticsTab.js +31 -31
  135. package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
  136. package/dist/esm/components/Inspector/ConfirmationModal.js +32 -0
  137. package/dist/esm/components/Inspector/ConsoleTab.js +49 -49
  138. package/dist/esm/components/Inspector/CrashTab.js +40 -38
  139. package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
  140. package/dist/esm/components/Inspector/FabLauncher.js +50 -58
  141. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
  142. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  143. package/dist/esm/components/Inspector/LanguageSelectorModal.js +90 -0
  144. package/dist/esm/components/Inspector/MainScreen.js +123 -110
  145. package/dist/esm/components/Inspector/MediaGalleryTab.js +64 -62
  146. package/dist/esm/components/Inspector/MediaPreviewModal.js +107 -123
  147. package/dist/esm/components/Inspector/NetworkTab.js +90 -90
  148. package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
  149. package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
  150. package/dist/esm/components/Inspector/PushCard.js +23 -22
  151. package/dist/esm/components/Inspector/PushDetail.js +34 -25
  152. package/dist/esm/components/Inspector/PushTab.js +25 -25
  153. package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
  154. package/dist/esm/components/Inspector/ReduxTab.js +35 -35
  155. package/dist/esm/components/Inspector/SettingsPanel.js +495 -376
  156. package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
  157. package/dist/esm/components/Inspector/SocketCard.js +116 -0
  158. package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
  159. package/dist/esm/components/Inspector/SocketDetail.js +317 -0
  160. package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
  161. package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
  162. package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
  163. package/dist/esm/components/Inspector/SocketTab.js +112 -0
  164. package/dist/esm/components/Inspector/StorageTab.js +136 -134
  165. package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
  166. package/dist/esm/components/Inspector/SupportModal.js +125 -0
  167. package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
  168. package/dist/esm/components/Inspector/SupportPage.js +227 -0
  169. package/dist/esm/components/Inspector/TabBar.js +36 -35
  170. package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
  171. package/dist/esm/components/JsonViewer.js +55 -55
  172. package/dist/esm/components/LogCard.d.ts +3 -2
  173. package/dist/esm/components/LogCard.js +61 -58
  174. package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
  175. package/dist/esm/components/ModuleErrorBoundary.js +23 -23
  176. package/dist/esm/components/NetworkIcons.d.ts +15 -0
  177. package/dist/esm/components/NetworkIcons.js +38 -3
  178. package/dist/esm/components/SegmentedTabs.js +7 -7
  179. package/dist/esm/constants/version.d.ts +1 -1
  180. package/dist/esm/constants/version.js +1 -1
  181. package/dist/esm/customHooks/socketLogger.d.ts +26 -0
  182. package/dist/esm/customHooks/socketLogger.js +2 -0
  183. package/dist/esm/helpers/index.js +3 -3
  184. package/dist/esm/helpers/memoryManager.d.ts +1 -0
  185. package/dist/esm/helpers/memoryManager.js +1 -1
  186. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  187. package/dist/esm/helpers/searchQueryParser.js +5 -1
  188. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  189. package/dist/esm/helpers/settingsStore.js +1 -1
  190. package/dist/esm/helpers/shareFormatter.d.ts +3 -1
  191. package/dist/esm/helpers/shareFormatter.js +8 -7
  192. package/dist/esm/i18n/index.d.ts +99 -1
  193. package/dist/esm/i18n/index.js +1 -1
  194. package/dist/esm/i18n/locales/ar.json +1 -1
  195. package/dist/esm/i18n/locales/bn.json +1 -0
  196. package/dist/esm/i18n/locales/de.json +1 -1
  197. package/dist/esm/i18n/locales/en.json +1 -1
  198. package/dist/esm/i18n/locales/es.json +1 -1
  199. package/dist/esm/i18n/locales/fr.json +1 -1
  200. package/dist/esm/i18n/locales/gu.json +1 -0
  201. package/dist/esm/i18n/locales/hi.json +1 -1
  202. package/dist/esm/i18n/locales/id.json +1 -0
  203. package/dist/esm/i18n/locales/it.json +1 -0
  204. package/dist/esm/i18n/locales/ja.json +1 -1
  205. package/dist/esm/i18n/locales/kn.json +1 -0
  206. package/dist/esm/i18n/locales/ko.json +1 -1
  207. package/dist/esm/i18n/locales/ml.json +1 -0
  208. package/dist/esm/i18n/locales/mr.json +1 -0
  209. package/dist/esm/i18n/locales/nl.json +1 -0
  210. package/dist/esm/i18n/locales/pa.json +1 -0
  211. package/dist/esm/i18n/locales/pl.json +1 -0
  212. package/dist/esm/i18n/locales/pt.json +1 -1
  213. package/dist/esm/i18n/locales/ru.json +1 -1
  214. package/dist/esm/i18n/locales/ta.json +1 -0
  215. package/dist/esm/i18n/locales/te.json +1 -0
  216. package/dist/esm/i18n/locales/tr.json +1 -0
  217. package/dist/esm/i18n/locales/vi.json +1 -0
  218. package/dist/esm/i18n/locales/zh.json +1 -1
  219. package/dist/esm/index.d.ts +13 -13
  220. package/dist/esm/index.js +8 -7
  221. package/dist/esm/native/NativeInspector.d.ts +1 -0
  222. package/dist/esm/socket.d.ts +4 -0
  223. package/dist/esm/socket.js +1 -0
  224. package/dist/esm/styles/index.d.ts +23 -0
  225. package/dist/esm/styles/index.js +1 -1
  226. package/dist/esm/types/enums.d.ts +40 -0
  227. package/dist/esm/types/enums.js +1 -1
  228. package/dist/esm/types/interfaces.d.ts +122 -1
  229. package/ios/NetworkInspectorModule.mm +102 -12
  230. package/package.json +204 -2
  231. package/src/native/NativeInspector.ts +8 -0
@@ -0,0 +1,112 @@
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,i,l){l===void 0&&(l=i);var a=Object.getOwnPropertyDescriptor(r,i);(!a||("get"in a?!r.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return r[i]}}),Object.defineProperty(t,l,a)}):(function(t,r,i,l){l===void 0&&(l=i),t[l]=r[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),__importStar=this&&this.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(i){var l=[];for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(l[l.length]=a);return l},t(r)};return function(r){if(r&&r.__esModule)return r;var i={};if(r!=null)for(var l=t(r),a=0;a<l.length;a++)l[a]!=="default"&&__createBinding(i,r,l[a]);return __setModuleDefault(i,r),i}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),InspectorContext_1=require("./InspectorContext"),SocketCard_1=__importDefault(require("./SocketCard")),SocketFilterModal_1=__importStar(require("./SocketFilterModal")),ConfirmationModal_1=require("./ConfirmationModal"),TouchableScale_1=__importDefault(require("../TouchableScale")),AnimatedEntrance_1=__importDefault(require("../AnimatedEntrance")),EmptyState_1=__importDefault(require("../EmptyState")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),styles_1=__importDefault(require("../../styles")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),helpers_1=require("../../helpers"),toast_1=require("../../helpers/toast"),NetworkIcons_1=require("../NetworkIcons"),LOAD_MORE_STEP=10,SocketTab=react_1.default.memo(()=>{const{t}=(0,i18n_1.useTranslation)(),{socketRecords:r,filteredSocketRecords:i,socketSearch:l,setSocketSearch:a,socketQuickFilter:p,setSocketQuickFilter:_,setSelectedSocket:T,clearAllSocketLogs:w,deleteMultipleSocketRecords:k,simulateSocket:A,maxSocketLogs:m}=(0,InspectorContext_1.useInspector)(),L=m||50,x=(0,react_1.useRef)(null),[v,E]=(0,react_1.useState)(0),[b,B]=(0,react_1.useState)(L),[q,I]=(0,react_1.useState)(!1),[d,$]=(0,react_1.useState)(SocketFilterModal_1.DEFAULT_SOCKET_FILTERS),[c,C]=(0,react_1.useState)(new Set),[F,V]=(0,react_1.useState)(!1),[f,h]=(0,react_1.useState)({visible:!1,title:"",message:"",onConfirm:()=>{}});react_1.default.useEffect(()=>{B(m||50),x.current?.scrollToOffset({offset:0,animated:!1})},[l,p,m]);const z=["chat","crypto","socketio","echo"],O=(0,react_1.useCallback)(()=>{const e=z[v%z.length];A(e),E(o=>o+1),(0,toast_1.showToast)(`Simulated ${e.toUpperCase()} WebSocket`)},[v,A]),u=(0,react_1.useMemo)(()=>{let e=0,o=0,s=0,D=0,M=0,P=0;return r.forEach(S=>{const y=(S.status||"open").toLowerCase();y==="open"?e++:y==="closed"?o++:y==="error"&&s++,S.client==="socket.io"||S.url.includes("/socket.io")?P++:S.url.startsWith("wss://")?D++:M++}),{all:r.length,open:e,closed:o,error:s,wss:D,ws:M,sio:P}},[r]),n=(0,react_1.useMemo)(()=>{let e=i;return(0,SocketFilterModal_1.isSocketFiltersDefault)(d)||(d.status.has("all")||(e=e.filter(o=>d.status.has(o.status||"open"))),d.types.has("all")||(e=e.filter(o=>!!(d.types.has("sio")&&(o.client==="socket.io"||o.url.includes("/socket.io"))||d.types.has("wss")&&o.url.startsWith("wss://")||d.types.has("ws")&&o.url.startsWith("ws://")))),d.sortBy==="time_asc"?e=[...e].sort((o,s)=>o.startTime-s.startTime):d.sortBy==="frames_desc"?e=[...e].sort((o,s)=>(s.frames?.length||0)-(o.frames?.length||0)):d.sortBy==="duration_desc"&&(e=[...e].sort((o,s)=>(s.duration||0)-(o.duration||0)))),e},[i,d]),g=(0,react_1.useMemo)(()=>n.slice(0,b),[n,b]),R=(0,react_1.useCallback)(e=>{C(o=>{const s=new Set(o);return s.has(e)?s.delete(e):s.add(e),s})},[]),j=(0,react_1.useCallback)(()=>{c.size===n.length?C(new Set):C(new Set(n.map(e=>e.id)))},[c.size,n]),H=(0,react_1.useCallback)(()=>{const e=n.filter(s=>c.has(s.id));if(e.length===0)return;const o=e.map(s=>s.url).join(`
2
+ `);(0,helpers_1.copyToClipboard)(o,`${e.length} WebSocket URLs`),(0,toast_1.showToast)(`${e.length} URLs copied to clipboard`)},[n,c]),N=(0,react_1.useCallback)(async()=>{const e=n.filter(o=>c.has(o.id));if(e.length!==0)try{const o=JSON.stringify(e.map(s=>({url:s.url,status:s.status,startTime:new Date(s.startTime).toISOString(),duration:s.duration,framesCount:s.frames?.length||0,totalBytesSent:s.totalBytesSent,totalBytesReceived:s.totalBytesReceived})),null,2);await react_native_1.Share.share({message:o,title:`WebSocket Traffic (${e.length} connections)`})}catch{}},[n,c]),U=(0,react_1.useCallback)(()=>{c.size!==0&&h({visible:!0,title:t("socket.deleteSelectedTitle","Delete Selected WebSockets"),message:t("socket.deleteSelectedMsg",{count:c.size,defaultValue:`Are you sure you want to delete ${c.size} selected WebSocket logs?`}),confirmText:t("common.delete","Delete"),cancelText:t("common.cancel","Cancel"),onConfirm:()=>{h(o=>({...o,visible:!1}));const e=Array.from(c);k?.(e),C(new Set),(0,toast_1.showToast)(`Deleted ${e.length} WebSocket logs`)}})},[c,k,t]),K=(0,react_1.useCallback)(()=>{h({visible:!0,title:t("socket.clearTitle","Clear All WebSocket Logs"),message:t("socket.clearMessage","Are you sure you want to delete all recorded WebSocket sessions?"),confirmText:t("common.clear","Clear All"),cancelText:t("common.cancel","Cancel"),onConfirm:()=>{h(e=>({...e,visible:!1})),w(),C(new Set),(0,toast_1.showToast)(t("socket.cleared","All WebSocket logs cleared"))}})},[w,t]),Q=(0,react_1.useMemo)(()=>[{id:"all",label:"All",count:u.all,color:AppColors_1.AppColors.purple,icon:e=><NetworkIcons_1.WebsocketIcon size={12}color={e}/>},{id:"open",label:"Open",count:u.open,color:AppColors_1.AppColors.greenColor,icon:e=><react_native_1.View style={{width:6,height:6,borderRadius:3,backgroundColor:e}}/>},{id:"closed",label:"Closed",count:u.closed,color:AppColors_1.AppColors.slate500,icon:e=><NetworkIcons_1.ClockIcon size={11}color={e}/>},{id:"error",label:"Error",count:u.error,color:AppColors_1.AppColors.errorColor,icon:e=><NetworkIcons_1.FailIcon size={9}color={e}/>},{id:"sio",label:"Socket.IO",count:u.sio,color:AppColors_1.AppColors.violet600,icon:e=><NetworkIcons_1.BoltIcon size={11}color={e}/>},{id:"wss",label:"WSS",count:u.wss,color:AppColors_1.AppColors.emerald600,icon:e=><NetworkIcons_1.LockIcon size={11}color={e}/>},{id:"ws",label:"WS",count:u.ws,color:AppColors_1.AppColors.blue600,icon:e=><NetworkIcons_1.GlobeIcon size={11}color={e}/>}],[u]),G=(0,react_1.useCallback)(()=>{b<n.length&&B(e=>Math.min(e+LOAD_MORE_STEP,n.length))},[b,n.length]),W=(0,react_1.useCallback)(e=>{T(e)},[T]),J=(0,react_1.useCallback)(e=>e?.id?String(e.id):"",[]),X=(0,react_1.useCallback)(({item:e,index:o})=><AnimatedEntrance_1.default index={o}distance={8}>
3
+ <SocketCard_1.default item={e}onPress={()=>W(e)}searchStr={l}isSelected={c.has(e.id)}onToggleSelect={R}serialNumber={o+1}/>
4
+ </AnimatedEntrance_1.default>,[l,c,R,W]);return<react_native_1.View style={{flex:1,backgroundColor:AppColors_1.AppColors.primaryLight}}>
5
+
6
+ <react_native_1.View style={{marginTop:6}}>
7
+ <react_native_1.View style={styles_1.default.toolbarRow}>
8
+ <react_native_1.View style={[styles_1.default.searchContainer,{flex:1,marginRight:8,height:38},F&&{borderColor:AppColors_1.AppColors.purple,borderWidth:1.5}]}>
9
+ <react_native_1.View style={styles_1.default.searchIcon}>
10
+ <NetworkIcons_1.SearchIcon color={F?AppColors_1.AppColors.purple:AppColors_1.AppColors.grayTextWeak}size={15}/>
11
+ </react_native_1.View>
12
+ <react_native_1.TextInput style={[styles_1.default.searchInput,{paddingVertical:0}]}placeholder={t("socket.searchSocketsPlaceholder","Search WebSocket URL, payload...")}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}value={l}onChangeText={a}onFocus={()=>V(!0)}onBlur={()=>V(!1)}autoCorrect={!1}autoCapitalize="none"returnKeyType="search"clearButtonMode="while-editing"/>
13
+ {l.length>0&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4,marginRight:6}}>
14
+ <react_native_1.View style={{backgroundColor:`${AppColors_1.AppColors.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:1.5}}>
15
+ <react_native_1.Text style={{color:AppColors_1.AppColors.purple,fontSize:9.5,fontFamily:AppFonts_1.AppFonts.interBold}}>
16
+ {n.length}
17
+ </react_native_1.Text>
18
+ </react_native_1.View>
19
+ {react_native_1.Platform.OS==="android"&&<react_native_1.Pressable onPress={()=>a("")}hitSlop={10}style={styles_1.default.clearBtn}>
20
+ <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak}size={13}/>
21
+ </react_native_1.Pressable>}
22
+ </react_native_1.View>}
23
+ </react_native_1.View>
24
+
25
+ <react_native_1.View style={styles_1.default.toolbarRight}>
26
+ <TouchableScale_1.default style={[styles_1.default.toolbarBtn,!(0,SocketFilterModal_1.isSocketFiltersDefault)(d)&&{borderColor:AppColors_1.AppColors.purple,backgroundColor:`${AppColors_1.AppColors.purple}15`}]}onPress={()=>I(!0)}hitSlop={6}accessibilityRole="button"accessibilityLabel="Filter WebSockets">
27
+ <NetworkIcons_1.FilterIcon color={(0,SocketFilterModal_1.isSocketFiltersDefault)(d)?AppColors_1.AppColors.grayTextStrong:AppColors_1.AppColors.purple}size={15}/>
28
+ {!(0,SocketFilterModal_1.isSocketFiltersDefault)(d)&&<react_native_1.View style={styles_1.default.activeFilterDot}/>}
29
+ </TouchableScale_1.default>
30
+
31
+ <TouchableScale_1.default style={[styles_1.default.toolbarBtn,{backgroundColor:`${AppColors_1.AppColors.amber600}14`,borderColor:`${AppColors_1.AppColors.amber600}30`}]}onPress={O}hitSlop={6}accessibilityRole="button"accessibilityLabel="Simulate test WebSocket traffic">
32
+ <NetworkIcons_1.BoltIcon color={AppColors_1.AppColors.amber600}size={15}/>
33
+ </TouchableScale_1.default>
34
+
35
+ {r.length>0&&<TouchableScale_1.default style={[styles_1.default.toolbarBtn,{borderColor:`${AppColors_1.AppColors.errorColor}38`,backgroundColor:`${AppColors_1.AppColors.errorColor}0F`}]}onPress={K}hitSlop={6}accessibilityRole="button"accessibilityLabel="Clear all socket logs">
36
+ <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor}size={15}/>
37
+ </TouchableScale_1.default>}
38
+ </react_native_1.View>
39
+ </react_native_1.View>
40
+ </react_native_1.View>
41
+
42
+
43
+ <react_native_1.View style={socketTabStyles.carouselWrapper}>
44
+ <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={socketTabStyles.carouselContent}>
45
+ {Q.map(e=>{const o=p===e.id;return<TouchableScale_1.default key={e.id}onPress={()=>_(e.id)}style={[socketTabStyles.filterPill,o&&{backgroundColor:e.color,borderColor:e.color}]}>
46
+ {e.icon?e.icon(o?AppColors_1.AppColors.white:e.color):null}
47
+ <react_native_1.Text style={[socketTabStyles.filterPillText,o&&{color:AppColors_1.AppColors.white,fontFamily:AppFonts_1.AppFonts.interBold}]}>
48
+ {e.label}
49
+ </react_native_1.Text>
50
+ {e.count>0&&<react_native_1.View style={[socketTabStyles.countBadge,{backgroundColor:o?"rgba(255, 255, 255, 0.25)":`${e.color}20`}]}>
51
+ <react_native_1.Text style={[socketTabStyles.countBadgeText,{color:o?AppColors_1.AppColors.white:e.color}]}>
52
+ {e.count>99?"99+":e.count}
53
+ </react_native_1.Text>
54
+ </react_native_1.View>}
55
+ </TouchableScale_1.default>})}
56
+ </react_native_1.ScrollView>
57
+ </react_native_1.View>
58
+
59
+
60
+ {c.size>0&&<react_native_1.View style={socketTabStyles.selectionBar}>
61
+ <react_native_1.View style={socketTabStyles.selectionLeft}>
62
+ <react_native_1.TouchableOpacity onPress={j}style={socketTabStyles.selectAllBtn}hitSlop={{top:6,bottom:6,left:6,right:6}}>
63
+ <react_native_1.Text style={socketTabStyles.selectAllText}>
64
+ {c.size===n.length?t("common.deselectAll","Deselect"):t("common.selectAll","Select All")}
65
+ </react_native_1.Text>
66
+ </react_native_1.TouchableOpacity>
67
+
68
+ <react_native_1.Text style={socketTabStyles.selectionCountText}>
69
+ {c.size} / {n.length}
70
+ </react_native_1.Text>
71
+ </react_native_1.View>
72
+
73
+ <react_native_1.View style={socketTabStyles.selectionRight}>
74
+ <react_native_1.TouchableOpacity onPress={H}style={socketTabStyles.actionBtn}hitSlop={{top:6,bottom:6,left:6,right:6}}>
75
+ <NetworkIcons_1.CopyIcon size={12}color={AppColors_1.AppColors.slate600}/>
76
+ <react_native_1.Text style={socketTabStyles.actionBtnText}>
77
+ {t("common.copy","Copy")}
78
+ </react_native_1.Text>
79
+ </react_native_1.TouchableOpacity>
80
+
81
+ <react_native_1.TouchableOpacity onPress={N}style={socketTabStyles.actionBtn}hitSlop={{top:6,bottom:6,left:6,right:6}}>
82
+ <NetworkIcons_1.ShareIcon size={12}color={AppColors_1.AppColors.sky600}/>
83
+ <react_native_1.Text style={[socketTabStyles.actionBtnText,{color:AppColors_1.AppColors.sky600}]}>
84
+ {t("common.share","Share")}
85
+ </react_native_1.Text>
86
+ </react_native_1.TouchableOpacity>
87
+
88
+ <react_native_1.TouchableOpacity onPress={U}style={[socketTabStyles.actionBtn,socketTabStyles.deleteActionBtn]}hitSlop={{top:6,bottom:6,left:6,right:6}}>
89
+ <NetworkIcons_1.TrashIcon size={12}color={AppColors_1.AppColors.red500}/>
90
+ <react_native_1.Text style={[socketTabStyles.actionBtnText,{color:AppColors_1.AppColors.red500}]}>
91
+ {t("common.delete","Delete")}
92
+ </react_native_1.Text>
93
+ </react_native_1.TouchableOpacity>
94
+ </react_native_1.View>
95
+ </react_native_1.View>}
96
+
97
+
98
+ <react_native_1.FlatList ref={x}data={g}keyExtractor={J}renderItem={X}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}contentContainerStyle={[socketTabStyles.listContent,g.length===0&&{flex:1}]}showsVerticalScrollIndicator={!1}ListEmptyComponent={<react_native_1.View style={socketTabStyles.emptyWrapper}>
99
+ <EmptyState_1.default isSearch={!!(l||p!=="all")}searchQuery={l}customTitle={l||p!=="all"?t("socket.noMatching","No matching WebSockets"):t("socket.noSockets","No WebSockets recorded yet")}customSub={l||p!=="all"?t("socket.adjustSearchFilter","Try adjusting your search query or filter chips."):t("socket.noSocketsDesc","WebSocket connections and Socket.IO messages will appear here in real-time.")}onClearSearch={()=>{a(""),_("all")}}showReload={!1}/>
100
+ {!l&&p==="all"&&<TouchableScale_1.default onPress={O}style={socketTabStyles.simulateEmptyBtn}>
101
+ <NetworkIcons_1.BoltIcon color={AppColors_1.AppColors.white}size={14}/>
102
+ <react_native_1.Text style={socketTabStyles.simulateEmptyBtnText}>
103
+ {t("socket.simulateTraffic","Simulate Demo WebSocket Traffic")}
104
+ </react_native_1.Text>
105
+ </TouchableScale_1.default>}
106
+ </react_native_1.View>}ListFooterComponent={g.length>0?<EndOfListFooter_1.default totalCount={n.length}count={g.length}hasMore={g.length<n.length}onLoadMore={G}/>:null}/>
107
+
108
+
109
+ <SocketFilterModal_1.default visible={q}onClose={()=>I(!1)}filters={d}onApply={$}records={r}/>
110
+
111
+ <ConfirmationModal_1.ConfirmationModal visible={f.visible}title={f.title}message={f.message}confirmText={f.confirmText}cancelText={f.cancelText}isDestructive={!0}icon="trash"onConfirm={f.onConfirm}onCancel={()=>h(e=>({...e,visible:!1}))}/>
112
+ </react_native_1.View>});exports.default=SocketTab;const socketTabStyles=react_native_1.StyleSheet.create({carouselWrapper:{paddingVertical:6,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,backgroundColor:AppColors_1.AppColors.white},carouselContent:{paddingHorizontal:8,gap:6,flexDirection:"row",alignItems:"center"},filterPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:4.5,borderRadius:20,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},filterPillText:{fontSize:11,fontFamily:AppFonts_1.AppFonts.interMedium,color:AppColors_1.AppColors.primaryBlack},countBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:10},countBadgeText:{fontSize:9.5,fontFamily:AppFonts_1.AppFonts.interBold},selectionBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:7,backgroundColor:`${AppColors_1.AppColors.purple}0D`,borderBottomWidth:1,borderBottomColor:`${AppColors_1.AppColors.purple}25`},selectionLeft:{flexDirection:"row",alignItems:"center",gap:8},selectAllBtn:{paddingHorizontal:7,paddingVertical:3,borderRadius:5,backgroundColor:`${AppColors_1.AppColors.purple}1E`},selectAllText:{fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:10.5,color:AppColors_1.AppColors.purple},selectionCountText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextStrong},selectionRight:{flexDirection:"row",alignItems:"center",gap:6},actionBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:3.5,borderRadius:5,backgroundColor:AppColors_1.AppColors.white,borderWidth:1,borderColor:AppColors_1.AppColors.dividerColor},deleteActionBtn:{backgroundColor:`${AppColors_1.AppColors.red500}10`,borderColor:`${AppColors_1.AppColors.red500}30`},actionBtnText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10.5,color:AppColors_1.AppColors.grayTextStrong},listContent:{padding:6,paddingBottom:24},emptyWrapper:{flex:1,alignItems:"center",justifyContent:"center",paddingVertical:20},simulateEmptyBtn:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,marginTop:14,paddingHorizontal:16,paddingVertical:10,borderRadius:10,backgroundColor:AppColors_1.AppColors.amber600,shadowColor:AppColors_1.AppColors.amber600,shadowOffset:{width:0,height:2},shadowOpacity:.25,shadowRadius:4,elevation:3},simulateEmptyBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.white,letterSpacing:.2}});
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,o,t,l){l===void 0&&(l=t);var a=Object.getOwnPropertyDescriptor(o,t);(!a||("get"in a?!o.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return o[t]}}),Object.defineProperty(r,l,a)}):(function(r,o,t,l){l===void 0&&(l=t),r[l]=o[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,o){Object.defineProperty(r,"default",{enumerable:!0,value:o})}):function(r,o){r.default=o}),__importStar=this&&this.__importStar||(function(){var r=function(o){return r=Object.getOwnPropertyNames||function(t){var l=[];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(l[l.length]=a);return l},r(o)};return function(o){if(o&&o.__esModule)return o;var t={};if(o!=null)for(var l=r(o),a=0;a<l.length;a++)l[a]!=="default"&&__createBinding(t,o,l[a]);return __setModuleDefault(t,o),t}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.StorageTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),NetworkIcons_1=require("../NetworkIcons"),storageInspector_1=require("../../customHooks/storageInspector"),helpers_1=require("../../helpers"),toast_1=require("../../helpers/toast"),getTypeBadge=r=>{switch(r){case"json":return{label:"JSON",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}16`};case"number":return{label:"NUM",color:AppColors_1.AppColors.warningIconGold,bg:`${AppColors_1.AppColors.warningIconGold}16`};case"boolean":return{label:"BOOL",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}16`};case"null":return{label:"NULL",color:AppColors_1.AppColors.grayTextWeak,bg:`${AppColors_1.AppColors.grayTextWeak}16`};default:return{label:"STR",color:AppColors_1.AppColors.blue500,bg:`${AppColors_1.AppColors.blue500}16`}}},StorageEntryCard=react_1.default.memo(function({entry:o,isExpanded:t,onToggleExpand:l,onCopy:a,onEdit:v,onDelete:n,badge:d}){const S=(0,react_1.useMemo)(()=>o.byteSize<1024?`${o.byteSize.toLocaleString()} B`:`${(o.byteSize/1024).toLocaleString(void 0,{minimumFractionDigits:1,maximumFractionDigits:1})} KB`,[o.byteSize]),A=(0,react_1.useMemo)(()=>{if(!t)return o.value.length>250?o.value.slice(0,250)+"...":o.value;if(o.type==="json")try{const s=o.parsedValue??JSON.parse(o.value);return JSON.stringify(s,null,2)}catch{return o.value}return o.value},[t,o.value,o.type,o.parsedValue]);return<react_native_1.View style={styles.entryCard}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,o,t,l){l===void 0&&(l=t);var a=Object.getOwnPropertyDescriptor(o,t);(!a||("get"in a?!o.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return o[t]}}),Object.defineProperty(r,l,a)}):(function(r,o,t,l){l===void 0&&(l=t),r[l]=o[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,o){Object.defineProperty(r,"default",{enumerable:!0,value:o})}):function(r,o){r.default=o}),__importStar=this&&this.__importStar||(function(){var r=function(o){return r=Object.getOwnPropertyNames||function(t){var l=[];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(l[l.length]=a);return l},r(o)};return function(o){if(o&&o.__esModule)return o;var t={};if(o!=null)for(var l=r(o),a=0;a<l.length;a++)l[a]!=="default"&&__createBinding(t,o,l[a]);return __setModuleDefault(t,o),t}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.StorageTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),ConfirmationModal_1=require("./ConfirmationModal"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),NetworkIcons_1=require("../NetworkIcons"),storageInspector_1=require("../../customHooks/storageInspector"),helpers_1=require("../../helpers"),toast_1=require("../../helpers/toast"),getTypeBadge=r=>{switch(r){case"json":return{label:"JSON",color:AppColors_1.AppColors.purple,bg:`${AppColors_1.AppColors.purple}16`};case"number":return{label:"NUM",color:AppColors_1.AppColors.warningIconGold,bg:`${AppColors_1.AppColors.warningIconGold}16`};case"boolean":return{label:"BOOL",color:AppColors_1.AppColors.emerald500,bg:`${AppColors_1.AppColors.emerald500}16`};case"null":return{label:"NULL",color:AppColors_1.AppColors.grayTextWeak,bg:`${AppColors_1.AppColors.grayTextWeak}16`};default:return{label:"STR",color:AppColors_1.AppColors.blue500,bg:`${AppColors_1.AppColors.blue500}16`}}},StorageEntryCard=react_1.default.memo(function({entry:o,isExpanded:t,onToggleExpand:l,onCopy:a,onEdit:S,onDelete:i,badge:d}){const w=(0,react_1.useMemo)(()=>o.byteSize<1024?`${o.byteSize.toLocaleString()} B`:`${(o.byteSize/1024).toLocaleString(void 0,{minimumFractionDigits:1,maximumFractionDigits:1})} KB`,[o.byteSize]),x=(0,react_1.useMemo)(()=>{if(!t)return o.value.length>250?o.value.slice(0,250)+"...":o.value;if(o.type==="json")try{const s=o.parsedValue??JSON.parse(o.value);return JSON.stringify(s,null,2)}catch{return o.value}return o.value},[t,o.value,o.type,o.parsedValue]);return<react_native_1.View style={styles.entryCard}>
2
2
 
3
3
  <react_native_1.View style={styles.entryHeader}>
4
4
  <react_native_1.View style={{flex:1,marginRight:8}}>
@@ -11,7 +11,7 @@
11
11
  {d.label}
12
12
  </react_native_1.Text>
13
13
  </react_native_1.View>
14
- <react_native_1.Text style={styles.sizeText}>{S}</react_native_1.Text>
14
+ <react_native_1.Text style={styles.sizeText}>{w}</react_native_1.Text>
15
15
  </react_native_1.View>
16
16
  </react_native_1.View>
17
17
 
@@ -21,11 +21,11 @@
21
21
  <NetworkIcons_1.CopyIcon size={12}color={AppColors_1.AppColors.grayText}/>
22
22
  </TouchableScale_1.default>
23
23
 
24
- <TouchableScale_1.default hitSlop={6}onPress={()=>v(o)}style={styles.entryActionBtn}>
24
+ <TouchableScale_1.default hitSlop={6}onPress={()=>S(o)}style={styles.entryActionBtn}>
25
25
  <NetworkIcons_1.PencilIcon size={12}color={AppColors_1.AppColors.purple}/>
26
26
  </TouchableScale_1.default>
27
27
 
28
- <TouchableScale_1.default hitSlop={6}onPress={()=>n(o.key)}style={[styles.entryActionBtn,{backgroundColor:`${AppColors_1.AppColors.errorColor}12`}]}>
28
+ <TouchableScale_1.default hitSlop={6}onPress={()=>i(o.key)}style={[styles.entryActionBtn,{backgroundColor:`${AppColors_1.AppColors.errorColor}12`}]}>
29
29
  <NetworkIcons_1.TrashIcon size={12}color={AppColors_1.AppColors.errorColor}/>
30
30
  </TouchableScale_1.default>
31
31
  </react_native_1.View>
@@ -34,7 +34,7 @@
34
34
 
35
35
  <TouchableScale_1.default onPress={()=>l(o.key)}style={styles.valuePreviewBox}>
36
36
  <react_native_1.Text style={styles.valuePreviewText}numberOfLines={t?void 0:3}selectable={t}>
37
- {A}
37
+ {x}
38
38
  </react_native_1.Text>
39
39
  {o.value.length>80&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4,marginTop:4}}>
40
40
  <react_native_1.Text style={styles.expandHint}>
@@ -43,7 +43,7 @@
43
43
  <NetworkIcons_1.ChevronIcon direction={t?"up":"down"}size={10}color={AppColors_1.AppColors.purple}/>
44
44
  </react_native_1.View>}
45
45
  </TouchableScale_1.default>
46
- </react_native_1.View>});exports.StorageTab=react_1.default.memo(()=>{const{t:r}=(0,i18n_1.useTranslation)(),o=(0,react_1.useRef)(null),[t,l]=(0,react_1.useState)("asyncStorage"),[a,v]=(0,react_1.useState)("default"),[n,d]=(0,react_1.useState)([]),[S,A]=(0,react_1.useState)(!0),[s,_]=(0,react_1.useState)(""),[w,P]=(0,react_1.useState)(100),[k,M]=(0,react_1.useState)({}),[D,y]=(0,react_1.useState)(!1),[T,I]=(0,react_1.useState)("create"),[C,B]=(0,react_1.useState)(""),[m,h]=(0,react_1.useState)(""),[u,x]=(0,react_1.useState)("string"),[V,c]=(0,react_1.useState)(null),F=(0,react_1.useMemo)(()=>(0,storageInspector_1.getRegisteredMMKVInstanceIds)(),[]),g=(0,react_1.useCallback)(async()=>{A(!0);try{const e=await(0,storageInspector_1.fetchStorageEntries)(t,t==="mmkv"?a:void 0);d(e)}catch{d([])}finally{A(!1)}},[t,a]);(0,react_1.useEffect)(()=>(g(),(0,storageInspector_1.subscribeToStorageChanges)(g)),[g]);const L=e=>{M(i=>({...i,[e]:!i[e]}))},O=()=>{I("create"),B(""),h(""),x("string"),c(null),y(!0)},$=e=>{I("edit"),B(e.key),h(e.value),x(e.type==="json"?"json":e.type==="number"?"number":e.type==="boolean"?"boolean":"string"),c(null),y(!0)},R=e=>{react_native_1.Alert.alert(r("storage.deleteKeyTitle","Delete Key"),r("storage.deleteKeyMessage",{key:e,defaultValue:`Are you sure you want to delete key "${e}"?`}),[{text:r("common.cancel","Cancel"),style:"cancel"},{text:r("common.clear","Delete"),style:"destructive",onPress:async()=>{await(0,storageInspector_1.removeStorageEntry)(t,e,t==="mmkv"?a:void 0)?((0,toast_1.showToast)(`Deleted "${e}"`),g()):(0,toast_1.showToast)(`Failed to delete "${e}"`)}}])},K=()=>{react_native_1.Alert.alert(r("storage.clearTitle","Clear Storage Driver"),r("storage.clearMessage",{driver:t==="asyncStorage"?"AsyncStorage":"MMKV",defaultValue:`Are you sure you want to delete all keys in ${t==="asyncStorage"?"AsyncStorage":"MMKV"}?`}),[{text:r("common.cancel","Cancel"),style:"cancel"},{text:r("storage.clearConfirm","Clear All"),style:"destructive",onPress:async()=>{await(0,storageInspector_1.clearStorageDriver)(t,t==="mmkv"?a:void 0)&&((0,toast_1.showToast)("All storage keys wiped"),g())}}])},W=async()=>{if(!C.trim()){(0,toast_1.showToast)("Key name cannot be empty");return}let e=m;if(u==="json")try{const b=JSON.parse(m);e=JSON.stringify(b)}catch(b){c("Invalid JSON: "+b.message);return}else if(u==="number"&&isNaN(Number(m))){c("Value must be a valid number");return}await(0,storageInspector_1.setStorageEntry)(t,C.trim(),e,t==="mmkv"?a:void 0)?((0,toast_1.showToast)(T==="create"?`Added "${C.trim()}"`:`Updated "${C.trim()}"`),y(!1),g()):(0,toast_1.showToast)("Error saving storage key")},j=()=>{try{const e=JSON.parse(m);h(JSON.stringify(e,null,2)),c(null),x("json"),(0,toast_1.showToast)("Formatted JSON")}catch{c("Cannot format: invalid JSON syntax")}},p=(0,react_1.useMemo)(()=>{if(!s.trim())return n;const e=s.toLowerCase().trim().split(/\s+/).filter(Boolean);return n.filter(i=>{const b=`${i.key} ${i.value}`.toLowerCase();return e.every(H=>b.includes(H))})},[n,s]),f=(0,react_1.useMemo)(()=>n.reduce((e,i)=>e+i.byteSize,0),[n]),E=(0,react_1.useMemo)(()=>f<1024?`${f.toLocaleString()} B`:f<1024*1024?`${(f/1024).toLocaleString(void 0,{minimumFractionDigits:1,maximumFractionDigits:1})} KB`:`${(f/(1024*1024)).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})} MB`,[f]),z=(0,react_1.useCallback)(e=>{(0,helpers_1.copyToClipboard)(e.value,e.key),(0,toast_1.showToast)(`Copied value of "${e.key}"`)},[]),N=(0,react_1.useCallback)(({item:e})=><StorageEntryCard entry={e}isExpanded={!!k[e.key]}onToggleExpand={L}onCopy={z}onEdit={$}onDelete={R}badge={getTypeBadge(e.type)}/>,[k,z]);return<react_native_1.View style={styles.container}>
46
+ </react_native_1.View>}),DEFAULT_PAGE_SIZE=50,LOAD_MORE_STEP=10;exports.StorageTab=react_1.default.memo(()=>{const{t:r}=(0,i18n_1.useTranslation)(),o=(0,react_1.useRef)(null),[t,l]=(0,react_1.useState)("asyncStorage"),[a,S]=(0,react_1.useState)("default"),[i,d]=(0,react_1.useState)([]),[w,x]=(0,react_1.useState)(!0),[s,B]=(0,react_1.useState)(""),[V,F]=(0,react_1.useState)(DEFAULT_PAGE_SIZE),[z,L]=(0,react_1.useState)({});(0,react_1.useEffect)(()=>{F(DEFAULT_PAGE_SIZE),o.current?.scrollToOffset({offset:0,animated:!1})},[s,t,a]);const[O,C]=(0,react_1.useState)(!1),[h,P]=(0,react_1.useState)("create"),[f,k]=(0,react_1.useState)(""),[T,v]=(0,react_1.useState)(""),[u,_]=(0,react_1.useState)("string"),[I,c]=(0,react_1.useState)(null),M=(0,react_1.useMemo)(()=>(0,storageInspector_1.getRegisteredMMKVInstanceIds)(),[]),g=(0,react_1.useCallback)(async()=>{x(!0);try{const e=await(0,storageInspector_1.fetchStorageEntries)(t,t==="mmkv"?a:void 0);d(e)}catch{d([])}finally{x(!1)}},[t,a]);(0,react_1.useEffect)(()=>(g(),(0,storageInspector_1.subscribeToStorageChanges)(g)),[g]);const $=e=>{L(n=>({...n,[e]:!n[e]}))},E=()=>{P("create"),k(""),v(""),_("string"),c(null),C(!0)},R=e=>{P("edit"),k(e.key),v(e.value),_(e.type==="json"?"json":e.type==="number"?"number":e.type==="boolean"?"boolean":"string"),c(null),C(!0)},[m,A]=(0,react_1.useState)({visible:!1,title:"",message:"",onConfirm:()=>{}}),K=e=>{A({visible:!0,title:r("storage.deleteKeyTitle","Delete Key"),message:r("storage.deleteKeyMessage",{key:e,defaultValue:`Are you sure you want to delete key "${e}"?`}),confirmText:r("common.clear","Delete"),cancelText:r("common.cancel","Cancel"),onConfirm:async()=>{A(y=>({...y,visible:!1})),await(0,storageInspector_1.removeStorageEntry)(t,e,t==="mmkv"?a:void 0)?((0,toast_1.showToast)(`Deleted "${e}"`),g()):(0,toast_1.showToast)(`Failed to delete "${e}"`)}})},W=()=>{A({visible:!0,title:r("storage.clearTitle","Clear Storage Driver"),message:r("storage.clearMessage",{driver:t==="asyncStorage"?"AsyncStorage":"MMKV",defaultValue:`Are you sure you want to delete all keys in ${t==="asyncStorage"?"AsyncStorage":"MMKV"}?`}),confirmText:r("storage.clearConfirm","Clear All"),cancelText:r("common.cancel","Cancel"),onConfirm:async()=>{A(n=>({...n,visible:!1})),await(0,storageInspector_1.clearStorageDriver)(t,t==="mmkv"?a:void 0)&&((0,toast_1.showToast)(r("storage.cleared","All storage keys wiped")),g())}})},N=async()=>{if(!f.trim()){(0,toast_1.showToast)(r("storage.keyNameEmpty","Key name cannot be empty"));return}let e=T;if(u==="json")try{const y=JSON.parse(T);e=JSON.stringify(y)}catch(y){c("Invalid JSON: "+y.message);return}else if(u==="number"&&isNaN(Number(T))){c("Value must be a valid number");return}await(0,storageInspector_1.setStorageEntry)(t,f.trim(),e,t==="mmkv"?a:void 0)?((0,toast_1.showToast)(h==="create"?`Added "${f.trim()}"`:`Updated "${f.trim()}"`),C(!1),g()):(0,toast_1.showToast)(r("storage.saveError","Error saving storage key"))},j=()=>{try{const e=JSON.parse(T);v(JSON.stringify(e,null,2)),c(null),_("json"),(0,toast_1.showToast)(r("storage.beautifyJson","Formatted JSON"))}catch{c("Cannot format: invalid JSON syntax")}},p=(0,react_1.useMemo)(()=>{if(!s.trim())return i;const e=s.toLowerCase().trim().split(/\s+/).filter(Boolean);return i.filter(n=>{const y=`${n.key} ${n.value}`.toLowerCase();return e.every(q=>y.includes(q))})},[i,s]),b=(0,react_1.useMemo)(()=>i.reduce((e,n)=>e+n.byteSize,0),[i]),H=(0,react_1.useMemo)(()=>b<1024?`${b.toLocaleString()} B`:b<1024*1024?`${(b/1024).toLocaleString(void 0,{minimumFractionDigits:1,maximumFractionDigits:1})} KB`:`${(b/(1024*1024)).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})} MB`,[b]),D=(0,react_1.useCallback)(e=>{(0,helpers_1.copyToClipboard)(e.value,e.key),(0,toast_1.showToast)(`Copied value of "${e.key}"`)},[]),J=(0,react_1.useCallback)(({item:e})=><StorageEntryCard entry={e}isExpanded={!!z[e.key]}onToggleExpand={$}onCopy={D}onEdit={R}onDelete={K}badge={getTypeBadge(e.type)}/>,[z,D]);return<react_native_1.View style={styles.container}>
47
47
 
48
48
  <react_native_1.View style={styles.driverTabsWrapper}>
49
49
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={styles.driverTabsContainer}>
@@ -52,9 +52,9 @@
52
52
  <react_native_1.Text style={[styles.driverTabText,{color:t==="asyncStorage"?AppColors_1.AppColors.white:AppColors_1.AppColors.primaryBlack}]}>
53
53
  {r("storage.subTabs.asyncStorage","AsyncStorage")}
54
54
  </react_native_1.Text>
55
- {n.length>0&&t==="asyncStorage"&&<react_native_1.View style={[styles.driverCountBadge,{backgroundColor:"rgba(255,255,255,0.25)"}]}>
55
+ {i.length>0&&t==="asyncStorage"&&<react_native_1.View style={[styles.driverCountBadge,{backgroundColor:"rgba(255,255,255,0.25)"}]}>
56
56
  <react_native_1.Text style={[styles.driverCountText,{color:AppColors_1.AppColors.white}]}>
57
- {n.length}
57
+ {i.length}
58
58
  </react_native_1.Text>
59
59
  </react_native_1.View>}
60
60
  </TouchableScale_1.default>
@@ -64,16 +64,16 @@
64
64
  <react_native_1.Text style={[styles.driverTabText,{color:t==="mmkv"?AppColors_1.AppColors.white:AppColors_1.AppColors.primaryBlack}]}>
65
65
  {r("storage.subTabs.mmkv","MMKV")}
66
66
  </react_native_1.Text>
67
- {n.length>0&&t==="mmkv"&&<react_native_1.View style={[styles.driverCountBadge,{backgroundColor:"rgba(255,255,255,0.25)"}]}>
67
+ {i.length>0&&t==="mmkv"&&<react_native_1.View style={[styles.driverCountBadge,{backgroundColor:"rgba(255,255,255,0.25)"}]}>
68
68
  <react_native_1.Text style={[styles.driverCountText,{color:AppColors_1.AppColors.white}]}>
69
- {n.length}
69
+ {i.length}
70
70
  </react_native_1.Text>
71
71
  </react_native_1.View>}
72
72
  </TouchableScale_1.default>
73
73
 
74
74
 
75
- {t==="mmkv"&&F.length>1&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4,marginLeft:6}}>
76
- {F.map(e=><TouchableScale_1.default key={e}onPress={()=>v(e)}style={[styles.instancePill,a===e&&styles.instancePillActive]}>
75
+ {t==="mmkv"&&M.length>1&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4,marginLeft:6}}>
76
+ {M.map(e=><TouchableScale_1.default key={e}onPress={()=>S(e)}style={[styles.instancePill,a===e&&styles.instancePillActive]}>
77
77
  <react_native_1.Text style={[styles.instancePillText,a===e&&styles.instancePillTextActive]}>
78
78
  {e}
79
79
  </react_native_1.Text>
@@ -86,21 +86,21 @@
86
86
  <react_native_1.View style={styles.actionBar}>
87
87
  <react_native_1.View style={styles.searchBar}>
88
88
  <NetworkIcons_1.SearchIcon size={14}color={AppColors_1.AppColors.grayTextWeak}/>
89
- <react_native_1.TextInput value={s}onChangeText={_}placeholder={r("storage.searchPlaceholder","Search keys, values, types...")}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}style={styles.searchInput}clearButtonMode="while-editing"/>
89
+ <react_native_1.TextInput value={s}onChangeText={B}placeholder={r("storage.searchPlaceholder","Search keys, values, types...")}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}style={styles.searchInput}clearButtonMode="while-editing"/>
90
90
  {s.length>0&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:4}}>
91
91
  <react_native_1.View style={{backgroundColor:`${AppColors_1.AppColors.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:1.5}}>
92
92
  <react_native_1.Text style={{color:AppColors_1.AppColors.purple,fontSize:9.5,fontFamily:AppFonts_1.AppFonts.interBold}}>
93
93
  {p.length}
94
94
  </react_native_1.Text>
95
95
  </react_native_1.View>
96
- <TouchableScale_1.default onPress={()=>_("")}hitSlop={8}>
96
+ <TouchableScale_1.default onPress={()=>B("")}hitSlop={8}>
97
97
  <NetworkIcons_1.ClearIcon size={13}color={AppColors_1.AppColors.grayTextWeak}/>
98
98
  </TouchableScale_1.default>
99
99
  </react_native_1.View>}
100
100
  </react_native_1.View>
101
101
 
102
102
 
103
- <TouchableScale_1.default onPress={O}style={styles.addKeyBtn}hitSlop={6}>
103
+ <TouchableScale_1.default onPress={E}style={styles.addKeyBtn}hitSlop={6}>
104
104
  <NetworkIcons_1.PlusIcon size={13}color={AppColors_1.AppColors.white}/>
105
105
  <react_native_1.Text style={styles.addKeyBtnText}>{r("storage.add","Add")}</react_native_1.Text>
106
106
  </TouchableScale_1.default>
@@ -109,7 +109,7 @@
109
109
  <NetworkIcons_1.ResetIcon size={13}color={AppColors_1.AppColors.grayText}/>
110
110
  </TouchableScale_1.default>
111
111
 
112
- {n.length>0&&<TouchableScale_1.default onPress={K}style={[styles.actionIconBtn,{borderColor:`${AppColors_1.AppColors.errorColor}33`,backgroundColor:`${AppColors_1.AppColors.errorColor}12`}]}hitSlop={6}>
112
+ {i.length>0&&<TouchableScale_1.default onPress={W}style={[styles.actionIconBtn,{borderColor:`${AppColors_1.AppColors.errorColor}33`,backgroundColor:`${AppColors_1.AppColors.errorColor}12`}]}hitSlop={6}>
113
113
  <NetworkIcons_1.TrashIcon size={13}color={AppColors_1.AppColors.errorColor}/>
114
114
  </TouchableScale_1.default>}
115
115
  </react_native_1.View>
@@ -117,7 +117,7 @@
117
117
 
118
118
  <react_native_1.View style={styles.statsStrip}>
119
119
  <react_native_1.Text style={styles.statsText}>
120
- {p.length.toLocaleString()} of {n.length.toLocaleString()} Keys • {E}
120
+ {p.length.toLocaleString()} of {i.length.toLocaleString()} Keys • {H}
121
121
  </react_native_1.Text>
122
122
  <react_native_1.Text style={styles.statsSubtext}>
123
123
  {t==="asyncStorage"?"SQLite Key-Value":`MMKV (${a})`}
@@ -125,11 +125,11 @@
125
125
  </react_native_1.View>
126
126
 
127
127
 
128
- {S?<react_native_1.View style={styles.loadingContainer}>
128
+ {w?<react_native_1.View style={styles.loadingContainer}>
129
129
  <react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.purple}/>
130
130
  <react_native_1.Text style={styles.loadingText}>{r("storage.loading","Loading storage entries...")}</react_native_1.Text>
131
131
  </react_native_1.View>:<>
132
- <react_native_1.FlatList ref={o}data={p.slice(0,w)}keyExtractor={e=>e.key}renderItem={N}initialNumToRender={10}maxToRenderPerBatch={10}windowSize={5}removeClippedSubviews={react_native_1.Platform.OS==="android"}style={styles.scrollArea}contentContainerStyle={p.length===0?styles.emptyScrollContent:styles.scrollContent}showsVerticalScrollIndicator={!1}ListEmptyComponent={<react_native_1.View style={styles.emptyContainer}>
132
+ <react_native_1.FlatList ref={o}data={p.slice(0,V)}keyExtractor={e=>e.key}renderItem={J}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}style={styles.scrollArea}contentContainerStyle={p.length===0?styles.emptyScrollContent:styles.scrollContent}showsVerticalScrollIndicator={!1}ListEmptyComponent={<react_native_1.View style={styles.emptyContainer}>
133
133
  <react_native_1.View style={styles.emptyIconWrap}>
134
134
  <NetworkIcons_1.DatabaseIcon size={28}color={AppColors_1.AppColors.grayTextWeak}/>
135
135
  </react_native_1.View>
@@ -139,23 +139,23 @@
139
139
  <react_native_1.Text style={styles.emptySubtitle}>
140
140
  {s.trim().length>0?`No keys or values match "${s}"`:`Storage is auto-detected. Tap "+ Add" above to create your first ${t==="asyncStorage"?"AsyncStorage":"MMKV"} key!`}
141
141
  </react_native_1.Text>
142
- {s.trim().length>0&&<TouchableScale_1.default onPress={()=>_("")}style={{marginTop:12,paddingHorizontal:14,paddingVertical:6,borderRadius:8,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary}}>
142
+ {s.trim().length>0&&<TouchableScale_1.default onPress={()=>B("")}style={{marginTop:12,paddingHorizontal:14,paddingVertical:6,borderRadius:8,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary}}>
143
143
  <react_native_1.Text style={{color:AppColors_1.AppColors.brandPurple,fontSize:12,fontFamily:AppFonts_1.AppFonts.interBold}}>
144
144
  Clear Search
145
145
  </react_native_1.Text>
146
146
  </TouchableScale_1.default>}
147
- </react_native_1.View>}ListFooterComponent={p.length>0?<EndOfListFooter_1.default count={Math.min(w,p.length)}totalCount={p.length}label="keys"hasMore={p.length>w}onLoadMore={()=>P(e=>e+10)}/>:<react_native_1.View style={{height:60}}/>}/>
147
+ </react_native_1.View>}ListFooterComponent={p.length>0?<EndOfListFooter_1.default count={Math.min(V,p.length)}totalCount={p.length}label="keys"loadMoreStep={LOAD_MORE_STEP}hasMore={p.length>V}onLoadMore={()=>F(e=>e+LOAD_MORE_STEP)}/>:<react_native_1.View style={{height:60}}/>}/>
148
148
  </>}
149
149
 
150
150
 
151
- <react_native_1.Modal visible={D}transparent animationType="fade"onRequestClose={()=>y(!1)}>
151
+ <react_native_1.Modal visible={O}transparent animationType="fade"onRequestClose={()=>C(!1)}>
152
152
  <react_native_1.View style={styles.modalOverlay}>
153
153
  <react_native_1.View style={styles.modalCard}>
154
154
  <react_native_1.View style={styles.modalHeader}>
155
155
  <react_native_1.Text style={styles.modalTitle}>
156
- {T==="create"?"Add Storage Key":`Edit: ${C}`}
156
+ {h==="create"?"Add Storage Key":`Edit: ${f}`}
157
157
  </react_native_1.Text>
158
- <TouchableScale_1.default onPress={()=>y(!1)}hitSlop={8}>
158
+ <TouchableScale_1.default onPress={()=>C(!1)}hitSlop={8}>
159
159
  <NetworkIcons_1.ClearIcon size={16}color={AppColors_1.AppColors.grayText}/>
160
160
  </TouchableScale_1.default>
161
161
  </react_native_1.View>
@@ -163,7 +163,7 @@
163
163
 
164
164
  <react_native_1.View style={styles.inputGroup}>
165
165
  <react_native_1.Text style={styles.inputLabel}>{r("storage.keyName","KEY NAME").toUpperCase()}</react_native_1.Text>
166
- <react_native_1.TextInput value={C}onChangeText={B}placeholder="e.g. user_session, auth_token"placeholderTextColor={AppColors_1.AppColors.grayTextWeak}editable={T==="create"}style={[styles.textInput,T==="edit"&&styles.textInputDisabled]}autoCapitalize="none"/>
166
+ <react_native_1.TextInput value={f}onChangeText={k}placeholder="e.g. user_session, auth_token"placeholderTextColor={AppColors_1.AppColors.grayTextWeak}editable={h==="create"}style={[styles.textInput,h==="edit"&&styles.textInputDisabled]}autoCapitalize="none"/>
167
167
  </react_native_1.View>
168
168
 
169
169
 
@@ -175,8 +175,8 @@
175
175
  </TouchableScale_1.default>}
176
176
  </react_native_1.View>
177
177
  <react_native_1.View style={styles.typeSelectorStrip}>
178
- {["string","json","number","boolean"].map(e=>{const i=u===e;return<TouchableScale_1.default key={e}onPress={()=>{x(e),c(null)}}style={[styles.typePill,i&&styles.typePillActive]}>
179
- <react_native_1.Text style={[styles.typePillText,i&&styles.typePillTextActive]}>
178
+ {["string","json","number","boolean"].map(e=>{const n=u===e;return<TouchableScale_1.default key={e}onPress={()=>{_(e),c(null)}}style={[styles.typePill,n&&styles.typePillActive]}>
179
+ <react_native_1.Text style={[styles.typePillText,n&&styles.typePillTextActive]}>
180
180
  {e.toUpperCase()}
181
181
  </react_native_1.Text>
182
182
  </TouchableScale_1.default>})}
@@ -186,19 +186,19 @@
186
186
 
187
187
  <react_native_1.View style={styles.inputGroup}>
188
188
  <react_native_1.Text style={styles.inputLabel}>{r("storage.valueContent","VALUE CONTENT").toUpperCase()}</react_native_1.Text>
189
- <react_native_1.TextInput value={m}onChangeText={e=>{h(e),V&&c(null)}}placeholder={u==="json"?'{"userId": 123, "isLoggedIn": true}':u==="number"?"42":u==="boolean"?"true":"String value..."}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}style={[styles.textInput,styles.textAreaInput]}multiline textAlignVertical="top"autoCapitalize="none"/>
190
- {V&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5,marginTop:4}}>
189
+ <react_native_1.TextInput value={T}onChangeText={e=>{v(e),I&&c(null)}}placeholder={u==="json"?'{"userId": 123, "isLoggedIn": true}':u==="number"?"42":u==="boolean"?"true":"String value..."}placeholderTextColor={AppColors_1.AppColors.grayTextWeak}style={[styles.textInput,styles.textAreaInput]}multiline textAlignVertical="top"autoCapitalize="none"/>
190
+ {I&&<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5,marginTop:4}}>
191
191
  <NetworkIcons_1.WarningTriangleIcon size={12}color={AppColors_1.AppColors.errorColor}/>
192
- <react_native_1.Text style={styles.errorText}>{V}</react_native_1.Text>
192
+ <react_native_1.Text style={styles.errorText}>{I}</react_native_1.Text>
193
193
  </react_native_1.View>}
194
194
  </react_native_1.View>
195
195
 
196
196
 
197
197
  <react_native_1.View style={styles.modalActions}>
198
- <TouchableScale_1.default onPress={()=>y(!1)}style={styles.cancelBtn}>
198
+ <TouchableScale_1.default onPress={()=>C(!1)}style={styles.cancelBtn}>
199
199
  <react_native_1.Text style={styles.cancelBtnText}>{r("common.cancel","Cancel")}</react_native_1.Text>
200
200
  </TouchableScale_1.default>
201
- <TouchableScale_1.default onPress={W}style={styles.saveBtn}>
201
+ <TouchableScale_1.default onPress={N}style={styles.saveBtn}>
202
202
  <NetworkIcons_1.CheckIcon size={14}color={AppColors_1.AppColors.white}/>
203
203
  <react_native_1.Text style={styles.saveBtnText}>{r("storage.saveKey","Save Key")}</react_native_1.Text>
204
204
  </TouchableScale_1.default>
@@ -206,4 +206,6 @@
206
206
  </react_native_1.View>
207
207
  </react_native_1.View>
208
208
  </react_native_1.Modal>
209
+
210
+ <ConfirmationModal_1.ConfirmationModal visible={m.visible}title={m.title}message={m.message}confirmText={m.confirmText}cancelText={m.cancelText}isDestructive={!0}icon="trash"onConfirm={m.onConfirm}onCancel={()=>A(e=>({...e,visible:!1}))}/>
209
211
  </react_native_1.View>});const styles=react_native_1.StyleSheet.create({container:{flex:1,backgroundColor:AppColors_1.AppColors.grayBackground},driverTabsWrapper:{backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,paddingVertical:8},driverTabsContainer:{paddingHorizontal:12,flexDirection:"row",alignItems:"center",gap:6},driverTabPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},driverTabPillActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},driverTabText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.grayText},driverTabTextActive:{color:AppColors_1.AppColors.white},driverCountBadge:{backgroundColor:"rgba(255, 255, 255, 0.25)",paddingHorizontal:5,paddingVertical:1,borderRadius:8},driverCountText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.white},instancePill:{paddingHorizontal:7,paddingVertical:3,borderRadius:6,backgroundColor:`${AppColors_1.AppColors.purple}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}30`},instancePillActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},instancePillText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.purple},instancePillTextActive:{color:AppColors_1.AppColors.white},actionBar:{flexDirection:"row",alignItems:"center",paddingHorizontal:12,paddingVertical:8,backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,gap:6},searchBar:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,paddingHorizontal:9,paddingVertical:react_native_1.Platform.OS==="ios"?6:2,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,gap:6},searchInput:{flex:1,fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.primaryBlack,padding:0},addKeyBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:10,paddingVertical:6,borderRadius:8,backgroundColor:AppColors_1.AppColors.purple},addKeyBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.white},actionIconBtn:{width:30,height:30,borderRadius:8,alignItems:"center",justifyContent:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},statsStrip:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:5,backgroundColor:`${AppColors_1.AppColors.grayBorderSecondary}40`},statsText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.grayText},statsSubtext:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.grayTextWeak},scrollArea:{flex:1},scrollContent:{padding:12,gap:10,paddingBottom:100},emptyScrollContent:{flexGrow:1,justifyContent:"center",alignItems:"center",padding:24,paddingBottom:60},entryCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:10,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:10,gap:8,shadowColor:AppColors_1.AppColors.black,shadowOpacity:.02,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},entryHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},entryKey:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.primaryBlack},typeBadge:{paddingHorizontal:5,paddingVertical:1,borderRadius:4,borderWidth:1},typeBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8.5},sizeText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},entryActions:{flexDirection:"row",alignItems:"center",gap:5},entryActionBtn:{padding:5,borderRadius:5,backgroundColor:AppColors_1.AppColors.grayBackground},valuePreviewBox:{backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:6,padding:8,borderWidth:1,borderColor:`${AppColors_1.AppColors.grayBorderSecondary}80`},valuePreviewText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.primaryBlack,lineHeight:16},expandHint:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.purple,marginTop:4},loadingContainer:{flex:1,alignItems:"center",justifyContent:"center",gap:8},loadingText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.grayText},emptyContainer:{padding:24,alignItems:"center",justifyContent:"center"},emptyIconWrap:{width:56,height:56,borderRadius:28,backgroundColor:`${AppColors_1.AppColors.grayBorderSecondary}40`,alignItems:"center",justifyContent:"center",marginBottom:12},emptyTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:14,color:AppColors_1.AppColors.primaryBlack,marginBottom:4},emptySubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayText,textAlign:"center",maxWidth:280},connectGuideCard:{marginTop:20,width:"100%",backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:10,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:12,gap:6},connectGuideTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.purple},connectGuideCode:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.grayText,lineHeight:15},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:16},modalCard:{width:"100%",maxWidth:400,backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,padding:16,gap:12,shadowColor:AppColors_1.AppColors.black,shadowOpacity:.2,shadowRadius:10,shadowOffset:{width:0,height:4},elevation:5},modalHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,paddingBottom:10},modalTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:14,color:AppColors_1.AppColors.primaryBlack},inputGroup:{gap:4},inputLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.5},textInput:{backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,paddingHorizontal:10,paddingVertical:8,fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.primaryBlack,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},textInputDisabled:{backgroundColor:`${AppColors_1.AppColors.grayBorderSecondary}40`,color:AppColors_1.AppColors.grayText},textAreaInput:{minHeight:90,maxHeight:160,fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11},typeSelectorStrip:{flexDirection:"row",alignItems:"center",gap:6},typePill:{flex:1,alignItems:"center",paddingVertical:6,borderRadius:6,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},typePillActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},typePillText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.grayText},typePillTextActive:{color:AppColors_1.AppColors.white},formatJsonBtn:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.purple},errorText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.errorColor,marginTop:2},modalActions:{flexDirection:"row",alignItems:"center",gap:10,marginTop:4},cancelBtn:{flex:1,alignItems:"center",paddingVertical:10,borderRadius:8,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},cancelBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.grayText},saveBtn:{flex:1.5,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:5,paddingVertical:10,borderRadius:8,backgroundColor:AppColors_1.AppColors.purple},saveBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.white}});exports.default=exports.StorageTab;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface SupportModalProps {
3
+ visible: boolean;
4
+ onClose: () => void;
5
+ }
6
+ export declare const SupportModal: React.FC<SupportModalProps>;
7
+ export {};
@@ -0,0 +1,125 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.SupportModal=void 0;const react_1=__importDefault(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),NetworkIcons_1=require("../NetworkIcons"),NativeInspector_1=require("../../native/NativeInspector"),i18n_1=require("../../i18n"),SupportModal=({visible:t,onClose:r})=>{const{t:e}=(0,i18n_1.useTranslation)();if(!t)return null;const o=async a=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light"),await react_native_1.Linking.canOpenURL(a)&&await react_native_1.Linking.openURL(a)}catch{}};return<react_native_1.Modal visible={t}transparent={!0}animationType="fade"onRequestClose={r}>
2
+ <react_native_1.View style={styles.overlay}>
3
+ <react_native_1.Pressable style={styles.backdrop}onPress={r}/>
4
+
5
+ <react_native_1.View style={styles.card}>
6
+
7
+ <react_native_1.View style={styles.header}>
8
+ <react_native_1.View style={styles.headerLeft}>
9
+ <react_native_1.View style={styles.headerIconBadge}>
10
+ <NetworkIcons_1.SupportIcon size={20}color={AppColors_1.AppColors.purple}/>
11
+ </react_native_1.View>
12
+ <react_native_1.View>
13
+ <react_native_1.Text style={styles.title}>
14
+ {e("support.title","Support & Community")}
15
+ </react_native_1.Text>
16
+ <react_native_1.Text style={styles.subtitle}>
17
+ {e("support.subtitle","React Native In-App Inspector")}
18
+ </react_native_1.Text>
19
+ </react_native_1.View>
20
+ </react_native_1.View>
21
+
22
+ <TouchableScale_1.default onPress={r}hitSlop={10}style={styles.closeBtn}>
23
+ <NetworkIcons_1.CloseWhite size={12}color={AppColors_1.AppColors.grayText}/>
24
+ </TouchableScale_1.default>
25
+ </react_native_1.View>
26
+
27
+
28
+ <react_native_1.ScrollView style={styles.scrollList}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
29
+
30
+ <TouchableScale_1.default onPress={()=>o("https://github.com/sponsors/vengatmacuser")}style={[styles.itemCard,styles.itemCardHighlight]}>
31
+ <react_native_1.View style={[styles.itemIconWrap,styles.sponsorIconWrap]}>
32
+ <react_native_1.Text style={styles.emojiIcon}>💖</react_native_1.Text>
33
+ </react_native_1.View>
34
+ <react_native_1.View style={styles.itemTextCol}>
35
+ <react_native_1.View style={styles.itemTitleRow}>
36
+ <react_native_1.Text style={[styles.itemTitle,styles.sponsorTitle]}>
37
+ {e("support.sponsor","Sponsor on GitHub")}
38
+ </react_native_1.Text>
39
+ <react_native_1.View style={styles.heartBadge}>
40
+ <react_native_1.Text style={styles.heartBadgeText}>
41
+ {e("support.sponsorBadge","SPONSOR")}
42
+ </react_native_1.Text>
43
+ </react_native_1.View>
44
+ </react_native_1.View>
45
+ <react_native_1.Text style={styles.itemDesc}>
46
+ {e("support.sponsorDesc","Support ongoing maintenance, new features and release improvements.")}
47
+ </react_native_1.Text>
48
+ </react_native_1.View>
49
+ <NetworkIcons_1.ExternalLinkIcon size={14}color={AppColors_1.AppColors.pink600}/>
50
+ </TouchableScale_1.default>
51
+
52
+
53
+ <TouchableScale_1.default onPress={()=>o("https://github.com/vengatmacuser/react-native-inapp-inspector")}style={styles.itemCard}>
54
+ <react_native_1.View style={[styles.itemIconWrap,styles.starIconWrap]}>
55
+ <NetworkIcons_1.StarIcon size={18}color={AppColors_1.AppColors.amber600}/>
56
+ </react_native_1.View>
57
+ <react_native_1.View style={styles.itemTextCol}>
58
+ <react_native_1.Text style={styles.itemTitle}>
59
+ {e("support.star","Star on GitHub")}
60
+ </react_native_1.Text>
61
+ <react_native_1.Text style={styles.itemDesc}>
62
+ {e("support.starDesc","Star our repo to help more React Native developers discover this tool.")}
63
+ </react_native_1.Text>
64
+ </react_native_1.View>
65
+ <NetworkIcons_1.ExternalLinkIcon size={14}color={AppColors_1.AppColors.grayTextWeak}/>
66
+ </TouchableScale_1.default>
67
+
68
+
69
+ <TouchableScale_1.default onPress={()=>o("https://github.com/vengatmacuser/react-native-inapp-inspector/issues")}style={styles.itemCard}>
70
+ <react_native_1.View style={[styles.itemIconWrap,styles.bugIconWrap]}>
71
+ <NetworkIcons_1.BugIcon size={18}color={AppColors_1.AppColors.purple}/>
72
+ </react_native_1.View>
73
+ <react_native_1.View style={styles.itemTextCol}>
74
+ <react_native_1.Text style={styles.itemTitle}>
75
+ {e("support.issues","Report Issue / Suggestion")}
76
+ </react_native_1.Text>
77
+ <react_native_1.Text style={styles.itemDesc}>
78
+ {e("support.issuesDesc","Found a bug or have an idea? Open an issue on GitHub.")}
79
+ </react_native_1.Text>
80
+ </react_native_1.View>
81
+ <NetworkIcons_1.ExternalLinkIcon size={14}color={AppColors_1.AppColors.grayTextWeak}/>
82
+ </TouchableScale_1.default>
83
+
84
+
85
+ <TouchableScale_1.default onPress={()=>o("https://vengatmacuser.github.io/react-native-inapp-inspector/")}style={styles.itemCard}>
86
+ <react_native_1.View style={[styles.itemIconWrap,styles.docsIconWrap]}>
87
+ <NetworkIcons_1.BookOpenIcon size={18}color={AppColors_1.AppColors.sky600}/>
88
+ </react_native_1.View>
89
+ <react_native_1.View style={styles.itemTextCol}>
90
+ <react_native_1.Text style={styles.itemTitle}>
91
+ {e("support.docs","Official Documentation")}
92
+ </react_native_1.Text>
93
+ <react_native_1.Text style={styles.itemDesc}>
94
+ {e("support.docsDesc","Interactive feature tour, search syntax & configuration guides.")}
95
+ </react_native_1.Text>
96
+ </react_native_1.View>
97
+ <NetworkIcons_1.ExternalLinkIcon size={14}color={AppColors_1.AppColors.grayTextWeak}/>
98
+ </TouchableScale_1.default>
99
+
100
+
101
+ <TouchableScale_1.default onPress={()=>o("mailto:vengatmacuser@gmail.com")}style={styles.itemCard}>
102
+ <react_native_1.View style={[styles.itemIconWrap,styles.contactIconWrap]}>
103
+ <react_native_1.Text style={styles.mailEmoji}>✉️</react_native_1.Text>
104
+ </react_native_1.View>
105
+ <react_native_1.View style={styles.itemTextCol}>
106
+ <react_native_1.Text style={styles.itemTitle}>
107
+ {e("support.contact","Contact Author")}
108
+ </react_native_1.Text>
109
+ <react_native_1.Text style={styles.itemDesc}>
110
+ {e("support.contactDesc","vengatmacuser@gmail.com \u2022 Direct support & enterprise inquiries.")}
111
+ </react_native_1.Text>
112
+ </react_native_1.View>
113
+ <NetworkIcons_1.ExternalLinkIcon size={14}color={AppColors_1.AppColors.grayTextWeak}/>
114
+ </TouchableScale_1.default>
115
+ </react_native_1.ScrollView>
116
+
117
+
118
+ <react_native_1.View style={styles.footer}>
119
+ <TouchableScale_1.default onPress={r}style={styles.doneBtn}>
120
+ <react_native_1.Text style={styles.doneBtnText}>{e("common.close","Close")}</react_native_1.Text>
121
+ </TouchableScale_1.default>
122
+ </react_native_1.View>
123
+ </react_native_1.View>
124
+ </react_native_1.View>
125
+ </react_native_1.Modal>};exports.SupportModal=SupportModal;const styles=react_native_1.StyleSheet.create({overlay:{flex:1,backgroundColor:`${AppColors_1.AppColors.slate900}B0`,justifyContent:"center",alignItems:"center",paddingHorizontal:18},backdrop:{...react_native_1.StyleSheet.absoluteFillObject},card:{width:"100%",maxWidth:380,maxHeight:"82%",backgroundColor:AppColors_1.AppColors.white,borderRadius:24,overflow:"hidden",borderWidth:1,borderColor:`${AppColors_1.AppColors.white}CC`,...react_native_1.Platform.select({ios:{shadowColor:AppColors_1.AppColors.slate900,shadowOffset:{width:0,height:16},shadowOpacity:.3,shadowRadius:28},android:{elevation:16}})},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:18,paddingTop:18,paddingBottom:14,borderBottomWidth:react_native_1.StyleSheet.hairlineWidth,borderBottomColor:AppColors_1.AppColors.grayBorderSecondary},headerLeft:{flexDirection:"row",alignItems:"center",gap:12},headerIconBadge:{width:38,height:38,borderRadius:12,backgroundColor:AppColors_1.AppColors.purple50,borderWidth:1,borderColor:AppColors_1.AppColors.purple200,alignItems:"center",justifyContent:"center"},title:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:15.5,color:AppColors_1.AppColors.slate900},subtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayTextWeak,marginTop:1},closeBtn:{width:28,height:28,borderRadius:14,backgroundColor:AppColors_1.AppColors.graySurface,alignItems:"center",justifyContent:"center"},scrollList:{maxHeight:380},scrollContent:{padding:16,gap:10},itemCard:{flexDirection:"row",alignItems:"center",padding:12,borderRadius:14,backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,gap:12},itemCardHighlight:{backgroundColor:`${AppColors_1.AppColors.pink100}55`,borderColor:`${AppColors_1.AppColors.pink400}66`},itemIconWrap:{width:36,height:36,borderRadius:10,borderWidth:1,alignItems:"center",justifyContent:"center"},sponsorIconWrap:{backgroundColor:AppColors_1.AppColors.pink100,borderColor:`${AppColors_1.AppColors.pink400}80`},starIconWrap:{backgroundColor:AppColors_1.AppColors.amber100,borderColor:AppColors_1.AppColors.amber200},bugIconWrap:{backgroundColor:AppColors_1.AppColors.purple50,borderColor:AppColors_1.AppColors.purple200},docsIconWrap:{backgroundColor:AppColors_1.AppColors.sky100,borderColor:`${AppColors_1.AppColors.sky600}40`},contactIconWrap:{backgroundColor:AppColors_1.AppColors.graySurface,borderColor:AppColors_1.AppColors.grayBorderSecondary},emojiIcon:{fontSize:18},mailEmoji:{fontSize:16},itemTextCol:{flex:1},itemTitleRow:{flexDirection:"row",alignItems:"center",gap:6},itemTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13,color:AppColors_1.AppColors.slate900},sponsorTitle:{color:AppColors_1.AppColors.pink600},itemDesc:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayTextWeak,marginTop:2,lineHeight:15},heartBadge:{paddingHorizontal:6,paddingVertical:1,borderRadius:6,backgroundColor:AppColors_1.AppColors.pink100,borderWidth:.5,borderColor:AppColors_1.AppColors.pink400},heartBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9,color:AppColors_1.AppColors.pink600},footer:{paddingHorizontal:16,paddingVertical:12,borderTopWidth:react_native_1.StyleSheet.hairlineWidth,borderTopColor:AppColors_1.AppColors.grayBorderSecondary,backgroundColor:AppColors_1.AppColors.white},doneBtn:{height:42,borderRadius:12,backgroundColor:AppColors_1.AppColors.purple,alignItems:"center",justifyContent:"center"},doneBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.white}});
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export interface SupportPageProps {
3
+ onClose?: () => void;
4
+ }
5
+ export declare const SupportPage: React.FC<SupportPageProps>;