@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,145 @@
|
|
|
1
|
+
import type { PermissionResponse } from 'expo-modules-core';
|
|
2
|
+
|
|
3
|
+
export type ICameraPermissionResponse = PermissionResponse;
|
|
4
|
+
|
|
5
|
+
export type IMediaLibraryPermissionResponse = PermissionResponse & {
|
|
6
|
+
/** `'all'` | `'limited'` (Android 13+/iOS 14+) | `'none'`. */
|
|
7
|
+
accessPrivileges?: 'all' | 'limited' | 'none';
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/** @deprecated use an array of `IMediaType` instead. */
|
|
11
|
+
export enum MediaTypeOptions {
|
|
12
|
+
All = 'All',
|
|
13
|
+
Videos = 'Videos',
|
|
14
|
+
Images = 'Images',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type IMediaType = 'images' | 'videos' | 'livePhotos';
|
|
18
|
+
|
|
19
|
+
/** Android only. */
|
|
20
|
+
export type IDefaultTab = 'photos' | 'albums';
|
|
21
|
+
|
|
22
|
+
export enum VideoExportPreset {
|
|
23
|
+
Passthrough = 0,
|
|
24
|
+
LowQuality = 1,
|
|
25
|
+
MediumQuality = 2,
|
|
26
|
+
HighestQuality = 3,
|
|
27
|
+
H264_640x480 = 4,
|
|
28
|
+
H264_960x540 = 5,
|
|
29
|
+
H264_1280x720 = 6,
|
|
30
|
+
H264_1920x1080 = 7,
|
|
31
|
+
H264_3840x2160 = 8,
|
|
32
|
+
HEVC_1920x1080 = 9,
|
|
33
|
+
HEVC_3840x2160 = 10,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export enum UIImagePickerControllerQualityType {
|
|
37
|
+
High = 0,
|
|
38
|
+
Medium = 1,
|
|
39
|
+
Low = 2,
|
|
40
|
+
VGA640x480 = 3,
|
|
41
|
+
IFrame1280x720 = 4,
|
|
42
|
+
IFrame960x540 = 5,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** iOS only — maps to `UIModalPresentationStyle`. */
|
|
46
|
+
export enum UIImagePickerPresentationStyle {
|
|
47
|
+
FULL_SCREEN = 'fullScreen',
|
|
48
|
+
PAGE_SHEET = 'pageSheet',
|
|
49
|
+
FORM_SHEET = 'formSheet',
|
|
50
|
+
CURRENT_CONTEXT = 'currentContext',
|
|
51
|
+
OVER_FULL_SCREEN = 'overFullScreen',
|
|
52
|
+
OVER_CURRENT_CONTEXT = 'overCurrentContext',
|
|
53
|
+
POPOVER = 'popover',
|
|
54
|
+
AUTOMATIC = 'automatic',
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** iOS only — maps to `PHPickerConfigurationAssetRepresentationMode`. */
|
|
58
|
+
export enum UIImagePickerPreferredAssetRepresentationMode {
|
|
59
|
+
Automatic = 'automatic',
|
|
60
|
+
Compatible = 'compatible',
|
|
61
|
+
Current = 'current',
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export enum CameraType {
|
|
65
|
+
back = 'back',
|
|
66
|
+
front = 'front',
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export type IImagePickerAsset = {
|
|
70
|
+
uri: string;
|
|
71
|
+
/** Usable with `@symbiote-native/media-library`. Null if unavailable or access is limited. */
|
|
72
|
+
assetId?: string | null;
|
|
73
|
+
width: number;
|
|
74
|
+
height: number;
|
|
75
|
+
type?: 'image' | 'video' | 'livePhoto' | 'pairedVideo' | null;
|
|
76
|
+
fileName?: string | null;
|
|
77
|
+
fileSize?: number;
|
|
78
|
+
exif?: Record<string, unknown> | null;
|
|
79
|
+
/** Base64 JPEG data — set only when the `base64` option is truthy. */
|
|
80
|
+
base64?: string | null;
|
|
81
|
+
duration?: number | null;
|
|
82
|
+
mimeType?: string;
|
|
83
|
+
/** Set only when `livePhotos` was requested and a live photo was picked. iOS only. */
|
|
84
|
+
pairedVideoAsset?: IImagePickerAsset | null;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export type IImagePickerErrorResult = {
|
|
88
|
+
code: string;
|
|
89
|
+
message: string;
|
|
90
|
+
exception?: string;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export type IImagePickerSuccessResult = {
|
|
94
|
+
canceled: false;
|
|
95
|
+
assets: IImagePickerAsset[];
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export type IImagePickerCanceledResult = {
|
|
99
|
+
canceled: true;
|
|
100
|
+
assets: null;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export type IImagePickerResult =
|
|
104
|
+
IImagePickerSuccessResult | IImagePickerCanceledResult;
|
|
105
|
+
|
|
106
|
+
export type ICropShape = 'rectangle' | 'oval';
|
|
107
|
+
|
|
108
|
+
export type IImagePickerOptions = {
|
|
109
|
+
/** Crop/rotate after picking. Exclusive with `allowsMultipleSelection`. Default `false`. */
|
|
110
|
+
allowsEditing?: boolean;
|
|
111
|
+
/** `[x, y]` crop aspect ratio. Android only. */
|
|
112
|
+
aspect?: [number, number];
|
|
113
|
+
/** Android only. Default `'rectangle'`. */
|
|
114
|
+
shape?: ICropShape;
|
|
115
|
+
/** `0`–`1`. Default `1.0`. */
|
|
116
|
+
quality?: number;
|
|
117
|
+
/** Default `'images'`. */
|
|
118
|
+
mediaTypes?: IMediaType | IMediaType[] | MediaTypeOptions;
|
|
119
|
+
exif?: boolean;
|
|
120
|
+
base64?: boolean;
|
|
121
|
+
/** @deprecated iOS 11+ only. */
|
|
122
|
+
videoExportPreset?: VideoExportPreset;
|
|
123
|
+
/** iOS only. Default `High`. */
|
|
124
|
+
videoQuality?: UIImagePickerControllerQualityType;
|
|
125
|
+
/** Ignored when `allowsEditing` is set. Default `false`. */
|
|
126
|
+
allowsMultipleSelection?: boolean;
|
|
127
|
+
/** `0` = system maximum. Android + iOS 14+. Default `0`. */
|
|
128
|
+
selectionLimit?: number;
|
|
129
|
+
/** iOS 15+ only. Default `false`. */
|
|
130
|
+
orderedSelection?: boolean;
|
|
131
|
+
/** Android only. Default `'photos'`. */
|
|
132
|
+
defaultTab?: IDefaultTab;
|
|
133
|
+
/** Seconds. `0` = no limit (default). No effect on web. */
|
|
134
|
+
videoMaxDuration?: number;
|
|
135
|
+
/** iOS only. Default `AUTOMATIC`. */
|
|
136
|
+
presentationStyle?: UIImagePickerPresentationStyle;
|
|
137
|
+
/** Default `back`. */
|
|
138
|
+
cameraType?: CameraType;
|
|
139
|
+
/** iOS 14+ only. Default `Automatic`. */
|
|
140
|
+
preferredAssetRepresentationMode?: UIImagePickerPreferredAssetRepresentationMode;
|
|
141
|
+
/** Android only — allows picking from outside the photo library. Default `false`. */
|
|
142
|
+
legacy?: boolean;
|
|
143
|
+
/** iOS only — download from iCloud if not stored locally. Default `false`. */
|
|
144
|
+
shouldDownloadFromNetwork?: boolean;
|
|
145
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MediaTypeOptions } from './types';
|
|
2
|
+
import type { IImagePickerOptions, IMediaType } from './types';
|
|
3
|
+
|
|
4
|
+
const DEPRECATED_MEDIA_TYPE_MAP: Record<MediaTypeOptions, IMediaType[]> = {
|
|
5
|
+
[MediaTypeOptions.Images]: ['images'],
|
|
6
|
+
[MediaTypeOptions.Videos]: ['videos'],
|
|
7
|
+
[MediaTypeOptions.All]: ['images', 'videos'],
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export function parseMediaTypes(
|
|
11
|
+
mediaTypes: MediaTypeOptions | IMediaType | IMediaType[],
|
|
12
|
+
): IMediaType[] {
|
|
13
|
+
if (
|
|
14
|
+
mediaTypes === MediaTypeOptions.Images ||
|
|
15
|
+
mediaTypes === MediaTypeOptions.Videos ||
|
|
16
|
+
mediaTypes === MediaTypeOptions.All
|
|
17
|
+
) {
|
|
18
|
+
console.warn(
|
|
19
|
+
'[image-picker] `MediaTypeOptions` is deprecated. Use `IMediaType` or an array of it instead.',
|
|
20
|
+
);
|
|
21
|
+
return DEPRECATED_MEDIA_TYPE_MAP[mediaTypes];
|
|
22
|
+
}
|
|
23
|
+
if (typeof mediaTypes === 'string') {
|
|
24
|
+
return [mediaTypes];
|
|
25
|
+
}
|
|
26
|
+
return mediaTypes;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function mapDeprecatedOptions(
|
|
30
|
+
options: IImagePickerOptions,
|
|
31
|
+
): IImagePickerOptions {
|
|
32
|
+
if (!options.mediaTypes) {
|
|
33
|
+
return options;
|
|
34
|
+
}
|
|
35
|
+
return { ...options, mediaTypes: parseMediaTypes(options.mediaTypes) };
|
|
36
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/react';
|
|
2
|
+
import {
|
|
3
|
+
getCameraPermissionsAsync,
|
|
4
|
+
requestCameraPermissionsAsync,
|
|
5
|
+
} from '../core';
|
|
6
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
7
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
8
|
+
|
|
9
|
+
export type IUseCameraPermissionsResult = [
|
|
10
|
+
ICameraPermissionResponse | null,
|
|
11
|
+
() => Promise<ICameraPermissionResponse>,
|
|
12
|
+
() => Promise<ICameraPermissionResponse>,
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const usePermission = createPermissionHook({
|
|
16
|
+
getMethod: getCameraPermissionsAsync,
|
|
17
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// React twin of `expo-image-picker`'s `useCameraPermissions`
|
|
21
|
+
export function useCameraPermissions(
|
|
22
|
+
options?: IPermissionHookBehavior,
|
|
23
|
+
): IUseCameraPermissionsResult {
|
|
24
|
+
return usePermission(options);
|
|
25
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/react';
|
|
2
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
3
|
+
import {
|
|
4
|
+
mediaLibraryPermissionMethods,
|
|
5
|
+
splitMediaLibraryPermissionOptions,
|
|
6
|
+
type IMediaLibraryPermissionMethodOptions,
|
|
7
|
+
} from '../core/media-library-permission-api';
|
|
8
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
9
|
+
|
|
10
|
+
export type IUseMediaLibraryPermissionsOptions =
|
|
11
|
+
IMediaLibraryPermissionMethodOptions;
|
|
12
|
+
|
|
13
|
+
export type IUseMediaLibraryPermissionsResult = [
|
|
14
|
+
IMediaLibraryPermissionResponse | null,
|
|
15
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
16
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
20
|
+
|
|
21
|
+
// React twin of `expo-image-picker`'s `useMediaLibraryPermissions`
|
|
22
|
+
export function useMediaLibraryPermissions(
|
|
23
|
+
options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>,
|
|
24
|
+
): IUseMediaLibraryPermissionsResult {
|
|
25
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/solid';
|
|
2
|
+
import {
|
|
3
|
+
getCameraPermissionsAsync,
|
|
4
|
+
requestCameraPermissionsAsync,
|
|
5
|
+
} from '../core';
|
|
6
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
7
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
8
|
+
import type { Accessor } from 'solid-js';
|
|
9
|
+
|
|
10
|
+
export type IUseCameraPermissionsResult = [
|
|
11
|
+
Accessor<ICameraPermissionResponse | null>,
|
|
12
|
+
() => Promise<ICameraPermissionResponse>,
|
|
13
|
+
() => Promise<ICameraPermissionResponse>,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const usePermission = createPermissionHook({
|
|
17
|
+
getMethod: getCameraPermissionsAsync,
|
|
18
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Solid twin of `../react`'s `useCameraPermissions`
|
|
22
|
+
export function useCameraPermissions(
|
|
23
|
+
options?: IPermissionHookBehavior,
|
|
24
|
+
): IUseCameraPermissionsResult {
|
|
25
|
+
return usePermission(options);
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/solid';
|
|
2
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
3
|
+
import {
|
|
4
|
+
mediaLibraryPermissionMethods,
|
|
5
|
+
splitMediaLibraryPermissionOptions,
|
|
6
|
+
type IMediaLibraryPermissionMethodOptions,
|
|
7
|
+
} from '../core/media-library-permission-api';
|
|
8
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
9
|
+
import type { Accessor } from 'solid-js';
|
|
10
|
+
|
|
11
|
+
export type IUseMediaLibraryPermissionsOptions =
|
|
12
|
+
IMediaLibraryPermissionMethodOptions;
|
|
13
|
+
|
|
14
|
+
export type IUseMediaLibraryPermissionsResult = [
|
|
15
|
+
Accessor<IMediaLibraryPermissionResponse | null>,
|
|
16
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
17
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
21
|
+
|
|
22
|
+
// Solid twin of `../react`'s `useMediaLibraryPermissions`
|
|
23
|
+
export function useMediaLibraryPermissions(
|
|
24
|
+
options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>,
|
|
25
|
+
): IUseMediaLibraryPermissionsResult {
|
|
26
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
27
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Re-exports the existing harness instead of a third copy (packages/sqlite and
|
|
2
|
+
// packages/navigation already carry one, not part of either package's public exports)
|
|
3
|
+
export {
|
|
4
|
+
createSvelteHarness,
|
|
5
|
+
loadComponent,
|
|
6
|
+
type ISvelteHarness,
|
|
7
|
+
} from '../../../sqlite/src/svelte/svelte-compile.test-helper';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/svelte/runes/create-permission-hook';
|
|
2
|
+
import {
|
|
3
|
+
getCameraPermissionsAsync,
|
|
4
|
+
requestCameraPermissionsAsync,
|
|
5
|
+
} from '../core';
|
|
6
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
7
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
8
|
+
|
|
9
|
+
export type IUseCameraPermissionsResult = {
|
|
10
|
+
readonly status: ICameraPermissionResponse | null;
|
|
11
|
+
requestPermission: () => Promise<ICameraPermissionResponse>;
|
|
12
|
+
getPermission: () => Promise<ICameraPermissionResponse>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const usePermission = createPermissionHook({
|
|
16
|
+
getMethod: getCameraPermissionsAsync,
|
|
17
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// Svelte twin of `../react`'s `useCameraPermissions`
|
|
21
|
+
export function useCameraPermissions(
|
|
22
|
+
behavior?: IPermissionHookBehavior,
|
|
23
|
+
): IUseCameraPermissionsResult {
|
|
24
|
+
return usePermission(behavior);
|
|
25
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/svelte/runes/create-permission-hook';
|
|
2
|
+
import {
|
|
3
|
+
mediaLibraryPermissionMethods,
|
|
4
|
+
splitMediaLibraryPermissionOptions,
|
|
5
|
+
type IMediaLibraryPermissionMethodOptions,
|
|
6
|
+
} from '../core/media-library-permission-api';
|
|
7
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
8
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
9
|
+
|
|
10
|
+
export type IUseMediaLibraryPermissionsOptions =
|
|
11
|
+
IMediaLibraryPermissionMethodOptions;
|
|
12
|
+
|
|
13
|
+
export type IUseMediaLibraryPermissionsResult = {
|
|
14
|
+
readonly status: IMediaLibraryPermissionResponse | null;
|
|
15
|
+
requestPermission: () => Promise<IMediaLibraryPermissionResponse>;
|
|
16
|
+
getPermission: () => Promise<IMediaLibraryPermissionResponse>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
20
|
+
|
|
21
|
+
// Svelte twin of `../react`'s `useMediaLibraryPermissions`
|
|
22
|
+
export function useMediaLibraryPermissions(
|
|
23
|
+
options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>,
|
|
24
|
+
): IUseMediaLibraryPermissionsResult {
|
|
25
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
26
|
+
}
|
package/src/vue/index.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/vue';
|
|
2
|
+
import {
|
|
3
|
+
getCameraPermissionsAsync,
|
|
4
|
+
requestCameraPermissionsAsync,
|
|
5
|
+
} from '../core';
|
|
6
|
+
import type { ICameraPermissionResponse } from '../core';
|
|
7
|
+
import type { IPermissionHookBehavior } from '@symbiote-native/engine';
|
|
8
|
+
import type { Ref } from '@vue/runtime-core';
|
|
9
|
+
|
|
10
|
+
export type IUseCameraPermissionsResult = [
|
|
11
|
+
Ref<ICameraPermissionResponse | null>,
|
|
12
|
+
() => Promise<ICameraPermissionResponse>,
|
|
13
|
+
() => Promise<ICameraPermissionResponse>,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const usePermission = createPermissionHook({
|
|
17
|
+
getMethod: getCameraPermissionsAsync,
|
|
18
|
+
requestMethod: requestCameraPermissionsAsync,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Vue twin of `../react`'s `useCameraPermissions`
|
|
22
|
+
export function useCameraPermissions(
|
|
23
|
+
options?: IPermissionHookBehavior,
|
|
24
|
+
): IUseCameraPermissionsResult {
|
|
25
|
+
return usePermission(options);
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createPermissionHook } from '@symbiote-native/vue';
|
|
2
|
+
import type { IMediaLibraryPermissionResponse } from '../core';
|
|
3
|
+
import {
|
|
4
|
+
mediaLibraryPermissionMethods,
|
|
5
|
+
splitMediaLibraryPermissionOptions,
|
|
6
|
+
type IMediaLibraryPermissionMethodOptions,
|
|
7
|
+
} from '../core/media-library-permission-api';
|
|
8
|
+
import type { IPermissionHookOptions } from '@symbiote-native/engine';
|
|
9
|
+
import type { Ref } from '@vue/runtime-core';
|
|
10
|
+
|
|
11
|
+
export type IUseMediaLibraryPermissionsOptions =
|
|
12
|
+
IMediaLibraryPermissionMethodOptions;
|
|
13
|
+
|
|
14
|
+
export type IUseMediaLibraryPermissionsResult = [
|
|
15
|
+
Ref<IMediaLibraryPermissionResponse | null>,
|
|
16
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
17
|
+
() => Promise<IMediaLibraryPermissionResponse>,
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const usePermission = createPermissionHook(mediaLibraryPermissionMethods);
|
|
21
|
+
|
|
22
|
+
// Vue twin of `../react`'s `useMediaLibraryPermissions`
|
|
23
|
+
export function useMediaLibraryPermissions(
|
|
24
|
+
options?: IPermissionHookOptions<IUseMediaLibraryPermissionsOptions>,
|
|
25
|
+
): IUseMediaLibraryPermissionsResult {
|
|
26
|
+
return usePermission(...splitMediaLibraryPermissionOptions(options));
|
|
27
|
+
}
|