react-native-inapp-inspector 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.ar.md +163 -0
  2. package/README.de.md +163 -0
  3. package/README.es.md +164 -0
  4. package/README.fr.md +163 -0
  5. package/README.hi.md +163 -0
  6. package/README.ja.md +180 -0
  7. package/README.ko.md +163 -0
  8. package/README.md +340 -243
  9. package/README.pt-BR.md +163 -0
  10. package/README.ru.md +163 -0
  11. package/README.zh-CN.md +387 -0
  12. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +82 -21
  13. package/assets/banner_dark.svg +186 -0
  14. package/assets/banner_light.svg +186 -0
  15. package/assets/icon_circle.svg +148 -0
  16. package/assets/icon_square.svg +369 -0
  17. package/assets/inapp_inspector_icon.gif +0 -0
  18. package/assets/inapp_inspector_icon_original.gif +0 -0
  19. package/assets/social_preview.png +0 -0
  20. package/assets/walkthrough.gif +0 -0
  21. package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
  22. package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
  23. package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
  24. package/dist/commonjs/components/AppHeaderLogo.js +7 -5
  25. package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
  26. package/dist/commonjs/components/BrandSquareIcon.js +139 -0
  27. package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
  28. package/dist/commonjs/components/ConsoleLogCard.js +23 -39
  29. package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
  30. package/dist/commonjs/components/Inspector/AnalyticsTab.js +16 -16
  31. package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
  32. package/dist/commonjs/components/Inspector/ConfirmationModal.js +32 -0
  33. package/dist/commonjs/components/Inspector/ConsoleTab.js +15 -15
  34. package/dist/commonjs/components/Inspector/CrashTab.js +25 -23
  35. package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
  36. package/dist/commonjs/components/Inspector/FabLauncher.js +22 -30
  37. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
  38. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  39. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +90 -0
  40. package/dist/commonjs/components/Inspector/MainScreen.js +46 -33
  41. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +21 -19
  42. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +85 -101
  43. package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
  44. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
  45. package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
  46. package/dist/commonjs/components/Inspector/PushCard.js +5 -4
  47. package/dist/commonjs/components/Inspector/PushDetail.js +32 -23
  48. package/dist/commonjs/components/Inspector/PushTab.js +13 -13
  49. package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
  50. package/dist/commonjs/components/Inspector/ReduxTab.js +14 -14
  51. package/dist/commonjs/components/Inspector/SettingsPanel.js +258 -139
  52. package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
  53. package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
  54. package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
  55. package/dist/commonjs/components/Inspector/SocketDetail.js +317 -0
  56. package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
  57. package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
  58. package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
  59. package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
  60. package/dist/commonjs/components/Inspector/StorageTab.js +34 -32
  61. package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
  62. package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
  63. package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
  64. package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
  65. package/dist/commonjs/components/Inspector/TabBar.js +24 -23
  66. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
  67. package/dist/commonjs/components/JsonViewer.js +7 -7
  68. package/dist/commonjs/components/LogCard.d.ts +3 -2
  69. package/dist/commonjs/components/LogCard.js +17 -14
  70. package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
  71. package/dist/commonjs/components/ModuleErrorBoundary.js +2 -2
  72. package/dist/commonjs/components/NetworkIcons.d.ts +15 -0
  73. package/dist/commonjs/components/NetworkIcons.js +38 -3
  74. package/dist/commonjs/components/SegmentedTabs.js +1 -1
  75. package/dist/commonjs/constants/version.d.ts +1 -1
  76. package/dist/commonjs/constants/version.js +1 -1
  77. package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
  78. package/dist/commonjs/customHooks/socketLogger.js +2 -0
  79. package/dist/commonjs/helpers/index.js +3 -3
  80. package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
  81. package/dist/commonjs/helpers/memoryManager.js +1 -1
  82. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  83. package/dist/commonjs/helpers/searchQueryParser.js +5 -1
  84. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  85. package/dist/commonjs/helpers/settingsStore.js +1 -1
  86. package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
  87. package/dist/commonjs/helpers/shareFormatter.js +8 -7
  88. package/dist/commonjs/i18n/index.d.ts +99 -1
  89. package/dist/commonjs/i18n/index.js +1 -1
  90. package/dist/commonjs/i18n/locales/ar.json +1 -1
  91. package/dist/commonjs/i18n/locales/bn.json +1 -0
  92. package/dist/commonjs/i18n/locales/de.json +1 -1
  93. package/dist/commonjs/i18n/locales/en.json +1 -1
  94. package/dist/commonjs/i18n/locales/es.json +1 -1
  95. package/dist/commonjs/i18n/locales/fr.json +1 -1
  96. package/dist/commonjs/i18n/locales/gu.json +1 -0
  97. package/dist/commonjs/i18n/locales/hi.json +1 -1
  98. package/dist/commonjs/i18n/locales/id.json +1 -0
  99. package/dist/commonjs/i18n/locales/it.json +1 -0
  100. package/dist/commonjs/i18n/locales/ja.json +1 -1
  101. package/dist/commonjs/i18n/locales/kn.json +1 -0
  102. package/dist/commonjs/i18n/locales/ko.json +1 -1
  103. package/dist/commonjs/i18n/locales/ml.json +1 -0
  104. package/dist/commonjs/i18n/locales/mr.json +1 -0
  105. package/dist/commonjs/i18n/locales/nl.json +1 -0
  106. package/dist/commonjs/i18n/locales/pa.json +1 -0
  107. package/dist/commonjs/i18n/locales/pl.json +1 -0
  108. package/dist/commonjs/i18n/locales/pt.json +1 -1
  109. package/dist/commonjs/i18n/locales/ru.json +1 -1
  110. package/dist/commonjs/i18n/locales/ta.json +1 -0
  111. package/dist/commonjs/i18n/locales/te.json +1 -0
  112. package/dist/commonjs/i18n/locales/tr.json +1 -0
  113. package/dist/commonjs/i18n/locales/vi.json +1 -0
  114. package/dist/commonjs/i18n/locales/zh.json +1 -1
  115. package/dist/commonjs/index.d.ts +13 -13
  116. package/dist/commonjs/index.js +5 -4
  117. package/dist/commonjs/native/NativeInspector.d.ts +1 -0
  118. package/dist/commonjs/socket.d.ts +4 -0
  119. package/dist/commonjs/socket.js +1 -0
  120. package/dist/commonjs/styles/index.d.ts +23 -0
  121. package/dist/commonjs/styles/index.js +1 -1
  122. package/dist/commonjs/types/enums.d.ts +40 -0
  123. package/dist/commonjs/types/enums.js +1 -1
  124. package/dist/commonjs/types/interfaces.d.ts +122 -1
  125. package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
  126. package/dist/esm/components/AnimatedBrandOwl.js +175 -0
  127. package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
  128. package/dist/esm/components/AppHeaderLogo.js +7 -5
  129. package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
  130. package/dist/esm/components/BrandSquareIcon.js +139 -0
  131. package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
  132. package/dist/esm/components/ConsoleLogCard.js +61 -77
  133. package/dist/esm/components/Inspector/AboutModal.js +85 -95
  134. package/dist/esm/components/Inspector/AnalyticsTab.js +31 -31
  135. package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
  136. package/dist/esm/components/Inspector/ConfirmationModal.js +32 -0
  137. package/dist/esm/components/Inspector/ConsoleTab.js +49 -49
  138. package/dist/esm/components/Inspector/CrashTab.js +40 -38
  139. package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
  140. package/dist/esm/components/Inspector/FabLauncher.js +50 -58
  141. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
  142. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  143. package/dist/esm/components/Inspector/LanguageSelectorModal.js +90 -0
  144. package/dist/esm/components/Inspector/MainScreen.js +123 -110
  145. package/dist/esm/components/Inspector/MediaGalleryTab.js +64 -62
  146. package/dist/esm/components/Inspector/MediaPreviewModal.js +107 -123
  147. package/dist/esm/components/Inspector/NetworkTab.js +90 -90
  148. package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
  149. package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
  150. package/dist/esm/components/Inspector/PushCard.js +23 -22
  151. package/dist/esm/components/Inspector/PushDetail.js +34 -25
  152. package/dist/esm/components/Inspector/PushTab.js +25 -25
  153. package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
  154. package/dist/esm/components/Inspector/ReduxTab.js +35 -35
  155. package/dist/esm/components/Inspector/SettingsPanel.js +495 -376
  156. package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
  157. package/dist/esm/components/Inspector/SocketCard.js +116 -0
  158. package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
  159. package/dist/esm/components/Inspector/SocketDetail.js +317 -0
  160. package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
  161. package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
  162. package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
  163. package/dist/esm/components/Inspector/SocketTab.js +112 -0
  164. package/dist/esm/components/Inspector/StorageTab.js +136 -134
  165. package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
  166. package/dist/esm/components/Inspector/SupportModal.js +125 -0
  167. package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
  168. package/dist/esm/components/Inspector/SupportPage.js +227 -0
  169. package/dist/esm/components/Inspector/TabBar.js +36 -35
  170. package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
  171. package/dist/esm/components/JsonViewer.js +55 -55
  172. package/dist/esm/components/LogCard.d.ts +3 -2
  173. package/dist/esm/components/LogCard.js +61 -58
  174. package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
  175. package/dist/esm/components/ModuleErrorBoundary.js +23 -23
  176. package/dist/esm/components/NetworkIcons.d.ts +15 -0
  177. package/dist/esm/components/NetworkIcons.js +38 -3
  178. package/dist/esm/components/SegmentedTabs.js +7 -7
  179. package/dist/esm/constants/version.d.ts +1 -1
  180. package/dist/esm/constants/version.js +1 -1
  181. package/dist/esm/customHooks/socketLogger.d.ts +26 -0
  182. package/dist/esm/customHooks/socketLogger.js +2 -0
  183. package/dist/esm/helpers/index.js +3 -3
  184. package/dist/esm/helpers/memoryManager.d.ts +1 -0
  185. package/dist/esm/helpers/memoryManager.js +1 -1
  186. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  187. package/dist/esm/helpers/searchQueryParser.js +5 -1
  188. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  189. package/dist/esm/helpers/settingsStore.js +1 -1
  190. package/dist/esm/helpers/shareFormatter.d.ts +3 -1
  191. package/dist/esm/helpers/shareFormatter.js +8 -7
  192. package/dist/esm/i18n/index.d.ts +99 -1
  193. package/dist/esm/i18n/index.js +1 -1
  194. package/dist/esm/i18n/locales/ar.json +1 -1
  195. package/dist/esm/i18n/locales/bn.json +1 -0
  196. package/dist/esm/i18n/locales/de.json +1 -1
  197. package/dist/esm/i18n/locales/en.json +1 -1
  198. package/dist/esm/i18n/locales/es.json +1 -1
  199. package/dist/esm/i18n/locales/fr.json +1 -1
  200. package/dist/esm/i18n/locales/gu.json +1 -0
  201. package/dist/esm/i18n/locales/hi.json +1 -1
  202. package/dist/esm/i18n/locales/id.json +1 -0
  203. package/dist/esm/i18n/locales/it.json +1 -0
  204. package/dist/esm/i18n/locales/ja.json +1 -1
  205. package/dist/esm/i18n/locales/kn.json +1 -0
  206. package/dist/esm/i18n/locales/ko.json +1 -1
  207. package/dist/esm/i18n/locales/ml.json +1 -0
  208. package/dist/esm/i18n/locales/mr.json +1 -0
  209. package/dist/esm/i18n/locales/nl.json +1 -0
  210. package/dist/esm/i18n/locales/pa.json +1 -0
  211. package/dist/esm/i18n/locales/pl.json +1 -0
  212. package/dist/esm/i18n/locales/pt.json +1 -1
  213. package/dist/esm/i18n/locales/ru.json +1 -1
  214. package/dist/esm/i18n/locales/ta.json +1 -0
  215. package/dist/esm/i18n/locales/te.json +1 -0
  216. package/dist/esm/i18n/locales/tr.json +1 -0
  217. package/dist/esm/i18n/locales/vi.json +1 -0
  218. package/dist/esm/i18n/locales/zh.json +1 -1
  219. package/dist/esm/index.d.ts +13 -13
  220. package/dist/esm/index.js +8 -7
  221. package/dist/esm/native/NativeInspector.d.ts +1 -0
  222. package/dist/esm/socket.d.ts +4 -0
  223. package/dist/esm/socket.js +1 -0
  224. package/dist/esm/styles/index.d.ts +23 -0
  225. package/dist/esm/styles/index.js +1 -1
  226. package/dist/esm/types/enums.d.ts +40 -0
  227. package/dist/esm/types/enums.js +1 -1
  228. package/dist/esm/types/interfaces.d.ts +122 -1
  229. package/ios/NetworkInspectorModule.mm +102 -12
  230. package/package.json +204 -2
  231. package/src/native/NativeInspector.ts +8 -0
