capacitor-camera-multicapture 0.12.2

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.
Files changed (76) hide show
  1. package/CameraMultiCapture.podspec +17 -0
  2. package/LICENSE +21 -0
  3. package/Package.swift +28 -0
  4. package/README.md +551 -0
  5. package/android/build.gradle +69 -0
  6. package/android/src/main/AndroidManifest.xml +6 -0
  7. package/android/src/main/java/dev/hemang/cameramulticapture/CameraConfig.java +45 -0
  8. package/android/src/main/java/dev/hemang/cameramulticapture/CameraConfigMapper.java +98 -0
  9. package/android/src/main/java/dev/hemang/cameramulticapture/CameraMultiCapture.java +10 -0
  10. package/android/src/main/java/dev/hemang/cameramulticapture/CameraMultiCapturePlugin.java +1340 -0
  11. package/android/src/main/java/dev/hemang/cameramulticapture/ExifWrapper.java +108 -0
  12. package/android/src/main/java/dev/hemang/cameramulticapture/GenericUploadWorker.java +173 -0
  13. package/android/src/main/java/dev/hemang/cameramulticapture/ImageUtils.java +215 -0
  14. package/android/src/main/java/dev/hemang/cameramulticapture/PluginVersion.java +6 -0
  15. package/android/src/main/java/dev/hemang/cameramulticapture/ThumbnailGenerator.java +48 -0
  16. package/android/src/main/res/.gitkeep +0 -0
  17. package/dist/esm/controllers/camera-controller.d.ts +127 -0
  18. package/dist/esm/controllers/camera-controller.js +388 -0
  19. package/dist/esm/controllers/camera-controller.js.map +1 -0
  20. package/dist/esm/controllers/gallery-controller.d.ts +66 -0
  21. package/dist/esm/controllers/gallery-controller.js +333 -0
  22. package/dist/esm/controllers/gallery-controller.js.map +1 -0
  23. package/dist/esm/definitions.d.ts +372 -0
  24. package/dist/esm/definitions.js +6 -0
  25. package/dist/esm/definitions.js.map +1 -0
  26. package/dist/esm/index.d.ts +5 -0
  27. package/dist/esm/index.js +6 -0
  28. package/dist/esm/index.js.map +1 -0
  29. package/dist/esm/overlay-manager.d.ts +124 -0
  30. package/dist/esm/overlay-manager.js +732 -0
  31. package/dist/esm/overlay-manager.js.map +1 -0
  32. package/dist/esm/overlay.d.ts +2 -0
  33. package/dist/esm/overlay.js +39 -0
  34. package/dist/esm/overlay.js.map +1 -0
  35. package/dist/esm/registration.d.ts +5 -0
  36. package/dist/esm/registration.js +8 -0
  37. package/dist/esm/registration.js.map +1 -0
  38. package/dist/esm/types/ui-types.d.ts +78 -0
  39. package/dist/esm/types/ui-types.js +2 -0
  40. package/dist/esm/types/ui-types.js.map +1 -0
  41. package/dist/esm/ui/capture-gesture-handler.d.ts +15 -0
  42. package/dist/esm/ui/capture-gesture-handler.js +87 -0
  43. package/dist/esm/ui/capture-gesture-handler.js.map +1 -0
  44. package/dist/esm/ui/default-styles.d.ts +27 -0
  45. package/dist/esm/ui/default-styles.js +134 -0
  46. package/dist/esm/ui/default-styles.js.map +1 -0
  47. package/dist/esm/ui/image-editor.d.ts +10 -0
  48. package/dist/esm/ui/image-editor.js +103 -0
  49. package/dist/esm/ui/image-editor.js.map +1 -0
  50. package/dist/esm/ui/layout-manager.d.ts +42 -0
  51. package/dist/esm/ui/layout-manager.js +199 -0
  52. package/dist/esm/ui/layout-manager.js.map +1 -0
  53. package/dist/esm/ui/media-viewer.d.ts +2 -0
  54. package/dist/esm/ui/media-viewer.js +267 -0
  55. package/dist/esm/ui/media-viewer.js.map +1 -0
  56. package/dist/esm/ui/pinch-zoom-handler.d.ts +37 -0
  57. package/dist/esm/ui/pinch-zoom-handler.js +118 -0
  58. package/dist/esm/ui/pinch-zoom-handler.js.map +1 -0
  59. package/dist/esm/ui/ui-factory.d.ts +39 -0
  60. package/dist/esm/ui/ui-factory.js +272 -0
  61. package/dist/esm/ui/ui-factory.js.map +1 -0
  62. package/dist/esm/version.d.ts +1 -0
  63. package/dist/esm/version.js +3 -0
  64. package/dist/esm/version.js.map +1 -0
  65. package/dist/esm/web.d.ts +69 -0
  66. package/dist/esm/web.js +122 -0
  67. package/dist/esm/web.js.map +1 -0
  68. package/dist/plugin.cjs.js +6274 -0
  69. package/dist/plugin.cjs.js.map +1 -0
  70. package/dist/plugin.js +6276 -0
  71. package/dist/plugin.js.map +1 -0
  72. package/ios/Sources/CameraMultiCapturePlugin/CameraMultiCapture.swift +8 -0
  73. package/ios/Sources/CameraMultiCapturePlugin/CameraMultiCapturePlugin.swift +1551 -0
  74. package/ios/Sources/CameraMultiCapturePlugin/PluginVersion.swift +2 -0
  75. package/ios/Tests/CameraMultiCapturePluginTests/CameraMultiCapturePluginTests.swift +15 -0
  76. package/package.json +93 -0
