react-native-inapp-inspector 2.5.12 → 2.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  3. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  6. package/android/.gradle/8.9/gc.properties +0 -0
  7. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  8. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  9. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  10. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  11. package/android/.gradle/9.2.0/gc.properties +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  14. package/android/.gradle/vcs-1/gc.properties +0 -0
  15. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  16. package/android/src/main/AndroidManifest.xml +11 -0
  17. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +379 -19
  18. package/android/src/main/res/xml/inappinspector_file_paths.xml +7 -0
  19. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +47 -49
  20. package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  21. package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +76 -0
  22. package/dist/commonjs/components/Inspector/ConsoleExportModal.js +51 -51
  23. package/dist/commonjs/components/Inspector/CrashTab.js +17 -17
  24. package/dist/commonjs/components/Inspector/DebuggingTab.js +24 -24
  25. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +2 -2
  26. package/dist/commonjs/components/Inspector/FabLauncher.js +2 -2
  27. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +2 -2
  28. package/dist/commonjs/components/Inspector/InspectorHeader.js +10 -10
  29. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +10 -10
  30. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +1 -0
  31. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +222 -222
  32. package/dist/commonjs/components/Inspector/NetworkExportModal.d.ts +10 -0
  33. package/dist/commonjs/components/Inspector/NetworkExportModal.js +333 -0
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +48 -41
  35. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +11 -12
  36. package/dist/commonjs/components/Inspector/ReduxDetail.js +17 -19
  37. package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
  38. package/dist/commonjs/components/Inspector/SettingsPanel.js +3 -6
  39. package/dist/commonjs/components/Inspector/SocketCard.js +2 -2
  40. package/dist/commonjs/components/Inspector/SupportPage.js +5 -5
  41. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  42. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +97 -0
  43. package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +2 -0
  44. package/dist/commonjs/components/Inspector/UiInspectorDetail.js +485 -0
  45. package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  46. package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +199 -0
  47. package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +2 -0
  48. package/dist/commonjs/components/Inspector/UiInspectorTab.js +117 -0
  49. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  50. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +148 -0
  51. package/dist/commonjs/components/Inspector/index.d.ts +28 -0
  52. package/dist/commonjs/components/Inspector/index.js +1 -0
  53. package/dist/commonjs/components/LogCard.js +9 -7
  54. package/dist/commonjs/constants/index.js +1 -1
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  56. package/dist/commonjs/constants/telemetryConfig.js +1 -1
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -1
  59. package/dist/commonjs/customHooks/crashHandler.d.ts +1 -1
  60. package/dist/commonjs/customHooks/crashHandler.js +6 -6
  61. package/dist/commonjs/customHooks/uiInspectorManager.d.ts +22 -0
  62. package/dist/commonjs/customHooks/uiInspectorManager.js +1 -0
  63. package/dist/commonjs/helpers/index.js +1 -3
  64. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -0
  65. package/dist/commonjs/helpers/searchQueryParser.js +7 -5
  66. package/dist/commonjs/helpers/shareFormatter.d.ts +16 -0
  67. package/dist/commonjs/helpers/shareFormatter.js +16 -9
  68. package/dist/commonjs/helpers/uiInspectorEngine.d.ts +62 -0
  69. package/dist/commonjs/helpers/uiInspectorEngine.js +19 -0
  70. package/dist/commonjs/i18n/locales/ar.json +1 -1
  71. package/dist/commonjs/i18n/locales/bn.json +1 -1
  72. package/dist/commonjs/i18n/locales/de.json +1 -1
  73. package/dist/commonjs/i18n/locales/en.json +1 -1
  74. package/dist/commonjs/i18n/locales/es.json +1 -1
  75. package/dist/commonjs/i18n/locales/fr.json +1 -1
  76. package/dist/commonjs/i18n/locales/gu.json +1 -1
  77. package/dist/commonjs/i18n/locales/hi.json +1 -1
  78. package/dist/commonjs/i18n/locales/id.json +1 -1
  79. package/dist/commonjs/i18n/locales/it.json +1 -1
  80. package/dist/commonjs/i18n/locales/ja.json +1 -1
  81. package/dist/commonjs/i18n/locales/kn.json +1 -1
  82. package/dist/commonjs/i18n/locales/ko.json +1 -1
  83. package/dist/commonjs/i18n/locales/ml.json +1 -1
  84. package/dist/commonjs/i18n/locales/mr.json +1 -1
  85. package/dist/commonjs/i18n/locales/nl.json +1 -1
  86. package/dist/commonjs/i18n/locales/pa.json +1 -1
  87. package/dist/commonjs/i18n/locales/pl.json +1 -1
  88. package/dist/commonjs/i18n/locales/pt.json +1 -1
  89. package/dist/commonjs/i18n/locales/ru.json +1 -1
  90. package/dist/commonjs/i18n/locales/ta.json +1 -1
  91. package/dist/commonjs/i18n/locales/te.json +1 -1
  92. package/dist/commonjs/i18n/locales/tr.json +1 -1
  93. package/dist/commonjs/i18n/locales/vi.json +1 -1
  94. package/dist/commonjs/i18n/locales/zh.json +1 -1
  95. package/dist/commonjs/index.d.ts +3 -1
  96. package/dist/commonjs/index.js +3 -3
  97. package/dist/commonjs/native/NativeInspector.d.ts +2 -0
  98. package/dist/commonjs/native/NativeInspector.js +1 -1
  99. package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
  100. package/dist/commonjs/types/editor.d.ts +31 -0
  101. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +73 -75
  102. package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  103. package/dist/esm/components/Inspector/BoxModelVisualizer.js +76 -0
  104. package/dist/esm/components/Inspector/ConsoleExportModal.js +67 -67
  105. package/dist/esm/components/Inspector/CrashTab.js +58 -58
  106. package/dist/esm/components/Inspector/DebuggingTab.js +89 -89
  107. package/dist/esm/components/Inspector/DeviceInfoTab.js +2 -2
  108. package/dist/esm/components/Inspector/FabLauncher.js +21 -21
  109. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +23 -23
  110. package/dist/esm/components/Inspector/InspectorHeader.js +26 -26
  111. package/dist/esm/components/Inspector/MediaGalleryTab.js +151 -151
  112. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +1 -0
  113. package/dist/esm/components/Inspector/MediaPreviewModal.js +468 -468
  114. package/dist/esm/components/Inspector/NetworkExportModal.d.ts +10 -0
  115. package/dist/esm/components/Inspector/NetworkExportModal.js +333 -0
  116. package/dist/esm/components/Inspector/NetworkTab.js +118 -111
  117. package/dist/esm/components/Inspector/NpmStarPrompt.js +32 -33
  118. package/dist/esm/components/Inspector/ReduxDetail.js +54 -56
  119. package/dist/esm/components/Inspector/ReduxTab.js +9 -9
  120. package/dist/esm/components/Inspector/SettingsPanel.js +3 -6
  121. package/dist/esm/components/Inspector/SocketCard.js +13 -13
  122. package/dist/esm/components/Inspector/SupportPage.js +5 -5
  123. package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  124. package/dist/esm/components/Inspector/UiA11yAuditPanel.js +97 -0
  125. package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +2 -0
  126. package/dist/esm/components/Inspector/UiInspectorDetail.js +422 -0
  127. package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  128. package/dist/esm/components/Inspector/UiInspectorOverlay.js +138 -0
  129. package/dist/esm/components/Inspector/UiInspectorTab.d.ts +2 -0
  130. package/dist/esm/components/Inspector/UiInspectorTab.js +117 -0
  131. package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  132. package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +148 -0
  133. package/dist/esm/components/Inspector/index.d.ts +28 -0
  134. package/dist/esm/components/Inspector/index.js +1 -0
  135. package/dist/esm/components/LogCard.js +57 -55
  136. package/dist/esm/constants/index.js +1 -1
  137. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  138. package/dist/esm/constants/telemetryConfig.js +1 -1
  139. package/dist/esm/constants/version.d.ts +1 -1
  140. package/dist/esm/constants/version.js +1 -1
  141. package/dist/esm/customHooks/crashHandler.d.ts +1 -1
  142. package/dist/esm/customHooks/crashHandler.js +6 -6
  143. package/dist/esm/customHooks/uiInspectorManager.d.ts +22 -0
  144. package/dist/esm/customHooks/uiInspectorManager.js +1 -0
  145. package/dist/esm/helpers/index.js +4 -6
  146. package/dist/esm/helpers/searchQueryParser.d.ts +1 -0
  147. package/dist/esm/helpers/searchQueryParser.js +7 -5
  148. package/dist/esm/helpers/shareFormatter.d.ts +16 -0
  149. package/dist/esm/helpers/shareFormatter.js +20 -13
  150. package/dist/esm/helpers/uiInspectorEngine.d.ts +48 -0
  151. package/dist/esm/helpers/uiInspectorEngine.js +19 -0
  152. package/dist/esm/i18n/locales/ar.json +1 -1
  153. package/dist/esm/i18n/locales/bn.json +1 -1
  154. package/dist/esm/i18n/locales/de.json +1 -1
  155. package/dist/esm/i18n/locales/en.json +1 -1
  156. package/dist/esm/i18n/locales/es.json +1 -1
  157. package/dist/esm/i18n/locales/fr.json +1 -1
  158. package/dist/esm/i18n/locales/gu.json +1 -1
  159. package/dist/esm/i18n/locales/hi.json +1 -1
  160. package/dist/esm/i18n/locales/id.json +1 -1
  161. package/dist/esm/i18n/locales/it.json +1 -1
  162. package/dist/esm/i18n/locales/ja.json +1 -1
  163. package/dist/esm/i18n/locales/kn.json +1 -1
  164. package/dist/esm/i18n/locales/ko.json +1 -1
  165. package/dist/esm/i18n/locales/ml.json +1 -1
  166. package/dist/esm/i18n/locales/mr.json +1 -1
  167. package/dist/esm/i18n/locales/nl.json +1 -1
  168. package/dist/esm/i18n/locales/pa.json +1 -1
  169. package/dist/esm/i18n/locales/pl.json +1 -1
  170. package/dist/esm/i18n/locales/pt.json +1 -1
  171. package/dist/esm/i18n/locales/ru.json +1 -1
  172. package/dist/esm/i18n/locales/ta.json +1 -1
  173. package/dist/esm/i18n/locales/te.json +1 -1
  174. package/dist/esm/i18n/locales/tr.json +1 -1
  175. package/dist/esm/i18n/locales/vi.json +1 -1
  176. package/dist/esm/i18n/locales/zh.json +1 -1
  177. package/dist/esm/index.d.ts +3 -1
  178. package/dist/esm/index.js +7 -7
  179. package/dist/esm/native/NativeInspector.d.ts +2 -0
  180. package/dist/esm/native/NativeInspector.js +1 -1
  181. package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
  182. package/dist/esm/types/editor.d.ts +31 -0
  183. package/ios/NetworkInspectorModule.mm +314 -16
  184. package/package.json +1 -1
  185. package/src/native/NativeInspector.ts +37 -0
  186. package/src/native/NativeNetworkInspector.ts +2 -0
