react-native-ensys-camera-x 1.0.7

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 (506) hide show
  1. package/CustomCamera.podspec +20 -0
  2. package/LICENSE +20 -0
  3. package/README.md +833 -0
  4. package/android/build.gradle +135 -0
  5. package/android/consumer-rules.pro +47 -0
  6. package/android/src/main/AndroidManifest.xml +72 -0
  7. package/android/src/main/java/android/print/PdfPrint.java +51 -0
  8. package/android/src/main/java/com/customcamera/AnimatedImageViewManager.kt +199 -0
  9. package/android/src/main/java/com/customcamera/AudioPlayerView.kt +322 -0
  10. package/android/src/main/java/com/customcamera/AudioRecorder.kt +506 -0
  11. package/android/src/main/java/com/customcamera/BarcodeScannerActivity.kt +361 -0
  12. package/android/src/main/java/com/customcamera/BlurBackgroundView.kt +199 -0
  13. package/android/src/main/java/com/customcamera/CacheCleanupManager.kt +386 -0
  14. package/android/src/main/java/com/customcamera/CameraAspectRatioMode.kt +77 -0
  15. package/android/src/main/java/com/customcamera/CameraAsset.kt +211 -0
  16. package/android/src/main/java/com/customcamera/CameraTheme.kt +479 -0
  17. package/android/src/main/java/com/customcamera/CompressionCacheStore.kt +504 -0
  18. package/android/src/main/java/com/customcamera/CompressionFileNameUtils.kt +7 -0
  19. package/android/src/main/java/com/customcamera/CompressionProfile.kt +195 -0
  20. package/android/src/main/java/com/customcamera/CustomCameraActivity.kt +7291 -0
  21. package/android/src/main/java/com/customcamera/CustomCameraFileProvider.kt +9 -0
  22. package/android/src/main/java/com/customcamera/CustomCameraModule.kt +2479 -0
  23. package/android/src/main/java/com/customcamera/CustomCameraPackage.kt +53 -0
  24. package/android/src/main/java/com/customcamera/DisplayUtils.kt +9 -0
  25. package/android/src/main/java/com/customcamera/DocumentPreviewView.kt +846 -0
  26. package/android/src/main/java/com/customcamera/DrawingView.kt +214 -0
  27. package/android/src/main/java/com/customcamera/EmojiPickerData.kt +228 -0
  28. package/android/src/main/java/com/customcamera/FilterStripAdapter.kt +158 -0
  29. package/android/src/main/java/com/customcamera/GifSupport.kt +215 -0
  30. package/android/src/main/java/com/customcamera/GlobalAudioPlayer.kt +320 -0
  31. package/android/src/main/java/com/customcamera/ImageExporter.kt +1394 -0
  32. package/android/src/main/java/com/customcamera/ImageFormatSupport.kt +163 -0
  33. package/android/src/main/java/com/customcamera/Localization.kt +206 -0
  34. package/android/src/main/java/com/customcamera/MediaAdapters.kt +758 -0
  35. package/android/src/main/java/com/customcamera/MediaCacheManager.kt +782 -0
  36. package/android/src/main/java/com/customcamera/MediaExportFormats.kt +201 -0
  37. package/android/src/main/java/com/customcamera/MediaFileIo.kt +310 -0
  38. package/android/src/main/java/com/customcamera/MediaMetadataStore.kt +494 -0
  39. package/android/src/main/java/com/customcamera/MediaPreviewEditor.kt +14865 -0
  40. package/android/src/main/java/com/customcamera/MediaPublisher.kt +423 -0
  41. package/android/src/main/java/com/customcamera/MediaStorageWorkflow.kt +722 -0
  42. package/android/src/main/java/com/customcamera/MediaStoreRepository.kt +378 -0
  43. package/android/src/main/java/com/customcamera/MediaThumbnailView.kt +286 -0
  44. package/android/src/main/java/com/customcamera/MediaUtils.kt +37 -0
  45. package/android/src/main/java/com/customcamera/NativeVideoViewManager.kt +845 -0
  46. package/android/src/main/java/com/customcamera/OfficeDocumentConverter.kt +2791 -0
  47. package/android/src/main/java/com/customcamera/PendingCaptureCrops.kt +88 -0
  48. package/android/src/main/java/com/customcamera/PowerPointPreview.kt +4077 -0
  49. package/android/src/main/java/com/customcamera/RecentPickerStore.kt +74 -0
  50. package/android/src/main/java/com/customcamera/SecureFileEraser.kt +411 -0
  51. package/android/src/main/java/com/customcamera/SecureKeyModule.kt +88 -0
  52. package/android/src/main/java/com/customcamera/SecureMediaDeleter.kt +493 -0
  53. package/android/src/main/java/com/customcamera/StickerPickerData.kt +107 -0
  54. package/android/src/main/java/com/customcamera/SvgDrawable.kt +175 -0
  55. package/android/src/main/java/com/customcamera/SvgIconViewManager.kt +77 -0
  56. package/android/src/main/java/com/customcamera/TextEntryController.kt +553 -0
  57. package/android/src/main/java/com/customcamera/ThumbnailLoader.kt +455 -0
  58. package/android/src/main/java/com/customcamera/UploadService.kt +909 -0
  59. package/android/src/main/java/com/customcamera/VideoEditUtils.kt +210 -0
  60. package/android/src/main/java/com/customcamera/VideoRotationTranscoder.kt +1992 -0
  61. package/android/src/main/java/com/customcamera/gif/AnimatedGifEncoder.kt +473 -0
  62. package/android/src/main/java/com/customcamera/gif/GifDecoder.kt +690 -0
  63. package/android/src/main/java/com/customcamera/gif/GifFramesDrawable.kt +160 -0
  64. package/android/src/main/java/com/customcamera/gif/GifHttp.kt +112 -0
  65. package/android/src/main/java/com/customcamera/gif/GifImageLoader.kt +186 -0
  66. package/android/src/main/java/com/customcamera/gif/GifModels.kt +74 -0
  67. package/android/src/main/java/com/customcamera/gif/GifProvider.kt +49 -0
  68. package/android/src/main/java/com/customcamera/gif/GifProviders.kt +27 -0
  69. package/android/src/main/java/com/customcamera/gif/GifRepository.kt +124 -0
  70. package/android/src/main/java/com/customcamera/gif/GifSafety.kt +33 -0
  71. package/android/src/main/java/com/customcamera/gif/GiphyGifProvider.kt +146 -0
  72. package/android/src/main/java/com/customcamera/gif/LZWEncoder.kt +258 -0
  73. package/android/src/main/java/com/customcamera/gif/NeuQuant.kt +435 -0
  74. package/android/src/main/java/com/customcamera/gif/TenorGifProvider.kt +147 -0
  75. package/android/src/main/res/drawable/bg_brush_selected.xml +5 -0
  76. package/android/src/main/res/drawable/bg_color_swatch.xml +5 -0
  77. package/android/src/main/res/drawable/bg_editor_toolbar.xml +6 -0
  78. package/android/src/main/res/drawable/bg_icon_circle.xml +5 -0
  79. package/android/src/main/res/drawable/bg_icon_circle_light.xml +5 -0
  80. package/android/src/main/res/drawable/bg_mode_tab_active.xml +6 -0
  81. package/android/src/main/res/drawable/bg_pill.xml +6 -0
  82. package/android/src/main/res/drawable/bg_recording_dot.xml +6 -0
  83. package/android/src/main/res/drawable/bg_selection_badge.xml +8 -0
  84. package/android/src/main/res/drawable/bg_send_button.xml +5 -0
  85. package/android/src/main/res/drawable/bg_shutter_inner.xml +5 -0
  86. package/android/src/main/res/drawable/bg_shutter_recording.xml +6 -0
  87. package/android/src/main/res/drawable/bg_shutter_ring.xml +8 -0
  88. package/android/src/main/res/drawable/bg_shutter_video_idle.xml +5 -0
  89. package/android/src/main/res/drawable/bg_thumbnail.xml +9 -0
  90. package/android/src/main/res/drawable/ic_aspect_ratio.xml +17 -0
  91. package/android/src/main/res/drawable/ic_audio.xml +10 -0
  92. package/android/src/main/res/drawable/ic_back.xml +10 -0
  93. package/android/src/main/res/drawable/ic_brush_medium.xml +12 -0
  94. package/android/src/main/res/drawable/ic_brush_thick.xml +12 -0
  95. package/android/src/main/res/drawable/ic_brush_thin.xml +12 -0
  96. package/android/src/main/res/drawable/ic_check.xml +17 -0
  97. package/android/src/main/res/drawable/ic_chevron_down.xml +10 -0
  98. package/android/src/main/res/drawable/ic_chevron_up.xml +13 -0
  99. package/android/src/main/res/drawable/ic_clear_drawing.xml +10 -0
  100. package/android/src/main/res/drawable/ic_close.xml +10 -0
  101. package/android/src/main/res/drawable/ic_cover.xml +9 -0
  102. package/android/src/main/res/drawable/ic_crop.xml +10 -0
  103. package/android/src/main/res/drawable/ic_delete.xml +9 -0
  104. package/android/src/main/res/drawable/ic_document.xml +10 -0
  105. package/android/src/main/res/drawable/ic_done.xml +10 -0
  106. package/android/src/main/res/drawable/ic_download.xml +10 -0
  107. package/android/src/main/res/drawable/ic_emoji.xml +10 -0
  108. package/android/src/main/res/drawable/ic_filter.xml +10 -0
  109. package/android/src/main/res/drawable/ic_flash_auto.xml +7 -0
  110. package/android/src/main/res/drawable/ic_flash_off.xml +23 -0
  111. package/android/src/main/res/drawable/ic_flash_on.xml +16 -0
  112. package/android/src/main/res/drawable/ic_flip.xml +15 -0
  113. package/android/src/main/res/drawable/ic_gallery.xml +10 -0
  114. package/android/src/main/res/drawable/ic_gif.xml +24 -0
  115. package/android/src/main/res/drawable/ic_lock.xml +19 -0
  116. package/android/src/main/res/drawable/ic_lock_open.xml +22 -0
  117. package/android/src/main/res/drawable/ic_marker.xml +10 -0
  118. package/android/src/main/res/drawable/ic_more_vert.xml +18 -0
  119. package/android/src/main/res/drawable/ic_overlay_close.xml +19 -0
  120. package/android/src/main/res/drawable/ic_overlay_resize.xml +18 -0
  121. package/android/src/main/res/drawable/ic_pause.xml +10 -0
  122. package/android/src/main/res/drawable/ic_photo_mode.xml +10 -0
  123. package/android/src/main/res/drawable/ic_play.xml +10 -0
  124. package/android/src/main/res/drawable/ic_redo.xml +10 -0
  125. package/android/src/main/res/drawable/ic_rotate.xml +9 -0
  126. package/android/src/main/res/drawable/ic_send.xml +10 -0
  127. package/android/src/main/res/drawable/ic_share.xml +10 -0
  128. package/android/src/main/res/drawable/ic_stat_upload.xml +10 -0
  129. package/android/src/main/res/drawable/ic_sticker.xml +24 -0
  130. package/android/src/main/res/drawable/ic_text.xml +10 -0
  131. package/android/src/main/res/drawable/ic_text_align_center.xml +11 -0
  132. package/android/src/main/res/drawable/ic_text_align_left.xml +11 -0
  133. package/android/src/main/res/drawable/ic_text_align_right.xml +11 -0
  134. package/android/src/main/res/drawable/ic_text_bg.xml +11 -0
  135. package/android/src/main/res/drawable/ic_trim.xml +23 -0
  136. package/android/src/main/res/drawable/ic_undo.xml +10 -0
  137. package/android/src/main/res/drawable/ic_video_mode.xml +10 -0
  138. package/android/src/main/res/drawable/ic_video_note.xml +13 -0
  139. package/android/src/main/res/drawable/ic_volume_off.xml +9 -0
  140. package/android/src/main/res/drawable/ic_volume_on.xml +9 -0
  141. package/android/src/main/res/drawable/sticker_heart.xml +9 -0
  142. package/android/src/main/res/drawable/sticker_smile.xml +9 -0
  143. package/android/src/main/res/drawable/sticker_star.xml +9 -0
  144. package/android/src/main/res/drawable/sticker_thumbsup.xml +9 -0
  145. package/android/src/main/res/values/colors.xml +34 -0
  146. package/android/src/main/res/values/ids.xml +15 -0
  147. package/android/src/main/res/values/strings.xml +15 -0
  148. package/android/src/main/res/values/styles.xml +20 -0
  149. package/android/src/main/res/xml/file_paths.xml +34 -0
  150. package/ios/CustomCamera.h +5 -0
  151. package/ios/CustomCamera.mm +214 -0
  152. package/lib/module/AudioPlayerContext.js +233 -0
  153. package/lib/module/AudioPlayerContext.js.map +1 -0
  154. package/lib/module/CameraPreview.js +304 -0
  155. package/lib/module/CameraPreview.js.map +1 -0
  156. package/lib/module/NativeAnimatedImageView.js +41 -0
  157. package/lib/module/NativeAnimatedImageView.js.map +1 -0
  158. package/lib/module/NativeAudioPlayerView.js +33 -0
  159. package/lib/module/NativeAudioPlayerView.js.map +1 -0
  160. package/lib/module/NativeBlurView.js +35 -0
  161. package/lib/module/NativeBlurView.js.map +1 -0
  162. package/lib/module/NativeCustomCamera.js +128 -0
  163. package/lib/module/NativeCustomCamera.js.map +1 -0
  164. package/lib/module/NativeCustomCamera.web.js +143 -0
  165. package/lib/module/NativeCustomCamera.web.js.map +1 -0
  166. package/lib/module/NativeCustomVideoView.js +5 -0
  167. package/lib/module/NativeCustomVideoView.js.map +1 -0
  168. package/lib/module/NativeDocumentPreviewView.js +156 -0
  169. package/lib/module/NativeDocumentPreviewView.js.map +1 -0
  170. package/lib/module/NativeMediaThumbnailView.js +110 -0
  171. package/lib/module/NativeMediaThumbnailView.js.map +1 -0
  172. package/lib/module/NativeSvgIcon.js +32 -0
  173. package/lib/module/NativeSvgIcon.js.map +1 -0
  174. package/lib/module/ResponsivePreviewContainer.js +171 -0
  175. package/lib/module/ResponsivePreviewContainer.js.map +1 -0
  176. package/lib/module/accessibility.js +61 -0
  177. package/lib/module/accessibility.js.map +1 -0
  178. package/lib/module/config.js +352 -0
  179. package/lib/module/config.js.map +1 -0
  180. package/lib/module/cpuOptimization.js +296 -0
  181. package/lib/module/cpuOptimization.js.map +1 -0
  182. package/lib/module/db/DatabaseManager.js +191 -0
  183. package/lib/module/db/DatabaseManager.js.map +1 -0
  184. package/lib/module/db/MediaMapper.js +284 -0
  185. package/lib/module/db/MediaMapper.js.map +1 -0
  186. package/lib/module/db/MediaRepository.js +242 -0
  187. package/lib/module/db/MediaRepository.js.map +1 -0
  188. package/lib/module/db/index.js +41 -0
  189. package/lib/module/db/index.js.map +1 -0
  190. package/lib/module/db/migrations.js +180 -0
  191. package/lib/module/db/migrations.js.map +1 -0
  192. package/lib/module/db/react-native-sqlcipher.d.js +2 -0
  193. package/lib/module/db/react-native-sqlcipher.d.js.map +1 -0
  194. package/lib/module/db/secureKey.js +87 -0
  195. package/lib/module/db/secureKey.js.map +1 -0
  196. package/lib/module/db/types.js +57 -0
  197. package/lib/module/db/types.js.map +1 -0
  198. package/lib/module/db/useMediaDatabase.js +123 -0
  199. package/lib/module/db/useMediaDatabase.js.map +1 -0
  200. package/lib/module/defaultIcons.js +2259 -0
  201. package/lib/module/defaultIcons.js.map +1 -0
  202. package/lib/module/deviceCapabilities.js +408 -0
  203. package/lib/module/deviceCapabilities.js.map +1 -0
  204. package/lib/module/errors.js +267 -0
  205. package/lib/module/errors.js.map +1 -0
  206. package/lib/module/iconConfig.js +796 -0
  207. package/lib/module/iconConfig.js.map +1 -0
  208. package/lib/module/icons.js +514 -0
  209. package/lib/module/icons.js.map +1 -0
  210. package/lib/module/index.js +251 -0
  211. package/lib/module/index.js.map +1 -0
  212. package/lib/module/jest-globals.d.js +2 -0
  213. package/lib/module/jest-globals.d.js.map +1 -0
  214. package/lib/module/library/MediaLibrary.js +107 -0
  215. package/lib/module/library/MediaLibrary.js.map +1 -0
  216. package/lib/module/library/MediaLibraryScreen.js +2597 -0
  217. package/lib/module/library/MediaLibraryScreen.js.map +1 -0
  218. package/lib/module/library/components/AudioPreview.js +74 -0
  219. package/lib/module/library/components/AudioPreview.js.map +1 -0
  220. package/lib/module/library/components/DocumentPreview.js +331 -0
  221. package/lib/module/library/components/DocumentPreview.js.map +1 -0
  222. package/lib/module/library/components/ExpandableFab.js +343 -0
  223. package/lib/module/library/components/ExpandableFab.js.map +1 -0
  224. package/lib/module/library/components/FileTiles.js +251 -0
  225. package/lib/module/library/components/FileTiles.js.map +1 -0
  226. package/lib/module/library/components/ImagePreview.js +70 -0
  227. package/lib/module/library/components/ImagePreview.js.map +1 -0
  228. package/lib/module/library/components/MediaMetadataHeader.js +175 -0
  229. package/lib/module/library/components/MediaMetadataHeader.js.map +1 -0
  230. package/lib/module/library/components/RecordAudioScreen.js +816 -0
  231. package/lib/module/library/components/RecordAudioScreen.js.map +1 -0
  232. package/lib/module/library/components/VideoPreview.js +453 -0
  233. package/lib/module/library/components/VideoPreview.js.map +1 -0
  234. package/lib/module/library/components/ViewerCounter.js +55 -0
  235. package/lib/module/library/components/ViewerCounter.js.map +1 -0
  236. package/lib/module/library/compressionEstimate.js +507 -0
  237. package/lib/module/library/compressionEstimate.js.map +1 -0
  238. package/lib/module/library/fileMetadata.js +196 -0
  239. package/lib/module/library/fileMetadata.js.map +1 -0
  240. package/lib/module/library/index.js +42 -0
  241. package/lib/module/library/index.js.map +1 -0
  242. package/lib/module/library/libraryIconRegistry.js +69 -0
  243. package/lib/module/library/libraryIconRegistry.js.map +1 -0
  244. package/lib/module/library/libraryIcons.js +858 -0
  245. package/lib/module/library/libraryIcons.js.map +1 -0
  246. package/lib/module/library/localizedFormat.js +181 -0
  247. package/lib/module/library/localizedFormat.js.map +1 -0
  248. package/lib/module/library/palette.js +225 -0
  249. package/lib/module/library/palette.js.map +1 -0
  250. package/lib/module/library/responsive.js +53 -0
  251. package/lib/module/library/responsive.js.map +1 -0
  252. package/lib/module/locales.js +416 -0
  253. package/lib/module/locales.js.map +1 -0
  254. package/lib/module/localization.js +1064 -0
  255. package/lib/module/localization.js.map +1 -0
  256. package/lib/module/logger.js +20 -0
  257. package/lib/module/logger.js.map +1 -0
  258. package/lib/module/lowMemoryCache.js +206 -0
  259. package/lib/module/lowMemoryCache.js.map +1 -0
  260. package/lib/module/mediaHistory.js +33 -0
  261. package/lib/module/mediaHistory.js.map +1 -0
  262. package/lib/module/mediaStorageService.js +402 -0
  263. package/lib/module/mediaStorageService.js.map +1 -0
  264. package/lib/module/memory.js +79 -0
  265. package/lib/module/memory.js.map +1 -0
  266. package/lib/module/nativeActions.js +307 -0
  267. package/lib/module/nativeActions.js.map +1 -0
  268. package/lib/module/nativeComponentSupport.js +61 -0
  269. package/lib/module/nativeComponentSupport.js.map +1 -0
  270. package/lib/module/networkPerformance.js +24 -0
  271. package/lib/module/networkPerformance.js.map +1 -0
  272. package/lib/module/package.json +1 -0
  273. package/lib/module/performance.js +104 -0
  274. package/lib/module/performance.js.map +1 -0
  275. package/lib/module/performanceMonitor.js +155 -0
  276. package/lib/module/performanceMonitor.js.map +1 -0
  277. package/lib/module/permissions.js +370 -0
  278. package/lib/module/permissions.js.map +1 -0
  279. package/lib/module/rendering.js +40 -0
  280. package/lib/module/rendering.js.map +1 -0
  281. package/lib/module/security.js +18 -0
  282. package/lib/module/security.js.map +1 -0
  283. package/lib/module/state.js +266 -0
  284. package/lib/module/state.js.map +1 -0
  285. package/lib/module/storage.js +400 -0
  286. package/lib/module/storage.js.map +1 -0
  287. package/lib/module/theme.js +390 -0
  288. package/lib/module/theme.js.map +1 -0
  289. package/lib/module/types.js +4 -0
  290. package/lib/module/types.js.map +1 -0
  291. package/lib/module/utils.js +115 -0
  292. package/lib/module/utils.js.map +1 -0
  293. package/lib/module/validation.js +288 -0
  294. package/lib/module/validation.js.map +1 -0
  295. package/lib/typescript/package.json +1 -0
  296. package/lib/typescript/src/AudioPlayerContext.d.ts +27 -0
  297. package/lib/typescript/src/AudioPlayerContext.d.ts.map +1 -0
  298. package/lib/typescript/src/CameraPreview.d.ts +13 -0
  299. package/lib/typescript/src/CameraPreview.d.ts.map +1 -0
  300. package/lib/typescript/src/NativeAnimatedImageView.d.ts +33 -0
  301. package/lib/typescript/src/NativeAnimatedImageView.d.ts.map +1 -0
  302. package/lib/typescript/src/NativeAudioPlayerView.d.ts +12 -0
  303. package/lib/typescript/src/NativeAudioPlayerView.d.ts.map +1 -0
  304. package/lib/typescript/src/NativeBlurView.d.ts +12 -0
  305. package/lib/typescript/src/NativeBlurView.d.ts.map +1 -0
  306. package/lib/typescript/src/NativeCustomCamera.d.ts +167 -0
  307. package/lib/typescript/src/NativeCustomCamera.d.ts.map +1 -0
  308. package/lib/typescript/src/NativeCustomCamera.web.d.ts +47 -0
  309. package/lib/typescript/src/NativeCustomCamera.web.d.ts.map +1 -0
  310. package/lib/typescript/src/NativeCustomVideoView.d.ts +30 -0
  311. package/lib/typescript/src/NativeCustomVideoView.d.ts.map +1 -0
  312. package/lib/typescript/src/NativeDocumentPreviewView.d.ts +48 -0
  313. package/lib/typescript/src/NativeDocumentPreviewView.d.ts.map +1 -0
  314. package/lib/typescript/src/NativeMediaThumbnailView.d.ts +54 -0
  315. package/lib/typescript/src/NativeMediaThumbnailView.d.ts.map +1 -0
  316. package/lib/typescript/src/NativeSvgIcon.d.ts +25 -0
  317. package/lib/typescript/src/NativeSvgIcon.d.ts.map +1 -0
  318. package/lib/typescript/src/ResponsivePreviewContainer.d.ts +92 -0
  319. package/lib/typescript/src/ResponsivePreviewContainer.d.ts.map +1 -0
  320. package/lib/typescript/src/accessibility.d.ts +20 -0
  321. package/lib/typescript/src/accessibility.d.ts.map +1 -0
  322. package/lib/typescript/src/config.d.ts +145 -0
  323. package/lib/typescript/src/config.d.ts.map +1 -0
  324. package/lib/typescript/src/cpuOptimization.d.ts +63 -0
  325. package/lib/typescript/src/cpuOptimization.d.ts.map +1 -0
  326. package/lib/typescript/src/db/DatabaseManager.d.ts +48 -0
  327. package/lib/typescript/src/db/DatabaseManager.d.ts.map +1 -0
  328. package/lib/typescript/src/db/MediaMapper.d.ts +77 -0
  329. package/lib/typescript/src/db/MediaMapper.d.ts.map +1 -0
  330. package/lib/typescript/src/db/MediaRepository.d.ts +66 -0
  331. package/lib/typescript/src/db/MediaRepository.d.ts.map +1 -0
  332. package/lib/typescript/src/db/index.d.ts +23 -0
  333. package/lib/typescript/src/db/index.d.ts.map +1 -0
  334. package/lib/typescript/src/db/migrations.d.ts +31 -0
  335. package/lib/typescript/src/db/migrations.d.ts.map +1 -0
  336. package/lib/typescript/src/db/secureKey.d.ts +10 -0
  337. package/lib/typescript/src/db/secureKey.d.ts.map +1 -0
  338. package/lib/typescript/src/db/types.d.ts +115 -0
  339. package/lib/typescript/src/db/types.d.ts.map +1 -0
  340. package/lib/typescript/src/db/useMediaDatabase.d.ts +41 -0
  341. package/lib/typescript/src/db/useMediaDatabase.d.ts.map +1 -0
  342. package/lib/typescript/src/defaultIcons.d.ts +139 -0
  343. package/lib/typescript/src/defaultIcons.d.ts.map +1 -0
  344. package/lib/typescript/src/deviceCapabilities.d.ts +92 -0
  345. package/lib/typescript/src/deviceCapabilities.d.ts.map +1 -0
  346. package/lib/typescript/src/errors.d.ts +95 -0
  347. package/lib/typescript/src/errors.d.ts.map +1 -0
  348. package/lib/typescript/src/iconConfig.d.ts +176 -0
  349. package/lib/typescript/src/iconConfig.d.ts.map +1 -0
  350. package/lib/typescript/src/icons.d.ts +217 -0
  351. package/lib/typescript/src/icons.d.ts.map +1 -0
  352. package/lib/typescript/src/index.d.ts +104 -0
  353. package/lib/typescript/src/index.d.ts.map +1 -0
  354. package/lib/typescript/src/library/MediaLibrary.d.ts +57 -0
  355. package/lib/typescript/src/library/MediaLibrary.d.ts.map +1 -0
  356. package/lib/typescript/src/library/MediaLibraryScreen.d.ts +51 -0
  357. package/lib/typescript/src/library/MediaLibraryScreen.d.ts.map +1 -0
  358. package/lib/typescript/src/library/components/AudioPreview.d.ts +6 -0
  359. package/lib/typescript/src/library/components/AudioPreview.d.ts.map +1 -0
  360. package/lib/typescript/src/library/components/DocumentPreview.d.ts +10 -0
  361. package/lib/typescript/src/library/components/DocumentPreview.d.ts.map +1 -0
  362. package/lib/typescript/src/library/components/ExpandableFab.d.ts +39 -0
  363. package/lib/typescript/src/library/components/ExpandableFab.d.ts.map +1 -0
  364. package/lib/typescript/src/library/components/FileTiles.d.ts +8 -0
  365. package/lib/typescript/src/library/components/FileTiles.d.ts.map +1 -0
  366. package/lib/typescript/src/library/components/ImagePreview.d.ts +5 -0
  367. package/lib/typescript/src/library/components/ImagePreview.d.ts.map +1 -0
  368. package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts +16 -0
  369. package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts.map +1 -0
  370. package/lib/typescript/src/library/components/RecordAudioScreen.d.ts +8 -0
  371. package/lib/typescript/src/library/components/RecordAudioScreen.d.ts.map +1 -0
  372. package/lib/typescript/src/library/components/VideoPreview.d.ts +20 -0
  373. package/lib/typescript/src/library/components/VideoPreview.d.ts.map +1 -0
  374. package/lib/typescript/src/library/components/ViewerCounter.d.ts +13 -0
  375. package/lib/typescript/src/library/components/ViewerCounter.d.ts.map +1 -0
  376. package/lib/typescript/src/library/compressionEstimate.d.ts +313 -0
  377. package/lib/typescript/src/library/compressionEstimate.d.ts.map +1 -0
  378. package/lib/typescript/src/library/fileMetadata.d.ts +33 -0
  379. package/lib/typescript/src/library/fileMetadata.d.ts.map +1 -0
  380. package/lib/typescript/src/library/index.d.ts +40 -0
  381. package/lib/typescript/src/library/index.d.ts.map +1 -0
  382. package/lib/typescript/src/library/libraryIconRegistry.d.ts +35 -0
  383. package/lib/typescript/src/library/libraryIconRegistry.d.ts.map +1 -0
  384. package/lib/typescript/src/library/libraryIcons.d.ts +85 -0
  385. package/lib/typescript/src/library/libraryIcons.d.ts.map +1 -0
  386. package/lib/typescript/src/library/localizedFormat.d.ts +49 -0
  387. package/lib/typescript/src/library/localizedFormat.d.ts.map +1 -0
  388. package/lib/typescript/src/library/palette.d.ts +104 -0
  389. package/lib/typescript/src/library/palette.d.ts.map +1 -0
  390. package/lib/typescript/src/library/responsive.d.ts +15 -0
  391. package/lib/typescript/src/library/responsive.d.ts.map +1 -0
  392. package/lib/typescript/src/locales.d.ts +103 -0
  393. package/lib/typescript/src/locales.d.ts.map +1 -0
  394. package/lib/typescript/src/localization.d.ts +1051 -0
  395. package/lib/typescript/src/localization.d.ts.map +1 -0
  396. package/lib/typescript/src/logger.d.ts +4 -0
  397. package/lib/typescript/src/logger.d.ts.map +1 -0
  398. package/lib/typescript/src/lowMemoryCache.d.ts +64 -0
  399. package/lib/typescript/src/lowMemoryCache.d.ts.map +1 -0
  400. package/lib/typescript/src/mediaHistory.d.ts +3 -0
  401. package/lib/typescript/src/mediaHistory.d.ts.map +1 -0
  402. package/lib/typescript/src/mediaStorageService.d.ts +155 -0
  403. package/lib/typescript/src/mediaStorageService.d.ts.map +1 -0
  404. package/lib/typescript/src/memory.d.ts +21 -0
  405. package/lib/typescript/src/memory.d.ts.map +1 -0
  406. package/lib/typescript/src/nativeActions.d.ts +174 -0
  407. package/lib/typescript/src/nativeActions.d.ts.map +1 -0
  408. package/lib/typescript/src/nativeComponentSupport.d.ts +30 -0
  409. package/lib/typescript/src/nativeComponentSupport.d.ts.map +1 -0
  410. package/lib/typescript/src/networkPerformance.d.ts +12 -0
  411. package/lib/typescript/src/networkPerformance.d.ts.map +1 -0
  412. package/lib/typescript/src/performance.d.ts +32 -0
  413. package/lib/typescript/src/performance.d.ts.map +1 -0
  414. package/lib/typescript/src/performanceMonitor.d.ts +45 -0
  415. package/lib/typescript/src/performanceMonitor.d.ts.map +1 -0
  416. package/lib/typescript/src/permissions.d.ts +132 -0
  417. package/lib/typescript/src/permissions.d.ts.map +1 -0
  418. package/lib/typescript/src/rendering.d.ts +9 -0
  419. package/lib/typescript/src/rendering.d.ts.map +1 -0
  420. package/lib/typescript/src/security.d.ts +6 -0
  421. package/lib/typescript/src/security.d.ts.map +1 -0
  422. package/lib/typescript/src/state.d.ts +102 -0
  423. package/lib/typescript/src/state.d.ts.map +1 -0
  424. package/lib/typescript/src/storage.d.ts +117 -0
  425. package/lib/typescript/src/storage.d.ts.map +1 -0
  426. package/lib/typescript/src/theme.d.ts +15 -0
  427. package/lib/typescript/src/theme.d.ts.map +1 -0
  428. package/lib/typescript/src/types.d.ts +802 -0
  429. package/lib/typescript/src/types.d.ts.map +1 -0
  430. package/lib/typescript/src/utils.d.ts +50 -0
  431. package/lib/typescript/src/utils.d.ts.map +1 -0
  432. package/lib/typescript/src/validation.d.ts +52 -0
  433. package/lib/typescript/src/validation.d.ts.map +1 -0
  434. package/package.json +204 -0
  435. package/react-native.config.js +17 -0
  436. package/src/AudioPlayerContext.tsx +220 -0
  437. package/src/CameraPreview.tsx +352 -0
  438. package/src/NativeAnimatedImageView.tsx +71 -0
  439. package/src/NativeAudioPlayerView.tsx +39 -0
  440. package/src/NativeBlurView.tsx +40 -0
  441. package/src/NativeCustomCamera.ts +305 -0
  442. package/src/NativeCustomCamera.web.ts +192 -0
  443. package/src/NativeCustomVideoView.ts +30 -0
  444. package/src/NativeDocumentPreviewView.tsx +196 -0
  445. package/src/NativeMediaThumbnailView.tsx +167 -0
  446. package/src/NativeSvgIcon.tsx +46 -0
  447. package/src/ResponsivePreviewContainer.tsx +227 -0
  448. package/src/accessibility.ts +80 -0
  449. package/src/config.ts +406 -0
  450. package/src/cpuOptimization.ts +365 -0
  451. package/src/db/DatabaseManager.ts +212 -0
  452. package/src/db/MediaMapper.ts +377 -0
  453. package/src/db/MediaRepository.ts +313 -0
  454. package/src/db/index.ts +73 -0
  455. package/src/db/migrations.ts +222 -0
  456. package/src/db/react-native-sqlcipher.d.ts +76 -0
  457. package/src/db/secureKey.ts +100 -0
  458. package/src/db/types.ts +123 -0
  459. package/src/db/useMediaDatabase.ts +191 -0
  460. package/src/defaultIcons.tsx +2390 -0
  461. package/src/deviceCapabilities.ts +438 -0
  462. package/src/errors.ts +350 -0
  463. package/src/iconConfig.tsx +962 -0
  464. package/src/icons.tsx +788 -0
  465. package/src/index.tsx +763 -0
  466. package/src/jest-globals.d.ts +9 -0
  467. package/src/library/MediaLibrary.tsx +141 -0
  468. package/src/library/MediaLibraryScreen.tsx +3003 -0
  469. package/src/library/components/AudioPreview.tsx +73 -0
  470. package/src/library/components/DocumentPreview.tsx +361 -0
  471. package/src/library/components/ExpandableFab.tsx +342 -0
  472. package/src/library/components/FileTiles.tsx +252 -0
  473. package/src/library/components/ImagePreview.tsx +72 -0
  474. package/src/library/components/MediaMetadataHeader.tsx +208 -0
  475. package/src/library/components/RecordAudioScreen.tsx +845 -0
  476. package/src/library/components/VideoPreview.tsx +478 -0
  477. package/src/library/components/ViewerCounter.tsx +71 -0
  478. package/src/library/compressionEstimate.ts +662 -0
  479. package/src/library/fileMetadata.ts +212 -0
  480. package/src/library/index.ts +66 -0
  481. package/src/library/libraryIconRegistry.tsx +86 -0
  482. package/src/library/libraryIcons.tsx +928 -0
  483. package/src/library/localizedFormat.ts +207 -0
  484. package/src/library/palette.ts +281 -0
  485. package/src/library/responsive.ts +49 -0
  486. package/src/locales.ts +381 -0
  487. package/src/localization.ts +1947 -0
  488. package/src/logger.ts +20 -0
  489. package/src/lowMemoryCache.ts +218 -0
  490. package/src/mediaHistory.ts +42 -0
  491. package/src/mediaStorageService.ts +546 -0
  492. package/src/memory.ts +102 -0
  493. package/src/nativeActions.ts +422 -0
  494. package/src/nativeComponentSupport.ts +60 -0
  495. package/src/networkPerformance.ts +30 -0
  496. package/src/performance.ts +137 -0
  497. package/src/performanceMonitor.ts +219 -0
  498. package/src/permissions.ts +403 -0
  499. package/src/rendering.ts +47 -0
  500. package/src/security.ts +19 -0
  501. package/src/state.ts +333 -0
  502. package/src/storage.ts +453 -0
  503. package/src/theme.tsx +467 -0
  504. package/src/types.ts +946 -0
  505. package/src/utils.ts +177 -0
  506. package/src/validation.ts +372 -0