@@ -0,0 +1,122 @@
1
+ import { WebPlugin } from '@capacitor/core';
2
+ import { PLUGIN_VERSION } from './version';
3
+ export class CameraMultiCaptureWeb extends WebPlugin {
4
+ async capture() {
5
+ console.warn('[CameraMultiCapture] capture() not available on web.');
6
+ return { value: { uri: '', thumbnail: '', webPath: '' } };
7
+ }
8
+ async stop() {
9
+ console.warn('[CameraMultiCapture] stop() not available on web.');
10
+ }
11
+ async start(_options) {
12
+ console.warn('[CameraMultiCapture] start() not available on web. Use initialize instead.');
13
+ return { images: [], videos: [], cancelled: true };
14
+ }
15
+ async startVideoRecording() {
16
+ console.warn('[CameraMultiCapture] startVideoRecording() not available on web.');
17
+ }
18
+ async stopVideoRecording() {
19
+ console.warn('[CameraMultiCapture] stopVideoRecording() not available on web.');
20
+ return { value: { uri: '', thumbnail: '', webPath: '', duration: 0 } };
21
+ }
22
+ async switchCamera() {
23
+ console.warn('[CameraMultiCapture] switchCamera() not available on web.');
24
+ }
25
+ async setZoom(_options) {
26
+ console.warn('[CameraMultiCapture] setZoom() not available on web.');
27
+ }
28
+ async getFlash() {
29
+ console.warn('[CameraMultiCapture] getFlash() not available on web.');
30
+ return { flashMode: 'off' };
31
+ }
32
+ async setFlash(_options) {
33
+ console.warn('[CameraMultiCapture] setFlash() not available on web.');
34
+ }
35
+ async setTorch(_options) {
36
+ console.warn('[CameraMultiCapture] setTorch() not available on web.');
37
+ }
38
+ async getTorch() {
39
+ console.warn('[CameraMultiCapture] getTorch() not available on web.');
40
+ return { enabled: false };
41
+ }
42
+ async getAvailableZoomLevels() {
43
+ console.warn('[CameraMultiCapture] getAvailableZoomLevels() not available on web.');
44
+ // Return default values for web
45
+ return {
46
+ minZoom: 1.0,
47
+ maxZoom: 4.0,
48
+ presetLevels: [1, 2, 3, 4]
49
+ };
50
+ }
51
+ async updatePreviewRect(_options) {
52
+ console.warn('[CameraMultiCapture] updatePreviewRect() not available on web.');
53
+ }
54
+ async getAvailableCameras() {
55
+ console.warn('[CameraMultiCapture] getAvailableCameras() not available on web.');
56
+ return {
57
+ hasUltrawide: false,
58
+ hasWide: true,
59
+ hasTelephoto: false,
60
+ wideZoomFactor: 1.0
61
+ };
62
+ }
63
+ async switchToPhysicalCamera(_options) {
64
+ console.warn('[CameraMultiCapture] switchToPhysicalCamera() not available on web.');
65
+ }
66
+ async checkPermissions() {
67
+ if (typeof navigator === 'undefined' || !navigator.permissions) {
68
+ throw this.unavailable('Permissions API not available in this browser.');
69
+ }
70
+ try {
71
+ // Check camera permission
72
+ const cameraResult = await navigator.permissions.query({ name: 'camera' });
73
+ return {
74
+ camera: cameraResult.state,
75
+ audio: 'granted'
76
+ };
77
+ }
78
+ catch (error) {
79
+ // If permission query fails, assume we need to prompt
80
+ return {
81
+ camera: 'prompt',
82
+ audio: 'granted'
83
+ };
84
+ }
85
+ }
86
+ async requestPermissions() {
87
+ if (typeof navigator === 'undefined' || !navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
88
+ throw this.unavailable('Camera API not available in this browser.');
89
+ }
90
+ try {
91
+ // Request camera access - this will prompt the user
92
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true });
93
+ // Stop the stream immediately since we only needed it for permission
94
+ stream.getTracks().forEach(track => track.stop());
95
+ // After successful camera access, check permissions again
96
+ return await this.checkPermissions();
97
+ }
98
+ catch (error) {
99
+ // Permission was denied or error occurred
100
+ console.error('Camera permission request failed:', error);
101
+ // Return denied state
102
+ return {
103
+ camera: 'denied',
104
+ audio: 'granted'
105
+ };
106
+ }
107
+ }
108
+ async queueBackgroundUpload(_options) {
109
+ console.warn('[CameraMultiCapture] queueBackgroundUpload() not available on web.');
110
+ return { jobId: 'web-not-supported' };
111
+ }
112
+ async getUploadStatus(_options) {
113
+ console.warn('[CameraMultiCapture] getUploadStatus() not available on web.');
114
+ return { status: 'failed', error: 'Web platform not supported' };
115
+ }
116
+ async getVersion() {
117
+ return { version: PLUGIN_VERSION };
118
+ }
119
+ }
120
+ const CameraMultiCapture = new CameraMultiCaptureWeb();
121
+ export { CameraMultiCapture };
122
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport type { CameraImageData, CameraMultiCapturePlugin, CameraOverlayOptions, CameraOverlayResult, CameraPreviewRect, CameraVideoData, PermissionStatus } from './definitions';\nimport { PLUGIN_VERSION } from './version';\n\nexport class CameraMultiCaptureWeb extends WebPlugin implements CameraMultiCapturePlugin {\n async capture(): Promise<{ value: CameraImageData }> {\n console.warn('[CameraMultiCapture] capture() not available on web.');\n return { value: { uri: '', thumbnail: '', webPath: '' } };\n }\n\n async stop(): Promise<void> {\n console.warn('[CameraMultiCapture] stop() not available on web.');\n }\n\n async start(_options?: CameraOverlayOptions): Promise<CameraOverlayResult> {\n console.warn('[CameraMultiCapture] start() not available on web. Use initialize instead.');\n return { images: [], videos: [], cancelled: true };\n }\n\n async startVideoRecording(): Promise<void> {\n console.warn('[CameraMultiCapture] startVideoRecording() not available on web.');\n }\n\n async stopVideoRecording(): Promise<{ value: CameraVideoData }> {\n console.warn('[CameraMultiCapture] stopVideoRecording() not available on web.');\n return { value: { uri: '', thumbnail: '', webPath: '', duration: 0 } };\n }\n\n async switchCamera(): Promise<void> {\n console.warn('[CameraMultiCapture] switchCamera() not available on web.');\n }\n\n async setZoom(_options: { zoom: number }): Promise<void> {\n console.warn('[CameraMultiCapture] setZoom() not available on web.');\n }\n\n async getFlash(): Promise<{ flashMode: 'on' | 'off' | 'auto' }> {\n console.warn('[CameraMultiCapture] getFlash() not available on web.');\n return { flashMode: 'off' };\n }\n\n async setFlash(_options: { flashMode: 'on' | 'off' | 'auto' }): Promise<void> {\n console.warn('[CameraMultiCapture] setFlash() not available on web.');\n }\n\n async setTorch(_options: { enabled: boolean }): Promise<void> {\n console.warn('[CameraMultiCapture] setTorch() not available on web.');\n }\n\n async getTorch(): Promise<{ enabled: boolean }> {\n console.warn('[CameraMultiCapture] getTorch() not available on web.');\n return { enabled: false };\n }\n\n async getAvailableZoomLevels(): Promise<{ minZoom: number; maxZoom: number; presetLevels: number[] }> {\n console.warn('[CameraMultiCapture] getAvailableZoomLevels() not available on web.');\n // Return default values for web\n return {\n minZoom: 1.0,\n maxZoom: 4.0,\n presetLevels: [1, 2, 3, 4]\n };\n }\n\n async updatePreviewRect(_options: CameraPreviewRect): Promise<void> {\n console.warn('[CameraMultiCapture] updatePreviewRect() not available on web.');\n }\n\n async getAvailableCameras(): Promise<{\n hasUltrawide: boolean;\n hasWide: boolean;\n hasTelephoto: boolean;\n ultrawideZoomFactor?: number;\n wideZoomFactor: number;\n telephotoZoomFactor?: number;\n }> {\n console.warn('[CameraMultiCapture] getAvailableCameras() not available on web.');\n return {\n hasUltrawide: false,\n hasWide: true,\n hasTelephoto: false,\n wideZoomFactor: 1.0\n };\n }\n\n async switchToPhysicalCamera(_options: { zoomFactor: number }): Promise<void> {\n console.warn('[CameraMultiCapture] switchToPhysicalCamera() not available on web.');\n }\n\n async checkPermissions(): Promise<PermissionStatus> {\n if (typeof navigator === 'undefined' || !navigator.permissions) {\n throw this.unavailable('Permissions API not available in this browser.');\n }\n\n try {\n // Check camera permission\n const cameraResult = await navigator.permissions.query({ name: 'camera' as PermissionName });\n \n return {\n camera: cameraResult.state as 'granted' | 'denied' | 'prompt',\n audio: 'granted'\n };\n } catch (error) {\n // If permission query fails, assume we need to prompt\n return {\n camera: 'prompt',\n audio: 'granted'\n };\n }\n }\n\n async requestPermissions(): Promise<PermissionStatus> {\n if (typeof navigator === 'undefined' || !navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n throw this.unavailable('Camera API not available in this browser.');\n }\n\n try {\n // Request camera access - this will prompt the user\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n \n // Stop the stream immediately since we only needed it for permission\n stream.getTracks().forEach(track => track.stop());\n \n // After successful camera access, check permissions again\n return await this.checkPermissions();\n } catch (error) {\n // Permission was denied or error occurred\n console.error('Camera permission request failed:', error);\n \n // Return denied state\n return {\n camera: 'denied',\n audio: 'granted'\n };\n }\n }\n\n async queueBackgroundUpload(_options: {\n imageUri: string;\n uploadEndpoint: string;\n headers: Record<string, string>;\n formData?: Record<string, string>;\n method?: 'POST' | 'PUT';\n deleteAfterUpload?: boolean;\n }): Promise<{ jobId: string }> {\n console.warn('[CameraMultiCapture] queueBackgroundUpload() not available on web.');\n return { jobId: 'web-not-supported' };\n }\n\n async getUploadStatus(_options: { jobId: string }): Promise<{\n status: 'pending' | 'uploading' | 'completed' | 'failed';\n error?: string;\n }> {\n console.warn('[CameraMultiCapture] getUploadStatus() not available on web.');\n return { status: 'failed', error: 'Web platform not supported' };\n }\n\n async getVersion(): Promise<{ version: string }> {\n return { version: PLUGIN_VERSION };\n }\n}\n\nconst CameraMultiCapture = new CameraMultiCaptureWeb();\nexport { CameraMultiCapture };\n"]}