@@ -1,6 +1,6 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(o,e,n,i){i===void 0&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(o,i,r)}):(function(o,e,n,i){i===void 0&&(i=n),o[i]=e[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(o,e){Object.defineProperty(o,"default",{enumerable:!0,value:e})}):function(o,e){o.default=e}),__importStar=this&&this.__importStar||(function(){var o=function(e){return o=Object.getOwnPropertyNames||function(n){var i=[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(i[i.length]=r);return i},o(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var i=o(e),r=0;r<i.length;r++)i[r]!=="default"&&__createBinding(n,e,i[r]);return __setModuleDefault(n,e),n}})(),__importDefault=this&&this.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DebuggingTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),QRCodeView_1=__importDefault(require("../QRCodeView")),TouchableScale_1=__importDefault(require("../TouchableScale")),toast_1=require("../../helpers/toast"),NativeInspector_1=require("../../native/NativeInspector"),NetworkIcons_1=require("../NetworkIcons"),react_native_svg_1=__importStar(require("react-native-svg")),TerminalConsoleIcon=({color:o=AppColors_1.AppColors.purple,size:e=13})=><react_native_svg_1.default width={e}height={e}viewBox="0 0 24 24"fill="none">
2
- <react_native_svg_1.Path d="M4 17l6-6-6-6M12 19h8"stroke={o}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
3
- </react_native_svg_1.default>,DebuggingTab=()=>{const{t:o}=(0,i18n_1.useTranslation)(),e=(0,react_1.useMemo)(()=>{const a=react_native_1.NativeModules.SourceCode?.scriptURL||"";let s="localhost",t=8081;try{if(a.includes("://")){const d=a.split("://")[1].split("/")[0];if(d.includes(":")){const u=d.split(":");s=u[0];const y=parseInt(u[1],10);isNaN(y)||(t=y)}else s=d}}catch{}return{host:s,port:t,scriptURL:a}},[]),[n,i]=(0,react_1.useState)(()=>e.host&&e.host!=="localhost"&&e.host!=="127.0.0.1"&&e.host!=="10.0.2.2"?e.host:"192.168.1.2"),[r,B]=(0,react_1.useState)(e.port||8083),[V,m]=(0,react_1.useState)("app-debug.apk"),[T,x]=(0,react_1.useState)(null),[g,v]=(0,react_1.useState)("assembleRelease"),[f,k]=(0,react_1.useState)(!0),[l,w]=(0,react_1.useState)({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),p=(0,react_1.useRef)(null),_=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,[A,I]=(0,react_1.useState)(!0),S=(0,react_1.useRef)(null);(0,react_1.useEffect)(()=>{react_native_1.Animated.timing(_,{toValue:Math.max(0,Math.min(100,l.progress)),duration:350,useNativeDriver:!1}).start()},[l.progress,_]),(0,react_1.useEffect)(()=>{l.logs&&l.logs.length>0&&setTimeout(()=>{S.current?.scrollToEnd({animated:!0})},50)},[l.logs]);const C=(0,react_1.useCallback)(async()=>{const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([e.port,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1200),y=await fetch(`http://${t}:${h}/__inapp_inspector/apk-info`,{signal:d.signal});if(clearTimeout(u),y.ok){const c=await y.json();c.hostIp&&c.hostIp!=="127.0.0.1"&&c.hostIp!=="localhost"&&c.hostIp!=="10.0.2.2"&&i(c.hostIp),c.port&&B(c.port),c.apkName&&m(c.apkName),c.apkSize&&x((c.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[e.host,e.port]);(0,react_1.useEffect)(()=>{C()},[C]),(0,react_1.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);const R=(0,react_1.useCallback)(()=>{p.current&&clearInterval(p.current);const a=e.host||"10.0.2.2";p.current=setInterval(async()=>{try{const s=await fetch(`http://${a}:${r}/__inapp_inspector/build-status`);if(s.ok){const t=await s.json();w(t),t.status==="completed"?(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("success"),(0,toast_1.showToast)(o("debugging.buildSuccess","APK Build Generated Successfully!")),t.apkSize&&x((t.apkSize/(1024*1024)).toFixed(1)),t.apkName&&m(t.apkName),C()):t.status==="failed"&&(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("error"),(0,toast_1.showToast)(o("debugging.buildFailed",{error:t.error||"Gradle error"})))}}catch{}},1e3)},[e.host,r,C]),F=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),w({status:"running",scheme:g,clean:f,progress:5,currentTask:f?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));let t=!1;for(const h of a)for(const d of s)try{const u=new AbortController,y=setTimeout(()=>u.abort(),2e3),c=await fetch(`http://${h}:${d}/__inapp_inspector/build-apk?scheme=${g}&clean=${f}`,{signal:u.signal});if(clearTimeout(y),c.ok){t=!0,R();return}}catch{}t||w(h=>({...h,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},D=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("warning"),p.current&&clearInterval(p.current);const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1500);await fetch(`http://${t}:${h}/__inapp_inspector/stop-build`,{signal:d.signal}),clearTimeout(u)}catch{}w(t=>({...t,status:"idle",currentTask:o("debugging.buildCancelled","Build cancelled by user"),logs:[...t.logs||[],`[Build] ${o("debugging.buildCancelled","Build cancelled by user")}.`]})),(0,toast_1.showToast)(o("debugging.buildCancelled","Build cancelled"))},z=`http://${n}:${r}/${V.replace(/^\/+/,"")}`,b=l.status==="running";return<react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,n,a){a===void 0&&(a=n);var r=Object.getOwnPropertyDescriptor(t,n);(!r||("get"in r?!t.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,r)}):(function(e,t,n,a){a===void 0&&(a=n),e[a]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var a=[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(a[a.length]=r);return a},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var a=e(t),r=0;r<a.length;r++)a[r]!=="default"&&__createBinding(n,t,a[r]);return __setModuleDefault(n,t),n}})(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DebuggingTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),QRCodeView_1=__importDefault(require("../QRCodeView")),TouchableScale_1=__importDefault(require("../TouchableScale")),toast_1=require("../../helpers/toast"),NativeInspector_1=require("../../native/NativeInspector"),NetworkIcons_1=require("../NetworkIcons"),react_native_svg_1=__importStar(require("react-native-svg")),TerminalConsoleIcon=({color:e=AppColors_1.AppColors.purple,size:t=13})=><react_native_svg_1.default width={t}height={t}viewBox="0 0 24 24"fill="none">
2
+ <react_native_svg_1.Path d="M4 17l6-6-6-6M12 19h8"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
3
+ </react_native_svg_1.default>,DebuggingTab=()=>{const{t:e}=(0,i18n_1.useTranslation)(),t=(0,react_1.useMemo)(()=>{const i=react_native_1.NativeModules.SourceCode?.scriptURL||"";let s="localhost",o=8081;try{if(i.includes("://")){const d=i.split("://")[1].split("/")[0];if(d.includes(":")){const u=d.split(":");s=u[0];const b=parseInt(u[1],10);isNaN(b)||(o=b)}else s=d}}catch{}return{host:s,port:o,scriptURL:i}},[]),[n,a]=(0,react_1.useState)(()=>t.host&&t.host!=="localhost"&&t.host!=="127.0.0.1"&&t.host!=="10.0.2.2"?t.host:"192.168.1.2"),[r,B]=(0,react_1.useState)(t.port||8083),[V,m]=(0,react_1.useState)("app-debug.apk"),[T,x]=(0,react_1.useState)(null),[g,v]=(0,react_1.useState)("assembleRelease"),[f,k]=(0,react_1.useState)(!0),[l,w]=(0,react_1.useState)({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),p=(0,react_1.useRef)(null),_=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,[A,I]=(0,react_1.useState)(!0),S=(0,react_1.useRef)(null);(0,react_1.useEffect)(()=>{react_native_1.Animated.timing(_,{toValue:Math.max(0,Math.min(100,l.progress)),duration:350,useNativeDriver:!1}).start()},[l.progress,_]),(0,react_1.useEffect)(()=>{l.logs&&l.logs.length>0&&setTimeout(()=>{S.current?.scrollToEnd({animated:!0})},50)},[l.logs]);const C=(0,react_1.useCallback)(async()=>{const i=Array.from(new Set([t.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([t.port,8083,8081,8082].filter(Boolean)));for(const o of i)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1200),b=await fetch(`http://${o}:${h}/__inapp_inspector/apk-info`,{signal:d.signal});if(clearTimeout(u),b.ok){const c=await b.json();c.hostIp&&c.hostIp!=="127.0.0.1"&&c.hostIp!=="localhost"&&c.hostIp!=="10.0.2.2"&&a(c.hostIp),c.port&&B(c.port),c.apkName&&m(c.apkName),c.apkSize&&x((c.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[t.host,t.port]);(0,react_1.useEffect)(()=>{C()},[C]),(0,react_1.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);const R=(0,react_1.useCallback)(()=>{p.current&&clearInterval(p.current);const i=t.host||"10.0.2.2";p.current=setInterval(async()=>{try{const s=await fetch(`http://${i}:${r}/__inapp_inspector/build-status`);if(s.ok){const o=await s.json();w(o),o.status==="completed"?(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("success"),(0,toast_1.showToast)(e("debugging.buildSuccess","APK Build Generated Successfully!")),o.apkSize&&x((o.apkSize/(1024*1024)).toFixed(1)),o.apkName&&m(o.apkName),C()):o.status==="failed"&&(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("error"),(0,toast_1.showToast)(e("debugging.buildFailed",{error:o.error||"Gradle error"})))}}catch{}},1e3)},[t.host,r,C]),F=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),w({status:"running",scheme:g,clean:f,progress:5,currentTask:f?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const i=Array.from(new Set([t.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));let o=!1;for(const h of i)for(const d of s)try{const u=new AbortController,b=setTimeout(()=>u.abort(),2e3),c=await fetch(`http://${h}:${d}/__inapp_inspector/build-apk?scheme=${g}&clean=${f}`,{signal:u.signal});if(clearTimeout(b),c.ok){o=!0,R();return}}catch{}o||w(h=>({...h,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},D=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("warning"),p.current&&clearInterval(p.current);const i=Array.from(new Set([t.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));for(const o of i)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1500);await fetch(`http://${o}:${h}/__inapp_inspector/stop-build`,{signal:d.signal}),clearTimeout(u)}catch{}w(o=>({...o,status:"idle",currentTask:e("debugging.buildCancelled","Build cancelled by user"),logs:[...o.logs||[],`[Build] ${e("debugging.buildCancelled","Build cancelled by user")}.`]})),(0,toast_1.showToast)(e("debugging.buildCancelled","Build cancelled"))},z=`http://${n}:${r}/${V.replace(/^\/+/,"")}`,y=l.status==="running";return<react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
4
4
 
5
5
  <react_native_1.View style={styles.heroCard}>
6
6
  <react_native_1.View style={styles.heroHeader}>
@@ -9,15 +9,15 @@
9
9
  </react_native_1.View>
10
10
  <react_native_1.View style={{flex:1,minWidth:0}}>
11
11
  <react_native_1.Text style={styles.heroTitle}numberOfLines={1}>
12
- Multi-Device APK Installer
12
+ {e("debugging.apkInstallerTitle","Multi-Device APK Installer")}
13
13
  </react_native_1.Text>
14
14
  <react_native_1.Text style={styles.heroSubtitle}numberOfLines={1}>
15
- Scan QR code with another Android device to download
15
+ {e("debugging.apkInstallerSubtitle","Scan QR code with another Android device to download")}
16
16
  </react_native_1.Text>
17
17
  </react_native_1.View>
18
18
  <react_native_1.View style={styles.heroBadge}>
19
19
  <react_native_1.View style={styles.pulseDot}/>
20
- <react_native_1.Text style={styles.heroBadgeText}>Live Metro</react_native_1.Text>
20
+ <react_native_1.Text style={styles.heroBadgeText}>{e("debugging.liveMetro","Live Metro")}</react_native_1.Text>
21
21
  </react_native_1.View>
22
22
  </react_native_1.View>
23
23
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  <react_native_1.View style={styles.sectionCard}>
56
56
  <react_native_1.View style={styles.sectionHeaderRow}>
57
- <react_native_1.Text style={styles.sectionTitle}>QR CODE & DIRECT DOWNLOAD</react_native_1.Text>
57
+ <react_native_1.Text style={styles.sectionTitle}>{e("debugging.qrCodeTitle","QR CODE & DIRECT DOWNLOAD")}</react_native_1.Text>
58
58
  <react_native_1.TouchableOpacity activeOpacity={.7}onPress={C}style={styles.refreshBtn}>
59
59
  <NetworkIcons_1.RepeatIcon size={12}color={AppColors_1.AppColors.purple}/>
60
60
  <react_native_1.Text style={styles.refreshBtnText}>Refresh</react_native_1.Text>
@@ -74,47 +74,47 @@
74
74
  <react_native_1.View style={styles.sectionHeaderRow}>
75
75
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
76
76
  <NetworkIcons_1.BoltIcon size={13}color={AppColors_1.AppColors.purple}/>
77
- <react_native_1.Text style={styles.sectionTitle}>BUILD GENERATOR (GRADLE)</react_native_1.Text>
77
+ <react_native_1.Text style={styles.sectionTitle}>{e("debugging.buildGeneratorTitle","BUILD GENERATOR (GRADLE)")}</react_native_1.Text>
78
78
  </react_native_1.View>
79
79
  {l.status==="completed"&&<react_native_1.View style={styles.completedBadge}>
80
80
  <NetworkIcons_1.CheckIcon size={10}color={AppColors_1.AppColors.emerald500}/>
81
- <react_native_1.Text style={styles.completedBadgeText}>100% Ready</react_native_1.Text>
81
+ <react_native_1.Text style={styles.completedBadgeText}>{e("debugging.ready100","100% Ready")}</react_native_1.Text>
82
82
  </react_native_1.View>}
83
83
  </react_native_1.View>
84
84
 
85
85
 
86
86
  <react_native_1.View style={styles.subTabStrip}>
87
- <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),v("assembleRelease")}}style={[styles.subTabItem,g==="assembleRelease"&&styles.subTabItemActive]}>
87
+ <react_native_1.TouchableOpacity disabled={y}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),v("assembleRelease")}}style={[styles.subTabItem,g==="assembleRelease"&&styles.subTabItemActive]}>
88
88
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5}}>
89
89
  <NetworkIcons_1.BoltIcon size={12}color={g==="assembleRelease"?AppColors_1.AppColors.white:AppColors_1.AppColors.grayText}/>
90
90
  <react_native_1.Text style={[styles.subTabText,g==="assembleRelease"&&styles.subTabTextActive]}>
91
- Release (assembleRelease)
91
+ {e("debugging.releaseBuild","Release (assembleRelease)")}
92
92
  </react_native_1.Text>
93
93
  </react_native_1.View>
94
94
  </react_native_1.TouchableOpacity>
95
95
 
96
- <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),v("assembleDebug")}}style={[styles.subTabItem,g==="assembleDebug"&&styles.subTabItemActive]}>
96
+ <react_native_1.TouchableOpacity disabled={y}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),v("assembleDebug")}}style={[styles.subTabItem,g==="assembleDebug"&&styles.subTabItemActive]}>
97
97
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:5}}>
98
98
  <NetworkIcons_1.WrenchIcon size={12}color={g==="assembleDebug"?AppColors_1.AppColors.white:AppColors_1.AppColors.grayText}/>
99
99
  <react_native_1.Text style={[styles.subTabText,g==="assembleDebug"&&styles.subTabTextActive]}>
100
- Debug (assembleDebug)
100
+ {e("debugging.debugBuild","Debug (assembleDebug)")}
101
101
  </react_native_1.Text>
102
102
  </react_native_1.View>
103
103
  </react_native_1.TouchableOpacity>
104
104
  </react_native_1.View>
105
105
 
106
106
 
107
- <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),k(!f)}}style={styles.cleanRow}>
107
+ <react_native_1.TouchableOpacity disabled={y}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),k(!f)}}style={styles.cleanRow}>
108
108
  <react_native_1.View style={[styles.checkboxBox,f&&styles.checkboxBoxActive]}>
109
109
  {f&&<NetworkIcons_1.CheckIcon size={11}color={AppColors_1.AppColors.white}/>}
110
110
  </react_native_1.View>
111
111
  <react_native_1.Text style={styles.cleanLabel}>
112
- Clean build cache <react_native_1.Text style={styles.cleanCode}>(./gradlew clean)</react_native_1.Text>
112
+ Clean build cache <react_native_1.Text style={styles.cleanCode}>{e("debugging.cleanBuild","(./gradlew clean)")}</react_native_1.Text>
113
113
  </react_native_1.Text>
114
114
  </react_native_1.TouchableOpacity>
115
115
 
116
116
 
117
- {b&&<react_native_1.View style={styles.progressContainer}>
117
+ {y&&<react_native_1.View style={styles.progressContainer}>
118
118
  <react_native_1.View style={styles.progressTopRow}>
119
119
  <react_native_1.View style={styles.progressTaskGroup}>
120
120
  <react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.purple}/>
@@ -142,11 +142,11 @@
142
142
  </react_native_1.View>}
143
143
 
144
144
 
