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.
- package/CustomCamera.podspec +20 -0
- package/LICENSE +20 -0
- package/README.md +833 -0
- package/android/build.gradle +135 -0
- package/android/consumer-rules.pro +47 -0
- package/android/src/main/AndroidManifest.xml +72 -0
- package/android/src/main/java/android/print/PdfPrint.java +51 -0
- package/android/src/main/java/com/customcamera/AnimatedImageViewManager.kt +199 -0
- package/android/src/main/java/com/customcamera/AudioPlayerView.kt +322 -0
- package/android/src/main/java/com/customcamera/AudioRecorder.kt +506 -0
- package/android/src/main/java/com/customcamera/BarcodeScannerActivity.kt +361 -0
- package/android/src/main/java/com/customcamera/BlurBackgroundView.kt +199 -0
- package/android/src/main/java/com/customcamera/CacheCleanupManager.kt +386 -0
- package/android/src/main/java/com/customcamera/CameraAspectRatioMode.kt +77 -0
- package/android/src/main/java/com/customcamera/CameraAsset.kt +211 -0
- package/android/src/main/java/com/customcamera/CameraTheme.kt +479 -0
- package/android/src/main/java/com/customcamera/CompressionCacheStore.kt +504 -0
- package/android/src/main/java/com/customcamera/CompressionFileNameUtils.kt +7 -0
- package/android/src/main/java/com/customcamera/CompressionProfile.kt +195 -0
- package/android/src/main/java/com/customcamera/CustomCameraActivity.kt +7291 -0
- package/android/src/main/java/com/customcamera/CustomCameraFileProvider.kt +9 -0
- package/android/src/main/java/com/customcamera/CustomCameraModule.kt +2479 -0
- package/android/src/main/java/com/customcamera/CustomCameraPackage.kt +53 -0
- package/android/src/main/java/com/customcamera/DisplayUtils.kt +9 -0
- package/android/src/main/java/com/customcamera/DocumentPreviewView.kt +846 -0
- package/android/src/main/java/com/customcamera/DrawingView.kt +214 -0
- package/android/src/main/java/com/customcamera/EmojiPickerData.kt +228 -0
- package/android/src/main/java/com/customcamera/FilterStripAdapter.kt +158 -0
- package/android/src/main/java/com/customcamera/GifSupport.kt +215 -0
- package/android/src/main/java/com/customcamera/GlobalAudioPlayer.kt +320 -0
- package/android/src/main/java/com/customcamera/ImageExporter.kt +1394 -0
- package/android/src/main/java/com/customcamera/ImageFormatSupport.kt +163 -0
- package/android/src/main/java/com/customcamera/Localization.kt +206 -0
- package/android/src/main/java/com/customcamera/MediaAdapters.kt +758 -0
- package/android/src/main/java/com/customcamera/MediaCacheManager.kt +782 -0
- package/android/src/main/java/com/customcamera/MediaExportFormats.kt +201 -0
- package/android/src/main/java/com/customcamera/MediaFileIo.kt +310 -0
- package/android/src/main/java/com/customcamera/MediaMetadataStore.kt +494 -0
- package/android/src/main/java/com/customcamera/MediaPreviewEditor.kt +14865 -0
- package/android/src/main/java/com/customcamera/MediaPublisher.kt +423 -0
- package/android/src/main/java/com/customcamera/MediaStorageWorkflow.kt +722 -0
- package/android/src/main/java/com/customcamera/MediaStoreRepository.kt +378 -0
- package/android/src/main/java/com/customcamera/MediaThumbnailView.kt +286 -0
- package/android/src/main/java/com/customcamera/MediaUtils.kt +37 -0
- package/android/src/main/java/com/customcamera/NativeVideoViewManager.kt +845 -0
- package/android/src/main/java/com/customcamera/OfficeDocumentConverter.kt +2791 -0
- package/android/src/main/java/com/customcamera/PendingCaptureCrops.kt +88 -0
- package/android/src/main/java/com/customcamera/PowerPointPreview.kt +4077 -0
- package/android/src/main/java/com/customcamera/RecentPickerStore.kt +74 -0
- package/android/src/main/java/com/customcamera/SecureFileEraser.kt +411 -0
- package/android/src/main/java/com/customcamera/SecureKeyModule.kt +88 -0
- package/android/src/main/java/com/customcamera/SecureMediaDeleter.kt +493 -0
- package/android/src/main/java/com/customcamera/StickerPickerData.kt +107 -0
- package/android/src/main/java/com/customcamera/SvgDrawable.kt +175 -0
- package/android/src/main/java/com/customcamera/SvgIconViewManager.kt +77 -0
- package/android/src/main/java/com/customcamera/TextEntryController.kt +553 -0
- package/android/src/main/java/com/customcamera/ThumbnailLoader.kt +455 -0
- package/android/src/main/java/com/customcamera/UploadService.kt +909 -0
- package/android/src/main/java/com/customcamera/VideoEditUtils.kt +210 -0
- package/android/src/main/java/com/customcamera/VideoRotationTranscoder.kt +1992 -0
- package/android/src/main/java/com/customcamera/gif/AnimatedGifEncoder.kt +473 -0
- package/android/src/main/java/com/customcamera/gif/GifDecoder.kt +690 -0
- package/android/src/main/java/com/customcamera/gif/GifFramesDrawable.kt +160 -0
- package/android/src/main/java/com/customcamera/gif/GifHttp.kt +112 -0
- package/android/src/main/java/com/customcamera/gif/GifImageLoader.kt +186 -0
- package/android/src/main/java/com/customcamera/gif/GifModels.kt +74 -0
- package/android/src/main/java/com/customcamera/gif/GifProvider.kt +49 -0
- package/android/src/main/java/com/customcamera/gif/GifProviders.kt +27 -0
- package/android/src/main/java/com/customcamera/gif/GifRepository.kt +124 -0
- package/android/src/main/java/com/customcamera/gif/GifSafety.kt +33 -0
- package/android/src/main/java/com/customcamera/gif/GiphyGifProvider.kt +146 -0
- package/android/src/main/java/com/customcamera/gif/LZWEncoder.kt +258 -0
- package/android/src/main/java/com/customcamera/gif/NeuQuant.kt +435 -0
- package/android/src/main/java/com/customcamera/gif/TenorGifProvider.kt +147 -0
- package/android/src/main/res/drawable/bg_brush_selected.xml +5 -0
- package/android/src/main/res/drawable/bg_color_swatch.xml +5 -0
- package/android/src/main/res/drawable/bg_editor_toolbar.xml +6 -0
- package/android/src/main/res/drawable/bg_icon_circle.xml +5 -0
- package/android/src/main/res/drawable/bg_icon_circle_light.xml +5 -0
- package/android/src/main/res/drawable/bg_mode_tab_active.xml +6 -0
- package/android/src/main/res/drawable/bg_pill.xml +6 -0
- package/android/src/main/res/drawable/bg_recording_dot.xml +6 -0
- package/android/src/main/res/drawable/bg_selection_badge.xml +8 -0
- package/android/src/main/res/drawable/bg_send_button.xml +5 -0
- package/android/src/main/res/drawable/bg_shutter_inner.xml +5 -0
- package/android/src/main/res/drawable/bg_shutter_recording.xml +6 -0
- package/android/src/main/res/drawable/bg_shutter_ring.xml +8 -0
- package/android/src/main/res/drawable/bg_shutter_video_idle.xml +5 -0
- package/android/src/main/res/drawable/bg_thumbnail.xml +9 -0
- package/android/src/main/res/drawable/ic_aspect_ratio.xml +17 -0
- package/android/src/main/res/drawable/ic_audio.xml +10 -0
- package/android/src/main/res/drawable/ic_back.xml +10 -0
- package/android/src/main/res/drawable/ic_brush_medium.xml +12 -0
- package/android/src/main/res/drawable/ic_brush_thick.xml +12 -0
- package/android/src/main/res/drawable/ic_brush_thin.xml +12 -0
- package/android/src/main/res/drawable/ic_check.xml +17 -0
- package/android/src/main/res/drawable/ic_chevron_down.xml +10 -0
- package/android/src/main/res/drawable/ic_chevron_up.xml +13 -0
- package/android/src/main/res/drawable/ic_clear_drawing.xml +10 -0
- package/android/src/main/res/drawable/ic_close.xml +10 -0
- package/android/src/main/res/drawable/ic_cover.xml +9 -0
- package/android/src/main/res/drawable/ic_crop.xml +10 -0
- package/android/src/main/res/drawable/ic_delete.xml +9 -0
- package/android/src/main/res/drawable/ic_document.xml +10 -0
- package/android/src/main/res/drawable/ic_done.xml +10 -0
- package/android/src/main/res/drawable/ic_download.xml +10 -0
- package/android/src/main/res/drawable/ic_emoji.xml +10 -0
- package/android/src/main/res/drawable/ic_filter.xml +10 -0
- package/android/src/main/res/drawable/ic_flash_auto.xml +7 -0
- package/android/src/main/res/drawable/ic_flash_off.xml +23 -0
- package/android/src/main/res/drawable/ic_flash_on.xml +16 -0
- package/android/src/main/res/drawable/ic_flip.xml +15 -0
- package/android/src/main/res/drawable/ic_gallery.xml +10 -0
- package/android/src/main/res/drawable/ic_gif.xml +24 -0
- package/android/src/main/res/drawable/ic_lock.xml +19 -0
- package/android/src/main/res/drawable/ic_lock_open.xml +22 -0
- package/android/src/main/res/drawable/ic_marker.xml +10 -0
- package/android/src/main/res/drawable/ic_more_vert.xml +18 -0
- package/android/src/main/res/drawable/ic_overlay_close.xml +19 -0
- package/android/src/main/res/drawable/ic_overlay_resize.xml +18 -0
- package/android/src/main/res/drawable/ic_pause.xml +10 -0
- package/android/src/main/res/drawable/ic_photo_mode.xml +10 -0
- package/android/src/main/res/drawable/ic_play.xml +10 -0
- package/android/src/main/res/drawable/ic_redo.xml +10 -0
- package/android/src/main/res/drawable/ic_rotate.xml +9 -0
- package/android/src/main/res/drawable/ic_send.xml +10 -0
- package/android/src/main/res/drawable/ic_share.xml +10 -0
- package/android/src/main/res/drawable/ic_stat_upload.xml +10 -0
- package/android/src/main/res/drawable/ic_sticker.xml +24 -0
- package/android/src/main/res/drawable/ic_text.xml +10 -0
- package/android/src/main/res/drawable/ic_text_align_center.xml +11 -0
- package/android/src/main/res/drawable/ic_text_align_left.xml +11 -0
- package/android/src/main/res/drawable/ic_text_align_right.xml +11 -0
- package/android/src/main/res/drawable/ic_text_bg.xml +11 -0
- package/android/src/main/res/drawable/ic_trim.xml +23 -0
- package/android/src/main/res/drawable/ic_undo.xml +10 -0
- package/android/src/main/res/drawable/ic_video_mode.xml +10 -0
- package/android/src/main/res/drawable/ic_video_note.xml +13 -0
- package/android/src/main/res/drawable/ic_volume_off.xml +9 -0
- package/android/src/main/res/drawable/ic_volume_on.xml +9 -0
- package/android/src/main/res/drawable/sticker_heart.xml +9 -0
- package/android/src/main/res/drawable/sticker_smile.xml +9 -0
- package/android/src/main/res/drawable/sticker_star.xml +9 -0
- package/android/src/main/res/drawable/sticker_thumbsup.xml +9 -0
- package/android/src/main/res/values/colors.xml +34 -0
- package/android/src/main/res/values/ids.xml +15 -0
- package/android/src/main/res/values/strings.xml +15 -0
- package/android/src/main/res/values/styles.xml +20 -0
- package/android/src/main/res/xml/file_paths.xml +34 -0
- package/ios/CustomCamera.h +5 -0
- package/ios/CustomCamera.mm +214 -0
- package/lib/module/AudioPlayerContext.js +233 -0
- package/lib/module/AudioPlayerContext.js.map +1 -0
- package/lib/module/CameraPreview.js +304 -0
- package/lib/module/CameraPreview.js.map +1 -0
- package/lib/module/NativeAnimatedImageView.js +41 -0
- package/lib/module/NativeAnimatedImageView.js.map +1 -0
- package/lib/module/NativeAudioPlayerView.js +33 -0
- package/lib/module/NativeAudioPlayerView.js.map +1 -0
- package/lib/module/NativeBlurView.js +35 -0
- package/lib/module/NativeBlurView.js.map +1 -0
- package/lib/module/NativeCustomCamera.js +128 -0
- package/lib/module/NativeCustomCamera.js.map +1 -0
- package/lib/module/NativeCustomCamera.web.js +143 -0
- package/lib/module/NativeCustomCamera.web.js.map +1 -0
- package/lib/module/NativeCustomVideoView.js +5 -0
- package/lib/module/NativeCustomVideoView.js.map +1 -0
- package/lib/module/NativeDocumentPreviewView.js +156 -0
- package/lib/module/NativeDocumentPreviewView.js.map +1 -0
- package/lib/module/NativeMediaThumbnailView.js +110 -0
- package/lib/module/NativeMediaThumbnailView.js.map +1 -0
- package/lib/module/NativeSvgIcon.js +32 -0
- package/lib/module/NativeSvgIcon.js.map +1 -0
- package/lib/module/ResponsivePreviewContainer.js +171 -0
- package/lib/module/ResponsivePreviewContainer.js.map +1 -0
- package/lib/module/accessibility.js +61 -0
- package/lib/module/accessibility.js.map +1 -0
- package/lib/module/config.js +352 -0
- package/lib/module/config.js.map +1 -0
- package/lib/module/cpuOptimization.js +296 -0
- package/lib/module/cpuOptimization.js.map +1 -0
- package/lib/module/db/DatabaseManager.js +191 -0
- package/lib/module/db/DatabaseManager.js.map +1 -0
- package/lib/module/db/MediaMapper.js +284 -0
- package/lib/module/db/MediaMapper.js.map +1 -0
- package/lib/module/db/MediaRepository.js +242 -0
- package/lib/module/db/MediaRepository.js.map +1 -0
- package/lib/module/db/index.js +41 -0
- package/lib/module/db/index.js.map +1 -0
- package/lib/module/db/migrations.js +180 -0
- package/lib/module/db/migrations.js.map +1 -0
- package/lib/module/db/react-native-sqlcipher.d.js +2 -0
- package/lib/module/db/react-native-sqlcipher.d.js.map +1 -0
- package/lib/module/db/secureKey.js +87 -0
- package/lib/module/db/secureKey.js.map +1 -0
- package/lib/module/db/types.js +57 -0
- package/lib/module/db/types.js.map +1 -0
- package/lib/module/db/useMediaDatabase.js +123 -0
- package/lib/module/db/useMediaDatabase.js.map +1 -0
- package/lib/module/defaultIcons.js +2259 -0
- package/lib/module/defaultIcons.js.map +1 -0
- package/lib/module/deviceCapabilities.js +408 -0
- package/lib/module/deviceCapabilities.js.map +1 -0
- package/lib/module/errors.js +267 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/iconConfig.js +796 -0
- package/lib/module/iconConfig.js.map +1 -0
- package/lib/module/icons.js +514 -0
- package/lib/module/icons.js.map +1 -0
- package/lib/module/index.js +251 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/jest-globals.d.js +2 -0
- package/lib/module/jest-globals.d.js.map +1 -0
- package/lib/module/library/MediaLibrary.js +107 -0
- package/lib/module/library/MediaLibrary.js.map +1 -0
- package/lib/module/library/MediaLibraryScreen.js +2597 -0
- package/lib/module/library/MediaLibraryScreen.js.map +1 -0
- package/lib/module/library/components/AudioPreview.js +74 -0
- package/lib/module/library/components/AudioPreview.js.map +1 -0
- package/lib/module/library/components/DocumentPreview.js +331 -0
- package/lib/module/library/components/DocumentPreview.js.map +1 -0
- package/lib/module/library/components/ExpandableFab.js +343 -0
- package/lib/module/library/components/ExpandableFab.js.map +1 -0
- package/lib/module/library/components/FileTiles.js +251 -0
- package/lib/module/library/components/FileTiles.js.map +1 -0
- package/lib/module/library/components/ImagePreview.js +70 -0
- package/lib/module/library/components/ImagePreview.js.map +1 -0
- package/lib/module/library/components/MediaMetadataHeader.js +175 -0
- package/lib/module/library/components/MediaMetadataHeader.js.map +1 -0
- package/lib/module/library/components/RecordAudioScreen.js +816 -0
- package/lib/module/library/components/RecordAudioScreen.js.map +1 -0
- package/lib/module/library/components/VideoPreview.js +453 -0
- package/lib/module/library/components/VideoPreview.js.map +1 -0
- package/lib/module/library/components/ViewerCounter.js +55 -0
- package/lib/module/library/components/ViewerCounter.js.map +1 -0
- package/lib/module/library/compressionEstimate.js +507 -0
- package/lib/module/library/compressionEstimate.js.map +1 -0
- package/lib/module/library/fileMetadata.js +196 -0
- package/lib/module/library/fileMetadata.js.map +1 -0
- package/lib/module/library/index.js +42 -0
- package/lib/module/library/index.js.map +1 -0
- package/lib/module/library/libraryIconRegistry.js +69 -0
- package/lib/module/library/libraryIconRegistry.js.map +1 -0
- package/lib/module/library/libraryIcons.js +858 -0
- package/lib/module/library/libraryIcons.js.map +1 -0
- package/lib/module/library/localizedFormat.js +181 -0
- package/lib/module/library/localizedFormat.js.map +1 -0
- package/lib/module/library/palette.js +225 -0
- package/lib/module/library/palette.js.map +1 -0
- package/lib/module/library/responsive.js +53 -0
- package/lib/module/library/responsive.js.map +1 -0
- package/lib/module/locales.js +416 -0
- package/lib/module/locales.js.map +1 -0
- package/lib/module/localization.js +1064 -0
- package/lib/module/localization.js.map +1 -0
- package/lib/module/logger.js +20 -0
- package/lib/module/logger.js.map +1 -0
- package/lib/module/lowMemoryCache.js +206 -0
- package/lib/module/lowMemoryCache.js.map +1 -0
- package/lib/module/mediaHistory.js +33 -0
- package/lib/module/mediaHistory.js.map +1 -0
- package/lib/module/mediaStorageService.js +402 -0
- package/lib/module/mediaStorageService.js.map +1 -0
- package/lib/module/memory.js +79 -0
- package/lib/module/memory.js.map +1 -0
- package/lib/module/nativeActions.js +307 -0
- package/lib/module/nativeActions.js.map +1 -0
- package/lib/module/nativeComponentSupport.js +61 -0
- package/lib/module/nativeComponentSupport.js.map +1 -0
- package/lib/module/networkPerformance.js +24 -0
- package/lib/module/networkPerformance.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/performance.js +104 -0
- package/lib/module/performance.js.map +1 -0
- package/lib/module/performanceMonitor.js +155 -0
- package/lib/module/performanceMonitor.js.map +1 -0
- package/lib/module/permissions.js +370 -0
- package/lib/module/permissions.js.map +1 -0
- package/lib/module/rendering.js +40 -0
- package/lib/module/rendering.js.map +1 -0
- package/lib/module/security.js +18 -0
- package/lib/module/security.js.map +1 -0
- package/lib/module/state.js +266 -0
- package/lib/module/state.js.map +1 -0
- package/lib/module/storage.js +400 -0
- package/lib/module/storage.js.map +1 -0
- package/lib/module/theme.js +390 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils.js +115 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/module/validation.js +288 -0
- package/lib/module/validation.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/AudioPlayerContext.d.ts +27 -0
- package/lib/typescript/src/AudioPlayerContext.d.ts.map +1 -0
- package/lib/typescript/src/CameraPreview.d.ts +13 -0
- package/lib/typescript/src/CameraPreview.d.ts.map +1 -0
- package/lib/typescript/src/NativeAnimatedImageView.d.ts +33 -0
- package/lib/typescript/src/NativeAnimatedImageView.d.ts.map +1 -0
- package/lib/typescript/src/NativeAudioPlayerView.d.ts +12 -0
- package/lib/typescript/src/NativeAudioPlayerView.d.ts.map +1 -0
- package/lib/typescript/src/NativeBlurView.d.ts +12 -0
- package/lib/typescript/src/NativeBlurView.d.ts.map +1 -0
- package/lib/typescript/src/NativeCustomCamera.d.ts +167 -0
- package/lib/typescript/src/NativeCustomCamera.d.ts.map +1 -0
- package/lib/typescript/src/NativeCustomCamera.web.d.ts +47 -0
- package/lib/typescript/src/NativeCustomCamera.web.d.ts.map +1 -0
- package/lib/typescript/src/NativeCustomVideoView.d.ts +30 -0
- package/lib/typescript/src/NativeCustomVideoView.d.ts.map +1 -0
- package/lib/typescript/src/NativeDocumentPreviewView.d.ts +48 -0
- package/lib/typescript/src/NativeDocumentPreviewView.d.ts.map +1 -0
- package/lib/typescript/src/NativeMediaThumbnailView.d.ts +54 -0
- package/lib/typescript/src/NativeMediaThumbnailView.d.ts.map +1 -0
- package/lib/typescript/src/NativeSvgIcon.d.ts +25 -0
- package/lib/typescript/src/NativeSvgIcon.d.ts.map +1 -0
- package/lib/typescript/src/ResponsivePreviewContainer.d.ts +92 -0
- package/lib/typescript/src/ResponsivePreviewContainer.d.ts.map +1 -0
- package/lib/typescript/src/accessibility.d.ts +20 -0
- package/lib/typescript/src/accessibility.d.ts.map +1 -0
- package/lib/typescript/src/config.d.ts +145 -0
- package/lib/typescript/src/config.d.ts.map +1 -0
- package/lib/typescript/src/cpuOptimization.d.ts +63 -0
- package/lib/typescript/src/cpuOptimization.d.ts.map +1 -0
- package/lib/typescript/src/db/DatabaseManager.d.ts +48 -0
- package/lib/typescript/src/db/DatabaseManager.d.ts.map +1 -0
- package/lib/typescript/src/db/MediaMapper.d.ts +77 -0
- package/lib/typescript/src/db/MediaMapper.d.ts.map +1 -0
- package/lib/typescript/src/db/MediaRepository.d.ts +66 -0
- package/lib/typescript/src/db/MediaRepository.d.ts.map +1 -0
- package/lib/typescript/src/db/index.d.ts +23 -0
- package/lib/typescript/src/db/index.d.ts.map +1 -0
- package/lib/typescript/src/db/migrations.d.ts +31 -0
- package/lib/typescript/src/db/migrations.d.ts.map +1 -0
- package/lib/typescript/src/db/secureKey.d.ts +10 -0
- package/lib/typescript/src/db/secureKey.d.ts.map +1 -0
- package/lib/typescript/src/db/types.d.ts +115 -0
- package/lib/typescript/src/db/types.d.ts.map +1 -0
- package/lib/typescript/src/db/useMediaDatabase.d.ts +41 -0
- package/lib/typescript/src/db/useMediaDatabase.d.ts.map +1 -0
- package/lib/typescript/src/defaultIcons.d.ts +139 -0
- package/lib/typescript/src/defaultIcons.d.ts.map +1 -0
- package/lib/typescript/src/deviceCapabilities.d.ts +92 -0
- package/lib/typescript/src/deviceCapabilities.d.ts.map +1 -0
- package/lib/typescript/src/errors.d.ts +95 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/iconConfig.d.ts +176 -0
- package/lib/typescript/src/iconConfig.d.ts.map +1 -0
- package/lib/typescript/src/icons.d.ts +217 -0
- package/lib/typescript/src/icons.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +104 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/library/MediaLibrary.d.ts +57 -0
- package/lib/typescript/src/library/MediaLibrary.d.ts.map +1 -0
- package/lib/typescript/src/library/MediaLibraryScreen.d.ts +51 -0
- package/lib/typescript/src/library/MediaLibraryScreen.d.ts.map +1 -0
- package/lib/typescript/src/library/components/AudioPreview.d.ts +6 -0
- package/lib/typescript/src/library/components/AudioPreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/DocumentPreview.d.ts +10 -0
- package/lib/typescript/src/library/components/DocumentPreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/ExpandableFab.d.ts +39 -0
- package/lib/typescript/src/library/components/ExpandableFab.d.ts.map +1 -0
- package/lib/typescript/src/library/components/FileTiles.d.ts +8 -0
- package/lib/typescript/src/library/components/FileTiles.d.ts.map +1 -0
- package/lib/typescript/src/library/components/ImagePreview.d.ts +5 -0
- package/lib/typescript/src/library/components/ImagePreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts +16 -0
- package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts.map +1 -0
- package/lib/typescript/src/library/components/RecordAudioScreen.d.ts +8 -0
- package/lib/typescript/src/library/components/RecordAudioScreen.d.ts.map +1 -0
- package/lib/typescript/src/library/components/VideoPreview.d.ts +20 -0
- package/lib/typescript/src/library/components/VideoPreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/ViewerCounter.d.ts +13 -0
- package/lib/typescript/src/library/components/ViewerCounter.d.ts.map +1 -0
- package/lib/typescript/src/library/compressionEstimate.d.ts +313 -0
- package/lib/typescript/src/library/compressionEstimate.d.ts.map +1 -0
- package/lib/typescript/src/library/fileMetadata.d.ts +33 -0
- package/lib/typescript/src/library/fileMetadata.d.ts.map +1 -0
- package/lib/typescript/src/library/index.d.ts +40 -0
- package/lib/typescript/src/library/index.d.ts.map +1 -0
- package/lib/typescript/src/library/libraryIconRegistry.d.ts +35 -0
- package/lib/typescript/src/library/libraryIconRegistry.d.ts.map +1 -0
- package/lib/typescript/src/library/libraryIcons.d.ts +85 -0
- package/lib/typescript/src/library/libraryIcons.d.ts.map +1 -0
- package/lib/typescript/src/library/localizedFormat.d.ts +49 -0
- package/lib/typescript/src/library/localizedFormat.d.ts.map +1 -0
- package/lib/typescript/src/library/palette.d.ts +104 -0
- package/lib/typescript/src/library/palette.d.ts.map +1 -0
- package/lib/typescript/src/library/responsive.d.ts +15 -0
- package/lib/typescript/src/library/responsive.d.ts.map +1 -0
- package/lib/typescript/src/locales.d.ts +103 -0
- package/lib/typescript/src/locales.d.ts.map +1 -0
- package/lib/typescript/src/localization.d.ts +1051 -0
- package/lib/typescript/src/localization.d.ts.map +1 -0
- package/lib/typescript/src/logger.d.ts +4 -0
- package/lib/typescript/src/logger.d.ts.map +1 -0
- package/lib/typescript/src/lowMemoryCache.d.ts +64 -0
- package/lib/typescript/src/lowMemoryCache.d.ts.map +1 -0
- package/lib/typescript/src/mediaHistory.d.ts +3 -0
- package/lib/typescript/src/mediaHistory.d.ts.map +1 -0
- package/lib/typescript/src/mediaStorageService.d.ts +155 -0
- package/lib/typescript/src/mediaStorageService.d.ts.map +1 -0
- package/lib/typescript/src/memory.d.ts +21 -0
- package/lib/typescript/src/memory.d.ts.map +1 -0
- package/lib/typescript/src/nativeActions.d.ts +174 -0
- package/lib/typescript/src/nativeActions.d.ts.map +1 -0
- package/lib/typescript/src/nativeComponentSupport.d.ts +30 -0
- package/lib/typescript/src/nativeComponentSupport.d.ts.map +1 -0
- package/lib/typescript/src/networkPerformance.d.ts +12 -0
- package/lib/typescript/src/networkPerformance.d.ts.map +1 -0
- package/lib/typescript/src/performance.d.ts +32 -0
- package/lib/typescript/src/performance.d.ts.map +1 -0
- package/lib/typescript/src/performanceMonitor.d.ts +45 -0
- package/lib/typescript/src/performanceMonitor.d.ts.map +1 -0
- package/lib/typescript/src/permissions.d.ts +132 -0
- package/lib/typescript/src/permissions.d.ts.map +1 -0
- package/lib/typescript/src/rendering.d.ts +9 -0
- package/lib/typescript/src/rendering.d.ts.map +1 -0
- package/lib/typescript/src/security.d.ts +6 -0
- package/lib/typescript/src/security.d.ts.map +1 -0
- package/lib/typescript/src/state.d.ts +102 -0
- package/lib/typescript/src/state.d.ts.map +1 -0
- package/lib/typescript/src/storage.d.ts +117 -0
- package/lib/typescript/src/storage.d.ts.map +1 -0
- package/lib/typescript/src/theme.d.ts +15 -0
- package/lib/typescript/src/theme.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +802 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils.d.ts +50 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/lib/typescript/src/validation.d.ts +52 -0
- package/lib/typescript/src/validation.d.ts.map +1 -0
- package/package.json +204 -0
- package/react-native.config.js +17 -0
- package/src/AudioPlayerContext.tsx +220 -0
- package/src/CameraPreview.tsx +352 -0
- package/src/NativeAnimatedImageView.tsx +71 -0
- package/src/NativeAudioPlayerView.tsx +39 -0
- package/src/NativeBlurView.tsx +40 -0
- package/src/NativeCustomCamera.ts +305 -0
- package/src/NativeCustomCamera.web.ts +192 -0
- package/src/NativeCustomVideoView.ts +30 -0
- package/src/NativeDocumentPreviewView.tsx +196 -0
- package/src/NativeMediaThumbnailView.tsx +167 -0
- package/src/NativeSvgIcon.tsx +46 -0
- package/src/ResponsivePreviewContainer.tsx +227 -0
- package/src/accessibility.ts +80 -0
- package/src/config.ts +406 -0
- package/src/cpuOptimization.ts +365 -0
- package/src/db/DatabaseManager.ts +212 -0
- package/src/db/MediaMapper.ts +377 -0
- package/src/db/MediaRepository.ts +313 -0
- package/src/db/index.ts +73 -0
- package/src/db/migrations.ts +222 -0
- package/src/db/react-native-sqlcipher.d.ts +76 -0
- package/src/db/secureKey.ts +100 -0
- package/src/db/types.ts +123 -0
- package/src/db/useMediaDatabase.ts +191 -0
- package/src/defaultIcons.tsx +2390 -0
- package/src/deviceCapabilities.ts +438 -0
- package/src/errors.ts +350 -0
- package/src/iconConfig.tsx +962 -0
- package/src/icons.tsx +788 -0
- package/src/index.tsx +763 -0
- package/src/jest-globals.d.ts +9 -0
- package/src/library/MediaLibrary.tsx +141 -0
- package/src/library/MediaLibraryScreen.tsx +3003 -0
- package/src/library/components/AudioPreview.tsx +73 -0
- package/src/library/components/DocumentPreview.tsx +361 -0
- package/src/library/components/ExpandableFab.tsx +342 -0
- package/src/library/components/FileTiles.tsx +252 -0
- package/src/library/components/ImagePreview.tsx +72 -0
- package/src/library/components/MediaMetadataHeader.tsx +208 -0
- package/src/library/components/RecordAudioScreen.tsx +845 -0
- package/src/library/components/VideoPreview.tsx +478 -0
- package/src/library/components/ViewerCounter.tsx +71 -0
- package/src/library/compressionEstimate.ts +662 -0
- package/src/library/fileMetadata.ts +212 -0
- package/src/library/index.ts +66 -0
- package/src/library/libraryIconRegistry.tsx +86 -0
- package/src/library/libraryIcons.tsx +928 -0
- package/src/library/localizedFormat.ts +207 -0
- package/src/library/palette.ts +281 -0
- package/src/library/responsive.ts +49 -0
- package/src/locales.ts +381 -0
- package/src/localization.ts +1947 -0
- package/src/logger.ts +20 -0
- package/src/lowMemoryCache.ts +218 -0
- package/src/mediaHistory.ts +42 -0
- package/src/mediaStorageService.ts +546 -0
- package/src/memory.ts +102 -0
- package/src/nativeActions.ts +422 -0
- package/src/nativeComponentSupport.ts +60 -0
- package/src/networkPerformance.ts +30 -0
- package/src/performance.ts +137 -0
- package/src/performanceMonitor.ts +219 -0
- package/src/permissions.ts +403 -0
- package/src/rendering.ts +47 -0
- package/src/security.ts +19 -0
- package/src/state.ts +333 -0
- package/src/storage.ts +453 -0
- package/src/theme.tsx +467 -0
- package/src/types.ts +946 -0
- package/src/utils.ts +177 -0
- package/src/validation.ts +372 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaMapper — the single translation boundary between the UI-facing
|
|
3
|
+
* `CameraAsset` type and the persisted `MediaRecord`/SQL row.
|
|
4
|
+
*
|
|
5
|
+
* Keeping all field mapping here means the rest of the app (screens, hooks) and
|
|
6
|
+
* the database schema can evolve independently. Two directions are supported:
|
|
7
|
+
* - `assetToRecordInput` CameraAsset → MediaRecordInput (for writes)
|
|
8
|
+
* - `rowToRecord` / `recordToAsset` SQL row → MediaRecord → CameraAsset (reads)
|
|
9
|
+
*/
|
|
10
|
+
import type { CameraAsset } from '../types';
|
|
11
|
+
import { type MediaRecord, type MediaRecordInput, type MediaSource, type MediaType } from './types';
|
|
12
|
+
/**
|
|
13
|
+
* UI uses `photo`; the database normalizes photos to `image`. Videos, documents
|
|
14
|
+
* and audio are preserved as-is so a picked PDF or track keeps its true kind
|
|
15
|
+
* instead of collapsing into `image` (the historical cause of documents/audio
|
|
16
|
+
* showing up under the Photos filter).
|
|
17
|
+
*/
|
|
18
|
+
export declare function assetTypeToMediaType(type: CameraAsset['type']): MediaType;
|
|
19
|
+
/** Inverse of {@link assetTypeToMediaType}. */
|
|
20
|
+
export declare function mediaTypeToAssetType(type: MediaType): CameraAsset['type'];
|
|
21
|
+
/**
|
|
22
|
+
* The file extension a synthesized name should carry for `mimeType`, defaulting to the given
|
|
23
|
+
* fallback when the type is missing or unrecognised.
|
|
24
|
+
*/
|
|
25
|
+
export declare function extensionForMimeType(mimeType: string | null | undefined, fallback: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Resolves the canonical persisted {@link MediaType} for an asset using every
|
|
28
|
+
* available signal — the caller-provided `type`, the MIME type, then the file
|
|
29
|
+
* extension — so a mis-tagged or MIME-less item is still classified correctly.
|
|
30
|
+
* Order of precedence: a document path → MIME family → extension → the UI `type`
|
|
31
|
+
* fallback.
|
|
32
|
+
*/
|
|
33
|
+
export declare function classifyMediaType(asset: CameraAsset): MediaType;
|
|
34
|
+
/** Normalizes an arbitrary source hint onto the allowed enum. */
|
|
35
|
+
export declare function normalizeSource(source: unknown): MediaSource;
|
|
36
|
+
/**
|
|
37
|
+
* Resolves the FINAL, persistent Documents path for an asset — the path that
|
|
38
|
+
* must be stored in SQLCipher — or `null` if the asset is not (yet) in the
|
|
39
|
+
* Documents directory.
|
|
40
|
+
*
|
|
41
|
+
* The native Send workflow moves a confirmed file from cache to
|
|
42
|
+
* `.../Documents/media_documents/...`, clears `cachePath`, and sets
|
|
43
|
+
* `documentUri`. This helper therefore prefers `documentUri`, then falls back to
|
|
44
|
+
* `uri` ONLY when that uri is itself a published Documents path (not a cache or
|
|
45
|
+
* `content://` gallery path). A still-cached / publish-failed asset returns
|
|
46
|
+
* `null`, so callers can skip it and never persist a temporary location.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveDocumentsPath(asset: CameraAsset): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* True when an asset has been successfully moved to the Documents directory and
|
|
51
|
+
* is therefore eligible to be persisted in SQLCipher. Cache-only or
|
|
52
|
+
* publish-failed assets return false.
|
|
53
|
+
*/
|
|
54
|
+
export declare function isPublishedToDocuments(asset: CameraAsset): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Auto-detects the origin of an asset. Gallery-selected media retains its
|
|
57
|
+
* original `content://`/gallery uri in `originalUri`; camera captures do not.
|
|
58
|
+
* An explicit hint always wins.
|
|
59
|
+
*/
|
|
60
|
+
export declare function detectSource(asset: CameraAsset, hint?: MediaSource): MediaSource;
|
|
61
|
+
/**
|
|
62
|
+
* Builds a `MediaRecordInput` from a UI asset, storing the FINAL Documents path.
|
|
63
|
+
*
|
|
64
|
+
* @param source optional origin hint; when omitted the origin is auto-detected
|
|
65
|
+
* (gallery vs camera). The stored `filePath` is always the resolved Documents
|
|
66
|
+
* path — callers must only pass assets for which {@link isPublishedToDocuments}
|
|
67
|
+
* is true (the repository enforces this).
|
|
68
|
+
*/
|
|
69
|
+
export declare function assetToRecordInput(asset: CameraAsset, source?: MediaSource): MediaRecordInput;
|
|
70
|
+
/** Maps a raw SQL row (snake_case columns) into a typed `MediaRecord`. */
|
|
71
|
+
export declare function rowToRecord(row: Record<string, any>): MediaRecord;
|
|
72
|
+
/**
|
|
73
|
+
* Maps a persisted record back to the UI `CameraAsset` shape so the existing
|
|
74
|
+
* Media Library renders identically — only the data source changed.
|
|
75
|
+
*/
|
|
76
|
+
export declare function recordToAsset(record: MediaRecord): CameraAsset;
|
|
77
|
+
//# sourceMappingURL=MediaMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaMapper.d.ts","sourceRoot":"","sources":["../../../../src/db/MediaMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAWzE;AAED,+CAA+C;AAC/C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAWzE;AA4FD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAiC/D;AAsBD,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAE5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAUtE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAElE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,WAAW,GACjB,WAAW,CAMb;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,gBAAgB,CAiClB;AASD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAgBjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAe9D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaRepository — the CRUD/service layer over the `media` table.
|
|
3
|
+
*
|
|
4
|
+
* This is the ONLY module that writes SQL for media rows. UI code and hooks talk
|
|
5
|
+
* to strongly-typed `MediaRecord`/`CameraAsset` objects and never see a query
|
|
6
|
+
* string, keeping a clean separation between presentation and persistence.
|
|
7
|
+
*
|
|
8
|
+
* All operations delegate raw execution to the centralized `DatabaseManager`.
|
|
9
|
+
*/
|
|
10
|
+
import type { CameraAsset } from '../types';
|
|
11
|
+
import { type DatabaseManager } from './DatabaseManager';
|
|
12
|
+
import { type MediaCounts, type MediaQueryOptions, type MediaRecord, type MediaRecordInput, type MediaSource } from './types';
|
|
13
|
+
export declare class MediaRepository {
|
|
14
|
+
private readonly db;
|
|
15
|
+
constructor(db?: DatabaseManager);
|
|
16
|
+
/** Builds an idempotent UPSERT statement for one record. */
|
|
17
|
+
private upsertStatement;
|
|
18
|
+
/** Inserts (or updates on id/path conflict) a single record. */
|
|
19
|
+
insert(input: MediaRecordInput): Promise<void>;
|
|
20
|
+
/** Inserts many records atomically in one transaction. */
|
|
21
|
+
insertMany(inputs: MediaRecordInput[]): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Persists confirmed, Documents-backed media from the capture/gallery Send
|
|
24
|
+
* flows. This is the ONLY path the app uses after a successful Send.
|
|
25
|
+
*
|
|
26
|
+
* Contract enforced here (so callers can't create inconsistent records):
|
|
27
|
+
* 1. Only assets that have been successfully moved to the Documents
|
|
28
|
+
* directory are persisted — see {@link isPublishedToDocuments}. A
|
|
29
|
+
* cache-only or publish-failed asset is skipped, never stored.
|
|
30
|
+
* 2. The stored `filePath` is always the final Documents path, never cache.
|
|
31
|
+
* 3. The write is atomic; on failure nothing is committed (all-or-nothing),
|
|
32
|
+
* so a partial batch can't leave dangling rows.
|
|
33
|
+
*
|
|
34
|
+
* @param source optional origin hint; when omitted, each asset's origin is
|
|
35
|
+
* auto-detected (gallery vs camera).
|
|
36
|
+
* @returns the records actually persisted (may be fewer than `assets`).
|
|
37
|
+
*/
|
|
38
|
+
insertAssets(assets: CameraAsset[], source?: MediaSource): Promise<MediaRecord[]>;
|
|
39
|
+
private buildWhere;
|
|
40
|
+
/** Returns records matching the query, newest first by default. */
|
|
41
|
+
getAll(options?: MediaQueryOptions): Promise<MediaRecord[]>;
|
|
42
|
+
/** Returns only image records (backs the "Photos" filter). */
|
|
43
|
+
getImages(options?: Omit<MediaQueryOptions, 'filter'>): Promise<MediaRecord[]>;
|
|
44
|
+
/** Returns only video records (backs the "Videos" filter). */
|
|
45
|
+
getVideos(options?: Omit<MediaQueryOptions, 'filter'>): Promise<MediaRecord[]>;
|
|
46
|
+
/** Returns records mapped straight to UI `CameraAsset`s. */
|
|
47
|
+
getAssets(options?: MediaQueryOptions): Promise<CameraAsset[]>;
|
|
48
|
+
/** Fetches a single record by id, or null. */
|
|
49
|
+
getById(id: string): Promise<MediaRecord | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Computes the filter-card counts directly from the database in one query,
|
|
52
|
+
* one bucket per media kind (image / video / document / audio).
|
|
53
|
+
*/
|
|
54
|
+
getCounts(): Promise<MediaCounts>;
|
|
55
|
+
/** Deletes a record by id. Returns true if a row was removed. */
|
|
56
|
+
deleteById(id: string): Promise<boolean>;
|
|
57
|
+
/** Deletes a record by its file path/URI. Returns true if a row was removed. */
|
|
58
|
+
deleteByPath(filePath: string): Promise<boolean>;
|
|
59
|
+
/** Deletes multiple records by id atomically. Returns the number requested. */
|
|
60
|
+
deleteMany(ids: string[]): Promise<void>;
|
|
61
|
+
/** Removes every media row. */
|
|
62
|
+
clear(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
/** Returns the shared `MediaRepository` singleton. */
|
|
65
|
+
export declare function getMediaRepository(): MediaRepository;
|
|
66
|
+
//# sourceMappingURL=MediaRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaRepository.d.ts","sourceRoot":"","sources":["../../../../src/db/MediaRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAkBjB,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,GAAE,eAAsC;IAEvE,4DAA4D;IAC5D,OAAO,CAAC,eAAe;IA0CvB,gEAAgE;IAC1D,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,0DAA0D;IACpD,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;;;;;;;;;;;;;OAeG;IACG,YAAY,CAChB,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,EAAE,CAAC;IAmCzB,OAAO,CAAC,UAAU;IAYlB,mEAAmE;IAC7D,MAAM,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiCrE,8DAA8D;IAC9D,SAAS,CAAC,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAM;IAIzD,8DAA8D;IAC9D,SAAS,CAAC,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAM;IAIzD,4DAA4D;IACtD,SAAS,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKxE,8CAA8C;IACxC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQtD;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAiCvC,iEAAiE;IAC3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9C,gFAAgF;IAC1E,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtD,+EAA+E;IACzE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9C,+BAA+B;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAKD,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encrypted media database — public API.
|
|
3
|
+
*
|
|
4
|
+
* A modular SQLCipher persistence layer for the camera plugin:
|
|
5
|
+
* - `DatabaseManager` centralized encrypted connection + primitives
|
|
6
|
+
* - `migrations` schema versioning (PRAGMA user_version)
|
|
7
|
+
* - `MediaRepository` typed CRUD/service layer
|
|
8
|
+
* - `MediaMapper` CameraAsset ⇆ MediaRecord translation
|
|
9
|
+
* - `useMediaDatabase` React hook bridging UI and the store
|
|
10
|
+
* - `secureKey` Keystore-backed encryption-key provisioning
|
|
11
|
+
*
|
|
12
|
+
* Consumers should generally use `useMediaDatabase` (UI) or `getMediaRepository`
|
|
13
|
+
* (imperative), and call `initializeMediaDatabase()` once at startup.
|
|
14
|
+
*/
|
|
15
|
+
export type { MediaRecord, MediaRecordInput, MediaType, MediaSource, MediaFilter, MediaCounts, MediaQueryOptions, } from './types';
|
|
16
|
+
export { MEDIA_TABLE, MediaColumns } from './types';
|
|
17
|
+
export { DatabaseManager, getDatabaseManager, initializeMediaDatabase, type BatchStatement, } from './DatabaseManager';
|
|
18
|
+
export { MIGRATIONS, LATEST_SCHEMA_VERSION, runMigrations, type Migration, type MigrationExecutor, } from './migrations';
|
|
19
|
+
export { MediaRepository, getMediaRepository } from './MediaRepository';
|
|
20
|
+
export { assetToRecordInput, recordToAsset, rowToRecord, assetTypeToMediaType, mediaTypeToAssetType, normalizeSource, extensionForMimeType, resolveDocumentsPath, isPublishedToDocuments, detectSource, } from './MediaMapper';
|
|
21
|
+
export { getDatabaseKey, isHardwareBackedKeyAvailable, } from './secureKey';
|
|
22
|
+
export { useMediaDatabase, type UseMediaDatabaseResult, } from './useMediaDatabase';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EAEpB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,GACb,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,cAAc,EACd,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** A single forward migration step. */
|
|
2
|
+
export interface Migration {
|
|
3
|
+
/** Target `user_version` this migration upgrades the database to. */
|
|
4
|
+
version: number;
|
|
5
|
+
/** Human-readable description (documentation only). */
|
|
6
|
+
description: string;
|
|
7
|
+
/** Ordered SQL statements executed to reach `version`. */
|
|
8
|
+
statements: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Ordered list of migrations. `LATEST_SCHEMA_VERSION` is derived from the last
|
|
12
|
+
* entry, so bumping the schema only requires appending a new `Migration`.
|
|
13
|
+
*/
|
|
14
|
+
export declare const MIGRATIONS: Migration[];
|
|
15
|
+
/** The schema version the app expects after all migrations are applied. */
|
|
16
|
+
export declare const LATEST_SCHEMA_VERSION: number;
|
|
17
|
+
/** Minimal executor contract so migrations don't depend on the concrete manager. */
|
|
18
|
+
export interface MigrationExecutor {
|
|
19
|
+
/** Reads the current `PRAGMA user_version`. */
|
|
20
|
+
getVersion(): Promise<number>;
|
|
21
|
+
/** Runs the given statements atomically in a single transaction. */
|
|
22
|
+
runBatch(statements: string[]): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Applies all pending migrations. Safe to call on every launch — a fully
|
|
26
|
+
* up-to-date database performs only a cheap version read and returns.
|
|
27
|
+
*
|
|
28
|
+
* @returns the schema version after migration.
|
|
29
|
+
*/
|
|
30
|
+
export declare function runMigrations(executor: MigrationExecutor): Promise<number>;
|
|
31
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../src/db/migrations.ts"],"names":[],"mappings":"AAWA,uCAAuC;AACvC,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,EAyJjC,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,QACsC,CAAC;AAEzE,oFAAoF;AACpF,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the SQLCipher passphrase, preferring the hardware-backed native key.
|
|
3
|
+
* The result is memoized for the lifetime of the JS runtime.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getDatabaseKey(): Promise<string>;
|
|
6
|
+
/** True when the hardware-backed native key module is available. */
|
|
7
|
+
export declare function isHardwareBackedKeyAvailable(): boolean;
|
|
8
|
+
/** Test/hot-reload helper: clears the in-memory key cache. */
|
|
9
|
+
export declare function __resetDatabaseKeyCache(): void;
|
|
10
|
+
//# sourceMappingURL=secureKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secureKey.d.ts","sourceRoot":"","sources":["../../../../src/db/secureKey.ts"],"names":[],"mappings":"AAyDA;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CA4BtD;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strongly-typed media models for the encrypted SQLCipher database.
|
|
3
|
+
*
|
|
4
|
+
* These types describe the *persistence* shape of a media item — the exact
|
|
5
|
+
* columns stored in the `media` table — independently of the UI-facing
|
|
6
|
+
* `CameraAsset` type. Mapping between the two lives in `MediaMapper.ts`, keeping
|
|
7
|
+
* a clean separation between the database schema and the rest of the app.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Persisted media kind. Photos are normalized to `image`; documents and audio
|
|
11
|
+
* are first-class kinds so a picked PDF/track is never mis-stored as an image.
|
|
12
|
+
*/
|
|
13
|
+
export type MediaType = 'image' | 'video' | 'document' | 'audio';
|
|
14
|
+
/** Where a media item originated. */
|
|
15
|
+
export type MediaSource = 'camera' | 'gallery';
|
|
16
|
+
/**
|
|
17
|
+
* A single row of the `media` table — the canonical, strongly-typed record.
|
|
18
|
+
*
|
|
19
|
+
* `null` is used (never `undefined`) for absent optional columns so the shape
|
|
20
|
+
* maps 1:1 onto SQL rows.
|
|
21
|
+
*/
|
|
22
|
+
export interface MediaRecord {
|
|
23
|
+
/** Unique identifier (primary key). */
|
|
24
|
+
id: string;
|
|
25
|
+
/** `image` or `video`. */
|
|
26
|
+
mediaType: MediaType;
|
|
27
|
+
/** `camera` or `gallery`. */
|
|
28
|
+
source: MediaSource;
|
|
29
|
+
/** Absolute file path or content URI. */
|
|
30
|
+
filePath: string;
|
|
31
|
+
/** Display file name, e.g. `photo_1699999999999.jpg`. */
|
|
32
|
+
fileName: string;
|
|
33
|
+
/** File size in bytes, or null if unknown. */
|
|
34
|
+
fileSize: number | null;
|
|
35
|
+
/** Pixel width, or null if unknown. */
|
|
36
|
+
width: number | null;
|
|
37
|
+
/** Pixel height, or null if unknown. */
|
|
38
|
+
height: number | null;
|
|
39
|
+
/** Duration in milliseconds (videos only), or null. */
|
|
40
|
+
duration: number | null;
|
|
41
|
+
/** MIME type such as `image/jpeg` or `video/mp4`, or null. */
|
|
42
|
+
mimeType: string | null;
|
|
43
|
+
/** Creation timestamp (epoch ms). */
|
|
44
|
+
createdAt: number;
|
|
45
|
+
/** Last-updated timestamp (epoch ms). */
|
|
46
|
+
updatedAt: number;
|
|
47
|
+
/**
|
|
48
|
+
* True when {@link fileSize} is a DISPLAY convention (a compressed video's
|
|
49
|
+
* proportional figure) rather than the exact bytes on disk. Read back onto
|
|
50
|
+
* `CameraAsset.sizeIsDisplayEstimate` so the preview / Info panel keeps the
|
|
51
|
+
* quoted size instead of re-statting the file. Absent (legacy) rows read false.
|
|
52
|
+
*/
|
|
53
|
+
sizeIsDisplayEstimate: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Fields required to insert a new media record. Timestamps are optional on
|
|
57
|
+
* input — the repository fills `createdAt`/`updatedAt` when omitted.
|
|
58
|
+
*/
|
|
59
|
+
export interface MediaRecordInput {
|
|
60
|
+
id: string;
|
|
61
|
+
mediaType: MediaType;
|
|
62
|
+
source: MediaSource;
|
|
63
|
+
filePath: string;
|
|
64
|
+
fileName: string;
|
|
65
|
+
fileSize?: number | null;
|
|
66
|
+
width?: number | null;
|
|
67
|
+
height?: number | null;
|
|
68
|
+
duration?: number | null;
|
|
69
|
+
mimeType?: string | null;
|
|
70
|
+
createdAt?: number;
|
|
71
|
+
updatedAt?: number;
|
|
72
|
+
/** See {@link MediaRecord.sizeIsDisplayEstimate}. Stored as INTEGER 1/0. */
|
|
73
|
+
sizeIsDisplayEstimate?: boolean | null;
|
|
74
|
+
}
|
|
75
|
+
/** Filter used when querying the media list. */
|
|
76
|
+
export type MediaFilter = 'all' | 'image' | 'video' | 'document' | 'audio';
|
|
77
|
+
/**
|
|
78
|
+
* Aggregate counts computed directly from the database via `COUNT(*)`.
|
|
79
|
+
* Backs the filter-card counters (All / Photos / Videos / Documents / Audio).
|
|
80
|
+
*/
|
|
81
|
+
export interface MediaCounts {
|
|
82
|
+
all: number;
|
|
83
|
+
image: number;
|
|
84
|
+
video: number;
|
|
85
|
+
document: number;
|
|
86
|
+
audio: number;
|
|
87
|
+
}
|
|
88
|
+
/** Options for ordered/paged queries against the media table. */
|
|
89
|
+
export interface MediaQueryOptions {
|
|
90
|
+
filter?: MediaFilter;
|
|
91
|
+
/** Column to order by. Defaults to `createdAt`. */
|
|
92
|
+
orderBy?: 'createdAt' | 'updatedAt' | 'fileName';
|
|
93
|
+
/** Sort direction. Defaults to `DESC` (newest first). */
|
|
94
|
+
direction?: 'ASC' | 'DESC';
|
|
95
|
+
limit?: number;
|
|
96
|
+
offset?: number;
|
|
97
|
+
}
|
|
98
|
+
/** Table + column name constants — single source of truth for SQL strings. */
|
|
99
|
+
export declare const MEDIA_TABLE = "media";
|
|
100
|
+
export declare const MediaColumns: {
|
|
101
|
+
readonly id: "id";
|
|
102
|
+
readonly mediaType: "media_type";
|
|
103
|
+
readonly source: "source";
|
|
104
|
+
readonly filePath: "file_path";
|
|
105
|
+
readonly fileName: "file_name";
|
|
106
|
+
readonly fileSize: "file_size";
|
|
107
|
+
readonly width: "width";
|
|
108
|
+
readonly height: "height";
|
|
109
|
+
readonly duration: "duration";
|
|
110
|
+
readonly mimeType: "mime_type";
|
|
111
|
+
readonly createdAt: "created_at";
|
|
112
|
+
readonly updatedAt: "updated_at";
|
|
113
|
+
readonly sizeIsDisplayEstimate: "size_is_display_estimate";
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/db/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEjE,qCAAqC;AACrC,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uCAAuC;IACvC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wCAAwC;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACxC;AAED,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mDAAmD;IACnD,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IACjD,yDAAyD;IACzD,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAcf,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CameraAsset, SecureDeleteResult } from '../types';
|
|
2
|
+
import type { MediaCounts, MediaSource } from './types';
|
|
3
|
+
export interface UseMediaDatabaseResult {
|
|
4
|
+
/** All media as UI assets, newest first — the single source of truth. */
|
|
5
|
+
assets: CameraAsset[];
|
|
6
|
+
/** Filter-card counters computed directly from the database. */
|
|
7
|
+
counts: MediaCounts;
|
|
8
|
+
/** True during the initial load. */
|
|
9
|
+
loading: boolean;
|
|
10
|
+
/** Non-null if initialization/loading failed. */
|
|
11
|
+
error: Error | null;
|
|
12
|
+
/** Persist captured/selected assets, then refresh state from the DB. */
|
|
13
|
+
addAssets: (assets: CameraAsset[], source?: MediaSource) => Promise<CameraAsset[]>;
|
|
14
|
+
/** Delete one media item from the DB and update state. */
|
|
15
|
+
removeById: (id: string) => Promise<void>;
|
|
16
|
+
/** Delete several media items from the DB and update state. */
|
|
17
|
+
removeMany: (ids: string[]) => Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Securely destroy one media item's FILE and then remove its SQLCipher row.
|
|
20
|
+
*
|
|
21
|
+
* This is the deletion path to prefer over {@link removeById}, which only drops
|
|
22
|
+
* the database row and leaves the media on disk. Here the native layer measures
|
|
23
|
+
* the file's exact size, overwrites it with encrypted cryptographically secure
|
|
24
|
+
* random data 2 MB larger than that size, flushes it to storage, unlinks it, and
|
|
25
|
+
* sweeps thumbnails, cached copies and derived variants — and only then is the
|
|
26
|
+
* row deleted and the list refreshed.
|
|
27
|
+
*
|
|
28
|
+
* The row is removed even when the secure overwrite fails, because the user
|
|
29
|
+
* asked for the item to be gone; the returned report says what actually
|
|
30
|
+
* happened, and only `fullySecure` justifies telling them it was securely
|
|
31
|
+
* erased. Returns null when no row exists for `id`.
|
|
32
|
+
*/
|
|
33
|
+
secureRemoveById: (id: string) => Promise<SecureDeleteResult | null>;
|
|
34
|
+
/** Re-read everything from the DB (list + counts). */
|
|
35
|
+
refresh: () => Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @param autoInit when true (default) the hook opens the DB and loads on mount.
|
|
39
|
+
*/
|
|
40
|
+
export declare function useMediaDatabase(autoInit?: boolean): UseMediaDatabaseResult;
|
|
41
|
+
//# sourceMappingURL=useMediaDatabase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMediaDatabase.d.ts","sourceRoot":"","sources":["../../../../src/db/useMediaDatabase.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAUxD,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gEAAgE;IAChE,MAAM,EAAE,WAAW,CAAC;IACpB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,wEAAwE;IACxE,SAAS,EAAE,CACT,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5B,0DAA0D;IAC1D,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACrE,sDAAsD;IACtD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,UAAO,GAAG,sBAAsB,CAyHxE"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default icon implementations built entirely from React Native primitives.
|
|
3
|
+
*
|
|
4
|
+
* NO external dependencies required:
|
|
5
|
+
* - No react-native-vector-icons
|
|
6
|
+
* - No @expo/vector-icons
|
|
7
|
+
* - No react-native-svg
|
|
8
|
+
* - No custom assets or image files
|
|
9
|
+
*
|
|
10
|
+
* All icons are drawn using View and simple geometric shapes.
|
|
11
|
+
* This ensures the plugin works anywhere React Native works, with zero
|
|
12
|
+
* additional setup or configuration.
|
|
13
|
+
*/
|
|
14
|
+
import type { IconComponent } from './icons';
|
|
15
|
+
/** X icon / close button */
|
|
16
|
+
export declare const CloseIcon: IconComponent;
|
|
17
|
+
/** Left arrow / back button */
|
|
18
|
+
export declare const BackIcon: IconComponent;
|
|
19
|
+
/** Checkmark / done button */
|
|
20
|
+
export declare const DoneIcon: IconComponent;
|
|
21
|
+
/** Cancel / stop button */
|
|
22
|
+
export declare const CancelIcon: IconComponent;
|
|
23
|
+
/** Camera icon */
|
|
24
|
+
export declare const CameraIcon: IconComponent;
|
|
25
|
+
/** Video/camcorder icon */
|
|
26
|
+
export declare const VideoIcon: IconComponent;
|
|
27
|
+
/** Photo/picture icon */
|
|
28
|
+
export declare const PhotoIcon: IconComponent;
|
|
29
|
+
/** Flip/mirror camera icon */
|
|
30
|
+
export declare const FlipIcon: IconComponent;
|
|
31
|
+
/** Flash on icon */
|
|
32
|
+
export declare const FlashOnIcon: IconComponent;
|
|
33
|
+
/** Flash off icon */
|
|
34
|
+
export declare const FlashOffIcon: IconComponent;
|
|
35
|
+
/** Flash auto icon */
|
|
36
|
+
export declare const FlashAutoIcon: IconComponent;
|
|
37
|
+
/** Gallery icon */
|
|
38
|
+
export declare const GalleryIcon: IconComponent;
|
|
39
|
+
/** Crop icon */
|
|
40
|
+
export declare const CropIcon: IconComponent;
|
|
41
|
+
/** Rotate icon */
|
|
42
|
+
export declare const RotateIcon: IconComponent;
|
|
43
|
+
/** Filter icon */
|
|
44
|
+
export declare const FilterIcon: IconComponent;
|
|
45
|
+
/** Sticker icon */
|
|
46
|
+
export declare const StickerIcon: IconComponent;
|
|
47
|
+
/** Emoji icon */
|
|
48
|
+
export declare const EmojiIcon: IconComponent;
|
|
49
|
+
/** Text icon */
|
|
50
|
+
export declare const TextIcon: IconComponent;
|
|
51
|
+
/** Draw/pencil icon */
|
|
52
|
+
export declare const DrawIcon: IconComponent;
|
|
53
|
+
/** Undo icon */
|
|
54
|
+
export declare const UndoIcon: IconComponent;
|
|
55
|
+
/** Redo icon */
|
|
56
|
+
export declare const RedoIcon: IconComponent;
|
|
57
|
+
/** Delete/trash icon */
|
|
58
|
+
export declare const DeleteIcon: IconComponent;
|
|
59
|
+
/** Play button */
|
|
60
|
+
export declare const PlayIcon: IconComponent;
|
|
61
|
+
/** Pause button */
|
|
62
|
+
export declare const PauseIcon: IconComponent;
|
|
63
|
+
/** Download icon */
|
|
64
|
+
export declare const DownloadIcon: IconComponent;
|
|
65
|
+
/** Share icon */
|
|
66
|
+
export declare const ShareIcon: IconComponent;
|
|
67
|
+
/** Send/paper plane icon */
|
|
68
|
+
export declare const SendIcon: IconComponent;
|
|
69
|
+
/** More/menu icon (three dots) */
|
|
70
|
+
export declare const MoreIcon: IconComponent;
|
|
71
|
+
/** Document icon */
|
|
72
|
+
export declare const DocumentIcon: IconComponent;
|
|
73
|
+
/** Audio icon */
|
|
74
|
+
export declare const AudioIcon: IconComponent;
|
|
75
|
+
/** Lock icon */
|
|
76
|
+
export declare const LockIcon: IconComponent;
|
|
77
|
+
/** Unlock icon */
|
|
78
|
+
export declare const LockOpenIcon: IconComponent;
|
|
79
|
+
/** Chevron up / collapse icon */
|
|
80
|
+
export declare const ChevronUpIcon: IconComponent;
|
|
81
|
+
/** Checkmark/check icon */
|
|
82
|
+
export declare const CheckIcon: IconComponent;
|
|
83
|
+
/** Volume on icon */
|
|
84
|
+
export declare const VolumeOnIcon: IconComponent;
|
|
85
|
+
/** Volume off / mute icon */
|
|
86
|
+
export declare const VolumeOffIcon: IconComponent;
|
|
87
|
+
/** Trim icon */
|
|
88
|
+
export declare const TrimIcon: IconComponent;
|
|
89
|
+
/** Cover/frame icon */
|
|
90
|
+
export declare const CoverIcon: IconComponent;
|
|
91
|
+
/** Compress icon */
|
|
92
|
+
export declare const CompressIcon: IconComponent;
|
|
93
|
+
/** Export icon */
|
|
94
|
+
export declare const ExportIcon: IconComponent;
|
|
95
|
+
/** Upload icon */
|
|
96
|
+
export declare const UploadIcon: IconComponent;
|
|
97
|
+
/** Plus/add icon */
|
|
98
|
+
export declare const PlusIcon: IconComponent;
|
|
99
|
+
/** Minus/subtract icon */
|
|
100
|
+
export declare const MinusIcon: IconComponent;
|
|
101
|
+
/** Stop button (square) */
|
|
102
|
+
export declare const StopIcon: IconComponent;
|
|
103
|
+
/** Mute icon (speaker with X) */
|
|
104
|
+
export declare const MuteIcon: IconComponent;
|
|
105
|
+
/** Photo-mode indicator — reuses the camera glyph. */
|
|
106
|
+
export declare const PhotoModeIcon: IconComponent;
|
|
107
|
+
/** Video-mode indicator — reuses the video glyph. */
|
|
108
|
+
export declare const VideoModeIcon: IconComponent;
|
|
109
|
+
/** Browse-audio default — reuses the audio glyph. */
|
|
110
|
+
export declare const BrowseAudioIcon: IconComponent;
|
|
111
|
+
/** Image+video (combined media) default — reuses the photo glyph. */
|
|
112
|
+
export declare const ImageVideoIcon: IconComponent;
|
|
113
|
+
/** Chevron right / disclosure icon */
|
|
114
|
+
export declare const ChevronRightIcon: IconComponent;
|
|
115
|
+
/** Record button — filled circle (color-driven). */
|
|
116
|
+
export declare const RecordIcon: IconComponent;
|
|
117
|
+
/** Warning — triangle outline with an exclamation mark. */
|
|
118
|
+
export declare const WarningIcon: IconComponent;
|
|
119
|
+
/** Microphone — rounded capsule head, stand arc, and base. */
|
|
120
|
+
export declare const MicIcon: IconComponent;
|
|
121
|
+
/**
|
|
122
|
+
* Plus icon that morphs into a Cross (✕) as [progress] animates 0 → 1.
|
|
123
|
+
* When progress is omitted or 0, renders a static Plus (+).
|
|
124
|
+
*/
|
|
125
|
+
export declare const PlusCloseIcon: IconComponent;
|
|
126
|
+
/**
|
|
127
|
+
* Circular seek skip ring icon (◀ -10s / ▶ +10s).
|
|
128
|
+
* Renders an open-topped circular arrow ring with directional arrowhead
|
|
129
|
+
* and a centered seconds label.
|
|
130
|
+
*/
|
|
131
|
+
export declare const CircularSeekIcon: IconComponent;
|
|
132
|
+
/**
|
|
133
|
+
* View Details / Info (ⓘ) icon.
|
|
134
|
+
* Renders an outlined circular badge with a centered 'i' glyph (dot + stem).
|
|
135
|
+
*/
|
|
136
|
+
export declare const ViewDetailsIcon: IconComponent;
|
|
137
|
+
/** Alias for ViewDetailsIcon */
|
|
138
|
+
export declare const InfoIcon: IconComponent;
|
|
139
|
+
//# sourceMappingURL=defaultIcons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultIcons.d.ts","sourceRoot":"","sources":["../../../src/defaultIcons.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,SAAS,CAAC;AA6CxD,4BAA4B;AAC5B,eAAO,MAAM,SAAS,EAAE,aA+BvB,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,QAAQ,EAAE,aA4CtB,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,QAAQ,EAAE,aAgCtB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,UAAU,EAAE,aA0CxB,CAAC;AAMF,kBAAkB;AAClB,eAAO,MAAM,UAAU,EAAE,aAmCxB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,SAAS,EAAE,aAsCvB,CAAC;AAEF,yBAAyB;AACzB,eAAO,MAAM,SAAS,EAAE,aAiCvB,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,QAAQ,EAAE,aA0EtB,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,aA4BzB,CAAC;AAEF,qBAAqB;AACrB,eAAO,MAAM,YAAY,EAAE,aA8B1B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,aAyC3B,CAAC;AAEF,mBAAmB;AACnB,eAAO,MAAM,WAAW,EAAE,aAsCzB,CAAC;AAMF,gBAAgB;AAChB,eAAO,MAAM,QAAQ,EAAE,aAoBtB,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,UAAU,EAAE,aAiCxB,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,UAAU,EAAE,aA2CxB,CAAC;AAEF,mBAAmB;AACnB,eAAO,MAAM,WAAW,EAAE,aAqBzB,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,SAAS,EAAE,aA4DvB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,QAAQ,EAAE,aA6BtB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,QAAQ,EAAE,aAgCtB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,QAAQ,EAAE,aAkCtB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,QAAQ,EAAE,aAmCtB,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,UAAU,EAAE,aA0ExB,CAAC;AAMF,kBAAkB;AAClB,eAAO,MAAM,QAAQ,EAAE,aAsBtB,CAAC;AAEF,mBAAmB;AACnB,eAAO,MAAM,SAAS,EAAE,aAgCvB,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,YAAY,EAAE,aAgE1B,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,SAAS,EAAE,aA4EvB,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,EAAE,aAkCtB,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,QAAQ,EAAE,aA0CtB,CAAC;AAMF,oBAAoB;AACpB,eAAO,MAAM,YAAY,EAAE,aAoD1B,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,SAAS,EAAE,aA8CvB,CAAC;AAMF,gBAAgB;AAChB,eAAO,MAAM,QAAQ,EAAE,aA+CtB,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,YAAY,EAAE,aAgD1B,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,aAAa,EAAE,aA8B3B,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,SAAS,EAAE,aAOvB,CAAC;AAEF,qBAAqB;AACrB,eAAO,MAAM,YAAY,EAAE,aA8C1B,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,aAAa,EAAE,aAiC3B,CAAC;AAMF,gBAAgB;AAChB,eAAO,MAAM,QAAQ,EAAE,aAwEtB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,SAAS,EAAE,aAyCvB,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,YAAY,EAAE,aAmC1B,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,UAAU,EAAE,aAoDxB,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,UAAU,EAAE,aAmDxB,CAAC;AAMF,oBAAoB;AACpB,eAAO,MAAM,QAAQ,EAAE,aA8BtB,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,SAAS,EAAE,aAiBvB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,EAAE,aAkBtB,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,QAAQ,EAAE,aA4CtB,CAAC;AAMF,sDAAsD;AACtD,eAAO,MAAM,aAAa,EAAE,aAAoD,CAAC;AAEjF,qDAAqD;AACrD,eAAO,MAAM,aAAa,EAAE,aAAmD,CAAC;AAEhF,qDAAqD;AACrD,eAAO,MAAM,eAAe,EAAE,aAAmD,CAAC;AAElF,qEAAqE;AACrE,eAAO,MAAM,cAAc,EAAE,aAAmD,CAAC;AAEjF,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,EAAE,aAgC9B,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,UAAU,EAAE,aAkBxB,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,WAAW,EAAE,aA+CzB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,OAAO,EAAE,aAyDrB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,aAoD3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAkE9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,aAkD7B,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,QAAQ,eAAkB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device capability detection for optimization
|
|
3
|
+
*/
|
|
4
|
+
export interface DeviceSpecs {
|
|
5
|
+
ram: 'low' | 'medium' | 'high';
|
|
6
|
+
processor: 'weak' | 'medium' | 'strong';
|
|
7
|
+
isLowEnd: boolean;
|
|
8
|
+
totalRamMb?: number;
|
|
9
|
+
availableRamMb?: number;
|
|
10
|
+
cpuCores?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Detect device capabilities.
|
|
14
|
+
*
|
|
15
|
+
* On Android this asks the native module for ground truth (ActivityManager:
|
|
16
|
+
* isLowRamDevice / memoryClass / totalMem / availMem + CPU core count) and
|
|
17
|
+
* classifies from that. The screen-size heuristic remains only as a fallback
|
|
18
|
+
* for environments without the native module (web, tests, remote debugging).
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectDeviceCapabilities(): Promise<DeviceSpecs>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if device is low-end
|
|
23
|
+
*/
|
|
24
|
+
export declare function isLowEndDevice(deviceSpecs: DeviceSpecs): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get optimization level based on device specs
|
|
27
|
+
*/
|
|
28
|
+
export declare function getOptimizationLevel(deviceSpecs: DeviceSpecs): 'aggressive' | 'moderate' | 'none';
|
|
29
|
+
/**
|
|
30
|
+
* Get memory optimization settings
|
|
31
|
+
*/
|
|
32
|
+
export declare function getMemorySettings(deviceSpecs: DeviceSpecs): {
|
|
33
|
+
maxCacheSizeMb: number;
|
|
34
|
+
batchSize: number;
|
|
35
|
+
concurrentOperations: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Get CPU optimization settings
|
|
39
|
+
*/
|
|
40
|
+
export declare function getCpuSettings(deviceSpecs: DeviceSpecs): {
|
|
41
|
+
debounceMs: number;
|
|
42
|
+
throttleMs: number;
|
|
43
|
+
maxConcurrent: number;
|
|
44
|
+
useIdleCallback: boolean;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Get rendering optimization settings
|
|
48
|
+
*/
|
|
49
|
+
export declare function getRenderingSettings(deviceSpecs: DeviceSpecs): {
|
|
50
|
+
initialNumToRender: number;
|
|
51
|
+
maxToRenderPerBatch: number;
|
|
52
|
+
windowSize: number;
|
|
53
|
+
useAnimations: boolean;
|
|
54
|
+
useComplexEffects: boolean;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Get network optimization settings
|
|
58
|
+
*/
|
|
59
|
+
export declare function getNetworkSettings(deviceSpecs: DeviceSpecs): {
|
|
60
|
+
maxConcurrentUploads: number;
|
|
61
|
+
chunkSize: number;
|
|
62
|
+
compressionQuality: number;
|
|
63
|
+
retryCount: number;
|
|
64
|
+
useWiFiOnly: boolean;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Get image quality settings based on device
|
|
68
|
+
*/
|
|
69
|
+
export declare function getImageQualitySettings(deviceSpecs: DeviceSpecs): {
|
|
70
|
+
maxDimension: number;
|
|
71
|
+
compressionQuality: number;
|
|
72
|
+
previewQuality: 'low' | 'medium' | 'high';
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Check if device specs indicate a specific optimization should be used
|
|
76
|
+
*/
|
|
77
|
+
export declare function shouldUseOptimization(deviceSpecs: DeviceSpecs, _optimization: 'memory' | 'cpu' | 'rendering' | 'network'): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Create optimized configuration based on device specs
|
|
80
|
+
*/
|
|
81
|
+
export declare function createOptimizedConfig(deviceSpecs: DeviceSpecs): {
|
|
82
|
+
memory: ReturnType<typeof getMemorySettings>;
|
|
83
|
+
cpu: ReturnType<typeof getCpuSettings>;
|
|
84
|
+
rendering: ReturnType<typeof getRenderingSettings>;
|
|
85
|
+
network: ReturnType<typeof getNetworkSettings>;
|
|
86
|
+
images: ReturnType<typeof getImageQualitySettings>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Fallback device specs for testing
|
|
90
|
+
*/
|
|
91
|
+
export declare function createTestDeviceSpecs(type?: 'low' | 'medium' | 'high'): DeviceSpecs;
|
|
92
|
+
//# sourceMappingURL=deviceCapabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceCapabilities.d.ts","sourceRoot":"","sources":["../../../src/deviceCapabilities.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAoDD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CAerE;AAiFD;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAMhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,WAAW,GACvB,YAAY,GAAG,UAAU,GAAG,MAAM,CAUpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAsBA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAyBA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CA4BA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC5D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB,CA4BA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC3C,CAsBA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,GACxD,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG;IAC/D,MAAM,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IAC7C,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,SAAS,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IACnD,OAAO,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC/C,MAAM,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACpD,CAQA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,GAAE,KAAK,GAAG,QAAQ,GAAG,MAAc,GACtC,WAAW,CAyBb"}
|