@capacitor-community/camera-preview 6.0.0 → 6.0.1
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 +8 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java +8 -0
- package/dist/esm/definitions.d.ts +8 -5
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/web.d.ts +6 -3
- package/dist/esm/web.js +10 -5
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +10 -7
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +11 -8
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/Plugin.m +1 -0
- package/ios/Plugin/Plugin.swift +10 -0
- package/ios/Podfile.lock +5 -5
- package/package.json +22 -18
package/README.md
CHANGED
|
@@ -297,6 +297,14 @@ const myCamera = CameraPreview.start({enableOpacity: true});
|
|
|
297
297
|
myCamera.setOpacity({opacity: 0.4});
|
|
298
298
|
```
|
|
299
299
|
|
|
300
|
+
### isCameraStarted() ---- ANDROID and iOS only
|
|
301
|
+
|
|
302
|
+
<info>Check or detect if the camera has been started</info><br/>
|
|
303
|
+
|
|
304
|
+
```javascript
|
|
305
|
+
const { value } = await CameraPreview.isCameraStarted();
|
|
306
|
+
```
|
|
307
|
+
|
|
300
308
|
# Settings
|
|
301
309
|
|
|
302
310
|
<a name="camera_Settings.FlashMode"></a>
|
|
@@ -249,6 +249,14 @@ public class CameraPreview extends Plugin implements CameraActivity.CameraPrevie
|
|
|
249
249
|
// call.resolve();
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
+
@PluginMethod
|
|
253
|
+
public void isCameraStarted(PluginCall call) {
|
|
254
|
+
boolean isCameraStarted = hasCamera(call);
|
|
255
|
+
JSObject ret = new JSObject();
|
|
256
|
+
ret.put("value", isCameraStarted);
|
|
257
|
+
call.resolve(ret);
|
|
258
|
+
}
|
|
259
|
+
|
|
252
260
|
@PermissionCallback
|
|
253
261
|
private void handleCameraPermissionResult(PluginCall call) {
|
|
254
262
|
if (PermissionState.GRANTED.equals(getPermissionState(CAMERA_PERMISSION_ALIAS))) {
|
|
@@ -55,10 +55,10 @@ export interface CameraOpacityOptions {
|
|
|
55
55
|
opacity?: number;
|
|
56
56
|
}
|
|
57
57
|
export interface CameraPreviewPlugin {
|
|
58
|
-
start(options: CameraPreviewOptions): Promise<
|
|
59
|
-
startRecordVideo(options: CameraPreviewOptions): Promise<
|
|
60
|
-
stop(): Promise<
|
|
61
|
-
stopRecordVideo(): Promise<
|
|
58
|
+
start(options: CameraPreviewOptions): Promise<void>;
|
|
59
|
+
startRecordVideo(options: CameraPreviewOptions): Promise<void>;
|
|
60
|
+
stop(): Promise<void>;
|
|
61
|
+
stopRecordVideo(): Promise<void>;
|
|
62
62
|
capture(options: CameraPreviewPictureOptions): Promise<{
|
|
63
63
|
value: string;
|
|
64
64
|
}>;
|
|
@@ -72,5 +72,8 @@ export interface CameraPreviewPlugin {
|
|
|
72
72
|
flashMode: CameraPreviewFlashMode | string;
|
|
73
73
|
}): Promise<void>;
|
|
74
74
|
flip(): Promise<void>;
|
|
75
|
-
setOpacity(options: CameraOpacityOptions): Promise<
|
|
75
|
+
setOpacity(options: CameraOpacityOptions): Promise<void>;
|
|
76
|
+
isCameraStarted(): Promise<{
|
|
77
|
+
value: boolean;
|
|
78
|
+
}>;
|
|
76
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export type CameraPosition = 'rear' | 'front';\nexport interface CameraPreviewOptions {\n /** Parent element to attach the video preview element to (applicable to the web platform only) */\n parent?: string;\n /** Class name to add to the video preview element (applicable to the web platform only) */\n className?: string;\n /** The preview width in pixels, default window.screen.width */\n width?: number;\n /** The preview height in pixels, default window.screen.height */\n height?: number;\n /** The x origin, default 0 (applicable to the android and ios platforms only) */\n x?: number;\n /** The y origin, default 0 (applicable to the android and ios platforms only) */\n y?: number;\n /** Brings your html in front of your preview, default false (applicable to the android only) */\n toBack?: boolean;\n /** The preview bottom padding in pixes. Useful to keep the appropriate preview sizes when orientation changes (applicable to the android and ios platforms only) */\n paddingBottom?: number;\n /** Rotate preview when orientation changes (applicable to the ios platforms only; default value is true) */\n rotateWhenOrientationChanged?: boolean;\n /** Choose the camera to use 'front' or 'rear', default 'front' */\n position?: CameraPosition | string;\n /** Defaults to false - Capture images to a file and return the file path instead of returning base64 encoded data */\n storeToFile?: boolean;\n /** Defaults to false - Android Only - Disable automatic rotation of the image, and let the browser deal with it (keep reading on how to achieve it) */\n disableExifHeaderStripping?: boolean;\n /** Defaults to false - iOS only - Activate high resolution image capture so that output images are from the highest resolution possible on the device **/\n enableHighResolution?: boolean;\n /** Defaults to false - Web only - Disables audio stream to prevent permission requests and output switching */\n disableAudio?: boolean;\n /** Android Only - Locks device orientation when camera is showing. */\n lockAndroidOrientation?: boolean;\n /** Defaults to false - Android and Web only. Set if camera preview can change opacity. */\n enableOpacity?: boolean;\n /** Defaults to false - Android only. Set if camera preview will support pinch to zoom. */\n enableZoom?: boolean;\n}\nexport interface CameraPreviewPictureOptions {\n /** The picture height, optional, default 0 (Device default) */\n height?: number;\n /** The picture width, optional, default 0 (Device default) */\n width?: number;\n /** The picture quality, 0 - 100, default 85 on `iOS/Android`.\n *\n * If left undefined, the `web` implementation will export a PNG, otherwise a JPEG will be generated */\n quality?: number;\n}\n\nexport interface CameraSampleOptions {\n /** The picture quality, 0 - 100, default 85 */\n quality?: number;\n}\n\nexport type CameraPreviewFlashMode = 'off' | 'on' | 'auto' | 'red-eye' | 'torch';\n\nexport interface CameraOpacityOptions {\n /** The percent opacity to set for camera view, default 1 */\n opacity?: number;\n}\n\nexport interface CameraPreviewPlugin {\n start(options: CameraPreviewOptions): Promise<void>;\n startRecordVideo(options: CameraPreviewOptions): Promise<void>;\n stop(): Promise<void>;\n stopRecordVideo(): Promise<void>;\n capture(options: CameraPreviewPictureOptions): Promise<{ value: string }>;\n captureSample(options: CameraSampleOptions): Promise<{ value: string }>;\n getSupportedFlashModes(): Promise<{\n result: CameraPreviewFlashMode[];\n }>;\n setFlashMode(options: { flashMode: CameraPreviewFlashMode | string }): Promise<void>;\n flip(): Promise<void>;\n setOpacity(options: CameraOpacityOptions): Promise<void>;\n isCameraStarted(): Promise<{ value: boolean }>;\n}\n"]}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,aAAa,GAAG,cAAc,CAAsB,eAAe,EAAE;IACzE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;CACjE,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,aAAa,GAAG,cAAc,CAAsB,eAAe,EAAE;IACzE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;CACjE,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type { CameraPreviewPlugin } from './definitions';\n\nconst CameraPreview = registerPlugin<CameraPreviewPlugin>('CameraPreview', {\n web: () => import('./web').then((m) => new m.CameraPreviewWeb()),\n});\n\nexport * from './definitions';\nexport { CameraPreview };\n"]}
|
package/dist/esm/web.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ export declare class CameraPreviewWeb extends WebPlugin implements CameraPreview
|
|
|
7
7
|
*/
|
|
8
8
|
private isBackCamera;
|
|
9
9
|
constructor();
|
|
10
|
-
start(options: CameraPreviewOptions): Promise<
|
|
11
|
-
startRecordVideo(): Promise<
|
|
12
|
-
stopRecordVideo(): Promise<
|
|
10
|
+
start(options: CameraPreviewOptions): Promise<void>;
|
|
11
|
+
startRecordVideo(): Promise<void>;
|
|
12
|
+
stopRecordVideo(): Promise<void>;
|
|
13
13
|
stop(): Promise<any>;
|
|
14
14
|
capture(options: CameraPreviewPictureOptions): Promise<any>;
|
|
15
15
|
captureSample(_options: CameraSampleOptions): Promise<any>;
|
|
@@ -21,4 +21,7 @@ export declare class CameraPreviewWeb extends WebPlugin implements CameraPreview
|
|
|
21
21
|
}): Promise<void>;
|
|
22
22
|
flip(): Promise<void>;
|
|
23
23
|
setOpacity(_options: CameraOpacityOptions): Promise<any>;
|
|
24
|
+
isCameraStarted(): Promise<{
|
|
25
|
+
value: boolean;
|
|
26
|
+
}>;
|
|
24
27
|
}
|
package/dist/esm/web.js
CHANGED
|
@@ -7,7 +7,9 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
7
7
|
});
|
|
8
8
|
}
|
|
9
9
|
async start(options) {
|
|
10
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
10
11
|
return new Promise(async (resolve, reject) => {
|
|
12
|
+
var _a;
|
|
11
13
|
await navigator.mediaDevices
|
|
12
14
|
.getUserMedia({
|
|
13
15
|
audio: !options.disableAudio,
|
|
@@ -41,7 +43,7 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
41
43
|
videoElement.setAttribute('playsinline', 'true');
|
|
42
44
|
}
|
|
43
45
|
parent.appendChild(videoElement);
|
|
44
|
-
if (navigator.mediaDevices
|
|
46
|
+
if ((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) {
|
|
45
47
|
const constraints = {
|
|
46
48
|
video: {
|
|
47
49
|
width: { ideal: options.width },
|
|
@@ -59,7 +61,7 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
59
61
|
//video.src = window.URL.createObjectURL(stream);
|
|
60
62
|
videoElement.srcObject = stream;
|
|
61
63
|
videoElement.play();
|
|
62
|
-
resolve(
|
|
64
|
+
resolve();
|
|
63
65
|
}, (err) => {
|
|
64
66
|
reject(err);
|
|
65
67
|
});
|
|
@@ -82,15 +84,14 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
82
84
|
video.pause();
|
|
83
85
|
const st = video.srcObject;
|
|
84
86
|
const tracks = st.getTracks();
|
|
85
|
-
for (
|
|
86
|
-
const track = tracks[i];
|
|
87
|
+
for (const track of tracks) {
|
|
87
88
|
track.stop();
|
|
88
89
|
}
|
|
89
90
|
video.remove();
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
async capture(options) {
|
|
93
|
-
return new Promise((resolve
|
|
94
|
+
return new Promise((resolve) => {
|
|
94
95
|
const video = document.getElementById('video');
|
|
95
96
|
const canvas = document.createElement('canvas');
|
|
96
97
|
// video.width = video.offsetWidth;
|
|
@@ -123,6 +124,7 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
123
124
|
async getSupportedFlashModes() {
|
|
124
125
|
throw new Error('getSupportedFlashModes not supported under the web platform');
|
|
125
126
|
}
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
126
128
|
async setFlashMode(_options) {
|
|
127
129
|
throw new Error('setFlashMode not supported under the web platform');
|
|
128
130
|
}
|
|
@@ -135,5 +137,8 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
135
137
|
video.style.setProperty('opacity', _options['opacity'].toString());
|
|
136
138
|
}
|
|
137
139
|
}
|
|
140
|
+
async isCameraStarted() {
|
|
141
|
+
throw this.unimplemented('Not implemented on web.');
|
|
142
|
+
}
|
|
138
143
|
}
|
|
139
144
|
//# 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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAW5C,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAO7C;QACE,KAAK,CAAC;YACJ,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA6B;QACvC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,SAAS,CAAC,YAAY;iBACzB,YAAY,CAAC;gBACZ,KAAK,EAAE,CAAC,OAAO,CAAC,YAAY;gBAC5B,KAAK,EAAE,IAAI;aACZ,CAAC;iBACD,IAAI,CAAC,CAAC,MAAmB,EAAE,EAAE;gBAC5B,kGAAkG;gBAClG,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEL,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEvD,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACrD,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC;gBAC1B,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAE5D,iDAAiD;gBACjD,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;oBAC/B,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,uDAAuD,CAAC,CAAC;iBAC7F;gBAED,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAE/E,mHAAmH;gBACnH,4EAA4E;gBAC5E,uFAAuF;gBACvF,IAAI,QAAQ,EAAE;oBACZ,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC9C,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC3C,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;iBAClD;gBAED,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAEjC,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE;oBACjE,MAAM,WAAW,GAA2B;wBAC1C,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;4BAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;yBAClC;qBACF,CAAC;oBAEF,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;wBAC9B,WAAW,CAAC,KAA+B,CAAC,UAAU,GAAG,aAAa,CAAC;wBACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;qBAC1B;yBAAM;wBACL,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;qBAC3B;oBAED,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CACnD,UAAU,MAAM;wBACd,iDAAiD;wBACjD,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC;wBAChC,YAAY,CAAC,IAAI,EAAE,CAAC;wBACpB,OAAO,CAAC,EAAE,CAAC,CAAC;oBACd,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC,CACF,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;aAC/C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,GAAqB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,EAAE,GAAQ,KAAK,CAAC,SAAS,CAAC;YAChC,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,EAAE,CAAC;aACd;YACD,KAAK,CAAC,MAAM,EAAE,CAAC;SAChB;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoC;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,KAAK,GAAqB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEhD,mCAAmC;YAEnC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;YAElC,2CAA2C;YAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACtB;YACD,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAEpE,IAAI,kBAAkB,CAAC;YAEvB,IAAI,OAAO,CAAC,OAAO,IAAI,SAAS,EAAE;gBAChC,kBAAkB,GAAG,MAAM;qBACxB,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;qBAChD,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;aAC3C;iBAAM;gBACL,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;aAC1F;YAED,OAAO,CAAC;gBACN,KAAK,EAAE,kBAAkB;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAA6B;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,sBAAsB;QAG1B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAwD;QACzE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAA8B;QAC7C,MAAM,KAAK,GAAqB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACpC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACpE;IACH,CAAC;CACF"}
|
|
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 CameraPreviewOptions,\n CameraPreviewPictureOptions,\n CameraPreviewPlugin,\n CameraPreviewFlashMode,\n CameraSampleOptions,\n CameraOpacityOptions,\n} from './definitions';\n\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: boolean;\n\n constructor() {\n super({\n name: 'CameraPreview',\n platforms: ['web'],\n });\n }\n\n async start(options: CameraPreviewOptions): Promise<void> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n await navigator.mediaDevices\n .getUserMedia({\n audio: !options.disableAudio,\n video: true,\n })\n .then((stream: MediaStream) => {\n // Stop any existing stream so we can request media with different constraints based on user input\n stream.getTracks().forEach((track) => track.stop());\n })\n .catch((error) => {\n reject(error);\n });\n\n const video = document.getElementById('video');\n const parent = document.getElementById(options.parent);\n\n if (!video) {\n const videoElement = document.createElement('video');\n videoElement.id = 'video';\n videoElement.setAttribute('class', options.className || '');\n\n // Don't flip video feed if camera is rear facing\n if (options.position !== 'rear') {\n videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');\n }\n\n const userAgent = navigator.userAgent.toLowerCase();\n const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');\n\n // Safari on iOS needs to have the autoplay, muted and playsinline attributes set for video.play() to be successful\n // Without these attributes videoElement.play() will throw a NotAllowedError\n // https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari\n if (isSafari) {\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n }\n\n parent.appendChild(videoElement);\n\n if (navigator.mediaDevices?.getUserMedia) {\n const constraints: MediaStreamConstraints = {\n video: {\n width: { ideal: options.width },\n height: { ideal: options.height },\n },\n };\n\n if (options.position === 'rear') {\n (constraints.video as MediaTrackConstraints).facingMode = 'environment';\n this.isBackCamera = true;\n } else {\n this.isBackCamera = false;\n }\n\n navigator.mediaDevices.getUserMedia(constraints).then(\n function (stream) {\n //video.src = window.URL.createObjectURL(stream);\n videoElement.srcObject = stream;\n videoElement.play();\n resolve();\n },\n (err) => {\n reject(err);\n }\n );\n }\n } else {\n reject({ message: 'camera already started' });\n }\n });\n }\n\n async startRecordVideo(): Promise<void> {\n throw this.unimplemented('Not implemented on web.');\n }\n\n async stopRecordVideo(): Promise<void> {\n throw this.unimplemented('Not implemented on web.');\n }\n\n async stop(): Promise<any> {\n const video = document.getElementById('video') as HTMLVideoElement;\n if (video) {\n video.pause();\n\n const st: any = video.srcObject;\n const tracks = st.getTracks();\n\n for (const track of tracks) {\n track.stop();\n }\n video.remove();\n }\n }\n\n async capture(options: CameraPreviewPictureOptions): Promise<any> {\n return new Promise((resolve) => {\n const video = document.getElementById('video') as HTMLVideoElement;\n const canvas = document.createElement('canvas');\n\n // video.width = video.offsetWidth;\n\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 let base64EncodedImage;\n\n if (options.quality != undefined) {\n base64EncodedImage = canvas\n .toDataURL('image/jpeg', options.quality / 100.0)\n .replace('data:image/jpeg;base64,', '');\n } else {\n base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');\n }\n\n resolve({\n value: base64EncodedImage,\n });\n });\n }\n\n async captureSample(_options: CameraSampleOptions): Promise<any> {\n return this.capture(_options);\n }\n\n async getSupportedFlashModes(): Promise<{\n result: CameraPreviewFlashMode[];\n }> {\n throw new Error('getSupportedFlashModes not supported under the web platform');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setFlashMode(_options: { flashMode: CameraPreviewFlashMode | string }): Promise<void> {\n throw new Error('setFlashMode not supported under the web platform');\n }\n\n async flip(): Promise<void> {\n throw new Error('flip not supported under the web platform');\n }\n\n async setOpacity(_options: CameraOpacityOptions): Promise<any> {\n const video = document.getElementById('video') as HTMLVideoElement;\n if (!!video && !!_options['opacity']) {\n video.style.setProperty('opacity', _options['opacity'].toString());\n }\n }\n\n async isCameraStarted(): Promise<{ value: boolean }> {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
var core = require('@capacitor/core');
|
|
6
4
|
|
|
7
5
|
const CameraPreview = core.registerPlugin('CameraPreview', {
|
|
@@ -16,7 +14,9 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
16
14
|
});
|
|
17
15
|
}
|
|
18
16
|
async start(options) {
|
|
17
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
19
18
|
return new Promise(async (resolve, reject) => {
|
|
19
|
+
var _a;
|
|
20
20
|
await navigator.mediaDevices
|
|
21
21
|
.getUserMedia({
|
|
22
22
|
audio: !options.disableAudio,
|
|
@@ -50,7 +50,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
50
50
|
videoElement.setAttribute('playsinline', 'true');
|
|
51
51
|
}
|
|
52
52
|
parent.appendChild(videoElement);
|
|
53
|
-
if (navigator.mediaDevices
|
|
53
|
+
if ((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) {
|
|
54
54
|
const constraints = {
|
|
55
55
|
video: {
|
|
56
56
|
width: { ideal: options.width },
|
|
@@ -68,7 +68,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
68
68
|
//video.src = window.URL.createObjectURL(stream);
|
|
69
69
|
videoElement.srcObject = stream;
|
|
70
70
|
videoElement.play();
|
|
71
|
-
resolve(
|
|
71
|
+
resolve();
|
|
72
72
|
}, (err) => {
|
|
73
73
|
reject(err);
|
|
74
74
|
});
|
|
@@ -91,15 +91,14 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
91
91
|
video.pause();
|
|
92
92
|
const st = video.srcObject;
|
|
93
93
|
const tracks = st.getTracks();
|
|
94
|
-
for (
|
|
95
|
-
const track = tracks[i];
|
|
94
|
+
for (const track of tracks) {
|
|
96
95
|
track.stop();
|
|
97
96
|
}
|
|
98
97
|
video.remove();
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
async capture(options) {
|
|
102
|
-
return new Promise((resolve
|
|
101
|
+
return new Promise((resolve) => {
|
|
103
102
|
const video = document.getElementById('video');
|
|
104
103
|
const canvas = document.createElement('canvas');
|
|
105
104
|
// video.width = video.offsetWidth;
|
|
@@ -132,6 +131,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
132
131
|
async getSupportedFlashModes() {
|
|
133
132
|
throw new Error('getSupportedFlashModes not supported under the web platform');
|
|
134
133
|
}
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
135
135
|
async setFlashMode(_options) {
|
|
136
136
|
throw new Error('setFlashMode not supported under the web platform');
|
|
137
137
|
}
|
|
@@ -144,6 +144,9 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
144
144
|
video.style.setProperty('opacity', _options['opacity'].toString());
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
+
async isCameraStarted() {
|
|
148
|
+
throw this.unimplemented('Not implemented on web.');
|
|
149
|
+
}
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
var web = /*#__PURE__*/Object.freeze({
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["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';\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super({\n name: 'CameraPreview',\n platforms: ['web'],\n });\n }\n async start(options) {\n return new Promise(async (resolve, reject) => {\n await navigator.mediaDevices\n .getUserMedia({\n audio: !options.disableAudio,\n video: true,\n })\n .then((stream) => {\n // Stop any existing stream so we can request media with different constraints based on user input\n stream.getTracks().forEach((track) => track.stop());\n })\n .catch((error) => {\n reject(error);\n });\n const video = document.getElementById('video');\n const parent = document.getElementById(options.parent);\n if (!video) {\n const videoElement = document.createElement('video');\n videoElement.id = 'video';\n videoElement.setAttribute('class', options.className || '');\n // Don't flip video feed if camera is rear facing\n if (options.position !== 'rear') {\n videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');\n }\n const userAgent = navigator.userAgent.toLowerCase();\n const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');\n // Safari on iOS needs to have the autoplay, muted and playsinline attributes set for video.play() to be successful\n // Without these attributes videoElement.play() will throw a NotAllowedError\n // https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari\n if (isSafari) {\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n }\n parent.appendChild(videoElement);\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n const constraints = {\n video: {\n width: { ideal: options.width },\n height: { ideal: options.height },\n },\n };\n if (options.position === 'rear') {\n constraints.video.facingMode = 'environment';\n this.isBackCamera = true;\n }\n else {\n this.isBackCamera = false;\n }\n navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {\n //video.src = window.URL.createObjectURL(stream);\n videoElement.srcObject = stream;\n videoElement.play();\n resolve({});\n }, (err) => {\n reject(err);\n });\n }\n }\n else {\n reject({ message: 'camera already started' });\n }\n });\n }\n async startRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stopRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stop() {\n const video = document.getElementById('video');\n if (video) {\n video.pause();\n const st = video.srcObject;\n const tracks = st.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop();\n }\n video.remove();\n }\n }\n async capture(options) {\n return new Promise((resolve, _) => {\n const video = document.getElementById('video');\n const canvas = document.createElement('canvas');\n // video.width = video.offsetWidth;\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.translate(video.videoWidth, 0);\n context.scale(-1, 1);\n }\n context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n let base64EncodedImage;\n if (options.quality != undefined) {\n base64EncodedImage = canvas\n .toDataURL('image/jpeg', options.quality / 100.0)\n .replace('data:image/jpeg;base64,', '');\n }\n else {\n base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');\n }\n resolve({\n value: base64EncodedImage,\n });\n });\n }\n async captureSample(_options) {\n return this.capture(_options);\n }\n async getSupportedFlashModes() {\n throw new Error('getSupportedFlashModes not supported under the web platform');\n }\n async setFlashMode(_options) {\n throw new Error('setFlashMode not supported under the web platform');\n }\n async flip() {\n throw new Error('flip not supported under the web platform');\n }\n async setOpacity(_options) {\n const video = document.getElementById('video');\n if (!!video && !!_options['opacity']) {\n video.style.setProperty('opacity', _options['opacity'].toString());\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["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';\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super({\n name: 'CameraPreview',\n platforms: ['web'],\n });\n }\n async start(options) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n var _a;\n await navigator.mediaDevices\n .getUserMedia({\n audio: !options.disableAudio,\n video: true,\n })\n .then((stream) => {\n // Stop any existing stream so we can request media with different constraints based on user input\n stream.getTracks().forEach((track) => track.stop());\n })\n .catch((error) => {\n reject(error);\n });\n const video = document.getElementById('video');\n const parent = document.getElementById(options.parent);\n if (!video) {\n const videoElement = document.createElement('video');\n videoElement.id = 'video';\n videoElement.setAttribute('class', options.className || '');\n // Don't flip video feed if camera is rear facing\n if (options.position !== 'rear') {\n videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');\n }\n const userAgent = navigator.userAgent.toLowerCase();\n const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');\n // Safari on iOS needs to have the autoplay, muted and playsinline attributes set for video.play() to be successful\n // Without these attributes videoElement.play() will throw a NotAllowedError\n // https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari\n if (isSafari) {\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n }\n parent.appendChild(videoElement);\n if ((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) {\n const constraints = {\n video: {\n width: { ideal: options.width },\n height: { ideal: options.height },\n },\n };\n if (options.position === 'rear') {\n constraints.video.facingMode = 'environment';\n this.isBackCamera = true;\n }\n else {\n this.isBackCamera = false;\n }\n navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {\n //video.src = window.URL.createObjectURL(stream);\n videoElement.srcObject = stream;\n videoElement.play();\n resolve();\n }, (err) => {\n reject(err);\n });\n }\n }\n else {\n reject({ message: 'camera already started' });\n }\n });\n }\n async startRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stopRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stop() {\n const video = document.getElementById('video');\n if (video) {\n video.pause();\n const st = video.srcObject;\n const tracks = st.getTracks();\n for (const track of tracks) {\n track.stop();\n }\n video.remove();\n }\n }\n async capture(options) {\n return new Promise((resolve) => {\n const video = document.getElementById('video');\n const canvas = document.createElement('canvas');\n // video.width = video.offsetWidth;\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.translate(video.videoWidth, 0);\n context.scale(-1, 1);\n }\n context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n let base64EncodedImage;\n if (options.quality != undefined) {\n base64EncodedImage = canvas\n .toDataURL('image/jpeg', options.quality / 100.0)\n .replace('data:image/jpeg;base64,', '');\n }\n else {\n base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');\n }\n resolve({\n value: base64EncodedImage,\n });\n });\n }\n async captureSample(_options) {\n return this.capture(_options);\n }\n async getSupportedFlashModes() {\n throw new Error('getSupportedFlashModes not supported under the web platform');\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setFlashMode(_options) {\n throw new Error('setFlashMode not supported under the web platform');\n }\n async flip() {\n throw new Error('flip not supported under the web platform');\n }\n async setOpacity(_options) {\n const video = document.getElementById('video');\n if (!!video && !!_options['opacity']) {\n video.style.setProperty('opacity', _options['opacity'].toString());\n }\n }\n async isCameraStarted() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var capacitorCameraPreview = (function (exports, core) {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
const CameraPreview = core.registerPlugin('CameraPreview', {
|
|
@@ -13,7 +13,9 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
async start(options) {
|
|
16
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
16
17
|
return new Promise(async (resolve, reject) => {
|
|
18
|
+
var _a;
|
|
17
19
|
await navigator.mediaDevices
|
|
18
20
|
.getUserMedia({
|
|
19
21
|
audio: !options.disableAudio,
|
|
@@ -47,7 +49,7 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
47
49
|
videoElement.setAttribute('playsinline', 'true');
|
|
48
50
|
}
|
|
49
51
|
parent.appendChild(videoElement);
|
|
50
|
-
if (navigator.mediaDevices
|
|
52
|
+
if ((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) {
|
|
51
53
|
const constraints = {
|
|
52
54
|
video: {
|
|
53
55
|
width: { ideal: options.width },
|
|
@@ -65,7 +67,7 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
65
67
|
//video.src = window.URL.createObjectURL(stream);
|
|
66
68
|
videoElement.srcObject = stream;
|
|
67
69
|
videoElement.play();
|
|
68
|
-
resolve(
|
|
70
|
+
resolve();
|
|
69
71
|
}, (err) => {
|
|
70
72
|
reject(err);
|
|
71
73
|
});
|
|
@@ -88,15 +90,14 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
88
90
|
video.pause();
|
|
89
91
|
const st = video.srcObject;
|
|
90
92
|
const tracks = st.getTracks();
|
|
91
|
-
for (
|
|
92
|
-
const track = tracks[i];
|
|
93
|
+
for (const track of tracks) {
|
|
93
94
|
track.stop();
|
|
94
95
|
}
|
|
95
96
|
video.remove();
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
async capture(options) {
|
|
99
|
-
return new Promise((resolve
|
|
100
|
+
return new Promise((resolve) => {
|
|
100
101
|
const video = document.getElementById('video');
|
|
101
102
|
const canvas = document.createElement('canvas');
|
|
102
103
|
// video.width = video.offsetWidth;
|
|
@@ -129,6 +130,7 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
129
130
|
async getSupportedFlashModes() {
|
|
130
131
|
throw new Error('getSupportedFlashModes not supported under the web platform');
|
|
131
132
|
}
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
132
134
|
async setFlashMode(_options) {
|
|
133
135
|
throw new Error('setFlashMode not supported under the web platform');
|
|
134
136
|
}
|
|
@@ -141,6 +143,9 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
141
143
|
video.style.setProperty('opacity', _options['opacity'].toString());
|
|
142
144
|
}
|
|
143
145
|
}
|
|
146
|
+
async isCameraStarted() {
|
|
147
|
+
throw this.unimplemented('Not implemented on web.');
|
|
148
|
+
}
|
|
144
149
|
}
|
|
145
150
|
|
|
146
151
|
var web = /*#__PURE__*/Object.freeze({
|
|
@@ -150,8 +155,6 @@ var capacitorSplashScreen = (function (exports, core) {
|
|
|
150
155
|
|
|
151
156
|
exports.CameraPreview = CameraPreview;
|
|
152
157
|
|
|
153
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
154
|
-
|
|
155
158
|
return exports;
|
|
156
159
|
|
|
157
160
|
})({}, capacitorExports);
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["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';\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super({\n name: 'CameraPreview',\n platforms: ['web'],\n });\n }\n async start(options) {\n return new Promise(async (resolve, reject) => {\n await navigator.mediaDevices\n .getUserMedia({\n audio: !options.disableAudio,\n video: true,\n })\n .then((stream) => {\n // Stop any existing stream so we can request media with different constraints based on user input\n stream.getTracks().forEach((track) => track.stop());\n })\n .catch((error) => {\n reject(error);\n });\n const video = document.getElementById('video');\n const parent = document.getElementById(options.parent);\n if (!video) {\n const videoElement = document.createElement('video');\n videoElement.id = 'video';\n videoElement.setAttribute('class', options.className || '');\n // Don't flip video feed if camera is rear facing\n if (options.position !== 'rear') {\n videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');\n }\n const userAgent = navigator.userAgent.toLowerCase();\n const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');\n // Safari on iOS needs to have the autoplay, muted and playsinline attributes set for video.play() to be successful\n // Without these attributes videoElement.play() will throw a NotAllowedError\n // https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari\n if (isSafari) {\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n }\n parent.appendChild(videoElement);\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n const constraints = {\n video: {\n width: { ideal: options.width },\n height: { ideal: options.height },\n },\n };\n if (options.position === 'rear') {\n constraints.video.facingMode = 'environment';\n this.isBackCamera = true;\n }\n else {\n this.isBackCamera = false;\n }\n navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {\n //video.src = window.URL.createObjectURL(stream);\n videoElement.srcObject = stream;\n videoElement.play();\n resolve({});\n }, (err) => {\n reject(err);\n });\n }\n }\n else {\n reject({ message: 'camera already started' });\n }\n });\n }\n async startRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stopRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stop() {\n const video = document.getElementById('video');\n if (video) {\n video.pause();\n const st = video.srcObject;\n const tracks = st.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop();\n }\n video.remove();\n }\n }\n async capture(options) {\n return new Promise((resolve, _) => {\n const video = document.getElementById('video');\n const canvas = document.createElement('canvas');\n // video.width = video.offsetWidth;\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.translate(video.videoWidth, 0);\n context.scale(-1, 1);\n }\n context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n let base64EncodedImage;\n if (options.quality != undefined) {\n base64EncodedImage = canvas\n .toDataURL('image/jpeg', options.quality / 100.0)\n .replace('data:image/jpeg;base64,', '');\n }\n else {\n base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');\n }\n resolve({\n value: base64EncodedImage,\n });\n });\n }\n async captureSample(_options) {\n return this.capture(_options);\n }\n async getSupportedFlashModes() {\n throw new Error('getSupportedFlashModes not supported under the web platform');\n }\n async setFlashMode(_options) {\n throw new Error('setFlashMode not supported under the web platform');\n }\n async flip() {\n throw new Error('flip not supported under the web platform');\n }\n async setOpacity(_options) {\n const video = document.getElementById('video');\n if (!!video && !!_options['opacity']) {\n video.style.setProperty('opacity', _options['opacity'].toString());\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["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';\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super({\n name: 'CameraPreview',\n platforms: ['web'],\n });\n }\n async start(options) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n var _a;\n await navigator.mediaDevices\n .getUserMedia({\n audio: !options.disableAudio,\n video: true,\n })\n .then((stream) => {\n // Stop any existing stream so we can request media with different constraints based on user input\n stream.getTracks().forEach((track) => track.stop());\n })\n .catch((error) => {\n reject(error);\n });\n const video = document.getElementById('video');\n const parent = document.getElementById(options.parent);\n if (!video) {\n const videoElement = document.createElement('video');\n videoElement.id = 'video';\n videoElement.setAttribute('class', options.className || '');\n // Don't flip video feed if camera is rear facing\n if (options.position !== 'rear') {\n videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');\n }\n const userAgent = navigator.userAgent.toLowerCase();\n const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');\n // Safari on iOS needs to have the autoplay, muted and playsinline attributes set for video.play() to be successful\n // Without these attributes videoElement.play() will throw a NotAllowedError\n // https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari\n if (isSafari) {\n videoElement.setAttribute('autoplay', 'true');\n videoElement.setAttribute('muted', 'true');\n videoElement.setAttribute('playsinline', 'true');\n }\n parent.appendChild(videoElement);\n if ((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) {\n const constraints = {\n video: {\n width: { ideal: options.width },\n height: { ideal: options.height },\n },\n };\n if (options.position === 'rear') {\n constraints.video.facingMode = 'environment';\n this.isBackCamera = true;\n }\n else {\n this.isBackCamera = false;\n }\n navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {\n //video.src = window.URL.createObjectURL(stream);\n videoElement.srcObject = stream;\n videoElement.play();\n resolve();\n }, (err) => {\n reject(err);\n });\n }\n }\n else {\n reject({ message: 'camera already started' });\n }\n });\n }\n async startRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stopRecordVideo() {\n throw this.unimplemented('Not implemented on web.');\n }\n async stop() {\n const video = document.getElementById('video');\n if (video) {\n video.pause();\n const st = video.srcObject;\n const tracks = st.getTracks();\n for (const track of tracks) {\n track.stop();\n }\n video.remove();\n }\n }\n async capture(options) {\n return new Promise((resolve) => {\n const video = document.getElementById('video');\n const canvas = document.createElement('canvas');\n // video.width = video.offsetWidth;\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.translate(video.videoWidth, 0);\n context.scale(-1, 1);\n }\n context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n let base64EncodedImage;\n if (options.quality != undefined) {\n base64EncodedImage = canvas\n .toDataURL('image/jpeg', options.quality / 100.0)\n .replace('data:image/jpeg;base64,', '');\n }\n else {\n base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');\n }\n resolve({\n value: base64EncodedImage,\n });\n });\n }\n async captureSample(_options) {\n return this.capture(_options);\n }\n async getSupportedFlashModes() {\n throw new Error('getSupportedFlashModes not supported under the web platform');\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async setFlashMode(_options) {\n throw new Error('setFlashMode not supported under the web platform');\n }\n async flip() {\n throw new Error('flip not supported under the web platform');\n }\n async setOpacity(_options) {\n const video = document.getElementById('video');\n if (!!video && !!_options['opacity']) {\n video.style.setProperty('opacity', _options['opacity'].toString());\n }\n }\n async isCameraStarted() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;AACK,UAAC,aAAa,GAAGA,mBAAc,CAAC,eAAe,EAAE;IACtD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpE,CAAC;;ICFM,MAAM,gBAAgB,SAASC,cAAS,CAAC;IAChD,IAAI,WAAW,GAAG;IAClB,QAAQ,KAAK,CAAC;IACd,YAAY,IAAI,EAAE,eAAe;IACjC,YAAY,SAAS,EAAE,CAAC,KAAK,CAAC;IAC9B,SAAS,CAAC;IACV;IACA,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE;IACzB;IACA,QAAQ,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK;IACtD,YAAY,IAAI,EAAE;IAClB,YAAY,MAAM,SAAS,CAAC;IAC5B,iBAAiB,YAAY,CAAC;IAC9B,gBAAgB,KAAK,EAAE,CAAC,OAAO,CAAC,YAAY;IAC5C,gBAAgB,KAAK,EAAE,IAAI;IAC3B,aAAa;IACb,iBAAiB,IAAI,CAAC,CAAC,MAAM,KAAK;IAClC;IACA,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;IACnE,aAAa;IACb,iBAAiB,KAAK,CAAC,CAAC,KAAK,KAAK;IAClC,gBAAgB,MAAM,CAAC,KAAK,CAAC;IAC7B,aAAa,CAAC;IACd,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;IAC1D,YAAY,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;IAClE,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IACpE,gBAAgB,YAAY,CAAC,EAAE,GAAG,OAAO;IACzC,gBAAgB,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC3E;IACA,gBAAgB,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;IACjD,oBAAoB,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,uDAAuD,CAAC;IAC/G;IACA,gBAAgB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;IACnE,gBAAgB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC9F;IACA;IACA;IACA,gBAAgB,IAAI,QAAQ,EAAE;IAC9B,oBAAoB,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;IACjE,oBAAoB,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;IAC9D,oBAAoB,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IACpE;IACA,gBAAgB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;IAChD,gBAAgB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE;IACxG,oBAAoB,MAAM,WAAW,GAAG;IACxC,wBAAwB,KAAK,EAAE;IAC/B,4BAA4B,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;IAC3D,4BAA4B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;IAC7D,yBAAyB;IACzB,qBAAqB;IACrB,oBAAoB,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;IACrD,wBAAwB,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa;IACpE,wBAAwB,IAAI,CAAC,YAAY,GAAG,IAAI;IAChD;IACA,yBAAyB;IACzB,wBAAwB,IAAI,CAAC,YAAY,GAAG,KAAK;IACjD;IACA,oBAAoB,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE;IAC5F;IACA,wBAAwB,YAAY,CAAC,SAAS,GAAG,MAAM;IACvD,wBAAwB,YAAY,CAAC,IAAI,EAAE;IAC3C,wBAAwB,OAAO,EAAE;IACjC,qBAAqB,EAAE,CAAC,GAAG,KAAK;IAChC,wBAAwB,MAAM,CAAC,GAAG,CAAC;IACnC,qBAAqB,CAAC;IACtB;IACA;IACA,iBAAiB;IACjB,gBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC7D;IACA,SAAS,CAAC;IACV;IACA,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D;IACA,IAAI,MAAM,eAAe,GAAG;IAC5B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D;IACA,IAAI,MAAM,IAAI,GAAG;IACjB,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;IACtD,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,KAAK,CAAC,KAAK,EAAE;IACzB,YAAY,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS;IACtC,YAAY,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE;IACzC,YAAY,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IACxC,gBAAgB,KAAK,CAAC,IAAI,EAAE;IAC5B;IACA,YAAY,KAAK,CAAC,MAAM,EAAE;IAC1B;IACA;IACA,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;IAC3B,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IACxC,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;IAC1D,YAAY,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC3D;IACA,YAAY,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACnD,YAAY,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU;IAC3C,YAAY,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW;IAC7C;IACA,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IACpC,gBAAgB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,gBAAgB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC;IACA,YAAY,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;IAC/E,YAAY,IAAI,kBAAkB;IAClC,YAAY,IAAI,OAAO,CAAC,OAAO,IAAI,SAAS,EAAE;IAC9C,gBAAgB,kBAAkB,GAAG;IACrC,qBAAqB,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,GAAG,KAAK;IACpE,qBAAqB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;IAC3D;IACA,iBAAiB;IACjB,gBAAgB,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;IACxG;IACA,YAAY,OAAO,CAAC;IACpB,gBAAgB,KAAK,EAAE,kBAAkB;IACzC,aAAa,CAAC;IACd,SAAS,CAAC;IACV;IACA,IAAI,MAAM,aAAa,CAAC,QAAQ,EAAE;IAClC,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACrC;IACA,IAAI,MAAM,sBAAsB,GAAG;IACnC,QAAQ,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC;IACtF;IACA;IACA,IAAI,MAAM,YAAY,CAAC,QAAQ,EAAE;IACjC,QAAQ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;IAC5E;IACA,IAAI,MAAM,IAAI,GAAG;IACjB,QAAQ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;IACpE;IACA,IAAI,MAAM,UAAU,CAAC,QAAQ,EAAE;IAC/B,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;IACtD,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;IAC9C,YAAY,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9E;IACA;IACA,IAAI,MAAM,eAAe,GAAG;IAC5B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D;IACA;;;;;;;;;;;;;;;"}
|
package/ios/Plugin/Plugin.m
CHANGED
|
@@ -13,4 +13,5 @@ CAP_PLUGIN(CameraPreview, "CameraPreview",
|
|
|
13
13
|
CAP_PLUGIN_METHOD(setFlashMode, CAPPluginReturnPromise);
|
|
14
14
|
CAP_PLUGIN_METHOD(startRecordVideo, CAPPluginReturnPromise);
|
|
15
15
|
CAP_PLUGIN_METHOD(stopRecordVideo, CAPPluginReturnPromise);
|
|
16
|
+
CAP_PLUGIN_METHOD(isCameraStarted, CAPPluginReturnPromise);
|
|
16
17
|
)
|
package/ios/Plugin/Plugin.swift
CHANGED
|
@@ -287,5 +287,15 @@ public class CameraPreview: CAPPlugin {
|
|
|
287
287
|
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
|
+
|
|
291
|
+
@objc func isCameraStarted(_ call: CAPPluginCall) {
|
|
292
|
+
DispatchQueue.main.async {
|
|
293
|
+
if self.cameraController.captureSession?.isRunning ?? false {
|
|
294
|
+
call.resolve(["value": true])
|
|
295
|
+
} else {
|
|
296
|
+
call.resolve(["value": false])
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
290
300
|
|
|
291
301
|
}
|
package/ios/Podfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PODS:
|
|
2
|
-
- Capacitor (
|
|
2
|
+
- Capacitor (6.2.0):
|
|
3
3
|
- CapacitorCordova
|
|
4
|
-
- CapacitorCordova (
|
|
4
|
+
- CapacitorCordova (6.2.0)
|
|
5
5
|
|
|
6
6
|
DEPENDENCIES:
|
|
7
7
|
- "Capacitor (from `../node_modules/@capacitor/ios`)"
|
|
@@ -14,9 +14,9 @@ EXTERNAL SOURCES:
|
|
|
14
14
|
:path: "../node_modules/@capacitor/ios"
|
|
15
15
|
|
|
16
16
|
SPEC CHECKSUMS:
|
|
17
|
-
Capacitor:
|
|
18
|
-
CapacitorCordova:
|
|
17
|
+
Capacitor: 1f3c7b9802d958cd8c4eb63895fff85dff2e1eea
|
|
18
|
+
CapacitorCordova: b33e7f4aa4ed105dd43283acdd940964374a87d9
|
|
19
19
|
|
|
20
20
|
PODFILE CHECKSUM: 14e8b2400457751b865e1c327e7cfa1c6fa67da6
|
|
21
21
|
|
|
22
|
-
COCOAPODS: 1.
|
|
22
|
+
COCOAPODS: 1.15.2
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/camera-preview",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"description": "Camera preview",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"verify:ios": "cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..",
|
|
12
12
|
"verify:android": "cd android && ./gradlew clean build test && cd ..",
|
|
13
13
|
"verify:web": "npm run build",
|
|
14
|
-
"build": "npm run clean && tsc && rollup -c rollup.config.
|
|
14
|
+
"build": "npm run clean && tsc && rollup -c rollup.config.mjs",
|
|
15
15
|
"clean": "rimraf './dist'",
|
|
16
16
|
"watch": "tsc --watch",
|
|
17
|
-
"lint": "concurrently -g \"npm:eslint\" \"npm:prettier -- --check\" \"npm run swiftlint -- lint ios\"",
|
|
17
|
+
"lint": "concurrently -g \"npm:eslint\" \"npm:prettier -- --check --plugin=prettier-plugin-java\" \"npm run swiftlint -- lint ios\"",
|
|
18
18
|
"fmt": "concurrently -g \"npm:eslint -- --fix\" \"npm:prettier -- --write\" \"npm:swiftlint -- lint --fix --format ios\"",
|
|
19
19
|
"eslint": "eslint . --ext ts",
|
|
20
20
|
"prettier": "prettier \"**/*.{css,html,ts,js,java}\"",
|
|
@@ -25,21 +25,21 @@
|
|
|
25
25
|
"author": "Ariel Hernandez Musa",
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@capacitor/android": "^6.
|
|
29
|
-
"@capacitor/core": "^6.
|
|
30
|
-
"@capacitor/ios": "^6.
|
|
31
|
-
"@ionic/eslint-config": "^0.
|
|
32
|
-
"@ionic/prettier-config": "^
|
|
33
|
-
"@ionic/swiftlint-config": "^
|
|
34
|
-
"concurrently": "^
|
|
35
|
-
"eslint": "^
|
|
36
|
-
"husky": "^
|
|
37
|
-
"prettier": "^
|
|
38
|
-
"prettier-plugin-java": "^
|
|
39
|
-
"pretty-quick": "^
|
|
40
|
-
"rimraf": "^
|
|
41
|
-
"rollup": "^
|
|
42
|
-
"swiftlint": "^
|
|
28
|
+
"@capacitor/android": "^6.2.0",
|
|
29
|
+
"@capacitor/core": "^6.2.0",
|
|
30
|
+
"@capacitor/ios": "^6.2.0",
|
|
31
|
+
"@ionic/eslint-config": "^0.4.0",
|
|
32
|
+
"@ionic/prettier-config": "^4.0.0",
|
|
33
|
+
"@ionic/swiftlint-config": "^2.0.0",
|
|
34
|
+
"concurrently": "^9.1.0",
|
|
35
|
+
"eslint": "^8.57.1",
|
|
36
|
+
"husky": "^9.1.7",
|
|
37
|
+
"prettier": "^3.4.2",
|
|
38
|
+
"prettier-plugin-java": "^2.6.5",
|
|
39
|
+
"pretty-quick": "^4.0.0",
|
|
40
|
+
"rimraf": "^6.0.1",
|
|
41
|
+
"rollup": "^4.28.1",
|
|
42
|
+
"swiftlint": "^2.0.0",
|
|
43
43
|
"typescript": "^4.3.2"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
@@ -80,5 +80,9 @@
|
|
|
80
80
|
},
|
|
81
81
|
"bugs": {
|
|
82
82
|
"url": "https://github.com/capacitor-community/camera-preview/issues"
|
|
83
|
+
},
|
|
84
|
+
"engines": {
|
|
85
|
+
"node": ">=18.0.0",
|
|
86
|
+
"npm": ">=9.0.0"
|
|
83
87
|
}
|
|
84
88
|
}
|