145
- {(l.logs&&l.logs.length>0||b)&&<react_native_1.View style={styles.consoleContainer}>
145
+ {(l.logs&&l.logs.length>0||y)&&<react_native_1.View style={styles.consoleContainer}>
146
146
  <react_native_1.View style={styles.consoleHeaderRow}>
147
147
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
148
148
  <TerminalConsoleIcon color={AppColors_1.AppColors.sky400}size={12}/>
149
- <react_native_1.Text style={styles.consoleHeaderTitle}>GRADLE VERBOSE OUTPUT</react_native_1.Text>
149
+ <react_native_1.Text style={styles.consoleHeaderTitle}>{e("debugging.gradleVerboseOutput","GRADLE VERBOSE OUTPUT")}</react_native_1.Text>
150
150
  </react_native_1.View>
151
151
  <react_native_1.TouchableOpacity activeOpacity={.7}onPress={()=>I(!A)}style={styles.consoleToggleBtn}>
152
152
  <react_native_1.Text style={styles.consoleToggleText}>
@@ -156,16 +156,16 @@
156
156
  </react_native_1.View>
157
157
 
158
158
  {A&&<react_native_1.ScrollView ref={S}style={styles.consoleLogBox}contentContainerStyle={styles.consoleLogContent}nestedScrollEnabled showsVerticalScrollIndicator>
159
- {l.logs&&l.logs.length>0?l.logs.map((a,s)=>{let t=AppColors_1.AppColors.slate400;return a.startsWith("> Task :")?t=AppColors_1.AppColors.sky400:a.includes("BUILD SUCCESSFUL")?t=AppColors_1.AppColors.buildSuccessGreen:a.includes("FAILURE")||a.includes("error:")?t=AppColors_1.AppColors.buildFailureRed:a.includes("UP-TO-DATE")&&(t=AppColors_1.AppColors.purple400),<react_native_1.Text key={s}style={[styles.consoleLogLine,{color:t}]}>
160
- {a}
159
+ {l.logs&&l.logs.length>0?l.logs.map((i,s)=>{let o=AppColors_1.AppColors.slate400;return i.startsWith("> Task :")?o=AppColors_1.AppColors.sky400:i.includes("BUILD SUCCESSFUL")?o=AppColors_1.AppColors.buildSuccessGreen:i.includes("FAILURE")||i.includes("error:")?o=AppColors_1.AppColors.buildFailureRed:i.includes("UP-TO-DATE")&&(o=AppColors_1.AppColors.purple400),<react_native_1.Text key={s}style={[styles.consoleLogLine,{color:o}]}>
160
+ {i}
161
161
  </react_native_1.Text>}):<react_native_1.Text style={styles.consoleLogPlaceholder}>
162
- Waiting for Gradle daemon output...
162
+ {e("debugging.waitingForGradle","Waiting for Gradle daemon output...")}
163
163
  </react_native_1.Text>}
164
164
  </react_native_1.ScrollView>}
165
165
  </react_native_1.View>}
166
166
 
167
167
 
168
- {b?<react_native_1.View style={styles.buildingActionsRow}>
168
+ {y?<react_native_1.View style={styles.buildingActionsRow}>
169
169
  <react_native_1.View style={styles.buildingStatusPill}>
170
170
  <react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.purple}/>
171
171
  <react_native_1.Text style={styles.buildingStatusPillText}numberOfLines={1}>
@@ -175,7 +175,7 @@
175
175
 
176
176
  <TouchableScale_1.default onPress={D}style={styles.stopBtn}>
177
177
  <NetworkIcons_1.CircleXIcon size={13}color={AppColors_1.AppColors.white}/>
178
- <react_native_1.Text style={styles.stopBtnText}>Stop Build</react_native_1.Text>
178
+ <react_native_1.Text style={styles.stopBtnText}>{e("debugging.stopBuild","Stop Build")}</react_native_1.Text>
179
179
  </TouchableScale_1.default>
180
180
  </react_native_1.View>:<TouchableScale_1.default onPress={F}style={styles.generateBtn}>
181
181
  <react_native_1.View style={styles.ctaContentRow}>
@@ -191,7 +191,7 @@
191
191
  <react_native_1.View style={styles.footerNoteRow}>
192
192
  <NetworkIcons_1.InfoCircleIcon size={13}color={AppColors_1.AppColors.grayTextWeak}/>
193
193
  <react_native_1.Text style={styles.footerNoteText}>
194
- Ensure both Android devices are connected to the same Wi-Fi network.
194
+ {e("debugging.sameWifiNote","Ensure both Android devices are connected to the same Wi-Fi network.")}
195
195
  </react_native_1.Text>
196
196
  </react_native_1.View>
197
197
  </react_native_1.ScrollView>};exports.DebuggingTab=DebuggingTab;const styles=react_native_1.StyleSheet.create({scrollArea:{flex:1,backgroundColor:AppColors_1.AppColors.contentBg},scrollContent:{padding:12,gap:12,paddingBottom:100},heroCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.black,shadowOpacity:.04,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:1,gap:12},heroHeader:{flexDirection:"row",alignItems:"center",gap:10},heroIconWrap:{width:38,height:38,borderRadius:10,backgroundColor:AppColors_1.AppColors.purple,alignItems:"center",justifyContent:"center",shadowColor:AppColors_1.AppColors.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},heroTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:15,color:AppColors_1.AppColors.primaryBlack,letterSpacing:-.2},heroSubtitle:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11.5,color:AppColors_1.AppColors.grayText,marginTop:1},heroBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${AppColors_1.AppColors.emerald500}18`,paddingHorizontal:7,paddingVertical:3,borderRadius:6},pulseDot:{width:6,height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.emerald500},heroBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.emerald500},heroMetricsStrip:{flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:10,paddingVertical:8,paddingHorizontal:10},heroMetricItem:{flex:1,alignItems:"center",paddingHorizontal:2,minWidth:0},heroMetricLabel:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:8.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.4},heroMetricValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.primaryBlack,marginTop:2},heroMetricDivider:{width:1,height:20,backgroundColor:AppColors_1.AppColors.dividerColor},sectionCard:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:14,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.black,shadowOpacity:.03,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1,gap:12},sectionHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},sectionTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.8,textTransform:"uppercase"},refreshBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:3,borderRadius:6,backgroundColor:`${AppColors_1.AppColors.purple}12`},refreshBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.purple},qrCenteredWrapper:{alignItems:"center",justifyContent:"center",backgroundColor:AppColors_1.AppColors.grayBackground,padding:12,borderRadius:12,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},qrInnerFrame:{backgroundColor:AppColors_1.AppColors.white,padding:6,borderRadius:8},urlBox:{flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:10,paddingLeft:10,paddingRight:6,paddingVertical:6,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,gap:8},urlText:{flex:1,fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11.5,color:AppColors_1.AppColors.skyBlue},actionsRow:{flexDirection:"row",gap:10},actionBtnSecondary:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:9,borderRadius:10,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,backgroundColor:AppColors_1.AppColors.grayBackground},actionBtnSecondaryText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.grayTextStrong},actionBtnPrimary:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,paddingVertical:9,borderRadius:10,backgroundColor:AppColors_1.AppColors.purple,shadowColor:AppColors_1.AppColors.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},actionBtnPrimaryText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.white},completedBadge:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:`${AppColors_1.AppColors.emerald500}18`,paddingHorizontal:6,paddingVertical:2,borderRadius:5},completedBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.emerald500},subTabStrip:{flexDirection:"row",backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:8,padding:2,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},subTabItem:{flex:1,paddingVertical:7,borderRadius:6,alignItems:"center",justifyContent:"center"},subTabItemActive:{backgroundColor:AppColors_1.AppColors.purple,shadowColor:AppColors_1.AppColors.purple,shadowOpacity:.2,shadowRadius:3,shadowOffset:{width:0,height:1},elevation:1},subTabText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayText},subTabTextActive:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.white},cleanRow:{flexDirection:"row",alignItems:"center",gap:8,paddingVertical:2},checkboxBox:{width:18,height:18,borderRadius:4,borderWidth:1.5,borderColor:AppColors_1.AppColors.grayBorderSecondary,backgroundColor:AppColors_1.AppColors.grayBackground,alignItems:"center",justifyContent:"center"},checkboxBoxActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},cleanLabel:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11.5,color:AppColors_1.AppColors.grayTextStrong},cleanCode:{fontFamily:AppFonts_1.AppFonts.interRegular,color:AppColors_1.AppColors.grayTextWeak,fontSize:10.5},progressContainer:{backgroundColor:AppColors_1.AppColors.grayBackground,borderRadius:10,padding:10,gap:6,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},progressTopRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},progressTaskGroup:{flexDirection:"row",alignItems:"center",gap:6,flex:1,paddingRight:8},progressTaskText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.primaryBlack,flex:1},progressPercentageText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11.5,color:AppColors_1.AppColors.purple},progressBarTrack:{width:"100%",height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.grayBorderSecondary,overflow:"hidden"},progressBarFill:{height:"100%",backgroundColor:AppColors_1.AppColors.purple,borderRadius:3},errorContainer:{flexDirection:"row",alignItems:"center",gap:6,backgroundColor:`${AppColors_1.AppColors.errorColor}12`,padding:8,borderRadius:8,borderWidth:1,borderColor:`${AppColors_1.AppColors.errorColor}25`},errorText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.errorColor,flex:1},consoleContainer:{backgroundColor:AppColors_1.AppColors.slate900,borderRadius:10,borderWidth:1,borderColor:AppColors_1.AppColors.slate800,overflow:"hidden",marginTop:4},consoleHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:AppColors_1.AppColors.slate800,paddingHorizontal:10,paddingVertical:6},consoleHeaderTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.sky400,letterSpacing:.5},consoleToggleBtn:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,backgroundColor:"rgba(255,255,255,0.1)"},consoleToggleText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:9.5,color:AppColors_1.AppColors.slate400},consoleLogBox:{maxHeight:140,paddingHorizontal:10,paddingVertical:8},consoleLogContent:{gap:3},consoleLogLine:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,lineHeight:14},consoleLogPlaceholder:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:10,color:AppColors_1.AppColors.slate500,fontStyle:"italic"},generateBtn:{backgroundColor:AppColors_1.AppColors.purple,borderRadius:10,paddingVertical:10,alignItems:"center",justifyContent:"center",shadowColor:AppColors_1.AppColors.purple,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},generateBtnDisabled:{opacity:.7},buildingActionsRow:{flexDirection:"row",alignItems:"center",gap:10},buildingStatusPill:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:8,backgroundColor:`${AppColors_1.AppColors.purple}14`,borderRadius:10,paddingVertical:10,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}30`},buildingStatusPillText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.purple},stopBtn:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:AppColors_1.AppColors.errorColor,borderRadius:10,paddingHorizontal:16,paddingVertical:10,shadowColor:AppColors_1.AppColors.errorColor,shadowOpacity:.25,shadowRadius:4,shadowOffset:{width:0,height:2},elevation:2},stopBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.white},ctaContentRow:{flexDirection:"row",alignItems:"center",gap:6},generateBtnText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12.5,color:AppColors_1.AppColors.white},footerNoteRow:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:8},footerNoteText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayTextWeak,textAlign:"center",flex:1}});exports.default=exports.DebuggingTab;
@@ -98,13 +98,13 @@
98
98
  </react_native_1.View>
99
99
  <react_native_1.View style={{flex:1,minWidth:0}}>
100
100
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
101
- <react_native_1.Text style={styles.featuredUuidLabel}>DEVICE UUID</react_native_1.Text>
101
+ <react_native_1.Text style={styles.featuredUuidLabel}>{r("device.deviceUuid","DEVICE UUID")}</react_native_1.Text>
102
102
  <react_native_1.View style={styles.featuredBadge}>
103
103
  <react_native_1.Text style={styles.featuredBadgeText}>FEATURED</react_native_1.Text>
104
104
  </react_native_1.View>
105
105
  </react_native_1.View>
106
106
  <react_native_1.Text style={styles.featuredUuidSubtext}>
107
- Deterministic hardware pseudo-identifier
107
+ {r("device.pseudoIdentifierDesc","Deterministic hardware pseudo-identifier")}
108
108
  </react_native_1.Text>
109
109
  </react_native_1.View>
