@capgo/camera-preview 7.4.0-beta.6 → 7.4.0-beta.7
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/README.md +40 -6
- package/android/.gradle/8.14.2/checksums/checksums.lock +0 -0
- package/android/.gradle/8.14.2/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.14.2/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.14.2/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.14.2/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/8.14.2/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.14.2/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
- package/android/.gradle/config.properties +2 -0
- package/android/.idea/AndroidProjectSystem.xml +6 -0
- package/android/.idea/caches/deviceStreaming.xml +811 -0
- package/android/.idea/compiler.xml +6 -0
- package/android/.idea/gradle.xml +18 -0
- package/android/.idea/migrations.xml +10 -0
- package/android/.idea/misc.xml +10 -0
- package/android/.idea/runConfigurations.xml +17 -0
- package/android/.idea/vcs.xml +6 -0
- package/android/.idea/workspace.xml +55 -0
- package/android/local.properties +8 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java +45 -18
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraXView.java +54 -9
- package/dist/docs.json +56 -4
- package/dist/esm/definitions.d.ts +23 -4
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +9 -3
- package/dist/esm/web.js +13 -7
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +13 -7
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +13 -7
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapgoCameraPreview/CameraController.swift +35 -13
- package/ios/Sources/CapgoCameraPreview/Plugin.swift +101 -26
- package/package.json +1 -1
- package/android/.gradle/8.14.2/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/file-system.probe +0 -0
package/dist/esm/web.js
CHANGED
|
@@ -63,7 +63,7 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
63
63
|
if (options.y) {
|
|
64
64
|
this.videoElement.style.top = `${options.y}px`;
|
|
65
65
|
}
|
|
66
|
-
if (options.aspectRatio
|
|
66
|
+
if (options.aspectRatio) {
|
|
67
67
|
const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);
|
|
68
68
|
const ratio = widthRatio / heightRatio;
|
|
69
69
|
if (options.width) {
|
|
@@ -427,9 +427,6 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
427
427
|
if (!video) {
|
|
428
428
|
throw new Error("camera is not running");
|
|
429
429
|
}
|
|
430
|
-
if (video.style.objectFit === 'cover') {
|
|
431
|
-
return { aspectRatio: 'fill' };
|
|
432
|
-
}
|
|
433
430
|
const width = video.offsetWidth;
|
|
434
431
|
const height = video.offsetHeight;
|
|
435
432
|
if (width && height) {
|
|
@@ -441,15 +438,15 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
441
438
|
return { aspectRatio: '16:9' };
|
|
442
439
|
}
|
|
443
440
|
}
|
|
444
|
-
// Default to
|
|
445
|
-
return { aspectRatio: '
|
|
441
|
+
// Default to 4:3 if no specific aspect ratio is matched
|
|
442
|
+
return { aspectRatio: '4:3' };
|
|
446
443
|
}
|
|
447
444
|
async setAspectRatio(options) {
|
|
448
445
|
const video = document.getElementById(DEFAULT_VIDEO_ID);
|
|
449
446
|
if (!video) {
|
|
450
447
|
throw new Error("camera is not running");
|
|
451
448
|
}
|
|
452
|
-
if (options.aspectRatio
|
|
449
|
+
if (options.aspectRatio) {
|
|
453
450
|
const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);
|
|
454
451
|
const ratio = widthRatio / heightRatio;
|
|
455
452
|
const width = video.offsetWidth;
|
|
@@ -506,5 +503,14 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
506
503
|
overlay.appendChild(svg);
|
|
507
504
|
return overlay;
|
|
508
505
|
}
|
|
506
|
+
async setGridMode(options) {
|
|
507
|
+
// Web implementation of grid mode would need to be implemented
|
|
508
|
+
// For now, just resolve as a no-op
|
|
509
|
+
console.warn(`Grid mode '${options.gridMode}' is not yet implemented for web platform`);
|
|
510
|
+
}
|
|
511
|
+
async getGridMode() {
|
|
512
|
+
// Web implementation - default to none
|
|
513
|
+
return { gridMode: 'none' };
|
|
514
|
+
}
|
|
509
515
|
}
|
|
510
516
|
//# sourceMappingURL=web.js.map
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from \"@capacitor/core\";\n\nimport type {\n CameraDevice,\n CameraOpacityOptions,\n CameraPreviewFlashMode,\n CameraPreviewOptions,\n CameraPreviewPictureOptions,\n CameraPreviewPlugin,\n CameraSampleOptions,\n FlashMode,\n LensInfo,\n} from \"./definitions\";\nimport { DeviceType } from \"./definitions\";\n\nconst DEFAULT_VIDEO_ID = \"capgo_video\";\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n /**\n * track which camera is used based on start options\n * used in capture\n */\n private isBackCamera = false;\n private currentDeviceId: string | null = null;\n private videoElement: HTMLVideoElement | null = null;\n private isStarted = false;\n\n constructor() {\n super();\n }\n\n async getSupportedPictureSizes(): Promise<any> {\n throw new Error(\n \"getSupportedPictureSizes not supported under the web platform\",\n );\n }\n\n async start(options: CameraPreviewOptions): Promise<{ width: number; height: number; x: number; y: number }> {\n if (this.isStarted) {\n throw new Error(\"camera already started\");\n }\n\n this.isBackCamera = true;\n this.isStarted = false;\n const parent = document.getElementById(options?.parent || \"\");\n const gridMode = options?.gridMode || \"none\";\n\n if (options.position) {\n this.isBackCamera = options.position === \"rear\";\n }\n\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.remove();\n }\n const container = options.parent ? document.getElementById(options.parent) : document.body;\n if (!container) {\n throw new Error(\"container not found\");\n }\n this.videoElement = document.createElement(\"video\");\n this.videoElement.id = DEFAULT_VIDEO_ID;\n this.videoElement.className = options.className || \"\";\n this.videoElement.playsInline = true;\n this.videoElement.muted = true;\n this.videoElement.autoplay = true;\n\n container.appendChild(this.videoElement);\n if (options.toBack) {\n this.videoElement.style.zIndex = \"-1\";\n }\n\n if (options.width) {\n this.videoElement.width = options.width;\n }\n\n if (options.height) {\n this.videoElement.height = options.height;\n }\n\n if (options.x) {\n this.videoElement.style.left = `${options.x}px`;\n }\n // Create and add grid overlay if needed\n if (gridMode !== \"none\") {\n const gridOverlay = this.createGridOverlay(gridMode);\n gridOverlay.id = \"camera-grid-overlay\";\n parent?.appendChild(gridOverlay);\n }\n\n if (options.y) {\n this.videoElement.style.top = `${options.y}px`;\n }\n\n if (options.aspectRatio && options.aspectRatio !== 'fill') {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n\n if (options.width) {\n this.videoElement.height = options.width / ratio;\n } else if (options.height) {\n this.videoElement.width = options.height * ratio;\n }\n } else {\n this.videoElement.style.objectFit = 'cover';\n }\n\n const constraints: MediaStreamConstraints = {\n video: {\n width: { ideal: this.videoElement.width || 640 },\n height: { ideal: this.videoElement.height || window.innerHeight },\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n },\n };\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (!stream) {\n throw new Error(\"could not acquire stream\");\n }\n if (!this.videoElement) {\n throw new Error(\"video element not found\");\n }\n this.videoElement.srcObject = stream;\n if (!this.isBackCamera) {\n this.videoElement.style.transform = \"scaleX(-1)\";\n }\n this.isStarted = true;\n return {\n width: this.videoElement.width,\n height: this.videoElement.height,\n x: this.videoElement.getBoundingClientRect().x,\n y: this.videoElement.getBoundingClientRect().y,\n };\n }\n\n private stopStream(stream: any) {\n if (stream) {\n const tracks = stream.getTracks();\n\n for (const track of tracks) track.stop();\n }\n }\n\n async stop(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (video) {\n video.pause();\n\n this.stopStream(video.srcObject);\n\n video.remove();\n this.isStarted = false;\n }\n\n // Remove grid overlay if it exists\n const gridOverlay = document.getElementById(\"camera-grid-overlay\");\n gridOverlay?.remove();\n }\n\n async capture(options: CameraPreviewPictureOptions): Promise<any> {\n return new Promise((resolve, reject) => {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n reject(new Error(\"camera is not running\"));\n return;\n }\n\n // video.width = video.offsetWidth;\n\n let base64EncodedImage;\n\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n // flip horizontally back camera isn't used\n if (!this.isBackCamera) {\n context?.translate(video.videoWidth, 0);\n context?.scale(-1, 1);\n }\n context?.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n if (options.saveToGallery) {\n // saveToGallery is not supported on web\n }\n\n if (options.withExifLocation) {\n // withExifLocation is not supported on web\n }\n\n if ((options.format || \"jpeg\") === \"jpeg\") {\n base64EncodedImage = canvas\n .toDataURL(\"image/jpeg\", (options.quality || 85) / 100.0)\n .replace(\"data:image/jpeg;base64,\", \"\");\n } else {\n base64EncodedImage = canvas\n .toDataURL(\"image/png\")\n .replace(\"data:image/png;base64,\", \"\");\n }\n }\n\n resolve({\n value: base64EncodedImage,\n exif: {},\n });\n });\n }\n\n async captureSample(_options: CameraSampleOptions): Promise<any> {\n return this.capture(_options);\n }\n\n async stopRecordVideo(): Promise<any> {\n throw new Error(\"stopRecordVideo not supported under the web platform\");\n }\n\n async startRecordVideo(_options: CameraPreviewOptions): Promise<any> {\n console.log(\"startRecordVideo\", _options);\n throw new Error(\"startRecordVideo not supported under the web platform\");\n }\n\n async getSupportedFlashModes(): Promise<{\n result: CameraPreviewFlashMode[];\n }> {\n throw new Error(\n \"getSupportedFlashModes not supported under the web platform\",\n );\n }\n\n async getHorizontalFov(): Promise<{\n result: any;\n }> {\n throw new Error(\"getHorizontalFov not supported under the web platform\");\n }\n\n async setFlashMode(_options: {\n flashMode: CameraPreviewFlashMode | string;\n }): Promise<void> {\n throw new Error(\n `setFlashMode not supported under the web platform${_options}`,\n );\n }\n\n async flip(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Toggle camera position\n this.isBackCamera = !this.isBackCamera;\n\n // Get new constraints\n const constraints: MediaStreamConstraints = {\n video: {\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update current device ID from the new stream\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n this.currentDeviceId = videoTrack.getSettings().deviceId || null;\n }\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to flip camera: ${error}`);\n }\n }\n\n async setOpacity(_options: CameraOpacityOptions): Promise<any> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!!video && !!_options.opacity)\n video.style.setProperty(\"opacity\", _options.opacity.toString());\n }\n\n async isRunning(): Promise<{ isRunning: boolean }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n return { isRunning: !!video && !!video.srcObject };\n }\n\n async getAvailableDevices(): Promise<{ devices: CameraDevice[] }> {\n if (!navigator.mediaDevices?.enumerateDevices) {\n throw new Error(\"getAvailableDevices not supported under the web platform\");\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter(device => device.kind === 'videoinput');\n\n // Group devices by position (front/back)\n const frontDevices: any[] = [];\n const backDevices: any[] = [];\n\n videoDevices.forEach((device, index) => {\n const label = device.label || `Camera ${index + 1}`;\n const labelLower = label.toLowerCase();\n\n // Determine device type based on label\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n\n const lensInfo = {\n deviceId: device.deviceId,\n label,\n deviceType,\n focalLength: 4.25,\n baseZoomRatio,\n minZoom: 1.0,\n maxZoom: 1.0\n };\n\n // Determine position and add to appropriate array\n if (labelLower.includes('back') || labelLower.includes('rear')) {\n backDevices.push(lensInfo);\n } else {\n frontDevices.push(lensInfo);\n }\n });\n\n const result: CameraDevice[] = [];\n\n if (frontDevices.length > 0) {\n result.push({\n deviceId: frontDevices[0].deviceId,\n label: \"Front Camera\",\n position: \"front\",\n lenses: frontDevices,\n isLogical: false,\n minZoom: Math.min(...frontDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...frontDevices.map(d => d.maxZoom))\n });\n }\n\n if (backDevices.length > 0) {\n result.push({\n deviceId: backDevices[0].deviceId,\n label: \"Back Camera\",\n position: \"rear\",\n lenses: backDevices,\n isLogical: false,\n minZoom: Math.min(...backDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...backDevices.map(d => d.maxZoom))\n });\n }\n\n return { devices: result };\n }\n\n async getZoom(): Promise<{ min: number; max: number; current: number; lens: LensInfo }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n const settings = videoTrack.getSettings() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n // Get current device info to determine lens type\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (this.currentDeviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === this.currentDeviceId);\n if (device) {\n const labelLower = device.label.toLowerCase();\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n }\n }\n\n const currentZoom = settings.zoom || 1;\n const lensInfo: LensInfo = {\n focalLength: 4.25,\n deviceType,\n baseZoomRatio,\n digitalZoom: currentZoom / baseZoomRatio\n };\n\n return {\n min: capabilities.zoom.min || 1,\n max: capabilities.zoom.max || 1,\n current: currentZoom,\n lens: lensInfo,\n };\n }\n\n async setZoom(options: { level: number; ramp?: boolean }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n const zoomLevel = Math.max(\n capabilities.zoom.min || 1,\n Math.min(capabilities.zoom.max || 1, options.level)\n );\n\n try {\n await videoTrack.applyConstraints({\n advanced: [{ zoom: zoomLevel } as any]\n });\n } catch (error) {\n throw new Error(`Failed to set zoom: ${error}`);\n }\n }\n\n async getFlashMode(): Promise<{ flashMode: FlashMode }> {\n throw new Error(\"getFlashMode not supported under the web platform\");\n }\n\n async getDeviceId(): Promise<{ deviceId: string }> {\n return { deviceId: this.currentDeviceId || \"\" };\n }\n\n async setDeviceId(options: { deviceId: string }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Update current device ID\n this.currentDeviceId = options.deviceId;\n\n // Get new constraints with specific device ID\n const constraints: MediaStreamConstraints = {\n video: {\n deviceId: { exact: options.deviceId },\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n // Try to determine camera position from device\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === options.deviceId);\n this.isBackCamera = device?.label.toLowerCase().includes('back') || device?.label.toLowerCase().includes('rear') || false;\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to swap to device ${options.deviceId}: ${error}`);\n }\n }\n\n async getAspectRatio(): Promise<{ aspectRatio: '4:3' | '16:9' | 'fill' }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n if (video.style.objectFit === 'cover') {\n return { aspectRatio: 'fill' };\n }\n\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n\n if (width && height) {\n const ratio = width / height;\n if (Math.abs(ratio - (4 / 3)) < 0.01) {\n return { aspectRatio: '4:3' };\n }\n if (Math.abs(ratio - (16 / 9)) < 0.01) {\n return { aspectRatio: '16:9' };\n }\n }\n\n // Default to fill if no specific aspect ratio is matched\n return { aspectRatio: 'fill' };\n }\n\n async setAspectRatio(options: { aspectRatio: '4:3' | '16:9' | 'fill' }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n if (options.aspectRatio && options.aspectRatio !== 'fill') {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n\n if (width) {\n video.height = width / ratio;\n } else if (height) {\n video.width = height * ratio;\n }\n } else {\n video.style.objectFit = 'cover';\n }\n }\n\n private createGridOverlay(gridMode: string): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.top = \"0\";\n overlay.style.left = \"0\";\n overlay.style.width = \"100%\";\n overlay.style.height = \"100%\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"10\";\n\n const divisions = gridMode === \"3x3\" ? 3 : 4;\n\n // Create SVG for grid lines\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.position = \"absolute\";\n svg.style.top = \"0\";\n svg.style.left = \"0\";\n\n // Create grid lines\n for (let i = 1; i < divisions; i++) {\n // Vertical lines\n const verticalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n verticalLine.setAttribute(\"x1\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y1\", \"0%\");\n verticalLine.setAttribute(\"x2\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y2\", \"100%\");\n verticalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n verticalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(verticalLine);\n\n // Horizontal lines\n const horizontalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n horizontalLine.setAttribute(\"x1\", \"0%\");\n horizontalLine.setAttribute(\"y1\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"x2\", \"100%\");\n horizontalLine.setAttribute(\"y2\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n horizontalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(horizontalLine);\n }\n\n overlay.appendChild(svg);\n return overlay;\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from \"@capacitor/core\";\n\nimport type {\n CameraDevice,\n CameraOpacityOptions,\n CameraPreviewFlashMode,\n CameraPreviewOptions,\n CameraPreviewPictureOptions,\n CameraPreviewPlugin,\n CameraSampleOptions,\n GridMode,\n FlashMode,\n LensInfo,\n} from \"./definitions\";\nimport { DeviceType } from \"./definitions\";\n\nconst DEFAULT_VIDEO_ID = \"capgo_video\";\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n /**\n * track which camera is used based on start options\n * used in capture\n */\n private isBackCamera = false;\n private currentDeviceId: string | null = null;\n private videoElement: HTMLVideoElement | null = null;\n private isStarted = false;\n\n constructor() {\n super();\n }\n\n async getSupportedPictureSizes(): Promise<any> {\n throw new Error(\n \"getSupportedPictureSizes not supported under the web platform\",\n );\n }\n\n async start(options: CameraPreviewOptions): Promise<{ width: number; height: number; x: number; y: number }> {\n if (this.isStarted) {\n throw new Error(\"camera already started\");\n }\n\n this.isBackCamera = true;\n this.isStarted = false;\n const parent = document.getElementById(options?.parent || \"\");\n const gridMode = options?.gridMode || \"none\";\n\n if (options.position) {\n this.isBackCamera = options.position === \"rear\";\n }\n\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.remove();\n }\n const container = options.parent ? document.getElementById(options.parent) : document.body;\n if (!container) {\n throw new Error(\"container not found\");\n }\n this.videoElement = document.createElement(\"video\");\n this.videoElement.id = DEFAULT_VIDEO_ID;\n this.videoElement.className = options.className || \"\";\n this.videoElement.playsInline = true;\n this.videoElement.muted = true;\n this.videoElement.autoplay = true;\n\n container.appendChild(this.videoElement);\n if (options.toBack) {\n this.videoElement.style.zIndex = \"-1\";\n }\n\n if (options.width) {\n this.videoElement.width = options.width;\n }\n\n if (options.height) {\n this.videoElement.height = options.height;\n }\n\n if (options.x) {\n this.videoElement.style.left = `${options.x}px`;\n }\n // Create and add grid overlay if needed\n if (gridMode !== \"none\") {\n const gridOverlay = this.createGridOverlay(gridMode);\n gridOverlay.id = \"camera-grid-overlay\";\n parent?.appendChild(gridOverlay);\n }\n\n if (options.y) {\n this.videoElement.style.top = `${options.y}px`;\n }\n\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n\n if (options.width) {\n this.videoElement.height = options.width / ratio;\n } else if (options.height) {\n this.videoElement.width = options.height * ratio;\n }\n } else {\n this.videoElement.style.objectFit = 'cover';\n }\n\n const constraints: MediaStreamConstraints = {\n video: {\n width: { ideal: this.videoElement.width || 640 },\n height: { ideal: this.videoElement.height || window.innerHeight },\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n },\n };\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (!stream) {\n throw new Error(\"could not acquire stream\");\n }\n if (!this.videoElement) {\n throw new Error(\"video element not found\");\n }\n this.videoElement.srcObject = stream;\n if (!this.isBackCamera) {\n this.videoElement.style.transform = \"scaleX(-1)\";\n }\n this.isStarted = true;\n return {\n width: this.videoElement.width,\n height: this.videoElement.height,\n x: this.videoElement.getBoundingClientRect().x,\n y: this.videoElement.getBoundingClientRect().y,\n };\n }\n\n private stopStream(stream: any) {\n if (stream) {\n const tracks = stream.getTracks();\n\n for (const track of tracks) track.stop();\n }\n }\n\n async stop(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (video) {\n video.pause();\n\n this.stopStream(video.srcObject);\n\n video.remove();\n this.isStarted = false;\n }\n\n // Remove grid overlay if it exists\n const gridOverlay = document.getElementById(\"camera-grid-overlay\");\n gridOverlay?.remove();\n }\n\n async capture(options: CameraPreviewPictureOptions): Promise<any> {\n return new Promise((resolve, reject) => {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n reject(new Error(\"camera is not running\"));\n return;\n }\n\n // video.width = video.offsetWidth;\n\n let base64EncodedImage;\n\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n // flip horizontally back camera isn't used\n if (!this.isBackCamera) {\n context?.translate(video.videoWidth, 0);\n context?.scale(-1, 1);\n }\n context?.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n if (options.saveToGallery) {\n // saveToGallery is not supported on web\n }\n\n if (options.withExifLocation) {\n // withExifLocation is not supported on web\n }\n\n if ((options.format || \"jpeg\") === \"jpeg\") {\n base64EncodedImage = canvas\n .toDataURL(\"image/jpeg\", (options.quality || 85) / 100.0)\n .replace(\"data:image/jpeg;base64,\", \"\");\n } else {\n base64EncodedImage = canvas\n .toDataURL(\"image/png\")\n .replace(\"data:image/png;base64,\", \"\");\n }\n }\n\n resolve({\n value: base64EncodedImage,\n exif: {},\n });\n });\n }\n\n async captureSample(_options: CameraSampleOptions): Promise<any> {\n return this.capture(_options);\n }\n\n async stopRecordVideo(): Promise<any> {\n throw new Error(\"stopRecordVideo not supported under the web platform\");\n }\n\n async startRecordVideo(_options: CameraPreviewOptions): Promise<any> {\n console.log(\"startRecordVideo\", _options);\n throw new Error(\"startRecordVideo not supported under the web platform\");\n }\n\n async getSupportedFlashModes(): Promise<{\n result: CameraPreviewFlashMode[];\n }> {\n throw new Error(\n \"getSupportedFlashModes not supported under the web platform\",\n );\n }\n\n async getHorizontalFov(): Promise<{\n result: any;\n }> {\n throw new Error(\"getHorizontalFov not supported under the web platform\");\n }\n\n async setFlashMode(_options: {\n flashMode: CameraPreviewFlashMode | string;\n }): Promise<void> {\n throw new Error(\n `setFlashMode not supported under the web platform${_options}`,\n );\n }\n\n async flip(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Toggle camera position\n this.isBackCamera = !this.isBackCamera;\n\n // Get new constraints\n const constraints: MediaStreamConstraints = {\n video: {\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update current device ID from the new stream\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n this.currentDeviceId = videoTrack.getSettings().deviceId || null;\n }\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to flip camera: ${error}`);\n }\n }\n\n async setOpacity(_options: CameraOpacityOptions): Promise<any> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!!video && !!_options.opacity)\n video.style.setProperty(\"opacity\", _options.opacity.toString());\n }\n\n async isRunning(): Promise<{ isRunning: boolean }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n return { isRunning: !!video && !!video.srcObject };\n }\n\n async getAvailableDevices(): Promise<{ devices: CameraDevice[] }> {\n if (!navigator.mediaDevices?.enumerateDevices) {\n throw new Error(\"getAvailableDevices not supported under the web platform\");\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter(device => device.kind === 'videoinput');\n\n // Group devices by position (front/back)\n const frontDevices: any[] = [];\n const backDevices: any[] = [];\n\n videoDevices.forEach((device, index) => {\n const label = device.label || `Camera ${index + 1}`;\n const labelLower = label.toLowerCase();\n\n // Determine device type based on label\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n\n const lensInfo = {\n deviceId: device.deviceId,\n label,\n deviceType,\n focalLength: 4.25,\n baseZoomRatio,\n minZoom: 1.0,\n maxZoom: 1.0\n };\n\n // Determine position and add to appropriate array\n if (labelLower.includes('back') || labelLower.includes('rear')) {\n backDevices.push(lensInfo);\n } else {\n frontDevices.push(lensInfo);\n }\n });\n\n const result: CameraDevice[] = [];\n\n if (frontDevices.length > 0) {\n result.push({\n deviceId: frontDevices[0].deviceId,\n label: \"Front Camera\",\n position: \"front\",\n lenses: frontDevices,\n isLogical: false,\n minZoom: Math.min(...frontDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...frontDevices.map(d => d.maxZoom))\n });\n }\n\n if (backDevices.length > 0) {\n result.push({\n deviceId: backDevices[0].deviceId,\n label: \"Back Camera\",\n position: \"rear\",\n lenses: backDevices,\n isLogical: false,\n minZoom: Math.min(...backDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...backDevices.map(d => d.maxZoom))\n });\n }\n\n return { devices: result };\n }\n\n async getZoom(): Promise<{ min: number; max: number; current: number; lens: LensInfo }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n const settings = videoTrack.getSettings() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n // Get current device info to determine lens type\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (this.currentDeviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === this.currentDeviceId);\n if (device) {\n const labelLower = device.label.toLowerCase();\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n }\n }\n\n const currentZoom = settings.zoom || 1;\n const lensInfo: LensInfo = {\n focalLength: 4.25,\n deviceType,\n baseZoomRatio,\n digitalZoom: currentZoom / baseZoomRatio\n };\n\n return {\n min: capabilities.zoom.min || 1,\n max: capabilities.zoom.max || 1,\n current: currentZoom,\n lens: lensInfo,\n };\n }\n\n async setZoom(options: { level: number; ramp?: boolean }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n const zoomLevel = Math.max(\n capabilities.zoom.min || 1,\n Math.min(capabilities.zoom.max || 1, options.level)\n );\n\n try {\n await videoTrack.applyConstraints({\n advanced: [{ zoom: zoomLevel } as any]\n });\n } catch (error) {\n throw new Error(`Failed to set zoom: ${error}`);\n }\n }\n\n async getFlashMode(): Promise<{ flashMode: FlashMode }> {\n throw new Error(\"getFlashMode not supported under the web platform\");\n }\n\n async getDeviceId(): Promise<{ deviceId: string }> {\n return { deviceId: this.currentDeviceId || \"\" };\n }\n\n async setDeviceId(options: { deviceId: string }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Update current device ID\n this.currentDeviceId = options.deviceId;\n\n // Get new constraints with specific device ID\n const constraints: MediaStreamConstraints = {\n video: {\n deviceId: { exact: options.deviceId },\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n // Try to determine camera position from device\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === options.deviceId);\n this.isBackCamera = device?.label.toLowerCase().includes('back') || device?.label.toLowerCase().includes('rear') || false;\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to swap to device ${options.deviceId}: ${error}`);\n }\n }\n\n async getAspectRatio(): Promise<{ aspectRatio: '4:3' | '16:9' }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n\n if (width && height) {\n const ratio = width / height;\n if (Math.abs(ratio - (4 / 3)) < 0.01) {\n return { aspectRatio: '4:3' };\n }\n if (Math.abs(ratio - (16 / 9)) < 0.01) {\n return { aspectRatio: '16:9' };\n }\n }\n\n // Default to 4:3 if no specific aspect ratio is matched\n return { aspectRatio: '4:3' };\n }\n\n async setAspectRatio(options: { aspectRatio: '4:3' | '16:9'}): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n\n if (width) {\n video.height = width / ratio;\n } else if (height) {\n video.width = height * ratio;\n }\n } else {\n video.style.objectFit = 'cover';\n }\n }\n\n private createGridOverlay(gridMode: string): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.top = \"0\";\n overlay.style.left = \"0\";\n overlay.style.width = \"100%\";\n overlay.style.height = \"100%\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"10\";\n\n const divisions = gridMode === \"3x3\" ? 3 : 4;\n\n // Create SVG for grid lines\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.position = \"absolute\";\n svg.style.top = \"0\";\n svg.style.left = \"0\";\n\n // Create grid lines\n for (let i = 1; i < divisions; i++) {\n // Vertical lines\n const verticalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n verticalLine.setAttribute(\"x1\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y1\", \"0%\");\n verticalLine.setAttribute(\"x2\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y2\", \"100%\");\n verticalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n verticalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(verticalLine);\n\n // Horizontal lines\n const horizontalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n horizontalLine.setAttribute(\"x1\", \"0%\");\n horizontalLine.setAttribute(\"y1\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"x2\", \"100%\");\n horizontalLine.setAttribute(\"y2\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n horizontalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(horizontalLine);\n }\n\n overlay.appendChild(svg);\n return overlay;\n }\n\n async setGridMode(options: { gridMode: GridMode }): Promise<void> {\n // Web implementation of grid mode would need to be implemented\n // For now, just resolve as a no-op\n console.warn(`Grid mode '${options.gridMode}' is not yet implemented for web platform`);\n }\n\n async getGridMode(): Promise<{ gridMode: GridMode }> {\n // Web implementation - default to none\n return { gridMode: 'none' };\n }\n\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -80,7 +80,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
80
80
|
if (options.y) {
|
|
81
81
|
this.videoElement.style.top = `${options.y}px`;
|
|
82
82
|
}
|
|
83
|
-
if (options.aspectRatio
|
|
83
|
+
if (options.aspectRatio) {
|
|
84
84
|
const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);
|
|
85
85
|
const ratio = widthRatio / heightRatio;
|
|
86
86
|
if (options.width) {
|
|
@@ -440,9 +440,6 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
440
440
|
if (!video) {
|
|
441
441
|
throw new Error("camera is not running");
|
|
442
442
|
}
|
|
443
|
-
if (video.style.objectFit === 'cover') {
|
|
444
|
-
return { aspectRatio: 'fill' };
|
|
445
|
-
}
|
|
446
443
|
const width = video.offsetWidth;
|
|
447
444
|
const height = video.offsetHeight;
|
|
448
445
|
if (width && height) {
|
|
@@ -454,15 +451,15 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
454
451
|
return { aspectRatio: '16:9' };
|
|
455
452
|
}
|
|
456
453
|
}
|
|
457
|
-
// Default to
|
|
458
|
-
return { aspectRatio: '
|
|
454
|
+
// Default to 4:3 if no specific aspect ratio is matched
|
|
455
|
+
return { aspectRatio: '4:3' };
|
|
459
456
|
}
|
|
460
457
|
async setAspectRatio(options) {
|
|
461
458
|
const video = document.getElementById(DEFAULT_VIDEO_ID);
|
|
462
459
|
if (!video) {
|
|
463
460
|
throw new Error("camera is not running");
|
|
464
461
|
}
|
|
465
|
-
if (options.aspectRatio
|
|
462
|
+
if (options.aspectRatio) {
|
|
466
463
|
const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);
|
|
467
464
|
const ratio = widthRatio / heightRatio;
|
|
468
465
|
const width = video.offsetWidth;
|
|
@@ -519,6 +516,15 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
519
516
|
overlay.appendChild(svg);
|
|
520
517
|
return overlay;
|
|
521
518
|
}
|
|
519
|
+
async setGridMode(options) {
|
|
520
|
+
// Web implementation of grid mode would need to be implemented
|
|
521
|
+
// For now, just resolve as a no-op
|
|
522
|
+
console.warn(`Grid mode '${options.gridMode}' is not yet implemented for web platform`);
|
|
523
|
+
}
|
|
524
|
+
async getGridMode() {
|
|
525
|
+
// Web implementation - default to none
|
|
526
|
+
return { gridMode: 'none' };
|
|
527
|
+
}
|
|
522
528
|
}
|
|
523
529
|
|
|
524
530
|
var web = /*#__PURE__*/Object.freeze({
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var DeviceType;\n(function (DeviceType) {\n DeviceType[\"ULTRA_WIDE\"] = \"ultraWide\";\n DeviceType[\"WIDE_ANGLE\"] = \"wideAngle\";\n DeviceType[\"TELEPHOTO\"] = \"telephoto\";\n DeviceType[\"TRUE_DEPTH\"] = \"trueDepth\";\n DeviceType[\"DUAL\"] = \"dual\";\n DeviceType[\"DUAL_WIDE\"] = \"dualWide\";\n DeviceType[\"TRIPLE\"] = \"triple\";\n})(DeviceType || (DeviceType = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from \"@capacitor/core\";\nconst CameraPreview = registerPlugin(\"CameraPreview\", {\n web: () => import(\"./web\").then((m) => new m.CameraPreviewWeb()),\n});\nexport * from \"./definitions\";\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nimport { DeviceType } from \"./definitions\";\nconst DEFAULT_VIDEO_ID = \"capgo_video\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super();\n /**\n * track which camera is used based on start options\n * used in capture\n */\n this.isBackCamera = false;\n this.currentDeviceId = null;\n this.videoElement = null;\n this.isStarted = false;\n }\n async getSupportedPictureSizes() {\n throw new Error(\"getSupportedPictureSizes not supported under the web platform\");\n }\n async start(options) {\n if (this.isStarted) {\n throw new Error(\"camera already started\");\n }\n this.isBackCamera = true;\n this.isStarted = false;\n const parent = document.getElementById((options === null || options === void 0 ? void 0 : options.parent) || \"\");\n const gridMode = (options === null || options === void 0 ? void 0 : options.gridMode) || \"none\";\n if (options.position) {\n this.isBackCamera = options.position === \"rear\";\n }\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.remove();\n }\n const container = options.parent ? document.getElementById(options.parent) : document.body;\n if (!container) {\n throw new Error(\"container not found\");\n }\n this.videoElement = document.createElement(\"video\");\n this.videoElement.id = DEFAULT_VIDEO_ID;\n this.videoElement.className = options.className || \"\";\n this.videoElement.playsInline = true;\n this.videoElement.muted = true;\n this.videoElement.autoplay = true;\n container.appendChild(this.videoElement);\n if (options.toBack) {\n this.videoElement.style.zIndex = \"-1\";\n }\n if (options.width) {\n this.videoElement.width = options.width;\n }\n if (options.height) {\n this.videoElement.height = options.height;\n }\n if (options.x) {\n this.videoElement.style.left = `${options.x}px`;\n }\n // Create and add grid overlay if needed\n if (gridMode !== \"none\") {\n const gridOverlay = this.createGridOverlay(gridMode);\n gridOverlay.id = \"camera-grid-overlay\";\n parent === null || parent === void 0 ? void 0 : parent.appendChild(gridOverlay);\n }\n if (options.y) {\n this.videoElement.style.top = `${options.y}px`;\n }\n if (options.aspectRatio && options.aspectRatio !== 'fill') {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n if (options.width) {\n this.videoElement.height = options.width / ratio;\n }\n else if (options.height) {\n this.videoElement.width = options.height * ratio;\n }\n }\n else {\n this.videoElement.style.objectFit = 'cover';\n }\n const constraints = {\n video: {\n width: { ideal: this.videoElement.width || 640 },\n height: { ideal: this.videoElement.height || window.innerHeight },\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n },\n };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (!stream) {\n throw new Error(\"could not acquire stream\");\n }\n if (!this.videoElement) {\n throw new Error(\"video element not found\");\n }\n this.videoElement.srcObject = stream;\n if (!this.isBackCamera) {\n this.videoElement.style.transform = \"scaleX(-1)\";\n }\n this.isStarted = true;\n return {\n width: this.videoElement.width,\n height: this.videoElement.height,\n x: this.videoElement.getBoundingClientRect().x,\n y: this.videoElement.getBoundingClientRect().y,\n };\n }\n stopStream(stream) {\n if (stream) {\n const tracks = stream.getTracks();\n for (const track of tracks)\n track.stop();\n }\n }\n async stop() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.pause();\n this.stopStream(video.srcObject);\n video.remove();\n this.isStarted = false;\n }\n // Remove grid overlay if it exists\n const gridOverlay = document.getElementById(\"camera-grid-overlay\");\n gridOverlay === null || gridOverlay === void 0 ? void 0 : gridOverlay.remove();\n }\n async capture(options) {\n return new Promise((resolve, reject) => {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n reject(new Error(\"camera is not running\"));\n return;\n }\n // video.width = video.offsetWidth;\n let base64EncodedImage;\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n // flip horizontally back camera isn't used\n if (!this.isBackCamera) {\n context === null || context === void 0 ? void 0 : context.translate(video.videoWidth, 0);\n context === null || context === void 0 ? void 0 : context.scale(-1, 1);\n }\n context === null || context === void 0 ? void 0 : context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n if (options.saveToGallery) {\n // saveToGallery is not supported on web\n }\n if (options.withExifLocation) {\n // withExifLocation is not supported on web\n }\n if ((options.format || \"jpeg\") === \"jpeg\") {\n base64EncodedImage = canvas\n .toDataURL(\"image/jpeg\", (options.quality || 85) / 100.0)\n .replace(\"data:image/jpeg;base64,\", \"\");\n }\n else {\n base64EncodedImage = canvas\n .toDataURL(\"image/png\")\n .replace(\"data:image/png;base64,\", \"\");\n }\n }\n resolve({\n value: base64EncodedImage,\n exif: {},\n });\n });\n }\n async captureSample(_options) {\n return this.capture(_options);\n }\n async stopRecordVideo() {\n throw new Error(\"stopRecordVideo not supported under the web platform\");\n }\n async startRecordVideo(_options) {\n console.log(\"startRecordVideo\", _options);\n throw new Error(\"startRecordVideo not supported under the web platform\");\n }\n async getSupportedFlashModes() {\n throw new Error(\"getSupportedFlashModes not supported under the web platform\");\n }\n async getHorizontalFov() {\n throw new Error(\"getHorizontalFov not supported under the web platform\");\n }\n async setFlashMode(_options) {\n throw new Error(`setFlashMode not supported under the web platform${_options}`);\n }\n async flip() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n // Stop current stream\n this.stopStream(video.srcObject);\n // Toggle camera position\n this.isBackCamera = !this.isBackCamera;\n // Get new constraints\n const constraints = {\n video: {\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n try {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n // Update current device ID from the new stream\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n this.currentDeviceId = videoTrack.getSettings().deviceId || null;\n }\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n }\n else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n await video.play();\n }\n catch (error) {\n throw new Error(`Failed to flip camera: ${error}`);\n }\n }\n async setOpacity(_options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!!video && !!_options.opacity)\n video.style.setProperty(\"opacity\", _options.opacity.toString());\n }\n async isRunning() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n return { isRunning: !!video && !!video.srcObject };\n }\n async getAvailableDevices() {\n var _a;\n if (!((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.enumerateDevices)) {\n throw new Error(\"getAvailableDevices not supported under the web platform\");\n }\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter(device => device.kind === 'videoinput');\n // Group devices by position (front/back)\n const frontDevices = [];\n const backDevices = [];\n videoDevices.forEach((device, index) => {\n const label = device.label || `Camera ${index + 1}`;\n const labelLower = label.toLowerCase();\n // Determine device type based on label\n let deviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n }\n else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n }\n else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n const lensInfo = {\n deviceId: device.deviceId,\n label,\n deviceType,\n focalLength: 4.25,\n baseZoomRatio,\n minZoom: 1.0,\n maxZoom: 1.0\n };\n // Determine position and add to appropriate array\n if (labelLower.includes('back') || labelLower.includes('rear')) {\n backDevices.push(lensInfo);\n }\n else {\n frontDevices.push(lensInfo);\n }\n });\n const result = [];\n if (frontDevices.length > 0) {\n result.push({\n deviceId: frontDevices[0].deviceId,\n label: \"Front Camera\",\n position: \"front\",\n lenses: frontDevices,\n isLogical: false,\n minZoom: Math.min(...frontDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...frontDevices.map(d => d.maxZoom))\n });\n }\n if (backDevices.length > 0) {\n result.push({\n deviceId: backDevices[0].deviceId,\n label: \"Back Camera\",\n position: \"rear\",\n lenses: backDevices,\n isLogical: false,\n minZoom: Math.min(...backDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...backDevices.map(d => d.maxZoom))\n });\n }\n return { devices: result };\n }\n async getZoom() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n const stream = video.srcObject;\n const videoTrack = stream.getVideoTracks()[0];\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n const capabilities = videoTrack.getCapabilities();\n const settings = videoTrack.getSettings();\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n // Get current device info to determine lens type\n let deviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n if (this.currentDeviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === this.currentDeviceId);\n if (device) {\n const labelLower = device.label.toLowerCase();\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n }\n else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n }\n else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n }\n }\n const currentZoom = settings.zoom || 1;\n const lensInfo = {\n focalLength: 4.25,\n deviceType,\n baseZoomRatio,\n digitalZoom: currentZoom / baseZoomRatio\n };\n return {\n min: capabilities.zoom.min || 1,\n max: capabilities.zoom.max || 1,\n current: currentZoom,\n lens: lensInfo,\n };\n }\n async setZoom(options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n const stream = video.srcObject;\n const videoTrack = stream.getVideoTracks()[0];\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n const capabilities = videoTrack.getCapabilities();\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n const zoomLevel = Math.max(capabilities.zoom.min || 1, Math.min(capabilities.zoom.max || 1, options.level));\n try {\n await videoTrack.applyConstraints({\n advanced: [{ zoom: zoomLevel }]\n });\n }\n catch (error) {\n throw new Error(`Failed to set zoom: ${error}`);\n }\n }\n async getFlashMode() {\n throw new Error(\"getFlashMode not supported under the web platform\");\n }\n async getDeviceId() {\n return { deviceId: this.currentDeviceId || \"\" };\n }\n async setDeviceId(options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n // Stop current stream\n this.stopStream(video.srcObject);\n // Update current device ID\n this.currentDeviceId = options.deviceId;\n // Get new constraints with specific device ID\n const constraints = {\n video: {\n deviceId: { exact: options.deviceId },\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n try {\n // Try to determine camera position from device\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === options.deviceId);\n this.isBackCamera = (device === null || device === void 0 ? void 0 : device.label.toLowerCase().includes('back')) || (device === null || device === void 0 ? void 0 : device.label.toLowerCase().includes('rear')) || false;\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n }\n else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n await video.play();\n }\n catch (error) {\n throw new Error(`Failed to swap to device ${options.deviceId}: ${error}`);\n }\n }\n async getAspectRatio() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n if (video.style.objectFit === 'cover') {\n return { aspectRatio: 'fill' };\n }\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n if (width && height) {\n const ratio = width / height;\n if (Math.abs(ratio - (4 / 3)) < 0.01) {\n return { aspectRatio: '4:3' };\n }\n if (Math.abs(ratio - (16 / 9)) < 0.01) {\n return { aspectRatio: '16:9' };\n }\n }\n // Default to fill if no specific aspect ratio is matched\n return { aspectRatio: 'fill' };\n }\n async setAspectRatio(options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n if (options.aspectRatio && options.aspectRatio !== 'fill') {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n if (width) {\n video.height = width / ratio;\n }\n else if (height) {\n video.width = height * ratio;\n }\n }\n else {\n video.style.objectFit = 'cover';\n }\n }\n createGridOverlay(gridMode) {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.top = \"0\";\n overlay.style.left = \"0\";\n overlay.style.width = \"100%\";\n overlay.style.height = \"100%\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"10\";\n const divisions = gridMode === \"3x3\" ? 3 : 4;\n // Create SVG for grid lines\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.position = \"absolute\";\n svg.style.top = \"0\";\n svg.style.left = \"0\";\n // Create grid lines\n for (let i = 1; i < divisions; i++) {\n // Vertical lines\n const verticalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n verticalLine.setAttribute(\"x1\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y1\", \"0%\");\n verticalLine.setAttribute(\"x2\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y2\", \"100%\");\n verticalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n verticalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(verticalLine);\n // Horizontal lines\n const horizontalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n horizontalLine.setAttribute(\"x1\", \"0%\");\n horizontalLine.setAttribute(\"y1\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"x2\", \"100%\");\n horizontalLine.setAttribute(\"y2\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n horizontalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(horizontalLine);\n }\n overlay.appendChild(svg);\n return overlay;\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["DeviceType","registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var DeviceType;\n(function (DeviceType) {\n DeviceType[\"ULTRA_WIDE\"] = \"ultraWide\";\n DeviceType[\"WIDE_ANGLE\"] = \"wideAngle\";\n DeviceType[\"TELEPHOTO\"] = \"telephoto\";\n DeviceType[\"TRUE_DEPTH\"] = \"trueDepth\";\n DeviceType[\"DUAL\"] = \"dual\";\n DeviceType[\"DUAL_WIDE\"] = \"dualWide\";\n DeviceType[\"TRIPLE\"] = \"triple\";\n})(DeviceType || (DeviceType = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from \"@capacitor/core\";\nconst CameraPreview = registerPlugin(\"CameraPreview\", {\n web: () => import(\"./web\").then((m) => new m.CameraPreviewWeb()),\n});\nexport * from \"./definitions\";\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nimport { DeviceType } from \"./definitions\";\nconst DEFAULT_VIDEO_ID = \"capgo_video\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super();\n /**\n * track which camera is used based on start options\n * used in capture\n */\n this.isBackCamera = false;\n this.currentDeviceId = null;\n this.videoElement = null;\n this.isStarted = false;\n }\n async getSupportedPictureSizes() {\n throw new Error(\"getSupportedPictureSizes not supported under the web platform\");\n }\n async start(options) {\n if (this.isStarted) {\n throw new Error(\"camera already started\");\n }\n this.isBackCamera = true;\n this.isStarted = false;\n const parent = document.getElementById((options === null || options === void 0 ? void 0 : options.parent) || \"\");\n const gridMode = (options === null || options === void 0 ? void 0 : options.gridMode) || \"none\";\n if (options.position) {\n this.isBackCamera = options.position === \"rear\";\n }\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.remove();\n }\n const container = options.parent ? document.getElementById(options.parent) : document.body;\n if (!container) {\n throw new Error(\"container not found\");\n }\n this.videoElement = document.createElement(\"video\");\n this.videoElement.id = DEFAULT_VIDEO_ID;\n this.videoElement.className = options.className || \"\";\n this.videoElement.playsInline = true;\n this.videoElement.muted = true;\n this.videoElement.autoplay = true;\n container.appendChild(this.videoElement);\n if (options.toBack) {\n this.videoElement.style.zIndex = \"-1\";\n }\n if (options.width) {\n this.videoElement.width = options.width;\n }\n if (options.height) {\n this.videoElement.height = options.height;\n }\n if (options.x) {\n this.videoElement.style.left = `${options.x}px`;\n }\n // Create and add grid overlay if needed\n if (gridMode !== \"none\") {\n const gridOverlay = this.createGridOverlay(gridMode);\n gridOverlay.id = \"camera-grid-overlay\";\n parent === null || parent === void 0 ? void 0 : parent.appendChild(gridOverlay);\n }\n if (options.y) {\n this.videoElement.style.top = `${options.y}px`;\n }\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n if (options.width) {\n this.videoElement.height = options.width / ratio;\n }\n else if (options.height) {\n this.videoElement.width = options.height * ratio;\n }\n }\n else {\n this.videoElement.style.objectFit = 'cover';\n }\n const constraints = {\n video: {\n width: { ideal: this.videoElement.width || 640 },\n height: { ideal: this.videoElement.height || window.innerHeight },\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n },\n };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (!stream) {\n throw new Error(\"could not acquire stream\");\n }\n if (!this.videoElement) {\n throw new Error(\"video element not found\");\n }\n this.videoElement.srcObject = stream;\n if (!this.isBackCamera) {\n this.videoElement.style.transform = \"scaleX(-1)\";\n }\n this.isStarted = true;\n return {\n width: this.videoElement.width,\n height: this.videoElement.height,\n x: this.videoElement.getBoundingClientRect().x,\n y: this.videoElement.getBoundingClientRect().y,\n };\n }\n stopStream(stream) {\n if (stream) {\n const tracks = stream.getTracks();\n for (const track of tracks)\n track.stop();\n }\n }\n async stop() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.pause();\n this.stopStream(video.srcObject);\n video.remove();\n this.isStarted = false;\n }\n // Remove grid overlay if it exists\n const gridOverlay = document.getElementById(\"camera-grid-overlay\");\n gridOverlay === null || gridOverlay === void 0 ? void 0 : gridOverlay.remove();\n }\n async capture(options) {\n return new Promise((resolve, reject) => {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n reject(new Error(\"camera is not running\"));\n return;\n }\n // video.width = video.offsetWidth;\n let base64EncodedImage;\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n // flip horizontally back camera isn't used\n if (!this.isBackCamera) {\n context === null || context === void 0 ? void 0 : context.translate(video.videoWidth, 0);\n context === null || context === void 0 ? void 0 : context.scale(-1, 1);\n }\n context === null || context === void 0 ? void 0 : context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n if (options.saveToGallery) {\n // saveToGallery is not supported on web\n }\n if (options.withExifLocation) {\n // withExifLocation is not supported on web\n }\n if ((options.format || \"jpeg\") === \"jpeg\") {\n base64EncodedImage = canvas\n .toDataURL(\"image/jpeg\", (options.quality || 85) / 100.0)\n .replace(\"data:image/jpeg;base64,\", \"\");\n }\n else {\n base64EncodedImage = canvas\n .toDataURL(\"image/png\")\n .replace(\"data:image/png;base64,\", \"\");\n }\n }\n resolve({\n value: base64EncodedImage,\n exif: {},\n });\n });\n }\n async captureSample(_options) {\n return this.capture(_options);\n }\n async stopRecordVideo() {\n throw new Error(\"stopRecordVideo not supported under the web platform\");\n }\n async startRecordVideo(_options) {\n console.log(\"startRecordVideo\", _options);\n throw new Error(\"startRecordVideo not supported under the web platform\");\n }\n async getSupportedFlashModes() {\n throw new Error(\"getSupportedFlashModes not supported under the web platform\");\n }\n async getHorizontalFov() {\n throw new Error(\"getHorizontalFov not supported under the web platform\");\n }\n async setFlashMode(_options) {\n throw new Error(`setFlashMode not supported under the web platform${_options}`);\n }\n async flip() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n // Stop current stream\n this.stopStream(video.srcObject);\n // Toggle camera position\n this.isBackCamera = !this.isBackCamera;\n // Get new constraints\n const constraints = {\n video: {\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n try {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n // Update current device ID from the new stream\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n this.currentDeviceId = videoTrack.getSettings().deviceId || null;\n }\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n }\n else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n await video.play();\n }\n catch (error) {\n throw new Error(`Failed to flip camera: ${error}`);\n }\n }\n async setOpacity(_options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!!video && !!_options.opacity)\n video.style.setProperty(\"opacity\", _options.opacity.toString());\n }\n async isRunning() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n return { isRunning: !!video && !!video.srcObject };\n }\n async getAvailableDevices() {\n var _a;\n if (!((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.enumerateDevices)) {\n throw new Error(\"getAvailableDevices not supported under the web platform\");\n }\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter(device => device.kind === 'videoinput');\n // Group devices by position (front/back)\n const frontDevices = [];\n const backDevices = [];\n videoDevices.forEach((device, index) => {\n const label = device.label || `Camera ${index + 1}`;\n const labelLower = label.toLowerCase();\n // Determine device type based on label\n let deviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n }\n else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n }\n else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n const lensInfo = {\n deviceId: device.deviceId,\n label,\n deviceType,\n focalLength: 4.25,\n baseZoomRatio,\n minZoom: 1.0,\n maxZoom: 1.0\n };\n // Determine position and add to appropriate array\n if (labelLower.includes('back') || labelLower.includes('rear')) {\n backDevices.push(lensInfo);\n }\n else {\n frontDevices.push(lensInfo);\n }\n });\n const result = [];\n if (frontDevices.length > 0) {\n result.push({\n deviceId: frontDevices[0].deviceId,\n label: \"Front Camera\",\n position: \"front\",\n lenses: frontDevices,\n isLogical: false,\n minZoom: Math.min(...frontDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...frontDevices.map(d => d.maxZoom))\n });\n }\n if (backDevices.length > 0) {\n result.push({\n deviceId: backDevices[0].deviceId,\n label: \"Back Camera\",\n position: \"rear\",\n lenses: backDevices,\n isLogical: false,\n minZoom: Math.min(...backDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...backDevices.map(d => d.maxZoom))\n });\n }\n return { devices: result };\n }\n async getZoom() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n const stream = video.srcObject;\n const videoTrack = stream.getVideoTracks()[0];\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n const capabilities = videoTrack.getCapabilities();\n const settings = videoTrack.getSettings();\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n // Get current device info to determine lens type\n let deviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n if (this.currentDeviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === this.currentDeviceId);\n if (device) {\n const labelLower = device.label.toLowerCase();\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n }\n else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n }\n else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n }\n }\n const currentZoom = settings.zoom || 1;\n const lensInfo = {\n focalLength: 4.25,\n deviceType,\n baseZoomRatio,\n digitalZoom: currentZoom / baseZoomRatio\n };\n return {\n min: capabilities.zoom.min || 1,\n max: capabilities.zoom.max || 1,\n current: currentZoom,\n lens: lensInfo,\n };\n }\n async setZoom(options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n const stream = video.srcObject;\n const videoTrack = stream.getVideoTracks()[0];\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n const capabilities = videoTrack.getCapabilities();\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n const zoomLevel = Math.max(capabilities.zoom.min || 1, Math.min(capabilities.zoom.max || 1, options.level));\n try {\n await videoTrack.applyConstraints({\n advanced: [{ zoom: zoomLevel }]\n });\n }\n catch (error) {\n throw new Error(`Failed to set zoom: ${error}`);\n }\n }\n async getFlashMode() {\n throw new Error(\"getFlashMode not supported under the web platform\");\n }\n async getDeviceId() {\n return { deviceId: this.currentDeviceId || \"\" };\n }\n async setDeviceId(options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!(video === null || video === void 0 ? void 0 : video.srcObject)) {\n throw new Error(\"camera is not running\");\n }\n // Stop current stream\n this.stopStream(video.srcObject);\n // Update current device ID\n this.currentDeviceId = options.deviceId;\n // Get new constraints with specific device ID\n const constraints = {\n video: {\n deviceId: { exact: options.deviceId },\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n try {\n // Try to determine camera position from device\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === options.deviceId);\n this.isBackCamera = (device === null || device === void 0 ? void 0 : device.label.toLowerCase().includes('back')) || (device === null || device === void 0 ? void 0 : device.label.toLowerCase().includes('rear')) || false;\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n }\n else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n await video.play();\n }\n catch (error) {\n throw new Error(`Failed to swap to device ${options.deviceId}: ${error}`);\n }\n }\n async getAspectRatio() {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n if (width && height) {\n const ratio = width / height;\n if (Math.abs(ratio - (4 / 3)) < 0.01) {\n return { aspectRatio: '4:3' };\n }\n if (Math.abs(ratio - (16 / 9)) < 0.01) {\n return { aspectRatio: '16:9' };\n }\n }\n // Default to 4:3 if no specific aspect ratio is matched\n return { aspectRatio: '4:3' };\n }\n async setAspectRatio(options) {\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n if (width) {\n video.height = width / ratio;\n }\n else if (height) {\n video.width = height * ratio;\n }\n }\n else {\n video.style.objectFit = 'cover';\n }\n }\n createGridOverlay(gridMode) {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.top = \"0\";\n overlay.style.left = \"0\";\n overlay.style.width = \"100%\";\n overlay.style.height = \"100%\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"10\";\n const divisions = gridMode === \"3x3\" ? 3 : 4;\n // Create SVG for grid lines\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.position = \"absolute\";\n svg.style.top = \"0\";\n svg.style.left = \"0\";\n // Create grid lines\n for (let i = 1; i < divisions; i++) {\n // Vertical lines\n const verticalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n verticalLine.setAttribute(\"x1\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y1\", \"0%\");\n verticalLine.setAttribute(\"x2\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y2\", \"100%\");\n verticalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n verticalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(verticalLine);\n // Horizontal lines\n const horizontalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n horizontalLine.setAttribute(\"x1\", \"0%\");\n horizontalLine.setAttribute(\"y1\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"x2\", \"100%\");\n horizontalLine.setAttribute(\"y2\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n horizontalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(horizontalLine);\n }\n overlay.appendChild(svg);\n return overlay;\n }\n async setGridMode(options) {\n // Web implementation of grid mode would need to be implemented\n // For now, just resolve as a no-op\n console.warn(`Grid mode '${options.gridMode}' is not yet implemented for web platform`);\n }\n async getGridMode() {\n // Web implementation - default to none\n return { gridMode: 'none' };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["DeviceType","registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -79,7 +79,7 @@ var capacitorCapacitorCameraView = (function (exports, core) {
|
|
|
79
79
|
if (options.y) {
|
|
80
80
|
this.videoElement.style.top = `${options.y}px`;
|
|
81
81
|
}
|
|
82
|
-
if (options.aspectRatio
|
|
82
|
+
if (options.aspectRatio) {
|
|
83
83
|
const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);
|
|
84
84
|
const ratio = widthRatio / heightRatio;
|
|
85
85
|
if (options.width) {
|
|
@@ -439,9 +439,6 @@ var capacitorCapacitorCameraView = (function (exports, core) {
|
|
|
439
439
|
if (!video) {
|
|
440
440
|
throw new Error("camera is not running");
|
|
441
441
|
}
|
|
442
|
-
if (video.style.objectFit === 'cover') {
|
|
443
|
-
return { aspectRatio: 'fill' };
|
|
444
|
-
}
|
|
445
442
|
const width = video.offsetWidth;
|
|
446
443
|
const height = video.offsetHeight;
|
|
447
444
|
if (width && height) {
|
|
@@ -453,15 +450,15 @@ var capacitorCapacitorCameraView = (function (exports, core) {
|
|
|
453
450
|
return { aspectRatio: '16:9' };
|
|
454
451
|
}
|
|
455
452
|
}
|
|
456
|
-
// Default to
|
|
457
|
-
return { aspectRatio: '
|
|
453
|
+
// Default to 4:3 if no specific aspect ratio is matched
|
|
454
|
+
return { aspectRatio: '4:3' };
|
|
458
455
|
}
|
|
459
456
|
async setAspectRatio(options) {
|
|
460
457
|
const video = document.getElementById(DEFAULT_VIDEO_ID);
|
|
461
458
|
if (!video) {
|
|
462
459
|
throw new Error("camera is not running");
|
|
463
460
|
}
|
|
464
|
-
if (options.aspectRatio
|
|
461
|
+
if (options.aspectRatio) {
|
|
465
462
|
const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);
|
|
466
463
|
const ratio = widthRatio / heightRatio;
|
|
467
464
|
const width = video.offsetWidth;
|
|
@@ -518,6 +515,15 @@ var capacitorCapacitorCameraView = (function (exports, core) {
|
|
|
518
515
|
overlay.appendChild(svg);
|
|
519
516
|
return overlay;
|
|
520
517
|
}
|
|
518
|
+
async setGridMode(options) {
|
|
519
|
+
// Web implementation of grid mode would need to be implemented
|
|
520
|
+
// For now, just resolve as a no-op
|
|
521
|
+
console.warn(`Grid mode '${options.gridMode}' is not yet implemented for web platform`);
|
|
522
|
+
}
|
|
523
|
+
async getGridMode() {
|
|
524
|
+
// Web implementation - default to none
|
|
525
|
+
return { gridMode: 'none' };
|
|
526
|
+
}
|
|
521
527
|
}
|
|
522
528
|
|
|
523
529
|
var web = /*#__PURE__*/Object.freeze({
|