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.
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/src/main/AndroidManifest.xml +11 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +379 -19
- package/android/src/main/res/xml/inappinspector_file_paths.xml +7 -0
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +47 -49
- package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +8 -0
- package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +76 -0
- package/dist/commonjs/components/Inspector/ConsoleExportModal.js +51 -51
- package/dist/commonjs/components/Inspector/CrashTab.js +17 -17
- package/dist/commonjs/components/Inspector/DebuggingTab.js +24 -24
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +2 -2
- package/dist/commonjs/components/Inspector/FabLauncher.js +2 -2
- package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +2 -2
- package/dist/commonjs/components/Inspector/InspectorHeader.js +10 -10
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +10 -10
- package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +1 -0
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +222 -222
- package/dist/commonjs/components/Inspector/NetworkExportModal.d.ts +10 -0
- package/dist/commonjs/components/Inspector/NetworkExportModal.js +333 -0
- package/dist/commonjs/components/Inspector/NetworkTab.js +48 -41
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +11 -12
- package/dist/commonjs/components/Inspector/ReduxDetail.js +17 -19
- package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
- package/dist/commonjs/components/Inspector/SettingsPanel.js +3 -6
- package/dist/commonjs/components/Inspector/SocketCard.js +2 -2
- package/dist/commonjs/components/Inspector/SupportPage.js +5 -5
- package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
- package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +97 -0
- package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +2 -0
- package/dist/commonjs/components/Inspector/UiInspectorDetail.js +485 -0
- package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +2 -0
- package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +199 -0
- package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +2 -0
- package/dist/commonjs/components/Inspector/UiInspectorTab.js +117 -0
- package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
- package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +148 -0
- package/dist/commonjs/components/Inspector/index.d.ts +28 -0
- package/dist/commonjs/components/Inspector/index.js +1 -0
- package/dist/commonjs/components/LogCard.js +9 -7
- package/dist/commonjs/constants/index.js +1 -1
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
- package/dist/commonjs/constants/telemetryConfig.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +1 -1
- package/dist/commonjs/customHooks/crashHandler.js +6 -6
- package/dist/commonjs/customHooks/uiInspectorManager.d.ts +22 -0
- package/dist/commonjs/customHooks/uiInspectorManager.js +1 -0
- package/dist/commonjs/helpers/index.js +1 -3
- package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -0
- package/dist/commonjs/helpers/searchQueryParser.js +7 -5
- package/dist/commonjs/helpers/shareFormatter.d.ts +16 -0
- package/dist/commonjs/helpers/shareFormatter.js +16 -9
- package/dist/commonjs/helpers/uiInspectorEngine.d.ts +62 -0
- package/dist/commonjs/helpers/uiInspectorEngine.js +19 -0
- package/dist/commonjs/i18n/locales/ar.json +1 -1
- package/dist/commonjs/i18n/locales/bn.json +1 -1
- package/dist/commonjs/i18n/locales/de.json +1 -1
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -1
- package/dist/commonjs/i18n/locales/fr.json +1 -1
- package/dist/commonjs/i18n/locales/gu.json +1 -1
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -1
- package/dist/commonjs/i18n/locales/it.json +1 -1
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -1
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -1
- package/dist/commonjs/i18n/locales/mr.json +1 -1
- package/dist/commonjs/i18n/locales/nl.json +1 -1
- package/dist/commonjs/i18n/locales/pa.json +1 -1
- package/dist/commonjs/i18n/locales/pl.json +1 -1
- package/dist/commonjs/i18n/locales/pt.json +1 -1
- package/dist/commonjs/i18n/locales/ru.json +1 -1
- package/dist/commonjs/i18n/locales/ta.json +1 -1
- package/dist/commonjs/i18n/locales/te.json +1 -1
- package/dist/commonjs/i18n/locales/tr.json +1 -1
- package/dist/commonjs/i18n/locales/vi.json +1 -1
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +3 -1
- package/dist/commonjs/index.js +3 -3
- package/dist/commonjs/native/NativeInspector.d.ts +2 -0
- package/dist/commonjs/native/NativeInspector.js +1 -1
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
- package/dist/commonjs/types/editor.d.ts +31 -0
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +73 -75
- package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +8 -0
- package/dist/esm/components/Inspector/BoxModelVisualizer.js +76 -0
- package/dist/esm/components/Inspector/ConsoleExportModal.js +67 -67
- package/dist/esm/components/Inspector/CrashTab.js +58 -58
- package/dist/esm/components/Inspector/DebuggingTab.js +89 -89
- package/dist/esm/components/Inspector/DeviceInfoTab.js +2 -2
- package/dist/esm/components/Inspector/FabLauncher.js +21 -21
- package/dist/esm/components/Inspector/FloatingCaptureWidget.js +23 -23
- package/dist/esm/components/Inspector/InspectorHeader.js +26 -26
- package/dist/esm/components/Inspector/MediaGalleryTab.js +151 -151
- package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +1 -0
- package/dist/esm/components/Inspector/MediaPreviewModal.js +468 -468
- package/dist/esm/components/Inspector/NetworkExportModal.d.ts +10 -0
- package/dist/esm/components/Inspector/NetworkExportModal.js +333 -0
- package/dist/esm/components/Inspector/NetworkTab.js +118 -111
- package/dist/esm/components/Inspector/NpmStarPrompt.js +32 -33
- package/dist/esm/components/Inspector/ReduxDetail.js +54 -56
- package/dist/esm/components/Inspector/ReduxTab.js +9 -9
- package/dist/esm/components/Inspector/SettingsPanel.js +3 -6
- package/dist/esm/components/Inspector/SocketCard.js +13 -13
- package/dist/esm/components/Inspector/SupportPage.js +5 -5
- package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
- package/dist/esm/components/Inspector/UiA11yAuditPanel.js +97 -0
- package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +2 -0
- package/dist/esm/components/Inspector/UiInspectorDetail.js +422 -0
- package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +2 -0
- package/dist/esm/components/Inspector/UiInspectorOverlay.js +138 -0
- package/dist/esm/components/Inspector/UiInspectorTab.d.ts +2 -0
- package/dist/esm/components/Inspector/UiInspectorTab.js +117 -0
- package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
- package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +148 -0
- package/dist/esm/components/Inspector/index.d.ts +28 -0
- package/dist/esm/components/Inspector/index.js +1 -0
- package/dist/esm/components/LogCard.js +57 -55
- package/dist/esm/constants/index.js +1 -1
- package/dist/esm/constants/telemetryConfig.d.ts +3 -3
- package/dist/esm/constants/telemetryConfig.js +1 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/crashHandler.d.ts +1 -1
- package/dist/esm/customHooks/crashHandler.js +6 -6
- package/dist/esm/customHooks/uiInspectorManager.d.ts +22 -0
- package/dist/esm/customHooks/uiInspectorManager.js +1 -0
- package/dist/esm/helpers/index.js +4 -6
- package/dist/esm/helpers/searchQueryParser.d.ts +1 -0
- package/dist/esm/helpers/searchQueryParser.js +7 -5
- package/dist/esm/helpers/shareFormatter.d.ts +16 -0
- package/dist/esm/helpers/shareFormatter.js +20 -13
- package/dist/esm/helpers/uiInspectorEngine.d.ts +48 -0
- package/dist/esm/helpers/uiInspectorEngine.js +19 -0
- package/dist/esm/i18n/locales/ar.json +1 -1
- package/dist/esm/i18n/locales/bn.json +1 -1
- package/dist/esm/i18n/locales/de.json +1 -1
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -1
- package/dist/esm/i18n/locales/fr.json +1 -1
- package/dist/esm/i18n/locales/gu.json +1 -1
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -1
- package/dist/esm/i18n/locales/it.json +1 -1
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -1
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -1
- package/dist/esm/i18n/locales/mr.json +1 -1
- package/dist/esm/i18n/locales/nl.json +1 -1
- package/dist/esm/i18n/locales/pa.json +1 -1
- package/dist/esm/i18n/locales/pl.json +1 -1
- package/dist/esm/i18n/locales/pt.json +1 -1
- package/dist/esm/i18n/locales/ru.json +1 -1
- package/dist/esm/i18n/locales/ta.json +1 -1
- package/dist/esm/i18n/locales/te.json +1 -1
- package/dist/esm/i18n/locales/tr.json +1 -1
- package/dist/esm/i18n/locales/vi.json +1 -1
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +7 -7
- package/dist/esm/native/NativeInspector.d.ts +2 -0
- package/dist/esm/native/NativeInspector.js +1 -1
- package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
- package/dist/esm/types/editor.d.ts +31 -0
- package/ios/NetworkInspectorModule.mm +314 -16
- package/package.json +1 -1
- package/src/native/NativeInspector.ts +37 -0
- package/src/native/NativeNetworkInspector.ts +2 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import ot,{useState as
|
|
2
|
-
`);Pt(r,`${e.length} Media URIs`),
|
|
1
|
+
import ot,{useState as H,useEffect as ie,useMemo as ae,useCallback as J}from"react";import{Dimensions as rt,FlatList as Tt,Image as Pe,RefreshControl as Ct,Share as De,StyleSheet as wt,Text as S,TouchableOpacity as I,View as T}from"react-native";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as k}from"../../styles/AppFonts";import O from"../TouchableScale";import{CameraIcon as Ae,CameraRollIcon as Fe,CheckIcon as We,CloseWhite as St,CopyIcon as Te,FilmIcon as $e,GridIcon as Bt,ImageIcon as Ge,ListIcon as It,PlayIcon as He,ScreencastIcon as Oe,ShareIcon as Le,TrashIcon as Ce,VideoCameraIcon as Ue,WhiteBackNavigation as Rt}from"../NetworkIcons";import{MediaPreviewModal as Vt}from"./MediaPreviewModal";import{ScreenCapture as F,generateCaptureId as qe}from"../../capture";import{copyImageOrMediaToClipboard as Mt,copyToClipboard as Pt,formatBytes as Y}from"../../helpers";import{triggerNativeHaptic as z}from"../../native/NativeInspector";import{showToast as v}from"../../helpers/toast";import{useTranslation as Dt}from"../../i18n";import{useInspector as At}from"./InspectorContext";import{ConfirmationModal as Ft}from"./ConfirmationModal";export const MediaGalleryTab=()=>{const{t:C}=Dt(),{refreshMediaCount:M,switchActiveTab:we,previewMediaItem:xe,setPreviewMediaItem:W}=At(),[R,Se]=H([]),[Ee,Be]=H(!1),[P,Ne]=H("all"),[D,_]=H(new Set),[G,ke]=H("grid"),[$,X]=H(!1),[Ie,K]=H(0),j=ot.useRef(null),[U,E]=H({visible:!1,title:"",message:"",onConfirm:()=>{}}),V=J(async()=>{try{const e=await F.getMediaList();Se(e),M?.().catch(()=>{})}catch{Se([])}},[M]);ie(()=>{V()},[V]),ie(()=>{F.isRecording().then(e=>X(e)).catch(()=>{})},[]),ie(()=>($?(K(0),j.current=setInterval(()=>{K(e=>e+1)},1e3)):(j.current&&(clearInterval(j.current),j.current=null),K(0)),()=>{j.current&&clearInterval(j.current)}),[$]);const Ye=async()=>{Be(!0),await V(),Be(!1)},q=ae(()=>{let e=0,r=0,B=0;return R.forEach(A=>{A.type==="image"?e++:A.type==="video"?r++:A.type==="gif"&&B++}),{all:R.length,image:e,video:r,gif:B}},[R]),Z=ae(()=>P==="all"?R:R.filter(e=>e.type===P),[R,P]),Q=ae(()=>R.reduce((e,r)=>e+(r.sizeBytes||0),0),[R]),ze=J(async()=>{try{z("light");const e=await F.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){z("success");const r=qe("screenshot",e.format||"png"),B={id:r,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||r,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};W(B),await V(),M?.().catch(()=>{}),v(C("header.screenshotCaptured","Screenshot captured & saved"))}else v(C("header.screenshotFailed","Failed to capture screenshot"))}catch{v(C("header.screenshotError","Error capturing screenshot"))}},[V,M,W,C]),ee=J(async()=>{try{if($){z("medium");const e=await F.stopRecording();if(X(!1),e){z("success");const r=qe("video",e.format),B={id:r,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||r,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio};W(B),await V(),M?.().catch(()=>{}),v(C("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else z("medium"),await F.startRecording({fps:24,audioSource:"none"})?(X(!0),v(C("header.recordingStarted","Screen recording started"))):v(C("header.recordingStartFailed","Failed to start screen recording"))}catch{v(C("header.recordingError","Screen recording error")),X(!1)}},[$,V,M,W,C]),ve=async()=>{try{z("light");const e=P==="image"?"image":P==="video"?"video":"any",r=await F.pickMedia({mediaType:e});r&&(z("success"),await V(),M?.().catch(()=>{}),v(r.type==="video"?C("mediaGallery.importedVideo","Video imported from Camera Roll"):C("mediaGallery.importedPhoto","Photo imported from Camera Roll")),W(r))}catch{v(C("mediaGallery.importFailed","Failed to import media"))}},Re=J(e=>{z("light"),_(r=>{const B=new Set(r);return B.has(e)?B.delete(e):B.add(e),B})},[]),Ve=async e=>{z("medium"),await F.deleteMedia(e.uri),_(r=>{const B=new Set(r);return B.delete(e.id),B}),await V(),await M?.(),v(C("mediaGallery.deleted","Media deleted"))},Me=e=>{e?.uri&&(z("light"),Mt(e.uri,e.type==="image"?"Image":"Media"))},_e=()=>{const e=R.filter(B=>D.has(B.id));if(e.length===0)return;z("light");const r=e.map(B=>B.uri).join(`
|
|
2
|
+
`);Pt(r,`${e.length} Media URIs`),v(`${e.length} file URIs copied to clipboard`)},Xe=async e=>{try{z("light");const r=e.uri.startsWith("file://")||e.uri.startsWith("content://")||e.uri.startsWith("http")?e.uri:`file://${e.uri}`;await De.share({url:r,title:e.filename,message:e.filename})}catch{v(C("mediaGallery.shareUnavailable","Sharing not available on this device"))}},Ze=async()=>{const e=R.filter(r=>D.has(r.id));if(e.length!==0)try{z("light");const r=e[0],B=r.uri.startsWith("file://")||r.uri.startsWith("content://")||r.uri.startsWith("http")?r.uri:`file://${r.uri}`;await De.share({url:B,title:r.filename,message:e.length===1?r.filename:`${e.length} items: ${e.map(A=>A.filename).join(", ")}`})}catch{v(C("mediaGallery.shareUnavailable","Sharing not available on this device"))}},Je=()=>{const e=D.size;e!==0&&E({visible:!0,title:C("mediaGallery.deleteSelectedTitle","Delete Selected Media"),message:C("mediaGallery.deleteSelectedMessage",{count:e,defaultValue:`Are you sure you want to permanently delete ${e} media items?`}),confirmText:C("mediaGallery.delete","Delete"),cancelText:C("common.cancel","Cancel"),onConfirm:async()=>{E(B=>({...B,visible:!1}));const r=R.filter(B=>D.has(B.id));for(const B of r)await F.deleteMedia(B.uri);_(new Set),await V(),await M?.(),v(C("mediaGallery.deletedCount",{count:r.length,defaultValue:`Deleted ${r.length} items`}))}})},Ke=()=>{E({visible:!0,title:C("mediaGallery.purgeTitle","Purge Gallery"),message:C("mediaGallery.purgeMessage",{count:R.length,size:Y(Q),defaultValue:`Are you sure you want to delete all ${R.length} media files (${Y(Q)})? This cannot be undone.`}),confirmText:C("common.clearAll","Clear All"),cancelText:C("common.cancel","Cancel"),onConfirm:async()=>{E(e=>({...e,visible:!1})),await F.clearAllMedia(),_(new Set),await V(),await M?.(),v(C("mediaGallery.allPurged","All screencast files deleted"))}})},Qe=async e=>{await F.convertToGif(e.uri,{fps:12,width:480})&&(await V(),M?.().catch(()=>{}))},te=e=>{const r=Math.floor(e/60),B=e%60;return`${r.toString().padStart(2,"0")}:${B.toString().padStart(2,"0")}`},et=({item:e})=>{if(!e)return null;const r=e.type==="video",B=e.type==="gif",A=r&&e.thumbnailUri||e.uri,L=!!(e.id&&D.has(e.id)),oe=(e.format||(r?"mp4":B?"gif":"png")).toUpperCase(),re=e.filename||(e.uri?e.uri.split("/").pop():"")||"Capture",N=e.timestamp?new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"";return<O onPress={()=>W(e)}style={[o.card,L&&o.cardSelected]}>
|
|
3
3
|
<T style={o.thumbnailContainer}>
|
|
4
|
-
{
|
|
4
|
+
{A?<Pe source={{uri:A}}style={o.thumbnail}resizeMode="cover"/>:<T style={o.thumbnailFallback}>
|
|
5
5
|
{r?<$e size={28}color={t.sky500}/>:<Ge size={28}color={t.grayTextWeak}/>}
|
|
6
6
|
</T>}
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
<
|
|
10
|
-
{
|
|
11
|
-
</
|
|
9
|
+
<I onPress={()=>e.id&&Re(e.id)}style={[o.checkbox,L&&o.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
10
|
+
{L&&<We size={11}color={t.white}/>}
|
|
11
|
+
</I>
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
{r&&<T style={o.miniPlayCircle}>
|
|
@@ -16,50 +16,50 @@ import ot,{useState as $,useEffect as oe,useMemo as re,useCallback as X}from"rea
|
|
|
16
16
|
</T>}
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
<T style={[o.typeBadge,{backgroundColor:r?"rgba(14, 165, 233, 0.88)":
|
|
20
|
-
<
|
|
21
|
-
{
|
|
22
|
-
</
|
|
19
|
+
<T style={[o.typeBadge,{backgroundColor:r?"rgba(14, 165, 233, 0.88)":B?"rgba(245, 158, 11, 0.88)":"rgba(16, 185, 129, 0.88)"}]}>
|
|
20
|
+
<S style={o.typeBadgeText}>
|
|
21
|
+
{oe}
|
|
22
|
+
</S>
|
|
23
23
|
</T>
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
{r&&e.durationMs?<T style={o.durationBadge}>
|
|
27
|
-
<
|
|
28
|
-
{
|
|
29
|
-
</
|
|
27
|
+
<S style={o.durationBadgeText}>
|
|
28
|
+
{te(Math.round(e.durationMs/1e3))}
|
|
29
|
+
</S>
|
|
30
30
|
</T>:null}
|
|
31
31
|
</T>
|
|
32
32
|
|
|
33
33
|
<T style={o.cardInfo}>
|
|
34
|
-
<
|
|
35
|
-
{
|
|
36
|
-
</
|
|
34
|
+
<S style={o.cardTitle}numberOfLines={1}>
|
|
35
|
+
{re}
|
|
36
|
+
</S>
|
|
37
37
|
<T style={o.cardMetaRow}>
|
|
38
38
|
<T style={{flexDirection:"row",alignItems:"center",gap:4,flex:1,minWidth:0}}>
|
|
39
|
-
<
|
|
40
|
-
{
|
|
41
|
-
</
|
|
42
|
-
{
|
|
43
|
-
<
|
|
44
|
-
<
|
|
45
|
-
{
|
|
46
|
-
</
|
|
39
|
+
<S style={o.cardMeta}numberOfLines={1}>
|
|
40
|
+
{Y(e.sizeBytes||0)}
|
|
41
|
+
</S>
|
|
42
|
+
{N?<>
|
|
43
|
+
<S style={o.cardMetaDot}>•</S>
|
|
44
|
+
<S style={o.cardMeta}numberOfLines={1}>
|
|
45
|
+
{N}
|
|
46
|
+
</S>
|
|
47
47
|
</>:null}
|
|
48
48
|
</T>
|
|
49
|
-
<
|
|
49
|
+
<I onPress={()=>Me(e)}style={o.gridCopyBtn}hitSlop={{top:6,bottom:6,left:6,right:6}}>
|
|
50
50
|
<Te size={11}color={t.grayText}/>
|
|
51
|
-
</
|
|
51
|
+
</I>
|
|
52
52
|
</T>
|
|
53
53
|
</T>
|
|
54
|
-
</
|
|
54
|
+
</O>},tt=({item:e})=>{if(!e)return null;const r=e.type==="video",B=e.type==="gif",A=r&&e.thumbnailUri||e.uri,L=!!(e.id&&D.has(e.id)),oe=(e.format||(r?"mp4":B?"gif":"png")).toUpperCase(),re=e.filename||(e.uri?e.uri.split("/").pop():"")||"Capture",N=e.timestamp?`${new Date(e.timestamp).toLocaleDateString([],{month:"short",day:"numeric"})} ${new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}`:"";return<O onPress={()=>W(e)}style={[o.listRow,L&&o.listRowSelected]}>
|
|
55
55
|
|
|
56
|
-
<
|
|
57
|
-
{
|
|
58
|
-
</
|
|
56
|
+
<I onPress={()=>e.id&&Re(e.id)}style={[o.listCheckbox,L&&o.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
57
|
+
{L&&<We size={11}color={t.white}/>}
|
|
58
|
+
</I>
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
<T style={o.listThumbContainer}>
|
|
62
|
-
{
|
|
62
|
+
{A?<Pe source={{uri:A}}style={o.listThumb}resizeMode="cover"/>:<T style={o.listThumbFallback}>
|
|
63
63
|
{r?<$e size={18}color={t.sky500}/>:<Ge size={18}color={t.grayTextWeak}/>}
|
|
64
64
|
</T>}
|
|
65
65
|
{r&&<T style={o.listMiniPlay}>
|
|
@@ -69,231 +69,231 @@ import ot,{useState as $,useEffect as oe,useMemo as re,useCallback as X}from"rea
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
<T style={o.listInfo}>
|
|
72
|
-
<
|
|
73
|
-
{
|
|
74
|
-
</
|
|
72
|
+
<S style={o.listTitle}numberOfLines={1}>
|
|
73
|
+
{re}
|
|
74
|
+
</S>
|
|
75
75
|
<T style={o.listMetaRow}>
|
|
76
|
-
<T style={[o.listBadge,{backgroundColor:r?`${t.sky500}18`:
|
|
77
|
-
<
|
|
78
|
-
{
|
|
79
|
-
</
|
|
76
|
+
<T style={[o.listBadge,{backgroundColor:r?`${t.sky500}18`:B?`${t.amber500}18`:`${t.green600}18`}]}>
|
|
77
|
+
<S style={[o.listBadgeText,{color:r?t.sky600:B?t.amber500:t.green600}]}>
|
|
78
|
+
{oe}
|
|
79
|
+
</S>
|
|
80
80
|
</T>
|
|
81
|
-
<
|
|
82
|
-
{
|
|
83
|
-
</
|
|
84
|
-
{
|
|
85
|
-
<
|
|
86
|
-
<
|
|
87
|
-
{
|
|
88
|
-
</
|
|
81
|
+
<S style={o.cardMeta}>
|
|
82
|
+
{Y(e.sizeBytes||0)}
|
|
83
|
+
</S>
|
|
84
|
+
{N?<>
|
|
85
|
+
<S style={o.cardMetaDot}>•</S>
|
|
86
|
+
<S style={o.cardMeta}>
|
|
87
|
+
{N}
|
|
88
|
+
</S>
|
|
89
89
|
</>:null}
|
|
90
90
|
</T>
|
|
91
91
|
</T>
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
<T style={o.listActionsRow}>
|
|
95
|
-
<
|
|
95
|
+
<I onPress={()=>Me(e)}style={o.listActionBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
96
96
|
<Te size={13}color={t.grayText}/>
|
|
97
|
-
</
|
|
97
|
+
</I>
|
|
98
98
|
|
|
99
|
-
<
|
|
99
|
+
<I onPress={()=>Xe(e)}style={o.listActionBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
100
100
|
<Le size={13}color={t.sky600}/>
|
|
101
|
-
</
|
|
101
|
+
</I>
|
|
102
102
|
|
|
103
|
-
<
|
|
103
|
+
<I onPress={()=>Ve(e)}style={o.listActionBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
104
104
|
<Ce size={13}color={t.red500}/>
|
|
105
|
-
</
|
|
105
|
+
</I>
|
|
106
106
|
</T>
|
|
107
|
-
</
|
|
107
|
+
</O>};return<T style={o.container}>
|
|
108
108
|
|
|
109
109
|
<T style={o.topHeaderBar}>
|
|
110
|
-
<
|
|
110
|
+
<I onPress={()=>we("apis")}style={o.backToTabBtn}accessibilityLabel="Back to Inspector"hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
111
111
|
<Rt size={14}color={t.purple}/>
|
|
112
|
-
<
|
|
113
|
-
{
|
|
114
|
-
</
|
|
115
|
-
</
|
|
112
|
+
<S style={o.backToTabText}>
|
|
113
|
+
{C("common.back","Back")}
|
|
114
|
+
</S>
|
|
115
|
+
</I>
|
|
116
116
|
|
|
117
117
|
<T style={o.headerCenterTitle}>
|
|
118
118
|
<Oe size={15}color={t.purple}/>
|
|
119
|
-
<
|
|
120
|
-
{
|
|
121
|
-
</
|
|
122
|
-
{
|
|
123
|
-
<
|
|
119
|
+
<S style={o.headerStudioTitle}>
|
|
120
|
+
{C("tabs.media","Screencast")}
|
|
121
|
+
</S>
|
|
122
|
+
{q.all>0&&<T style={o.headerBadge}>
|
|
123
|
+
<S style={o.headerBadgeText}>{q.all}</S>
|
|
124
124
|
</T>}
|
|
125
125
|
</T>
|
|
126
126
|
|
|
127
|
-
<
|
|
127
|
+
<I onPress={()=>we("apis")}style={o.closeCircleBtn}accessibilityLabel="Close Screencast"hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
128
128
|
<St size={12}color={t.grayTextStrong}/>
|
|
129
|
-
</
|
|
129
|
+
</I>
|
|
130
130
|
</T>
|
|
131
131
|
|
|
132
132
|
|
|
133
|
-
{
|
|
133
|
+
{$&&<T style={o.recordingBanner}>
|
|
134
134
|
<T style={o.recordingDot}/>
|
|
135
|
-
<
|
|
136
|
-
{
|
|
137
|
-
</
|
|
138
|
-
<
|
|
135
|
+
<S style={o.recordingBannerText}>
|
|
136
|
+
{C("header.recordingScreen","Screen Recording Active")} • {te(Ie)}
|
|
137
|
+
</S>
|
|
138
|
+
<I onPress={ee}style={o.stopRecordBtn}activeOpacity={.8}>
|
|
139
139
|
<T style={o.stopSquare}/>
|
|
140
|
-
<
|
|
141
|
-
</
|
|
140
|
+
<S style={o.stopRecordBtnText}>{C("media.stopAndSave","Stop & Save")}</S>
|
|
141
|
+
</I>
|
|
142
142
|
</T>}
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
<T style={o.quickActionsBar}>
|
|
146
|
-
<
|
|
147
|
-
<
|
|
148
|
-
<
|
|
149
|
-
{
|
|
150
|
-
</
|
|
151
|
-
</
|
|
146
|
+
<O onPress={ze}style={[o.quickBtn,{backgroundColor:`${t.purple}10`,borderColor:`${t.purple}30`}]}>
|
|
147
|
+
<Ae size={14}color={t.purple}/>
|
|
148
|
+
<S style={[o.quickBtnText,{color:t.purple}]}>
|
|
149
|
+
{C("header.screenshot","Screenshot")}
|
|
150
|
+
</S>
|
|
151
|
+
</O>
|
|
152
152
|
|
|
153
|
-
<
|
|
154
|
-
<Ue size={14}color={
|
|
155
|
-
<
|
|
156
|
-
{
|
|
157
|
-
</
|
|
158
|
-
</
|
|
153
|
+
<O onPress={ee}style={[o.quickBtn,$?{backgroundColor:`${t.red500}18`,borderColor:t.red500}:{backgroundColor:`${t.sky600}10`,borderColor:`${t.sky600}30`}]}>
|
|
154
|
+
<Ue size={14}color={$?t.red500:t.sky600}/>
|
|
155
|
+
<S style={[o.quickBtnText,{color:$?t.red500:t.sky600}]}>
|
|
156
|
+
{$?`Stop (${te(Ie)})`:C("header.videoRecord","Record Video")}
|
|
157
|
+
</S>
|
|
158
|
+
</O>
|
|
159
159
|
|
|
160
|
-
<
|
|
161
|
-
<
|
|
162
|
-
<
|
|
163
|
-
{
|
|
164
|
-
</
|
|
165
|
-
</
|
|
160
|
+
<O onPress={ve}style={[o.quickBtn,{backgroundColor:`${t.emerald500}10`,borderColor:`${t.emerald500}30`}]}>
|
|
161
|
+
<Fe size={14}color={t.green600}/>
|
|
162
|
+
<S style={[o.quickBtnText,{color:t.green600}]}>
|
|
163
|
+
{C("common.import","Import")}
|
|
164
|
+
</S>
|
|
165
|
+
</O>
|
|
166
166
|
</T>
|
|
167
167
|
|
|
168
168
|
|
|
169
169
|
<T style={o.filterBar}>
|
|
170
170
|
<T style={o.chipGroup}>
|
|
171
|
-
{[{key:"all",label:
|
|
172
|
-
<
|
|
171
|
+
{[{key:"all",label:C("common.all","All"),count:q.all},{key:"image",label:C("mediaGallery.photos","Photos"),count:q.image},{key:"video",label:C("mediaGallery.videos","Videos"),count:q.video},{key:"gif",label:C("mediaGallery.gifs","GIFs"),count:q.gif}].map(e=>{const r=P===e.key;return<I key={e.key}onPress={()=>{z("light"),Ne(e.key)}}style={[o.chip,r&&o.chipActive]}>
|
|
172
|
+
<S style={[o.chipText,r&&o.chipTextActive]}>
|
|
173
173
|
{e.label}
|
|
174
|
-
</
|
|
174
|
+
</S>
|
|
175
175
|
<T style={[o.chipBadge,r&&o.chipBadgeActive]}>
|
|
176
|
-
<
|
|
176
|
+
<S style={[o.chipBadgeText,r&&o.chipBadgeTextActive]}>
|
|
177
177
|
{e.count}
|
|
178
|
-
</
|
|
178
|
+
</S>
|
|
179
179
|
</T>
|
|
180
|
-
</
|
|
180
|
+
</I>})}
|
|
181
181
|
</T>
|
|
182
182
|
|
|
183
183
|
|
|
184
184
|
<T style={o.viewToggleContainer}>
|
|
185
|
-
<
|
|
186
|
-
<Bt size={13}color={
|
|
187
|
-
</
|
|
188
|
-
<
|
|
189
|
-
<It size={13}color={
|
|
190
|
-
</
|
|
185
|
+
<I onPress={()=>{z("light"),ke("grid")}}style={[o.viewToggleBtn,G==="grid"&&o.viewToggleBtnActive]}>
|
|
186
|
+
<Bt size={13}color={G==="grid"?t.white:t.grayText}/>
|
|
187
|
+
</I>
|
|
188
|
+
<I onPress={()=>{z("light"),ke("list")}}style={[o.viewToggleBtn,G==="list"&&o.viewToggleBtnActive]}>
|
|
189
|
+
<It size={13}color={G==="list"?t.white:t.grayText}/>
|
|
190
|
+
</I>
|
|
191
191
|
</T>
|
|
192
192
|
</T>
|
|
193
193
|
|
|
194
194
|
|
|
195
|
-
{
|
|
195
|
+
{R.length>0&&<T style={o.subBar}>
|
|
196
196
|
<T style={o.resultCountWrapper}>
|
|
197
|
-
<
|
|
198
|
-
{
|
|
199
|
-
</
|
|
197
|
+
<S style={[o.resultCountText,D.size>0&&o.resultCountTextSelected]}>
|
|
198
|
+
{D.size>0?`${D.size} of ${Z.length} selected`:`${Z.length} ${Z.length===1?"item":"items"} \u2022 ${Y(Q)}`}
|
|
199
|
+
</S>
|
|
200
200
|
</T>
|
|
201
201
|
|
|
202
202
|
<T style={o.actionsGroup}>
|
|
203
|
-
{
|
|
204
|
-
<
|
|
203
|
+
{D.size>0?<>
|
|
204
|
+
<I onPress={_e}style={o.copySelectedBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
205
205
|
<Te size={11}color={t.grayTextStrong}/>
|
|
206
|
-
<
|
|
206
|
+
<S style={o.copySelectedBtnText}>
|
|
207
207
|
Copy
|
|
208
|
-
</
|
|
209
|
-
</
|
|
208
|
+
</S>
|
|
209
|
+
</I>
|
|
210
210
|
|
|
211
|
-
<
|
|
211
|
+
<I onPress={Ze}style={o.shareSelectedBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
212
212
|
<Le size={11}color={t.sky600}/>
|
|
213
|
-
<
|
|
213
|
+
<S style={o.shareSelectedBtnText}>
|
|
214
214
|
Share
|
|
215
|
-
</
|
|
216
|
-
</
|
|
215
|
+
</S>
|
|
216
|
+
</I>
|
|
217
217
|
|
|
218
|
-
<
|
|
218
|
+
<I onPress={Je}style={o.deleteBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
219
219
|
<Ce size={11}color={t.red500}/>
|
|
220
|
-
<
|
|
221
|
-
Delete ({
|
|
222
|
-
</
|
|
223
|
-
</
|
|
224
|
-
</>:<
|
|
220
|
+
<S style={o.deleteBtnText}>
|
|
221
|
+
Delete ({D.size})
|
|
222
|
+
</S>
|
|
223
|
+
</I>
|
|
224
|
+
</>:<I onPress={Ke}style={o.clearBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
|
|
225
225
|
<Ce size={11}color={t.red500}/>
|
|
226
|
-
<
|
|
226
|
+
<S style={o.clearBtnText}>
|
|
227
227
|
Purge All
|
|
228
|
-
</
|
|
229
|
-
</
|
|
228
|
+
</S>
|
|
229
|
+
</I>}
|
|
230
230
|
</T>
|
|
231
231
|
</T>}
|
|
232
232
|
|
|
233
233
|
|
|
234
|
-
<Tt key={
|
|
234
|
+
<Tt key={G}data={Z}keyExtractor={e=>e.id}renderItem={G==="grid"?et:tt}numColumns={G==="grid"?2:1}columnWrapperStyle={G==="grid"?o.columnWrapper:void 0}style={{flex:1}}contentContainerStyle={[o.listContent,{flexGrow:1}]}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled"refreshControl={<Ct refreshing={Ee}onRefresh={Ye}tintColor={t.purple}/>}ListEmptyComponent={<T style={o.emptyHeroCard}>
|
|
235
235
|
<T style={o.emptyIconCircle}>
|
|
236
236
|
<Oe size={32}color={t.purple}/>
|
|
237
237
|
</T>
|
|
238
238
|
|
|
239
|
-
<
|
|
240
|
-
{
|
|
241
|
-
</
|
|
239
|
+
<S style={o.emptyHeroTitle}>
|
|
240
|
+
{P==="image"?"No Screenshots Yet":P==="video"?"No Screen Recordings Yet":P==="gif"?"No Animated GIFs Yet":"Screencast & Media Studio"}
|
|
241
|
+
</S>
|
|
242
242
|
|
|
243
|
-
<
|
|
244
|
-
{
|
|
245
|
-
</
|
|
243
|
+
<S style={o.emptyHeroSubtitle}>
|
|
244
|
+
{P==="image"?"Take a full-screen application snapshot or import photos from your device library.":P==="video"?"Record high-FPS screen videos with audio narration to reproduce and debug issues.":"Capture pixel-perfect screenshots, record 60fps screen videos, and export GIF animations with zero background overhead."}
|
|
245
|
+
</S>
|
|
246
246
|
|
|
247
247
|
|
|
248
248
|
<T style={o.emptyActionsGrid}>
|
|
249
|
-
<
|
|
249
|
+
<O onPress={ze}style={o.emptyActionCard}>
|
|
250
250
|
<T style={[o.actionCardIconBox,{backgroundColor:`${t.purple}14`}]}>
|
|
251
|
-
<
|
|
251
|
+
<Ae size={18}color={t.purple}/>
|
|
252
252
|
</T>
|
|
253
253
|
<T style={o.actionCardTextBox}>
|
|
254
|
-
<
|
|
255
|
-
<
|
|
254
|
+
<S style={o.actionCardTitle}>Take Screenshot</S>
|
|
255
|
+
<S style={o.actionCardDesc}>Full-window lossless PNG</S>
|
|
256
256
|
</T>
|
|
257
|
-
</
|
|
257
|
+
</O>
|
|
258
258
|
|
|
259
|
-
<
|
|
259
|
+
<O onPress={ee}style={o.emptyActionCard}>
|
|
260
260
|
<T style={[o.actionCardIconBox,{backgroundColor:`${t.sky600}14`}]}>
|
|
261
261
|
<Ue size={18}color={t.sky600}/>
|
|
262
262
|
</T>
|
|
263
263
|
<T style={o.actionCardTextBox}>
|
|
264
|
-
<
|
|
265
|
-
<
|
|
264
|
+
<S style={o.actionCardTitle}>Record Screen Video</S>
|
|
265
|
+
<S style={o.actionCardDesc}>High-FPS MP4 with audio</S>
|
|
266
266
|
</T>
|
|
267
|
-
</
|
|
267
|
+
</O>
|
|
268
268
|
|
|
269
|
-
<
|
|
269
|
+
<O onPress={ve}style={o.emptyActionCard}>
|
|
270
270
|
<T style={[o.actionCardIconBox,{backgroundColor:`${t.emerald500}14`}]}>
|
|
271
|
-
<
|
|
271
|
+
<Fe size={18}color={t.green600}/>
|
|
272
272
|
</T>
|
|
273
273
|
<T style={o.actionCardTextBox}>
|
|
274
|
-
<
|
|
275
|
-
<
|
|
274
|
+
<S style={o.actionCardTitle}>Import from Camera Roll</S>
|
|
275
|
+
<S style={o.actionCardDesc}>Device photos & videos</S>
|
|
276
276
|
</T>
|
|
277
|
-
</
|
|
277
|
+
</O>
|
|
278
278
|
</T>
|
|
279
279
|
|
|
280
280
|
|
|
281
281
|
<T style={o.featurePillsRow}>
|
|
282
282
|
<T style={o.featurePill}>
|
|
283
|
-
<
|
|
283
|
+
<S style={o.featurePillText}>{C("media.zeroOverhead","\u26A1 Zero Overhead")}</S>
|
|
284
284
|
</T>
|
|
285
285
|
<T style={o.featurePill}>
|
|
286
|
-
<
|
|
286
|
+
<S style={o.featurePillText}>{C("media.cropAndAnnotate","\u2702\uFE0F Crop & Annotate")}</S>
|
|
287
287
|
</T>
|
|
288
288
|
<T style={o.featurePill}>
|
|
289
|
-
<
|
|
289
|
+
<S style={o.featurePillText}>{C("media.convertToGif","\u{1F39E}\uFE0F Convert to GIF")}</S>
|
|
290
290
|
</T>
|
|
291
291
|
</T>
|
|
292
292
|
</T>}/>
|
|
293
293
|
|
|
294
294
|
|
|
295
|
-
<Vt item={xe}visible={!!xe}onClose={()=>W(null)}onDelete={Ve}onConvertToGif={Qe}/>
|
|
295
|
+
<Vt item={xe}visible={!!xe}onClose={()=>W(null)}onDelete={Ve}onConvertToGif={Qe}onSave={e=>{W(e),V()}}/>
|
|
296
296
|
|
|
297
297
|
|
|
298
|
-
<
|
|
299
|
-
</T>};const{width:
|
|
298
|
+
<Ft visible={U.visible}title={U.title}message={U.message}confirmText={U.confirmText}cancelText={U.cancelText}isDestructive={!0}icon="trash"onConfirm={U.onConfirm}onCancel={()=>E(e=>({...e,visible:!1}))}/>
|
|
299
|
+
</T>};const{width:Wt}=rt.get("window"),$t=(Wt-36)/2,o=wt.create({container:{flex:1,backgroundColor:t.grayBackground},topHeaderBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:10,backgroundColor:t.primaryLight,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary},backToTabBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:4,paddingHorizontal:8,borderRadius:8,backgroundColor:`${t.purple}12`},backToTabText:{fontFamily:k.interBold,fontSize:11.5,color:t.purple},headerCenterTitle:{flexDirection:"row",alignItems:"center",gap:6},headerStudioTitle:{fontFamily:k.interBold,fontSize:13.5,color:t.grayTextStrong},headerBadge:{backgroundColor:`${t.purple}1A`,paddingHorizontal:6,paddingVertical:1.5,borderRadius:10},headerBadgeText:{fontFamily:k.interBold,fontSize:9.5,color:t.purple},closeCircleBtn:{width:26,height:26,borderRadius:13,backgroundColor:t.grayBackground,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},recordingBanner:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:`${t.red500}15`,borderBottomWidth:1,borderBottomColor:`${t.red500}30`,paddingHorizontal:14,paddingVertical:8},recordingDot:{width:8,height:8,borderRadius:4,backgroundColor:t.red500,marginRight:6},recordingBannerText:{fontFamily:k.interBold,fontSize:12,color:t.red500,flex:1},stopRecordBtn:{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:t.red500,paddingHorizontal:10,paddingVertical:4.5,borderRadius:6},stopSquare:{width:8,height:8,backgroundColor:t.white,borderRadius:1},stopRecordBtnText:{fontFamily:k.interBold,fontSize:11,color:t.white},quickActionsBar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingTop:10,paddingBottom:6},quickBtn:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:5,paddingVertical:7,paddingHorizontal:4,borderRadius:8,borderWidth:1},quickBtnText:{fontFamily:k.interBold,fontSize:11},filterBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary,gap:8},chipGroup:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},chip:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4.5,borderRadius:8,backgroundColor:t.primaryLight,borderWidth:1,borderColor:t.grayBorderSecondary},chipActive:{backgroundColor:`${t.purple}14`,borderColor:t.purple},chipText:{fontFamily:k.interMedium,fontSize:11,color:t.grayText},chipTextActive:{fontFamily:k.interBold,color:t.purple},chipBadge:{backgroundColor:t.grayBackground,paddingHorizontal:4.5,paddingVertical:1,borderRadius:6},chipBadgeActive:{backgroundColor:t.purple},chipBadgeText:{fontFamily:k.interBold,fontSize:9,color:t.grayTextWeak},chipBadgeTextActive:{color:t.white},viewToggleContainer:{flexDirection:"row",backgroundColor:t.primaryLight,borderRadius:8,borderWidth:1,borderColor:t.grayBorderSecondary,padding:2},viewToggleBtn:{paddingHorizontal:7,paddingVertical:4,borderRadius:6},viewToggleBtnActive:{backgroundColor:t.purple},subBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:6.5,backgroundColor:t.primaryLight,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary},resultCountWrapper:{flex:1},resultCountText:{fontFamily:k.interMedium,fontSize:11,color:t.grayTextWeak},resultCountTextSelected:{fontFamily:k.interBold,color:t.purple},actionsGroup:{flexDirection:"row",alignItems:"center",gap:6},copySelectedBtn:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:7,paddingVertical:3.5,borderRadius:6,backgroundColor:t.grayBackground,borderWidth:1,borderColor:t.grayBorderSecondary},copySelectedBtnText:{fontFamily:k.interBold,fontSize:10,color:t.grayTextStrong},shareSelectedBtn:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:7,paddingVertical:3.5,borderRadius:6,backgroundColor:`${t.sky600}14`,borderWidth:1,borderColor:`${t.sky600}30`},shareSelectedBtnText:{fontFamily:k.interBold,fontSize:10,color:t.sky600},deleteBtn:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:7,paddingVertical:3.5,borderRadius:6,backgroundColor:`${t.red500}14`,borderWidth:1,borderColor:`${t.red500}30`},deleteBtnText:{fontFamily:k.interBold,fontSize:10,color:t.red500},clearBtn:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:7,paddingVertical:3.5,borderRadius:6,backgroundColor:`${t.red500}10`},clearBtnText:{fontFamily:k.interBold,fontSize:10,color:t.red500},listContent:{padding:12,paddingBottom:40},columnWrapper:{justifyContent:"space-between",marginBottom:10},card:{width:$t,backgroundColor:t.primaryLight,borderRadius:12,borderWidth:1,borderColor:t.grayBorderSecondary,overflow:"hidden",shadowColor:t.black,shadowOffset:{width:0,height:2},shadowOpacity:.04,shadowRadius:4,elevation:2},cardSelected:{borderColor:t.purple,borderWidth:2},thumbnailContainer:{width:"100%",height:110,backgroundColor:t.grayBackground,position:"relative"},thumbnail:{width:"100%",height:"100%"},thumbnailFallback:{flex:1,alignItems:"center",justifyContent:"center"},checkbox:{position:"absolute",top:7,left:7,width:19,height:19,borderRadius:5,backgroundColor:"rgba(0, 0, 0, 0.45)",borderWidth:1.5,borderColor:t.white,alignItems:"center",justifyContent:"center",zIndex:5},checkboxSelected:{backgroundColor:t.purple,borderColor:t.purple},miniPlayCircle:{position:"absolute",top:"50%",left:"50%",transform:[{translateX:-16},{translateY:-16}],width:32,height:32,borderRadius:16,backgroundColor:"rgba(0, 0, 0, 0.65)",alignItems:"center",justifyContent:"center"},typeBadge:{position:"absolute",top:7,right:7,paddingHorizontal:5,paddingVertical:2,borderRadius:4},typeBadgeText:{fontFamily:k.interBold,fontSize:8.5,color:t.white,letterSpacing:.3},durationBadge:{position:"absolute",bottom:6,right:6,backgroundColor:"rgba(0, 0, 0, 0.72)",paddingHorizontal:5,paddingVertical:1.5,borderRadius:4},durationBadgeText:{fontFamily:k.interBold,fontSize:9,color:t.white},cardInfo:{padding:8,gap:4},cardTitle:{fontFamily:k.interSemiBold,fontSize:11,color:t.grayTextStrong},cardMetaRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},cardMeta:{fontFamily:k.interRegular,fontSize:10,color:t.grayTextWeak},cardMetaDot:{fontSize:9,color:t.grayTextWeak},gridCopyBtn:{padding:2},listRow:{flexDirection:"row",alignItems:"center",backgroundColor:t.primaryLight,borderRadius:10,borderWidth:1,borderColor:t.grayBorderSecondary,padding:8,marginBottom:8,gap:10},listRowSelected:{borderColor:t.purple,borderWidth:1.5},listCheckbox:{width:18,height:18,borderRadius:4,borderWidth:1.5,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},listThumbContainer:{width:48,height:48,borderRadius:8,backgroundColor:t.grayBackground,overflow:"hidden",position:"relative"},listThumb:{width:"100%",height:"100%"},listThumbFallback:{flex:1,alignItems:"center",justifyContent:"center"},listMiniPlay:{position:"absolute",bottom:2,right:2,backgroundColor:"rgba(0, 0, 0, 0.65)",borderRadius:3,padding:1.5},listInfo:{flex:1,gap:3},listTitle:{fontFamily:k.interSemiBold,fontSize:12,color:t.grayTextStrong},listMetaRow:{flexDirection:"row",alignItems:"center",gap:5},listBadge:{paddingHorizontal:4.5,paddingVertical:1,borderRadius:4},listBadgeText:{fontFamily:k.interBold,fontSize:9,letterSpacing:.3},listActionsRow:{flexDirection:"row",alignItems:"center",gap:4},listActionBtn:{padding:5,borderRadius:6,backgroundColor:t.grayBackground},emptyHeroCard:{backgroundColor:t.primaryLight,borderRadius:16,borderWidth:1,borderColor:t.grayBorderSecondary,padding:20,alignItems:"center",marginTop:8,shadowColor:t.black,shadowOffset:{width:0,height:2},shadowOpacity:.03,shadowRadius:6,elevation:2},emptyIconCircle:{width:64,height:64,borderRadius:32,backgroundColor:`${t.purple}14`,borderWidth:1,borderColor:`${t.purple}25`,alignItems:"center",justifyContent:"center",marginBottom:12},emptyHeroTitle:{fontFamily:k.interBold,fontSize:16,color:t.grayTextStrong,textAlign:"center",marginBottom:6},emptyHeroSubtitle:{fontFamily:k.interRegular,fontSize:12,lineHeight:17,color:t.grayText,textAlign:"center",marginBottom:18,paddingHorizontal:8},emptyActionsGrid:{width:"100%",gap:8,marginBottom:16},emptyActionCard:{flexDirection:"row",alignItems:"center",backgroundColor:t.grayBackground,borderRadius:10,borderWidth:1,borderColor:t.grayBorderSecondary,padding:10,gap:12},actionCardIconBox:{width:38,height:38,borderRadius:8,alignItems:"center",justifyContent:"center"},actionCardTextBox:{flex:1,gap:1.5},actionCardTitle:{fontFamily:k.interBold,fontSize:12.5,color:t.grayTextStrong},actionCardDesc:{fontFamily:k.interRegular,fontSize:10.5,color:t.grayTextWeak},featurePillsRow:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap",paddingTop:4},featurePill:{backgroundColor:t.grayBackground,paddingHorizontal:8,paddingVertical:3.5,borderRadius:12,borderWidth:1,borderColor:t.grayBorderSecondary},featurePillText:{fontFamily:k.interMedium,fontSize:9.5,color:t.grayTextWeak}});
|
|
@@ -44,6 +44,7 @@ interface MediaPreviewModalProps {
|
|
|
44
44
|
onClose: () => void;
|
|
45
45
|
onDelete: (item: CapturedMediaItem) => void;
|
|
46
46
|
onConvertToGif?: (item: CapturedMediaItem) => void;
|
|
47
|
+
onSave?: (savedItem: CapturedMediaItem) => void;
|
|
47
48
|
}
|
|
48
49
|
export declare const MediaPreviewModal: React.FC<MediaPreviewModalProps>;
|
|
49
50
|
export {};
|