110
110
  </react_native_1.View>
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,o,a,s){s===void 0&&(s=a);var c=Object.getOwnPropertyDescriptor(o,a);(!c||("get"in c?!o.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return o[a]}}),Object.defineProperty(i,s,c)}):(function(i,o,a,s){s===void 0&&(s=a),i[s]=o[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}):function(i,o){i.default=o}),__importStar=this&&this.__importStar||(function(){var i=function(o){return i=Object.getOwnPropertyNames||function(a){var s=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(s[s.length]=c);return s},i(o)};return function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var s=i(o),c=0;c<s.length;c++)s[c]!=="default"&&__createBinding(a,o,s[c]);return __setModuleDefault(a,o),a}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppHeaderLogo_1=__importDefault(require("../AppHeaderLogo")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),helpers_1=require("../../helpers"),constants_1=require("../../constants"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),styles_1=__importDefault(require("../../styles")),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FabLauncher=()=>{const{setVisible:i,isMinimized:o,setIsMinimized:a,dismissInspector:s,appIcon:c,fabPan:l,fabPanResponder:ie,fabDraggedRef:T,pulseAnim:k,fabShineAnim:oe,refreshMediaCount:m,captureFps:L,captureScale:E,captureBitrate:O,captureMaxDurationSeconds:q,captureAudioMode:H,previewMediaItem:W,setPreviewMediaItem:C}=(0,InspectorContext_1.useInspector)(),{width:S,height:b}=(0,react_native_1.useWindowDimensions)(),{t:n}=(0,i18n_1.useTranslation)(),[X]=(0,react_1.useState)(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),[p,I]=(0,react_1.useState)(!1),[Z,D]=(0,react_1.useState)(0),v=(0,react_1.useRef)(null),[G,B]=(0,react_1.useState)(!1),[z,_]=(0,react_1.useState)(!1),f=(0,react_1.useRef)(!1),x=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,P=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,y=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(r=>y.current.x=r.value),t=l.y.addListener(r=>y.current.y=r.value);return()=>{l.x.removeListener(e),l.y.removeListener(t)}},[l]);const u=68,V=8,U=(0,react_1.useCallback)(()=>{const e=y.current.x,t=y.current.y,r=20,R=180,g=S-r-u/2+e,M=b-R-u/2+t;let N=e,F=t,A=!1;g<V+u/2?(N=e+(V+u/2-g),A=!0):g>S-V-u/2&&(N=e-(g-(S-V-u/2)),A=!0);const Y=react_native_1.Platform.OS==="ios"?60:40,$=react_native_1.Platform.OS==="ios"?40:24;M<Y+u/2?(F=t+(Y+u/2-M),A=!0):M>b-$-u/2&&(F=t-(M-(b-$-u/2)),A=!0),A&&react_native_1.Animated.spring(l,{toValue:{x:N,y:F},useNativeDriver:!1,tension:80,friction:8}).start()},[l,S,b]),K=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{T.current=!0,l.setOffset({x:y.current.x,y:y.current.y}),l.setValue({x:0,y:0}),f.current=!1,_(!1),B(!0),P.setValue(1),react_native_1.Animated.spring(x,{toValue:1,useNativeDriver:!0,tension:80,friction:8}).start()},onPanResponderMove:(e,t)=>{l.setValue({x:t.dx,y:t.dy});const r=t.moveY,R=t.moveX,g=r>b-140&&Math.abs(R-S/2)<85;g&&!f.current?(f.current=!0,_(!0),(0,NativeInspector_1.triggerNativeHaptic)("medium"),react_native_1.Animated.spring(P,{toValue:1.25,useNativeDriver:!0,tension:100,friction:6}).start()):!g&&f.current&&(f.current=!1,_(!1),react_native_1.Animated.spring(P,{toValue:1,useNativeDriver:!0,tension:100,friction:6}).start())},onPanResponderRelease:()=>{const e=f.current;l.flattenOffset(),react_native_1.Animated.timing(x,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{B(!1),_(!1),f.current=!1}),e?((0,NativeInspector_1.triggerNativeHaptic)("heavy"),s(),(0,toast_1.showToast)(n("common.inspectorDismissed","In-App Inspector closed for this session"))):U(),setTimeout(()=>{T.current=!1},100)},onPanResponderTerminate:()=>{l.flattenOffset(),T.current=!1,react_native_1.Animated.timing(x,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{B(!1),_(!1),f.current=!1})}})).current,d=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,w=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=d.x.addListener(r=>w.current.x=r.value),t=d.y.addListener(r=>w.current.y=r.value);return()=>{d.x.removeListener(e),d.y.removeListener(t)}},[d]);const h=(0,react_1.useRef)(!1),J=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{h.current=!0,d.setOffset({x:w.current.x,y:w.current.y}),d.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:d.x,dy:d.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{d.flattenOffset();const e=w.current.y,t=-(b-(react_native_1.Platform.OS==="ios"?34:18)-70),r=react_native_1.Platform.OS==="ios"?34:18;if(e<t||e>r){const R=Math.max(t,Math.min(r,e));react_native_1.Animated.spring(d,{toValue:{x:w.current.x,y:R},useNativeDriver:!1,tension:80,friction:8}).start()}setTimeout(()=>{h.current=!1},50)},onPanResponderTerminate:()=>{d.flattenOffset(),h.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{I(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(p?(D(0),v.current=setInterval(()=>{D(e=>e+1)},1e3)):(v.current&&(clearInterval(v.current),v.current=null),D(0)),()=>{v.current&&clearInterval(v.current)}),[p]);const Q=(0,react_1.useCallback)(async()=>{if(!h.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),r={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};C(r),m?.().catch(()=>{}),(0,toast_1.showToast)(n("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(n("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(n("header.screenshotError","Error capturing screenshot"))}},[m,n]),ee=(0,react_1.useCallback)(async()=>{if(!h.current)try{if(p){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(I(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("video",e.format),r={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};C(r),m?.().catch(()=>{}),(0,toast_1.showToast)(n("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:L,scale:E,audioSource:H,bitrate:O>0?O:void 0,maxDurationSeconds:q})?(I(!0),(0,toast_1.showToast)(n("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(n("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(n("header.recordingError","Error during screen recording")),I(!1)}},[p,L,E,O,q,H,m,n]),j=(0,react_1.useCallback)(()=>{h.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!0))},[a,i]),te=(0,react_1.useCallback)(()=>{h.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!1))},[a,i]),re=e=>{const t=Math.floor(e/60),r=e%60;return`${t}:${r<10?"0":""}${r}`};return<>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,o,a,s){s===void 0&&(s=a);var c=Object.getOwnPropertyDescriptor(o,a);(!c||("get"in c?!o.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return o[a]}}),Object.defineProperty(i,s,c)}):(function(i,o,a,s){s===void 0&&(s=a),i[s]=o[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}):function(i,o){i.default=o}),__importStar=this&&this.__importStar||(function(){var i=function(o){return i=Object.getOwnPropertyNames||function(a){var s=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(s[s.length]=c);return s},i(o)};return function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var s=i(o),c=0;c<s.length;c++)s[c]!=="default"&&__createBinding(a,o,s[c]);return __setModuleDefault(a,o),a}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppHeaderLogo_1=__importDefault(require("../AppHeaderLogo")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),helpers_1=require("../../helpers"),constants_1=require("../../constants"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),styles_1=__importDefault(require("../../styles")),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FabLauncher=()=>{const{setVisible:i,isMinimized:o,setIsMinimized:a,dismissInspector:s,appIcon:c,fabPan:l,fabPanResponder:ie,fabDraggedRef:T,pulseAnim:k,fabShineAnim:oe,refreshMediaCount:h,captureFps:L,captureScale:E,captureBitrate:O,captureMaxDurationSeconds:q,captureAudioMode:H,previewMediaItem:W,setPreviewMediaItem:b}=(0,InspectorContext_1.useInspector)(),{width:S,height:v}=(0,react_native_1.useWindowDimensions)(),{t:n}=(0,i18n_1.useTranslation)(),[X]=(0,react_1.useState)(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),[p,I]=(0,react_1.useState)(!1),[Z,D]=(0,react_1.useState)(0),y=(0,react_1.useRef)(null),[G,B]=(0,react_1.useState)(!1),[z,_]=(0,react_1.useState)(!1),f=(0,react_1.useRef)(!1),x=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,P=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,w=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(r=>w.current.x=r.value),t=l.y.addListener(r=>w.current.y=r.value);return()=>{l.x.removeListener(e),l.y.removeListener(t)}},[l]);const u=68,V=8,U=(0,react_1.useCallback)(()=>{const e=w.current.x,t=w.current.y,r=20,R=180,m=S-r-u/2+e,M=v-R-u/2+t;let N=e,F=t,A=!1;m<V+u/2?(N=e+(V+u/2-m),A=!0):m>S-V-u/2&&(N=e-(m-(S-V-u/2)),A=!0);const Y=react_native_1.Platform.OS==="ios"?60:40,$=react_native_1.Platform.OS==="ios"?40:24;M<Y+u/2?(F=t+(Y+u/2-M),A=!0):M>v-$-u/2&&(F=t-(M-(v-$-u/2)),A=!0),A&&react_native_1.Animated.spring(l,{toValue:{x:N,y:F},useNativeDriver:!1,tension:80,friction:8}).start()},[l,S,v]),K=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{T.current=!0,l.setOffset({x:w.current.x,y:w.current.y}),l.setValue({x:0,y:0}),f.current=!1,_(!1),B(!0),P.setValue(1),react_native_1.Animated.spring(x,{toValue:1,useNativeDriver:!0,tension:80,friction:8}).start()},onPanResponderMove:(e,t)=>{l.setValue({x:t.dx,y:t.dy});const r=t.moveY,R=t.moveX,m=r>v-140&&Math.abs(R-S/2)<85;m&&!f.current?(f.current=!0,_(!0),(0,NativeInspector_1.triggerNativeHaptic)("medium"),react_native_1.Animated.spring(P,{toValue:1.25,useNativeDriver:!0,tension:100,friction:6}).start()):!m&&f.current&&(f.current=!1,_(!1),react_native_1.Animated.spring(P,{toValue:1,useNativeDriver:!0,tension:100,friction:6}).start())},onPanResponderRelease:()=>{const e=f.current;l.flattenOffset(),react_native_1.Animated.timing(x,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{B(!1),_(!1),f.current=!1}),e?((0,NativeInspector_1.triggerNativeHaptic)("heavy"),s(),(0,toast_1.showToast)(n("common.inspectorDismissed","In-App Inspector closed for this session"))):U(),setTimeout(()=>{T.current=!1},100)},onPanResponderTerminate:()=>{l.flattenOffset(),T.current=!1,react_native_1.Animated.timing(x,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{B(!1),_(!1),f.current=!1})}})).current,d=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,C=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=d.x.addListener(r=>C.current.x=r.value),t=d.y.addListener(r=>C.current.y=r.value);return()=>{d.x.removeListener(e),d.y.removeListener(t)}},[d]);const g=(0,react_1.useRef)(!1),J=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{g.current=!0,d.setOffset({x:C.current.x,y:C.current.y}),d.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:d.x,dy:d.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{d.flattenOffset();const e=C.current.y,t=-(v-(react_native_1.Platform.OS==="ios"?34:18)-70),r=react_native_1.Platform.OS==="ios"?34:18;if(e<t||e>r){const R=Math.max(t,Math.min(r,e));react_native_1.Animated.spring(d,{toValue:{x:C.current.x,y:R},useNativeDriver:!1,tension:80,friction:8}).start()}setTimeout(()=>{g.current=!1},50)},onPanResponderTerminate:()=>{d.flattenOffset(),g.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{I(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(p?(D(0),y.current=setInterval(()=>{D(e=>e+1)},1e3)):(y.current&&(clearInterval(y.current),y.current=null),D(0)),()=>{y.current&&clearInterval(y.current)}),[p]);const Q=(0,react_1.useCallback)(async()=>{if(!g.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),r={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};b(r),h?.().catch(()=>{}),(0,toast_1.showToast)(n("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(n("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(n("header.screenshotError","Error capturing screenshot"))}},[h,n]),ee=(0,react_1.useCallback)(async()=>{if(!g.current)try{if(p){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(I(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("video",e.format),r={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};b(r),h?.().catch(()=>{}),(0,toast_1.showToast)(n("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:L,scale:E,audioSource:H,bitrate:O>0?O:void 0,maxDurationSeconds:q})?(I(!0),(0,toast_1.showToast)(n("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(n("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(n("header.recordingError","Error during screen recording")),I(!1)}},[p,L,E,O,q,H,h,n]),j=(0,react_1.useCallback)(()=>{g.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!0))},[a,i]),te=(0,react_1.useCallback)(()=>{g.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!1))},[a,i]),re=e=>{const t=Math.floor(e/60),r=e%60;return`${t}:${r<10?"0":""}${r}`};return<>
2
2
 
3
3
  {o?<react_native_1.Animated.View style={[fabStyles.playerContainer,{transform:d.getTranslateTransform()}]}{...J.panHandlers}>
4
4
 
@@ -77,5 +77,5 @@
77
77
  </react_native_1.Animated.View>}
78
78
 
79
79
 
80
- <MediaPreviewModal_1.MediaPreviewModal item={W}visible={!!W}onClose={()=>C(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),m?.().catch(()=>{}),C(null)}}onConvertToGif={async e=>{const t=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});if(t){m?.().catch(()=>{});const r=(0,capture_1.generateCaptureId)("anim","gif");C({id:r,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||r,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs})}}}/>
80
+ <MediaPreviewModal_1.MediaPreviewModal item={W}visible={!!W}onClose={()=>b(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),h?.().catch(()=>{}),b(null)}}onConvertToGif={async e=>{const t=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});if(t){h?.().catch(()=>{});const r=(0,capture_1.generateCaptureId)("anim","gif");b({id:r,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||r,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs})}}}onSave={e=>{b(e),h?.().catch(()=>{})}}/>
81
81
  </>},fabStyles=react_native_1.StyleSheet.create({dismissTargetContainer:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?42:26,left:0,right:0,alignItems:"center",justifyContent:"center",zIndex:999998},dismissTargetCircle:{width:54,height:54,borderRadius:27,backgroundColor:"rgba(23, 23, 37, 0.82)",borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.28)",alignItems:"center",justifyContent:"center",shadowColor:AppColors_1.AppColors.black,shadowOffset:{width:0,height:6},shadowOpacity:.4,shadowRadius:10,elevation:16},dismissTargetCircleActive:{backgroundColor:AppColors_1.AppColors.red600,borderColor:AppColors_1.AppColors.red300,shadowColor:AppColors_1.AppColors.red600,shadowOpacity:.65,shadowRadius:18,transform:[{scale:1.06}]},dismissTargetLabel:{marginTop:6,fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:11,color:"rgba(255, 255, 255, 0.85)",textShadowColor:"rgba(0, 0, 0, 0.6)",textShadowOffset:{width:0,height:1},textShadowRadius:3},dismissTargetLabelActive:{color:AppColors_1.AppColors.red300,fontFamily:AppFonts_1.AppFonts.interBold},playerContainer:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?34:18,left:12,right:12,minHeight:58,flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderRadius:16,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.28)",paddingHorizontal:12,paddingVertical:7,gap:8,zIndex:99999,elevation:25,shadowColor:AppColors_1.AppColors.indigo600,shadowOffset:{width:0,height:8},shadowOpacity:.45,shadowRadius:14,overflow:"hidden"},gradientBg:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16},playerShineClip:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16,overflow:"hidden"},playerShineStreak:{position:"absolute",top:-60,width:75,height:200},brandSection:{flexDirection:"row",alignItems:"center",gap:9,flex:1,minWidth:0,paddingVertical:2,overflow:"hidden"},titleWrapper:{flex:1,minWidth:0,justifyContent:"center",gap:2},appTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.white,letterSpacing:-.2},versionRow:{flexDirection:"row",alignItems:"center",gap:4,minWidth:0},versionChip:{flexDirection:"row",alignItems:"center",backgroundColor:`${AppColors_1.AppColors.white}1F`,borderRadius:5,paddingHorizontal:5,paddingVertical:1.5,gap:3,borderWidth:1,borderColor:`${AppColors_1.AppColors.white}2E`,flexShrink:1,minWidth:0},versionChipText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:8.5,color:`${AppColors_1.AppColors.white}EB`,letterSpacing:.1},actionsRow:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},actionBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:"rgba(255, 255, 255, 0.22)",paddingHorizontal:8,paddingVertical:5.5,borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},actionBtnSquare:{alignItems:"center",justifyContent:"center",width:27,height:27,backgroundColor:"rgba(255, 255, 255, 0.22)",borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},recordingBtnActive:{backgroundColor:"rgba(239, 68, 68, 0.32)",borderColor:AppColors_1.AppColors.red500},recordingDot:{width:6,height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.red500},actionText:{fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:10.5,color:AppColors_1.AppColors.white}});exports.default=FabLauncher;
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,a,s,n){n===void 0&&(n=s);var i=Object.getOwnPropertyDescriptor(a,s);(!i||("get"in i?!a.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return a[s]}}),Object.defineProperty(r,n,i)}):(function(r,a,s,n){n===void 0&&(n=s),r[n]=a[s]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,a){Object.defineProperty(r,"default",{enumerable:!0,value:a})}):function(r,a){r.default=a}),__importStar=this&&this.__importStar||(function(){var r=function(a){return r=Object.getOwnPropertyNames||function(s){var n=[];for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(n[n.length]=i);return n},r(a)};return function(a){if(a&&a.__esModule)return a;var s={};if(a!=null)for(var n=r(a),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(s,a,n[i]);return __setModuleDefault(s,a),s}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FloatingCaptureWidget=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FloatingCaptureWidget=()=>{const{refreshMediaCount:r,captureFps:a,captureScale:s,captureBitrate:n,captureMaxDurationSeconds:i,captureAudioMode:S,captureWidgetEnabled:T,activeTab:M,settingsPage:V,peekMode:k,previewMediaItem:y,setPreviewMediaItem:p,isUpdatePopupVisible:P}=(0,InspectorContext_1.useInspector)(),{t:d}=(0,i18n_1.useTranslation)(),[f,h]=(0,react_1.useState)(!1),[D,w]=(0,react_1.useState)(!1),[F,_]=(0,react_1.useState)(0),u=(0,react_1.useRef)(null),g=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,v=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,c=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,l=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=c.x.addListener(o=>l.current.x=o.value),t=c.y.addListener(o=>l.current.y=o.value);return()=>{c.x.removeListener(e),c.y.removeListener(t)}},[c]);const m=(0,react_1.useRef)(!1),O=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!0,onStartShouldSetPanResponderCapture:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>2||Math.abs(t.dy)>2,onMoveShouldSetPanResponderCapture:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{m.current=!0,c.setOffset({x:l.current.x,y:l.current.y}),c.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:c.x,dy:c.y}],{useNativeDriver:!1}),onPanResponderTerminationRequest:()=>!1,onShouldBlockNativeResponder:()=>!0,onPanResponderRelease:()=>{c.flattenOffset(),setTimeout(()=>{m.current=!1},100);const{width:e,height:t}=react_native_1.Dimensions.get("window"),o=e/2-20,x=-o,R=20,A=-(t-140),b=l.current.x,C=l.current.y;if(b<x||b>o||C<A||C>R){const N=Math.min(Math.max(b,x),o),j=Math.min(Math.max(C,A),R);react_native_1.Animated.spring(c,{toValue:{x:N,y:j},friction:7,tension:50,useNativeDriver:!1}).start()}},onPanResponderTerminate:()=>{c.flattenOffset(),m.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{h(e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>{let e=null;return f?(_(0),u.current=setInterval(()=>{_(t=>t+1)},1e3),e=react_native_1.Animated.loop(react_native_1.Animated.sequence([react_native_1.Animated.timing(g,{toValue:1.15,duration:500,useNativeDriver:!0}),react_native_1.Animated.timing(g,{toValue:1,duration:500,useNativeDriver:!0})])),e.start()):(u.current&&(clearInterval(u.current),u.current=null),_(0),g.setValue(1)),()=>{u.current&&clearInterval(u.current),e&&e.stop()}},[f,g]);const q=(0,react_1.useCallback)(async()=>{if(!m.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light"),w(!0),await new Promise(t=>setTimeout(t,60));const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!1});if(w(!1),react_native_1.Animated.sequence([react_native_1.Animated.timing(v,{toValue:.65,duration:70,useNativeDriver:!0}),react_native_1.Animated.timing(v,{toValue:0,duration:200,useNativeDriver:!0})]).start(),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),o={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};p(o),r?.().catch(()=>{}),(0,toast_1.showToast)(d("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(d("header.screenshotFailed","Failed to capture screenshot"))}catch{w(!1),(0,toast_1.showToast)(d("header.screenshotError","Error capturing screenshot"))}},[r,v,d]),I=(0,react_1.useCallback)(async()=>{if(!m.current)try{if(f){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(h(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("video",e.format),o={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};p(o),r?.().catch(()=>{}),(0,toast_1.showToast)(d("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),h(!0),await capture_1.ScreenCapture.startRecording({fps:a,scale:s,audioSource:S,bitrate:n>0?n:void 0,maxDurationSeconds:i})?(0,toast_1.showToast)(d("header.recordingStarted","Recording started")):(h(!1),(0,toast_1.showToast)(d("header.recordingStartFailed","Failed to start recording")))}catch{(0,toast_1.showToast)(d("header.recordingError","Error during screen recording")),h(!1)}},[f,a,s,n,i,S,r,d]),B=e=>{const t=Math.floor(e/60),o=e%60;return`${t<10?"0":""}${t}:${o<10?"0":""}${o}`};return!T||M==="media"||V==="media"||P?null:<>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,a,s,n){n===void 0&&(n=s);var i=Object.getOwnPropertyDescriptor(a,s);(!i||("get"in i?!a.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return a[s]}}),Object.defineProperty(r,n,i)}):(function(r,a,s,n){n===void 0&&(n=s),r[n]=a[s]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,a){Object.defineProperty(r,"default",{enumerable:!0,value:a})}):function(r,a){r.default=a}),__importStar=this&&this.__importStar||(function(){var r=function(a){return r=Object.getOwnPropertyNames||function(s){var n=[];for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(n[n.length]=i);return n},r(a)};return function(a){if(a&&a.__esModule)return a;var s={};if(a!=null)for(var n=r(a),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(s,a,n[i]);return __setModuleDefault(s,a),s}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FloatingCaptureWidget=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FloatingCaptureWidget=()=>{const{refreshMediaCount:r,captureFps:a,captureScale:s,captureBitrate:n,captureMaxDurationSeconds:i,captureAudioMode:S,captureWidgetEnabled:T,activeTab:M,settingsPage:V,peekMode:k,previewMediaItem:y,setPreviewMediaItem:u,isUpdatePopupVisible:P}=(0,InspectorContext_1.useInspector)(),{t:d}=(0,i18n_1.useTranslation)(),[f,h]=(0,react_1.useState)(!1),[D,w]=(0,react_1.useState)(!1),[F,_]=(0,react_1.useState)(0),l=(0,react_1.useRef)(null),g=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,v=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,c=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,p=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=c.x.addListener(o=>p.current.x=o.value),t=c.y.addListener(o=>p.current.y=o.value);return()=>{c.x.removeListener(e),c.y.removeListener(t)}},[c]);const m=(0,react_1.useRef)(!1),O=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!0,onStartShouldSetPanResponderCapture:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>2||Math.abs(t.dy)>2,onMoveShouldSetPanResponderCapture:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{m.current=!0,c.setOffset({x:p.current.x,y:p.current.y}),c.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:c.x,dy:c.y}],{useNativeDriver:!1}),onPanResponderTerminationRequest:()=>!1,onShouldBlockNativeResponder:()=>!0,onPanResponderRelease:()=>{c.flattenOffset(),setTimeout(()=>{m.current=!1},100);const{width:e,height:t}=react_native_1.Dimensions.get("window"),o=e/2-20,x=-o,R=20,A=-(t-140),b=p.current.x,C=p.current.y;if(b<x||b>o||C<A||C>R){const N=Math.min(Math.max(b,x),o),j=Math.min(Math.max(C,A),R);react_native_1.Animated.spring(c,{toValue:{x:N,y:j},friction:7,tension:50,useNativeDriver:!1}).start()}},onPanResponderTerminate:()=>{c.flattenOffset(),m.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{h(e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>{let e=null;return f?(_(0),l.current=setInterval(()=>{_(t=>t+1)},1e3),e=react_native_1.Animated.loop(react_native_1.Animated.sequence([react_native_1.Animated.timing(g,{toValue:1.15,duration:500,useNativeDriver:!0}),react_native_1.Animated.timing(g,{toValue:1,duration:500,useNativeDriver:!0})])),e.start()):(l.current&&(clearInterval(l.current),l.current=null),_(0),g.setValue(1)),()=>{l.current&&clearInterval(l.current),e&&e.stop()}},[f,g]);const q=(0,react_1.useCallback)(async()=>{if(!m.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light"),w(!0),await new Promise(t=>setTimeout(t,60));const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!1});if(w(!1),react_native_1.Animated.sequence([react_native_1.Animated.timing(v,{toValue:.65,duration:70,useNativeDriver:!0}),react_native_1.Animated.timing(v,{toValue:0,duration:200,useNativeDriver:!0})]).start(),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),o={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};u(o),r?.().catch(()=>{}),(0,toast_1.showToast)(d("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(d("header.screenshotFailed","Failed to capture screenshot"))}catch{w(!1),(0,toast_1.showToast)(d("header.screenshotError","Error capturing screenshot"))}},[r,v,d]),I=(0,react_1.useCallback)(async()=>{if(!m.current)try{if(f){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(h(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("video",e.format),o={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};u(o),r?.().catch(()=>{}),(0,toast_1.showToast)(d("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),h(!0),await capture_1.ScreenCapture.startRecording({fps:a,scale:s,audioSource:S,bitrate:n>0?n:void 0,maxDurationSeconds:i})?(0,toast_1.showToast)(d("header.recordingStarted","Recording started")):(h(!1),(0,toast_1.showToast)(d("header.recordingStartFailed","Failed to start recording")))}catch{(0,toast_1.showToast)(d("header.recordingError","Error during screen recording")),h(!1)}},[f,a,s,n,i,S,r,d]),B=e=>{const t=Math.floor(e/60),o=e%60;return`${t<10?"0":""}${t}:${o<10?"0":""}${o}`};return!T||M==="media"||V==="media"||P?null:<>
2
2
 
3
3
  <react_native_1.Animated.View pointerEvents="none"style={[styles.flashOverlay,{opacity:v}]}/>
4
4
 
@@ -50,5 +50,5 @@
50
50
  </react_native_1.Animated.View>}
51
51
 
52
52
 
53
- <MediaPreviewModal_1.MediaPreviewModal item={y}visible={!!y}onClose={()=>p(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),r?.().catch(()=>{}),p(null)}}onConvertToGif={async e=>{const t=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});if(t){r?.().catch(()=>{});const o=(0,capture_1.generateCaptureId)("anim","gif");p({id:o,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||o,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs})}}}/>
53
+ <MediaPreviewModal_1.MediaPreviewModal item={y}visible={!!y}onClose={()=>u(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),r?.().catch(()=>{}),u(null)}}onConvertToGif={async e=>{const t=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});if(t){r?.().catch(()=>{});const o=(0,capture_1.generateCaptureId)("anim","gif");u({id:o,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||o,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs})}}}onSave={e=>{u(e),r?.().catch(()=>{})}}/>
54
54
  </>};exports.FloatingCaptureWidget=FloatingCaptureWidget;const styles=react_native_1.StyleSheet.create({flashOverlay:{...react_native_1.StyleSheet.absoluteFillObject,backgroundColor:AppColors_1.AppColors.white,zIndex:999999},container:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?22:16,alignSelf:"center",alignItems:"center",justifyContent:"center",zIndex:999999,elevation:999999},dockShadowWrapper:{borderRadius:24,backgroundColor:"#0D1120",...react_native_1.Platform.select({ios:{shadowColor:AppColors_1.AppColors.black,shadowOffset:{width:0,height:6},shadowOpacity:.45,shadowRadius:14},android:{elevation:16}})},dockBar:{flexDirection:"row",alignItems:"center",borderRadius:24,overflow:"hidden"},dragGripArea:{paddingLeft:6,paddingRight:12,paddingVertical:10,alignItems:"center",justifyContent:"center"},dockDivider:{width:1,height:18,backgroundColor:"rgba(255, 255, 255, 0.14)"},menuItemBtn:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:7,paddingVertical:8.5,paddingHorizontal:12},menuItemIconCircle:{width:24,height:24,borderRadius:12,alignItems:"center",justifyContent:"center"},menuItemText:{fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:12,color:AppColors_1.AppColors.white,letterSpacing:.1},recordingShadowWrapper:{borderRadius:22,alignItems:"center",justifyContent:"center",...react_native_1.Platform.select({ios:{shadowColor:"#E11D48",shadowOffset:{width:0,height:4},shadowOpacity:.5,shadowRadius:12},android:{elevation:14}})},recordingPillWrapper:{borderRadius:22,overflow:"hidden"},recordingPill:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:8,height:38,paddingHorizontal:14,borderRadius:22,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.45)"},recordingDot:{width:8,height:8,borderRadius:4,backgroundColor:"#FFFFFF"},recordingText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:12,color:AppColors_1.AppColors.white,letterSpacing:.4},stopIconBadge:{width:18,height:18,borderRadius:9,backgroundColor:"rgba(255, 255, 255, 0.28)",alignItems:"center",justifyContent:"center",marginLeft:3},stopIconSquare:{width:6,height:6,borderRadius:1.5,backgroundColor:AppColors_1.AppColors.white}});exports.default=exports.FloatingCaptureWidget;
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,l,n,s){s===void 0&&(s=n);var i=Object.getOwnPropertyDescriptor(l,n);(!i||("get"in i?!l.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return l[n]}}),Object.defineProperty(r,s,i)}):(function(r,l,n,s){s===void 0&&(s=n),r[s]=l[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,l){Object.defineProperty(r,"default",{enumerable:!0,value:l})}):function(r,l){r.default=l}),__importStar=this&&this.__importStar||(function(){var r=function(l){return r=Object.getOwnPropertyNames||function(n){var s=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(s[s.length]=i);return s},r(l)};return function(l){if(l&&l.__esModule)return l;var n={};if(l!=null)for(var s=r(l),i=0;i<s.length;i++)s[i]!=="default"&&__createBinding(n,l,s[i]);return __setModuleDefault(n,l),n}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),BrandCircleIcon_1=require("../BrandCircleIcon"),styles_1=__importDefault(require("../../styles")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),constants_1=require("../../constants"),constants_2=require("../../constants"),helpers_1=require("../../helpers"),NativeInspector_1=require("../../native/NativeInspector"),capture_1=require("../../capture"),MediaPreviewModal_1=require("./MediaPreviewModal"),LanguageSelectorModal_1=require("./LanguageSelectorModal"),CountryFlag_1=__importDefault(require("../CountryFlag")),NetworkIcons_1=require("../NetworkIcons"),i18n_1=require("../../i18n"),InspectorHeader=react_1.default.memo(()=>{const{t:r,language:l}=(0,i18n_1.useTranslation)(),{modalHeightPercent:n,appIcon:s,selected:i,setSelected:F,selectedEvent:h,setSelectedEvent:E,selectedLog:g,setSelectedLog:N,selectedReduxSlice:b,setSelectedReduxSlice:q,selectedReduxAction:S,setSelectedReduxAction:j,reduxState:U,reduxLastActionMap:G,clearAnim:ae,runClearAllWithAnimation:oe,settingsPage:_,setSettingsPage:z,isAboutOpen:D,setIsAboutOpen:M,resetToDefaults:K,closeModal:B,minimizeInspector:Q,detailTitle:J,activeTab:d,environment:O,selectedCrash:p,setSelectedCrash:X,selectedPush:c,setSelectedPush:Y,selectedSocket:o,setSelectedSocket:Z,refreshMediaCount:C,peekMode:I,setPeekMode:ee,previewMediaItem:L,setPreviewMediaItem:m}=(0,InspectorContext_1.useInspector)(),{width:T}=(0,react_native_1.useWindowDimensions)(),e=T<360,y=T<400,[le,ne]=react_1.default.useState(!1),[te,P]=react_1.default.useState(!1),[re]=react_1.default.useState(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),$=(0,react_1.useMemo)(()=>{const t=l||(0,i18n_1.getLanguage)();return i18n_1.SUPPORTED_LANGUAGES.find(a=>a.code===t)||i18n_1.SUPPORTED_LANGUAGES[0]},[l]),[x,v]=react_1.default.useState(!1),[se,k]=react_1.default.useState(0),w=react_1.default.useRef(null);react_1.default.useEffect(()=>{capture_1.ScreenCapture.isRecording().then(t=>{v(t)}).catch(()=>{})},[]),react_1.default.useEffect(()=>(x?(k(0),w.current=setInterval(()=>{k(t=>t+1)},1e3)):(w.current&&(clearInterval(w.current),w.current=null),k(0)),()=>{w.current&&clearInterval(w.current)}),[x]);const de=react_1.default.useCallback(async()=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const t=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(t){(0,NativeInspector_1.triggerNativeHaptic)("success");const a=(0,capture_1.generateCaptureId)("screenshot",t.format||"png"),f={id:a,type:"image",format:t.format,uri:t.uri,filename:t.uri.split("/").pop()||a,sizeBytes:t.sizeBytes,timestamp:t.timestamp,width:t.width,height:t.height};m(f),C?.().catch(()=>{}),(0,helpers_1.showToast)(r("header.screenshotCaptured"))}else(0,helpers_1.showToast)(r("header.screenshotFailed"))}catch{(0,helpers_1.showToast)(r("header.screenshotError"))}},[C,r]),ce=react_1.default.useCallback(async()=>{try{if(x){(0,NativeInspector_1.triggerNativeHaptic)("medium");const t=await capture_1.ScreenCapture.stopRecording();if(v(!1),t){(0,NativeInspector_1.triggerNativeHaptic)("success");const a=(0,capture_1.generateCaptureId)("video",t.format),f={id:a,type:t.format==="gif"?"gif":"video",format:t.format,uri:t.uri,filename:t.uri.split("/").pop()||a,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs,width:t.width,height:t.height,hasAudio:t.hasAudio};m(f),C?.().catch(()=>{}),(0,helpers_1.showToast)(r("header.recordingSaved",{duration:(t.durationMs/1e3).toFixed(1)}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(v(!0),(0,helpers_1.showToast)(r("header.recordingStarted"))):(0,helpers_1.showToast)(r("header.recordingStartFailed"))}catch{(0,helpers_1.showToast)(r("header.recordingError")),v(!1)}},[x,r]),pe=t=>{const a=Math.floor(t/60),f=t%60;return`${a.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`},ue=(0,react_1.useMemo)(()=>{const t=(O||(__DEV__?"DEV":"PROD")).trim(),a=t.toUpperCase();return a==="DEV"||a.includes("DEV")||a==="LOCAL"?{label:t,bg:`${AppColors_1.AppColors.emerald500}40`,border:`${AppColors_1.AppColors.emerald400}8C`,text:AppColors_1.AppColors.mintGreenBorder}:a==="UAT"||a==="QA"||a==="TEST"?{label:t,bg:`${AppColors_1.AppColors.amber500}47`,border:`${AppColors_1.AppColors.amber400}99`,text:AppColors_1.AppColors.amberWarmBorder}:a==="PREPROD"||a==="STAGE"||a==="STAGING"?{label:t,bg:`${AppColors_1.AppColors.purple500}47`,border:`${AppColors_1.AppColors.purple400}99`,text:AppColors_1.AppColors.violetSoftBorder}:{label:t,bg:`${AppColors_1.AppColors.rose500}40`,border:`${AppColors_1.AppColors.roseBorder}8C`,text:AppColors_1.AppColors.errorBorder}},[O]),V=d==="apis"&&i!=null||d==="analytics"&&h!=null||d==="logs"&&g!=null||d==="redux"&&(b!=null||S!=null)||d==="crash"&&p!=null||d==="push"&&c!=null||d==="socket"&&o!=null,A=_!==null,R=V||A||D,ie=(0,react_1.useMemo)(()=>{switch(_){case"apis":return"APIs (Network)";case"logs":return"Console Logs";case"crash":return"Crash Protection";case"analytics":return"Analytics Logger";case"redux":return"Redux Inspector";case"media":return"Screencast (Media)";case"push":return"Push Notifications";default:return"Settings & Modules"}},[_]),H=(0,react_1.useMemo)(()=>react_native_1.Platform.OS==="ios"?n>=98?T>=390?50:44:0:react_native_1.Platform.OS==="android"&&n>=98?react_native_1.StatusBar.currentHeight||24:0,[n,T]),u=e?24:y?25.5:26,he=e?36:y?38:40;return<>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,l,n,s){s===void 0&&(s=n);var i=Object.getOwnPropertyDescriptor(l,n);(!i||("get"in i?!l.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return l[n]}}),Object.defineProperty(r,s,i)}):(function(r,l,n,s){s===void 0&&(s=n),r[s]=l[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,l){Object.defineProperty(r,"default",{enumerable:!0,value:l})}):function(r,l){r.default=l}),__importStar=this&&this.__importStar||(function(){var r=function(l){return r=Object.getOwnPropertyNames||function(n){var s=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(s[s.length]=i);return s},r(l)};return function(l){if(l&&l.__esModule)return l;var n={};if(l!=null)for(var s=r(l),i=0;i<s.length;i++)s[i]!=="default"&&__createBinding(n,l,s[i]);return __setModuleDefault(n,l),n}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),BrandCircleIcon_1=require("../BrandCircleIcon"),styles_1=__importDefault(require("../../styles")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),constants_1=require("../../constants"),constants_2=require("../../constants"),helpers_1=require("../../helpers"),NativeInspector_1=require("../../native/NativeInspector"),capture_1=require("../../capture"),MediaPreviewModal_1=require("./MediaPreviewModal"),LanguageSelectorModal_1=require("./LanguageSelectorModal"),CountryFlag_1=__importDefault(require("../CountryFlag")),NetworkIcons_1=require("../NetworkIcons"),i18n_1=require("../../i18n"),InspectorHeader=react_1.default.memo(()=>{const{t:r,language:l}=(0,i18n_1.useTranslation)(),{modalHeightPercent:n,appIcon:s,selected:i,setSelected:F,selectedEvent:h,setSelectedEvent:E,selectedLog:g,setSelectedLog:N,selectedReduxSlice:m,setSelectedReduxSlice:q,selectedReduxAction:y,setSelectedReduxAction:j,reduxState:U,reduxLastActionMap:G,clearAnim:ae,runClearAllWithAnimation:oe,settingsPage:_,setSettingsPage:z,isAboutOpen:D,setIsAboutOpen:M,resetToDefaults:K,closeModal:B,minimizeInspector:Q,detailTitle:J,activeTab:d,environment:O,selectedCrash:p,setSelectedCrash:X,selectedPush:c,setSelectedPush:Y,selectedSocket:o,setSelectedSocket:Z,refreshMediaCount:w,peekMode:I,setPeekMode:ee,previewMediaItem:L,setPreviewMediaItem:b}=(0,InspectorContext_1.useInspector)(),{width:T}=(0,react_native_1.useWindowDimensions)(),e=T<360,S=T<400,[le,ne]=react_1.default.useState(!1),[te,P]=react_1.default.useState(!1),[re]=react_1.default.useState(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),$=(0,react_1.useMemo)(()=>{const t=l||(0,i18n_1.getLanguage)();return i18n_1.SUPPORTED_LANGUAGES.find(a=>a.code===t)||i18n_1.SUPPORTED_LANGUAGES[0]},[l]),[x,v]=react_1.default.useState(!1),[se,k]=react_1.default.useState(0),C=react_1.default.useRef(null);react_1.default.useEffect(()=>{capture_1.ScreenCapture.isRecording().then(t=>{v(t)}).catch(()=>{})},[]),react_1.default.useEffect(()=>(x?(k(0),C.current=setInterval(()=>{k(t=>t+1)},1e3)):(C.current&&(clearInterval(C.current),C.current=null),k(0)),()=>{C.current&&clearInterval(C.current)}),[x]);const de=react_1.default.useCallback(async()=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const t=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(t){(0,NativeInspector_1.triggerNativeHaptic)("success");const a=(0,capture_1.generateCaptureId)("screenshot",t.format||"png"),f={id:a,type:"image",format:t.format,uri:t.uri,filename:t.uri.split("/").pop()||a,sizeBytes:t.sizeBytes,timestamp:t.timestamp,width:t.width,height:t.height};b(f),w?.().catch(()=>{}),(0,helpers_1.showToast)(r("header.screenshotCaptured"))}else(0,helpers_1.showToast)(r("header.screenshotFailed"))}catch{(0,helpers_1.showToast)(r("header.screenshotError"))}},[w,r]),ce=react_1.default.useCallback(async()=>{try{if(x){(0,NativeInspector_1.triggerNativeHaptic)("medium");const t=await capture_1.ScreenCapture.stopRecording();if(v(!1),t){(0,NativeInspector_1.triggerNativeHaptic)("success");const a=(0,capture_1.generateCaptureId)("video",t.format),f={id:a,type:t.format==="gif"?"gif":"video",format:t.format,uri:t.uri,filename:t.uri.split("/").pop()||a,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs,width:t.width,height:t.height,hasAudio:t.hasAudio};b(f),w?.().catch(()=>{}),(0,helpers_1.showToast)(r("header.recordingSaved",{duration:(t.durationMs/1e3).toFixed(1)}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(v(!0),(0,helpers_1.showToast)(r("header.recordingStarted"))):(0,helpers_1.showToast)(r("header.recordingStartFailed"))}catch{(0,helpers_1.showToast)(r("header.recordingError")),v(!1)}},[x,r]),pe=t=>{const a=Math.floor(t/60),f=t%60;return`${a.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`},ue=(0,react_1.useMemo)(()=>{const t=(O||(__DEV__?"DEV":"PROD")).trim(),a=t.toUpperCase();return a==="DEV"||a.includes("DEV")||a==="LOCAL"?{label:t,bg:`${AppColors_1.AppColors.emerald500}40`,border:`${AppColors_1.AppColors.emerald400}8C`,text:AppColors_1.AppColors.mintGreenBorder}:a==="UAT"||a==="QA"||a==="TEST"?{label:t,bg:`${AppColors_1.AppColors.amber500}47`,border:`${AppColors_1.AppColors.amber400}99`,text:AppColors_1.AppColors.amberWarmBorder}:a==="PREPROD"||a==="STAGE"||a==="STAGING"?{label:t,bg:`${AppColors_1.AppColors.purple500}47`,border:`${AppColors_1.AppColors.purple400}99`,text:AppColors_1.AppColors.violetSoftBorder}:{label:t,bg:`${AppColors_1.AppColors.rose500}40`,border:`${AppColors_1.AppColors.roseBorder}8C`,text:AppColors_1.AppColors.errorBorder}},[O]),V=d==="apis"&&i!=null||d==="analytics"&&h!=null||d==="logs"&&g!=null||d==="redux"&&(m!=null||y!=null)||d==="crash"&&p!=null||d==="push"&&c!=null||d==="socket"&&o!=null,A=_!==null,R=V||A||D,ie=(0,react_1.useMemo)(()=>{switch(_){case"apis":return"APIs (Network)";case"logs":return"Console Logs";case"crash":return"Crash Protection";case"analytics":return"Analytics Logger";case"redux":return"Redux Inspector";case"media":return"Screencast (Media)";case"push":return"Push Notifications";default:return"Settings & Modules"}},[_]),H=(0,react_1.useMemo)(()=>react_native_1.Platform.OS==="ios"?n>=98?T>=390?50:44:0:react_native_1.Platform.OS==="android"&&n>=98?react_native_1.StatusBar.currentHeight||24:0,[n,T]),u=e?24:S?25.5:26,he=e?36:S?38:40;return<>
2
2
  <react_native_1.View style={[styles_1.default.headerGradient,{minHeight:(e?44:48)+H}]}>
3
3
 
4
4
  <react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.indigo600,AppColors_1.AppColors.violet600]}start={{x:0,y:0}}end={{x:1,y:1}}style={{position:"absolute",top:0,left:0,right:0,bottom:0,borderTopLeftRadius:20,borderTopRightRadius:20}}pointerEvents="none"/>
@@ -22,7 +22,7 @@
22
22
  </react_native_1.View>
23
23
  </react_native_1.View>
24
24
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:e?10:11,lineHeight:e?13.5:14.5,color:`${AppColors_1.AppColors.white}CC`,marginTop:.5}}numberOfLines={1}ellipsizeMode="tail">
25
- Package info, runtime specs & diagnostic payload
25
+ {r("common.aboutSpecsSubtitle","Package info, runtime specs & diagnostic payload")}
26
26
  </react_native_1.Text>
27
27
  </react_native_1.View>:A?<react_native_1.View style={{gap:2.5,flex:1,minWidth:0,marginRight:6,justifyContent:"center"}}>
28
28
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
@@ -39,10 +39,10 @@
39
39
  {_==="main"?"Manage modules and preferences":"Configure module parameters"}
40
40
  </react_native_1.Text>
41
41
  </react_native_1.View>:R?null:<react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:e?7:8.5,flex:1,minWidth:0,marginRight:6}}>
42
- <BrandCircleIcon_1.BrandCircleIcon size={e?38:y?40:42}/>
42
+ <BrandCircleIcon_1.BrandCircleIcon size={e?38:S?40:42}/>
43
43
  <react_native_1.View style={{gap:3,flex:1,minWidth:0,justifyContent:"center"}}>
44
44
 
45
- <react_native_1.Text style={[styles_1.default.headerTitle,{fontFamily:AppFonts_1.AppFonts.interBold,fontWeight:"700",fontSize:e?12.5:y?13:14,lineHeight:e?17:y?18:19,color:AppColors_1.AppColors.white,letterSpacing:-.2,paddingBottom:0}]}numberOfLines={1}ellipsizeMode="tail">
45
+ <react_native_1.Text style={[styles_1.default.headerTitle,{fontFamily:AppFonts_1.AppFonts.interBold,fontWeight:"700",fontSize:e?12.5:S?13:14,lineHeight:e?17:S?18:19,color:AppColors_1.AppColors.white,letterSpacing:-.2,paddingBottom:0}]}numberOfLines={1}ellipsizeMode="tail">
46
46
  react-native-inapp-inspector
47
47
  </react_native_1.Text>
48
48
 
@@ -151,7 +151,7 @@
151
151
  </react_native_1.Text>
152
152
  </react_native_1.View>
153
153
  </react_native_1.View>
154
- </react_native_1.View>:d==="redux"&&b!=null?(()=>{const t=U?.[b],a=t&&typeof t=="object"?Object.keys(t).length:typeof t<"u"?1:0,f=(0,helpers_1.getSize)(t),W=G[b];return<react_native_1.View style={styles_1.default.headerDetailCenter}>
154
+ </react_native_1.View>:d==="redux"&&m!=null?(()=>{const t=U?.[m],a=t&&typeof t=="object"?Object.keys(t).length:typeof t<"u"?1:0,f=(0,helpers_1.getSize)(t),W=G[m];return<react_native_1.View style={styles_1.default.headerDetailCenter}>
155
155
  <react_native_1.View style={styles_1.default.headerDetailRow}>
156
156
  <react_native_1.View style={[styles_1.default.headerMethodBadge,{backgroundColor:`${AppColors_1.AppColors.purple}4D`,paddingHorizontal:e?5:6,paddingVertical:e?2:3,flexShrink:0}]}>
157
157
  <react_native_1.Text style={[styles_1.default.headerMethodText,{fontSize:e?9:10}]}>
@@ -159,7 +159,7 @@
159
159
  </react_native_1.Text>
160
160
  </react_native_1.View>
161
161
  <react_native_1.Text style={[styles_1.default.headerDetailTitle,{fontSize:e?13:14.5,flex:1,minWidth:0,flexShrink:1}]}numberOfLines={1}ellipsizeMode="middle">
162
- {b}
162
+ {m}
163
163
  </react_native_1.Text>
164
164
  </react_native_1.View>
165
165
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
@@ -191,7 +191,7 @@
191
191
  </react_native_1.View>
192
192
  </>}
193
193
  </react_native_1.View>
194
- </react_native_1.View>})():d==="redux"&&S!=null?<react_native_1.View style={styles_1.default.headerDetailCenter}>
194
+ </react_native_1.View>})():d==="redux"&&y!=null?<react_native_1.View style={styles_1.default.headerDetailCenter}>
195
195
  <react_native_1.View style={styles_1.default.headerDetailRow}>