@@ -0,0 +1,858 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Hand-authored vector icons built ONLY from React Native primitives (View + borders +
5
+ * transforms). No third-party icon library, no react-native-svg, and no external SVG/PNG
6
+ * assets — every shape is composed from scratch so the set stays dependency-free and matches
7
+ * the app's clean, modern outline style.
8
+ *
9
+ * Every icon shares one contract — { size, color, strokeWidth } — so stroke width, sizing,
10
+ * padding and alignment stay identical across the whole set. Sizes are unitless (dp), so the
11
+ * caller scales them for different screen densities.
12
+ */
13
+
14
+ import { View, Text, Animated, StyleSheet } from 'react-native';
15
+ import { libraryPalette as palette } from "./palette.js";
16
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
17
+ const DEFAULT_SIZE = 22;
18
+ const DEFAULT_COLOR = palette.white;
19
+ const DEFAULT_STROKE = 2;
20
+
21
+ /**
22
+ * A single Plus icon that morphs into a Cross (✕) as [progress] animates 0 → 1.
23
+ * When progress is omitted or 0, renders a clean Plus (+).
24
+ *
25
+ * The glyph is two crossed strokes — a "+" — that keep their full length the whole time. As
26
+ * progress runs, the whole glyph spins 225° (a half-turn flourish, preserving the original
27
+ * animated feel) so both strokes settle at 45°, forming a crisp, perfectly symmetric "✕" at
28
+ * progress 1 and a clean "+" at progress 0. The cross is drawn entirely from RN primitives
29
+ * (two rounded bars) — no icon library, no react-native-svg, no external SVG asset. Driven
30
+ * solely by the parent's Animated.Value, so there is exactly one source of truth for the
31
+ * transition in BOTH directions (open ⇄ close) with no internal state to desync.
32
+ */
33
+ export const PlusCloseIcon = ({
34
+ size = 24,
35
+ color = DEFAULT_COLOR,
36
+ strokeWidth = 2.4,
37
+ progress,
38
+ style
39
+ }) => {
40
+ const barLength = Math.round(size * 0.58);
41
+ // 0° → 225° = 180° flourish + the 45° needed to turn a "+" into an "✕".
42
+ let spin = '0deg';
43
+ if (progress && typeof progress.interpolate === 'function') {
44
+ spin = progress.interpolate({
45
+ inputRange: [0, 1],
46
+ outputRange: ['0deg', '225deg']
47
+ });
48
+ } else if (typeof progress === 'number') {
49
+ spin = `${progress * 225}deg`;
50
+ }
51
+ const horizontal = {
52
+ position: 'absolute',
53
+ width: barLength,
54
+ height: strokeWidth,
55
+ borderRadius: strokeWidth,
56
+ backgroundColor: color
57
+ };
58
+ const vertical = {
59
+ position: 'absolute',
60
+ width: strokeWidth,
61
+ height: barLength,
62
+ borderRadius: strokeWidth,
63
+ backgroundColor: color
64
+ };
65
+ return /*#__PURE__*/_jsxs(Animated.View, {
66
+ style: [styles.center, {
67
+ width: size,
68
+ height: size,
69
+ transform: [{
70
+ rotate: spin
71
+ }]
72
+ }, style],
73
+ children: [/*#__PURE__*/_jsx(View, {
74
+ style: horizontal
75
+ }), /*#__PURE__*/_jsx(View, {
76
+ style: vertical
77
+ })]
78
+ });
79
+ };
80
+
81
+ /** Outline camera: rounded body + viewfinder bump + centered lens ring. */
82
+ export const CameraIcon = ({
83
+ size = DEFAULT_SIZE,
84
+ color = DEFAULT_COLOR,
85
+ strokeWidth = DEFAULT_STROKE
86
+ }) => {
87
+ const bodyW = size;
88
+ const bodyH = Math.round(size * 0.66);
89
+ const lens = Math.round(size * 0.34);
90
+ const bumpW = Math.round(size * 0.3);
91
+ const bumpH = Math.round(size * 0.16);
92
+ return /*#__PURE__*/_jsxs(View, {
93
+ style: [styles.center, {
94
+ width: size,
95
+ height: size
96
+ }],
97
+ children: [/*#__PURE__*/_jsx(View, {
98
+ style: {
99
+ position: 'absolute',
100
+ top: Math.round((size - bodyH) / 2) - bumpH + strokeWidth,
101
+ left: Math.round(size / 2 - bumpW / 2 + size * 0.12),
102
+ width: bumpW,
103
+ height: bumpH + strokeWidth,
104
+ borderTopLeftRadius: Math.round(size * 0.06),
105
+ borderTopRightRadius: Math.round(size * 0.06),
106
+ borderWidth: strokeWidth,
107
+ borderBottomWidth: 0,
108
+ borderColor: color
109
+ }
110
+ }), /*#__PURE__*/_jsx(View, {
111
+ style: {
112
+ width: bodyW,
113
+ height: bodyH,
114
+ borderWidth: strokeWidth,
115
+ borderColor: color,
116
+ borderRadius: Math.round(size * 0.18),
117
+ alignItems: 'center',
118
+ justifyContent: 'center'
119
+ },
120
+ children: /*#__PURE__*/_jsx(View, {
121
+ style: {
122
+ width: lens,
123
+ height: lens,
124
+ borderRadius: Math.round(lens / 2),
125
+ borderWidth: strokeWidth,
126
+ borderColor: color
127
+ }
128
+ })
129
+ })]
130
+ });
131
+ };
132
+
133
+ /** Outline document: rounded page, folded top-right corner, two text lines. */
134
+ export const DocumentIcon = ({
135
+ size = DEFAULT_SIZE,
136
+ color = DEFAULT_COLOR,
137
+ strokeWidth = DEFAULT_STROKE
138
+ }) => {
139
+ const w = Math.round(size * 0.72);
140
+ const h = Math.round(size * 0.9);
141
+ const fold = Math.round(size * 0.28);
142
+ const lineW = Math.round(w * 0.54);
143
+ return /*#__PURE__*/_jsx(View, {
144
+ style: [styles.center, {
145
+ width: size,
146
+ height: size
147
+ }],
148
+ children: /*#__PURE__*/_jsxs(View, {
149
+ style: {
150
+ width: w,
151
+ height: h
152
+ },
153
+ children: [/*#__PURE__*/_jsx(View, {
154
+ style: {
155
+ position: 'absolute',
156
+ top: 0,
157
+ left: 0,
158
+ width: w,
159
+ height: h,
160
+ borderWidth: strokeWidth,
161
+ borderColor: color,
162
+ borderRadius: Math.round(size * 0.09)
163
+ }
164
+ }), /*#__PURE__*/_jsx(View, {
165
+ style: {
166
+ position: 'absolute',
167
+ top: -strokeWidth / 2,
168
+ left: w - fold,
169
+ width: fold,
170
+ height: fold
171
+ },
172
+ children: /*#__PURE__*/_jsx(View, {
173
+ style: {
174
+ position: 'absolute',
175
+ top: Math.round(fold / 2 - strokeWidth / 2),
176
+ left: Math.round(fold / 2 - fold * 1.414 / 2),
177
+ width: Math.round(fold * 1.414),
178
+ height: strokeWidth,
179
+ borderRadius: strokeWidth,
180
+ backgroundColor: color,
181
+ transform: [{
182
+ rotate: '-45deg'
183
+ }]
184
+ }
185
+ })
186
+ }), /*#__PURE__*/_jsx(View, {
187
+ style: {
188
+ position: 'absolute',
189
+ left: Math.round(w * 0.23),
190
+ top: Math.round(h * 0.52),
191
+ width: lineW,
192
+ height: strokeWidth,
193
+ borderRadius: strokeWidth,
194
+ backgroundColor: color
195
+ }
196
+ }), /*#__PURE__*/_jsx(View, {
197
+ style: {
198
+ position: 'absolute',
199
+ left: Math.round(w * 0.23),
200
+ top: Math.round(h * 0.7),
201
+ width: lineW,
202
+ height: strokeWidth,
203
+ borderRadius: strokeWidth,
204
+ backgroundColor: color
205
+ }
206
+ })]
207
+ })
208
+ });
209
+ };
210
+
211
+ /** Browse Audio icon — a folder outline with a music note inside, representing browsing/selecting
212
+ * audio files. Minimal outline style with rounded edges, matching the Android material design
213
+ * aesthetic used throughout this icon set. */
214
+ export const BrowseAudioIcon = ({
215
+ size = DEFAULT_SIZE,
216
+ color = DEFAULT_COLOR,
217
+ strokeWidth = DEFAULT_STROKE
218
+ }) => {
219
+ // ── Folder dimensions ────────────────────────────────────────
220
+ const folderW = Math.round(size * 0.84);
221
+ const folderH = Math.round(size * 0.74);
222
+ const folderX = Math.round((size - folderW) / 2);
223
+ const folderY = Math.round(size * 0.16);
224
+ // Folder tab — the little flap on top-left, flush with folder top
225
+ const tabW = Math.round(size * 0.28);
226
+ const tabH = Math.round(size * 0.12);
227
+ const tabX = folderX;
228
+ const tabY = folderY;
229
+
230
+ // ── Music note dimensions (inside the folder) ─────────────────
231
+ const noteHeadSize = Math.round(size * 0.26);
232
+ const noteStemH = Math.round(size * 0.34);
233
+ const noteStemX = Math.round(size * 0.56);
234
+ const noteHeadY = Math.round(size * 0.4);
235
+ return /*#__PURE__*/_jsxs(View, {
236
+ style: [styles.center, {
237
+ width: size,
238
+ height: size
239
+ }],
240
+ children: [/*#__PURE__*/_jsx(View, {
241
+ style: {
242
+ position: 'absolute',
243
+ left: tabX,
244
+ top: tabY,
245
+ width: tabW,
246
+ height: tabH + strokeWidth,
247
+ borderWidth: strokeWidth,
248
+ borderColor: color,
249
+ borderBottomWidth: 0,
250
+ borderTopLeftRadius: Math.round(size * 0.06),
251
+ borderTopRightRadius: Math.round(size * 0.06),
252
+ backgroundColor: 'transparent'
253
+ }
254
+ }), /*#__PURE__*/_jsxs(View, {
255
+ style: {
256
+ position: 'absolute',
257
+ left: folderX,
258
+ top: folderY,
259
+ width: folderW,
260
+ height: folderH,
261
+ borderWidth: strokeWidth,
262
+ borderColor: color,
263
+ borderRadius: Math.round(size * 0.1),
264
+ backgroundColor: 'transparent'
265
+ },
266
+ children: [/*#__PURE__*/_jsx(View, {
267
+ style: {
268
+ position: 'absolute',
269
+ left: noteStemX - Math.round(noteHeadSize * 0.55),
270
+ top: noteHeadY,
271
+ width: noteHeadSize,
272
+ height: Math.round(noteHeadSize * 0.72),
273
+ borderRadius: Math.round(noteHeadSize / 2),
274
+ borderWidth: strokeWidth,
275
+ borderColor: color,
276
+ transform: [{
277
+ rotate: '-20deg'
278
+ }]
279
+ }
280
+ }), /*#__PURE__*/_jsx(View, {
281
+ style: {
282
+ position: 'absolute',
283
+ left: noteStemX,
284
+ top: noteHeadY - Math.round(noteStemH * 0.15),
285
+ width: strokeWidth,
286
+ height: noteStemH,
287
+ borderRadius: strokeWidth,
288
+ backgroundColor: color
289
+ }
290
+ }), /*#__PURE__*/_jsx(View, {
291
+ style: {
292
+ position: 'absolute',
293
+ left: noteStemX,
294
+ top: noteHeadY - Math.round(noteStemH * 0.15) + Math.round(strokeWidth * 0.3),
295
+ width: Math.round(size * 0.16),
296
+ height: Math.round(size * 0.18),
297
+ borderWidth: strokeWidth,
298
+ borderColor: color,
299
+ borderLeftWidth: 0,
300
+ borderBottomWidth: 0,
301
+ borderRadius: Math.round(size * 0.04),
302
+ borderTopRightRadius: Math.round(size * 0.06),
303
+ backgroundColor: 'transparent'
304
+ }
305
+ })]
306
+ })]
307
+ });
308
+ };
309
+
310
+ /** Outline microphone: capsule head, U-shaped cradle, stem + base. */
311
+ export const AudioIcon = ({
312
+ size = DEFAULT_SIZE,
313
+ color = DEFAULT_COLOR,
314
+ strokeWidth = DEFAULT_STROKE
315
+ }) => {
316
+ const headW = Math.round(size * 0.36);
317
+ const headH = Math.round(size * 0.5);
318
+ const cradleW = Math.round(size * 0.58);
319
+ const cradleH = Math.round(size * 0.3);
320
+ const stemH = Math.round(size * 0.12);
321
+ const baseW = Math.round(size * 0.34);
322
+ return /*#__PURE__*/_jsxs(View, {
323
+ style: [styles.center, {
324
+ width: size,
325
+ height: size,
326
+ paddingTop: Math.round(size * 0.06)
327
+ }],
328
+ children: [/*#__PURE__*/_jsx(View, {
329
+ style: {
330
+ width: headW,
331
+ height: headH,
332
+ borderRadius: Math.round(headW / 2),
333
+ borderWidth: strokeWidth,
334
+ borderColor: color
335
+ }
336
+ }), /*#__PURE__*/_jsx(View, {
337
+ style: {
338
+ width: cradleW,
339
+ height: cradleH,
340
+ marginTop: -Math.round(headH * 0.3),
341
+ borderWidth: strokeWidth,
342
+ borderTopWidth: 0,
343
+ borderColor: color,
344
+ borderBottomLeftRadius: Math.round(cradleW / 2),
345
+ borderBottomRightRadius: Math.round(cradleW / 2),
346
+ backgroundColor: 'transparent'
347
+ }
348
+ }), /*#__PURE__*/_jsx(View, {
349
+ style: {
350
+ width: strokeWidth,
351
+ height: stemH,
352
+ backgroundColor: color
353
+ }
354
+ }), /*#__PURE__*/_jsx(View, {
355
+ style: {
356
+ width: baseW,
357
+ height: strokeWidth,
358
+ borderRadius: strokeWidth,
359
+ backgroundColor: color
360
+ }
361
+ })]
362
+ });
363
+ };
364
+
365
+ /** Outline photo: rounded frame, sun dot top-right, mountain range from two angled strokes. */
366
+ export const PhotoIcon = ({
367
+ size = DEFAULT_SIZE,
368
+ color = DEFAULT_COLOR,
369
+ strokeWidth = DEFAULT_STROKE
370
+ }) => {
371
+ const w = size;
372
+ const h = Math.round(size * 0.82);
373
+ const sun = Math.round(size * 0.16);
374
+ const slopeLong = Math.round(size * 0.52);
375
+ const slopeShort = Math.round(size * 0.34);
376
+ return /*#__PURE__*/_jsx(View, {
377
+ style: [styles.center, {
378
+ width: size,
379
+ height: size
380
+ }],
381
+ children: /*#__PURE__*/_jsxs(View, {
382
+ style: {
383
+ width: w,
384
+ height: h,
385
+ borderWidth: strokeWidth,
386
+ borderColor: color,
387
+ borderRadius: Math.round(size * 0.16),
388
+ overflow: 'hidden'
389
+ },
390
+ children: [/*#__PURE__*/_jsx(View, {
391
+ style: {
392
+ position: 'absolute',
393
+ top: Math.round(h * 0.18),
394
+ right: Math.round(w * 0.2),
395
+ width: sun,
396
+ height: sun,
397
+ borderRadius: Math.round(sun / 2),
398
+ borderWidth: strokeWidth,
399
+ borderColor: color
400
+ }
401
+ }), /*#__PURE__*/_jsx(View, {
402
+ style: {
403
+ position: 'absolute',
404
+ bottom: Math.round(h * 0.14),
405
+ left: -Math.round(slopeLong * 0.12),
406
+ width: slopeLong,
407
+ height: strokeWidth,
408
+ borderRadius: strokeWidth,
409
+ backgroundColor: color,
410
+ transform: [{
411
+ rotate: '-38deg'
412
+ }]
413
+ }
414
+ }), /*#__PURE__*/_jsx(View, {
415
+ style: {
416
+ position: 'absolute',
417
+ bottom: Math.round(h * 0.1),
418
+ right: -Math.round(slopeShort * 0.1),
419
+ width: slopeShort,
420
+ height: strokeWidth,
421
+ borderRadius: strokeWidth,
422
+ backgroundColor: color,
423
+ transform: [{
424
+ rotate: '38deg'
425
+ }]
426
+ }
427
+ })]
428
+ })
429
+ });
430
+ };
431
+
432
+ /** Outline video camera: rounded body + right-pointing lens wedge (camcorder silhouette). */
433
+ export const VideoIcon = ({
434
+ size = DEFAULT_SIZE,
435
+ color = DEFAULT_COLOR,
436
+ strokeWidth = DEFAULT_STROKE
437
+ }) => {
438
+ const bodyW = Math.round(size * 0.62);
439
+ const bodyH = Math.round(size * 0.56);
440
+ // The lens wedge is an outlined square rotated 45°; clipping its left half behind the
441
+ // body leaves a clean ">" prism, matching the classic camcorder glyph in pure outline.
442
+ const wedge = Math.round(bodyH * 0.62);
443
+ return /*#__PURE__*/_jsx(View, {
444
+ style: [styles.center, {
445
+ width: size,
446
+ height: size
447
+ }],
448
+ children: /*#__PURE__*/_jsxs(View, {
449
+ style: {
450
+ flexDirection: 'row',
451
+ alignItems: 'center'
452
+ },
453
+ children: [/*#__PURE__*/_jsx(View, {
454
+ style: {
455
+ width: bodyW,
456
+ height: bodyH,
457
+ borderWidth: strokeWidth,
458
+ borderColor: color,
459
+ borderRadius: Math.round(size * 0.12)
460
+ }
461
+ }), /*#__PURE__*/_jsx(View, {
462
+ style: {
463
+ width: wedge,
464
+ height: wedge,
465
+ marginLeft: -Math.round(wedge * 0.28),
466
+ borderTopWidth: strokeWidth,
467
+ borderRightWidth: strokeWidth,
468
+ borderColor: color,
469
+ borderTopRightRadius: Math.round(size * 0.08),
470
+ transform: [{
471
+ rotate: '45deg'
472
+ }]
473
+ }
474
+ })]
475
+ })
476
+ });
477
+ };
478
+
479
+ /** Outline gallery/image-video icon: photo frame with small play triangle overlay. */
480
+ export const ImageVideoIcon = ({
481
+ size = DEFAULT_SIZE,
482
+ color = DEFAULT_COLOR,
483
+ strokeWidth = DEFAULT_STROKE
484
+ }) => {
485
+ const w = Math.round(size * 0.76);
486
+ const h = Math.round(size * 0.68);
487
+ const playSize = Math.round(size * 0.26);
488
+ return /*#__PURE__*/_jsxs(View, {
489
+ style: [styles.center, {
490
+ width: size,
491
+ height: size
492
+ }],
493
+ children: [/*#__PURE__*/_jsxs(View, {
494
+ style: {
495
+ width: w,
496
+ height: h,
497
+ borderWidth: strokeWidth,
498
+ borderColor: color,
499
+ borderRadius: Math.round(size * 0.1),
500
+ overflow: 'hidden'
501
+ },
502
+ children: [/*#__PURE__*/_jsx(View, {
503
+ style: {
504
+ position: 'absolute',
505
+ bottom: Math.round(size * 0.1),
506
+ left: Math.round(size * 0.08),
507
+ width: Math.round(size * 0.3),
508
+ height: strokeWidth,
509
+ borderRadius: strokeWidth,
510
+ backgroundColor: color,
511
+ transform: [{
512
+ rotate: '-35deg'
513
+ }]
514
+ }
515
+ }), /*#__PURE__*/_jsx(View, {
516
+ style: {
517
+ position: 'absolute',
518
+ bottom: Math.round(size * 0.1),
519
+ right: Math.round(size * 0.06),
520
+ width: Math.round(size * 0.24),
521
+ height: strokeWidth,
522
+ borderRadius: strokeWidth,
523
+ backgroundColor: color,
524
+ transform: [{
525
+ rotate: '40deg'
526
+ }]
527
+ }
528
+ })]
529
+ }), /*#__PURE__*/_jsx(View, {
530
+ style: {
531
+ position: 'absolute',
532
+ bottom: Math.round(size * 0.06),
533
+ right: Math.round(size * 0.06),
534
+ width: 0,
535
+ height: 0,
536
+ borderLeftWidth: playSize * 0.55,
537
+ borderTopWidth: playSize * 0.32,
538
+ borderBottomWidth: playSize * 0.32,
539
+ borderLeftColor: color,
540
+ borderTopColor: 'transparent',
541
+ borderBottomColor: 'transparent'
542
+ }
543
+ })]
544
+ });
545
+ };
546
+
547
+ /** Outline trash/delete can: rounded lid + handle, open-top body, two ribs. */
548
+ export const TrashIcon = ({
549
+ size = DEFAULT_SIZE,
550
+ color = DEFAULT_COLOR,
551
+ strokeWidth = DEFAULT_STROKE
552
+ }) => {
553
+ const handleW = Math.round(size * 0.3);
554
+ const handleH = Math.round(size * 0.1);
555
+ const lidW = Math.round(size * 0.66);
556
+ const bodyW = Math.round(size * 0.5);
557
+ const bodyH = Math.round(size * 0.5);
558
+ const lidTop = Math.round(size * 0.28);
559
+ const bodyTop = lidTop + strokeWidth;
560
+ const ribTop = bodyTop + Math.round(size * 0.1);
561
+ const ribH = Math.round(size * 0.26);
562
+ const ribGap = Math.round(size * 0.11);
563
+ const cx = size / 2;
564
+ return /*#__PURE__*/_jsxs(View, {
565
+ style: [styles.center, {
566
+ width: size,
567
+ height: size
568
+ }],
569
+ children: [/*#__PURE__*/_jsx(View, {
570
+ style: {
571
+ position: 'absolute',
572
+ top: lidTop - handleH,
573
+ left: Math.round(cx - handleW / 2),
574
+ width: handleW,
575
+ height: handleH + strokeWidth,
576
+ borderWidth: strokeWidth,
577
+ borderBottomWidth: 0,
578
+ borderColor: color,
579
+ borderTopLeftRadius: Math.round(size * 0.06),
580
+ borderTopRightRadius: Math.round(size * 0.06)
581
+ }
582
+ }), /*#__PURE__*/_jsx(View, {
583
+ style: {
584
+ position: 'absolute',
585
+ top: lidTop,
586
+ left: Math.round(cx - lidW / 2),
587
+ width: lidW,
588
+ height: strokeWidth,
589
+ borderRadius: strokeWidth,
590
+ backgroundColor: color
591
+ }
592
+ }), /*#__PURE__*/_jsx(View, {
593
+ style: {
594
+ position: 'absolute',
595
+ top: bodyTop,
596
+ left: Math.round(cx - bodyW / 2),
597
+ width: bodyW,
598
+ height: bodyH,
599
+ borderWidth: strokeWidth,
600
+ borderTopWidth: 0,
601
+ borderColor: color,
602
+ borderBottomLeftRadius: Math.round(size * 0.12),
603
+ borderBottomRightRadius: Math.round(size * 0.12)
604
+ }
605
+ }), [-ribGap, ribGap].map((dx, i) => /*#__PURE__*/_jsx(View, {
606
+ style: {
607
+ position: 'absolute',
608
+ top: ribTop,
609
+ left: Math.round(cx + dx - strokeWidth / 2),
610
+ width: strokeWidth,
611
+ height: ribH,
612
+ borderRadius: strokeWidth,
613
+ backgroundColor: color
614
+ }
615
+ }, i))]
616
+ });
617
+ };
618
+
619
+ /** Android-style share: three filled nodes joined by two arms (left → each right). */
620
+ export const ShareIcon = ({
621
+ size = DEFAULT_SIZE,
622
+ color = DEFAULT_COLOR,
623
+ strokeWidth = DEFAULT_STROKE
624
+ }) => {
625
+ const dot = Math.round(size * 0.26);
626
+ const r = dot / 2;
627
+ // Node centres: left-middle, top-right, bottom-right.
628
+ const left = {
629
+ x: size * 0.24,
630
+ y: size * 0.5
631
+ };
632
+ const top = {
633
+ x: size * 0.74,
634
+ y: size * 0.26
635
+ };
636
+ const bottom = {
637
+ x: size * 0.74,
638
+ y: size * 0.74
639
+ };
640
+ return /*#__PURE__*/_jsxs(View, {
641
+ style: [styles.center, {
642
+ width: size,
643
+ height: size
644
+ }],
645
+ children: [[top, bottom].map((n, i) => {
646
+ const dx = n.x - left.x;
647
+ const dy = n.y - left.y;
648
+ const len = Math.round(Math.hypot(dx, dy));
649
+ const deg = `${Math.atan2(dy, dx) * 180 / Math.PI}deg`;
650
+ return /*#__PURE__*/_jsx(View, {
651
+ style: {
652
+ position: 'absolute',
653
+ left: Math.round((left.x + n.x) / 2 - len / 2),
654
+ top: Math.round((left.y + n.y) / 2 - strokeWidth / 2),
655
+ width: len,
656
+ height: strokeWidth,
657
+ borderRadius: strokeWidth,
658
+ backgroundColor: color,
659
+ transform: [{
660
+ rotate: deg
661
+ }]
662
+ }
663
+ }, `arm${i}`);
664
+ }), [left, top, bottom].map((n, i) => /*#__PURE__*/_jsx(View, {
665
+ style: {
666
+ position: 'absolute',
667
+ left: Math.round(n.x - r),
668
+ top: Math.round(n.y - r),
669
+ width: dot,
670
+ height: dot,
671
+ borderRadius: r,
672
+ backgroundColor: color
673
+ }
674
+ }, `dot${i}`))]
675
+ });
676
+ };
677
+
678
+ /**
679
+ * Circular seek skip ring icon (◀ -10s / ▶ +10s).
680
+ * Renders an open-topped circular arrow ring with directional arrowhead
681
+ * and a centered seconds label.
682
+ */
683
+ export const CircularSeekIcon = ({
684
+ direction = 'forward',
685
+ label = '10',
686
+ size = DEFAULT_SIZE,
687
+ color = DEFAULT_COLOR,
688
+ strokeWidth = DEFAULT_STROKE,
689
+ style
690
+ }) => {
691
+ const head = Math.max(3, strokeWidth * 2);
692
+ return /*#__PURE__*/_jsxs(View, {
693
+ style: [styles.center, {
694
+ width: size,
695
+ height: size,
696
+ position: 'relative'
697
+ }, style],
698
+ children: [/*#__PURE__*/_jsx(View, {
699
+ style: {
700
+ position: 'absolute',
701
+ width: size,
702
+ height: size,
703
+ borderRadius: size / 2,
704
+ borderWidth: strokeWidth,
705
+ borderColor: color,
706
+ borderTopColor: 'transparent'
707
+ }
708
+ }), /*#__PURE__*/_jsx(View, {
709
+ style: {
710
+ position: 'absolute',
711
+ top: -strokeWidth * 0.4,
712
+ left: direction === 'back' ? size * 0.24 : undefined,
713
+ right: direction === 'forward' ? size * 0.24 : undefined,
714
+ width: 0,
715
+ height: 0,
716
+ borderTopWidth: head,
717
+ borderBottomWidth: head,
718
+ borderTopColor: 'transparent',
719
+ borderBottomColor: 'transparent',
720
+ borderLeftWidth: direction === 'forward' ? head : 0,
721
+ borderRightWidth: direction === 'back' ? head : 0,
722
+ borderLeftColor: direction === 'forward' ? color : 'transparent',
723
+ borderRightColor: direction === 'back' ? color : 'transparent'
724
+ }
725
+ }), /*#__PURE__*/_jsx(Text, {
726
+ style: {
727
+ color: color,
728
+ fontSize: size * 0.4,
729
+ fontWeight: '600',
730
+ includeFontPadding: false,
731
+ textAlign: 'center'
732
+ },
733
+ children: label
734
+ })]
735
+ });
736
+ };
737
+
738
+ /**
739
+ * View Details / Info (ⓘ) icon.
740
+ * Renders an outlined circular badge with a centered 'i' glyph (dot + stem).
741
+ */
742
+ export const ViewDetailsIcon = ({
743
+ size = DEFAULT_SIZE,
744
+ color = DEFAULT_COLOR,
745
+ strokeWidth = DEFAULT_STROKE,
746
+ style
747
+ }) => {
748
+ const circleSize = Math.round(size * 0.85);
749
+ const dotSize = Math.max(2, Math.round(strokeWidth * 1.2));
750
+ const stemWidth = Math.max(1.5, strokeWidth);
751
+ const stemHeight = Math.round(size * 0.28);
752
+ return /*#__PURE__*/_jsx(View, {
753
+ style: [styles.center, {
754
+ width: size,
755
+ height: size,
756
+ position: 'relative'
757
+ }, style],
758
+ children: /*#__PURE__*/_jsxs(View, {
759
+ style: {
760
+ width: circleSize,
761
+ height: circleSize,
762
+ borderRadius: Math.round(circleSize / 2),
763
+ borderWidth: strokeWidth,
764
+ borderColor: color,
765
+ alignItems: 'center',
766
+ justifyContent: 'center'
767
+ },
768
+ children: [/*#__PURE__*/_jsx(View, {
769
+ style: {
770
+ position: 'absolute',
771
+ top: Math.round(circleSize * 0.22),
772
+ width: dotSize,
773
+ height: dotSize,
774
+ borderRadius: Math.round(dotSize / 2),
775
+ backgroundColor: color
776
+ }
777
+ }), /*#__PURE__*/_jsx(View, {
778
+ style: {
779
+ position: 'absolute',
780
+ bottom: Math.round(circleSize * 0.22),
781
+ width: stemWidth,
782
+ height: stemHeight,
783
+ borderRadius: stemWidth / 2,
784
+ backgroundColor: color
785
+ }
786
+ })]
787
+ })
788
+ });
789
+ };
790
+
791
+ /** Alias for ViewDetailsIcon */
792
+ export const InfoIcon = ViewDetailsIcon;
793
+
794
+ /**
795
+ * Compress icon — two arrows squeezing toward a centre line.
796
+ *
797
+ * The outline-set counterpart of the plugin's default `compress` glyph, drawn in the same
798
+ * "clean stroke" language as the rest of this file: one horizontal bar across the middle with a
799
+ * down-pointing arrow above it and an up-pointing arrow below, each a stem plus a two-armed
800
+ * chevron. It reads as "make this smaller" at 24 dp without any diagonal-resize ambiguity.
801
+ *
802
+ * Every stroke is a bar laid between two points, centred on their midpoint and rotated about its
803
+ * own centre, so the arms land exactly on the stems at any [size] / [strokeWidth] pair — the same
804
+ * construction {@link ShareIcon} uses for its arms.
805
+ */
806
+ export const CompressIcon = ({
807
+ size = DEFAULT_SIZE,
808
+ color = DEFAULT_COLOR,
809
+ strokeWidth = DEFAULT_STROKE,
810
+ style
811
+ }) => {
812
+ const centre = size / 2;
813
+ // Chevron half-span and rise, equal so both arrowheads sit at a clean 45°.
814
+ const arm = size * 0.145;
815
+ // Arrow apexes stop short of the centre bar, leaving a visible gap on both sides.
816
+ const apexTop = size * 0.4;
817
+ const apexBottom = size * 0.6;
818
+ const strokes = [
819
+ // The line the two arrows are compressing toward.
820
+ [size * 0.19, centre, size * 0.81, centre],
821
+ // Arrow above, pointing down: stem, then its two chevron arms.
822
+ [centre, size * 0.15, centre, apexTop], [centre, apexTop, centre - arm, apexTop - arm], [centre, apexTop, centre + arm, apexTop - arm],
823
+ // Arrow below, pointing up — the same shape mirrored through the centre bar.
824
+ [centre, size * 0.85, centre, apexBottom], [centre, apexBottom, centre - arm, apexBottom + arm], [centre, apexBottom, centre + arm, apexBottom + arm]];
825
+ return /*#__PURE__*/_jsx(View, {
826
+ style: [styles.center, {
827
+ width: size,
828
+ height: size,
829
+ position: 'relative'
830
+ }, style],
831
+ children: strokes.map(([x1, y1, x2, y2], i) => {
832
+ const dx = x2 - x1;
833
+ const dy = y2 - y1;
834
+ const len = Math.max(strokeWidth, Math.hypot(dx, dy));
835
+ return /*#__PURE__*/_jsx(View, {
836
+ style: {
837
+ position: 'absolute',
838
+ left: (x1 + x2) / 2 - len / 2,
839
+ top: (y1 + y2) / 2 - strokeWidth / 2,
840
+ width: len,
841
+ height: strokeWidth,
842
+ borderRadius: strokeWidth,
843
+ backgroundColor: color,
844
+ transform: [{
845
+ rotate: `${Math.atan2(dy, dx) * 180 / Math.PI}deg`
846
+ }]
847
+ }
848
+ }, `stroke${i}`);
849
+ })
850
+ });
851
+ };
852
+ const styles = StyleSheet.create({
853
+ center: {
854
+ alignItems: 'center',
855
+ justifyContent: 'center'
856
+ }
857
+ });
858
+ //# sourceMappingURL=libraryIcons.js.map