import {type ImagePickerOptions, launchCameraAsync} from 'expo-image-picker' import ExpoImageCropTool, { type OpenCropperOptions, } from '@bsky.app/expo-image-crop-tool' import {t} from '@lingui/core/macro' export { openPicker, openUnifiedPicker, type PickerImage as RNImage, } from './picker.shared' export async function openCamera(customOpts: ImagePickerOptions) { const opts: ImagePickerOptions = { mediaTypes: 'images', ...customOpts, } const res = await launchCameraAsync(opts) if (res.canceled) { return } const asset = res.assets[0] return { path: asset.uri, mime: asset.mimeType ?? 'image/jpeg', size: asset.fileSize ?? 0, width: asset.width, height: asset.height, } } export async function openCropper(opts: OpenCropperOptions) { const item = await ExpoImageCropTool.openCropperAsync({ doneButtonText: t`Done`, cancelButtonText: t`Cancel`, ...opts, format: 'jpeg', }) return { path: item.path, mime: item.mimeType, size: item.size, width: item.width, height: item.height, } }