196
196
  <react_native_1.View style={[styles_1.default.headerMethodBadge,{backgroundColor:`${AppColors_1.AppColors.brandPurple}4D`,paddingHorizontal:e?5:6,paddingVertical:e?2:3,flexShrink:0}]}>
197
197
  <react_native_1.Text style={[styles_1.default.headerMethodText,{fontSize:e?9:10}]}>
@@ -199,13 +199,13 @@
199
199
  </react_native_1.Text>
200
200
  </react_native_1.View>
201
201
  <react_native_1.Text style={[styles_1.default.headerDetailTitle,{fontSize:e?13:14.5,flex:1,minWidth:0,flexShrink:1}]}numberOfLines={1}ellipsizeMode="middle">
202
- {S.type}
202
+ {y.type}
203
203
  </react_native_1.Text>
204
204
  </react_native_1.View>
205
205
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
206
206
  <react_native_1.View style={[styles_1.default.headerStatusDot,{backgroundColor:AppColors_1.AppColors.purple,width:e?6:7,height:e?6:7}]}/>
207
207
  <react_native_1.Text style={[styles_1.default.headerSubTitle,{fontSize:e?10:11}]}>
208
- {S.timestamp||"Dispatched"}
208
+ {y.timestamp||"Dispatched"}
209
209
  </react_native_1.Text>