@@ -1,134 +1,147 @@
1
- import Q,{useEffect as L,useRef as I}from"react";import{Animated as w,Modal as X,Platform as O,Pressable as Z,StatusBar as Se,StyleSheet as E,View as S}from"react-native";import{useInspector as we}from"./InspectorContext";import Be from"../ErrorBoundary";import B from"../ModuleErrorBoundary";import Ce from"./FabLauncher";import Ve from"./InspectorHeader";import Re from"./TabBar";import Ne from"./NetworkTab";import De from"./NetworkDetail";import Me from"./LogDetail";import Ee from"./ConsoleTab";import Te from"./AnalyticsTab";import Ae from"../AnalyticsDetail";import Pe from"./ReduxTab";import Le from"./ReduxDetail";import Ie from"./CrashTab";import Oe from"./CrashDetail";import Fe from"./PushTab";import Ge from"./PushDetail";import We from"./DeviceInfoTab";import He from"./StorageTab";import Ue from"./DebuggingTab";import{MediaGalleryTab as Ye}from"./MediaGalleryTab";import _e from"./SettingsPanel";import $e from"./AboutModal";import Je from"./NpmUpdateToast";import Ke from"./NpmStarPrompt";import Qe from"../Toast";import F from"../../styles";import{AppColors as C}from"../../styles/AppColors";import Xe from"./NavigationTracker";import{isLocalDebugEnvironment as Ze}from"../../helpers";const eo=()=>{const{visible:T,modalAnimationType:V,closeModal:R,modalHeightPercent:x,selected:G,selectedEvent:A,selectedLog:W,selectedReduxSlice:z,selectedReduxAction:U,selectedCrash:q,selectedPush:P,setSelectedPush:Y,settingsPage:N,isAboutOpen:D,setIsAboutOpen:_,activeTab:e,isReady:$,enabled:j,hasNavigationContext:J,setNavState:K}=we(),H=e==="apis"&&G!=null||e==="analytics"&&A!=null||e==="logs"&&W!=null||e==="redux"&&(z!=null||U!=null)||e==="crash"&&q!=null||e==="push"&&P!=null,M=I(new w.Value(0)).current;L(()=>{N!==null&&(M.setValue(0),w.spring(M,{toValue:1,friction:8,tension:65,useNativeDriver:!1}).start())},[N!==null]);const v=I(new w.Value(0)).current;return L(()=>{D&&(v.setValue(0),w.spring(v,{toValue:1,friction:8,tension:65,useNativeDriver:!1}).start())},[D]),<>
2
- {(O.OS==="ios"||O.OS==="android")&&j&&!T&&<Ce/>}
3
- <X visible={T}animationType={V}transparent statusBarTranslucent={!0}onRequestClose={R}>
4
- <Be onClose={R}>
5
- <S style={F.modalBackdrop}>
6
- <Z style={F.modalBackdropPressable}onPress={R}/>
7
- <S style={[F.modalContentCard,{height:`${x}%`,borderTopLeftRadius:x>=100?0:20,borderTopRightRadius:x>=100?0:20}]}>
8
- <Se translucent backgroundColor="transparent"barStyle="light-content"/>
1
+ import te,{useEffect as A,useRef as P}from"react";import{Animated as o,Modal as Se,Platform as G,Pressable as Be,StatusBar as Ce,StyleSheet as R,View as B}from"react-native";import{useInspector as Ve}from"./InspectorContext";import Ne from"../ErrorBoundary";import S from"../ModuleErrorBoundary";import Re from"./FabLauncher";import De from"./InspectorHeader";import Me from"./TabBar";import Ee from"./NetworkTab";import Te from"./NetworkDetail";import Ae from"./LogDetail";import Pe from"./ConsoleTab";import Le from"./AnalyticsTab";import Ie from"../AnalyticsDetail";import Oe from"./ReduxTab";import We from"./ReduxDetail";import Fe from"./CrashTab";import Ge from"./CrashDetail";import He from"./PushTab";import Ye from"./PushDetail";import Ue from"./SocketTab";import _e from"./SocketDetail";import $e from"./DeviceInfoTab";import Je from"./StorageTab";import Ke from"./DebuggingTab";import{MediaGalleryTab as Qe}from"./MediaGalleryTab";import Xe from"./SettingsPanel";import Ze from"./AboutModal";import{SupportPage as So}from"./SupportPage";import Bo from"./NpmUpdateToast";import Co from"./NpmStarPrompt";import Vo from"../Toast";import q from"../../styles";import{AppColors as C}from"../../styles/AppColors";import No from"./NavigationTracker";import{isLocalDebugEnvironment as Ro}from"../../helpers";const Do=()=>{const{visible:L,modalAnimationType:V,closeModal:N,modalHeightPercent:I,selected:H,selectedEvent:O,selectedLog:Y,selectedReduxSlice:_,selectedReduxAction:$,selectedCrash:z,selectedPush:W,setSelectedPush:j,selectedSocket:F,setSelectedSocket:J,settingsPage:D,isAboutOpen:M,setIsAboutOpen:K,isSupportOpen:v,setIsSupportOpen:Q,activeTab:e,isReady:X,enabled:Z,isDismissed:ee,hasNavigationContext:oe,setNavState:re}=Ve(),U=e==="apis"&&H!=null||e==="analytics"&&O!=null||e==="logs"&&Y!=null||e==="redux"&&(_!=null||$!=null)||e==="crash"&&z!=null||e==="push"&&W!=null||e==="socket"&&F!=null,E=P(new o.Value(0)).current;A(()=>{D!==null&&(E.setValue(0),o.spring(E,{toValue:1,friction:8,tension:65,useNativeDriver:!1}).start())},[D!==null]);const T=P(new o.Value(0)).current;A(()=>{M&&(T.setValue(0),o.spring(T,{toValue:1,friction:8,tension:65,useNativeDriver:!1}).start())},[M]);const x=P(new o.Value(0)).current;return A(()=>{v&&(x.setValue(0),o.spring(x,{toValue:1,friction:8,tension:65,useNativeDriver:!1}).start())},[v]),<>
2
+ {(G.OS==="ios"||G.OS==="android")&&Z&&!ee&&!L&&<Re/>}
3
+ <Se visible={L}animationType={V}transparent statusBarTranslucent={!0}onRequestClose={N}>
4
+ <Ne onClose={N}>
5
+ <B style={q.modalBackdrop}>
6
+ <Be style={q.modalBackdropPressable}onPress={N}/>
7
+ <B style={[q.modalContentCard,{height:`${I}%`,borderTopLeftRadius:I>=100?0:20,borderTopRightRadius:I>=100?0:20,backgroundColor:"transparent"}]}>
8
+ <Ce translucent backgroundColor="transparent"barStyle="light-content"/>
9
9
 
10
- <Ve/>
10
+ <De/>
11
11
 
12
- <S style={{flex:1}}>
12
+ <B style={{flex:1,overflow:"hidden",backgroundColor:C.grayBackground}}>
13
13
 
14
- <S style={{flex:1}}pointerEvents={H||N!==null||D?"none":"auto"}>
15
- <Re/>
16
- {$?<S style={{flex:1}}>
17
- {e==="apis"&&<B moduleName="Network API Monitor">
18
- <Ne/>
19
- </B>}
20
- {e==="logs"&&<B moduleName="Console Logs Monitor">
14
+ <B style={{flex:1}}pointerEvents={U||D!==null||M||v?"none":"auto"}>
15
+ <Me/>
16
+ {X?<B style={{flex:1}}>
17
+ {e==="apis"&&<S moduleName="Network API Monitor">
21
18
  <Ee/>
22
- </B>}
23
- {e==="analytics"&&<B moduleName="Analytics Event Tracker">
24
- <Te/>
25
- </B>}
26
- {e==="redux"&&<B moduleName="Redux State Inspector">
19
+ </S>}
20
+ {e==="logs"&&<S moduleName="Console Logs Monitor">
27
21
  <Pe/>
28
- </B>}
29
- {e==="crash"&&<B moduleName="Crash Reporter">
30
- <Ie/>
31
- </B>}
32
- {e==="push"&&<B moduleName="Push Notifications">
22
+ </S>}
23
+ {e==="analytics"&&<S moduleName="Analytics Event Tracker">
24
+ <Le/>
25
+ </S>}
26
+ {e==="redux"&&<S moduleName="Redux State Inspector">
27
+ <Oe/>
28
+ </S>}
29
+ {e==="crash"&&<S moduleName="Crash Reporter">
33
30
  <Fe/>
34
- </B>}
35
- {e==="device"&&<B moduleName="Device Diagnostics">
36
- <We/>
37
- </B>}
38
- {e==="storage"&&<B moduleName="Storage Inspector">
31
+ </S>}
32
+ {e==="push"&&<S moduleName="Push Notifications">
39
33
  <He/>
40
- </B>}
41
- {e==="media"&&<B moduleName="Media Gallery">
42
- <Ye/>
43
- </B>}
44
- {O.OS==="android"&&Ze()&&e==="debugging"&&<B moduleName="Debugging Utilities">
45
- <Ue/>
46
- </B>}
47
- </S>:<So/>}
48
- </S>
34
+ </S>}
35
+ {e==="socket"&&<S moduleName="WebSocket & Socket.IO">
36
+ <Ue/>
37
+ </S>}
38
+ {e==="device"&&<S moduleName="Device Diagnostics">
39
+ <$e/>
40
+ </S>}
41
+ {e==="storage"&&<S moduleName="Storage Inspector">
42
+ <Je/>
43
+ </S>}
44
+ {e==="media"&&<S moduleName="Media Gallery">
45
+ <Qe/>
46
+ </S>}
47
+ {G.OS==="android"&&Ro()&&e==="debugging"&&<S moduleName="Debugging Utilities">
48
+ <Ke/>
49
+ </S>}
50
+ </B>:<Mo/>}
51
+ </B>
49
52
 
50
53
 
51
- {H&&<S style={[E.absoluteFill,{backgroundColor:C.contentBg,zIndex:10}]}>
52
- {e==="apis"&&G!=null&&<B moduleName="Network Request Details">
53
- <De/>
54
- </B>}
55
- {e==="analytics"&&A!=null&&<B moduleName="Analytics Event Details">
56
- <Ae event={A}/>
57
- </B>}
58
- {e==="logs"&&W!=null&&<B moduleName="Console Log Details">
59
- <Me/>
60
- </B>}
61
- {e==="redux"&&<B moduleName="Redux Action & State Details">
62
- <Le/>
63
- </B>}
64
- {e==="crash"&&q!=null&&<B moduleName="Crash Log Details">
65
- <Oe/>
66
- </B>}
67
- {e==="push"&&P!=null&&<B moduleName="Push Notification Details">
68
- <Ge item={P}onClose={()=>Y(null)}/>
69
- </B>}
70
- </S>}
54
+ {U&&<B style={[R.absoluteFill,{backgroundColor:C.contentBg,zIndex:10}]}>
55
+ {e==="apis"&&H!=null&&<S moduleName="Network Request Details">
56
+ <Te/>
57
+ </S>}
58
+ {e==="analytics"&&O!=null&&<S moduleName="Analytics Event Details">
59
+ <Ie event={O}/>
60
+ </S>}
61
+ {e==="logs"&&Y!=null&&<S moduleName="Console Log Details">
62
+ <Ae/>
63
+ </S>}
64
+ {e==="redux"&&<S moduleName="Redux Action & State Details">
65
+ <We/>
66
+ </S>}
67
+ {e==="crash"&&z!=null&&<S moduleName="Crash Log Details">
68
+ <Ge/>
69
+ </S>}
70
+ {e==="push"&&W!=null&&<S moduleName="Push Notification Details">
71
+ <Ye item={W}onClose={()=>j(null)}/>
72
+ </S>}
73
+ {e==="socket"&&F!=null&&<S moduleName="WebSocket & Socket.IO Details">
74
+ <_e item={F}onClose={()=>J(null)}/>
75
+ </S>}
76
+ </B>}
71
77
 
72
78
 
73
- {N!==null&&<w.View style={[E.absoluteFill,{backgroundColor:C.grayBackground,opacity:M,transform:[{translateY:M.interpolate({inputRange:[0,1],outputRange:[24,0]})}]}]}>
74
- <B moduleName="Settings Panel">
75
- <_e/>
76
- </B>
77
- </w.View>}
79
+ {D!==null&&<o.View style={[R.absoluteFill,{backgroundColor:C.grayBackground,opacity:E,transform:[{translateY:E.interpolate({inputRange:[0,1],outputRange:[24,0]})}]}]}>
80
+ <S moduleName="Settings Panel">
81
+ <Xe/>
82
+ </S>
83
+ </o.View>}
78
84
 
79
85
 
80
- {D&&<w.View style={[E.absoluteFill,{backgroundColor:C.primaryLight,opacity:v,transform:[{translateY:v.interpolate({inputRange:[0,1],outputRange:[24,0]})}]}]}>
81
- <B moduleName="About & Diagnostics">
82
- <$e onClose={()=>_(!1)}/>
83
- </B>
84
- </w.View>}
85
- </S>
86
+ {M&&<o.View style={[R.absoluteFill,{backgroundColor:C.primaryLight,opacity:T,transform:[{translateY:T.interpolate({inputRange:[0,1],outputRange:[24,0]})}]}]}>
87
+ <S moduleName="About & Diagnostics">
88
+ <Ze onClose={()=>K(!1)}/>
89
+ </S>
90
+ </o.View>}
91
+
92
+
93
+ {v&&<o.View style={[R.absoluteFill,{backgroundColor:C.primaryLight,opacity:x,transform:[{translateY:x.interpolate({inputRange:[0,1],outputRange:[24,0]})}]}]}>
94
+ <S moduleName="Support & Community">
95
+ <So onClose={()=>Q(!1)}/>
96
+ </S>
97
+ </o.View>}
98
+ </B>
86
99
 
87
100
 
88
- <Qe/>
101
+ <Vo/>
89
102
 
90
103
 
91
- <Je/>
104
+ <Bo/>
92
105
 
93
106
 
94
- <Ke/>
95
- </S>
96
- </S>
97
- </Be>
98
- {J&&<Xe onStateChange={K}/>}
99
- </X>
100
- </>},So=Q.memo(function(){const V=I(new w.Value(.35)).current;return L(()=>{const R=w.loop(w.sequence([w.timing(V,{toValue:.85,duration:750,useNativeDriver:!1}),w.timing(V,{toValue:.35,duration:750,useNativeDriver:!1})]));return R.start(),()=>R.stop()},[V]),<S style={o.container}>
107
+ <Co/>
108
+ </B>
109
+ </B>
110
+ </Ne>
111
+ {oe&&<No onStateChange={re}/>}
112
+ </Se>
113
+ </>},Mo=te.memo(function(){const V=P(new o.Value(.35)).current;return A(()=>{const N=o.loop(o.sequence([o.timing(V,{toValue:.85,duration:750,useNativeDriver:!1}),o.timing(V,{toValue:.35,duration:750,useNativeDriver:!1})]));return N.start(),()=>N.stop()},[V]),<B style={r.container}>
101
114
 
102
- <S style={o.toolbarSkeleton}>
103
- <w.View style={[o.searchBarSkeleton,{opacity:V}]}/>
104
- <S style={o.actionButtonsRow}>
105
- <w.View style={[o.iconButtonSkeleton,{opacity:V}]}/>
106
- <w.View style={[o.iconButtonSkeleton,{opacity:V}]}/>
107
- </S>
108
- </S>
115
+ <B style={r.toolbarSkeleton}>
116
+ <o.View style={[r.searchBarSkeleton,{opacity:V}]}/>
117
+ <B style={r.actionButtonsRow}>
118
+ <o.View style={[r.iconButtonSkeleton,{opacity:V}]}/>
119
+ <o.View style={[r.iconButtonSkeleton,{opacity:V}]}/>
120
+ </B>
121
+ </B>
109
122
 
110
123
 
111
- <S style={o.chipStripSkeleton}>
112
- <w.View style={[o.chipSkeleton,{width:48,opacity:V}]}/>
113
- <w.View style={[o.chipSkeleton,{width:68,opacity:V}]}/>
114
- <w.View style={[o.chipSkeleton,{width:76,opacity:V}]}/>
115
- <w.View style={[o.chipSkeleton,{width:58,opacity:V}]}/>
116
- </S>
124
+ <B style={r.chipStripSkeleton}>
125
+ <o.View style={[r.chipSkeleton,{width:48,opacity:V}]}/>
126
+ <o.View style={[r.chipSkeleton,{width:68,opacity:V}]}/>
127
+ <o.View style={[r.chipSkeleton,{width:76,opacity:V}]}/>
128
+ <o.View style={[r.chipSkeleton,{width:58,opacity:V}]}/>
129
+ </B>
117
130
 
118
131
 
119
- {[0,1,2,3].map(R=><w.View key={`skeleton_card_${R}`}style={[o.cardSkeleton,{opacity:V}]}>
120
- <S style={o.cardTopRow}>
121
- <S style={o.badgeGroup}>
122
- <S style={o.statusBadgeSkeleton}/>
123
- <S style={o.methodBadgeSkeleton}/>
124
- </S>
125
- <S style={o.timeSkeleton}/>
126
- </S>
127
- <S style={o.urlLineLong}/>
128
- <S style={o.urlLineShort}/>
129
- <S style={o.cardBottomRow}>
130
- <S style={o.metaPillSkeleton}/>
131
- <S style={o.metaPillSkeleton}/>
132
- </S>
133
- </w.View>)}
134
- </S>}),o=E.create({container:{flex:1,paddingHorizontal:12,paddingTop:8},toolbarSkeleton:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:8},searchBarSkeleton:{flex:1,height:36,borderRadius:8,backgroundColor:C.graySurface,borderWidth:1,borderColor:C.dividerColor},actionButtonsRow:{flexDirection:"row",gap:6},iconButtonSkeleton:{width:36,height:36,borderRadius:8,backgroundColor:C.graySurface,borderWidth:1,borderColor:C.dividerColor},chipStripSkeleton:{flexDirection:"row",gap:6,marginBottom:10},chipSkeleton:{height:24,borderRadius:6,backgroundColor:C.graySurface,borderWidth:1,borderColor:C.dividerColor},cardSkeleton:{backgroundColor:C.primaryLight,borderRadius:10,padding:12,marginBottom:8,borderWidth:1,borderColor:C.dividerColor},cardTopRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:8},badgeGroup:{flexDirection:"row",alignItems:"center",gap:6},statusBadgeSkeleton:{width:38,height:18,borderRadius:4,backgroundColor:C.graySurface},methodBadgeSkeleton:{width:44,height:18,borderRadius:4,backgroundColor:C.graySurface},timeSkeleton:{width:48,height:12,borderRadius:4,backgroundColor:C.graySurface},urlLineLong:{height:13,borderRadius:4,backgroundColor:C.graySurface,marginBottom:5,width:"90%"},urlLineShort:{height:11,borderRadius:4,backgroundColor:C.graySurface,marginBottom:8,width:"55%"},cardBottomRow:{flexDirection:"row",gap:8,marginTop:2},metaPillSkeleton:{width:52,height:14,borderRadius:4,backgroundColor:C.graySurface}});export default eo;
132
+ {[0,1,2,3].map(N=><o.View key={`skeleton_card_${N}`}style={[r.cardSkeleton,{opacity:V}]}>
133
+ <B style={r.cardTopRow}>
134
+ <B style={r.badgeGroup}>
135
+ <B style={r.statusBadgeSkeleton}/>
136
+ <B style={r.methodBadgeSkeleton}/>
137
+ </B>
138
+ <B style={r.timeSkeleton}/>
139
+ </B>
140
+ <B style={r.urlLineLong}/>
141
+ <B style={r.urlLineShort}/>
142
+ <B style={r.cardBottomRow}>
143
+ <B style={r.metaPillSkeleton}/>
144
+ <B style={r.metaPillSkeleton}/>
145
+ </B>
146
+ </o.View>)}
147
+ </B>}),r=R.create({container:{flex:1,paddingHorizontal:12,paddingTop:8},toolbarSkeleton:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:8},searchBarSkeleton:{flex:1,height:36,borderRadius:8,backgroundColor:C.graySurface,borderWidth:1,borderColor:C.dividerColor},actionButtonsRow:{flexDirection:"row",gap:6},iconButtonSkeleton:{width:36,height:36,borderRadius:8,backgroundColor:C.graySurface,borderWidth:1,borderColor:C.dividerColor},chipStripSkeleton:{flexDirection:"row",gap:6,marginBottom:10},chipSkeleton:{height:24,borderRadius:6,backgroundColor:C.graySurface,borderWidth:1,borderColor:C.dividerColor},cardSkeleton:{backgroundColor:C.primaryLight,borderRadius:10,padding:12,marginBottom:8,borderWidth:1,borderColor:C.dividerColor},cardTopRow:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",marginBottom:8},badgeGroup:{flexDirection:"row",alignItems:"center",gap:6},statusBadgeSkeleton:{width:38,height:18,borderRadius:4,backgroundColor:C.graySurface},methodBadgeSkeleton:{width:44,height:18,borderRadius:4,backgroundColor:C.graySurface},timeSkeleton:{width:48,height:12,borderRadius:4,backgroundColor:C.graySurface},urlLineLong:{height:13,borderRadius:4,backgroundColor:C.graySurface,marginBottom:5,width:"90%"},urlLineShort:{height:11,borderRadius:4,backgroundColor:C.graySurface,marginBottom:8,width:"55%"},cardBottomRow:{flexDirection:"row",gap:8,marginTop:2},metaPillSkeleton:{width:52,height:14,borderRadius:4,backgroundColor:C.graySurface}});export default Do;
@@ -1,55 +1,55 @@
1
- import{useState as W,useEffect as He,useMemo as te,useCallback as oe}from"react";import{Alert as ie,Dimensions as je,FlatList as Ee,Image as Ce,RefreshControl as _e,Share as Te,StyleSheet as Ne,Text as S,TouchableOpacity as I,View as C}from"react-native";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as B}from"../../styles/AppFonts";import Se from"../TouchableScale";import Je from"../EmptyState";import{CheckIcon as Ie,CopyIcon as E,FilmIcon as $,GifIcon as _,GridIcon as Qe,ImageIcon as F,ListIcon as Xe,PlayIcon as Be,ScreencastIcon as Ye,ShareIcon as Re,TrashIcon as N}from"../NetworkIcons";import{MediaPreviewModal as Ze}from"./MediaPreviewModal";import{ScreenCapture as P}from"../../capture";import{copyImageOrMediaToClipboard as Ke,copyToClipboard as et,formatBytes as U}from"../../helpers";import{showToast as A}from"../../helpers/toast";import{useTranslation as tt}from"../../i18n";import{useInspector as ot}from"./InspectorContext";export const MediaGalleryTab=()=>{const{t:r}=tt(),{refreshMediaCount:V,switchActiveTab:H}=ot(),[x,q]=W([]),[Ge,J]=W(!1),[O,Me]=W("all"),[Q,j]=W(null),[v,L]=W(new Set),[R,X]=W("grid"),M=oe(async()=>{try{const t=await P.getMediaList();q(t),V?.().catch(()=>{})}catch{q([])}},[V]);He(()=>{M()},[M]);const De=async()=>{J(!0),await M(),J(!1)},G=te(()=>O==="all"?x:x.filter(t=>t.type===O),[x,O]),Y=te(()=>x.reduce((t,i)=>t+(i.sizeBytes||0),0),[x]),Z=oe(t=>{L(i=>{const l=new Set(i);return l.has(t)?l.delete(t):l.add(t),l})},[]),K=async t=>{await P.deleteMedia(t.uri),L(l=>{const T=new Set(l);return T.delete(t.id),T}),await M(),await V?.()===0&&H("apis"),A(r("mediaGallery.deleted"))},ee=t=>{t?.uri&&Ke(t.uri,t.type==="image"?"Image":"Media")},Ve=()=>{const t=x.filter(l=>v.has(l.id));if(t.length===0)return;const i=t.map(l=>l.uri).join(`
2
- `);et(i,`${t.length} Media URIs`),A(`${t.length} file URIs copied to clipboard`)},We=async t=>{try{const i=t.uri.startsWith("file://")||t.uri.startsWith("content://")||t.uri.startsWith("http")?t.uri:`file://${t.uri}`;await Te.share({url:i,title:t.filename,message:t.filename})}catch{A(r("mediaGallery.shareUnavailable","Sharing not available on this device"))}},Ae=async()=>{const t=x.filter(i=>v.has(i.id));if(t.length!==0)try{const i=t[0],l=i.uri.startsWith("file://")||i.uri.startsWith("content://")||i.uri.startsWith("http")?i.uri:`file://${i.uri}`;await Te.share({url:l,title:i.filename,message:t.length===1?i.filename:`${t.length} items: ${t.map(T=>T.filename).join(", ")}`})}catch{A(r("mediaGallery.shareUnavailable","Sharing not available on this device"))}},$e=()=>{const t=v.size;t!==0&&ie.alert(r("mediaGallery.deleteSelectedTitle"),r("mediaGallery.deleteSelectedMessage",{count:t}),[{text:r("common.cancel"),style:"cancel"},{text:r("mediaGallery.delete"),style:"destructive",onPress:async()=>{const i=x.filter(T=>v.has(T.id));for(const T of i)await P.deleteMedia(T.uri);L(new Set),await M(),await V?.()===0&&H("apis"),A(r("mediaGallery.deletedCount",{count:i.length}))}}])},Fe=()=>{ie.alert(r("mediaGallery.purgeTitle"),r("mediaGallery.purgeMessage",{count:x.length,size:U(Y)}),[{text:r("common.cancel"),style:"cancel"},{text:r("common.clearAll"),style:"destructive",onPress:async()=>{await P.clearAllMedia(),L(new Set),await M(),await V?.(),H("apis"),A(r("mediaGallery.allPurged"))}}])},Pe=async t=>{await P.convertToGif(t.uri,{fps:12,width:480})&&(await M(),V?.().catch(()=>{}))},Oe=(t,i)=>{const l=i?e.sky400:e.slate400,T=12;switch(t){case"all":return<Ye size={T}color={l}/>;case"image":return<F size={T}color={l}/>;case"video":return<$ size={T}color={l}/>;case"gif":return<_ size={T}color={l}/>}},Le=({item:t})=>{const i=t.type==="video",l=t.type==="gif",T=i?t.thumbnailUri:t.uri,D=v.has(t.id);return<Se onPress={()=>j(t)}style={[o.card,D&&o.cardSelected]}>
1
+ import{useState as V,useEffect as He,useMemo as re,useCallback as le}from"react";import{Dimensions as je,FlatList as Ee,Image as Ce,RefreshControl as _e,Share as Te,StyleSheet as Ne,Text as T,TouchableOpacity as I,View as C}from"react-native";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as B}from"../../styles/AppFonts";import Se from"../TouchableScale";import Je from"../EmptyState";import{CheckIcon as Ie,CopyIcon as J,FilmIcon as O,GifIcon as Q,GridIcon as Qe,ImageIcon as P,ListIcon as Xe,PlayIcon as Be,ScreencastIcon as Ye,ShareIcon as Re,TrashIcon as X}from"../NetworkIcons";import{MediaPreviewModal as Ze}from"./MediaPreviewModal";import{ScreenCapture as L}from"../../capture";import{copyImageOrMediaToClipboard as Ke,copyToClipboard as et,formatBytes as U}from"../../helpers";import{showToast as $}from"../../helpers/toast";import{useTranslation as tt}from"../../i18n";import{useInspector as ot}from"./InspectorContext";import{ConfirmationModal as Ct}from"./ConfirmationModal";export const MediaGalleryTab=()=>{const{t:r}=tt(),{refreshMediaCount:W,switchActiveTab:E}=ot(),[S,Y]=V([]),[Me,Z]=V(!1),[H,De]=V("all"),[K,_]=V(null),[v,j]=V(new Set),[R,ee]=V("grid"),[A,F]=V({visible:!1,title:"",message:"",onConfirm:()=>{}}),D=le(async()=>{try{const t=await L.getMediaList();Y(t),W?.().catch(()=>{})}catch{Y([])}},[W]);He(()=>{D()},[D]);const Ge=async()=>{Z(!0),await D(),Z(!1)},M=re(()=>H==="all"?S:S.filter(t=>t.type===H),[S,H]),N=re(()=>S.reduce((t,i)=>t+(i.sizeBytes||0),0),[S]),te=le(t=>{j(i=>{const l=new Set(i);return l.has(t)?l.delete(t):l.add(t),l})},[]),oe=async t=>{await L.deleteMedia(t.uri),j(l=>{const a=new Set(l);return a.delete(t.id),a}),await D(),await W?.()===0&&E("apis"),$(r("mediaGallery.deleted"))},ie=t=>{t?.uri&&Ke(t.uri,t.type==="image"?"Image":"Media")},Ve=()=>{const t=S.filter(l=>v.has(l.id));if(t.length===0)return;const i=t.map(l=>l.uri).join(`
2
+ `);et(i,`${t.length} Media URIs`),$(`${t.length} file URIs copied to clipboard`)},We=async t=>{try{const i=t.uri.startsWith("file://")||t.uri.startsWith("content://")||t.uri.startsWith("http")?t.uri:`file://${t.uri}`;await Te.share({url:i,title:t.filename,message:t.filename})}catch{$(r("mediaGallery.shareUnavailable","Sharing not available on this device"))}},Ae=async()=>{const t=S.filter(i=>v.has(i.id));if(t.length!==0)try{const i=t[0],l=i.uri.startsWith("file://")||i.uri.startsWith("content://")||i.uri.startsWith("http")?i.uri:`file://${i.uri}`;await Te.share({url:l,title:i.filename,message:t.length===1?i.filename:`${t.length} items: ${t.map(a=>a.filename).join(", ")}`})}catch{$(r("mediaGallery.shareUnavailable","Sharing not available on this device"))}},$e=()=>{const t=v.size;t!==0&&F({visible:!0,title:r("mediaGallery.deleteSelectedTitle","Delete Selected Media"),message:r("mediaGallery.deleteSelectedMessage",{count:t,defaultValue:`Are you sure you want to permanently delete ${t} media items?`}),confirmText:r("mediaGallery.delete","Delete"),cancelText:r("common.cancel","Cancel"),onConfirm:async()=>{F(a=>({...a,visible:!1}));const i=S.filter(a=>v.has(a.id));for(const a of i)await L.deleteMedia(a.uri);j(new Set),await D(),await W?.()===0&&E("apis"),$(r("mediaGallery.deletedCount",{count:i.length}))}})},Fe=()=>{F({visible:!0,title:r("mediaGallery.purgeTitle","Purge Gallery"),message:r("mediaGallery.purgeMessage",{count:S.length,size:U(N),defaultValue:`Are you sure you want to delete all ${S.length} media files (${U(N)})? This cannot be undone.`}),confirmText:r("common.clearAll","Clear All"),cancelText:r("common.cancel","Cancel"),onConfirm:async()=>{F(t=>({...t,visible:!1})),await L.clearAllMedia(),j(new Set),await D(),await W?.(),E("apis"),$(r("mediaGallery.allPurged"))}})},Oe=async t=>{await L.convertToGif(t.uri,{fps:12,width:480})&&(await D(),W?.().catch(()=>{}))},Pe=(t,i)=>{const l=i?e.sky400:e.slate400,a=12;switch(t){case"all":return<Ye size={a}color={l}/>;case"image":return<P size={a}color={l}/>;case"video":return<O size={a}color={l}/>;case"gif":return<Q size={a}color={l}/>}},Le=({item:t})=>{const i=t.type==="video",l=t.type==="gif",a=i?t.thumbnailUri:t.uri,G=v.has(t.id);return<Se onPress={()=>_(t)}style={[o.card,G&&o.cardSelected]}>
3
3
  <C style={o.thumbnailContainer}>
4
- {T?<Ce source={{uri:T}}style={o.thumbnail}resizeMode="cover"/>:<C style={o.thumbnailFallback}>
5
- {i?<$ size={26}color={e.sky400}/>:<F size={26}color={e.slate400}/>}
4
+ {a?<Ce source={{uri:a}}style={o.thumbnail}resizeMode="cover"/>:<C style={o.thumbnailFallback}>
5
+ {i?<O size={26}color={e.sky400}/>:<P size={26}color={e.slate400}/>}
6
6
  </C>}
7
7
 
8
8
 
9
- <I onPress={()=>Z(t.id)}style={[o.checkbox,D&&o.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
10
- {D&&<Ie size={12}color={e.white}/>}
9
+ <I onPress={()=>te(t.id)}style={[o.checkbox,G&&o.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
10
+ {G&&<Ie size={12}color={e.white}/>}
11
11
  </I>
12
12
 
13
13
  {i&&<C style={o.miniPlayCircle}>
14
14
  <Be size={14}color={e.white}/>
15
15
  </C>}
16
16
  <C style={o.typeBadge}>
17
- {i?<$ size={11}color={e.sky400}/>:l?<_ size={11}color={e.warningAmber}/>:<F size={11}color={e.emerald500}/>}
18
- <S style={o.typeBadgeText}>
17
+ {i?<O size={11}color={e.sky400}/>:l?<Q size={11}color={e.warningAmber}/>:<P size={11}color={e.emerald500}/>}
18
+ <T style={o.typeBadgeText}>
19
19
  {t.format.toUpperCase()}
20
- </S>
20
+ </T>
21
21
  </C>
22
22
  </C>
23
23
 
24
24
  <C style={o.cardInfo}>
25
- <S style={o.cardTitle}numberOfLines={1}>
25
+ <T style={o.cardTitle}numberOfLines={1}>
26
26
  {t.filename}
27
- </S>
27
+ </T>
28
28
  <C style={o.cardMetaRow}>
29
29
  <C style={{flexDirection:"row",alignItems:"center",gap:4,flex:1,minWidth:0}}>
30
- <S style={o.cardMeta}numberOfLines={1}>
30
+ <T style={o.cardMeta}numberOfLines={1}>
31
31
  {U(t.sizeBytes)}
32
- </S>
33
- <S style={o.cardMetaDot}>•</S>
34
- <S style={o.cardMeta}numberOfLines={1}>
32
+ </T>
33
+ <T style={o.cardMetaDot}>•</T>
34
+ <T style={o.cardMeta}numberOfLines={1}>
35
35
  {new Date(t.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}
36
- </S>
36
+ </T>
37
37
  </C>
38
- <I onPress={()=>ee(t)}style={o.gridCopyBtn}hitSlop={{top:6,bottom:6,left:6,right:6}}>
39
- <E size={11}color={e.slate400}/>
38
+ <I onPress={()=>ie(t)}style={o.gridCopyBtn}hitSlop={{top:6,bottom:6,left:6,right:6}}>
39
+ <J size={11}color={e.slate400}/>
40
40
  </I>
41
41
  </C>
42
42
  </C>
43
- </Se>},Ue=({item:t})=>{const i=t.type==="video",l=t.type==="gif",T=i?t.thumbnailUri:t.uri,D=v.has(t.id);return<Se onPress={()=>j(t)}style={[o.listRow,D&&o.listRowSelected]}>
43
+ </Se>},Ue=({item:t})=>{const i=t.type==="video",l=t.type==="gif",a=i?t.thumbnailUri:t.uri,G=v.has(t.id);return<Se onPress={()=>_(t)}style={[o.listRow,G&&o.listRowSelected]}>
44
44
 
45
- <I onPress={()=>Z(t.id)}style={[o.listCheckbox,D&&o.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
46
- {D&&<Ie size={12}color={e.white}/>}
45
+ <I onPress={()=>te(t.id)}style={[o.listCheckbox,G&&o.checkboxSelected]}hitSlop={{top:8,bottom:8,left:8,right:8}}>
46
+ {G&&<Ie size={12}color={e.white}/>}
47
47
  </I>
48
48
 
49
49
 
50
50
  <C style={o.listThumbContainer}>
51
- {T?<Ce source={{uri:T}}style={o.listThumb}resizeMode="cover"/>:<C style={o.listThumbFallback}>
52
- {i?<$ size={18}color={e.sky400}/>:<F size={18}color={e.slate400}/>}
51
+ {a?<Ce source={{uri:a}}style={o.listThumb}resizeMode="cover"/>:<C style={o.listThumbFallback}>
52
+ {i?<O size={18}color={e.sky400}/>:<P size={18}color={e.slate400}/>}
53
53
  </C>}
54
54
  {i&&<C style={o.listMiniPlay}>
55
55
  <Be size={10}color={e.white}/>
@@ -58,108 +58,110 @@ import{useState as W,useEffect as He,useMemo as te,useCallback as oe}from"react"
58
58
 
59
59
 
60
60
  <C style={o.listInfo}>
61
- <S style={o.listTitle}numberOfLines={1}>
61
+ <T style={o.listTitle}numberOfLines={1}>
62
62
  {t.filename}
63
- </S>
63
+ </T>
64
64
  <C style={o.listMetaRow}>
65
65
  <C style={o.listBadge}>
66
- {i?<$ size={10}color={e.sky400}/>:l?<_ size={10}color={e.warningAmber}/>:<F size={10}color={e.emerald500}/>}
67
- <S style={o.listBadgeText}>
66
+ {i?<O size={10}color={e.sky400}/>:l?<Q size={10}color={e.warningAmber}/>:<P size={10}color={e.emerald500}/>}
67
+ <T style={o.listBadgeText}>
68
68
  {t.format.toUpperCase()}
69
- </S>
69
+ </T>
70
70
  </C>
71
- <S style={o.cardMeta}>
71
+ <T style={o.cardMeta}>
72
72
  {U(t.sizeBytes)}
73
- </S>
74
- <S style={o.cardMetaDot}>•</S>
75
- <S style={o.cardMeta}>
73
+ </T>
74
+ <T style={o.cardMetaDot}>•</T>
75
+ <T style={o.cardMeta}>
76
76
  {new Date(t.timestamp).toLocaleDateString([],{month:"short",day:"numeric"})}{" "}
77
77
  {new Date(t.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}
78
- </S>
78
+ </T>
79
79
  </C>
80
80
  </C>
81
81
 
82
82
 
83
83
  <C style={o.listActionsRow}>
84
- <I onPress={()=>ee(t)}style={o.listCopyBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
85
- <E size={13}color={e.slate200}/>
84
+ <I onPress={()=>ie(t)}style={o.listCopyBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
85
+ <J size={13}color={e.slate200}/>
86
86
  </I>
87
87
 
88
88
  <I onPress={()=>We(t)}style={o.listShareBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
89
89
  <Re size={13}color={e.sky400}/>
90
90
  </I>
91
91
 
92
- <I onPress={()=>K(t)}style={o.listDeleteBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
93
- <N size={13}color={e.red500}/>
92
+ <I onPress={()=>oe(t)}style={o.listDeleteBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
93
+ <X size={13}color={e.red500}/>
94
94
  </I>
95
95
  </C>
96
96
  </Se>};return<C style={o.container}>
97
97
 
98
98
  <C style={o.filterBar}>
99
99
  <C style={o.chipGroup}>
100
- {["all","image","video","gif"].map(t=>{const i=O===t,l=t==="all"?r("mediaGallery.all",{count:x.length}):r(t==="image"?"mediaGallery.photos":t==="video"?"mediaGallery.videos":"mediaGallery.gifs");return<I key={t}onPress={()=>Me(t)}style={[o.chip,i&&o.chipActive]}>
101
- {Oe(t,i)}
102
- <S style={[o.chipText,i&&o.chipTextActive]}>
100
+ {["all","image","video","gif"].map(t=>{const i=H===t,l=t==="all"?r("mediaGallery.all",{count:S.length}):r(t==="image"?"mediaGallery.photos":t==="video"?"mediaGallery.videos":"mediaGallery.gifs");return<I key={t}onPress={()=>De(t)}style={[o.chip,i&&o.chipActive]}>
101
+ {Pe(t,i)}
102
+ <T style={[o.chipText,i&&o.chipTextActive]}>
103
103
  {l}
104
- </S>
104
+ </T>
105
105
  </I>})}
106
106
  </C>
107
107
 
108
108
 
109
109
  <C style={o.viewToggleContainer}>
110
- <I onPress={()=>X("grid")}style={[o.viewToggleBtn,R==="grid"&&o.viewToggleBtnActive]}>
110
+ <I onPress={()=>ee("grid")}style={[o.viewToggleBtn,R==="grid"&&o.viewToggleBtnActive]}>
111
111
  <Qe size={13}color={R==="grid"?e.white:e.slate400}/>
112
112
  </I>
113
- <I onPress={()=>X("list")}style={[o.viewToggleBtn,R==="list"&&o.viewToggleBtnActive]}>
113
+ <I onPress={()=>ee("list")}style={[o.viewToggleBtn,R==="list"&&o.viewToggleBtnActive]}>
114
114
  <Xe size={13}color={R==="list"?e.white:e.slate400}/>
115
115
  </I>
116
116
  </C>
117
117
  </C>
118
118
 
119
119
 
120
- {x.length>0&&<C style={o.subBar}>
120
+ {S.length>0&&<C style={o.subBar}>
121
121
  <C style={o.resultCountWrapper}>
122
- <S style={[o.resultCountText,v.size>0&&o.resultCountTextSelected]}>
123
- {v.size>0?r("mediaGallery.selectedOfResults",{selected:v.size,total:G.length,defaultValue:`Selected ${v.size} of ${G.length} results`}):G.length!==x.length?r("mediaGallery.showingFilteredResults",{count:G.length,total:x.length,defaultValue:`Showing ${G.length} of ${x.length} results`}):r("mediaGallery.showingResults",{count:G.length,defaultValue:`Showing ${G.length} results`})}
124
- </S>
122
+ <T style={[o.resultCountText,v.size>0&&o.resultCountTextSelected]}>
123
+ {v.size>0?r("mediaGallery.selectedOfResults",{selected:v.size,total:M.length,defaultValue:`Selected ${v.size} of ${M.length} results`}):M.length!==S.length?r("mediaGallery.showingFilteredResults",{count:M.length,total:S.length,defaultValue:`Showing ${M.length} of ${S.length} results`}):r("mediaGallery.showingResults",{count:M.length,defaultValue:`Showing ${M.length} results`})}
124
+ </T>
125
125
  </C>
126
126
 
127
127
  <C style={o.actionsGroup}>
128
128
  {v.size>0&&<>
129
129
  <I onPress={Ve}style={o.copySelectedBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
130
- <E size={12}color={e.slate200}/>
131
- <S style={o.copySelectedBtnText}>
130
+ <J size={12}color={e.slate200}/>
131
+ <T style={o.copySelectedBtnText}>
132
132
  {r("mediaGallery.copyUri","Copy URI")}
133
- </S>
133
+ </T>
134
134
  </I>
135
135
 
136
136
  <I onPress={Ae}style={o.shareSelectedBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
137
137
  <Re size={12}color={e.sky400}/>
138
- <S style={o.shareSelectedBtnText}>
138
+ <T style={o.shareSelectedBtnText}>
139
139
  {r("mediaGallery.share","Share")}
140
- </S>
140
+ </T>
141
141
  </I>
142
142
 
143
143
  <I onPress={$e}style={o.deleteBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
144
- <N size={13}color={e.red500}/>
145
- <S style={o.deleteBtnText}>
144
+ <X size={13}color={e.red500}/>
145
+ <T style={o.deleteBtnText}>
146
146
  {r("mediaGallery.deleteSelected",{count:v.size})}
147
- </S>
147
+ </T>
148
148
  </I>
149
149
  </>}
150
150
 
151
151
  <I onPress={Fe}style={o.clearBtn}hitSlop={{top:8,bottom:8,left:8,right:8}}>
152
- <N size={13}color={e.red500}/>
153
- <S style={o.clearBtnText}>
154
- {r("mediaGallery.purge",{size:U(Y)})}
155
- </S>
152
+ <X size={13}color={e.red500}/>
153
+ <T style={o.clearBtnText}>
154
+ {r("mediaGallery.purge",{size:U(N)})}
155
+ </T>
156
156
  </I>
157
157
  </C>
158
158
  </C>}
159
159
 
160
160
 
161
- <Ee key={R}data={G}keyExtractor={t=>t.id}renderItem={R==="grid"?Le:Ue}numColumns={R==="grid"?2:1}columnWrapperStyle={R==="grid"?o.columnWrapper:void 0}contentContainerStyle={o.listContent}refreshControl={<_e refreshing={Ge}onRefresh={De}tintColor={e.sky400}/>}ListEmptyComponent={<Je customTitle={r("mediaGallery.noMediaTitle")}customSub={r("mediaGallery.noMediaDesc")}showReload={!1}/>}/>
161
+ <Ee key={R}data={M}keyExtractor={t=>t.id}renderItem={R==="grid"?Le:Ue}numColumns={R==="grid"?2:1}columnWrapperStyle={R==="grid"?o.columnWrapper:void 0}contentContainerStyle={o.listContent}refreshControl={<_e refreshing={Me}onRefresh={Ge}tintColor={e.sky400}/>}ListEmptyComponent={<Je customTitle={r("mediaGallery.noMediaTitle")}customSub={r("mediaGallery.noMediaDesc")}showReload={!1}/>}/>
162
162
 
163
163
 
164
- <Ze item={Q}visible={!!Q}onClose={()=>j(null)}onDelete={K}onConvertToGif={Pe}/>
165
- </C>};const{width:it}=je.get("window"),rt=(it-36)/2,o=Ne.create({container:{flex:1,backgroundColor:e.slate850},filterBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:9,borderBottomWidth:1,borderBottomColor:e.borderGlassLight,gap:8},chipGroup:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},chip:{flexDirection:"row",alignItems:"center",gap:4.5,paddingHorizontal:8,paddingVertical:4.5,borderRadius:6,backgroundColor:e.whiteAlpha06,borderWidth:1,borderColor:e.whiteAlpha10},chipActive:{backgroundColor:`${e.sky400}2E`,borderColor:e.sky400},chipText:{fontFamily:B.interMedium,fontSize:11,color:e.slate400},chipTextActive:{fontFamily:B.interBold,color:e.sky400},subBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:7,backgroundColor:`${e.slate900}99`,borderBottomWidth:1,borderBottomColor:e.borderGlassLight,gap:8},resultCountWrapper:{flexDirection:"row",alignItems:"center",flexShrink:1},resultCountText:{fontFamily:B.interMedium,fontSize:11,color:e.slate400},resultCountTextSelected:{fontFamily:B.interSemiBold,color:e.sky400},actionsGroup:{flexDirection:"row",alignItems:"center",gap:6},viewToggleContainer:{flexDirection:"row",alignItems:"center",backgroundColor:e.whiteAlpha06,borderRadius:6,padding:2,borderWidth:1,borderColor:e.whiteAlpha10},viewToggleBtn:{paddingHorizontal:7,paddingVertical:4,borderRadius:4,alignItems:"center",justifyContent:"center"},viewToggleBtnActive:{backgroundColor:`${e.violet600}80`},deleteBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.red500}26`,borderWidth:1,borderColor:`${e.red500}80`},deleteBtnText:{fontFamily:B.interBold,fontSize:10.5,color:e.red500},clearBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.red500}1F`,borderWidth:1,borderColor:`${e.red500}4D`},clearBtnText:{fontFamily:B.interMedium,fontSize:10.5,color:e.red500},listContent:{padding:12,gap:10},columnWrapper:{gap:12},card:{width:rt,backgroundColor:e.slate800,borderRadius:8,borderWidth:1,borderColor:e.borderGlassLight,overflow:"hidden"},cardSelected:{borderColor:e.violet600,borderWidth:1.5},thumbnailContainer:{width:"100%",height:110,backgroundColor:e.slate850,position:"relative"},thumbnail:{width:"100%",height:"100%"},thumbnailFallback:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",backgroundColor:e.slate900},checkbox:{position:"absolute",top:6,left:6,width:22,height:22,borderRadius:5,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.65)",backgroundColor:"rgba(15, 23, 42, 0.65)",alignItems:"center",justifyContent:"center",zIndex:10},checkboxSelected:{backgroundColor:e.violet600,borderColor:e.violet600},miniPlayCircle:{position:"absolute",top:"50%",left:"50%",width:32,height:32,marginTop:-16,marginLeft:-16,borderRadius:16,backgroundColor:`${e.sky400}D9`,alignItems:"center",justifyContent:"center",paddingLeft:2,shadowColor:e.black,shadowOffset:{width:0,height:2},shadowOpacity:.4,shadowRadius:4,elevation:4},typeBadge:{position:"absolute",top:6,right:6,flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.badgeGlassDark,paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1,borderColor:e.borderGlassMedium},typeBadgeText:{fontFamily:B.interBold,fontSize:9,color:e.slate200},cardInfo:{padding:8,gap:3},cardTitle:{fontFamily:B.interMedium,fontSize:11.5,color:e.white},cardMetaRow:{flexDirection:"row",alignItems:"center",gap:4},cardMeta:{fontFamily:B.interRegular,fontSize:10,color:e.slate400},cardMetaDot:{fontSize:10,color:e.whiteAlpha30},listRow:{flexDirection:"row",alignItems:"center",backgroundColor:e.slate800,borderRadius:8,borderWidth:1,borderColor:e.borderGlassLight,padding:8,gap:10},listRowSelected:{borderColor:e.violet600,borderWidth:1.5,backgroundColor:`${e.violet600}14`},listCheckbox:{width:20,height:20,borderRadius:4,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.65)",backgroundColor:"rgba(15, 23, 42, 0.65)",alignItems:"center",justifyContent:"center"},listThumbContainer:{width:46,height:46,borderRadius:6,backgroundColor:e.slate850,overflow:"hidden",position:"relative"},listThumb:{width:"100%",height:"100%"},listThumbFallback:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",backgroundColor:e.slate900},listMiniPlay:{position:"absolute",top:"50%",left:"50%",width:20,height:20,marginTop:-10,marginLeft:-10,borderRadius:10,backgroundColor:`${e.sky400}D9`,alignItems:"center",justifyContent:"center",paddingLeft:1},listInfo:{flex:1,gap:4,minWidth:0},listTitle:{fontFamily:B.interMedium,fontSize:12,color:e.white},listMetaRow:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},listBadge:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.badgeGlassDark,paddingHorizontal:4,paddingVertical:1.5,borderRadius:4,borderWidth:1,borderColor:e.borderGlassMedium},listBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.slate200},gridCopyBtn:{padding:3,borderRadius:4,backgroundColor:e.whiteAlpha08},listActionsRow:{flexDirection:"row",alignItems:"center",gap:6},listCopyBtn:{padding:6,borderRadius:6,backgroundColor:e.whiteAlpha10,borderWidth:1,borderColor:e.whiteAlpha15},listShareBtn:{padding:6,borderRadius:6,backgroundColor:`${e.sky400}18`,borderWidth:1,borderColor:`${e.sky400}40`},listDeleteBtn:{padding:6,borderRadius:6,backgroundColor:`${e.red500}14`,borderWidth:1,borderColor:`${e.red500}33`},copySelectedBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:e.whiteAlpha10,borderWidth:1,borderColor:e.whiteAlpha20},copySelectedBtnText:{fontFamily:B.interSemiBold,fontSize:10.5,color:e.slate200},shareSelectedBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.sky400}20`,borderWidth:1,borderColor:`${e.sky400}60`},shareSelectedBtnText:{fontFamily:B.interBold,fontSize:10.5,color:e.sky400}});
164
+ <Ze item={K}visible={!!K}onClose={()=>_(null)}onDelete={oe}onConvertToGif={Oe}/>
165
+
166
+ <Ct visible={A.visible}title={A.title}message={A.message}confirmText={A.confirmText}cancelText={A.cancelText}isDestructive={!0}icon="trash"onConfirm={A.onConfirm}onCancel={()=>F(t=>({...t,visible:!1}))}/>
167
+ </C>};const{width:Tt}=je.get("window"),St=(Tt-36)/2,o=Ne.create({container:{flex:1,backgroundColor:e.slate850},filterBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:9,borderBottomWidth:1,borderBottomColor:e.borderGlassLight,gap:8},chipGroup:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},chip:{flexDirection:"row",alignItems:"center",gap:4.5,paddingHorizontal:8,paddingVertical:4.5,borderRadius:6,backgroundColor:e.whiteAlpha06,borderWidth:1,borderColor:e.whiteAlpha10},chipActive:{backgroundColor:`${e.sky400}2E`,borderColor:e.sky400},chipText:{fontFamily:B.interMedium,fontSize:11,color:e.slate400},chipTextActive:{fontFamily:B.interBold,color:e.sky400},subBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:7,backgroundColor:`${e.slate900}99`,borderBottomWidth:1,borderBottomColor:e.borderGlassLight,gap:8},resultCountWrapper:{flexDirection:"row",alignItems:"center",flexShrink:1},resultCountText:{fontFamily:B.interMedium,fontSize:11,color:e.slate400},resultCountTextSelected:{fontFamily:B.interSemiBold,color:e.sky400},actionsGroup:{flexDirection:"row",alignItems:"center",gap:6},viewToggleContainer:{flexDirection:"row",alignItems:"center",backgroundColor:e.whiteAlpha06,borderRadius:6,padding:2,borderWidth:1,borderColor:e.whiteAlpha10},viewToggleBtn:{paddingHorizontal:7,paddingVertical:4,borderRadius:4,alignItems:"center",justifyContent:"center"},viewToggleBtnActive:{backgroundColor:`${e.violet600}80`},deleteBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.red500}26`,borderWidth:1,borderColor:`${e.red500}80`},deleteBtnText:{fontFamily:B.interBold,fontSize:10.5,color:e.red500},clearBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.red500}1F`,borderWidth:1,borderColor:`${e.red500}4D`},clearBtnText:{fontFamily:B.interMedium,fontSize:10.5,color:e.red500},listContent:{padding:12,gap:10},columnWrapper:{gap:12},card:{width:St,backgroundColor:e.slate800,borderRadius:8,borderWidth:1,borderColor:e.borderGlassLight,overflow:"hidden"},cardSelected:{borderColor:e.violet600,borderWidth:1.5},thumbnailContainer:{width:"100%",height:110,backgroundColor:e.slate850,position:"relative"},thumbnail:{width:"100%",height:"100%"},thumbnailFallback:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",backgroundColor:e.slate900},checkbox:{position:"absolute",top:6,left:6,width:22,height:22,borderRadius:5,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.65)",backgroundColor:"rgba(15, 23, 42, 0.65)",alignItems:"center",justifyContent:"center",zIndex:10},checkboxSelected:{backgroundColor:e.violet600,borderColor:e.violet600},miniPlayCircle:{position:"absolute",top:"50%",left:"50%",width:32,height:32,marginTop:-16,marginLeft:-16,borderRadius:16,backgroundColor:`${e.sky400}D9`,alignItems:"center",justifyContent:"center",paddingLeft:2,shadowColor:e.black,shadowOffset:{width:0,height:2},shadowOpacity:.4,shadowRadius:4,elevation:4},typeBadge:{position:"absolute",top:6,right:6,flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.badgeGlassDark,paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1,borderColor:e.borderGlassMedium},typeBadgeText:{fontFamily:B.interBold,fontSize:9,color:e.slate200},cardInfo:{padding:8,gap:3},cardTitle:{fontFamily:B.interMedium,fontSize:11.5,color:e.white},cardMetaRow:{flexDirection:"row",alignItems:"center",gap:4},cardMeta:{fontFamily:B.interRegular,fontSize:10,color:e.slate400},cardMetaDot:{fontSize:10,color:e.whiteAlpha30},listRow:{flexDirection:"row",alignItems:"center",backgroundColor:e.slate800,borderRadius:8,borderWidth:1,borderColor:e.borderGlassLight,padding:8,gap:10},listRowSelected:{borderColor:e.violet600,borderWidth:1.5,backgroundColor:`${e.violet600}14`},listCheckbox:{width:20,height:20,borderRadius:4,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.65)",backgroundColor:"rgba(15, 23, 42, 0.65)",alignItems:"center",justifyContent:"center"},listThumbContainer:{width:46,height:46,borderRadius:6,backgroundColor:e.slate850,overflow:"hidden",position:"relative"},listThumb:{width:"100%",height:"100%"},listThumbFallback:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",backgroundColor:e.slate900},listMiniPlay:{position:"absolute",top:"50%",left:"50%",width:20,height:20,marginTop:-10,marginLeft:-10,borderRadius:10,backgroundColor:`${e.sky400}D9`,alignItems:"center",justifyContent:"center",paddingLeft:1},listInfo:{flex:1,gap:4,minWidth:0},listTitle:{fontFamily:B.interMedium,fontSize:12,color:e.white},listMetaRow:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},listBadge:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.badgeGlassDark,paddingHorizontal:4,paddingVertical:1.5,borderRadius:4,borderWidth:1,borderColor:e.borderGlassMedium},listBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.slate200},gridCopyBtn:{padding:3,borderRadius:4,backgroundColor:e.whiteAlpha08},listActionsRow:{flexDirection:"row",alignItems:"center",gap:6},listCopyBtn:{padding:6,borderRadius:6,backgroundColor:e.whiteAlpha10,borderWidth:1,borderColor:e.whiteAlpha15},listShareBtn:{padding:6,borderRadius:6,backgroundColor:`${e.sky400}18`,borderWidth:1,borderColor:`${e.sky400}40`},listDeleteBtn:{padding:6,borderRadius:6,backgroundColor:`${e.red500}14`,borderWidth:1,borderColor:`${e.red500}33`},copySelectedBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:e.whiteAlpha10,borderWidth:1,borderColor:e.whiteAlpha20},copySelectedBtnText:{fontFamily:B.interSemiBold,fontSize:10.5,color:e.slate200},shareSelectedBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.sky400}20`,borderWidth:1,borderColor:`${e.sky400}60`},shareSelectedBtnText:{fontFamily:B.interBold,fontSize:10.5,color:e.sky400}});