Repository: expo/expo
Pull request #35221: [expo-image-picker] Add support for cameraType in web implementation
Author: login: RyogaK
Labels: name: bot: passed checks
description: ExpoBot has nothing to complain about
Created: 2025-02-28T02:59:07Z | Merged: 2025-03-14T06:58:51Z

# Why

The capture attribute of the <input> tag is set to "camera", but this is an outdated specification. In the newer specification, it should be possible to specify the front and back cameras.

Ref:
	•	[HTML Media Capture (2012 Draft)](https://www.w3.org/TR/2012/WD-html-media-capture-20120712/)
	•	[HTML Media Capture (Latest)](https://www.w3.org/TR/html-media-capture/)

Therefore, I want to support cameraType for the web platform as well.

# How

N/A

# Test Plan

Tested in 
- Latest safari mobile on iPhone 16
- Latest chrome mobile on iPhone 16
- Latest chrome mobile on Pixel 7

# Checklist

<!--
Please check the appropriate items below if they apply to your diff.
-->

- [x] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin).
- [x] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)



Diff:
diff --git a/docs/public/static/data/unversioned/expo-image-picker.json b/docs/public/static/data/unversioned/expo-image-picker.json
index 67d0e665ce5125..1ff20b47ae95c1 100644
--- a/docs/public/static/data/unversioned/expo-image-picker.json
+++ b/docs/public/static/data/unversioned/expo-image-picker.json
@@ -1 +1 @@
-{"name":"expo-image-picker","variant":"project","kind":1,"children":[{"name":"CameraType","variant":"declaration","kind":8,"children":[{"name":"back","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Back/rear camera."}]},"type":{"type":"literal","value":"back"}},{"name":"front","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Front camera"}]},"type":{"type":"literal","value":"front"}}]},{"name":"MediaTypeOptions","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"To set media types available in the image picker use an array of ["},{"kind":"code","text":"`MediaType`"},{"kind":"text","text":"](#mediatype) instead."}]}]},"children":[{"name":"All","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Images and videos."}]},"type":{"type":"literal","value":"All"}},{"name":"Images","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Only images."}]},"type":{"type":"literal","value":"Images"}},{"name":"Videos","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Only videos."}]},"type":{"type":"literal","value":"Videos"}}]},{"name":"PermissionStatus","variant":"declaration","kind":8,"children":[{"name":"DENIED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User has denied the permission."}]},"type":{"type":"literal","value":"denied"}},{"name":"GRANTED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User has granted the permission."}]},"type":{"type":"literal","value":"granted"}},{"name":"UNDETERMINED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User hasn't granted or denied the permission yet."}]},"type":{"type":"literal","value":"undetermined"}}]},{"name":"UIImagePickerControllerQualityType","variant":"declaration","kind":8,"children":[{"name":"High","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Highest available resolution."}]},"type":{"type":"literal","value":0}},{"name":"IFrame1280x720","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"1280 × 720"}]},"type":{"type":"literal","value":4}},{"name":"IFrame960x540","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"960 × 540"}]},"type":{"type":"literal","value":5}},{"name":"Low","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Depends on the device."}]},"type":{"type":"literal","value":2}},{"name":"Medium","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Depends on the device."}]},"type":{"type":"literal","value":1}},{"name":"VGA640x480","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"640 × 480"}]},"type":{"type":"literal","value":3}}]},{"name":"UIImagePickerPreferredAssetRepresentationMode","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"Picker preferred asset representation mode. Its values are directly mapped to the ["},{"kind":"code","text":"`PHPickerConfigurationAssetRepresentationMode`"},{"kind":"text","text":"](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"Automatic","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A mode that indicates that the system chooses the appropriate asset representation."}]},"type":{"type":"literal","value":"automatic"}},{"name":"Compatible","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A mode that uses the most compatible asset representation."}]},"type":{"type":"literal","value":"compatible"}},{"name":"Current","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A mode that uses the current representation to avoid transcoding, if possible."}]},"type":{"type":"literal","value":"current"}}]},{"name":"UIImagePickerPresentationStyle","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"Picker presentation style. Its values are directly mapped to the ["},{"kind":"code","text":"`UIModalPresentationStyle`"},{"kind":"text","text":"](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"AUTOMATIC","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"The default presentation style chosen by the system.\nOn older iOS versions, falls back to "},{"kind":"code","text":"`WebBrowserPresentationStyle.FullScreen`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"literal","value":"automatic"}},{"name":"CURRENT_CONTEXT","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style where the picker is displayed over the app's content."}]},"type":{"type":"literal","value":"currentContext"}},{"name":"FORM_SHEET","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style that displays the picker centered in the screen."}]},"type":{"type":"literal","value":"formSheet"}},{"name":"FULL_SCREEN","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style in which the presented picker covers the screen."}]},"type":{"type":"literal","value":"fullScreen"}},{"name":"OVER_CURRENT_CONTEXT","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style where the picker is displayed over the app's content."}]},"type":{"type":"literal","value":"overCurrentContext"}},{"name":"OVER_FULL_SCREEN","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style in which the picker view covers the screen."}]},"type":{"type":"literal","value":"overFullScreen"}},{"name":"PAGE_SHEET","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style that partially covers the underlying content."}]},"type":{"type":"literal","value":"pageSheet"}},{"name":"POPOVER","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style where the picker is displayed in a popover view."}]},"type":{"type":"literal","value":"popover"}}]},{"name":"VideoExportPreset","variant":"declaration","kind":8,"children":[{"name":"H264_1280x720","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __1280 × 720__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":6}},{"name":"H264_1920x1080","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __1920 × 1080__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":7}},{"name":"H264_3840x2160","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __3840 × 2160__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":8}},{"name":"H264_640x480","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __640 × 480__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":4}},{"name":"H264_960x540","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __960 × 540__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":5}},{"name":"HEVC_1920x1080","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __1920 × 1080__ •\nVideo compression: __HEVC__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":9}},{"name":"HEVC_3840x2160","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __3840 × 2160__ •\nVideo compression: __HEVC__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":10}},{"name":"HighestQuality","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Depends on the device__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":3}},{"name":"LowQuality","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Depends on the device__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":1}},{"name":"MediumQuality","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Depends on the device__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":2}},{"name":"Passthrough","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Unchanged__ •\nVideo compression: __None__ •\nAudio compression: __None__"}]},"type":{"type":"literal","value":0}}]},{"name":"CameraPermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Alias for "},{"kind":"code","text":"`PermissionResponse`"},{"kind":"text","text":" type exported by "},{"kind":"code","text":"`expo-modules-core`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}},{"name":"DefaultTab","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"The default tab with which the image picker will be opened.\n- "},{"kind":"code","text":"`'photos'`"},{"kind":"text","text":" - the photos/videos tab will be opened.\n- "},{"kind":"code","text":"`'albums'`"},{"kind":"text","text":" - the albums tab will be opened."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"photos"},{"type":"literal","value":"albums"}]}},{"name":"ImagePickerAsset","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Represents an asset (image or video) returned by the image picker or camera."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"assetId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The unique ID that represents the picked image or video, if picked from the library. It can be used\nby [expo-media-library]("},{"kind":"relative-link","text":"./media-library"},{"kind":"text","text":") to manage the picked asset.\n\n> This might be "},{"kind":"code","text":"`null`"},{"kind":"text","text":" when the ID is unavailable or the user gave limited permission to access the media library.\n> On Android, the ID is unavailable when the user selects a photo by directly browsing file system."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"base64","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When the "},{"kind":"code","text":"`base64`"},{"kind":"text","text":" option is truthy, it is a Base64-encoded string of the selected image's JPEG data, otherwise "},{"kind":"code","text":"`null`"},{"kind":"text","text":".\nIf you prepend this with "},{"kind":"code","text":"`'data:image/jpeg;base64,'`"},{"kind":"text","text":" to create a data URI,\nyou can use it as the source of an "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" element; for example:\n"},{"kind":"code","text":"```ts\n<Image\n  source={{ uri: 'data:image/jpeg;base64,' + asset.base64 }}\n  style={{ width: 200, height: 200 }}\n/>\n```"}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Length of the video in milliseconds or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if the asset is not a video."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"exif","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The "},{"kind":"code","text":"`exif`"},{"kind":"text","text":" field is included if the "},{"kind":"code","text":"`exif`"},{"kind":"text","text":" option is truthy, and is an object containing the\nimage's EXIF data. The names of this object's properties are EXIF tags and the values are the\nrespective EXIF values for those tags."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},{"type":"literal","value":null}]}},{"name":"file","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The web "},{"kind":"code","text":"`File`"},{"kind":"text","text":" object containing the selected media. This property is web-only and can be used to upload to a server with "},{"kind":"code","text":"`FormData`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"qualifiedName":"File"},"name":"File","package":"typescript"}},{"name":"fileName","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Preferred filename to use when saving this item. This might be "},{"kind":"code","text":"`null`"},{"kind":"text","text":" when the name is unavailable\nor user gave limited permission to access the media library."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"fileSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"File size of the picked image or video, in bytes."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"height","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Height of the image or video."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"mimeType","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The MIME type of the selected asset or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if could not be determined."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"pairedVideoAsset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Contains information about the video paired with the image file. This property is only set when "},{"kind":"code","text":"`livePhotos`"},{"kind":"text","text":" media type was present in the "},{"kind":"code","text":"`mediaTypes`"},{"kind":"text","text":" array when launching the picker and a live photo was selected."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","name":"ImagePickerAsset","package":"expo-image-picker"},{"type":"literal","value":null}]}},{"name":"type","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The type of the asset.\n- "},{"kind":"code","text":"`'image'`"},{"kind":"text","text":" - for images.\n- "},{"kind":"code","text":"`'video'`"},{"kind":"text","text":" - for videos.\n- "},{"kind":"code","text":"`'livePhoto'`"},{"kind":"text","text":" - for live photos. (iOS only)\n- "},{"kind":"code","text":"`'pairedVideo'`"},{"kind":"text","text":" - for videos paired with photos, which can be combined to create a live photo. (iOS only)"}]},"type":{"type":"union","types":[{"type":"literal","value":"image"},{"type":"literal","value":"video"},{"type":"literal","value":"livePhoto"},{"type":"literal","value":"pairedVideo"}]}},{"name":"uri","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"URI to the local image or video file (usable as the source of an "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" element, in the case of\nan image) and "},{"kind":"code","text":"`width`"},{"kind":"text","text":" and "},{"kind":"code","text":"`height`"},{"kind":"text","text":" specify the dimensions of the media."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"width","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Width of the image or video."}]},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"ImagePickerCanceledResult","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Type representing canceled pick result."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"assets","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"code","text":"`null`"},{"kind":"text","text":" signifying that the request was canceled."}]},"type":{"type":"literal","value":null}},{"name":"canceled","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Boolean flag set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":" showing that the request was canceled."}]},"type":{"type":"literal","value":true}}]}}},{"name":"ImagePickerErrorResult","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"code","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The error code."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"exception","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The exception which caused the error."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"message","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The error message."}]},"type":{"type":"intrinsic","name":"string"}}]}}},{"name":"ImagePickerOptions","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"allowsEditing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to show a UI to edit the image after it is picked. On Android the user can crop and\nrotate the image and on iOS simply crop it.\n\n> - Cropping multiple images is not supported - this option is mutually exclusive with "},{"kind":"code","text":"`allowsMultipleSelection`"},{"kind":"text","text":".\n> - On iOS, this option is ignored if "},{"kind":"code","text":"`allowsMultipleSelection`"},{"kind":"text","text":" is enabled.\n> - On iOS cropping a "},{"kind":"code","text":"`.bmp`"},{"kind":"text","text":" image will convert it to "},{"kind":"code","text":"`.png`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowsMultipleSelection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether or not to allow selecting multiple media files at once.\n\n> Cropping multiple images is not supported - this option is mutually exclusive with "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":".\n> If this option is enabled, then "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" is ignored."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 14+"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"aspect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An array with two entries "},{"kind":"code","text":"`[x, y]`"},{"kind":"text","text":" specifying the aspect ratio to maintain if the user is\nallowed to edit the image (by passing "},{"kind":"code","text":"`allowsEditing: true`"},{"kind":"text","text":"). This is only applicable on\nAndroid, since on iOS the crop rectangle is always a square."}]},"type":{"type":"tuple","elements":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"number"}]}},{"name":"base64","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to also include the image data in Base64 format."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"cameraType","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Selects the camera-facing type. The "},{"kind":"code","text":"`CameraType`"},{"kind":"text","text":" enum provides two options:\n"},{"kind":"code","text":"`front`"},{"kind":"text","text":" for the front-facing camera and "},{"kind":"code","text":"`back`"},{"kind":"text","text":" for the back-facing camera.\n- **On Android**, the behavior of this option may vary based on the camera app installed on the device."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"CameraType.back"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"CameraType","package":"expo-image-picker"}},{"name":"defaultTab","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose the default tab with which the image picker will be opened."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'photos'"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"DefaultTab","package":"expo-image-picker"}},{"name":"exif","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to also include the EXIF data for the image. On iOS the EXIF data does not include GPS\ntags in the camera case."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"legacy","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Uses the legacy image picker on Android. This will allow media to be selected from outside the users photo library."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"mediaTypes","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose what type of media to pick."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'images'"}]}]},"type":{"type":"union","types":[{"type":"reference","name":"MediaType","package":"expo-image-picker"},{"type":"array","elementType":{"type":"reference","name":"MediaType","package":"expo-image-picker"}},{"type":"reference","name":"MediaTypeOptions","package":"expo-image-picker"}]}},{"name":"orderedSelection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to display number badges when assets are selected. The badges are numbered\nin selection order. Assets are then returned in the exact same order they were selected.\n\n> Assets should be returned in the selection order regardless of this option,\n> but there is no guarantee that it is always true when this option is disabled."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15+"}]},{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"preferredAssetRepresentationMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose [preferred asset representation mode](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)\nto use when loading assets."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.UIImagePickerPreferredAssetRepresentationMode.Automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 14+"}]}]},"type":{"type":"reference","name":"UIImagePickerPreferredAssetRepresentationMode","package":"expo-image-picker"}},{"name":"presentationStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose [presentation style](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle?language=objc)\nto customize view during taking photo/video."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.UIImagePickerPresentationStyle.Automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"UIImagePickerPresentationStyle","package":"expo-image-picker"}},{"name":"quality","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specify the quality of compression, from "},{"kind":"code","text":"`0`"},{"kind":"text","text":" to "},{"kind":"code","text":"`1`"},{"kind":"text","text":". "},{"kind":"code","text":"`0`"},{"kind":"text","text":" means compress for small size,\n"},{"kind":"code","text":"`1`"},{"kind":"text","text":" means compress for maximum quality.\n> Note: If the selected image has been compressed before, the size of the output file may be\n> bigger than the size of the original image.\n\n> Note: On iOS, if a "},{"kind":"code","text":"`.bmp`"},{"kind":"text","text":" or "},{"kind":"code","text":"`.png`"},{"kind":"text","text":" image is selected from the library, this option is ignored."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1.0"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"selectionLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum number of items that user can select. Applicable when "},{"kind":"code","text":"`allowsMultipleSelection`"},{"kind":"text","text":" is enabled.\nSetting the value to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" sets the selection limit to the maximum that the system supports."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 14+"}]},{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"videoExportPreset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specify preset which will be used to compress selected video."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.VideoExportPreset.Passthrough"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 11+"}]},{"tag":"@deprecated","content":[{"kind":"text","text":"See ["},{"kind":"code","text":"`videoExportPreset`"},{"kind":"text","text":"](https://developer.apple.com/documentation/uikit/uiimagepickercontroller/2890964-videoexportpreset?language=objc)\nin Apple documentation."}]}]},"type":{"type":"reference","name":"VideoExportPreset","package":"expo-image-picker"}},{"name":"videoMaxDuration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Maximum duration, in seconds, for video recording. Setting this to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" disables the limit.\nDefaults to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" (no limit).\n- **On iOS**, when "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", maximum duration is limited to 10 minutes.\n  This limit is applied automatically, if "},{"kind":"code","text":"`0`"},{"kind":"text","text":" or no value is specified.\n- **On Android**, effect of this option depends on support of installed camera app.\n- **On Web** this option has no effect - the limit is browser-dependant."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"videoQuality","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specify the quality of recorded videos. Defaults to the highest quality available for the device."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.UIImagePickerControllerQualityType.High"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"UIImagePickerControllerQualityType","package":"expo-image-picker"}}]}}},{"name":"ImagePickerResult","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Type representing successful and canceled pick result."}]},"type":{"type":"union","types":[{"type":"reference","name":"ImagePickerSuccessResult","package":"expo-image-picker"},{"type":"reference","name":"ImagePickerCanceledResult","package":"expo-image-picker"}]}},{"name":"ImagePickerSuccessResult","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Type representing successful pick result."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"assets","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"An array of picked assets."}]},"type":{"type":"array","elementType":{"type":"reference","name":"ImagePickerAsset","package":"expo-image-picker"}}},{"name":"canceled","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Boolean flag set to "},{"kind":"code","text":"`false`"},{"kind":"text","text":" showing that the request was successful."}]},"type":{"type":"literal","value":false}}]}}},{"name":"MediaLibraryPermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Extends "},{"kind":"code","text":"`PermissionResponse`"},{"kind":"text","text":" type exported by "},{"kind":"code","text":"`expo-modules-core`"},{"kind":"text","text":", containing additional iOS-specific field."}]},"type":{"type":"intersection","types":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"accessPrivileges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates if your app has access to the whole or only part of the photo library. Possible values are:\n- "},{"kind":"code","text":"`'all'`"},{"kind":"text","text":" if the user granted your app access to the whole photo library\n- "},{"kind":"code","text":"`'limited'`"},{"kind":"text","text":" if the user granted your app access only to selected photos (only available on Android API 34+ and iOS 14.0+)\n- "},{"kind":"code","text":"`'none'`"},{"kind":"text","text":" if user denied or hasn't yet granted the permission"}]},"type":{"type":"union","types":[{"type":"literal","value":"all"},{"type":"literal","value":"limited"},{"type":"literal","value":"none"}]}}]}}]}},{"name":"MediaType","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Media types that can be picked by the image picker.\n- "},{"kind":"code","text":"`'images'`"},{"kind":"text","text":" - for images.\n- "},{"kind":"code","text":"`'videos'`"},{"kind":"text","text":" - for videos.\n- "},{"kind":"code","text":"`'livePhotos'`"},{"kind":"text","text":" - for live photos (iOS only).\n\n> When the "},{"kind":"code","text":"`livePhotos`"},{"kind":"text","text":" type is added to the media types array and a live photo is selected,\n> the resulting "},{"kind":"code","text":"`ImagePickerAsset`"},{"kind":"text","text":" will contain an unaltered image and the "},{"kind":"code","text":"`pairedVideoAsset`"},{"kind":"text","text":" field will contain a\n> video asset paired with the image. This option will be ignored when the "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" option is enabled. Due\n> to platform limitations live photos are returned at original quality, regardless of the "},{"kind":"code","text":"`quality`"},{"kind":"text","text":" option.\n\n> When on Android or Web "},{"kind":"code","text":"`livePhotos`"},{"kind":"text","text":" type passed as a media type will be ignored."}]},"type":{"type":"union","types":[{"type":"literal","value":"images"},{"type":"literal","value":"videos"},{"type":"literal","value":"livePhotos"}]}},{"name":"OpenFileBrowserOptions","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"allowsMultipleSelection","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether or not to allow selecting multiple media files at once."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"base64","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Whether to also include the image data in Base64 format."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"capture","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"mediaTypes","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Choose what type of media to pick."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'images'"}]}]},"type":{"type":"union","types":[{"type":"reference","name":"MediaType","package":"expo-image-picker"},{"type":"array","elementType":{"type":"reference","name":"MediaType","package":"expo-image-picker"}},{"type":"reference","name":"MediaTypeOptions","package":"expo-image-picker"}]}}]}}},{"name":"PermissionExpiration","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Permission expiration time. Currently, all permissions are granted permanently."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"intrinsic","name":"number"}]}},{"name":"PermissionHookOptions","variant":"declaration","kind":2097152,"typeParameters":[{"name":"Options","variant":"typeParam","kind":131072,"type":{"type":"intrinsic","name":"object"}}],"type":{"type":"intersection","types":[{"type":"reference","target":{"qualifiedName":"PermissionHookBehavior"},"name":"PermissionHookBehavior","package":"expo-modules-core"},{"type":"reference","name":"Options","package":"expo-modules-core","refersToTypeParameter":true}]}},{"name":"PermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object obtained by permissions get and request functions."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"canAskAgain","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates if user can be asked again for specific permission.\nIf not, one should be directed to the Settings app\nin order to enable/disable the permission."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"expires","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines time when the permission expires."}]},"type":{"type":"reference","name":"PermissionExpiration","package":"expo-modules-core"}},{"name":"granted","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A convenience boolean that indicates if the permission is granted."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"status","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines the status of the permission."}]},"type":{"type":"reference","name":"PermissionStatus","package":"expo-modules-core"}}]}}},{"name":"getCameraPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getCameraPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Checks user's permissions for accessing camera."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [CameraPermissionResponse](#camerapermissionresponse)."}]}]},"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"CameraPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"getMediaLibraryPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getMediaLibraryPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Checks user's permissions for accessing photos."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [MediaLibraryPermissionResponse](#medialibrarypermissionresponse)."}]}]},"parameters":[{"name":"writeOnly","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to request write or read and write permissions. Defaults to "},{"kind":"code","text":"`false`"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"false"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"getPendingResultAsync","variant":"declaration","kind":64,"signatures":[{"name":"getPendingResultAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Android system sometimes kills the "},{"kind":"code","text":"`MainActivity`"},{"kind":"text","text":" after the "},{"kind":"code","text":"`ImagePicker`"},{"kind":"text","text":" finishes. When this\nhappens, we lost the data selected from the "},{"kind":"code","text":"`ImagePicker`"},{"kind":"text","text":". However, you can retrieve the lost\ndata by calling "},{"kind":"code","text":"`getPendingResultAsync`"},{"kind":"text","text":". You can test this functionality by turning on\n"},{"kind":"code","text":"`Don't keep activities`"},{"kind":"text","text":" in the developer options."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"- **On Android:** a promise that resolves to an array of objects of exactly same type as in\n"},{"kind":"code","text":"`ImagePicker.launchImageLibraryAsync`"},{"kind":"text","text":" or "},{"kind":"code","text":"`ImagePicker.launchCameraAsync`"},{"kind":"text","text":" if the "},{"kind":"code","text":"`ImagePicker`"},{"kind":"text","text":"\nfinished successfully. Otherwise, to the array of ["},{"kind":"code","text":"`ImagePickerErrorResult`"},{"kind":"text","text":"](#imagepickerimagepickererrorresult).\n- **On other platforms:** an empty array."}]}]},"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"union","types":[{"type":"reference","name":"ImagePickerResult","package":"expo-image-picker"},{"type":"reference","name":"ImagePickerErrorResult","package":"expo-image-picker"}]}}],"name":"Promise","package":"typescript"}}]},{"name":"launchCameraAsync","variant":"declaration","kind":64,"signatures":[{"name":"launchCameraAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Display the system UI for taking a photo with the camera. Requires "},{"kind":"code","text":"`Permissions.CAMERA`"},{"kind":"text","text":".\nOn Android and iOS 10 "},{"kind":"code","text":"`Permissions.CAMERA_ROLL`"},{"kind":"text","text":" is also required. On mobile web, this must be\ncalled immediately in a user interaction like a button press, otherwise the browser will block\nthe request without a warning.\n> **Note:** Make sure that you handle "},{"kind":"code","text":"`MainActivity`"},{"kind":"text","text":" destruction on **Android**. See [ImagePicker.getPendingResultAsync](#imagepickergetpendingresultasync).\n> **Notes for Web:** The system UI can only be shown after user activation (e.g. a "},{"kind":"code","text":"`Button`"},{"kind":"text","text":" press).\nTherefore, calling "},{"kind":"code","text":"`launchCameraAsync`"},{"kind":"text","text":" in "},{"kind":"code","text":"`componentDidMount`"},{"kind":"text","text":", for example, will **not** work as\nintended. The "},{"kind":"code","text":"`cancelled`"},{"kind":"text","text":" event will not be returned in the browser due to platform restrictions\nand inconsistencies across browsers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that resolves to an object with "},{"kind":"code","text":"`canceled`"},{"kind":"text","text":" and "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" fields.\nWhen the user canceled the action the "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" is always "},{"kind":"code","text":"`null`"},{"kind":"text","text":", otherwise it's an array of\nthe selected media assets which have a form of ["},{"kind":"code","text":"`ImagePickerAsset`"},{"kind":"text","text":"](#imagepickerasset)."}]}]},"parameters":[{"name":"options","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An "},{"kind":"code","text":"`ImagePickerOptions`"},{"kind":"text","text":" object."}]},"type":{"type":"reference","name":"ImagePickerOptions","package":"expo-image-picker"},"defaultValue":"{}"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"ImagePickerResult","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"launchImageLibraryAsync","variant":"declaration","kind":64,"signatures":[{"name":"launchImageLibraryAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Display the system UI for choosing an image or a video from the phone's library.\nRequires "},{"kind":"code","text":"`Permissions.MEDIA_LIBRARY`"},{"kind":"text","text":" on iOS 10 only. On mobile web, this must be     called\nimmediately in a user interaction like a button press, otherwise the browser will block the\nrequest without a warning.\n\n**Animated GIFs support:** On Android, if the selected image is an animated GIF, the result image will be an\nanimated GIF too if and only if "},{"kind":"code","text":"`quality`"},{"kind":"text","text":" is explicitly set to "},{"kind":"code","text":"`1.0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" is set to "},{"kind":"code","text":"`false`"},{"kind":"text","text":".\nOtherwise compression and/or cropper will pick the first frame of the GIF and return it as the\nresult (on Android the result will be a PNG). On iOS, both quality and cropping are supported.\n\n> **Notes for Web:** The system UI can only be shown after user activation (e.g. a "},{"kind":"code","text":"`Button`"},{"kind":"text","text":" press).\nTherefore, calling "},{"kind":"code","text":"`launchImageLibraryAsync`"},{"kind":"text","text":" in "},{"kind":"code","text":"`componentDidMount`"},{"kind":"text","text":", for example, will **not**\nwork as intended. The "},{"kind":"code","text":"`cancelled`"},{"kind":"text","text":" event will not be returned in the browser due to platform\nrestrictions and inconsistencies across browsers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that resolves to an object with "},{"kind":"code","text":"`canceled`"},{"kind":"text","text":" and "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" fields.\nWhen the user canceled the action the "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" is always "},{"kind":"code","text":"`null`"},{"kind":"text","text":", otherwise it's an array of\nthe selected media assets which have a form of ["},{"kind":"code","text":"`ImagePickerAsset`"},{"kind":"text","text":"](#imagepickerasset)."}]}]},"parameters":[{"name":"options","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An object extended by ["},{"kind":"code","text":"`ImagePickerOptions`"},{"kind":"text","text":"](#imagepickeroptions)."}]},"type":{"type":"reference","name":"ImagePickerOptions","package":"expo-image-picker"},"defaultValue":"{}"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"ImagePickerResult","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"requestCameraPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"requestCameraPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks the user to grant permissions for accessing camera. This does nothing on web because the\nbrowser camera is not used."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [CameraPermissionResponse](#camerarollpermissionresponse)."}]}]},"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"CameraPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"requestMediaLibraryPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"requestMediaLibraryPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks the user to grant permissions for accessing user's photo. This method does nothing on web."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [MediaLibraryPermissionResponse](#medialibrarypermissionresponse)."}]}]},"parameters":[{"name":"writeOnly","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to request write or read and write permissions. Defaults to "},{"kind":"code","text":"`false`"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"false"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"useCameraPermissions","variant":"declaration","kind":64,"comment":{"summary":[{"kind":"text","text":"Check or request permissions to access the camera.\nThis uses both "},{"kind":"code","text":"`requestCameraPermissionsAsync`"},{"kind":"text","text":" and "},{"kind":"code","text":"`getCameraPermissionsAsync`"},{"kind":"text","text":" to interact with the permissions."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```ts\nconst [status, requestPermission] = ImagePicker.useCameraPermissions();\n```"}]}]},"signatures":[{"name":"useCameraPermissions","variant":"signature","kind":4096,"parameters":[{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"object"}],"name":"PermissionHookOptions","package":"expo-modules-core"}}],"type":{"type":"tuple","elements":[{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}]},{"type":"reference","target":{"qualifiedName":"RequestPermissionMethod"},"typeArguments":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}],"name":"RequestPermissionMethod","package":"expo-modules-core"},{"type":"reference","target":{"qualifiedName":"GetPermissionMethod"},"typeArguments":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}],"name":"GetPermissionMethod","package":"expo-modules-core"}]}}]},{"name":"useMediaLibraryPermissions","variant":"declaration","kind":64,"comment":{"summary":[{"kind":"text","text":"Check or request permissions to access the media library.\nThis uses both "},{"kind":"code","text":"`requestMediaLibraryPermissionsAsync`"},{"kind":"text","text":" and "},{"kind":"code","text":"`getMediaLibraryPermissionsAsync`"},{"kind":"text","text":" to interact with the permissions."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```ts\nconst [status, requestPermission] = ImagePicker.useMediaLibraryPermissions();\n```"}]}]},"signatures":[{"name":"useMediaLibraryPermissions","variant":"signature","kind":4096,"parameters":[{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"writeOnly","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}],"name":"PermissionHookOptions","package":"expo-modules-core"}}],"type":{"type":"tuple","elements":[{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}]},{"type":"reference","target":{"qualifiedName":"RequestPermissionMethod"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"RequestPermissionMethod","package":"expo-modules-core"},{"type":"reference","target":{"qualifiedName":"GetPermissionMethod"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"GetPermissionMethod","package":"expo-modules-core"}]}}]}],"packageName":"expo-image-picker"}
\ No newline at end of file
+{"name":"expo-image-picker","variant":"project","kind":1,"children":[{"name":"CameraType","variant":"declaration","kind":8,"children":[{"name":"back","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Back/rear camera."}]},"type":{"type":"literal","value":"back"}},{"name":"front","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Front camera"}]},"type":{"type":"literal","value":"front"}}]},{"name":"MediaTypeOptions","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"To set media types available in the image picker use an array of ["},{"kind":"code","text":"`MediaType`"},{"kind":"text","text":"](#mediatype) instead."}]}]},"children":[{"name":"All","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Images and videos."}]},"type":{"type":"literal","value":"All"}},{"name":"Images","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Only images."}]},"type":{"type":"literal","value":"Images"}},{"name":"Videos","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Only videos."}]},"type":{"type":"literal","value":"Videos"}}]},{"name":"PermissionStatus","variant":"declaration","kind":8,"children":[{"name":"DENIED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User has denied the permission."}]},"type":{"type":"literal","value":"denied"}},{"name":"GRANTED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User has granted the permission."}]},"type":{"type":"literal","value":"granted"}},{"name":"UNDETERMINED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User hasn't granted or denied the permission yet."}]},"type":{"type":"literal","value":"undetermined"}}]},{"name":"UIImagePickerControllerQualityType","variant":"declaration","kind":8,"children":[{"name":"High","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Highest available resolution."}]},"type":{"type":"literal","value":0}},{"name":"IFrame1280x720","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"1280 × 720"}]},"type":{"type":"literal","value":4}},{"name":"IFrame960x540","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"960 × 540"}]},"type":{"type":"literal","value":5}},{"name":"Low","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Depends on the device."}]},"type":{"type":"literal","value":2}},{"name":"Medium","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Depends on the device."}]},"type":{"type":"literal","value":1}},{"name":"VGA640x480","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"640 × 480"}]},"type":{"type":"literal","value":3}}]},{"name":"UIImagePickerPreferredAssetRepresentationMode","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"Picker preferred asset representation mode. Its values are directly mapped to the ["},{"kind":"code","text":"`PHPickerConfigurationAssetRepresentationMode`"},{"kind":"text","text":"](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"Automatic","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A mode that indicates that the system chooses the appropriate asset representation."}]},"type":{"type":"literal","value":"automatic"}},{"name":"Compatible","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A mode that uses the most compatible asset representation."}]},"type":{"type":"literal","value":"compatible"}},{"name":"Current","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A mode that uses the current representation to avoid transcoding, if possible."}]},"type":{"type":"literal","value":"current"}}]},{"name":"UIImagePickerPresentationStyle","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"Picker presentation style. Its values are directly mapped to the ["},{"kind":"code","text":"`UIModalPresentationStyle`"},{"kind":"text","text":"](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"AUTOMATIC","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"The default presentation style chosen by the system.\nOn older iOS versions, falls back to "},{"kind":"code","text":"`WebBrowserPresentationStyle.FullScreen`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"literal","value":"automatic"}},{"name":"CURRENT_CONTEXT","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style where the picker is displayed over the app's content."}]},"type":{"type":"literal","value":"currentContext"}},{"name":"FORM_SHEET","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style that displays the picker centered in the screen."}]},"type":{"type":"literal","value":"formSheet"}},{"name":"FULL_SCREEN","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style in which the presented picker covers the screen."}]},"type":{"type":"literal","value":"fullScreen"}},{"name":"OVER_CURRENT_CONTEXT","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style where the picker is displayed over the app's content."}]},"type":{"type":"literal","value":"overCurrentContext"}},{"name":"OVER_FULL_SCREEN","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style in which the picker view covers the screen."}]},"type":{"type":"literal","value":"overFullScreen"}},{"name":"PAGE_SHEET","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style that partially covers the underlying content."}]},"type":{"type":"literal","value":"pageSheet"}},{"name":"POPOVER","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"A presentation style where the picker is displayed in a popover view."}]},"type":{"type":"literal","value":"popover"}}]},{"name":"VideoExportPreset","variant":"declaration","kind":8,"children":[{"name":"H264_1280x720","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __1280 × 720__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":6}},{"name":"H264_1920x1080","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __1920 × 1080__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":7}},{"name":"H264_3840x2160","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __3840 × 2160__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":8}},{"name":"H264_640x480","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __640 × 480__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":4}},{"name":"H264_960x540","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __960 × 540__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":5}},{"name":"HEVC_1920x1080","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __1920 × 1080__ •\nVideo compression: __HEVC__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":9}},{"name":"HEVC_3840x2160","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __3840 × 2160__ •\nVideo compression: __HEVC__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":10}},{"name":"HighestQuality","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Depends on the device__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":3}},{"name":"LowQuality","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Depends on the device__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":1}},{"name":"MediumQuality","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Depends on the device__ •\nVideo compression: __H.264__ •\nAudio compression: __AAC__"}]},"type":{"type":"literal","value":2}},{"name":"Passthrough","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Resolution: __Unchanged__ •\nVideo compression: __None__ •\nAudio compression: __None__"}]},"type":{"type":"literal","value":0}}]},{"name":"CameraPermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Alias for "},{"kind":"code","text":"`PermissionResponse`"},{"kind":"text","text":" type exported by "},{"kind":"code","text":"`expo-modules-core`"},{"kind":"text","text":"."}]},"type":{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}},{"name":"DefaultTab","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"The default tab with which the image picker will be opened.\n- "},{"kind":"code","text":"`'photos'`"},{"kind":"text","text":" - the photos/videos tab will be opened.\n- "},{"kind":"code","text":"`'albums'`"},{"kind":"text","text":" - the albums tab will be opened."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"photos"},{"type":"literal","value":"albums"}]}},{"name":"ImagePickerAsset","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Represents an asset (image or video) returned by the image picker or camera."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"assetId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The unique ID that represents the picked image or video, if picked from the library. It can be used\nby [expo-media-library]("},{"kind":"relative-link","text":"./media-library"},{"kind":"text","text":") to manage the picked asset.\n\n> This might be "},{"kind":"code","text":"`null`"},{"kind":"text","text":" when the ID is unavailable or the user gave limited permission to access the media library.\n> On Android, the ID is unavailable when the user selects a photo by directly browsing file system."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"base64","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When the "},{"kind":"code","text":"`base64`"},{"kind":"text","text":" option is truthy, it is a Base64-encoded string of the selected image's JPEG data, otherwise "},{"kind":"code","text":"`null`"},{"kind":"text","text":".\nIf you prepend this with "},{"kind":"code","text":"`'data:image/jpeg;base64,'`"},{"kind":"text","text":" to create a data URI,\nyou can use it as the source of an "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" element; for example:\n"},{"kind":"code","text":"```ts\n<Image\n  source={{ uri: 'data:image/jpeg;base64,' + asset.base64 }}\n  style={{ width: 200, height: 200 }}\n/>\n```"}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"duration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Length of the video in milliseconds or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if the asset is not a video."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"exif","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The "},{"kind":"code","text":"`exif`"},{"kind":"text","text":" field is included if the "},{"kind":"code","text":"`exif`"},{"kind":"text","text":" option is truthy, and is an object containing the\nimage's EXIF data. The names of this object's properties are EXIF tags and the values are the\nrespective EXIF values for those tags."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"},{"type":"literal","value":null}]}},{"name":"file","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The web "},{"kind":"code","text":"`File`"},{"kind":"text","text":" object containing the selected media. This property is web-only and can be used to upload to a server with "},{"kind":"code","text":"`FormData`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"reference","target":{"qualifiedName":"File"},"name":"File","package":"typescript"}},{"name":"fileName","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Preferred filename to use when saving this item. This might be "},{"kind":"code","text":"`null`"},{"kind":"text","text":" when the name is unavailable\nor user gave limited permission to access the media library."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"fileSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"File size of the picked image or video, in bytes."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"height","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Height of the image or video."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"mimeType","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The MIME type of the selected asset or "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if could not be determined."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"pairedVideoAsset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Contains information about the video paired with the image file. This property is only set when "},{"kind":"code","text":"`livePhotos`"},{"kind":"text","text":" media type was present in the "},{"kind":"code","text":"`mediaTypes`"},{"kind":"text","text":" array when launching the picker and a live photo was selected."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","name":"ImagePickerAsset","package":"expo-image-picker"},{"type":"literal","value":null}]}},{"name":"type","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The type of the asset.\n- "},{"kind":"code","text":"`'image'`"},{"kind":"text","text":" - for images.\n- "},{"kind":"code","text":"`'video'`"},{"kind":"text","text":" - for videos.\n- "},{"kind":"code","text":"`'livePhoto'`"},{"kind":"text","text":" - for live photos. (iOS only)\n- "},{"kind":"code","text":"`'pairedVideo'`"},{"kind":"text","text":" - for videos paired with photos, which can be combined to create a live photo. (iOS only)"}]},"type":{"type":"union","types":[{"type":"literal","value":"image"},{"type":"literal","value":"video"},{"type":"literal","value":"livePhoto"},{"type":"literal","value":"pairedVideo"}]}},{"name":"uri","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"URI to the local image or video file (usable as the source of an "},{"kind":"code","text":"`Image`"},{"kind":"text","text":" element, in the case of\nan image) and "},{"kind":"code","text":"`width`"},{"kind":"text","text":" and "},{"kind":"code","text":"`height`"},{"kind":"text","text":" specify the dimensions of the media."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"width","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Width of the image or video."}]},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"ImagePickerCanceledResult","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Type representing canceled pick result."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"assets","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"code","text":"`null`"},{"kind":"text","text":" signifying that the request was canceled."}]},"type":{"type":"literal","value":null}},{"name":"canceled","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Boolean flag set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":" showing that the request was canceled."}]},"type":{"type":"literal","value":true}}]}}},{"name":"ImagePickerErrorResult","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"code","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The error code."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"exception","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The exception which caused the error."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"message","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The error message."}]},"type":{"type":"intrinsic","name":"string"}}]}}},{"name":"ImagePickerOptions","variant":"declaration","kind":2097152,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"allowsEditing","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to show a UI to edit the image after it is picked. On Android the user can crop and\nrotate the image and on iOS simply crop it.\n\n> - Cropping multiple images is not supported - this option is mutually exclusive with "},{"kind":"code","text":"`allowsMultipleSelection`"},{"kind":"text","text":".\n> - On iOS, this option is ignored if "},{"kind":"code","text":"`allowsMultipleSelection`"},{"kind":"text","text":" is enabled.\n> - On iOS cropping a "},{"kind":"code","text":"`.bmp`"},{"kind":"text","text":" image will convert it to "},{"kind":"code","text":"`.png`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowsMultipleSelection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether or not to allow selecting multiple media files at once.\n\n> Cropping multiple images is not supported - this option is mutually exclusive with "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":".\n> If this option is enabled, then "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" is ignored."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 14+"}]},{"tag":"@platform","content":[{"kind":"text","text":"web"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"aspect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An array with two entries "},{"kind":"code","text":"`[x, y]`"},{"kind":"text","text":" specifying the aspect ratio to maintain if the user is\nallowed to edit the image (by passing "},{"kind":"code","text":"`allowsEditing: true`"},{"kind":"text","text":"). This is only applicable on\nAndroid, since on iOS the crop rectangle is always a square."}]},"type":{"type":"tuple","elements":[{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"number"}]}},{"name":"base64","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to also include the image data in Base64 format."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"cameraType","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Selects the camera-facing type. The "},{"kind":"code","text":"`CameraType`"},{"kind":"text","text":" enum provides two options:\n"},{"kind":"code","text":"`front`"},{"kind":"text","text":" for the front-facing camera and "},{"kind":"code","text":"`back`"},{"kind":"text","text":" for the back-facing camera.\n- **On Android**, the behavior of this option may vary based on the camera app installed on the device.\n- **On Web**, if this option is not provided, use \"camera\" as the default value of internal input element for backwards compatibility."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"CameraType.back"}]}]},"type":{"type":"reference","name":"CameraType","package":"expo-image-picker"}},{"name":"defaultTab","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose the default tab with which the image picker will be opened."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'photos'"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"DefaultTab","package":"expo-image-picker"}},{"name":"exif","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to also include the EXIF data for the image. On iOS the EXIF data does not include GPS\ntags in the camera case."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"legacy","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Uses the legacy image picker on Android. This will allow media to be selected from outside the users photo library."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"mediaTypes","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose what type of media to pick."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'images'"}]}]},"type":{"type":"union","types":[{"type":"reference","name":"MediaType","package":"expo-image-picker"},{"type":"array","elementType":{"type":"reference","name":"MediaType","package":"expo-image-picker"}},{"type":"reference","name":"MediaTypeOptions","package":"expo-image-picker"}]}},{"name":"orderedSelection","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to display number badges when assets are selected. The badges are numbered\nin selection order. Assets are then returned in the exact same order they were selected.\n\n> Assets should be returned in the selection order regardless of this option,\n> but there is no guarantee that it is always true when this option is disabled."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios 15+"}]},{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"preferredAssetRepresentationMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose [preferred asset representation mode](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)\nto use when loading assets."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.UIImagePickerPreferredAssetRepresentationMode.Automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 14+"}]}]},"type":{"type":"reference","name":"UIImagePickerPreferredAssetRepresentationMode","package":"expo-image-picker"}},{"name":"presentationStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Choose [presentation style](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle?language=objc)\nto customize view during taking photo/video."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.UIImagePickerPresentationStyle.Automatic"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"UIImagePickerPresentationStyle","package":"expo-image-picker"}},{"name":"quality","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specify the quality of compression, from "},{"kind":"code","text":"`0`"},{"kind":"text","text":" to "},{"kind":"code","text":"`1`"},{"kind":"text","text":". "},{"kind":"code","text":"`0`"},{"kind":"text","text":" means compress for small size,\n"},{"kind":"code","text":"`1`"},{"kind":"text","text":" means compress for maximum quality.\n> Note: If the selected image has been compressed before, the size of the output file may be\n> bigger than the size of the original image.\n\n> Note: On iOS, if a "},{"kind":"code","text":"`.bmp`"},{"kind":"text","text":" or "},{"kind":"code","text":"`.png`"},{"kind":"text","text":" image is selected from the library, this option is ignored."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"1.0"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"selectionLimit","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The maximum number of items that user can select. Applicable when "},{"kind":"code","text":"`allowsMultipleSelection`"},{"kind":"text","text":" is enabled.\nSetting the value to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" sets the selection limit to the maximum that the system supports."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 14+"}]},{"tag":"@default","content":[{"kind":"text","text":"0"}]}]},"type":{"type":"intrinsic","name":"number"}},{"name":"videoExportPreset","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specify preset which will be used to compress selected video."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.VideoExportPreset.Passthrough"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios 11+"}]},{"tag":"@deprecated","content":[{"kind":"text","text":"See ["},{"kind":"code","text":"`videoExportPreset`"},{"kind":"text","text":"](https://developer.apple.com/documentation/uikit/uiimagepickercontroller/2890964-videoexportpreset?language=objc)\nin Apple documentation."}]}]},"type":{"type":"reference","name":"VideoExportPreset","package":"expo-image-picker"}},{"name":"videoMaxDuration","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Maximum duration, in seconds, for video recording. Setting this to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" disables the limit.\nDefaults to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" (no limit).\n- **On iOS**, when "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", maximum duration is limited to 10 minutes.\n  This limit is applied automatically, if "},{"kind":"code","text":"`0`"},{"kind":"text","text":" or no value is specified.\n- **On Android**, effect of this option depends on support of installed camera app.\n- **On Web** this option has no effect - the limit is browser-dependant."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"videoQuality","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Specify the quality of recorded videos. Defaults to the highest quality available for the device."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"ImagePicker.UIImagePickerControllerQualityType.High"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"UIImagePickerControllerQualityType","package":"expo-image-picker"}}]}}},{"name":"ImagePickerResult","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Type representing successful and canceled pick result."}]},"type":{"type":"union","types":[{"type":"reference","name":"ImagePickerSuccessResult","package":"expo-image-picker"},{"type":"reference","name":"ImagePickerCanceledResult","package":"expo-image-picker"}]}},{"name":"ImagePickerSuccessResult","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Type representing successful pick result."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"assets","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"An array of picked assets."}]},"type":{"type":"array","elementType":{"type":"reference","name":"ImagePickerAsset","package":"expo-image-picker"}}},{"name":"canceled","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Boolean flag set to "},{"kind":"code","text":"`false`"},{"kind":"text","text":" showing that the request was successful."}]},"type":{"type":"literal","value":false}}]}}},{"name":"MediaLibraryPermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Extends "},{"kind":"code","text":"`PermissionResponse`"},{"kind":"text","text":" type exported by "},{"kind":"code","text":"`expo-modules-core`"},{"kind":"text","text":", containing additional iOS-specific field."}]},"type":{"type":"intersection","types":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"accessPrivileges","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates if your app has access to the whole or only part of the photo library. Possible values are:\n- "},{"kind":"code","text":"`'all'`"},{"kind":"text","text":" if the user granted your app access to the whole photo library\n- "},{"kind":"code","text":"`'limited'`"},{"kind":"text","text":" if the user granted your app access only to selected photos (only available on Android API 34+ and iOS 14.0+)\n- "},{"kind":"code","text":"`'none'`"},{"kind":"text","text":" if user denied or hasn't yet granted the permission"}]},"type":{"type":"union","types":[{"type":"literal","value":"all"},{"type":"literal","value":"limited"},{"type":"literal","value":"none"}]}}]}}]}},{"name":"MediaType","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Media types that can be picked by the image picker.\n- "},{"kind":"code","text":"`'images'`"},{"kind":"text","text":" - for images.\n- "},{"kind":"code","text":"`'videos'`"},{"kind":"text","text":" - for videos.\n- "},{"kind":"code","text":"`'livePhotos'`"},{"kind":"text","text":" - for live photos (iOS only).\n\n> When the "},{"kind":"code","text":"`livePhotos`"},{"kind":"text","text":" type is added to the media types array and a live photo is selected,\n> the resulting "},{"kind":"code","text":"`ImagePickerAsset`"},{"kind":"text","text":" will contain an unaltered image and the "},{"kind":"code","text":"`pairedVideoAsset`"},{"kind":"text","text":" field will contain a\n> video asset paired with the image. This option will be ignored when the "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" option is enabled. Due\n> to platform limitations live photos are returned at original quality, regardless of the "},{"kind":"code","text":"`quality`"},{"kind":"text","text":" option.\n\n> When on Android or Web "},{"kind":"code","text":"`livePhotos`"},{"kind":"text","text":" type passed as a media type will be ignored."}]},"type":{"type":"union","types":[{"type":"literal","value":"images"},{"type":"literal","value":"videos"},{"type":"literal","value":"livePhotos"}]}},{"name":"PermissionExpiration","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Permission expiration time. Currently, all permissions are granted permanently."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"intrinsic","name":"number"}]}},{"name":"PermissionHookOptions","variant":"declaration","kind":2097152,"typeParameters":[{"name":"Options","variant":"typeParam","kind":131072,"type":{"type":"intrinsic","name":"object"}}],"type":{"type":"intersection","types":[{"type":"reference","target":{"qualifiedName":"PermissionHookBehavior"},"name":"PermissionHookBehavior","package":"expo-modules-core"},{"type":"reference","name":"Options","package":"expo-modules-core","refersToTypeParameter":true}]}},{"name":"PermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object obtained by permissions get and request functions."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"canAskAgain","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates if user can be asked again for specific permission.\nIf not, one should be directed to the Settings app\nin order to enable/disable the permission."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"expires","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines time when the permission expires."}]},"type":{"type":"reference","name":"PermissionExpiration","package":"expo-modules-core"}},{"name":"granted","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A convenience boolean that indicates if the permission is granted."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"status","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines the status of the permission."}]},"type":{"type":"reference","name":"PermissionStatus","package":"expo-modules-core"}}]}}},{"name":"getCameraPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getCameraPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Checks user's permissions for accessing camera."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [CameraPermissionResponse](#camerapermissionresponse)."}]}]},"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"CameraPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"getMediaLibraryPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getMediaLibraryPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Checks user's permissions for accessing photos."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [MediaLibraryPermissionResponse](#medialibrarypermissionresponse)."}]}]},"parameters":[{"name":"writeOnly","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to request write or read and write permissions. Defaults to "},{"kind":"code","text":"`false`"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"false"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"getPendingResultAsync","variant":"declaration","kind":64,"signatures":[{"name":"getPendingResultAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Android system sometimes kills the "},{"kind":"code","text":"`MainActivity`"},{"kind":"text","text":" after the "},{"kind":"code","text":"`ImagePicker`"},{"kind":"text","text":" finishes. When this\nhappens, we lost the data selected from the "},{"kind":"code","text":"`ImagePicker`"},{"kind":"text","text":". However, you can retrieve the lost\ndata by calling "},{"kind":"code","text":"`getPendingResultAsync`"},{"kind":"text","text":". You can test this functionality by turning on\n"},{"kind":"code","text":"`Don't keep activities`"},{"kind":"text","text":" in the developer options."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"- **On Android:** a promise that resolves to an array of objects of exactly same type as in\n"},{"kind":"code","text":"`ImagePicker.launchImageLibraryAsync`"},{"kind":"text","text":" or "},{"kind":"code","text":"`ImagePicker.launchCameraAsync`"},{"kind":"text","text":" if the "},{"kind":"code","text":"`ImagePicker`"},{"kind":"text","text":"\nfinished successfully. Otherwise, to the array of ["},{"kind":"code","text":"`ImagePickerErrorResult`"},{"kind":"text","text":"](#imagepickerimagepickererrorresult).\n- **On other platforms:** an empty array."}]}]},"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"union","types":[{"type":"reference","name":"ImagePickerResult","package":"expo-image-picker"},{"type":"reference","name":"ImagePickerErrorResult","package":"expo-image-picker"}]}}],"name":"Promise","package":"typescript"}}]},{"name":"launchCameraAsync","variant":"declaration","kind":64,"signatures":[{"name":"launchCameraAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Display the system UI for taking a photo with the camera. Requires "},{"kind":"code","text":"`Permissions.CAMERA`"},{"kind":"text","text":".\nOn Android and iOS 10 "},{"kind":"code","text":"`Permissions.CAMERA_ROLL`"},{"kind":"text","text":" is also required. On mobile web, this must be\ncalled immediately in a user interaction like a button press, otherwise the browser will block\nthe request without a warning.\n> **Note:** Make sure that you handle "},{"kind":"code","text":"`MainActivity`"},{"kind":"text","text":" destruction on **Android**. See [ImagePicker.getPendingResultAsync](#imagepickergetpendingresultasync).\n> **Notes for Web:** The system UI can only be shown after user activation (e.g. a "},{"kind":"code","text":"`Button`"},{"kind":"text","text":" press).\nTherefore, calling "},{"kind":"code","text":"`launchCameraAsync`"},{"kind":"text","text":" in "},{"kind":"code","text":"`componentDidMount`"},{"kind":"text","text":", for example, will **not** work as\nintended. The "},{"kind":"code","text":"`cancelled`"},{"kind":"text","text":" event will not be returned in the browser due to platform restrictions\nand inconsistencies across browsers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that resolves to an object with "},{"kind":"code","text":"`canceled`"},{"kind":"text","text":" and "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" fields.\nWhen the user canceled the action the "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" is always "},{"kind":"code","text":"`null`"},{"kind":"text","text":", otherwise it's an array of\nthe selected media assets which have a form of ["},{"kind":"code","text":"`ImagePickerAsset`"},{"kind":"text","text":"](#imagepickerasset)."}]}]},"parameters":[{"name":"options","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An "},{"kind":"code","text":"`ImagePickerOptions`"},{"kind":"text","text":" object."}]},"type":{"type":"reference","name":"ImagePickerOptions","package":"expo-image-picker"},"defaultValue":"{}"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"ImagePickerResult","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"launchImageLibraryAsync","variant":"declaration","kind":64,"signatures":[{"name":"launchImageLibraryAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Display the system UI for choosing an image or a video from the phone's library.\nRequires "},{"kind":"code","text":"`Permissions.MEDIA_LIBRARY`"},{"kind":"text","text":" on iOS 10 only. On mobile web, this must be     called\nimmediately in a user interaction like a button press, otherwise the browser will block the\nrequest without a warning.\n\n**Animated GIFs support:** On Android, if the selected image is an animated GIF, the result image will be an\nanimated GIF too if and only if "},{"kind":"code","text":"`quality`"},{"kind":"text","text":" is explicitly set to "},{"kind":"code","text":"`1.0`"},{"kind":"text","text":" and "},{"kind":"code","text":"`allowsEditing`"},{"kind":"text","text":" is set to "},{"kind":"code","text":"`false`"},{"kind":"text","text":".\nOtherwise compression and/or cropper will pick the first frame of the GIF and return it as the\nresult (on Android the result will be a PNG). On iOS, both quality and cropping are supported.\n\n> **Notes for Web:** The system UI can only be shown after user activation (e.g. a "},{"kind":"code","text":"`Button`"},{"kind":"text","text":" press).\nTherefore, calling "},{"kind":"code","text":"`launchImageLibraryAsync`"},{"kind":"text","text":" in "},{"kind":"code","text":"`componentDidMount`"},{"kind":"text","text":", for example, will **not**\nwork as intended. The "},{"kind":"code","text":"`cancelled`"},{"kind":"text","text":" event will not be returned in the browser due to platform\nrestrictions and inconsistencies across browsers."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that resolves to an object with "},{"kind":"code","text":"`canceled`"},{"kind":"text","text":" and "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" fields.\nWhen the user canceled the action the "},{"kind":"code","text":"`assets`"},{"kind":"text","text":" is always "},{"kind":"code","text":"`null`"},{"kind":"text","text":", otherwise it's an array of\nthe selected media assets which have a form of ["},{"kind":"code","text":"`ImagePickerAsset`"},{"kind":"text","text":"](#imagepickerasset)."}]}]},"parameters":[{"name":"options","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An object extended by ["},{"kind":"code","text":"`ImagePickerOptions`"},{"kind":"text","text":"](#imagepickeroptions)."}]},"type":{"type":"reference","name":"ImagePickerOptions","package":"expo-image-picker"},"defaultValue":"{}"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"ImagePickerResult","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"requestCameraPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"requestCameraPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks the user to grant permissions for accessing camera. This does nothing on web because the\nbrowser camera is not used."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [CameraPermissionResponse](#camerarollpermissionresponse)."}]}]},"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"CameraPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"requestMediaLibraryPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"requestMediaLibraryPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Asks the user to grant permissions for accessing user's photo. This method does nothing on web."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A promise that fulfills with an object of type [MediaLibraryPermissionResponse](#medialibrarypermissionresponse)."}]}]},"parameters":[{"name":"writeOnly","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Whether to request write or read and write permissions. Defaults to "},{"kind":"code","text":"`false`"}]},"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"false"}],"type":{"type":"reference","target":{"qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"Promise","package":"typescript"}}]},{"name":"useCameraPermissions","variant":"declaration","kind":64,"comment":{"summary":[{"kind":"text","text":"Check or request permissions to access the camera.\nThis uses both "},{"kind":"code","text":"`requestCameraPermissionsAsync`"},{"kind":"text","text":" and "},{"kind":"code","text":"`getCameraPermissionsAsync`"},{"kind":"text","text":" to interact with the permissions."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```ts\nconst [status, requestPermission] = ImagePicker.useCameraPermissions();\n```"}]}]},"signatures":[{"name":"useCameraPermissions","variant":"signature","kind":4096,"parameters":[{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"object"}],"name":"PermissionHookOptions","package":"expo-modules-core"}}],"type":{"type":"tuple","elements":[{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}]},{"type":"reference","target":{"qualifiedName":"RequestPermissionMethod"},"typeArguments":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}],"name":"RequestPermissionMethod","package":"expo-modules-core"},{"type":"reference","target":{"qualifiedName":"GetPermissionMethod"},"typeArguments":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}],"name":"GetPermissionMethod","package":"expo-modules-core"}]}}]},{"name":"useMediaLibraryPermissions","variant":"declaration","kind":64,"comment":{"summary":[{"kind":"text","text":"Check or request permissions to access the media library.\nThis uses both "},{"kind":"code","text":"`requestMediaLibraryPermissionsAsync`"},{"kind":"text","text":" and "},{"kind":"code","text":"`getMediaLibraryPermissionsAsync`"},{"kind":"text","text":" to interact with the permissions."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```ts\nconst [status, requestPermission] = ImagePicker.useMediaLibraryPermissions();\n```"}]}]},"signatures":[{"name":"useMediaLibraryPermissions","variant":"signature","kind":4096,"parameters":[{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"type":{"type":"reference","typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"writeOnly","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}}]}}],"name":"PermissionHookOptions","package":"expo-modules-core"}}],"type":{"type":"tuple","elements":[{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}]},{"type":"reference","target":{"qualifiedName":"RequestPermissionMethod"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"RequestPermissionMethod","package":"expo-modules-core"},{"type":"reference","target":{"qualifiedName":"GetPermissionMethod"},"typeArguments":[{"type":"reference","name":"MediaLibraryPermissionResponse","package":"expo-image-picker"}],"name":"GetPermissionMethod","package":"expo-modules-core"}]}}]}],"packageName":"expo-image-picker"}
\ No newline at end of file
diff --git a/packages/expo-image-picker/CHANGELOG.md b/packages/expo-image-picker/CHANGELOG.md
index 094ec53fe91684..9ea1fdf7d3ebf0 100644
--- a/packages/expo-image-picker/CHANGELOG.md
+++ b/packages/expo-image-picker/CHANGELOG.md
@@ -7,6 +7,7 @@
 ### 🎉 New features
 
 - Added support for ordered selection and default tab selection on Android. ([#34223](https://github.com/expo/expo/pull/34223) by [@fobos531](https://github.com/fobos531))
+- Add support for cameraType in web implementation ([#35221](https://github.com/expo/expo/pull/35221) by [@RyogaK](https://github.com/RyogaK))
 
 ### 🐛 Bug fixes
 
diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts b/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts
index 5047643bf799fb..1af949d90d39f9 100644
--- a/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts
+++ b/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts
@@ -6,10 +6,11 @@ declare const _default: {
         allowsMultipleSelection?: boolean | undefined;
         base64?: boolean | undefined;
     }): Promise<ImagePickerResult>;
-    launchCameraAsync({ mediaTypes, allowsMultipleSelection, base64, }: {
+    launchCameraAsync({ mediaTypes, allowsMultipleSelection, base64, cameraType, }: {
         mediaTypes?: MediaTypeOptions | undefined;
         allowsMultipleSelection?: boolean | undefined;
         base64?: boolean | undefined;
+        cameraType: any;
     }): Promise<ImagePickerResult>;
     getCameraPermissionsAsync(): Promise<PermissionResponse>;
     requestCameraPermissionsAsync(): Promise<PermissionResponse>;
diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts.map b/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts.map
index 83dd90a700912a..44c047d9834966 100644
--- a/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts.map
+++ b/packages/expo-image-picker/build/ExponentImagePicker.web.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ExponentImagePicker.web.d.ts","sourceRoot":"","sources":["../src/ExponentImagePicker.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA8B,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAEL,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;;;;;;QAcvB,QAAQ,iBAAiB,CAAC;;;;;QAgB1B,QAAQ,iBAAiB,CAAC;;;gDA2BoB,OAAO;oDAGH,OAAO,GAAG,QAAQ,kBAAkB,CAAC;;AAnD7F,wBAsDE"}
\ No newline at end of file
+{"version":3,"file":"ExponentImagePicker.web.d.ts","sourceRoot":"","sources":["../src/ExponentImagePicker.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA8B,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAGL,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;;;;;;QAcvB,QAAQ,iBAAiB,CAAC;;;;;;QAiB1B,QAAQ,iBAAiB,CAAC;;;gDA2BoB,OAAO;oDAGH,OAAO,GAAG,QAAQ,kBAAkB,CAAC;;AApD7F,wBAuDE"}
\ No newline at end of file
diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.js b/packages/expo-image-picker/build/ExponentImagePicker.web.js
index cf7c57325d57bc..e292cd567077a3 100644
--- a/packages/expo-image-picker/build/ExponentImagePicker.web.js
+++ b/packages/expo-image-picker/build/ExponentImagePicker.web.js
@@ -1,5 +1,5 @@
 import { PermissionStatus, Platform } from 'expo-modules-core';
-import { MediaTypeOptions, } from './ImagePicker.types';
+import { CameraType, MediaTypeOptions, } from './ImagePicker.types';
 import { parseMediaTypes } from './utils';
 const MediaTypeInput = {
     images: 'image/*',
@@ -18,7 +18,7 @@ export default {
             base64,
         });
     },
-    async launchCameraAsync({ mediaTypes = MediaTypeOptions.Images, allowsMultipleSelection = false, base64 = false, }) {
+    async launchCameraAsync({ mediaTypes = MediaTypeOptions.Images, allowsMultipleSelection = false, base64 = false, cameraType, }) {
         // SSR guard
         if (!Platform.isDOMAvailable) {
             return { canceled: true, assets: null };
@@ -26,7 +26,7 @@ export default {
         return await openFileBrowserAsync({
             mediaTypes,
             allowsMultipleSelection,
-            capture: true,
+            capture: cameraType ?? true,
             base64,
         });
     },
@@ -71,7 +71,16 @@ function openFileBrowserAsync({ mediaTypes, capture = false, allowsMultipleSelec
         input.setAttribute('multiple', 'multiple');
     }
     if (capture) {
-        input.setAttribute('capture', 'camera');
+        switch (capture) {
+            case true:
+                input.setAttribute('capture', 'camera');
+                break;
+            case CameraType.front:
+                input.setAttribute('capture', 'environment');
+                break;
+            case CameraType.back:
+                input.setAttribute('capture', 'user');
+        }
     }
     document.body.appendChild(input);
     return new Promise((resolve) => {
diff --git a/packages/expo-image-picker/build/ExponentImagePicker.web.js.map b/packages/expo-image-picker/build/ExponentImagePicker.web.js.map
index a7c4c92f555a77..bdd11fc3fa2152 100644
--- a/packages/expo-image-picker/build/ExponentImagePicker.web.js.map
+++ b/packages/expo-image-picker/build/ExponentImagePicker.web.js.map
@@ -1 +1 @@
-{"version":3,"file":"ExponentImagePicker.web.js","sourceRoot":"","sources":["../src/ExponentImagePicker.web.ts"],"names":[],"mappings":"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","sourcesContent":["import { PermissionResponse, PermissionStatus, Platform } from 'expo-modules-core';\n\nimport {\n  ImagePickerAsset,\n  ImagePickerResult,\n  MediaType,\n  MediaTypeOptions,\n  OpenFileBrowserOptions,\n} from './ImagePicker.types';\nimport { parseMediaTypes } from './utils';\n\nconst MediaTypeInput: Record<MediaType, string> = {\n  images: 'image/*',\n  videos: 'video/mp4,video/quicktime,video/x-m4v,video/*',\n  livePhotos: '',\n};\n\nexport default {\n  async launchImageLibraryAsync({\n    mediaTypes = ['images'] as MediaType[],\n    allowsMultipleSelection = false,\n    base64 = false,\n  }): Promise<ImagePickerResult> {\n    // SSR guard\n    if (!Platform.isDOMAvailable) {\n      return { canceled: true, assets: null };\n    }\n    return await openFileBrowserAsync({\n      mediaTypes,\n      allowsMultipleSelection,\n      base64,\n    });\n  },\n\n  async launchCameraAsync({\n    mediaTypes = MediaTypeOptions.Images,\n    allowsMultipleSelection = false,\n    base64 = false,\n  }): Promise<ImagePickerResult> {\n    // SSR guard\n    if (!Platform.isDOMAvailable) {\n      return { canceled: true, assets: null };\n    }\n    return await openFileBrowserAsync({\n      mediaTypes,\n      allowsMultipleSelection,\n      capture: true,\n      base64,\n    });\n  },\n\n  /*\n   * Delegate to expo-permissions to request camera permissions\n   */\n  async getCameraPermissionsAsync() {\n    return permissionGrantedResponse();\n  },\n  async requestCameraPermissionsAsync() {\n    return permissionGrantedResponse();\n  },\n\n  /*\n   * Camera roll permissions don't need to be requested on web, so we always\n   * respond with granted.\n   */\n  async getMediaLibraryPermissionsAsync(_writeOnly: boolean) {\n    return permissionGrantedResponse();\n  },\n  async requestMediaLibraryPermissionsAsync(_writeOnly: boolean): Promise<PermissionResponse> {\n    return permissionGrantedResponse();\n  },\n};\n\nfunction permissionGrantedResponse(): PermissionResponse {\n  return {\n    status: PermissionStatus.GRANTED,\n    expires: 'never',\n    granted: true,\n    canAskAgain: true,\n  };\n}\n\nfunction openFileBrowserAsync({\n  mediaTypes,\n  capture = false,\n  allowsMultipleSelection = false,\n  base64,\n}: OpenFileBrowserOptions): Promise<ImagePickerResult> {\n  const parsedMediaTypes = parseMediaTypes(mediaTypes);\n\n  const mediaTypeFormat = createMediaTypeFormat(parsedMediaTypes);\n\n  const input = document.createElement('input');\n  input.style.display = 'none';\n  input.setAttribute('type', 'file');\n  input.setAttribute('accept', mediaTypeFormat);\n  input.setAttribute('id', String(Math.random()));\n  input.setAttribute('data-testid', 'file-input');\n  if (allowsMultipleSelection) {\n    input.setAttribute('multiple', 'multiple');\n  }\n  if (capture) {\n    input.setAttribute('capture', 'camera');\n  }\n  document.body.appendChild(input);\n\n  return new Promise((resolve) => {\n    input.addEventListener('change', async () => {\n      if (input.files?.length) {\n        const files = allowsMultipleSelection ? input.files : [input.files[0]];\n        const assets: ImagePickerAsset[] = await Promise.all(\n          Array.from(files).map((file) => readFile(file, { base64 }))\n        );\n\n        resolve({ canceled: false, assets });\n      } else {\n        resolve({ canceled: true, assets: null });\n      }\n      document.body.removeChild(input);\n    });\n    input.addEventListener('cancel', () => {\n      input.dispatchEvent(new Event('change'));\n    });\n\n    const event = new MouseEvent('click');\n    input.dispatchEvent(event);\n  });\n}\n\nfunction readFile(targetFile: File, options: { base64: boolean }): Promise<ImagePickerAsset> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onerror = () => {\n      reject(new Error(`Failed to read the selected media because the operation failed.`));\n    };\n    reader.onload = ({ target }) => {\n      const uri = (target as any).result;\n      const returnRaw = () => resolve({ uri, width: 0, height: 0 });\n      const returnMediaData = (data: ImagePickerAsset) => {\n        resolve({\n          ...data,\n          ...(options.base64 && { base64: uri.substr(uri.indexOf(',') + 1) }),\n          file: targetFile,\n        });\n      };\n\n      if (typeof uri === 'string') {\n        if (targetFile.type.startsWith('image/')) {\n          const image = new Image();\n          image.src = uri;\n          image.onload = () => {\n            returnMediaData({\n              uri,\n              width: image.naturalWidth ?? image.width,\n              height: image.naturalHeight ?? image.height,\n              type: 'image',\n              mimeType: targetFile.type,\n              fileName: targetFile.name,\n              fileSize: targetFile.size,\n            });\n          };\n          image.onerror = () => returnRaw();\n        } else if (targetFile.type.startsWith('video/')) {\n          const video = document.createElement('video');\n          video.preload = 'metadata';\n          video.src = uri;\n          video.onloadedmetadata = () => {\n            returnMediaData({\n              uri,\n              width: video.videoWidth,\n              height: video.videoHeight,\n              type: 'video',\n              mimeType: targetFile.type,\n              fileName: targetFile.name,\n              fileSize: targetFile.size,\n              duration: video.duration,\n            });\n          };\n          video.onerror = () => returnRaw();\n        } else {\n          returnRaw();\n        }\n      } else {\n        returnRaw();\n      }\n    };\n\n    reader.readAsDataURL(targetFile);\n  });\n}\n\nfunction createMediaTypeFormat(mediaTypes: MediaType[]): string {\n  const filteredMediaTypes = mediaTypes.filter((mediaType) => mediaType !== 'livePhotos');\n  if (filteredMediaTypes.length === 0) {\n    return 'image/*';\n  }\n  let result = '';\n  for (const mediaType of filteredMediaTypes) {\n    // Make sure the types don't repeat\n    if (!result.includes(MediaTypeInput[mediaType])) {\n      result = result.concat(',', MediaTypeInput[mediaType]);\n    }\n  }\n  return result;\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"ExponentImagePicker.web.js","sourceRoot":"","sources":["../src/ExponentImagePicker.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EACL,UAAU,EAIV,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,cAAc,GAA8B;IAChD,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,+CAA+C;IACvD,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,eAAe;IACb,KAAK,CAAC,uBAAuB,CAAC,EAC5B,UAAU,GAAG,CAAC,QAAQ,CAAgB,EACtC,uBAAuB,GAAG,KAAK,EAC/B,MAAM,GAAG,KAAK,GACf;QACC,YAAY;QACZ,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC5B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACzC;QACD,OAAO,MAAM,oBAAoB,CAAC;YAChC,UAAU;YACV,uBAAuB;YACvB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EACtB,UAAU,GAAG,gBAAgB,CAAC,MAAM,EACpC,uBAAuB,GAAG,KAAK,EAC/B,MAAM,GAAG,KAAK,EACd,UAAU,GACX;QACC,YAAY;QACZ,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC5B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACzC;QACD,OAAO,MAAM,oBAAoB,CAAC;YAChC,UAAU;YACV,uBAAuB;YACvB,OAAO,EAAE,UAAU,IAAI,IAAI;YAC3B,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB;QAC7B,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,6BAA6B;QACjC,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,+BAA+B,CAAC,UAAmB;QACvD,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,mCAAmC,CAAC,UAAmB;QAC3D,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;CACF,CAAC;AAEF,SAAS,yBAAyB;IAChC,OAAO;QACL,MAAM,EAAE,gBAAgB,CAAC,OAAO;QAChC,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,EAC5B,UAAU,EACV,OAAO,GAAG,KAAK,EACf,uBAAuB,GAAG,KAAK,EAC/B,MAAM,GACiB;IACvB,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAErD,MAAM,eAAe,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC9C,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,uBAAuB,EAAE;QAC3B,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KAC5C;IACD,IAAI,OAAO,EAAE;QACX,QAAQ,OAAO,EAAE;YACf,KAAK,IAAI;gBACP,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACxC,MAAM;YACR,KAAK,UAAU,CAAC,KAAK;gBACnB,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC7C,MAAM;YACR,KAAK,UAAU,CAAC,IAAI;gBAClB,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SACzC;KACF;IACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAEjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC1C,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE;gBACvB,MAAM,KAAK,GAAG,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAuB,MAAM,OAAO,CAAC,GAAG,CAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAC5D,CAAC;gBAEF,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;aACtC;iBAAM;gBACL,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3C;YACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,UAAgB,EAAE,OAA4B;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,CAAC,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC;QACF,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAI,MAAc,CAAC,MAAM,CAAC;YACnC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,eAAe,GAAG,CAAC,IAAsB,EAAE,EAAE;gBACjD,OAAO,CAAC;oBACN,GAAG,IAAI;oBACP,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACnE,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBACxC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;oBAC1B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;oBAChB,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;wBAClB,eAAe,CAAC;4BACd,GAAG;4BACH,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK;4BACxC,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM;4BAC3C,IAAI,EAAE,OAAO;4BACb,QAAQ,EAAE,UAAU,CAAC,IAAI;4BACzB,QAAQ,EAAE,UAAU,CAAC,IAAI;4BACzB,QAAQ,EAAE,UAAU,CAAC,IAAI;yBAC1B,CAAC,CAAC;oBACL,CAAC,CAAC;oBACF,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;iBACnC;qBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC9C,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;oBAC3B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;oBAChB,KAAK,CAAC,gBAAgB,GAAG,GAAG,EAAE;wBAC5B,eAAe,CAAC;4BACd,GAAG;4BACH,KAAK,EAAE,KAAK,CAAC,UAAU;4BACvB,MAAM,EAAE,KAAK,CAAC,WAAW;4BACzB,IAAI,EAAE,OAAO;4BACb,QAAQ,EAAE,UAAU,CAAC,IAAI;4BACzB,QAAQ,EAAE,UAAU,CAAC,IAAI;4BACzB,QAAQ,EAAE,UAAU,CAAC,IAAI;4BACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;yBACzB,CAAC,CAAC;oBACL,CAAC,CAAC;oBACF,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;iBACnC;qBAAM;oBACL,SAAS,EAAE,CAAC;iBACb;aACF;iBAAM;gBACL,SAAS,EAAE,CAAC;aACb;QACH,CAAC,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAuB;IACpD,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;IACxF,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;QACnC,OAAO,SAAS,CAAC;KAClB;IACD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE;QAC1C,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE;YAC/C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;SACxD;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { PermissionResponse, PermissionStatus, Platform } from 'expo-modules-core';\n\nimport {\n  CameraType,\n  ImagePickerAsset,\n  ImagePickerResult,\n  MediaType,\n  MediaTypeOptions,\n  OpenFileBrowserOptions,\n} from './ImagePicker.types';\nimport { parseMediaTypes } from './utils';\n\nconst MediaTypeInput: Record<MediaType, string> = {\n  images: 'image/*',\n  videos: 'video/mp4,video/quicktime,video/x-m4v,video/*',\n  livePhotos: '',\n};\n\nexport default {\n  async launchImageLibraryAsync({\n    mediaTypes = ['images'] as MediaType[],\n    allowsMultipleSelection = false,\n    base64 = false,\n  }): Promise<ImagePickerResult> {\n    // SSR guard\n    if (!Platform.isDOMAvailable) {\n      return { canceled: true, assets: null };\n    }\n    return await openFileBrowserAsync({\n      mediaTypes,\n      allowsMultipleSelection,\n      base64,\n    });\n  },\n\n  async launchCameraAsync({\n    mediaTypes = MediaTypeOptions.Images,\n    allowsMultipleSelection = false,\n    base64 = false,\n    cameraType,\n  }): Promise<ImagePickerResult> {\n    // SSR guard\n    if (!Platform.isDOMAvailable) {\n      return { canceled: true, assets: null };\n    }\n    return await openFileBrowserAsync({\n      mediaTypes,\n      allowsMultipleSelection,\n      capture: cameraType ?? true,\n      base64,\n    });\n  },\n\n  /*\n   * Delegate to expo-permissions to request camera permissions\n   */\n  async getCameraPermissionsAsync() {\n    return permissionGrantedResponse();\n  },\n  async requestCameraPermissionsAsync() {\n    return permissionGrantedResponse();\n  },\n\n  /*\n   * Camera roll permissions don't need to be requested on web, so we always\n   * respond with granted.\n   */\n  async getMediaLibraryPermissionsAsync(_writeOnly: boolean) {\n    return permissionGrantedResponse();\n  },\n  async requestMediaLibraryPermissionsAsync(_writeOnly: boolean): Promise<PermissionResponse> {\n    return permissionGrantedResponse();\n  },\n};\n\nfunction permissionGrantedResponse(): PermissionResponse {\n  return {\n    status: PermissionStatus.GRANTED,\n    expires: 'never',\n    granted: true,\n    canAskAgain: true,\n  };\n}\n\nfunction openFileBrowserAsync({\n  mediaTypes,\n  capture = false,\n  allowsMultipleSelection = false,\n  base64,\n}: OpenFileBrowserOptions): Promise<ImagePickerResult> {\n  const parsedMediaTypes = parseMediaTypes(mediaTypes);\n\n  const mediaTypeFormat = createMediaTypeFormat(parsedMediaTypes);\n\n  const input = document.createElement('input');\n  input.style.display = 'none';\n  input.setAttribute('type', 'file');\n  input.setAttribute('accept', mediaTypeFormat);\n  input.setAttribute('id', String(Math.random()));\n  input.setAttribute('data-testid', 'file-input');\n  if (allowsMultipleSelection) {\n    input.setAttribute('multiple', 'multiple');\n  }\n  if (capture) {\n    switch (capture) {\n      case true:\n        input.setAttribute('capture', 'camera');\n        break;\n      case CameraType.front:\n        input.setAttribute('capture', 'environment');\n        break;\n      case CameraType.back:\n        input.setAttribute('capture', 'user');\n    }\n  }\n  document.body.appendChild(input);\n\n  return new Promise((resolve) => {\n    input.addEventListener('change', async () => {\n      if (input.files?.length) {\n        const files = allowsMultipleSelection ? input.files : [input.files[0]];\n        const assets: ImagePickerAsset[] = await Promise.all(\n          Array.from(files).map((file) => readFile(file, { base64 }))\n        );\n\n        resolve({ canceled: false, assets });\n      } else {\n        resolve({ canceled: true, assets: null });\n      }\n      document.body.removeChild(input);\n    });\n    input.addEventListener('cancel', () => {\n      input.dispatchEvent(new Event('change'));\n    });\n\n    const event = new MouseEvent('click');\n    input.dispatchEvent(event);\n  });\n}\n\nfunction readFile(targetFile: File, options: { base64: boolean }): Promise<ImagePickerAsset> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onerror = () => {\n      reject(new Error(`Failed to read the selected media because the operation failed.`));\n    };\n    reader.onload = ({ target }) => {\n      const uri = (target as any).result;\n      const returnRaw = () => resolve({ uri, width: 0, height: 0 });\n      const returnMediaData = (data: ImagePickerAsset) => {\n        resolve({\n          ...data,\n          ...(options.base64 && { base64: uri.substr(uri.indexOf(',') + 1) }),\n          file: targetFile,\n        });\n      };\n\n      if (typeof uri === 'string') {\n        if (targetFile.type.startsWith('image/')) {\n          const image = new Image();\n          image.src = uri;\n          image.onload = () => {\n            returnMediaData({\n              uri,\n              width: image.naturalWidth ?? image.width,\n              height: image.naturalHeight ?? image.height,\n              type: 'image',\n              mimeType: targetFile.type,\n              fileName: targetFile.name,\n              fileSize: targetFile.size,\n            });\n          };\n          image.onerror = () => returnRaw();\n        } else if (targetFile.type.startsWith('video/')) {\n          const video = document.createElement('video');\n          video.preload = 'metadata';\n          video.src = uri;\n          video.onloadedmetadata = () => {\n            returnMediaData({\n              uri,\n              width: video.videoWidth,\n              height: video.videoHeight,\n              type: 'video',\n              mimeType: targetFile.type,\n              fileName: targetFile.name,\n              fileSize: targetFile.size,\n              duration: video.duration,\n            });\n          };\n          video.onerror = () => returnRaw();\n        } else {\n          returnRaw();\n        }\n      } else {\n        returnRaw();\n      }\n    };\n\n    reader.readAsDataURL(targetFile);\n  });\n}\n\nfunction createMediaTypeFormat(mediaTypes: MediaType[]): string {\n  const filteredMediaTypes = mediaTypes.filter((mediaType) => mediaType !== 'livePhotos');\n  if (filteredMediaTypes.length === 0) {\n    return 'image/*';\n  }\n  let result = '';\n  for (const mediaType of filteredMediaTypes) {\n    // Make sure the types don't repeat\n    if (!result.includes(MediaTypeInput[mediaType])) {\n      result = result.concat(',', MediaTypeInput[mediaType]);\n    }\n  }\n  return result;\n}\n"]}
\ No newline at end of file
diff --git a/packages/expo-image-picker/build/ImagePicker.types.d.ts b/packages/expo-image-picker/build/ImagePicker.types.d.ts
index 010aa68ecf20bb..321b23737a6e44 100644
--- a/packages/expo-image-picker/build/ImagePicker.types.d.ts
+++ b/packages/expo-image-picker/build/ImagePicker.types.d.ts
@@ -489,9 +489,8 @@ export type ImagePickerOptions = {
      * Selects the camera-facing type. The `CameraType` enum provides two options:
      * `front` for the front-facing camera and `back` for the back-facing camera.
      * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.
+     * - **On Web**, if this option is not provided, use "camera" as the default value of internal input element for backwards compatibility.
      * @default CameraType.back
-     * @platform android
-     * @platform ios
      */
     cameraType?: CameraType;
     /**
@@ -508,13 +507,17 @@ export type ImagePickerOptions = {
      */
     legacy?: boolean;
 };
+/**
+ * @hidden
+ * @deprecated Only used internally.
+ */
 export type OpenFileBrowserOptions = {
     /**
      * Choose what type of media to pick.
      * @default 'images'
      */
     mediaTypes: MediaType | MediaType[] | MediaTypeOptions;
-    capture?: boolean;
+    capture?: boolean | CameraType;
     /**
      * Whether or not to allow selecting multiple media files at once.
      * @platform web
diff --git a/packages/expo-image-picker/build/ImagePicker.types.d.ts.map b/packages/expo-image-picker/build/ImagePicker.types.d.ts.map
index 25436f73095f49..08ce925ebbe707 100644
--- a/packages/expo-image-picker/build/ImagePicker.types.d.ts.map
+++ b/packages/expo-image-picker/build/ImagePicker.types.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ImagePicker.types.d.ts","sourceRoot":"","sources":["../src/ImagePicker.types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"ImagePicker.types.d.ts","sourceRoot":"","sources":["../src/ImagePicker.types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/packages/expo-image-picker/build/ImagePicker.types.js.map b/packages/expo-image-picker/build/ImagePicker.types.js.map
index 838703a327488d..ac527c67e1d224 100644
--- a/packages/expo-image-picker/build/ImagePicker.types.js.map
+++ b/packages/expo-image-picker/build/ImagePicker.types.js.map
@@ -1 +1 @@
-{"version":3,"file":"ImagePicker.types.js","sourceRoot":"","sources":["../src/ImagePicker.types.ts"],"names":[],"mappings":"AAsBA,cAAc;AACd;;GAEG;AACH,MAAM,CAAN,IAAY,gBAaX;AAbD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,+BAAW,CAAA;IACX;;OAEG;IACH,qCAAiB,CAAA;IACjB;;OAEG;IACH,qCAAiB,CAAA;AACnB,CAAC,EAbW,gBAAgB,KAAhB,gBAAgB,QAa3B;AA0BD,cAAc;AACd,MAAM,CAAN,IAAY,iBAmEX;AAnED,WAAY,iBAAiB;IAC3B;;;;OAIG;IACH,uEAAe,CAAA;IACf;;;;OAIG;IACH,qEAAc,CAAA;IACd;;;;OAIG;IACH,2EAAiB,CAAA;IACjB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,yEAAgB,CAAA;IAChB;;;;OAIG;IACH,yEAAgB,CAAA;IAChB;;;;OAIG;IACH,2EAAiB,CAAA;IACjB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,8EAAmB,CAAA;AACrB,CAAC,EAnEW,iBAAiB,KAAjB,iBAAiB,QAmE5B;AAED,cAAc;AACd,MAAM,CAAN,IAAY,kCAyBX;AAzBD,WAAY,kCAAkC;IAC5C;;OAEG;IACH,2FAAQ,CAAA;IACR;;OAEG;IACH,+FAAU,CAAA;IACV;;OAEG;IACH,yFAAO,CAAA;IACP;;OAEG;IACH,uGAAc,CAAA;IACd;;OAEG;IACH,+GAAkB,CAAA;IAClB;;OAEG;IACH,6GAAiB,CAAA;AACnB,CAAC,EAzBW,kCAAkC,KAAlC,kCAAkC,QAyB7C;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,8BAoCX;AApCD,WAAY,8BAA8B;IACxC;;OAEG;IACH,4DAA0B,CAAA;IAC1B;;OAEG;IACH,0DAAwB,CAAA;IACxB;;OAEG;IACH,0DAAwB,CAAA;IACxB;;OAEG;IACH,oEAAkC,CAAA;IAClC;;OAEG;IACH,qEAAmC,CAAA;IACnC;;OAEG;IACH,6EAA2C,CAAA;IAC3C;;OAEG;IACH,qDAAmB,CAAA;IACnB;;;;;OAKG;IACH,yDAAuB,CAAA;AACzB,CAAC,EApCW,8BAA8B,KAA9B,8BAA8B,QAoCzC;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,6CAaX;AAbD,WAAY,6CAA6C;IACvD;;OAEG;IACH,wEAAuB,CAAA;IACvB;;OAEG;IACH,0EAAyB,CAAA;IACzB;;OAEG;IACH,oEAAmB,CAAA;AACrB,CAAC,EAbW,6CAA6C,KAA7C,6CAA6C,QAaxD;AAED,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IACpB;;OAEG;IACH,2BAAa,CAAA;IACb;;OAEG;IACH,6BAAe,CAAA;AACjB,CAAC,EATW,UAAU,KAAV,UAAU,QASrB","sourcesContent":["import { PermissionResponse } from 'expo-modules-core';\n\n// @needsAudit\n/**\n * Alias for `PermissionResponse` type exported by `expo-modules-core`.\n */\nexport type CameraPermissionResponse = PermissionResponse;\n\n// @needsAudit\n/**\n * Extends `PermissionResponse` type exported by `expo-modules-core`, containing additional iOS-specific field.\n */\nexport type MediaLibraryPermissionResponse = PermissionResponse & {\n  /**\n   * Indicates if your app has access to the whole or only part of the photo library. Possible values are:\n   * - `'all'` if the user granted your app access to the whole photo library\n   * - `'limited'` if the user granted your app access only to selected photos (only available on Android API 34+ and iOS 14.0+)\n   * - `'none'` if user denied or hasn't yet granted the permission\n   */\n  accessPrivileges?: 'all' | 'limited' | 'none';\n};\n\n// @needsAudit\n/**\n * @deprecated To set media types available in the image picker use an array of [`MediaType`](#mediatype) instead.\n */\nexport enum MediaTypeOptions {\n  /**\n   * Images and videos.\n   */\n  All = 'All',\n  /**\n   * Only videos.\n   */\n  Videos = 'Videos',\n  /**\n   * Only images.\n   */\n  Images = 'Images',\n}\n\n/**\n * Media types that can be picked by the image picker.\n * - `'images'` - for images.\n * - `'videos'` - for videos.\n * - `'livePhotos'` - for live photos (iOS only).\n *\n * > When the `livePhotos` type is added to the media types array and a live photo is selected,\n * > the resulting `ImagePickerAsset` will contain an unaltered image and the `pairedVideoAsset` field will contain a\n * > video asset paired with the image. This option will be ignored when the `allowsEditing` option is enabled. Due\n * > to platform limitations live photos are returned at original quality, regardless of the `quality` option.\n *\n * > When on Android or Web `livePhotos` type passed as a media type will be ignored.\n */\nexport type MediaType = 'images' | 'videos' | 'livePhotos';\n\n/**\n * The default tab with which the image picker will be opened.\n * - `'photos'` - the photos/videos tab will be opened.\n * - `'albums'` - the albums tab will be opened.\n *\n * @platform android\n */\nexport type DefaultTab = 'photos' | 'albums';\n\n// @needsAudit\nexport enum VideoExportPreset {\n  /**\n   * Resolution: __Unchanged__ •\n   * Video compression: __None__ •\n   * Audio compression: __None__\n   */\n  Passthrough = 0,\n  /**\n   * Resolution: __Depends on the device__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  LowQuality = 1,\n  /**\n   * Resolution: __Depends on the device__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  MediumQuality = 2,\n  /**\n   * Resolution: __Depends on the device__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  HighestQuality = 3,\n  /**\n   * Resolution: __640 × 480__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_640x480 = 4,\n  /**\n   * Resolution: __960 × 540__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_960x540 = 5,\n  /**\n   * Resolution: __1280 × 720__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_1280x720 = 6,\n  /**\n   * Resolution: __1920 × 1080__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_1920x1080 = 7,\n  /**\n   * Resolution: __3840 × 2160__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_3840x2160 = 8,\n  /**\n   * Resolution: __1920 × 1080__ •\n   * Video compression: __HEVC__ •\n   * Audio compression: __AAC__\n   */\n  HEVC_1920x1080 = 9,\n  /**\n   * Resolution: __3840 × 2160__ •\n   * Video compression: __HEVC__ •\n   * Audio compression: __AAC__\n   */\n  HEVC_3840x2160 = 10,\n}\n\n// @needsAudit\nexport enum UIImagePickerControllerQualityType {\n  /**\n   * Highest available resolution.\n   */\n  High = 0,\n  /**\n   * Depends on the device.\n   */\n  Medium = 1,\n  /**\n   * Depends on the device.\n   */\n  Low = 2,\n  /**\n   * 640 × 480\n   */\n  VGA640x480 = 3,\n  /**\n   * 1280 × 720\n   */\n  IFrame1280x720 = 4,\n  /**\n   * 960 × 540\n   */\n  IFrame960x540 = 5,\n}\n\n/**\n * Picker presentation style. Its values are directly mapped to the [`UIModalPresentationStyle`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle).\n *\n * @platform ios\n */\nexport enum UIImagePickerPresentationStyle {\n  /**\n   * A presentation style in which the presented picker covers the screen.\n   */\n  FULL_SCREEN = 'fullScreen',\n  /**\n   * A presentation style that partially covers the underlying content.\n   */\n  PAGE_SHEET = 'pageSheet',\n  /**\n   * A presentation style that displays the picker centered in the screen.\n   */\n  FORM_SHEET = 'formSheet',\n  /**\n   * A presentation style where the picker is displayed over the app's content.\n   */\n  CURRENT_CONTEXT = 'currentContext',\n  /**\n   * A presentation style in which the picker view covers the screen.\n   */\n  OVER_FULL_SCREEN = 'overFullScreen',\n  /**\n   * A presentation style where the picker is displayed over the app's content.\n   */\n  OVER_CURRENT_CONTEXT = 'overCurrentContext',\n  /**\n   * A presentation style where the picker is displayed in a popover view.\n   */\n  POPOVER = 'popover',\n  /**\n   * The default presentation style chosen by the system.\n   * On older iOS versions, falls back to `WebBrowserPresentationStyle.FullScreen`.\n   *\n   * @platform ios\n   */\n  AUTOMATIC = 'automatic',\n}\n\n/**\n * Picker preferred asset representation mode. Its values are directly mapped to the [`PHPickerConfigurationAssetRepresentationMode`](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode).\n *\n * @platform ios\n */\nexport enum UIImagePickerPreferredAssetRepresentationMode {\n  /**\n   * A mode that indicates that the system chooses the appropriate asset representation.\n   */\n  Automatic = 'automatic',\n  /**\n   * A mode that uses the most compatible asset representation.\n   */\n  Compatible = 'compatible',\n  /**\n   * A mode that uses the current representation to avoid transcoding, if possible.\n   */\n  Current = 'current',\n}\n\nexport enum CameraType {\n  /**\n   * Back/rear camera.\n   */\n  back = 'back',\n  /**\n   * Front camera\n   */\n  front = 'front',\n}\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerAsset` instead\n */\nexport type ImageInfo = ImagePickerAsset;\n\n/**\n * Represents an asset (image or video) returned by the image picker or camera.\n */\nexport type ImagePickerAsset = {\n  /**\n   * URI to the local image or video file (usable as the source of an `Image` element, in the case of\n   * an image) and `width` and `height` specify the dimensions of the media.\n   */\n  uri: string;\n  /**\n   * The unique ID that represents the picked image or video, if picked from the library. It can be used\n   * by [expo-media-library](./media-library) to manage the picked asset.\n   *\n   * > This might be `null` when the ID is unavailable or the user gave limited permission to access the media library.\n   * > On Android, the ID is unavailable when the user selects a photo by directly browsing file system.\n   *\n   * @platform android\n   * @platform ios\n   */\n  assetId?: string | null;\n  /**\n   * Width of the image or video.\n   */\n  width: number;\n  /**\n   * Height of the image or video.\n   */\n  height: number;\n  /**\n   * The type of the asset.\n   * - `'image'` - for images.\n   * - `'video'` - for videos.\n   * - `'livePhoto'` - for live photos. (iOS only)\n   * - `'pairedVideo'` - for videos paired with photos, which can be combined to create a live photo. (iOS only)\n   */\n  type?: 'image' | 'video' | 'livePhoto' | 'pairedVideo';\n  /**\n   * Preferred filename to use when saving this item. This might be `null` when the name is unavailable\n   * or user gave limited permission to access the media library.\n   *\n   */\n  fileName?: string | null;\n  /**\n   * File size of the picked image or video, in bytes.\n   *\n   */\n  fileSize?: number;\n  /**\n   * The `exif` field is included if the `exif` option is truthy, and is an object containing the\n   * image's EXIF data. The names of this object's properties are EXIF tags and the values are the\n   * respective EXIF values for those tags.\n   *\n   * @platform android\n   * @platform ios\n   */\n  exif?: Record<string, any> | null;\n  /**\n   * When the `base64` option is truthy, it is a Base64-encoded string of the selected image's JPEG data, otherwise `null`.\n   * If you prepend this with `'data:image/jpeg;base64,'` to create a data URI,\n   * you can use it as the source of an `Image` element; for example:\n   * ```ts\n   * <Image\n   *   source={{ uri: 'data:image/jpeg;base64,' + asset.base64 }}\n   *   style={{ width: 200, height: 200 }}\n   * />\n   * ```\n   */\n  base64?: string | null;\n  /**\n   * Length of the video in milliseconds or `null` if the asset is not a video.\n   */\n  duration?: number | null;\n  /**\n   * The MIME type of the selected asset or `null` if could not be determined.\n   */\n  mimeType?: string;\n  /**\n   * Contains information about the video paired with the image file. This property is only set when `livePhotos` media type was present in the `mediaTypes` array when launching the picker and a live photo was selected.\n   *\n   * @platform ios\n   */\n  pairedVideoAsset?: ImagePickerAsset | null;\n\n  /**\n   * The web `File` object containing the selected media. This property is web-only and can be used to upload to a server with `FormData`.\n   *\n   * @platform web\n   */\n  file?: File;\n};\n\n// @needsAudit\nexport type ImagePickerErrorResult = {\n  /**\n   * The error code.\n   */\n  code: string;\n  /**\n   * The error message.\n   */\n  message: string;\n  /**\n   * The exception which caused the error.\n   */\n  exception?: string;\n};\n\n// @needsAudit\n/**\n * Type representing successful and canceled pick result.\n */\nexport type ImagePickerResult = ImagePickerSuccessResult | ImagePickerCanceledResult;\n\n/**\n * Type representing successful pick result.\n */\nexport type ImagePickerSuccessResult = {\n  /**\n   * Boolean flag set to `false` showing that the request was successful.\n   */\n  canceled: false;\n  /**\n   * An array of picked assets.\n   */\n  assets: ImagePickerAsset[];\n};\n\n/**\n * Type representing canceled pick result.\n */\nexport type ImagePickerCanceledResult = {\n  /**\n   * Boolean flag set to `true` showing that the request was canceled.\n   */\n  canceled: true;\n  /**\n   * `null` signifying that the request was canceled.\n   */\n  assets: null;\n};\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerResult` instead.\n */\nexport type ImagePickerCancelledResult = ImagePickerCanceledResult;\n\n/**\n * @hidden\n * @deprecated `ImagePickerMultipleResult` has been deprecated in favor of `ImagePickerResult`.\n */\nexport type ImagePickerMultipleResult = ImagePickerResult;\n\n// @needsAudit\nexport type ImagePickerOptions = {\n  /**\n   * Whether to show a UI to edit the image after it is picked. On Android the user can crop and\n   * rotate the image and on iOS simply crop it.\n   *\n   * > - Cropping multiple images is not supported - this option is mutually exclusive with `allowsMultipleSelection`.\n   * > - On iOS, this option is ignored if `allowsMultipleSelection` is enabled.\n   * > - On iOS cropping a `.bmp` image will convert it to `.png`.\n   *\n   * @default false\n   * @platform android\n   * @platform ios\n   */\n  allowsEditing?: boolean;\n  /**\n   * An array with two entries `[x, y]` specifying the aspect ratio to maintain if the user is\n   * allowed to edit the image (by passing `allowsEditing: true`). This is only applicable on\n   * Android, since on iOS the crop rectangle is always a square.\n   */\n  aspect?: [number, number];\n  /**\n   * Specify the quality of compression, from `0` to `1`. `0` means compress for small size,\n   * `1` means compress for maximum quality.\n   * > Note: If the selected image has been compressed before, the size of the output file may be\n   * > bigger than the size of the original image.\n   *\n   * > Note: On iOS, if a `.bmp` or `.png` image is selected from the library, this option is ignored.\n   *\n   * @default 1.0\n   * @platform android\n   * @platform ios\n   */\n  quality?: number;\n  /**\n   * Choose what type of media to pick.\n   * @default 'images'\n   */\n  mediaTypes?: MediaType | MediaType[] | MediaTypeOptions;\n  /**\n   * Whether to also include the EXIF data for the image. On iOS the EXIF data does not include GPS\n   * tags in the camera case.\n   *\n   * @platform android\n   * @platform ios\n   */\n  exif?: boolean;\n  /**\n   * Whether to also include the image data in Base64 format.\n   */\n  base64?: boolean;\n  /**\n   * Specify preset which will be used to compress selected video.\n   * @default ImagePicker.VideoExportPreset.Passthrough\n   * @platform ios 11+\n   * @deprecated See [`videoExportPreset`](https://developer.apple.com/documentation/uikit/uiimagepickercontroller/2890964-videoexportpreset?language=objc)\n   * in Apple documentation.\n   */\n  videoExportPreset?: VideoExportPreset;\n  /**\n   * Specify the quality of recorded videos. Defaults to the highest quality available for the device.\n   * @default ImagePicker.UIImagePickerControllerQualityType.High\n   * @platform ios\n   */\n  videoQuality?: UIImagePickerControllerQualityType;\n  /**\n   * Whether or not to allow selecting multiple media files at once.\n   *\n   * > Cropping multiple images is not supported - this option is mutually exclusive with `allowsEditing`.\n   * > If this option is enabled, then `allowsEditing` is ignored.\n   *\n   * @default false\n   * @platform android\n   * @platform ios 14+\n   * @platform web\n   */\n  allowsMultipleSelection?: boolean;\n  /**\n   * The maximum number of items that user can select. Applicable when `allowsMultipleSelection` is enabled.\n   * Setting the value to `0` sets the selection limit to the maximum that the system supports.\n   *\n   * @platform android\n   * @platform ios 14+\n   * @default 0\n   */\n  selectionLimit?: number;\n  /**\n   * Whether to display number badges when assets are selected. The badges are numbered\n   * in selection order. Assets are then returned in the exact same order they were selected.\n   *\n   * > Assets should be returned in the selection order regardless of this option,\n   * > but there is no guarantee that it is always true when this option is disabled.\n   *\n   * @platform ios 15+\n   * @default false\n   */\n  orderedSelection?: boolean;\n  /**\n   * Choose the default tab with which the image picker will be opened.\n   * @default 'photos'\n   * @platform android\n   */\n  defaultTab?: DefaultTab;\n  /**\n   * Maximum duration, in seconds, for video recording. Setting this to `0` disables the limit.\n   * Defaults to `0` (no limit).\n   * - **On iOS**, when `allowsEditing` is set to `true`, maximum duration is limited to 10 minutes.\n   *   This limit is applied automatically, if `0` or no value is specified.\n   * - **On Android**, effect of this option depends on support of installed camera app.\n   * - **On Web** this option has no effect - the limit is browser-dependant.\n   */\n  videoMaxDuration?: number;\n  /**\n   * Choose [presentation style](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle?language=objc)\n   * to customize view during taking photo/video.\n   * @default ImagePicker.UIImagePickerPresentationStyle.Automatic\n   * @platform ios\n   */\n  presentationStyle?: UIImagePickerPresentationStyle;\n  /**\n   * Selects the camera-facing type. The `CameraType` enum provides two options:\n   * `front` for the front-facing camera and `back` for the back-facing camera.\n   * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.\n   * @default CameraType.back\n   * @platform android\n   * @platform ios\n   */\n  cameraType?: CameraType;\n  /**\n   * Choose [preferred asset representation mode](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)\n   * to use when loading assets.\n   * @default ImagePicker.UIImagePickerPreferredAssetRepresentationMode.Automatic\n   * @platform ios 14+\n   */\n  preferredAssetRepresentationMode?: UIImagePickerPreferredAssetRepresentationMode;\n  /**\n   * Uses the legacy image picker on Android. This will allow media to be selected from outside the users photo library.\n   * @platform android\n   * @default false\n   */\n  legacy?: boolean;\n};\n\n// @needsAudit\nexport type OpenFileBrowserOptions = {\n  /**\n   * Choose what type of media to pick.\n   * @default 'images'\n   */\n  mediaTypes: MediaType | MediaType[] | MediaTypeOptions;\n  // @docsMissing\n  capture?: boolean;\n  /**\n   * Whether or not to allow selecting multiple media files at once.\n   * @platform web\n   */\n  allowsMultipleSelection: boolean;\n  /**\n   * Whether to also include the image data in Base64 format.\n   */\n  base64: boolean;\n};\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerResult` or `OpenFileBrowserOptions` instead.\n */\nexport type ExpandImagePickerResult<T extends ImagePickerOptions | OpenFileBrowserOptions> =\n  T extends {\n    allowsMultipleSelection: true;\n  }\n    ? ImagePickerResult\n    : ImagePickerResult;\n"]}
\ No newline at end of file
+{"version":3,"file":"ImagePicker.types.js","sourceRoot":"","sources":["../src/ImagePicker.types.ts"],"names":[],"mappings":"AAsBA,cAAc;AACd;;GAEG;AACH,MAAM,CAAN,IAAY,gBAaX;AAbD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,+BAAW,CAAA;IACX;;OAEG;IACH,qCAAiB,CAAA;IACjB;;OAEG;IACH,qCAAiB,CAAA;AACnB,CAAC,EAbW,gBAAgB,KAAhB,gBAAgB,QAa3B;AA0BD,cAAc;AACd,MAAM,CAAN,IAAY,iBAmEX;AAnED,WAAY,iBAAiB;IAC3B;;;;OAIG;IACH,uEAAe,CAAA;IACf;;;;OAIG;IACH,qEAAc,CAAA;IACd;;;;OAIG;IACH,2EAAiB,CAAA;IACjB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,yEAAgB,CAAA;IAChB;;;;OAIG;IACH,yEAAgB,CAAA;IAChB;;;;OAIG;IACH,2EAAiB,CAAA;IACjB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,6EAAkB,CAAA;IAClB;;;;OAIG;IACH,8EAAmB,CAAA;AACrB,CAAC,EAnEW,iBAAiB,KAAjB,iBAAiB,QAmE5B;AAED,cAAc;AACd,MAAM,CAAN,IAAY,kCAyBX;AAzBD,WAAY,kCAAkC;IAC5C;;OAEG;IACH,2FAAQ,CAAA;IACR;;OAEG;IACH,+FAAU,CAAA;IACV;;OAEG;IACH,yFAAO,CAAA;IACP;;OAEG;IACH,uGAAc,CAAA;IACd;;OAEG;IACH,+GAAkB,CAAA;IAClB;;OAEG;IACH,6GAAiB,CAAA;AACnB,CAAC,EAzBW,kCAAkC,KAAlC,kCAAkC,QAyB7C;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,8BAoCX;AApCD,WAAY,8BAA8B;IACxC;;OAEG;IACH,4DAA0B,CAAA;IAC1B;;OAEG;IACH,0DAAwB,CAAA;IACxB;;OAEG;IACH,0DAAwB,CAAA;IACxB;;OAEG;IACH,oEAAkC,CAAA;IAClC;;OAEG;IACH,qEAAmC,CAAA;IACnC;;OAEG;IACH,6EAA2C,CAAA;IAC3C;;OAEG;IACH,qDAAmB,CAAA;IACnB;;;;;OAKG;IACH,yDAAuB,CAAA;AACzB,CAAC,EApCW,8BAA8B,KAA9B,8BAA8B,QAoCzC;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,6CAaX;AAbD,WAAY,6CAA6C;IACvD;;OAEG;IACH,wEAAuB,CAAA;IACvB;;OAEG;IACH,0EAAyB,CAAA;IACzB;;OAEG;IACH,oEAAmB,CAAA;AACrB,CAAC,EAbW,6CAA6C,KAA7C,6CAA6C,QAaxD;AAED,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IACpB;;OAEG;IACH,2BAAa,CAAA;IACb;;OAEG;IACH,6BAAe,CAAA;AACjB,CAAC,EATW,UAAU,KAAV,UAAU,QASrB","sourcesContent":["import { PermissionResponse } from 'expo-modules-core';\n\n// @needsAudit\n/**\n * Alias for `PermissionResponse` type exported by `expo-modules-core`.\n */\nexport type CameraPermissionResponse = PermissionResponse;\n\n// @needsAudit\n/**\n * Extends `PermissionResponse` type exported by `expo-modules-core`, containing additional iOS-specific field.\n */\nexport type MediaLibraryPermissionResponse = PermissionResponse & {\n  /**\n   * Indicates if your app has access to the whole or only part of the photo library. Possible values are:\n   * - `'all'` if the user granted your app access to the whole photo library\n   * - `'limited'` if the user granted your app access only to selected photos (only available on Android API 34+ and iOS 14.0+)\n   * - `'none'` if user denied or hasn't yet granted the permission\n   */\n  accessPrivileges?: 'all' | 'limited' | 'none';\n};\n\n// @needsAudit\n/**\n * @deprecated To set media types available in the image picker use an array of [`MediaType`](#mediatype) instead.\n */\nexport enum MediaTypeOptions {\n  /**\n   * Images and videos.\n   */\n  All = 'All',\n  /**\n   * Only videos.\n   */\n  Videos = 'Videos',\n  /**\n   * Only images.\n   */\n  Images = 'Images',\n}\n\n/**\n * Media types that can be picked by the image picker.\n * - `'images'` - for images.\n * - `'videos'` - for videos.\n * - `'livePhotos'` - for live photos (iOS only).\n *\n * > When the `livePhotos` type is added to the media types array and a live photo is selected,\n * > the resulting `ImagePickerAsset` will contain an unaltered image and the `pairedVideoAsset` field will contain a\n * > video asset paired with the image. This option will be ignored when the `allowsEditing` option is enabled. Due\n * > to platform limitations live photos are returned at original quality, regardless of the `quality` option.\n *\n * > When on Android or Web `livePhotos` type passed as a media type will be ignored.\n */\nexport type MediaType = 'images' | 'videos' | 'livePhotos';\n\n/**\n * The default tab with which the image picker will be opened.\n * - `'photos'` - the photos/videos tab will be opened.\n * - `'albums'` - the albums tab will be opened.\n *\n * @platform android\n */\nexport type DefaultTab = 'photos' | 'albums';\n\n// @needsAudit\nexport enum VideoExportPreset {\n  /**\n   * Resolution: __Unchanged__ •\n   * Video compression: __None__ •\n   * Audio compression: __None__\n   */\n  Passthrough = 0,\n  /**\n   * Resolution: __Depends on the device__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  LowQuality = 1,\n  /**\n   * Resolution: __Depends on the device__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  MediumQuality = 2,\n  /**\n   * Resolution: __Depends on the device__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  HighestQuality = 3,\n  /**\n   * Resolution: __640 × 480__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_640x480 = 4,\n  /**\n   * Resolution: __960 × 540__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_960x540 = 5,\n  /**\n   * Resolution: __1280 × 720__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_1280x720 = 6,\n  /**\n   * Resolution: __1920 × 1080__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_1920x1080 = 7,\n  /**\n   * Resolution: __3840 × 2160__ •\n   * Video compression: __H.264__ •\n   * Audio compression: __AAC__\n   */\n  H264_3840x2160 = 8,\n  /**\n   * Resolution: __1920 × 1080__ •\n   * Video compression: __HEVC__ •\n   * Audio compression: __AAC__\n   */\n  HEVC_1920x1080 = 9,\n  /**\n   * Resolution: __3840 × 2160__ •\n   * Video compression: __HEVC__ •\n   * Audio compression: __AAC__\n   */\n  HEVC_3840x2160 = 10,\n}\n\n// @needsAudit\nexport enum UIImagePickerControllerQualityType {\n  /**\n   * Highest available resolution.\n   */\n  High = 0,\n  /**\n   * Depends on the device.\n   */\n  Medium = 1,\n  /**\n   * Depends on the device.\n   */\n  Low = 2,\n  /**\n   * 640 × 480\n   */\n  VGA640x480 = 3,\n  /**\n   * 1280 × 720\n   */\n  IFrame1280x720 = 4,\n  /**\n   * 960 × 540\n   */\n  IFrame960x540 = 5,\n}\n\n/**\n * Picker presentation style. Its values are directly mapped to the [`UIModalPresentationStyle`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle).\n *\n * @platform ios\n */\nexport enum UIImagePickerPresentationStyle {\n  /**\n   * A presentation style in which the presented picker covers the screen.\n   */\n  FULL_SCREEN = 'fullScreen',\n  /**\n   * A presentation style that partially covers the underlying content.\n   */\n  PAGE_SHEET = 'pageSheet',\n  /**\n   * A presentation style that displays the picker centered in the screen.\n   */\n  FORM_SHEET = 'formSheet',\n  /**\n   * A presentation style where the picker is displayed over the app's content.\n   */\n  CURRENT_CONTEXT = 'currentContext',\n  /**\n   * A presentation style in which the picker view covers the screen.\n   */\n  OVER_FULL_SCREEN = 'overFullScreen',\n  /**\n   * A presentation style where the picker is displayed over the app's content.\n   */\n  OVER_CURRENT_CONTEXT = 'overCurrentContext',\n  /**\n   * A presentation style where the picker is displayed in a popover view.\n   */\n  POPOVER = 'popover',\n  /**\n   * The default presentation style chosen by the system.\n   * On older iOS versions, falls back to `WebBrowserPresentationStyle.FullScreen`.\n   *\n   * @platform ios\n   */\n  AUTOMATIC = 'automatic',\n}\n\n/**\n * Picker preferred asset representation mode. Its values are directly mapped to the [`PHPickerConfigurationAssetRepresentationMode`](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode).\n *\n * @platform ios\n */\nexport enum UIImagePickerPreferredAssetRepresentationMode {\n  /**\n   * A mode that indicates that the system chooses the appropriate asset representation.\n   */\n  Automatic = 'automatic',\n  /**\n   * A mode that uses the most compatible asset representation.\n   */\n  Compatible = 'compatible',\n  /**\n   * A mode that uses the current representation to avoid transcoding, if possible.\n   */\n  Current = 'current',\n}\n\nexport enum CameraType {\n  /**\n   * Back/rear camera.\n   */\n  back = 'back',\n  /**\n   * Front camera\n   */\n  front = 'front',\n}\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerAsset` instead\n */\nexport type ImageInfo = ImagePickerAsset;\n\n/**\n * Represents an asset (image or video) returned by the image picker or camera.\n */\nexport type ImagePickerAsset = {\n  /**\n   * URI to the local image or video file (usable as the source of an `Image` element, in the case of\n   * an image) and `width` and `height` specify the dimensions of the media.\n   */\n  uri: string;\n  /**\n   * The unique ID that represents the picked image or video, if picked from the library. It can be used\n   * by [expo-media-library](./media-library) to manage the picked asset.\n   *\n   * > This might be `null` when the ID is unavailable or the user gave limited permission to access the media library.\n   * > On Android, the ID is unavailable when the user selects a photo by directly browsing file system.\n   *\n   * @platform android\n   * @platform ios\n   */\n  assetId?: string | null;\n  /**\n   * Width of the image or video.\n   */\n  width: number;\n  /**\n   * Height of the image or video.\n   */\n  height: number;\n  /**\n   * The type of the asset.\n   * - `'image'` - for images.\n   * - `'video'` - for videos.\n   * - `'livePhoto'` - for live photos. (iOS only)\n   * - `'pairedVideo'` - for videos paired with photos, which can be combined to create a live photo. (iOS only)\n   */\n  type?: 'image' | 'video' | 'livePhoto' | 'pairedVideo';\n  /**\n   * Preferred filename to use when saving this item. This might be `null` when the name is unavailable\n   * or user gave limited permission to access the media library.\n   *\n   */\n  fileName?: string | null;\n  /**\n   * File size of the picked image or video, in bytes.\n   *\n   */\n  fileSize?: number;\n  /**\n   * The `exif` field is included if the `exif` option is truthy, and is an object containing the\n   * image's EXIF data. The names of this object's properties are EXIF tags and the values are the\n   * respective EXIF values for those tags.\n   *\n   * @platform android\n   * @platform ios\n   */\n  exif?: Record<string, any> | null;\n  /**\n   * When the `base64` option is truthy, it is a Base64-encoded string of the selected image's JPEG data, otherwise `null`.\n   * If you prepend this with `'data:image/jpeg;base64,'` to create a data URI,\n   * you can use it as the source of an `Image` element; for example:\n   * ```ts\n   * <Image\n   *   source={{ uri: 'data:image/jpeg;base64,' + asset.base64 }}\n   *   style={{ width: 200, height: 200 }}\n   * />\n   * ```\n   */\n  base64?: string | null;\n  /**\n   * Length of the video in milliseconds or `null` if the asset is not a video.\n   */\n  duration?: number | null;\n  /**\n   * The MIME type of the selected asset or `null` if could not be determined.\n   */\n  mimeType?: string;\n  /**\n   * Contains information about the video paired with the image file. This property is only set when `livePhotos` media type was present in the `mediaTypes` array when launching the picker and a live photo was selected.\n   *\n   * @platform ios\n   */\n  pairedVideoAsset?: ImagePickerAsset | null;\n\n  /**\n   * The web `File` object containing the selected media. This property is web-only and can be used to upload to a server with `FormData`.\n   *\n   * @platform web\n   */\n  file?: File;\n};\n\n// @needsAudit\nexport type ImagePickerErrorResult = {\n  /**\n   * The error code.\n   */\n  code: string;\n  /**\n   * The error message.\n   */\n  message: string;\n  /**\n   * The exception which caused the error.\n   */\n  exception?: string;\n};\n\n// @needsAudit\n/**\n * Type representing successful and canceled pick result.\n */\nexport type ImagePickerResult = ImagePickerSuccessResult | ImagePickerCanceledResult;\n\n/**\n * Type representing successful pick result.\n */\nexport type ImagePickerSuccessResult = {\n  /**\n   * Boolean flag set to `false` showing that the request was successful.\n   */\n  canceled: false;\n  /**\n   * An array of picked assets.\n   */\n  assets: ImagePickerAsset[];\n};\n\n/**\n * Type representing canceled pick result.\n */\nexport type ImagePickerCanceledResult = {\n  /**\n   * Boolean flag set to `true` showing that the request was canceled.\n   */\n  canceled: true;\n  /**\n   * `null` signifying that the request was canceled.\n   */\n  assets: null;\n};\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerResult` instead.\n */\nexport type ImagePickerCancelledResult = ImagePickerCanceledResult;\n\n/**\n * @hidden\n * @deprecated `ImagePickerMultipleResult` has been deprecated in favor of `ImagePickerResult`.\n */\nexport type ImagePickerMultipleResult = ImagePickerResult;\n\n// @needsAudit\nexport type ImagePickerOptions = {\n  /**\n   * Whether to show a UI to edit the image after it is picked. On Android the user can crop and\n   * rotate the image and on iOS simply crop it.\n   *\n   * > - Cropping multiple images is not supported - this option is mutually exclusive with `allowsMultipleSelection`.\n   * > - On iOS, this option is ignored if `allowsMultipleSelection` is enabled.\n   * > - On iOS cropping a `.bmp` image will convert it to `.png`.\n   *\n   * @default false\n   * @platform android\n   * @platform ios\n   */\n  allowsEditing?: boolean;\n  /**\n   * An array with two entries `[x, y]` specifying the aspect ratio to maintain if the user is\n   * allowed to edit the image (by passing `allowsEditing: true`). This is only applicable on\n   * Android, since on iOS the crop rectangle is always a square.\n   */\n  aspect?: [number, number];\n  /**\n   * Specify the quality of compression, from `0` to `1`. `0` means compress for small size,\n   * `1` means compress for maximum quality.\n   * > Note: If the selected image has been compressed before, the size of the output file may be\n   * > bigger than the size of the original image.\n   *\n   * > Note: On iOS, if a `.bmp` or `.png` image is selected from the library, this option is ignored.\n   *\n   * @default 1.0\n   * @platform android\n   * @platform ios\n   */\n  quality?: number;\n  /**\n   * Choose what type of media to pick.\n   * @default 'images'\n   */\n  mediaTypes?: MediaType | MediaType[] | MediaTypeOptions;\n  /**\n   * Whether to also include the EXIF data for the image. On iOS the EXIF data does not include GPS\n   * tags in the camera case.\n   *\n   * @platform android\n   * @platform ios\n   */\n  exif?: boolean;\n  /**\n   * Whether to also include the image data in Base64 format.\n   */\n  base64?: boolean;\n  /**\n   * Specify preset which will be used to compress selected video.\n   * @default ImagePicker.VideoExportPreset.Passthrough\n   * @platform ios 11+\n   * @deprecated See [`videoExportPreset`](https://developer.apple.com/documentation/uikit/uiimagepickercontroller/2890964-videoexportpreset?language=objc)\n   * in Apple documentation.\n   */\n  videoExportPreset?: VideoExportPreset;\n  /**\n   * Specify the quality of recorded videos. Defaults to the highest quality available for the device.\n   * @default ImagePicker.UIImagePickerControllerQualityType.High\n   * @platform ios\n   */\n  videoQuality?: UIImagePickerControllerQualityType;\n  /**\n   * Whether or not to allow selecting multiple media files at once.\n   *\n   * > Cropping multiple images is not supported - this option is mutually exclusive with `allowsEditing`.\n   * > If this option is enabled, then `allowsEditing` is ignored.\n   *\n   * @default false\n   * @platform android\n   * @platform ios 14+\n   * @platform web\n   */\n  allowsMultipleSelection?: boolean;\n  /**\n   * The maximum number of items that user can select. Applicable when `allowsMultipleSelection` is enabled.\n   * Setting the value to `0` sets the selection limit to the maximum that the system supports.\n   *\n   * @platform android\n   * @platform ios 14+\n   * @default 0\n   */\n  selectionLimit?: number;\n  /**\n   * Whether to display number badges when assets are selected. The badges are numbered\n   * in selection order. Assets are then returned in the exact same order they were selected.\n   *\n   * > Assets should be returned in the selection order regardless of this option,\n   * > but there is no guarantee that it is always true when this option is disabled.\n   *\n   * @platform ios 15+\n   * @default false\n   */\n  orderedSelection?: boolean;\n  /**\n   * Choose the default tab with which the image picker will be opened.\n   * @default 'photos'\n   * @platform android\n   */\n  defaultTab?: DefaultTab;\n  /**\n   * Maximum duration, in seconds, for video recording. Setting this to `0` disables the limit.\n   * Defaults to `0` (no limit).\n   * - **On iOS**, when `allowsEditing` is set to `true`, maximum duration is limited to 10 minutes.\n   *   This limit is applied automatically, if `0` or no value is specified.\n   * - **On Android**, effect of this option depends on support of installed camera app.\n   * - **On Web** this option has no effect - the limit is browser-dependant.\n   */\n  videoMaxDuration?: number;\n  /**\n   * Choose [presentation style](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle?language=objc)\n   * to customize view during taking photo/video.\n   * @default ImagePicker.UIImagePickerPresentationStyle.Automatic\n   * @platform ios\n   */\n  presentationStyle?: UIImagePickerPresentationStyle;\n  /**\n   * Selects the camera-facing type. The `CameraType` enum provides two options:\n   * `front` for the front-facing camera and `back` for the back-facing camera.\n   * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.\n   * - **On Web**, if this option is not provided, use \"camera\" as the default value of internal input element for backwards compatibility.\n   * @default CameraType.back\n   */\n  cameraType?: CameraType;\n  /**\n   * Choose [preferred asset representation mode](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)\n   * to use when loading assets.\n   * @default ImagePicker.UIImagePickerPreferredAssetRepresentationMode.Automatic\n   * @platform ios 14+\n   */\n  preferredAssetRepresentationMode?: UIImagePickerPreferredAssetRepresentationMode;\n  /**\n   * Uses the legacy image picker on Android. This will allow media to be selected from outside the users photo library.\n   * @platform android\n   * @default false\n   */\n  legacy?: boolean;\n};\n\n/**\n * @hidden\n * @deprecated Only used internally.\n */\nexport type OpenFileBrowserOptions = {\n  /**\n   * Choose what type of media to pick.\n   * @default 'images'\n   */\n  mediaTypes: MediaType | MediaType[] | MediaTypeOptions;\n  // @docsMissing\n  capture?: boolean | CameraType;\n  /**\n   * Whether or not to allow selecting multiple media files at once.\n   * @platform web\n   */\n  allowsMultipleSelection: boolean;\n  /**\n   * Whether to also include the image data in Base64 format.\n   */\n  base64: boolean;\n};\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerResult` or `OpenFileBrowserOptions` instead.\n */\nexport type ExpandImagePickerResult<T extends ImagePickerOptions | OpenFileBrowserOptions> =\n  T extends {\n    allowsMultipleSelection: true;\n  }\n    ? ImagePickerResult\n    : ImagePickerResult;\n"]}
\ No newline at end of file
diff --git a/packages/expo-image-picker/src/ExponentImagePicker.web.ts b/packages/expo-image-picker/src/ExponentImagePicker.web.ts
index 4acf04bfed811f..a8c93cf620fdc0 100644
--- a/packages/expo-image-picker/src/ExponentImagePicker.web.ts
+++ b/packages/expo-image-picker/src/ExponentImagePicker.web.ts
@@ -1,6 +1,7 @@
 import { PermissionResponse, PermissionStatus, Platform } from 'expo-modules-core';
 
 import {
+  CameraType,
   ImagePickerAsset,
   ImagePickerResult,
   MediaType,
@@ -36,6 +37,7 @@ export default {
     mediaTypes = MediaTypeOptions.Images,
     allowsMultipleSelection = false,
     base64 = false,
+    cameraType,
   }): Promise<ImagePickerResult> {
     // SSR guard
     if (!Platform.isDOMAvailable) {
@@ -44,7 +46,7 @@ export default {
     return await openFileBrowserAsync({
       mediaTypes,
       allowsMultipleSelection,
-      capture: true,
+      capture: cameraType ?? true,
       base64,
     });
   },
@@ -100,7 +102,16 @@ function openFileBrowserAsync({
     input.setAttribute('multiple', 'multiple');
   }
   if (capture) {
-    input.setAttribute('capture', 'camera');
+    switch (capture) {
+      case true:
+        input.setAttribute('capture', 'camera');
+        break;
+      case CameraType.front:
+        input.setAttribute('capture', 'environment');
+        break;
+      case CameraType.back:
+        input.setAttribute('capture', 'user');
+    }
   }
   document.body.appendChild(input);
 
diff --git a/packages/expo-image-picker/src/ImagePicker.types.ts b/packages/expo-image-picker/src/ImagePicker.types.ts
index 0a363721e409bf..97f9bbf2080cec 100644
--- a/packages/expo-image-picker/src/ImagePicker.types.ts
+++ b/packages/expo-image-picker/src/ImagePicker.types.ts
@@ -517,9 +517,8 @@ export type ImagePickerOptions = {
    * Selects the camera-facing type. The `CameraType` enum provides two options:
    * `front` for the front-facing camera and `back` for the back-facing camera.
    * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.
+   * - **On Web**, if this option is not provided, use "camera" as the default value of internal input element for backwards compatibility.
    * @default CameraType.back
-   * @platform android
-   * @platform ios
    */
   cameraType?: CameraType;
   /**
@@ -537,7 +536,10 @@ export type ImagePickerOptions = {
   legacy?: boolean;
 };
 
-// @needsAudit
+/**
+ * @hidden
+ * @deprecated Only used internally.
+ */
 export type OpenFileBrowserOptions = {
   /**
    * Choose what type of media to pick.
@@ -545,7 +547,7 @@ export type OpenFileBrowserOptions = {
    */
   mediaTypes: MediaType | MediaType[] | MediaTypeOptions;
   // @docsMissing
-  capture?: boolean;
+  capture?: boolean | CameraType;
   /**
    * Whether or not to allow selecting multiple media files at once.
    * @platform web


Reviews:
user: login: alanjhughes
body: Looks good, just one comment
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-03-02T09:14:14Z
user: login: RyogaK
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-03T00:39:09Z

Review comments:
diff_hunk: @@ -517,9 +517,11 @@ export type ImagePickerOptions = {
    * Selects the camera-facing type. The `CameraType` enum provides two options:
    * `front` for the front-facing camera and `back` for the back-facing camera.
    * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.
+   * - **On Web**, if this option is not provided, use "camera" as the default value of internal input element for backwards compatibility.
    * @default CameraType.back
    * @platform android
    * @platform ios
+   * @platform web
path: packages/expo-image-picker/src/ImagePicker.types.ts
user: login: alanjhughes
body: ```suggestion
```
We can remove the platform specifier if all support the prop
created_at: 2025-03-02T09:13:11Z
author_association: COLLABORATOR
diff_hunk: @@ -517,9 +517,11 @@ export type ImagePickerOptions = {
    * Selects the camera-facing type. The `CameraType` enum provides two options:
    * `front` for the front-facing camera and `back` for the back-facing camera.
    * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.
+   * - **On Web**, if this option is not provided, use "camera" as the default value of internal input element for backwards compatibility.
    * @default CameraType.back
    * @platform android
    * @platform ios
+   * @platform web
path: packages/expo-image-picker/src/ImagePicker.types.ts
user: login: RyogaK
body: Removed them!
created_at: 2025-03-03T00:39:08Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-02-28T03:03:05Z
body: Subscribed to pull request
| File Patterns | Mentions |
| - | - |
| docs/\*\* | @Simek, @amandeepmittal |
| packages/expo-image-picker/\*\* | @lukmccall, @alanjhughes |

Generated by [CodeMention](https://github.com/expo/expo/actions/workflows/codemention.yaml)
<!-- codemention header -->
author_association: CONTRIBUTOR
user: login: alanjhughes
created_at: 2025-03-04T10:14:27Z
body: @RyogaK - can you run `yarn build` in the `expo-image-picker` package to rebuild the JS? This will fix CI
author_association: COLLABORATOR
user: login: RyogaK
created_at: 2025-03-11T04:53:04Z
body: @alanjhughes 
Thanks for your patience with my repeated attempts. I’d really appreciate it if you could give it another try!
author_association: CONTRIBUTOR
user: login: RyogaK
created_at: 2025-03-14T04:48:51Z
body: @alanjhughes The tests have passed. Can you proceed with the merge?
author_association: CONTRIBUTOR