210
210
  </react_native_1.View>
211
211
  </react_native_1.View>:d==="crash"&&p!=null?<react_native_1.View style={styles_1.default.headerDetailCenter}>
@@ -334,5 +334,5 @@
334
334
  <LanguageSelectorModal_1.LanguageSelectorModal visible={te}onClose={()=>P(!1)}/>
335
335
 
336
336
 
337
- <MediaPreviewModal_1.MediaPreviewModal item={L}visible={!!L}onClose={()=>m(null)}onDelete={async t=>{await capture_1.ScreenCapture.deleteMedia(t.uri),C?.().catch(()=>{}),m(null)}}onConvertToGif={async t=>{const a=await capture_1.ScreenCapture.convertToGif(t.uri,{fps:12,width:480});if(a){C?.().catch(()=>{});const f=(0,capture_1.generateCaptureId)("anim","gif");m({id:f,type:"gif",format:"gif",uri:a.uri,filename:a.uri.split("/").pop()||f,sizeBytes:a.sizeBytes,timestamp:a.timestamp,durationMs:a.durationMs})}}}/>
337
+ <MediaPreviewModal_1.MediaPreviewModal item={L}visible={!!L}onClose={()=>b(null)}onDelete={async t=>{await capture_1.ScreenCapture.deleteMedia(t.uri),w?.().catch(()=>{}),b(null)}}onConvertToGif={async t=>{const a=await capture_1.ScreenCapture.convertToGif(t.uri,{fps:12,width:480});if(a){w?.().catch(()=>{});const f=(0,capture_1.generateCaptureId)("anim","gif");b({id:f,type:"gif",format:"gif",uri:a.uri,filename:a.uri.split("/").pop()||f,sizeBytes:a.sizeBytes,timestamp:a.timestamp,durationMs:a.durationMs})}}}onSave={t=>{b(t),w?.().catch(()=>{})}}/>
338
338
  </>});exports.default=InspectorHeader;
