@symbiote-native/image-picker 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +188 -0
- package/build/angular/index.d.ts +3 -0
- package/build/angular/index.js +3 -0
- package/build/angular/services/camera-permissions.service/index.d.ts +5 -0
- package/build/angular/services/camera-permissions.service/index.js +60 -0
- package/build/angular/services/media-library-permissions.service/index.d.ts +5 -0
- package/build/angular/services/media-library-permissions.service/index.js +60 -0
- package/build/core/image-picker.d.ts +9 -0
- package/build/core/image-picker.js +52 -0
- package/build/core/index.d.ts +3 -0
- package/build/core/index.js +3 -0
- package/build/core/media-library-permission-api.d.ts +11 -0
- package/build/core/media-library-permission-api.js +9 -0
- package/build/core/native-module.d.ts +13 -0
- package/build/core/native-module.js +3 -0
- package/build/core/types.d.ts +127 -0
- package/build/core/types.js +54 -0
- package/build/core/utils.d.ts +4 -0
- package/build/core/utils.js +24 -0
- package/build/react/index.d.ts +3 -0
- package/build/react/index.js +3 -0
- package/build/react/use-camera-permissions.d.ts +8 -0
- package/build/react/use-camera-permissions.js +10 -0
- package/build/react/use-media-library-permissions.d.ts +10 -0
- package/build/react/use-media-library-permissions.js +7 -0
- package/build/solid/index.d.ts +3 -0
- package/build/solid/index.js +3 -0
- package/build/solid/use-camera-permissions.d.ts +9 -0
- package/build/solid/use-camera-permissions.js +10 -0
- package/build/solid/use-media-library-permissions.d.ts +11 -0
- package/build/solid/use-media-library-permissions.js +7 -0
- package/build/svelte/index.d.ts +3 -0
- package/build/svelte/index.js +3 -0
- package/build/svelte/use-camera-permissions.svelte.d.ts +8 -0
- package/build/svelte/use-camera-permissions.svelte.js +10 -0
- package/build/svelte/use-media-library-permissions.svelte.d.ts +10 -0
- package/build/svelte/use-media-library-permissions.svelte.js +7 -0
- package/build/vue/index.d.ts +3 -0
- package/build/vue/index.js +3 -0
- package/build/vue/use-camera-permissions.d.ts +9 -0
- package/build/vue/use-camera-permissions.js +10 -0
- package/build/vue/use-media-library-permissions.d.ts +11 -0
- package/build/vue/use-media-library-permissions.js +7 -0
- package/build-ngc/angular/index.d.ts +3 -0
- package/build-ngc/angular/index.js +4 -0
- package/build-ngc/angular/index.js.map +1 -0
- package/build-ngc/angular/services/camera-permissions.service/index.d.ts +8 -0
- package/build-ngc/angular/services/camera-permissions.service/index.js +17 -0
- package/build-ngc/angular/services/camera-permissions.service/index.js.map +1 -0
- package/build-ngc/angular/services/media-library-permissions.service/index.d.ts +8 -0
- package/build-ngc/angular/services/media-library-permissions.service/index.js +17 -0
- package/build-ngc/angular/services/media-library-permissions.service/index.js.map +1 -0
- package/build-ngc/core/image-picker.d.ts +9 -0
- package/build-ngc/core/image-picker.js +53 -0
- package/build-ngc/core/image-picker.js.map +1 -0
- package/build-ngc/core/index.d.ts +3 -0
- package/build-ngc/core/index.js +4 -0
- package/build-ngc/core/index.js.map +1 -0
- package/build-ngc/core/media-library-permission-api.d.ts +11 -0
- package/build-ngc/core/media-library-permission-api.js +10 -0
- package/build-ngc/core/media-library-permission-api.js.map +1 -0
- package/build-ngc/core/native-module.d.ts +13 -0
- package/build-ngc/core/native-module.js +4 -0
- package/build-ngc/core/native-module.js.map +1 -0
- package/build-ngc/core/types.d.ts +127 -0
- package/build-ngc/core/types.js +55 -0
- package/build-ngc/core/types.js.map +1 -0
- package/build-ngc/core/utils.d.ts +4 -0
- package/build-ngc/core/utils.js +25 -0
- package/build-ngc/core/utils.js.map +1 -0
- package/native-link.json +20 -0
- package/package.json +150 -0
- package/src/angular/index.ts +3 -0
- package/src/angular/services/camera-permissions.service/index.ts +16 -0
- package/src/angular/services/media-library-permissions.service/index.ts +19 -0
- package/src/core/image-picker.ts +90 -0
- package/src/core/index.ts +11 -0
- package/src/core/media-library-permission-api.ts +23 -0
- package/src/core/native-module.ts +34 -0
- package/src/core/types.ts +145 -0
- package/src/core/utils.ts +36 -0
- package/src/react/index.ts +6 -0
- package/src/react/use-camera-permissions.ts +25 -0
- package/src/react/use-media-library-permissions.ts +26 -0
- package/src/solid/index.ts +6 -0
- package/src/solid/use-camera-permissions.ts +26 -0
- package/src/solid/use-media-library-permissions.ts +27 -0
- package/src/svelte/index.ts +6 -0
- package/src/svelte/svelte-ambient.d.ts +3 -0
- package/src/svelte/svelte-compile.test-helper.ts +7 -0
- package/src/svelte/use-camera-permissions.svelte.ts +25 -0
- package/src/svelte/use-media-library-permissions.svelte.ts +26 -0
- package/src/vue/index.ts +6 -0
- package/src/vue/use-camera-permissions.ts +26 -0
- package/src/vue/use-media-library-permissions.ts +27 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** @deprecated use an array of `IMediaType` instead. */
|
|
2
|
+
export var MediaTypeOptions;
|
|
3
|
+
(function (MediaTypeOptions) {
|
|
4
|
+
MediaTypeOptions["All"] = "All";
|
|
5
|
+
MediaTypeOptions["Videos"] = "Videos";
|
|
6
|
+
MediaTypeOptions["Images"] = "Images";
|
|
7
|
+
})(MediaTypeOptions || (MediaTypeOptions = {}));
|
|
8
|
+
export var VideoExportPreset;
|
|
9
|
+
(function (VideoExportPreset) {
|
|
10
|
+
VideoExportPreset[VideoExportPreset["Passthrough"] = 0] = "Passthrough";
|
|
11
|
+
VideoExportPreset[VideoExportPreset["LowQuality"] = 1] = "LowQuality";
|
|
12
|
+
VideoExportPreset[VideoExportPreset["MediumQuality"] = 2] = "MediumQuality";
|
|
13
|
+
VideoExportPreset[VideoExportPreset["HighestQuality"] = 3] = "HighestQuality";
|
|
14
|
+
VideoExportPreset[VideoExportPreset["H264_640x480"] = 4] = "H264_640x480";
|
|
15
|
+
VideoExportPreset[VideoExportPreset["H264_960x540"] = 5] = "H264_960x540";
|
|
16
|
+
VideoExportPreset[VideoExportPreset["H264_1280x720"] = 6] = "H264_1280x720";
|
|
17
|
+
VideoExportPreset[VideoExportPreset["H264_1920x1080"] = 7] = "H264_1920x1080";
|
|
18
|
+
VideoExportPreset[VideoExportPreset["H264_3840x2160"] = 8] = "H264_3840x2160";
|
|
19
|
+
VideoExportPreset[VideoExportPreset["HEVC_1920x1080"] = 9] = "HEVC_1920x1080";
|
|
20
|
+
VideoExportPreset[VideoExportPreset["HEVC_3840x2160"] = 10] = "HEVC_3840x2160";
|
|
21
|
+
})(VideoExportPreset || (VideoExportPreset = {}));
|
|
22
|
+
export var UIImagePickerControllerQualityType;
|
|
23
|
+
(function (UIImagePickerControllerQualityType) {
|
|
24
|
+
UIImagePickerControllerQualityType[UIImagePickerControllerQualityType["High"] = 0] = "High";
|
|
25
|
+
UIImagePickerControllerQualityType[UIImagePickerControllerQualityType["Medium"] = 1] = "Medium";
|
|
26
|
+
UIImagePickerControllerQualityType[UIImagePickerControllerQualityType["Low"] = 2] = "Low";
|
|
27
|
+
UIImagePickerControllerQualityType[UIImagePickerControllerQualityType["VGA640x480"] = 3] = "VGA640x480";
|
|
28
|
+
UIImagePickerControllerQualityType[UIImagePickerControllerQualityType["IFrame1280x720"] = 4] = "IFrame1280x720";
|
|
29
|
+
UIImagePickerControllerQualityType[UIImagePickerControllerQualityType["IFrame960x540"] = 5] = "IFrame960x540";
|
|
30
|
+
})(UIImagePickerControllerQualityType || (UIImagePickerControllerQualityType = {}));
|
|
31
|
+
/** iOS only — maps to `UIModalPresentationStyle`. */
|
|
32
|
+
export var UIImagePickerPresentationStyle;
|
|
33
|
+
(function (UIImagePickerPresentationStyle) {
|
|
34
|
+
UIImagePickerPresentationStyle["FULL_SCREEN"] = "fullScreen";
|
|
35
|
+
UIImagePickerPresentationStyle["PAGE_SHEET"] = "pageSheet";
|
|
36
|
+
UIImagePickerPresentationStyle["FORM_SHEET"] = "formSheet";
|
|
37
|
+
UIImagePickerPresentationStyle["CURRENT_CONTEXT"] = "currentContext";
|
|
38
|
+
UIImagePickerPresentationStyle["OVER_FULL_SCREEN"] = "overFullScreen";
|
|
39
|
+
UIImagePickerPresentationStyle["OVER_CURRENT_CONTEXT"] = "overCurrentContext";
|
|
40
|
+
UIImagePickerPresentationStyle["POPOVER"] = "popover";
|
|
41
|
+
UIImagePickerPresentationStyle["AUTOMATIC"] = "automatic";
|
|
42
|
+
})(UIImagePickerPresentationStyle || (UIImagePickerPresentationStyle = {}));
|
|
43
|
+
/** iOS only — maps to `PHPickerConfigurationAssetRepresentationMode`. */
|
|
44
|
+
export var UIImagePickerPreferredAssetRepresentationMode;
|
|
45
|
+
(function (UIImagePickerPreferredAssetRepresentationMode) {
|
|
46
|
+
UIImagePickerPreferredAssetRepresentationMode["Automatic"] = "automatic";
|
|
47
|
+
UIImagePickerPreferredAssetRepresentationMode["Compatible"] = "compatible";
|
|
48
|
+
UIImagePickerPreferredAssetRepresentationMode["Current"] = "current";
|
|
49
|
+
})(UIImagePickerPreferredAssetRepresentationMode || (UIImagePickerPreferredAssetRepresentationMode = {}));
|
|
50
|
+
export var CameraType;
|
|
51
|
+
(function (CameraType) {
|
|
52
|
+
CameraType["back"] = "back";
|
|
53
|
+
CameraType["front"] = "front";
|
|
54
|
+
})(CameraType || (CameraType = {}));
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MediaTypeOptions } from './types';
|
|
2
|
+
import type { IImagePickerOptions, IMediaType } from './types';
|
|
3
|
+
export declare function parseMediaTypes(mediaTypes: MediaTypeOptions | IMediaType | IMediaType[]): IMediaType[];
|
|
4
|
+
export declare function mapDeprecatedOptions(options: IImagePickerOptions): IImagePickerOptions;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MediaTypeOptions } from './types.js';
|
|
2
|
+
const DEPRECATED_MEDIA_TYPE_MAP = {
|
|
3
|
+
[MediaTypeOptions.Images]: ['images'],
|
|
4
|
+
[MediaTypeOptions.Videos]: ['videos'],
|
|
5
|
+
[MediaTypeOptions.All]: ['images', 'videos'],
|
|
6
|
+
};
|
|
7
|
+
export function parseMediaTypes(mediaTypes) {
|
|
8
|
+
if (mediaTypes === MediaTypeOptions.Images ||
|
|
9
|
+
mediaTypes === MediaTypeOptions.Videos ||
|
|
10
|
+
mediaTypes === MediaTypeOptions.All) {
|
|
11
|
+
console.warn('[image-picker] `MediaTypeOptions` is deprecated. Use `IMediaType` or an array of it instead.');
|
|
12
|
+
return DEPRECATED_MEDIA_TYPE_MAP[mediaTypes];
|
|
13
|
+
}
|
|
14
|
+
if (typeof mediaTypes === 'string') {
|
|
15
|
+
return [mediaTypes];
|
|
16
|
+
}
|
|
17
|
+
return mediaTypes;
|
|
18
|
+
}
|
|
19
|
+
export function mapDeprecatedOptions(options) {
|
|
20
|
+
if (!options.mediaTypes) {
|
|
21
|
+
return options;
|
|
22
|
+
}
|
|
23
|
+
return { ...options, mediaTypes: parseMediaTypes(options.mediaTypes) };
|
|
24
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
2
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
3
|
+
export type IUseCameraPermissionsResult = [
|
|
4
|
+
ICameraPermissionResponse | null,
|
|
5
|
+
() => Promise<ICameraPermissionResponse>,
|
|
6
|
+
() => Promise<ICameraPermissionResponse>
|
|
7
|
+
];
|
|
8
|
+
export declare function useCameraPermissions(options?: IPermissionHookBehavior): IUseCameraPermissionsResult;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/react';
|
|
2
|
+
import { getCameraPermissionsAsync, requestCameraPermissionsAsync, } from '../core/index.js';
|
|
3
|
+
const usePermission = createPermissionHook({
|
|
4
|
+
getMethod: getCameraPermissionsAsync,
|
|
5
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
6
|
+
});
|
|
7
|
+
// React twin of `expo-image-picker`'s `useCameraPermissions`
|
|
8
|
+
export function useCameraPermissions(options) {
|
|
9
|
+
return usePermission(options);
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
2
|
+
import { type IMediaLibraryPermissionMethodOptions } from '../core/media-library-permission-api';
|
|
3
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
4
|
+
export type IUseMediaLibraryPermissionsOptions = IMediaLibraryPermissionMethodOptions;
|
|
5
|
+
export type IUseMediaLibraryPermissionsResult = [
|
|
6
|
+
IMediaLibraryPermissionResponse | null,
|
|
7
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
8
|
+
() => Promise<IMediaLibraryPermissionResponse>
|
|
9
|
+
];
|
|
10
|
+
export declare function useMediaLibraryPermissions(options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>): IUseMediaLibraryPermissionsResult;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/react';
|
|
2
|
+
import { mediaLibraryPermissionMethods, splitMediaLibraryPermissionOptions, } from '../core/media-library-permission-api.js';
|
|
3
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
4
|
+
// React twin of `expo-image-picker`'s `useMediaLibraryPermissions`
|
|
5
|
+
export function useMediaLibraryPermissions(options) {
|
|
6
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
2
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
3
|
+
import type { Accessor } from 'solid-js';
|
|
4
|
+
export type IUseCameraPermissionsResult = [
|
|
5
|
+
Accessor<ICameraPermissionResponse | null>,
|
|
6
|
+
() => Promise<ICameraPermissionResponse>,
|
|
7
|
+
() => Promise<ICameraPermissionResponse>
|
|
8
|
+
];
|
|
9
|
+
export declare function useCameraPermissions(options?: IPermissionHookBehavior): IUseCameraPermissionsResult;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/solid';
|
|
2
|
+
import { getCameraPermissionsAsync, requestCameraPermissionsAsync, } from '../core/index.js';
|
|
3
|
+
const usePermission = createPermissionHook({
|
|
4
|
+
getMethod: getCameraPermissionsAsync,
|
|
5
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
6
|
+
});
|
|
7
|
+
// Solid twin of `../react`'s `useCameraPermissions`
|
|
8
|
+
export function useCameraPermissions(options) {
|
|
9
|
+
return usePermission(options);
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
2
|
+
import { type IMediaLibraryPermissionMethodOptions } from '../core/media-library-permission-api';
|
|
3
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
4
|
+
import type { Accessor } from 'solid-js';
|
|
5
|
+
export type IUseMediaLibraryPermissionsOptions = IMediaLibraryPermissionMethodOptions;
|
|
6
|
+
export type IUseMediaLibraryPermissionsResult = [
|
|
7
|
+
Accessor<IMediaLibraryPermissionResponse | null>,
|
|
8
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
9
|
+
() => Promise<IMediaLibraryPermissionResponse>
|
|
10
|
+
];
|
|
11
|
+
export declare function useMediaLibraryPermissions(options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>): IUseMediaLibraryPermissionsResult;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/solid';
|
|
2
|
+
import { mediaLibraryPermissionMethods, splitMediaLibraryPermissionOptions, } from '../core/media-library-permission-api.js';
|
|
3
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
4
|
+
// Solid twin of `../react`'s `useMediaLibraryPermissions`
|
|
5
|
+
export function useMediaLibraryPermissions(options) {
|
|
6
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
2
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
3
|
+
export type IUseCameraPermissionsResult = {
|
|
4
|
+
readonly status: ICameraPermissionResponse | null;
|
|
5
|
+
requestPermission: () => Promise<ICameraPermissionResponse>;
|
|
6
|
+
getPermission: () => Promise<ICameraPermissionResponse>;
|
|
7
|
+
};
|
|
8
|
+
export declare function useCameraPermissions(behavior?: IPermissionHookBehavior): IUseCameraPermissionsResult;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/svelte/runes/create-permission-hook';
|
|
2
|
+
import { getCameraPermissionsAsync, requestCameraPermissionsAsync, } from '../core/index.js';
|
|
3
|
+
const usePermission = createPermissionHook({
|
|
4
|
+
getMethod: getCameraPermissionsAsync,
|
|
5
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
6
|
+
});
|
|
7
|
+
// Svelte twin of `../react`'s `useCameraPermissions`
|
|
8
|
+
export function useCameraPermissions(behavior) {
|
|
9
|
+
return usePermission(behavior);
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type IMediaLibraryPermissionMethodOptions } from '../core/media-library-permission-api';
|
|
2
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
3
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
4
|
+
export type IUseMediaLibraryPermissionsOptions = IMediaLibraryPermissionMethodOptions;
|
|
5
|
+
export type IUseMediaLibraryPermissionsResult = {
|
|
6
|
+
readonly status: IMediaLibraryPermissionResponse | null;
|
|
7
|
+
requestPermission: () => Promise<IMediaLibraryPermissionResponse>;
|
|
8
|
+
getPermission: () => Promise<IMediaLibraryPermissionResponse>;
|
|
9
|
+
};
|
|
10
|
+
export declare function useMediaLibraryPermissions(options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>): IUseMediaLibraryPermissionsResult;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/svelte/runes/create-permission-hook';
|
|
2
|
+
import { mediaLibraryPermissionMethods, splitMediaLibraryPermissionOptions, } from '../core/media-library-permission-api.js';
|
|
3
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
4
|
+
// Svelte twin of `../react`'s `useMediaLibraryPermissions`
|
|
5
|
+
export function useMediaLibraryPermissions(options) {
|
|
6
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
2
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
3
|
+
import type { Ref } from '@vue/runtime-core';
|
|
4
|
+
export type IUseCameraPermissionsResult = [
|
|
5
|
+
Ref<ICameraPermissionResponse | null>,
|
|
6
|
+
() => Promise<ICameraPermissionResponse>,
|
|
7
|
+
() => Promise<ICameraPermissionResponse>
|
|
8
|
+
];
|
|
9
|
+
export declare function useCameraPermissions(options?: IPermissionHookBehavior): IUseCameraPermissionsResult;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/vue';
|
|
2
|
+
import { getCameraPermissionsAsync, requestCameraPermissionsAsync, } from '../core/index.js';
|
|
3
|
+
const usePermission = createPermissionHook({
|
|
4
|
+
getMethod: getCameraPermissionsAsync,
|
|
5
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
6
|
+
});
|
|
7
|
+
// Vue twin of `../react`'s `useCameraPermissions`
|
|
8
|
+
export function useCameraPermissions(options) {
|
|
9
|
+
return usePermission(options);
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
2
|
+
import { type IMediaLibraryPermissionMethodOptions } from '../core/media-library-permission-api';
|
|
3
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
4
|
+
import type { Ref } from '@vue/runtime-core';
|
|
5
|
+
export type IUseMediaLibraryPermissionsOptions = IMediaLibraryPermissionMethodOptions;
|
|
6
|
+
export type IUseMediaLibraryPermissionsResult = [
|
|
7
|
+
Ref<IMediaLibraryPermissionResponse | null>,
|
|
8
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
9
|
+
() => Promise<IMediaLibraryPermissionResponse>
|
|
10
|
+
];
|
|
11
|
+
export declare function useMediaLibraryPermissions(options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>): IUseMediaLibraryPermissionsResult;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/vue';
|
|
2
|
+
import { mediaLibraryPermissionMethods, splitMediaLibraryPermissionOptions, } from '../core/media-library-permission-api.js';
|
|
3
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
4
|
+
// Vue twin of `../react`'s `useMediaLibraryPermissions`
|
|
5
|
+
export function useMediaLibraryPermissions(options) {
|
|
6
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PermissionsServiceBase } from '@symbiote-native/angular';
|
|
2
|
+
import type { ICameraPermissionResponse } from '../../../core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class CameraPermissionsService extends PermissionsServiceBase<ICameraPermissionResponse> {
|
|
5
|
+
constructor();
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CameraPermissionsService, never>;
|
|
7
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CameraPermissionsService>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Angular twin of `../../react`'s `useCameraPermissions`
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { PermissionsServiceBase } from '@symbiote-native/angular';
|
|
4
|
+
import { getCameraPermissionsAsync, requestCameraPermissionsAsync, } from '../../../core';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class CameraPermissionsService extends PermissionsServiceBase {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(getCameraPermissionsAsync, requestCameraPermissionsAsync);
|
|
9
|
+
}
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CameraPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CameraPermissionsService, providedIn: 'root' });
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: CameraPermissionsService, decorators: [{
|
|
14
|
+
type: Injectable,
|
|
15
|
+
args: [{ providedIn: 'root' }]
|
|
16
|
+
}], ctorParameters: () => [] });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/angular/services/camera-permissions.service/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;;AAIvB,MAAM,OAAO,wBAAyB,SAAQ,sBAAiD;IAC7F;QACE,KAAK,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,CAAC;IAClE,CAAC;uGAHU,wBAAwB;2GAAxB,wBAAwB,cADX,MAAM;;2FACnB,wBAAwB;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PermissionsServiceBase } from '@symbiote-native/angular';
|
|
2
|
+
import type { IMediaLibraryPermissionResponse } from '../../../core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class MediaLibraryPermissionsService extends PermissionsServiceBase<IMediaLibraryPermissionResponse, boolean> {
|
|
5
|
+
constructor();
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MediaLibraryPermissionsService, never>;
|
|
7
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MediaLibraryPermissionsService>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Angular twin of `../../react`'s `useMediaLibraryPermissions`, `get`/`request` take a `writeOnly` flag
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { PermissionsServiceBase } from '@symbiote-native/angular';
|
|
4
|
+
import { getMediaLibraryPermissionsAsync, requestMediaLibraryPermissionsAsync, } from '../../../core';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class MediaLibraryPermissionsService extends PermissionsServiceBase {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(getMediaLibraryPermissionsAsync, requestMediaLibraryPermissionsAsync);
|
|
9
|
+
}
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MediaLibraryPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MediaLibraryPermissionsService, providedIn: 'root' });
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MediaLibraryPermissionsService, decorators: [{
|
|
14
|
+
type: Injectable,
|
|
15
|
+
args: [{ providedIn: 'root' }]
|
|
16
|
+
}], ctorParameters: () => [] });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/angular/services/media-library-permissions.service/index.ts"],"names":[],"mappings":"AAAA,wGAAwG;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,GACpC,MAAM,eAAe,CAAC;;AAIvB,MAAM,OAAO,8BAA+B,SAAQ,sBAGnD;IACC;QACE,KAAK,CAAC,+BAA+B,EAAE,mCAAmC,CAAC,CAAC;IAC9E,CAAC;uGANU,8BAA8B;2GAA9B,8BAA8B,cADjB,MAAM;;2FACnB,8BAA8B;kBAD1C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ICameraPermissionResponse, IImagePickerErrorResult, IImagePickerOptions, IImagePickerResult, IMediaLibraryPermissionResponse } from './types';
|
|
2
|
+
export declare function getCameraPermissionsAsync(): Promise<ICameraPermissionResponse>;
|
|
3
|
+
export declare function getMediaLibraryPermissionsAsync(writeOnly?: boolean): Promise<IMediaLibraryPermissionResponse>;
|
|
4
|
+
export declare function requestCameraPermissionsAsync(): Promise<ICameraPermissionResponse>;
|
|
5
|
+
export declare function requestMediaLibraryPermissionsAsync(writeOnly?: boolean): Promise<IMediaLibraryPermissionResponse>;
|
|
6
|
+
/** Android only — recovers a result lost to `MainActivity` being killed mid-pick. */
|
|
7
|
+
export declare function getPendingResultAsync(): Promise<IImagePickerResult | IImagePickerErrorResult | null>;
|
|
8
|
+
export declare function launchCameraAsync(options?: IImagePickerOptions): Promise<IImagePickerResult>;
|
|
9
|
+
export declare function launchImageLibraryAsync(options?: IImagePickerOptions): Promise<IImagePickerResult>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CodedError, UnavailabilityError } from 'expo-modules-core';
|
|
2
|
+
import { expoImagePicker } from './native-module';
|
|
3
|
+
import { mapDeprecatedOptions } from './utils';
|
|
4
|
+
function validateOptions(options) {
|
|
5
|
+
const { aspect, quality, videoMaxDuration } = options;
|
|
6
|
+
if (aspect != null) {
|
|
7
|
+
const [x, y] = aspect;
|
|
8
|
+
if (x <= 0 || y <= 0) {
|
|
9
|
+
throw new CodedError('ERR_INVALID_ARGUMENT', `Invalid aspect ratio values ${x}:${y}. Provide positive numbers.`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
if (quality != null && (quality < 0 || quality > 1)) {
|
|
13
|
+
throw new CodedError('ERR_INVALID_ARGUMENT', `Invalid 'quality' value ${quality}. Provide a value between 0 and 1.`);
|
|
14
|
+
}
|
|
15
|
+
if (videoMaxDuration != null && videoMaxDuration < 0) {
|
|
16
|
+
throw new CodedError('ERR_INVALID_ARGUMENT', `Invalid 'videoMaxDuration' value ${videoMaxDuration}. Provide a non-negative number.`);
|
|
17
|
+
}
|
|
18
|
+
return options;
|
|
19
|
+
}
|
|
20
|
+
export async function getCameraPermissionsAsync() {
|
|
21
|
+
return expoImagePicker.getCameraPermissionsAsync();
|
|
22
|
+
}
|
|
23
|
+
export async function getMediaLibraryPermissionsAsync(writeOnly = false) {
|
|
24
|
+
return expoImagePicker.getMediaLibraryPermissionsAsync(writeOnly);
|
|
25
|
+
}
|
|
26
|
+
export async function requestCameraPermissionsAsync() {
|
|
27
|
+
return expoImagePicker.requestCameraPermissionsAsync();
|
|
28
|
+
}
|
|
29
|
+
export async function requestMediaLibraryPermissionsAsync(writeOnly = false) {
|
|
30
|
+
return expoImagePicker.requestMediaLibraryPermissionsAsync(writeOnly);
|
|
31
|
+
}
|
|
32
|
+
/** Android only — recovers a result lost to `MainActivity` being killed mid-pick. */
|
|
33
|
+
export async function getPendingResultAsync() {
|
|
34
|
+
if (expoImagePicker.getPendingResultAsync) {
|
|
35
|
+
return expoImagePicker.getPendingResultAsync();
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
export async function launchCameraAsync(options = {}) {
|
|
40
|
+
if (!expoImagePicker.launchCameraAsync) {
|
|
41
|
+
throw new UnavailabilityError('ImagePicker', 'launchCameraAsync');
|
|
42
|
+
}
|
|
43
|
+
const mappedOptions = mapDeprecatedOptions(options);
|
|
44
|
+
return await expoImagePicker.launchCameraAsync(validateOptions(mappedOptions));
|
|
45
|
+
}
|
|
46
|
+
export async function launchImageLibraryAsync(options = {}) {
|
|
47
|
+
const mappedOptions = mapDeprecatedOptions(options);
|
|
48
|
+
if (mappedOptions.allowsEditing && mappedOptions.allowsMultipleSelection) {
|
|
49
|
+
console.warn('[image-picker] `allowsEditing` is ignored when `allowsMultipleSelection` is enabled.');
|
|
50
|
+
}
|
|
51
|
+
return await expoImagePicker.launchImageLibraryAsync(mappedOptions);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=image-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-picker.js","sourceRoot":"","sources":["../../src/core/image-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAS/C,SAAS,eAAe,CAAC,OAA4B;IACnD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IACtD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,UAAU,CAClB,sBAAsB,EACtB,+BAA+B,CAAC,IAAI,CAAC,6BAA6B,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAClB,sBAAsB,EACtB,2BAA2B,OAAO,oCAAoC,CACvE,CAAC;IACJ,CAAC;IACD,IAAI,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,UAAU,CAClB,sBAAsB,EACtB,oCAAoC,gBAAgB,kCAAkC,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,OAAO,eAAe,CAAC,yBAAyB,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,YAAqB,KAAK;IAE1B,OAAO,eAAe,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B;IACjD,OAAO,eAAe,CAAC,6BAA6B,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,YAAqB,KAAK;IAE1B,OAAO,eAAe,CAAC,mCAAmC,CAAC,SAAS,CAAC,CAAC;AACxE,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,qBAAqB;IAGzC,IAAI,eAAe,CAAC,qBAAqB,EAAE,CAAC;QAC1C,OAAO,eAAe,CAAC,qBAAqB,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA+B,EAAE;IAEjC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;QACvC,MAAM,IAAI,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,MAAM,eAAe,CAAC,iBAAiB,CAC5C,eAAe,CAAC,aAAa,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAA+B,EAAE;IAEjC,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,aAAa,CAAC,aAAa,IAAI,aAAa,CAAC,uBAAuB,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,eAAe,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { PermissionStatus } from 'expo-modules-core';
|
|
2
|
+
export { getCameraPermissionsAsync, getMediaLibraryPermissionsAsync, getPendingResultAsync, launchCameraAsync, launchImageLibraryAsync, requestCameraPermissionsAsync, requestMediaLibraryPermissionsAsync, } from './image-picker';
|
|
3
|
+
export * from './types';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { PermissionStatus } from 'expo-modules-core';
|
|
2
|
+
export { getCameraPermissionsAsync, getMediaLibraryPermissionsAsync, getPendingResultAsync, launchCameraAsync, launchImageLibraryAsync, requestCameraPermissionsAsync, requestMediaLibraryPermissionsAsync, } from './image-picker';
|
|
3
|
+
export * from './types';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,gBAAgB,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMediaLibraryPermissionResponse } from './types';
|
|
2
|
+
import { splitWriteOnlyPermissionOptions } from '@symbiote-native/engine';
|
|
3
|
+
export type IMediaLibraryPermissionMethodOptions = {
|
|
4
|
+
writeOnly?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const mediaLibraryPermissionMethods: {
|
|
7
|
+
getMethod: (options?: IMediaLibraryPermissionMethodOptions) => Promise<IMediaLibraryPermissionResponse>;
|
|
8
|
+
requestMethod: (options?: IMediaLibraryPermissionMethodOptions) => Promise<IMediaLibraryPermissionResponse>;
|
|
9
|
+
};
|
|
10
|
+
export declare const splitMediaLibraryPermissionOptions: typeof splitWriteOnlyPermissionOptions;
|
|
11
|
+
export type { IMediaLibraryPermissionResponse };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// `methods` every adapter's `useMediaLibraryPermissions` binds to the shared
|
|
2
|
+
// `@symbiote-native/{react,vue,solid}` `createPermissionHook` factory
|
|
3
|
+
import { getMediaLibraryPermissionsAsync, requestMediaLibraryPermissionsAsync, } from './index';
|
|
4
|
+
import { splitWriteOnlyPermissionOptions } from '@symbiote-native/engine';
|
|
5
|
+
export const mediaLibraryPermissionMethods = {
|
|
6
|
+
getMethod: (options) => getMediaLibraryPermissionsAsync(options?.writeOnly),
|
|
7
|
+
requestMethod: (options) => requestMediaLibraryPermissionsAsync(options?.writeOnly),
|
|
8
|
+
};
|
|
9
|
+
export const splitMediaLibraryPermissionOptions = splitWriteOnlyPermissionOptions;
|
|
10
|
+
//# sourceMappingURL=media-library-permission-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-library-permission-api.js","sourceRoot":"","sources":["../../src/core/media-library-permission-api.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AAEtE,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,GACpC,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAI1E,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,SAAS,EAAE,CAAC,OAA8C,EAAE,EAAE,CAC5D,+BAA+B,CAAC,OAAO,EAAE,SAAS,CAAC;IACrD,aAAa,EAAE,CAAC,OAA8C,EAAE,EAAE,CAChE,mCAAmC,CAAC,OAAO,EAAE,SAAS,CAAC;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAC7C,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ICameraPermissionResponse, IImagePickerErrorResult, IImagePickerOptions, IImagePickerResult, IMediaLibraryPermissionResponse } from './types';
|
|
2
|
+
export type INativeImagePickerModule = {
|
|
3
|
+
getCameraPermissionsAsync(): Promise<ICameraPermissionResponse>;
|
|
4
|
+
getMediaLibraryPermissionsAsync(writeOnly: boolean): Promise<IMediaLibraryPermissionResponse>;
|
|
5
|
+
requestCameraPermissionsAsync(): Promise<ICameraPermissionResponse>;
|
|
6
|
+
requestMediaLibraryPermissionsAsync(writeOnly: boolean): Promise<IMediaLibraryPermissionResponse>;
|
|
7
|
+
/** Android only — absent on iOS's native module. */
|
|
8
|
+
getPendingResultAsync?(): Promise<IImagePickerResult | IImagePickerErrorResult>;
|
|
9
|
+
/** Absent on web's native module. */
|
|
10
|
+
launchCameraAsync?(options: IImagePickerOptions): Promise<IImagePickerResult>;
|
|
11
|
+
launchImageLibraryAsync(options: IImagePickerOptions): Promise<IImagePickerResult>;
|
|
12
|
+
};
|
|
13
|
+
export declare const expoImagePicker: INativeImagePickerModule;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-module.js","sourceRoot":"","sources":["../../src/core/native-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AASxD,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AAsB5D,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAChD,6BAA6B,CAC9B,CAAC"}
|