@@ -1,5 +1,5 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(o,i,n,l){l===void 0&&(l=n);var a=Object.getOwnPropertyDescriptor(i,n);(!a||("get"in a?!i.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return i[n]}}),Object.defineProperty(o,l,a)}):(function(o,i,n,l){l===void 0&&(l=n),o[l]=i[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(o,i){Object.defineProperty(o,"default",{enumerable:!0,value:i})}):function(o,i){o.default=i}),__importStar=this&&this.__importStar||(function(){var o=function(i){return o=Object.getOwnPropertyNames||function(n){var l=[];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(l[l.length]=a);return l},o(i)};return function(i){if(i&&i.__esModule)return i;var n={};if(i!=null)for(var l=o(i),a=0;a<l.length;a++)l[a]!=="default"&&__createBinding(n,i,l[a]);return __setModuleDefault(n,i),n}})(),__importDefault=this&&this.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MediaGalleryTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),TouchableScale_1=__importDefault(require("../TouchableScale")),NetworkIcons_1=require("../NetworkIcons"),MediaPreviewModal_1=require("./MediaPreviewModal"),capture_1=require("../../capture"),helpers_1=require("../../helpers"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),i18n_1=require("../../i18n"),InspectorContext_1=require("./InspectorContext"),ConfirmationModal_1=require("./ConfirmationModal"),MediaGalleryTab=()=>{const{t:o}=(0,i18n_1.useTranslation)(),{refreshMediaCount:i,switchActiveTab:n,previewMediaItem:l,setPreviewMediaItem:a}=(0,InspectorContext_1.useInspector)(),[s,I]=(0,react_1.useState)([]),[W,z]=(0,react_1.useState)(!1),[d,$]=(0,react_1.useState)("all"),[p,w]=(0,react_1.useState)(new Set),[h,R]=(0,react_1.useState)("grid"),[g,_]=(0,react_1.useState)(!1),[F,v]=(0,react_1.useState)(0),C=react_1.default.useRef(null),[f,b]=(0,react_1.useState)({visible:!1,title:"",message:"",onConfirm:()=>{}}),c=(0,react_1.useCallback)(async()=>{try{const e=await capture_1.ScreenCapture.getMediaList();I(e),i?.().catch(()=>{})}catch{I([])}},[i]);(0,react_1.useEffect)(()=>{c()},[c]),(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>_(e)).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(g?(v(0),C.current=setInterval(()=>{v(e=>e+1)},1e3)):(C.current&&(clearInterval(C.current),C.current=null),v(0)),()=>{C.current&&clearInterval(C.current)}),[g]);const G=async()=>{z(!0),await c(),z(!1)},m=(0,react_1.useMemo)(()=>{let e=0,t=0,r=0;return s.forEach(u=>{u.type==="image"?e++:u.type==="video"?t++:u.type==="gif"&&r++}),{all:s.length,image:e,video:t,gif:r}},[s]),x=(0,react_1.useMemo)(()=>d==="all"?s:s.filter(e=>e.type===d),[s,d]),A=(0,react_1.useMemo)(()=>s.reduce((e,t)=>e+(t.sizeBytes||0),0),[s]),M=(0,react_1.useCallback)(async()=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),r={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};a(r),await c(),i?.().catch(()=>{}),(0,toast_1.showToast)(o("header.screenshotCaptured","Screenshot captured & saved"))}else(0,toast_1.showToast)(o("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(o("header.screenshotError","Error capturing screenshot"))}},[c,i,a,o]),S=(0,react_1.useCallback)(async()=>{try{if(g){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(_(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("video",e.format),r={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio};a(r),await c(),i?.().catch(()=>{}),(0,toast_1.showToast)(o("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(_(!0),(0,toast_1.showToast)(o("header.recordingStarted","Screen recording started"))):(0,toast_1.showToast)(o("header.recordingStartFailed","Failed to start screen recording"))}catch{(0,toast_1.showToast)(o("header.recordingError","Screen recording error")),_(!1)}},[g,c,i,a,o]),P=async()=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=d==="image"?"image":d==="video"?"video":"any",t=await capture_1.ScreenCapture.pickMedia({mediaType:e});t&&((0,NativeInspector_1.triggerNativeHaptic)("success"),await c(),i?.().catch(()=>{}),(0,toast_1.showToast)(t.type==="video"?o("mediaGallery.importedVideo","Video imported from Camera Roll"):o("mediaGallery.importedPhoto","Photo imported from Camera Roll")),a(t))}catch{(0,toast_1.showToast)(o("mediaGallery.importFailed","Failed to import media"))}},D=(0,react_1.useCallback)(e=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),w(t=>{const r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),O=async e=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.deleteMedia(e.uri),w(t=>{const r=new Set(t);return r.delete(e.id),r}),await c(),await i?.(),(0,toast_1.showToast)(o("mediaGallery.deleted","Media deleted"))},H=e=>{e?.uri&&((0,NativeInspector_1.triggerNativeHaptic)("light"),(0,helpers_1.copyImageOrMediaToClipboard)(e.uri,e.type==="image"?"Image":"Media"))},q=()=>{const e=s.filter(r=>p.has(r.id));if(e.length===0)return;(0,NativeInspector_1.triggerNativeHaptic)("light");const t=e.map(r=>r.uri).join(`
2
- `);(0,helpers_1.copyToClipboard)(t,`${e.length} Media URIs`),(0,toast_1.showToast)(`${e.length} file URIs copied to clipboard`)},N=async e=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const t=e.uri.startsWith("file://")||e.uri.startsWith("content://")||e.uri.startsWith("http")?e.uri:`file://${e.uri}`;await react_native_1.Share.share({url:t,title:e.filename,message:e.filename})}catch{(0,toast_1.showToast)(o("mediaGallery.shareUnavailable","Sharing not available on this device"))}},j=async()=>{const e=s.filter(t=>p.has(t.id));if(e.length!==0)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const t=e[0],r=t.uri.startsWith("file://")||t.uri.startsWith("content://")||t.uri.startsWith("http")?t.uri:`file://${t.uri}`;await react_native_1.Share.share({url:r,title:t.filename,message:e.length===1?t.filename:`${e.length} items: ${e.map(u=>u.filename).join(", ")}`})}catch{(0,toast_1.showToast)(o("mediaGallery.shareUnavailable","Sharing not available on this device"))}},L=()=>{const e=p.size;e!==0&&b({visible:!0,title:o("mediaGallery.deleteSelectedTitle","Delete Selected Media"),message:o("mediaGallery.deleteSelectedMessage",{count:e,defaultValue:`Are you sure you want to permanently delete ${e} media items?`}),confirmText:o("mediaGallery.delete","Delete"),cancelText:o("common.cancel","Cancel"),onConfirm:async()=>{b(r=>({...r,visible:!1}));const t=s.filter(r=>p.has(r.id));for(const r of t)await capture_1.ScreenCapture.deleteMedia(r.uri);w(new Set),await c(),await i?.(),(0,toast_1.showToast)(o("mediaGallery.deletedCount",{count:t.length,defaultValue:`Deleted ${t.length} items`}))}})},U=()=>{b({visible:!0,title:o("mediaGallery.purgeTitle","Purge Gallery"),message:o("mediaGallery.purgeMessage",{count:s.length,size:(0,helpers_1.formatBytes)(A),defaultValue:`Are you sure you want to delete all ${s.length} media files (${(0,helpers_1.formatBytes)(A)})? This cannot be undone.`}),confirmText:o("common.clearAll","Clear All"),cancelText:o("common.cancel","Cancel"),onConfirm:async()=>{b(e=>({...e,visible:!1})),await capture_1.ScreenCapture.clearAllMedia(),w(new Set),await c(),await i?.(),(0,toast_1.showToast)(o("mediaGallery.allPurged","All screencast files deleted"))}})},E=async e=>{await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480})&&(await c(),i?.().catch(()=>{}))},B=e=>{const t=Math.floor(e/60),r=e%60;return`${t.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`},Y=({item:e})=>{if(!e)return null;const t=e.type==="video",r=e.type==="gif",u=t&&e.thumbnailUri||e.uri,y=!!(e.id&&p.has(e.id)),k=(e.format||(t?"mp4":r?"gif":"png")).toUpperCase(),V=e.filename||(e.uri?e.uri.split("/").pop():"")||"Capture",T=e.timestamp?new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"";return<TouchableScale_1.default onPress={()=>a(e)}style={[galleryStyles.card,y&&galleryStyles.cardSelected]}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(o,a,n,l){l===void 0&&(l=n);var i=Object.getOwnPropertyDescriptor(a,n);(!i||("get"in i?!a.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return a[n]}}),Object.defineProperty(o,l,i)}):(function(o,a,n,l){l===void 0&&(l=n),o[l]=a[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(o,a){Object.defineProperty(o,"default",{enumerable:!0,value:a})}):function(o,a){o.default=a}),__importStar=this&&this.__importStar||(function(){var o=function(a){return o=Object.getOwnPropertyNames||function(n){var l=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(l[l.length]=i);return l},o(a)};return function(a){if(a&&a.__esModule)return a;var n={};if(a!=null)for(var l=o(a),i=0;i<l.length;i++)l[i]!=="default"&&__createBinding(n,a,l[i]);return __setModuleDefault(n,a),n}})(),__importDefault=this&&this.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MediaGalleryTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),TouchableScale_1=__importDefault(require("../TouchableScale")),NetworkIcons_1=require("../NetworkIcons"),MediaPreviewModal_1=require("./MediaPreviewModal"),capture_1=require("../../capture"),helpers_1=require("../../helpers"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),i18n_1=require("../../i18n"),InspectorContext_1=require("./InspectorContext"),ConfirmationModal_1=require("./ConfirmationModal"),MediaGalleryTab=()=>{const{t:o}=(0,i18n_1.useTranslation)(),{refreshMediaCount:a,switchActiveTab:n,previewMediaItem:l,setPreviewMediaItem:i}=(0,InspectorContext_1.useInspector)(),[s,I]=(0,react_1.useState)([]),[W,z]=(0,react_1.useState)(!1),[d,$]=(0,react_1.useState)("all"),[p,w]=(0,react_1.useState)(new Set),[h,R]=(0,react_1.useState)("grid"),[g,_]=(0,react_1.useState)(!1),[F,x]=(0,react_1.useState)(0),C=react_1.default.useRef(null),[f,b]=(0,react_1.useState)({visible:!1,title:"",message:"",onConfirm:()=>{}}),c=(0,react_1.useCallback)(async()=>{try{const e=await capture_1.ScreenCapture.getMediaList();I(e),a?.().catch(()=>{})}catch{I([])}},[a]);(0,react_1.useEffect)(()=>{c()},[c]),(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>_(e)).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(g?(x(0),C.current=setInterval(()=>{x(e=>e+1)},1e3)):(C.current&&(clearInterval(C.current),C.current=null),x(0)),()=>{C.current&&clearInterval(C.current)}),[g]);const G=async()=>{z(!0),await c(),z(!1)},m=(0,react_1.useMemo)(()=>{let e=0,t=0,r=0;return s.forEach(u=>{u.type==="image"?e++:u.type==="video"?t++:u.type==="gif"&&r++}),{all:s.length,image:e,video:t,gif:r}},[s]),v=(0,react_1.useMemo)(()=>d==="all"?s:s.filter(e=>e.type===d),[s,d]),A=(0,react_1.useMemo)(()=>s.reduce((e,t)=>e+(t.sizeBytes||0),0),[s]),M=(0,react_1.useCallback)(async()=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),r={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};i(r),await c(),a?.().catch(()=>{}),(0,toast_1.showToast)(o("header.screenshotCaptured","Screenshot captured & saved"))}else(0,toast_1.showToast)(o("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(o("header.screenshotError","Error capturing screenshot"))}},[c,a,i,o]),S=(0,react_1.useCallback)(async()=>{try{if(g){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(_(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t=(0,capture_1.generateCaptureId)("video",e.format),r={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio};i(r),await c(),a?.().catch(()=>{}),(0,toast_1.showToast)(o("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(_(!0),(0,toast_1.showToast)(o("header.recordingStarted","Screen recording started"))):(0,toast_1.showToast)(o("header.recordingStartFailed","Failed to start screen recording"))}catch{(0,toast_1.showToast)(o("header.recordingError","Screen recording error")),_(!1)}},[g,c,a,i,o]),P=async()=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=d==="image"?"image":d==="video"?"video":"any",t=await capture_1.ScreenCapture.pickMedia({mediaType:e});t&&((0,NativeInspector_1.triggerNativeHaptic)("success"),await c(),a?.().catch(()=>{}),(0,toast_1.showToast)(t.type==="video"?o("mediaGallery.importedVideo","Video imported from Camera Roll"):o("mediaGallery.importedPhoto","Photo imported from Camera Roll")),i(t))}catch{(0,toast_1.showToast)(o("mediaGallery.importFailed","Failed to import media"))}},D=(0,react_1.useCallback)(e=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),w(t=>{const r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),O=async e=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.deleteMedia(e.uri),w(t=>{const r=new Set(t);return r.delete(e.id),r}),await c(),await a?.(),(0,toast_1.showToast)(o("mediaGallery.deleted","Media deleted"))},H=e=>{e?.uri&&((0,NativeInspector_1.triggerNativeHaptic)("light"),(0,helpers_1.copyImageOrMediaToClipboard)(e.uri,e.type==="image"?"Image":"Media"))},q=()=>{const e=s.filter(r=>p.has(r.id));if(e.length===0)return;(0,NativeInspector_1.triggerNativeHaptic)("light");const t=e.map(r=>r.uri).join(`
2
+ `);(0,helpers_1.copyToClipboard)(t,`${e.length} Media URIs`),(0,toast_1.showToast)(`${e.length} file URIs copied to clipboard`)},N=async e=>{try{(0,NativeInspector_1.triggerNativeHaptic)("light");const t=e.uri.startsWith("file://")||e.uri.startsWith("content://")||e.uri.startsWith("http")?e.uri:`file://${e.uri}`;await react_native_1.Share.share({url:t,title:e.filename,message:e.filename})}catch{(0,toast_1.showToast)(o("mediaGallery.shareUnavailable","Sharing not available on this device"))}},j=async()=>{const e=s.filter(t=>p.has(t.id));if(e.length!==0)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const t=e[0],r=t.uri.startsWith("file://")||t.uri.startsWith("content://")||t.uri.startsWith("http")?t.uri:`file://${t.uri}`;await react_native_1.Share.share({url:r,title:t.filename,message:e.length===1?t.filename:`${e.length} items: ${e.map(u=>u.filename).join(", ")}`})}catch{(0,toast_1.showToast)(o("mediaGallery.shareUnavailable","Sharing not available on this device"))}},L=()=>{const e=p.size;e!==0&&b({visible:!0,title:o("mediaGallery.deleteSelectedTitle","Delete Selected Media"),message:o("mediaGallery.deleteSelectedMessage",{count:e,defaultValue:`Are you sure you want to permanently delete ${e} media items?`}),confirmText:o("mediaGallery.delete","Delete"),cancelText:o("common.cancel","Cancel"),onConfirm:async()=>{b(r=>({...r,visible:!1}));const t=s.filter(r=>p.has(r.id));for(const r of t)await capture_1.ScreenCapture.deleteMedia(r.uri);w(new Set),await c(),await a?.(),(0,toast_1.showToast)(o("mediaGallery.deletedCount",{count:t.length,defaultValue:`Deleted ${t.length} items`}))}})},U=()=>{b({visible:!0,title:o("mediaGallery.purgeTitle","Purge Gallery"),message:o("mediaGallery.purgeMessage",{count:s.length,size:(0,helpers_1.formatBytes)(A),defaultValue:`Are you sure you want to delete all ${s.length} media files (${(0,helpers_1.formatBytes)(A)})? This cannot be undone.`}),confirmText:o("common.clearAll","Clear All"),cancelText:o("common.cancel","Cancel"),onConfirm:async()=>{b(e=>({...e,visible:!1})),await capture_1.ScreenCapture.clearAllMedia(),w(new Set),await c(),await a?.(),(0,toast_1.showToast)(o("mediaGallery.allPurged","All screencast files deleted"))}})},E=async e=>{await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480})&&(await c(),a?.().catch(()=>{}))},B=e=>{const t=Math.floor(e/60),r=e%60;return`${t.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`},Y=({item:e})=>{if(!e)return null;const t=e.type==="video",r=e.type==="gif",u=t&&e.thumbnailUri||e.uri,y=!!(e.id&&p.has(e.id)),k=(e.format||(t?"mp4":r?"gif":"png")).toUpperCase(),V=e.filename||(e.uri?e.uri.split("/").pop():"")||"Capture",T=e.timestamp?new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"";return<TouchableScale_1.default onPress={()=>i(e)}style={[galleryStyles.card,y&&galleryStyles.cardSelected]}>
3
3
  <react_native_1.View style={galleryStyles.thumbnailContainer}>
4
4
  {u?<react_native_1.Image source={{uri:u}}style={galleryStyles.thumbnail}resizeMode="cover"/>:<react_native_1.View style={galleryStyles.thumbnailFallback}>
5
5
  {t?<NetworkIcons_1.FilmIcon size={28}color={AppColors_1.AppColors.sky500}/>:<NetworkIcons_1.ImageIcon size={28}color={AppColors_1.AppColors.grayTextWeak}/>}
@@ -51,7 +51,7 @@
51
51
  </react_native_1.TouchableOpacity>
52
52
  </react_native_1.View>
53
53
  </react_native_1.View>
54
- </TouchableScale_1.default>},K=({item:e})=>{if(!e)return null;const t=e.type==="video",r=e.type==="gif",u=t&&e.thumbnailUri||e.uri,y=!!(e.id&&p.has(e.id)),k=(e.format||(t?"mp4":r?"gif":"png")).toUpperCase(),V=e.filename||(e.uri?e.uri.split("/").pop():"")||"Capture",T=e.timestamp?`${new Date(e.timestamp).toLocaleDateString([],{month:"short",day:"numeric"})} ${new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}`:"";return<TouchableScale_1.default onPress={()=>a(e)}style={[galleryStyles.listRow,y&&galleryStyles.listRowSelected]}>
54
+ </TouchableScale_1.default>},K=({item:e})=>{if(!e)return null;const t=e.type==="video",r=e.type==="gif",u=t&&e.thumbnailUri||e.uri,y=!!(e.id&&p.has(e.id)),k=(e.format||(t?"mp4":r?"gif":"png")).toUpperCase(),V=e.filename||(e.uri?e.uri.split("/").pop():"")||"Capture",T=e.timestamp?`${new Date(e.timestamp).toLocaleDateString([],{month:"short",day:"numeric"})} ${new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}`:"";return<TouchableScale_1.default onPress={()=>i(e)}style={[galleryStyles.listRow,y&&galleryStyles.listRowSelected]}>
55
55
 
56
56
  <react_native_1.TouchableOpacity onPress={()=>e.id&&D(e.id)}style={[galleryStyles.listCheckbox,y&&galleryStyles.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
57
57
  {y&&<NetworkIcons_1.CheckIcon size={11}color={AppColors_1.AppColors.white}/>}
@@ -137,7 +137,7 @@
137
137
  </react_native_1.Text>
138
138
  <react_native_1.TouchableOpacity onPress={S}style={galleryStyles.stopRecordBtn}activeOpacity={.8}>
139
139
  <react_native_1.View style={galleryStyles.stopSquare}/>
140
- <react_native_1.Text style={galleryStyles.stopRecordBtnText}>Stop & Save</react_native_1.Text>
140
+ <react_native_1.Text style={galleryStyles.stopRecordBtnText}>{o("media.stopAndSave","Stop & Save")}</react_native_1.Text>
141
141
  </react_native_1.TouchableOpacity>
142
142
  </react_native_1.View>}
143
143
 
@@ -195,7 +195,7 @@
195
195
  {s.length>0&&<react_native_1.View style={galleryStyles.subBar}>
196
196
  <react_native_1.View style={galleryStyles.resultCountWrapper}>
197
197
  <react_native_1.Text style={[galleryStyles.resultCountText,p.size>0&&galleryStyles.resultCountTextSelected]}>
198
- {p.size>0?`${p.size} of ${x.length} selected`:`${x.length} ${x.length===1?"item":"items"} \u2022 ${(0,helpers_1.formatBytes)(A)}`}
198
+ {p.size>0?`${p.size} of ${v.length} selected`:`${v.length} ${v.length===1?"item":"items"} \u2022 ${(0,helpers_1.formatBytes)(A)}`}
199
199
  </react_native_1.Text>
200
200
  </react_native_1.View>
201
201
 
@@ -231,7 +231,7 @@
231
231
  </react_native_1.View>}
232
232
 
233
233
 
234
- <react_native_1.FlatList key={h}data={x}keyExtractor={e=>e.id}renderItem={h==="grid"?Y:K}numColumns={h==="grid"?2:1}columnWrapperStyle={h==="grid"?galleryStyles.columnWrapper:void 0}style={{flex:1}}contentContainerStyle={[galleryStyles.listContent,{flexGrow:1}]}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled"refreshControl={<react_native_1.RefreshControl refreshing={W}onRefresh={G}tintColor={AppColors_1.AppColors.purple}/>}ListEmptyComponent={<react_native_1.View style={galleryStyles.emptyHeroCard}>
234
+ <react_native_1.FlatList key={h}data={v}keyExtractor={e=>e.id}renderItem={h==="grid"?Y:K}numColumns={h==="grid"?2:1}columnWrapperStyle={h==="grid"?galleryStyles.columnWrapper:void 0}style={{flex:1}}contentContainerStyle={[galleryStyles.listContent,{flexGrow:1}]}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled"refreshControl={<react_native_1.RefreshControl refreshing={W}onRefresh={G}tintColor={AppColors_1.AppColors.purple}/>}ListEmptyComponent={<react_native_1.View style={galleryStyles.emptyHeroCard}>
235
235
  <react_native_1.View style={galleryStyles.emptyIconCircle}>
236
236
  <NetworkIcons_1.ScreencastIcon size={32}color={AppColors_1.AppColors.purple}/>
237
237
  </react_native_1.View>
@@ -280,19 +280,19 @@
280
280
 
281
281
  <react_native_1.View style={galleryStyles.featurePillsRow}>
282
282
  <react_native_1.View style={galleryStyles.featurePill}>
283
- <react_native_1.Text style={galleryStyles.featurePillText}>⚡ Zero Overhead</react_native_1.Text>
283
+ <react_native_1.Text style={galleryStyles.featurePillText}>{o("media.zeroOverhead","\u26A1 Zero Overhead")}</react_native_1.Text>
284
284
  </react_native_1.View>
285
285
  <react_native_1.View style={galleryStyles.featurePill}>
286
- <react_native_1.Text style={galleryStyles.featurePillText}>✂️ Crop & Annotate</react_native_1.Text>
286
+ <react_native_1.Text style={galleryStyles.featurePillText}>{o("media.cropAndAnnotate","\u2702\uFE0F Crop & Annotate")}</react_native_1.Text>
287
287
  </react_native_1.View>
288
288
  <react_native_1.View style={galleryStyles.featurePill}>
289
- <react_native_1.Text style={galleryStyles.featurePillText}>🎞️ Convert to GIF</react_native_1.Text>
289
+ <react_native_1.Text style={galleryStyles.featurePillText}>{o("media.convertToGif","\u{1F39E}\uFE0F Convert to GIF")}</react_native_1.Text>
290
290
  </react_native_1.View>
291
291
  </react_native_1.View>
292
292
  </react_native_1.View>}/>
293
293
 
294
294
 
295
- <MediaPreviewModal_1.MediaPreviewModal item={l}visible={!!l}onClose={()=>a(null)}onDelete={O}onConvertToGif={E}/>
295
+ <MediaPreviewModal_1.MediaPreviewModal item={l}visible={!!l}onClose={()=>i(null)}onDelete={O}onConvertToGif={E}onSave={e=>{i(e),c()}}/>
296
296
 
297
297
 
298
298
  <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={()=>b(e=>({...e,visible:!1}))}/>