idmission-web-sdk 2.2.47 → 2.2.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/components/CompositeWizard.d.ts +1 -2
  2. package/dist/components/CompositeWizard.d.ts.map +1 -1
  3. package/dist/components/camera/CameraAccessDeniedOverlay.d.ts.map +1 -1
  4. package/dist/components/camera/CameraVideoTag.d.ts +2 -4
  5. package/dist/components/camera/CameraVideoTag.d.ts.map +1 -1
  6. package/dist/components/camera/MicrophoneAccessDeniedOverlay.d.ts.map +1 -1
  7. package/dist/components/customer_flows/CustomerBiometricsEnrollment.d.ts.map +1 -1
  8. package/dist/components/customer_flows/CustomerIdAndBiometricsEnrollment.d.ts.map +1 -1
  9. package/dist/components/customer_flows/CustomerIdentification.d.ts.map +1 -1
  10. package/dist/components/customer_flows/CustomerVerification.d.ts.map +1 -1
  11. package/dist/components/customer_flows/DocumentCapture.d.ts.map +1 -1
  12. package/dist/components/customer_flows/FaceValidation.d.ts.map +1 -1
  13. package/dist/components/customer_flows/IdAndFaceValidation.d.ts.map +1 -1
  14. package/dist/components/customer_flows/IdValidation.d.ts.map +1 -1
  15. package/dist/components/customer_flows/VideoIdValidation.d.ts.map +1 -1
  16. package/dist/components/customer_identification/CustomerIdentificationWizard.d.ts +1 -1
  17. package/dist/components/customer_identification/CustomerIdentificationWizard.d.ts.map +1 -1
  18. package/dist/components/customer_verification/CustomerVerificationWizard.d.ts.map +1 -1
  19. package/dist/components/document_capture/DocumentCaptureScreen.d.ts.map +1 -1
  20. package/dist/components/document_capture/DocumentCaptureStateProvider.d.ts.map +1 -1
  21. package/dist/components/face_liveness/FaceLivenessWizard.d.ts.map +1 -1
  22. package/dist/components/id_capture/DocumentDetectionModelProvider.d.ts.map +1 -1
  23. package/dist/components/id_capture/FocusModelProvider.d.ts.map +1 -1
  24. package/dist/components/id_capture/IdCapture.d.ts.map +1 -1
  25. package/dist/components/id_capture/IdCaptureGuides.d.ts.map +1 -1
  26. package/dist/components/id_capture/IdCaptureLoadingOverlayDefault.d.ts.map +1 -1
  27. package/dist/components/id_capture/IdCaptureLoadingOverlayLegacy.d.ts.map +1 -1
  28. package/dist/components/id_capture/IdCaptureWizard.d.ts.map +1 -1
  29. package/dist/components/selfie_capture/SelfieCapture.d.ts.map +1 -1
  30. package/dist/components/selfie_capture/SelfieCaptureLoadingOverlayDefault.d.ts.map +1 -1
  31. package/dist/components/selfie_capture/SelfieCaptureLoadingOverlayLegacy.d.ts.map +1 -1
  32. package/dist/components/selfie_capture/SelfieGuidanceModelsProvider.d.ts.map +1 -1
  33. package/dist/components/video_id/IdVideoCapture.d.ts.map +1 -1
  34. package/dist/components/video_id/IdVideoCaptureFlipIdPrompt.d.ts.map +1 -1
  35. package/dist/components/video_id/IdVideoCaptureGuides.d.ts.map +1 -1
  36. package/dist/components/video_id/IdVideoCaptureWizard.d.ts.map +1 -1
  37. package/dist/components/video_signature_capture/VideoSignatureCapture.d.ts.map +1 -1
  38. package/dist/components/video_signature_capture/VideoSignatureWizard.d.ts.map +1 -1
  39. package/dist/lib/camera/Camera.d.ts +4 -0
  40. package/dist/lib/camera/Camera.d.ts.map +1 -1
  41. package/dist/lib/camera/cameraStore.d.ts +52 -0
  42. package/dist/lib/camera/cameraStore.d.ts.map +1 -0
  43. package/dist/lib/camera/videoRefStack.d.ts +6 -0
  44. package/dist/lib/camera/videoRefStack.d.ts.map +1 -0
  45. package/dist/lib/models/DocumentDetection.d.ts +3 -1
  46. package/dist/lib/models/DocumentDetection.d.ts.map +1 -1
  47. package/dist/lib/models/FaceDetection.d.ts +3 -1
  48. package/dist/lib/models/FaceDetection.d.ts.map +1 -1
  49. package/dist/lib/models/Focus.d.ts +3 -1
  50. package/dist/lib/models/Focus.d.ts.map +1 -1
  51. package/dist/sdk2.cjs.development.js +1031 -1089
  52. package/dist/sdk2.cjs.development.js.map +1 -1
  53. package/dist/sdk2.cjs.production.js +1 -1
  54. package/dist/sdk2.cjs.production.js.map +1 -1
  55. package/dist/sdk2.esm.js +1031 -1089
  56. package/dist/sdk2.esm.js.map +1 -1
  57. package/dist/sdk2.umd.development.js +1155 -1087
  58. package/dist/sdk2.umd.development.js.map +1 -1
  59. package/dist/sdk2.umd.production.js +1 -1
  60. package/dist/sdk2.umd.production.js.map +1 -1
  61. package/dist/version.d.ts +1 -1
  62. package/package.json +5 -4
  63. package/dist/components/camera/CameraProvider.d.ts +0 -17
  64. package/dist/components/camera/CameraProvider.d.ts.map +0 -1
@@ -211,7 +211,7 @@
211
211
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
212
212
  };
213
213
 
214
- var webSdkVersion = '2.2.47';
214
+ var webSdkVersion = '2.2.49';
215
215
 
216
216
  function getPlatform() {
217
217
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1088,11 +1088,11 @@
1088
1088
  if (!allowedAuthUrls.includes(url)) throw new Error('invalid auth url');
1089
1089
  exports.defaultAuthUrl = url;
1090
1090
  }
1091
- var initialState$5 = {
1091
+ var initialState$6 = {
1092
1092
  authUrl: exports.defaultAuthUrl,
1093
1093
  sessionCheckState: 'READY'
1094
1094
  };
1095
- var AuthStateContext = /*#__PURE__*/React.createContext(initialState$5);
1095
+ var AuthStateContext = /*#__PURE__*/React.createContext(initialState$6);
1096
1096
  var AuthDispatchContext = /*#__PURE__*/React.createContext(function () {});
1097
1097
  var reducer$4 = function reducer(state, action) {
1098
1098
  switch (action.type) {
@@ -1124,7 +1124,7 @@
1124
1124
  if (authUrl === void 0) {
1125
1125
  authUrl = exports.defaultAuthUrl;
1126
1126
  }
1127
- var _a = React.useReducer(reducer$4, _assign(_assign({}, initialState$5), {
1127
+ var _a = React.useReducer(reducer$4, _assign(_assign({}, initialState$6), {
1128
1128
  authUrl: authUrl
1129
1129
  })),
1130
1130
  state = _a[0],
@@ -3028,617 +3028,15 @@
3028
3028
  resizeObserverRef.current.instance.unobserve(element);
3029
3029
  }
3030
3030
  };
3031
- }, [opts.box, round]), opts.ref);
3032
- return React.useMemo(function () {
3033
- return {
3034
- ref: refCallback,
3035
- width: size.width,
3036
- height: size.height
3037
- };
3038
- }, [refCallback, size.width, size.height]);
3039
- }
3040
-
3041
- function getFrameDimensions(frame) {
3042
- var frameWidth = frame.width,
3043
- frameHeight = frame.height;
3044
- if (frame instanceof HTMLImageElement) {
3045
- frameWidth = frame.naturalWidth;
3046
- frameHeight = frame.naturalHeight;
3047
- }
3048
- if (frame instanceof HTMLVideoElement) {
3049
- frameWidth = frame.videoWidth;
3050
- frameHeight = frame.videoHeight;
3051
- }
3052
- return [frameWidth, frameHeight];
3053
- }
3054
-
3055
- var InvisibleCanvas = styled.canvas(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n display: none;\n"], ["\n display: none;\n"])));
3056
- function drawToCanvas(canvas, frame, width, height) {
3057
- if (!canvas) return;
3058
- var ctx = canvas.getContext('2d');
3059
- if (!ctx) return;
3060
- if (!width || !height) {
3061
- var _a = getFrameDimensions(frame),
3062
- frameWidth = _a[0],
3063
- frameHeight = _a[1];
3064
- width || (width = frameWidth);
3065
- height || (height = frameHeight);
3066
- }
3067
- canvas.width = width;
3068
- canvas.height = height;
3069
- ctx.drawImage(frame, 0, 0, width, height);
3070
- }
3071
- function clearCanvas(canvas) {
3072
- var _a;
3073
- (_a = canvas === null || canvas === void 0 ? void 0 : canvas.getContext('2d')) === null || _a === void 0 ? void 0 : _a.clearRect(0, 0, canvas === null || canvas === void 0 ? void 0 : canvas.width, canvas === null || canvas === void 0 ? void 0 : canvas.height);
3074
- }
3075
- var templateObject_1$G;
3076
-
3077
- function listAvailableCameras(facingMode_1) {
3078
- return __awaiter(this, arguments, void 0, function (facingMode, requestMicAccess) {
3079
- var cameraEnumerationStream, videoDevices;
3080
- if (requestMicAccess === void 0) {
3081
- requestMicAccess = false;
3082
- }
3083
- return __generator(this, function (_a) {
3084
- switch (_a.label) {
3085
- case 0:
3086
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
3087
- video: {
3088
- facingMode: {
3089
- exact: facingMode
3090
- }
3091
- },
3092
- audio: requestMicAccess
3093
- })
3094
- // This lists all available cameras attached to the user's device.
3095
- ];
3096
- case 1:
3097
- cameraEnumerationStream = _a.sent();
3098
- return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];
3099
- case 2:
3100
- videoDevices = _a.sent().filter(function (_a) {
3101
- var kind = _a.kind;
3102
- return kind === 'videoinput';
3103
- });
3104
- // Release the access to the user's camera that we obtained for enumeration purposes.
3105
- cameraEnumerationStream.getVideoTracks().forEach(function (track) {
3106
- track.enabled = false;
3107
- track.stop();
3108
- });
3109
- cameraEnumerationStream = null;
3110
- return [2 /*return*/, videoDevices];
3111
- }
3112
- });
3113
- });
3114
- }
3115
- var frontLabels = ['front', 'avant', 'anteriore', 'cameraaanvoorzijde', 'kamerapåframsidan', 'forsidekamera', 'kamerapåforsiden', 'aparatprzedni', 'etukamera', 'kameradepan', 'ÖnKamera', 'cameramặttrước', 'camerăfață', 'prednákamera', 'prednjakamera', 'előlapikamera', 'přednífotoaparát', 'μπροστινήκάμερα', 'переднякамера', 'передняякамера', 'преднакамера', 'алдыңғыкамера', 'מצלמה קדמית', 'الكاميرا الأمامية', 'फ़्रंटकैमरा', '前置相机', '前置鏡頭', '前面カメラ', '전면카메라', 'กล้องด้านหน้า'].map(function (s) {
3116
- return s.toLocaleLowerCase().split(' ').join('');
3117
- });
3118
- var rearLabels = ['back', 'rear', 'posterior', 'trasera', 'traseira', 'arrière', 'rückkamera', 'fotocamera(posteriore)', 'cameraaanachterzijde', 'kamerapåbaksidan', 'kamerapåbaksiden', 'bagsidekamera', 'aparattylny', 'takakamera', 'arkakamera', 'kamerabelakang', 'cameramặtsau', 'camerăspate', 'stražnjakamera', 'zadnákamera', 'hátoldalikamera', 'zadnífotoaparát', 'πίσωκάμερα', 'заднякамера', 'Задняякамера', 'заднакамера', 'артқыкамера', 'מצלמה אחורית', 'الكاميرا الخلفية', 'बैककैमरा', '后置相机', '後置鏡頭', '背面カメラ', '후면카메라', 'กล้องด้านหลัง'].map(function (s) {
3119
- return s.toLocaleLowerCase().split(' ').join('');
3120
- });
3121
- var backUltraWideLabels = ['backdualwidecamera', 'backultrawidecamera', 'ultraampliaposterior', 'ultra-angulartraseira', 'ultragrandeangulartraseira', 'ultragrandangle', 'ultragranangular', 'ultra-weitwinkelkamera', 'ultra-grandangolo', 'ultrabredecameraaanachterzijde', 'ultravidvinkelkamerapåbaksidan', 'ultravidvinkelkameraetpåbagsiden', 'ultravidvinkelkamerabak', 'ultragenişkameraarkayüzü', 'ultralaajakulmainentakakamera', 'tylnyaparatultraszerokokątny', 'cameracựcrộngmặtsau', 'camerăcuobiectivultra‑superangularspate', 'ultraszéleslátószögűkamera', 'kameraultralebarbelakang', 'stražnjaultraširokakamera', 'zadníultraširokoúhlýfotoaparát', 'ultraširokouhlá', 'πίσωυπερευρείακάμερα', 'заднянадширококутнакамера', 'Задняясверхширокоугольнаякамера', 'Задна свръх широкоъгълна камера', 'артқыультракеңбұрыштыкамера', 'מצלמה אולטרה רחבה אחורית', 'كاميرا خلفية عريضة جدًا', 'बैकअल्ट्रावाइडकैमरा', '后置超广角相机', '後置超廣角鏡頭相機', '背面超広角カメラ', '후면울트라와이드카메라', 'กล้องด้านหลังอัลตร้าไวด์'].map(function (s) {
3122
- return s.toLocaleLowerCase().split(' ').join('');
3123
- });
3124
- var labelMatches = function labelMatches(labelOrDevice, labelSetOrLabel) {
3125
- var label = labelOrDevice instanceof MediaDeviceInfo ? getDeviceLabel(labelOrDevice) : labelOrDevice;
3126
- var labelSet = typeof labelSetOrLabel === 'string' ? [labelSetOrLabel] : labelSetOrLabel;
3127
- return labelSet.some(function (l) {
3128
- return label.includes(l);
3129
- });
3130
- };
3131
- var getDeviceLabel = function getDeviceLabel(deviceInfo) {
3132
- return deviceInfo.label.toLocaleLowerCase().split(' ').join('');
3133
- };
3134
- var currentCamera;
3135
- var currentAudioStream;
3136
- function obtainCameraAccess(stream, deviceLabel, video) {
3137
- releaseCameraAccess();
3138
- log('obtaining camera access...');
3139
- var _a = stream.getVideoTracks()[0].getSettings(),
3140
- width = _a.width,
3141
- height = _a.height;
3142
- var label = deviceLabel.toLocaleLowerCase().split(' ').join('');
3143
- var isRearFacing = labelMatches(label, __spreadArray(__spreadArray(__spreadArray([], rearLabels, true), backUltraWideLabels, true), ['iphone'], false));
3144
- var release = function release() {
3145
- stream.getTracks().forEach(function (track) {
3146
- track.enabled = false;
3147
- track.stop();
3148
- });
3149
- if (video) {
3150
- video.pause();
3151
- video.srcObject = null;
3152
- video.src = '';
3153
- }
3154
- };
3155
- width || (width = 0);
3156
- height || (height = 0);
3157
- currentCamera = {
3158
- label: deviceLabel,
3159
- stream: stream,
3160
- width: width,
3161
- height: height,
3162
- isRearFacing: isRearFacing,
3163
- release: release
3164
- };
3165
- if (video) video.srcObject = stream;
3166
- return currentCamera;
3167
- }
3168
- function releaseCameraAccess() {
3169
- if (!currentCamera) return;
3170
- log('releasing camera access...');
3171
- currentCamera.release();
3172
- currentCamera = undefined;
3173
- }
3174
- function releaseMicrophoneAccess() {
3175
- var _a;
3176
- if (!currentAudioStream) return;
3177
- log('releasing microphone access...');
3178
- (_a = currentAudioStream.stop) === null || _a === void 0 ? void 0 : _a.call(currentAudioStream);
3179
- currentAudioStream.getAudioTracks().forEach(function (t) {
3180
- var _a;
3181
- (_a = t.stop) === null || _a === void 0 ? void 0 : _a.call(t);
3182
- });
3183
- currentAudioStream = undefined;
3184
- }
3185
- function usePreferredCaptureDevice(_a) {
3186
- var _b = _a === void 0 ? {} : _a,
3187
- _c = _b.requestAccessAutomatically,
3188
- requestAccessAutomatically = _c === void 0 ? true : _c,
3189
- _d = _b.preferFrontFacingCamera,
3190
- preferFrontFacingCamera = _d === void 0 ? false : _d,
3191
- _e = _b.preferContinuityCamera,
3192
- preferContinuityCamera = _e === void 0 ? true : _e,
3193
- _f = _b.requireMicrophoneAccess,
3194
- requireMicrophoneAccess = _f === void 0 ? false : _f,
3195
- _g = _b.maxVideoWidth,
3196
- maxVideoWidth = _g === void 0 ? 1920 : _g,
3197
- maxFps = _b.maxFps,
3198
- _h = _b.debugMode,
3199
- debugMode = _h === void 0 ? false : _h;
3200
- var videoRef = React.useRef(null);
3201
- var videoRefStack = React.useRef([]);
3202
- var cameraRef = React.useRef(null);
3203
- var _j = React.useState(false),
3204
- cameraReady = _j[0],
3205
- setCameraReady = _j[1];
3206
- var _k = React.useState(false),
3207
- microphoneReady = _k[0],
3208
- setMicrophoneReady = _k[1];
3209
- var _l = React.useState(null),
3210
- videoDevice = _l[0],
3211
- setVideoDevice = _l[1];
3212
- var _m = React.useState(null),
3213
- audioStream = _m[0],
3214
- setAudioStream = _m[1];
3215
- var _o = React.useState(false),
3216
- videoLoaded = _o[0],
3217
- setVideoLoaded = _o[1];
3218
- var _p = React.useState(false),
3219
- iphoneContinuityCameraAvailable = _p[0],
3220
- setIphoneContinuityCameraAvailable = _p[1];
3221
- var _q = React.useState(preferContinuityCamera),
3222
- iphoneContinuityCameraAllowed = _q[0],
3223
- setIphoneContinuityCameraAllowed = _q[1];
3224
- var _r = React.useState(false),
3225
- iphoneContinuityCameraDenied = _r[0],
3226
- setIphoneContinuityCameraDenied = _r[1];
3227
- var _s = React.useState(false),
3228
- cameraAccessDenied = _s[0],
3229
- setCameraAccessDenied = _s[1];
3230
- var _t = React.useState(false),
3231
- microphoneAccessDenied = _t[0],
3232
- setMicrophoneAccessDenied = _t[1];
3233
- var videoRefElement = videoRef.current;
3234
- React.useEffect(function pushVideoRefToStackWhenChanged() {
3235
- // proceed if the video element being mounted is not already at the top of the videoRefStack.
3236
- var topOfStack = videoRefStack.current.slice(-1)[0];
3237
- if (videoRefElement && videoRefElement !== topOfStack) {
3238
- log('adding video to stack', videoRefElement);
3239
- videoRefStack.current.push(videoRefElement);
3240
- }
3241
- }, [videoRefElement]);
3242
- var onVideoUnmounted = React.useCallback(function (videoElement) {
3243
- log('removing video from stack', videoElement);
3244
- videoRefStack.current = videoRefStack.current.filter(function (v) {
3245
- return v !== videoElement;
3246
- });
3247
- videoRef.current = videoRefStack.current.slice(-1)[0]; // top of stack.
3248
- log('new videoRef is', videoRef.current);
3249
- }, []);
3250
- React.useEffect(function resetCameraOnContinuityPreferenceChanged() {
3251
- if (debugMode) {
3252
- log('iphone continuity camera allowed changed', iphoneContinuityCameraAllowed);
3253
- }
3254
- releaseCameraAccess();
3255
- cameraRef.current = null;
3256
- setVideoLoaded(false);
3257
- }, [debugMode, iphoneContinuityCameraAllowed]);
3258
- // NOTE: the bound callback function here is called requestCameraAccess, because
3259
- // it initiates the useEffect chain that results in camera access being requested
3260
- // (requestCameraAccessAutomatically -> chooseFromAvailableCameras -> accessChosenCamera).
3261
- //
3262
- // We chose to title the inner function "chooseFromAvailableCameras" because
3263
- // that's all it literally does -- the available cameras are enumerated, and then
3264
- // the result is parsed to decide which one we like best, which is then passed to
3265
- // setVideoDevice, which causes accessChosenCamera to trigger.
3266
- //
3267
- // I am not a huge fan of getUserMedia's design -- you need to call it twice in order
3268
- // to select the "best" camera for your application's purposes.
3269
- var requestCameraAccess = React.useCallback(function chooseFromAvailableCameras() {
3270
- return __awaiter(this, void 0, void 0, function () {
3271
- var availableCameras, selectedCamera, platform_1, iphoneContinuityCamera, e_1;
3272
- var _a, _b;
3273
- return __generator(this, function (_c) {
3274
- switch (_c.label) {
3275
- case 0:
3276
- setCameraReady(false);
3277
- setCameraAccessDenied(false);
3278
- _c.label = 1;
3279
- case 1:
3280
- _c.trys.push([1, 3,, 4]);
3281
- return [4 /*yield*/, listAvailableCameras()];
3282
- case 2:
3283
- availableCameras = _c.sent();
3284
- selectedCamera = void 0;
3285
- if (debugMode) {
3286
- log('availableCameras', availableCameras);
3287
- }
3288
- platform_1 = getPlatform();
3289
- if (debugMode) {
3290
- log('platformDetails', platform_1);
3291
- }
3292
- if (!iphoneContinuityCameraDenied && (!(platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) || platform_1.os.family === 'OS X')) {
3293
- iphoneContinuityCamera = availableCameras.find(function (deviceInfo) {
3294
- return labelMatches(deviceInfo, 'iphone');
3295
- });
3296
- setIphoneContinuityCameraAvailable(!!iphoneContinuityCamera);
3297
- if (iphoneContinuityCamera && iphoneContinuityCameraAllowed) {
3298
- selectedCamera = iphoneContinuityCamera;
3299
- }
3300
- } else if (((_a = platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) === null || _a === void 0 ? void 0 : _a.family) === 'Android' || availableCameras.every(function (c) {
3301
- return c.label.startsWith('camera2 ');
3302
- })) {
3303
- availableCameras = availableCameras.sort(function (a, b) {
3304
- return a.label.toLowerCase().localeCompare(b.label.toLowerCase());
3305
- });
3306
- if (debugMode) {
3307
- log('cameras have been sorted', availableCameras);
3308
- }
3309
- }
3310
- if (preferFrontFacingCamera) {
3311
- selectedCamera = availableCameras.find(function (deviceInfo) {
3312
- return labelMatches(deviceInfo, frontLabels);
3313
- });
3314
- }
3315
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3316
- return labelMatches(deviceInfo, 'backtriplecamera');
3317
- }));
3318
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3319
- return labelMatches(deviceInfo, 'backdualcamera');
3320
- }));
3321
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3322
- return labelMatches(deviceInfo, rearLabels) && !labelMatches(deviceInfo, backUltraWideLabels);
3323
- }));
3324
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3325
- return labelMatches(deviceInfo, rearLabels);
3326
- }));
3327
- // on iOS, the front facing camera always is at the first position in the list, so we skip it if all else fails.
3328
- if (!preferFrontFacingCamera && ((_b = platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) === null || _b === void 0 ? void 0 : _b.family) === 'iOS' && availableCameras.length > 0) {
3329
- selectedCamera || (selectedCamera = availableCameras[1]);
3330
- }
3331
- selectedCamera || (selectedCamera = availableCameras[0]);
3332
- if (debugMode) log('selectedCamera', selectedCamera);
3333
- setVideoDevice(selectedCamera);
3334
- return [3 /*break*/, 4];
3335
- case 3:
3336
- e_1 = _c.sent();
3337
- if (e_1.name === 'NotAllowedError') {
3338
- error('camera access has been blocked by the user', e_1);
3339
- setCameraAccessDenied(true);
3340
- } else {
3341
- error('camera access encountered some other error', e_1);
3342
- throw e_1;
3343
- }
3344
- return [3 /*break*/, 4];
3345
- case 4:
3346
- return [2 /*return*/];
3347
- }
3348
- });
3349
- });
3350
- }, [debugMode, iphoneContinuityCameraAllowed, iphoneContinuityCameraDenied, preferFrontFacingCamera]);
3351
- React.useEffect(function requestCameraAccessAutomatically() {
3352
- if (requestAccessAutomatically && !cameraAccessDenied) {
3353
- requestCameraAccess()["catch"](error);
3354
- }
3355
- }, [cameraAccessDenied, requestAccessAutomatically, requestCameraAccess]);
3356
- React.useEffect(function accessChosenCamera() {
3357
- var _this = this;
3358
- var _a;
3359
- if (!videoDevice) return;
3360
- var cleanup = function cleanup() {
3361
- releaseCameraAccess();
3362
- cameraRef.current = null;
3363
- setVideoLoaded(false);
3364
- };
3365
- if (!((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia)) return cleanup;
3366
- (function () {
3367
- return __awaiter(_this, void 0, void 0, function () {
3368
- var constraints, stream, e_2, handleStreamEnded;
3369
- var _a;
3370
- return __generator(this, function (_b) {
3371
- switch (_b.label) {
3372
- case 0:
3373
- constraints = {
3374
- audio: false,
3375
- video: {
3376
- deviceId: {
3377
- exact: videoDevice.deviceId
3378
- },
3379
- width: {
3380
- ideal: maxVideoWidth
3381
- },
3382
- aspectRatio: 1.777777778,
3383
- frameRate: {}
3384
- }
3385
- };
3386
- if (maxFps) {
3387
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3388
- // @ts-ignore
3389
- constraints.video.frameRate = {
3390
- max: maxFps
3391
- };
3392
- }
3393
- stream = null;
3394
- _b.label = 1;
3395
- case 1:
3396
- _b.trys.push([1, 3,, 4]);
3397
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];
3398
- case 2:
3399
- stream = _b.sent();
3400
- return [3 /*break*/, 4];
3401
- case 3:
3402
- e_2 = _b.sent();
3403
- if (e_2.name === 'NotAllowedError') {
3404
- if (iphoneContinuityCameraAllowed) {
3405
- setIphoneContinuityCameraAvailable(false);
3406
- setIphoneContinuityCameraDenied(true);
3407
- } else {
3408
- setCameraAccessDenied(true);
3409
- }
3410
- return [2 /*return*/];
3411
- }
3412
- return [3 /*break*/, 4];
3413
- case 4:
3414
- if (!!stream) return [3 /*break*/, 8];
3415
- _b.label = 5;
3416
- case 5:
3417
- _b.trys.push([5, 7,, 8]);
3418
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
3419
- audio: false,
3420
- video: true
3421
- })];
3422
- case 6:
3423
- stream = _b.sent();
3424
- log('opened stream with no width and height constraints');
3425
- return [3 /*break*/, 8];
3426
- case 7:
3427
- _b.sent();
3428
- log('cannot open stream at all');
3429
- return [3 /*break*/, 8];
3430
- case 8:
3431
- if (!stream) {
3432
- throw new Error('failed to open camera');
3433
- }
3434
- handleStreamEnded = function handleStreamEnded() {
3435
- if (iphoneContinuityCameraAvailable && iphoneContinuityCameraAllowed) {
3436
- log('someone unplugged the continuity camera');
3437
- releaseCameraAccess();
3438
- cameraRef.current = null;
3439
- setIphoneContinuityCameraAvailable(false);
3440
- setIphoneContinuityCameraDenied(true);
3441
- setVideoDevice(null);
3442
- } else {
3443
- log('someone unplugged the webcam');
3444
- releaseCameraAccess();
3445
- cameraRef.current = null;
3446
- setVideoLoaded(false);
3447
- setCameraAccessDenied(true);
3448
- }
3449
- };
3450
- (_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('ended', handleStreamEnded);
3451
- stream.getVideoTracks().forEach(function (track) {
3452
- track.onended = handleStreamEnded;
3453
- });
3454
- cameraRef.current = obtainCameraAccess(stream, videoDevice.label, videoRef.current);
3455
- return [2 /*return*/];
3456
- }
3457
- });
3458
- });
3459
- })();
3460
- return cleanup;
3461
- }, [iphoneContinuityCameraAllowed, iphoneContinuityCameraAvailable, maxFps, maxVideoWidth, videoDevice]);
3462
- React.useEffect(function triggerCameraReady() {
3463
- // TODO: in the future let's evaluate whether we can simplify this to just
3464
- // setCameraReady(!!videoDevice && videoLoaded) -- we are wondering whether
3465
- // we somehow depend on this being set twice.
3466
- setCameraReady(false);
3467
- if (videoDevice && videoLoaded) {
3468
- setCameraReady(videoDevice && videoLoaded);
3469
- }
3470
- }, [videoLoaded, videoDevice]);
3471
- var requestMicrophoneAccess = React.useCallback(function _requestMicrophoneAccess() {
3472
- return __awaiter(this, void 0, void 0, function () {
3473
- var stream;
3474
- return __generator(this, function (_a) {
3475
- switch (_a.label) {
3476
- case 0:
3477
- setMicrophoneReady(false);
3478
- setMicrophoneAccessDenied(false);
3479
- _a.label = 1;
3480
- case 1:
3481
- _a.trys.push([1, 3,, 4]);
3482
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
3483
- audio: true,
3484
- video: false
3485
- })];
3486
- case 2:
3487
- stream = _a.sent();
3488
- currentAudioStream = stream;
3489
- setAudioStream(stream);
3490
- setMicrophoneReady(true);
3491
- stream.getAudioTracks().forEach(function (track) {
3492
- track.onended = function () {
3493
- setMicrophoneAccessDenied(true);
3494
- };
3495
- });
3496
- return [3 /*break*/, 4];
3497
- case 3:
3498
- _a.sent();
3499
- setMicrophoneAccessDenied(true);
3500
- return [3 /*break*/, 4];
3501
- case 4:
3502
- return [2 /*return*/];
3503
- }
3504
- });
3505
- });
3506
- }, []);
3507
- React.useEffect(function requestMicrophoneAccessIfNeeded() {
3508
- if (!requireMicrophoneAccess || microphoneAccessDenied) return;
3509
- requestMicrophoneAccess()["catch"](error);
3510
- return function () {
3511
- releaseMicrophoneAccess();
3512
- setAudioStream(null);
3513
- setMicrophoneReady(false);
3514
- };
3515
- }, [microphoneAccessDenied, requestMicrophoneAccess, requireMicrophoneAccess]);
3516
- var takePhoto = React.useCallback(function _takePhoto() {
3517
- return __awaiter(this, void 0, void 0, function () {
3518
- var canvas;
3519
- return __generator(this, function (_a) {
3520
- switch (_a.label) {
3521
- case 0:
3522
- if (!cameraRef.current) return [2 /*return*/, null];
3523
- if (!(typeof ImageCapture !== 'undefined')) return [3 /*break*/, 2];
3524
- return [4 /*yield*/, new ImageCapture(cameraRef.current.stream.getTracks()[0]).takePhoto()];
3525
- case 1:
3526
- return [2 /*return*/, _a.sent()];
3527
- case 2:
3528
- if (!videoRef.current) return [2 /*return*/, null];
3529
- canvas = document.createElement('canvas');
3530
- drawToCanvas(canvas, videoRef.current);
3531
- return [2 /*return*/, new Promise(function (resolve) {
3532
- return canvas.toBlob(resolve);
3533
- })];
3534
- }
3535
- });
3536
- });
3537
- }, []);
3538
- return React.useMemo(function () {
3539
- return {
3540
- videoRef: videoRef,
3541
- videoDevice: videoDevice,
3542
- videoLoaded: videoLoaded,
3543
- setVideoLoaded: setVideoLoaded,
3544
- onVideoUnmounted: onVideoUnmounted,
3545
- cameraRef: cameraRef,
3546
- cameraReady: cameraReady,
3547
- cameraAccessDenied: cameraAccessDenied,
3548
- requestCameraAccess: requestCameraAccess,
3549
- releaseCameraAccess: releaseCameraAccess,
3550
- iphoneContinuityCameraAvailable: iphoneContinuityCameraAvailable,
3551
- iphoneContinuityCameraAllowed: iphoneContinuityCameraAllowed,
3552
- setIphoneContinuityCameraAllowed: setIphoneContinuityCameraAllowed,
3553
- takePhoto: takePhoto,
3554
- audioStream: audioStream,
3555
- microphoneReady: microphoneReady,
3556
- microphoneAccessDenied: microphoneAccessDenied,
3557
- requestMicrophoneAccess: requestMicrophoneAccess
3558
- };
3559
- }, [audioStream, cameraAccessDenied, cameraReady, iphoneContinuityCameraAllowed, iphoneContinuityCameraAvailable, microphoneAccessDenied, microphoneReady, onVideoUnmounted, requestCameraAccess, requestMicrophoneAccess, takePhoto, videoDevice, videoLoaded]);
3560
- }
3561
-
3562
- var CameraStateContext = /*#__PURE__*/React.createContext({
3563
- videoRef: {
3564
- current: null
3565
- },
3566
- videoDevice: null,
3567
- videoLoaded: false,
3568
- cameraRef: {
3569
- current: null
3570
- },
3571
- cameraReady: false,
3572
- cameraAccessDenied: false,
3573
- requestCameraAccess: function requestCameraAccess() {
3574
- return null;
3575
- },
3576
- releaseCameraAccess: function releaseCameraAccess() {
3577
- return null;
3578
- },
3579
- iphoneContinuityCameraAvailable: false,
3580
- iphoneContinuityCameraAllowed: true,
3581
- setIphoneContinuityCameraAllowed: function setIphoneContinuityCameraAllowed() {
3582
- return null;
3583
- },
3584
- takePhoto: function takePhoto() {
3585
- return Promise.resolve(null);
3586
- },
3587
- setVideoLoaded: function setVideoLoaded() {
3588
- return null;
3589
- },
3590
- onVideoUnmounted: function onVideoUnmounted() {
3591
- return null;
3592
- },
3593
- audioStream: null,
3594
- microphoneReady: false,
3595
- microphoneAccessDenied: false,
3596
- requestMicrophoneAccess: function requestMicrophoneAccess() {
3597
- return null;
3598
- }
3599
- });
3600
- var CameraProvider = function CameraProvider(_a) {
3601
- var children = _a.children,
3602
- _b = _a.requestAccessAutomatically,
3603
- requestAccessAutomatically = _b === void 0 ? true : _b,
3604
- _c = _a.preferFrontFacingCamera,
3605
- preferFrontFacingCamera = _c === void 0 ? false : _c,
3606
- _d = _a.preferContinuityCamera,
3607
- preferContinuityCamera = _d === void 0 ? true : _d,
3608
- _e = _a.requireMicrophoneAccess,
3609
- requireMicrophoneAccess = _e === void 0 ? false : _e,
3610
- _f = _a.maxVideoWidth,
3611
- maxVideoWidth = _f === void 0 ? 1920 : _f,
3612
- maxFps = _a.maxFps,
3613
- onCameraAccessDenied = _a.onCameraAccessDenied,
3614
- onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied,
3615
- _g = _a.debugMode,
3616
- debugMode = _g === void 0 ? false : _g;
3617
- var captureDevice = usePreferredCaptureDevice({
3618
- requestAccessAutomatically: requestAccessAutomatically,
3619
- preferFrontFacingCamera: preferFrontFacingCamera,
3620
- preferContinuityCamera: preferContinuityCamera,
3621
- requireMicrophoneAccess: requireMicrophoneAccess,
3622
- maxVideoWidth: maxVideoWidth,
3623
- maxFps: maxFps,
3624
- debugMode: debugMode
3625
- });
3626
- React.useEffect(function () {
3627
- if (captureDevice.cameraAccessDenied) onCameraAccessDenied === null || onCameraAccessDenied === void 0 ? void 0 : onCameraAccessDenied();
3628
- }, [captureDevice.cameraAccessDenied, onCameraAccessDenied]);
3629
- React.useEffect(function () {
3630
- if (captureDevice.microphoneAccessDenied) onMicrophoneAccessDenied === null || onMicrophoneAccessDenied === void 0 ? void 0 : onMicrophoneAccessDenied();
3631
- }, [captureDevice.microphoneAccessDenied, onMicrophoneAccessDenied]);
3632
- var releaseCameraAccess = captureDevice.releaseCameraAccess;
3633
- React.useEffect(function () {
3634
- return function () {
3635
- releaseCameraAccess();
3636
- };
3637
- }, [releaseCameraAccess]);
3638
- return /*#__PURE__*/React.createElement(CameraStateContext.Provider, {
3639
- value: captureDevice
3640
- }, children);
3641
- };
3031
+ }, [opts.box, round]), opts.ref);
3032
+ return React.useMemo(function () {
3033
+ return {
3034
+ ref: refCallback,
3035
+ width: size.width,
3036
+ height: size.height
3037
+ };
3038
+ }, [refCallback, size.width, size.height]);
3039
+ }
3642
3040
 
3643
3041
  function _typeof$1(o) {
3644
3042
  "@babel/helpers - typeof";
@@ -4112,9 +3510,9 @@
4112
3510
  }
4113
3511
  var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regenerator);
4114
3512
 
4115
- function _createForOfIteratorHelperLoose$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4116
- function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
4117
- function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
3513
+ function _createForOfIteratorHelperLoose$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray$2(r)) || e) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3514
+ function _unsupportedIterableToArray$2(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$2(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$2(r, a) : void 0; } }
3515
+ function _arrayLikeToArray$2(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4118
3516
  var t = self;
4119
3517
  function e() {
4120
3518
  throw Error("Invalid UTF8");
@@ -6341,7 +5739,7 @@
6341
5739
  height: (_hn4 = hn(e, 4)) != null ? _hn4 : 0,
6342
5740
  angle: 0
6343
5741
  }), (_en2 = en(t, ws, 4)) != null && _en2.g().length) {
6344
- for (var _iterator = _createForOfIteratorHelperLoose$1(en(t, ws, 4).g()), _step; !(_step = _iterator()).done;) {
5742
+ for (var _iterator = _createForOfIteratorHelperLoose$2(en(t, ws, 4).g()), _step; !(_step = _iterator()).done;) {
6345
5743
  var _We, _We2, _We3, _un3;
6346
5744
  var _e16 = _step.value;
6347
5745
  i.keypoints.push({
@@ -6356,7 +5754,7 @@
6356
5754
  }
6357
5755
  function Qi(t) {
6358
5756
  var e = [];
6359
- for (var _iterator2 = _createForOfIteratorHelperLoose$1(rn(t, Fs, 1)), _step2; !(_step2 = _iterator2()).done;) {
5757
+ for (var _iterator2 = _createForOfIteratorHelperLoose$2(rn(t, Fs, 1)), _step2; !(_step2 = _iterator2()).done;) {
6360
5758
  var _fn2, _fn3, _fn4;
6361
5759
  var _n14 = _step2.value;
6362
5760
  e.push({
@@ -6369,7 +5767,7 @@
6369
5767
  }
6370
5768
  function to(t) {
6371
5769
  var e = [];
6372
- for (var _iterator3 = _createForOfIteratorHelperLoose$1(rn(t, Ts, 1)), _step3; !(_step3 = _iterator3()).done;) {
5770
+ for (var _iterator3 = _createForOfIteratorHelperLoose$2(rn(t, Ts, 1)), _step3; !(_step3 = _iterator3()).done;) {
6373
5771
  var _fn5, _fn6, _fn7;
6374
5772
  var _n15 = _step3.value;
6375
5773
  e.push({
@@ -6517,7 +5915,7 @@
6517
5915
  var r = new Uint32Array(e.length);
6518
5916
  for (var _n16 = 0; _n16 < e.length; _n16++) r[_n16] = t.i.stringToNewUTF8(e[_n16]);
6519
5917
  e = t.i._malloc(4 * r.length), t.i.HEAPU32.set(r, e >> 2), n(e);
6520
- for (var _iterator4 = _createForOfIteratorHelperLoose$1(r), _step4; !(_step4 = _iterator4()).done;) {
5918
+ for (var _iterator4 = _createForOfIteratorHelperLoose$2(r), _step4; !(_step4 = _iterator4()).done;) {
6521
5919
  var _e17 = _step4.value;
6522
5920
  t.i._free(_e17);
6523
5921
  }
@@ -6883,7 +6281,7 @@
6883
6281
  }
6884
6282
  t.push(n);
6885
6283
  };
6886
- for (var _iterator7 = _createForOfIteratorHelperLoose$1(this.g), _step7; !(_step7 = _iterator7()).done;) {
6284
+ for (var _iterator7 = _createForOfIteratorHelperLoose$2(this.g), _step7; !(_step7 = _iterator7()).done;) {
6887
6285
  _loop();
6888
6286
  }
6889
6287
  return new _Yo(t, this.ba(), this.K(), this.canvas, this.l, this.width, this.height);
@@ -7015,7 +6413,7 @@
7015
6413
  }
7016
6414
  t.push(n);
7017
6415
  };
7018
- for (var _iterator8 = _createForOfIteratorHelperLoose$1(this.g), _step8; !(_step8 = _iterator8()).done;) {
6416
+ for (var _iterator8 = _createForOfIteratorHelperLoose$2(this.g), _step8; !(_step8 = _iterator8()).done;) {
7019
6417
  _loop2();
7020
6418
  }
7021
6419
  return new _ia(t, this.K(), this.canvas, this.l, this.width, this.height);
@@ -7495,7 +6893,7 @@
7495
6893
  yn(e, si, this.h);
7496
6894
  var n = new qr();
7497
6895
  Hr(n, "mediapipe.tasks.vision.face_detector.FaceDetectorGraph"), Yr(n, "IMAGE:image_in"), Yr(n, "NORM_RECT:norm_rect_in"), $r(n, "DETECTIONS:detections"), n.o(e), es(t, n), this.g.attachProtoVectorListener("detections", function (t, e) {
7498
- for (var _iterator9 = _createForOfIteratorHelperLoose$1(t), _step9; !(_step9 = _iterator9()).done;) {
6896
+ for (var _iterator9 = _createForOfIteratorHelperLoose$2(t), _step9; !(_step9 = _iterator9()).done;) {
7499
6897
  var _e23 = _step9.value;
7500
6898
  t = Es(_e23), _this43.j.detections.push(Zi(t));
7501
6899
  }
@@ -7589,7 +6987,7 @@
7589
6987
  yn(e, di, this.h);
7590
6988
  var n = new qr();
7591
6989
  Hr(n, "mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph"), Yr(n, "IMAGE:image_in"), Yr(n, "NORM_RECT:norm_rect"), $r(n, "NORM_LANDMARKS:face_landmarks"), n.o(e), es(t, n), this.g.attachProtoVectorListener("face_landmarks", function (t, e) {
7592
- for (var _iterator10 = _createForOfIteratorHelperLoose$1(t), _step10; !(_step10 = _iterator10()).done;) {
6990
+ for (var _iterator10 = _createForOfIteratorHelperLoose$2(t), _step10; !(_step10 = _iterator10()).done;) {
7593
6991
  var _e24 = _step10.value;
7594
6992
  t = Ms(_e24), _this45.j.faceLandmarks.push(Qi(t));
7595
6993
  }
@@ -7598,7 +6996,7 @@
7598
6996
  _o(_this45, t);
7599
6997
  }), this.outputFaceBlendshapes && (rs(t, "blendshapes"), $r(n, "BLENDSHAPES:blendshapes"), this.g.attachProtoVectorListener("blendshapes", function (t, e) {
7600
6998
  if (_this45.outputFaceBlendshapes) {
7601
- for (var _iterator11 = _createForOfIteratorHelperLoose$1(t), _step11; !(_step11 = _iterator11()).done;) {
6999
+ for (var _iterator11 = _createForOfIteratorHelperLoose$2(t), _step11; !(_step11 = _iterator11()).done;) {
7602
7000
  var _t$g;
7603
7001
  var _e25 = _step11.value;
7604
7002
  t = fs(_e25), _this45.j.faceBlendshapes.push(Ji((_t$g = t.g()) != null ? _t$g : []));
@@ -7609,7 +7007,7 @@
7609
7007
  _o(_this45, t);
7610
7008
  })), this.outputFacialTransformationMatrixes && (rs(t, "face_geometry"), $r(n, "FACE_GEOMETRY:face_geometry"), this.g.attachProtoVectorListener("face_geometry", function (t, e) {
7611
7009
  if (_this45.outputFacialTransformationMatrixes) {
7612
- for (var _iterator12 = _createForOfIteratorHelperLoose$1(t), _step12; !(_step12 = _iterator12()).done;) {
7010
+ for (var _iterator12 = _createForOfIteratorHelperLoose$2(t), _step12; !(_step12 = _iterator12()).done;) {
7613
7011
  var _ln2, _ln3, _He;
7614
7012
  var _e26 = _step12.value;
7615
7013
  (t = en(ai(_e26), Ps, 2)) && _this45.j.facialTransformationMatrixes.push({
@@ -7740,11 +7138,11 @@
7740
7138
  e = !0;
7741
7139
  }
7742
7140
  var n = [];
7743
- for (var _iterator13 = _createForOfIteratorHelperLoose$1(t), _step13; !(_step13 = _iterator13()).done;) {
7141
+ for (var _iterator13 = _createForOfIteratorHelperLoose$2(t), _step13; !(_step13 = _iterator13()).done;) {
7744
7142
  var _s9 = _step13.value;
7745
7143
  var r = fs(_s9);
7746
7144
  t = [];
7747
- for (var _iterator14 = _createForOfIteratorHelperLoose$1(r.g()), _step14; !(_step14 = _iterator14()).done;) {
7145
+ for (var _iterator14 = _createForOfIteratorHelperLoose$2(r.g()), _step14; !(_step14 = _iterator14()).done;) {
7748
7146
  var _fn8, _ref9, _un4, _ref10, _un5;
7749
7147
  var _n24 = _step14.value;
7750
7148
  r = e && null != hn(_n24, 1) ? ln(hn(_n24, 1)) : -1, t.push({
@@ -7790,11 +7188,11 @@
7790
7188
  yn(e, Oi, this.v);
7791
7189
  var n = new qr();
7792
7190
  Hr(n, "mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph"), Yr(n, "IMAGE:image_in"), Yr(n, "NORM_RECT:norm_rect"), $r(n, "HAND_GESTURES:hand_gestures"), $r(n, "LANDMARKS:hand_landmarks"), $r(n, "WORLD_LANDMARKS:world_hand_landmarks"), $r(n, "HANDEDNESS:handedness"), n.o(e), es(t, n), this.g.attachProtoVectorListener("hand_landmarks", function (t, e) {
7793
- for (var _iterator15 = _createForOfIteratorHelperLoose$1(t), _step15; !(_step15 = _iterator15()).done;) {
7191
+ for (var _iterator15 = _createForOfIteratorHelperLoose$2(t), _step15; !(_step15 = _iterator15()).done;) {
7794
7192
  var _e28 = _step15.value;
7795
7193
  t = Ms(_e28);
7796
7194
  var _n25 = [];
7797
- for (var _iterator16 = _createForOfIteratorHelperLoose$1(rn(t, Fs, 1)), _step16; !(_step16 = _iterator16()).done;) {
7195
+ for (var _iterator16 = _createForOfIteratorHelperLoose$2(rn(t, Fs, 1)), _step16; !(_step16 = _iterator16()).done;) {
7798
7196
  var _fn9, _fn10, _fn11;
7799
7197
  var _e29 = _step16.value;
7800
7198
  _n25.push({
@@ -7809,11 +7207,11 @@
7809
7207
  }), this.g.attachEmptyPacketListener("hand_landmarks", function (t) {
7810
7208
  _o(_this49, t);
7811
7209
  }), this.g.attachProtoVectorListener("world_hand_landmarks", function (t, e) {
7812
- for (var _iterator17 = _createForOfIteratorHelperLoose$1(t), _step17; !(_step17 = _iterator17()).done;) {
7210
+ for (var _iterator17 = _createForOfIteratorHelperLoose$2(t), _step17; !(_step17 = _iterator17()).done;) {
7813
7211
  var _e30 = _step17.value;
7814
7212
  t = Ls(_e30);
7815
7213
  var _n26 = [];
7816
- for (var _iterator18 = _createForOfIteratorHelperLoose$1(rn(t, Ts, 1)), _step18; !(_step18 = _iterator18()).done;) {
7214
+ for (var _iterator18 = _createForOfIteratorHelperLoose$2(rn(t, Ts, 1)), _step18; !(_step18 = _iterator18()).done;) {
7817
7215
  var _fn12, _fn13, _fn14;
7818
7216
  var _e31 = _step18.value;
7819
7217
  _n26.push({
@@ -7898,7 +7296,7 @@
7898
7296
  yn(e, Si, this.j);
7899
7297
  var n = new qr();
7900
7298
  Hr(n, "mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph"), Yr(n, "IMAGE:image_in"), Yr(n, "NORM_RECT:norm_rect"), $r(n, "LANDMARKS:hand_landmarks"), $r(n, "WORLD_LANDMARKS:world_hand_landmarks"), $r(n, "HANDEDNESS:handedness"), n.o(e), es(t, n), this.g.attachProtoVectorListener("hand_landmarks", function (t, e) {
7901
- for (var _iterator19 = _createForOfIteratorHelperLoose$1(t), _step19; !(_step19 = _iterator19()).done;) {
7299
+ for (var _iterator19 = _createForOfIteratorHelperLoose$2(t), _step19; !(_step19 = _iterator19()).done;) {
7902
7300
  var _e32 = _step19.value;
7903
7301
  t = Ms(_e32), _this51.landmarks.push(Qi(t));
7904
7302
  }
@@ -7906,7 +7304,7 @@
7906
7304
  }), this.g.attachEmptyPacketListener("hand_landmarks", function (t) {
7907
7305
  _o(_this51, t);
7908
7306
  }), this.g.attachProtoVectorListener("world_hand_landmarks", function (t, e) {
7909
- for (var _iterator20 = _createForOfIteratorHelperLoose$1(t), _step20; !(_step20 = _iterator20()).done;) {
7307
+ for (var _iterator20 = _createForOfIteratorHelperLoose$2(t), _step20; !(_step20 = _iterator20()).done;) {
7910
7308
  var _e33 = _step20.value;
7911
7309
  t = Ls(_e33), _this51.worldLandmarks.push(to(t));
7912
7310
  }
@@ -7917,11 +7315,11 @@
7917
7315
  var n = _this51.handedness,
7918
7316
  r = n.push;
7919
7317
  var s = [];
7920
- for (var _iterator21 = _createForOfIteratorHelperLoose$1(t), _step21; !(_step21 = _iterator21()).done;) {
7318
+ for (var _iterator21 = _createForOfIteratorHelperLoose$2(t), _step21; !(_step21 = _iterator21()).done;) {
7921
7319
  var _e34 = _step21.value;
7922
7320
  t = fs(_e34);
7923
7321
  var _n27 = [];
7924
- for (var _iterator22 = _createForOfIteratorHelperLoose$1(t.g()), _step22; !(_step22 = _iterator22()).done;) {
7322
+ for (var _iterator22 = _createForOfIteratorHelperLoose$2(t.g()), _step22; !(_step22 = _iterator22()).done;) {
7925
7323
  var _fn15, _ln4, _ref11, _un6, _ref12, _un7;
7926
7324
  var _e35 = _step22.value;
7927
7325
  _n27.push({
@@ -8313,7 +7711,7 @@
8313
7711
  dn(a, 3, !0), gn(a, 1, e.keypoint.x), gn(a, 2, e.keypoint.y), on(i, 5, oh, a);
8314
7712
  } else {
8315
7713
  if (!e.scribble) throw Error("Must provide either a keypoint or a scribble.");
8316
- for (var _iterator23 = _createForOfIteratorHelperLoose$1((o = new sh(), e.scribble)), _step23; !(_step23 = _iterator23()).done;) {
7714
+ for (var _iterator23 = _createForOfIteratorHelperLoose$2((o = new sh(), e.scribble)), _step23; !(_step23 = _iterator23()).done;) {
8317
7715
  a = _step23.value;
8318
7716
  dn(e = new nh(), 3, !0), gn(e, 1, a.x), gn(e, 2, a.y), an(o, nh, e);
8319
7717
  }
@@ -8414,7 +7812,7 @@
8414
7812
  yn(e, Vi, this.h);
8415
7813
  var n = new qr();
8416
7814
  Hr(n, "mediapipe.tasks.vision.ObjectDetectorGraph"), Yr(n, "IMAGE:input_frame_gpu"), Yr(n, "NORM_RECT:norm_rect"), $r(n, "DETECTIONS:detections"), n.o(e), es(t, n), this.g.attachProtoVectorListener("detections", function (t, e) {
8417
- for (var _iterator24 = _createForOfIteratorHelperLoose$1(t), _step24; !(_step24 = _iterator24()).done;) {
7815
+ for (var _iterator24 = _createForOfIteratorHelperLoose$2(t), _step24; !(_step24 = _iterator24()).done;) {
8418
7816
  var _e37 = _step24.value;
8419
7817
  t = Es(_e37), _this61.j.detections.push(Zi(t));
8420
7818
  }
@@ -8514,7 +7912,7 @@
8514
7912
  var n = new qr();
8515
7913
  Hr(n, "mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph"), Yr(n, "IMAGE:image_in"), Yr(n, "NORM_RECT:norm_rect"), $r(n, "NORM_LANDMARKS:normalized_landmarks"), $r(n, "WORLD_LANDMARKS:world_landmarks"), n.o(e), es(t, n), wo(this, t), this.g.attachProtoVectorListener("normalized_landmarks", function (t, e) {
8516
7914
  _this63.landmarks = [];
8517
- for (var _iterator25 = _createForOfIteratorHelperLoose$1(t), _step25; !(_step25 = _iterator25()).done;) {
7915
+ for (var _iterator25 = _createForOfIteratorHelperLoose$2(t), _step25; !(_step25 = _iterator25()).done;) {
8518
7916
  var _e39 = _step25.value;
8519
7917
  t = Ms(_e39), _this63.landmarks.push(Qi(t));
8520
7918
  }
@@ -8523,7 +7921,7 @@
8523
7921
  _this63.landmarks = [], _o(_this63, t);
8524
7922
  }), this.g.attachProtoVectorListener("world_landmarks", function (t, e) {
8525
7923
  _this63.worldLandmarks = [];
8526
- for (var _iterator26 = _createForOfIteratorHelperLoose$1(t), _step26; !(_step26 = _iterator26()).done;) {
7924
+ for (var _iterator26 = _createForOfIteratorHelperLoose$2(t), _step26; !(_step26 = _iterator26()).done;) {
8527
7925
  var _e40 = _step26.value;
8528
7926
  t = Ls(_e40), _this63.worldLandmarks.push(to(t));
8529
7927
  }
@@ -8606,6 +8004,42 @@
8606
8004
  });
8607
8005
  }
8608
8006
 
8007
+ function getFrameDimensions(frame) {
8008
+ var frameWidth = frame.width,
8009
+ frameHeight = frame.height;
8010
+ if (frame instanceof HTMLImageElement) {
8011
+ frameWidth = frame.naturalWidth;
8012
+ frameHeight = frame.naturalHeight;
8013
+ }
8014
+ if (frame instanceof HTMLVideoElement) {
8015
+ frameWidth = frame.videoWidth;
8016
+ frameHeight = frame.videoHeight;
8017
+ }
8018
+ return [frameWidth, frameHeight];
8019
+ }
8020
+
8021
+ var InvisibleCanvas = styled.canvas(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n display: none;\n"], ["\n display: none;\n"])));
8022
+ function drawToCanvas(canvas, frame, width, height) {
8023
+ if (!canvas) return;
8024
+ var ctx = canvas.getContext('2d');
8025
+ if (!ctx) return;
8026
+ if (!width || !height) {
8027
+ var _a = getFrameDimensions(frame),
8028
+ frameWidth = _a[0],
8029
+ frameHeight = _a[1];
8030
+ width || (width = frameWidth);
8031
+ height || (height = frameHeight);
8032
+ }
8033
+ canvas.width = width;
8034
+ canvas.height = height;
8035
+ ctx.drawImage(frame, 0, 0, width, height);
8036
+ }
8037
+ function clearCanvas(canvas) {
8038
+ var _a;
8039
+ (_a = canvas === null || canvas === void 0 ? void 0 : canvas.getContext('2d')) === null || _a === void 0 ? void 0 : _a.clearRect(0, 0, canvas === null || canvas === void 0 ? void 0 : canvas.width, canvas === null || canvas === void 0 ? void 0 : canvas.height);
8040
+ }
8041
+ var templateObject_1$G;
8042
+
8609
8043
  function cropToShoulders(rawCanvas, cropCanvas, resizeCanvas, frame, face, quality, maxHeight) {
8610
8044
  if (quality === void 0) {
8611
8045
  quality = 0.92;
@@ -8909,7 +8343,8 @@
8909
8343
  modelPath = _b === void 0 ? defaultFocusModelPath : _b,
8910
8344
  _c = _a.modelLoadTimeoutMs,
8911
8345
  modelLoadTimeoutMs = _c === void 0 ? defaultFocusModelLoadTimeoutMs : _c,
8912
- onModelError = _a.onModelError;
8346
+ onModelError = _a.onModelError,
8347
+ videoRef = _a.videoRef;
8913
8348
  var _d = React.useState(false),
8914
8349
  ready = _d[0],
8915
8350
  setReady = _d[1];
@@ -8919,7 +8354,6 @@
8919
8354
  var _f = React.useState(null),
8920
8355
  modelError = _f[0],
8921
8356
  setModelError = _f[1];
8922
- var videoRef = React.useContext(CameraStateContext).videoRef;
8923
8357
  React.useEffect(function loadModel() {
8924
8358
  var _this = this;
8925
8359
  setReady(false);
@@ -9057,7 +8491,8 @@
9057
8491
  function useLoadFaceDetector(_a) {
9058
8492
  var onModelError = _a.onModelError,
9059
8493
  _b = _a.modelLoadTimeoutMs,
9060
- modelLoadTimeoutMs = _b === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _b;
8494
+ modelLoadTimeoutMs = _b === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _b,
8495
+ videoRef = _a.videoRef;
9061
8496
  var _c = React.useState(false),
9062
8497
  ready = _c[0],
9063
8498
  setReady = _c[1];
@@ -9067,7 +8502,6 @@
9067
8502
  var _e = React.useState(null),
9068
8503
  modelError = _e[0],
9069
8504
  setModelError = _e[1];
9070
- var videoRef = React.useContext(CameraStateContext).videoRef;
9071
8505
  React.useEffect(function loadModel() {
9072
8506
  var _this = this;
9073
8507
  setReady(false);
@@ -9548,7 +8982,8 @@
9548
8982
  modelLoadTimeoutMs = _c === void 0 ? defaultDocumentDetectionModelLoadTimeoutMs : _c,
9549
8983
  _d = _a.scoreThreshold,
9550
8984
  scoreThreshold = _d === void 0 ? defaultDocumentDetectionScoreThreshold : _d,
9551
- onModelError = _a.onModelError;
8985
+ onModelError = _a.onModelError,
8986
+ videoRef = _a.videoRef;
9552
8987
  var _e = React.useState(false),
9553
8988
  ready = _e[0],
9554
8989
  setReady = _e[1];
@@ -9558,7 +8993,6 @@
9558
8993
  var _g = React.useState(null),
9559
8994
  modelError = _g[0],
9560
8995
  setModelError = _g[1];
9561
- var videoRef = React.useContext(CameraStateContext).videoRef;
9562
8996
  React.useEffect(function loadModel() {
9563
8997
  var _this = this;
9564
8998
  setReady(false);
@@ -9839,32 +9273,576 @@
9839
9273
  });
9840
9274
  });
9841
9275
  }
9842
- renderPrediction().then();
9276
+ renderPrediction().then();
9277
+ return function () {
9278
+ loopId.current += 1;
9279
+ frameId.current && cancelAnimationFrame(frameId.current);
9280
+ timer && clearTimeout(timer);
9281
+ };
9282
+ }, [fn, running, throttleMs]);
9283
+ var start = React.useCallback(function () {
9284
+ startedAtRef.current = new Date();
9285
+ setRunning(true);
9286
+ }, []);
9287
+ var stop = React.useCallback(function () {
9288
+ loopId.current += 1; // force the loop to stop immediately.
9289
+ setRunning(false);
9290
+ startedAtRef.current = null;
9291
+ }, []);
9292
+ React.useEffect(function startAutomatically() {
9293
+ if (autoStart) start();
9294
+ return function () {
9295
+ stop();
9296
+ };
9297
+ }, [autoStart, start, stop]);
9298
+ return {
9299
+ start: start,
9300
+ stop: stop
9301
+ };
9302
+ }
9303
+
9304
+ var createStoreImpl = function createStoreImpl(createState) {
9305
+ var state;
9306
+ var listeners = /* @__PURE__ */new Set();
9307
+ var setState = function setState(partial, replace) {
9308
+ var nextState = typeof partial === "function" ? partial(state) : partial;
9309
+ if (!Object.is(nextState, state)) {
9310
+ var previousState = state;
9311
+ state = (replace != null ? replace : typeof nextState !== "object" || nextState === null) ? nextState : Object.assign({}, state, nextState);
9312
+ listeners.forEach(function (listener) {
9313
+ return listener(state, previousState);
9314
+ });
9315
+ }
9316
+ };
9317
+ var getState = function getState() {
9318
+ return state;
9319
+ };
9320
+ var getInitialState = function getInitialState() {
9321
+ return initialState;
9322
+ };
9323
+ var subscribe = function subscribe(listener) {
9324
+ listeners.add(listener);
9325
+ return function () {
9326
+ return listeners["delete"](listener);
9327
+ };
9328
+ };
9329
+ var api = {
9330
+ setState: setState,
9331
+ getState: getState,
9332
+ getInitialState: getInitialState,
9333
+ subscribe: subscribe
9334
+ };
9335
+ var initialState = state = createState(setState, getState, api);
9336
+ return api;
9337
+ };
9338
+ var createStore = function createStore(createState) {
9339
+ return createState ? createStoreImpl(createState) : createStoreImpl;
9340
+ };
9341
+
9342
+ var identity = function identity(arg) {
9343
+ return arg;
9344
+ };
9345
+ function useStore(api, selector) {
9346
+ if (selector === void 0) {
9347
+ selector = identity;
9348
+ }
9349
+ var slice = React.useSyncExternalStore(api.subscribe, function () {
9350
+ return selector(api.getState());
9351
+ }, function () {
9352
+ return selector(api.getInitialState());
9353
+ });
9354
+ React.useDebugValue(slice);
9355
+ return slice;
9356
+ }
9357
+
9358
+ function listAvailableCameras(facingMode_1) {
9359
+ return __awaiter(this, arguments, void 0, function (facingMode, requestMicAccess) {
9360
+ var cameraEnumerationStream, videoDevices;
9361
+ if (requestMicAccess === void 0) {
9362
+ requestMicAccess = false;
9363
+ }
9364
+ return __generator(this, function (_a) {
9365
+ switch (_a.label) {
9366
+ case 0:
9367
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
9368
+ video: {
9369
+ facingMode: {
9370
+ exact: facingMode
9371
+ }
9372
+ },
9373
+ audio: requestMicAccess
9374
+ })
9375
+ // This lists all available cameras attached to the user's device.
9376
+ ];
9377
+ case 1:
9378
+ cameraEnumerationStream = _a.sent();
9379
+ return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];
9380
+ case 2:
9381
+ videoDevices = _a.sent().filter(function (_a) {
9382
+ var kind = _a.kind;
9383
+ return kind === 'videoinput';
9384
+ });
9385
+ // Release the access to the user's camera that we obtained for enumeration purposes.
9386
+ cameraEnumerationStream.getVideoTracks().forEach(function (track) {
9387
+ track.enabled = false;
9388
+ track.stop();
9389
+ });
9390
+ cameraEnumerationStream = null;
9391
+ return [2 /*return*/, videoDevices];
9392
+ }
9393
+ });
9394
+ });
9395
+ }
9396
+ var frontCameraLabels = ['front', 'avant', 'anteriore', 'cameraaanvoorzijde', 'kamerapåframsidan', 'forsidekamera', 'kamerapåforsiden', 'aparatprzedni', 'etukamera', 'kameradepan', 'ÖnKamera', 'cameramặttrước', 'camerăfață', 'prednákamera', 'prednjakamera', 'előlapikamera', 'přednífotoaparát', 'μπροστινήκάμερα', 'переднякамера', 'передняякамера', 'преднакамера', 'алдыңғыкамера', 'מצלמה קדמית', 'الكاميرا الأمامية', 'फ़्रंटकैमरा', '前置相机', '前置鏡頭', '前面カメラ', '전면카메라', 'กล้องด้านหน้า'].map(function (s) {
9397
+ return s.toLocaleLowerCase().split(' ').join('');
9398
+ });
9399
+ var rearCameraLabels = ['back', 'rear', 'posterior', 'trasera', 'traseira', 'arrière', 'rückkamera', 'fotocamera(posteriore)', 'cameraaanachterzijde', 'kamerapåbaksidan', 'kamerapåbaksiden', 'bagsidekamera', 'aparattylny', 'takakamera', 'arkakamera', 'kamerabelakang', 'cameramặtsau', 'camerăspate', 'stražnjakamera', 'zadnákamera', 'hátoldalikamera', 'zadnífotoaparát', 'πίσωκάμερα', 'заднякамера', 'Задняякамера', 'заднакамера', 'артқыкамера', 'מצלמה אחורית', 'الكاميرا الخلفية', 'बैककैमरा', '后置相机', '後置鏡頭', '背面カメラ', '후면카메라', 'กล้องด้านหลัง'].map(function (s) {
9400
+ return s.toLocaleLowerCase().split(' ').join('');
9401
+ });
9402
+ var backUltraWideCameraLabels = ['backdualwidecamera', 'backultrawidecamera', 'ultraampliaposterior', 'ultra-angulartraseira', 'ultragrandeangulartraseira', 'ultragrandangle', 'ultragranangular', 'ultra-weitwinkelkamera', 'ultra-grandangolo', 'ultrabredecameraaanachterzijde', 'ultravidvinkelkamerapåbaksidan', 'ultravidvinkelkameraetpåbagsiden', 'ultravidvinkelkamerabak', 'ultragenişkameraarkayüzü', 'ultralaajakulmainentakakamera', 'tylnyaparatultraszerokokątny', 'cameracựcrộngmặtsau', 'camerăcuobiectivultra‑superangularspate', 'ultraszéleslátószögűkamera', 'kameraultralebarbelakang', 'stražnjaultraširokakamera', 'zadníultraširokoúhlýfotoaparát', 'ultraširokouhlá', 'πίσωυπερευρείακάμερα', 'заднянадширококутнакамера', 'Задняясверхширокоугольнаякамера', 'Задна свръх широкоъгълна камера', 'артқыультракеңбұрыштыкамера', 'מצלמה אולטרה רחבה אחורית', 'كاميرا خلفية عريضة جدًا', 'बैकअल्ट्रावाइडकैमरा', '后置超广角相机', '後置超廣角鏡頭相機', '背面超広角カメラ', '후면울트라와이드카메라', 'กล้องด้านหลังอัลตร้าไวด์'].map(function (s) {
9403
+ return s.toLocaleLowerCase().split(' ').join('');
9404
+ });
9405
+ var cameraLabelMatches = function cameraLabelMatches(labelOrDevice, labelSetOrLabel) {
9406
+ var label = labelOrDevice instanceof MediaDeviceInfo ? getDeviceLabel(labelOrDevice) : labelOrDevice;
9407
+ var labelSet = typeof labelSetOrLabel === 'string' ? [labelSetOrLabel] : labelSetOrLabel;
9408
+ return labelSet.some(function (l) {
9409
+ return label.includes(l);
9410
+ });
9411
+ };
9412
+ var getDeviceLabel = function getDeviceLabel(deviceInfo) {
9413
+ return deviceInfo.label.toLocaleLowerCase().split(' ').join('');
9414
+ };
9415
+ var currentCamera;
9416
+ function obtainCameraAccess(stream, deviceLabel, video) {
9417
+ releaseCameraAccess();
9418
+ log('obtaining camera access...');
9419
+ var _a = stream.getVideoTracks()[0].getSettings(),
9420
+ width = _a.width,
9421
+ height = _a.height;
9422
+ log('camera dimensions', width, height);
9423
+ var label = deviceLabel.toLocaleLowerCase().split(' ').join('');
9424
+ log('camera label', label);
9425
+ var isRearFacing = cameraLabelMatches(label, __spreadArray(__spreadArray(__spreadArray([], rearCameraLabels, true), backUltraWideCameraLabels, true), ['iphone'], false));
9426
+ log('is rear facing?', isRearFacing);
9427
+ var release = function release() {
9428
+ stream.getTracks().forEach(function (track) {
9429
+ track.enabled = false;
9430
+ track.stop();
9431
+ });
9432
+ if (video) {
9433
+ video.pause();
9434
+ video.srcObject = null;
9435
+ video.src = '';
9436
+ }
9437
+ };
9438
+ width || (width = 0);
9439
+ height || (height = 0);
9440
+ currentCamera = {
9441
+ label: deviceLabel,
9442
+ stream: stream,
9443
+ width: width,
9444
+ height: height,
9445
+ isRearFacing: isRearFacing,
9446
+ release: release
9447
+ };
9448
+ log('camera access granted');
9449
+ if (video) video.srcObject = stream;
9450
+ log('video source initialized');
9451
+ return currentCamera;
9452
+ }
9453
+ function releaseCameraAccess() {
9454
+ if (!currentCamera) return;
9455
+ log('releasing camera access...');
9456
+ currentCamera.release();
9457
+ currentCamera = undefined;
9458
+ }
9459
+
9460
+ var initialState$5 = {
9461
+ videoRef: {
9462
+ current: null
9463
+ },
9464
+ videoLoaded: false,
9465
+ videoStream: null,
9466
+ videoDevice: null,
9467
+ isRearFacing: false,
9468
+ camera: null,
9469
+ cameraReady: false,
9470
+ cameraAccessDenied: false,
9471
+ iphoneContinuityCameraAvailable: false,
9472
+ iphoneContinuityCameraDenied: false,
9473
+ preferIphoneContinuityCamera: true,
9474
+ audioStream: null,
9475
+ microphoneReady: false,
9476
+ microphoneAccessDenied: false
9477
+ };
9478
+ var createCameraStore = function createCameraStore(config) {
9479
+ var store = createStore(function (set, get) {
9480
+ return _assign(_assign(_assign({}, initialState$5), config), {
9481
+ reset: function reset() {
9482
+ return set(_assign(_assign({}, initialState$5), config));
9483
+ },
9484
+ setConfig: function setConfig(config) {
9485
+ return set(config);
9486
+ },
9487
+ onVideoMounted: function onVideoMounted() {
9488
+ return set({
9489
+ videoLoaded: true
9490
+ });
9491
+ },
9492
+ setIphoneContinuityCameraAllowed: function setIphoneContinuityCameraAllowed(value) {
9493
+ return set({
9494
+ preferIphoneContinuityCamera: value
9495
+ });
9496
+ },
9497
+ requestCameraAccess: function requestCameraAccess() {
9498
+ return __awaiter(this, void 0, void 0, function () {
9499
+ var _a, videoRef, releaseCameraAccess, preferFrontFacingCamera, preferIphoneContinuityCamera, iphoneContinuityCameraDenied, availableCameras, selectedCamera, platform_1, iphoneContinuityCamera, constraints, stream_1, e_1, handleStreamEnded_1, videoTrack_1, camera_1, e_3;
9500
+ var _b, _c, _d;
9501
+ return __generator(this, function (_e) {
9502
+ switch (_e.label) {
9503
+ case 0:
9504
+ _a = get(), videoRef = _a.videoRef, releaseCameraAccess = _a.releaseCameraAccess, preferFrontFacingCamera = _a.preferFrontFacingCamera, preferIphoneContinuityCamera = _a.preferIphoneContinuityCamera, iphoneContinuityCameraDenied = _a.iphoneContinuityCameraDenied;
9505
+ releaseCameraAccess();
9506
+ _e.label = 1;
9507
+ case 1:
9508
+ _e.trys.push([1, 11,, 12]);
9509
+ return [4 /*yield*/, listAvailableCameras()];
9510
+ case 2:
9511
+ availableCameras = _e.sent();
9512
+ selectedCamera = void 0;
9513
+ debug('availableCameras', availableCameras);
9514
+ platform_1 = getPlatform();
9515
+ debug('platformDetails', platform_1);
9516
+ if (!iphoneContinuityCameraDenied && (!(platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) || platform_1.os.family === 'OS X')) {
9517
+ iphoneContinuityCamera = availableCameras.find(function (deviceInfo) {
9518
+ return cameraLabelMatches(deviceInfo, 'iphone');
9519
+ });
9520
+ set({
9521
+ iphoneContinuityCameraAvailable: !!iphoneContinuityCamera
9522
+ });
9523
+ if (iphoneContinuityCamera && preferIphoneContinuityCamera) {
9524
+ selectedCamera = iphoneContinuityCamera;
9525
+ }
9526
+ } else if (((_b = platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) === null || _b === void 0 ? void 0 : _b.family) === 'Android' || availableCameras.every(function (c) {
9527
+ return c.label.startsWith('camera2 ');
9528
+ })) {
9529
+ availableCameras = availableCameras.sort(function (a, b) {
9530
+ return a.label.toLowerCase().localeCompare(b.label.toLowerCase());
9531
+ });
9532
+ debug('cameras have been sorted', availableCameras);
9533
+ }
9534
+ if (preferFrontFacingCamera) {
9535
+ selectedCamera = availableCameras.find(function (deviceInfo) {
9536
+ return cameraLabelMatches(deviceInfo, frontCameraLabels);
9537
+ });
9538
+ }
9539
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9540
+ return cameraLabelMatches(deviceInfo, 'backtriplecamera');
9541
+ }));
9542
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9543
+ return cameraLabelMatches(deviceInfo, 'backdualcamera');
9544
+ }));
9545
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9546
+ return cameraLabelMatches(deviceInfo, rearCameraLabels) && !cameraLabelMatches(deviceInfo, backUltraWideCameraLabels);
9547
+ }));
9548
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9549
+ return cameraLabelMatches(deviceInfo, rearCameraLabels);
9550
+ }));
9551
+ // on iOS, the front facing camera always is at the first position in the list, so we skip it if all else fails.
9552
+ if (!preferFrontFacingCamera && ((_c = platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) === null || _c === void 0 ? void 0 : _c.family) === 'iOS' && availableCameras.length > 0) {
9553
+ selectedCamera || (selectedCamera = availableCameras[1]);
9554
+ }
9555
+ selectedCamera || (selectedCamera = availableCameras[0]);
9556
+ debug('selectedCamera', selectedCamera);
9557
+ set({
9558
+ videoDevice: selectedCamera
9559
+ });
9560
+ constraints = {
9561
+ audio: false,
9562
+ video: {
9563
+ deviceId: {
9564
+ exact: selectedCamera.deviceId
9565
+ },
9566
+ width: {
9567
+ ideal: config.maxVideoWidth
9568
+ },
9569
+ aspectRatio: 1.777777778,
9570
+ frameRate: {}
9571
+ }
9572
+ };
9573
+ if (config.maxFps) {
9574
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9575
+ // @ts-ignore
9576
+ constraints.video.frameRate = {
9577
+ max: config.maxFps
9578
+ };
9579
+ }
9580
+ stream_1 = null;
9581
+ _e.label = 3;
9582
+ case 3:
9583
+ _e.trys.push([3, 5,, 6]);
9584
+ debug('obtaining camera access with constraints', constraints);
9585
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];
9586
+ case 4:
9587
+ stream_1 = _e.sent();
9588
+ return [3 /*break*/, 6];
9589
+ case 5:
9590
+ e_1 = _e.sent();
9591
+ if (e_1.name === 'NotAllowedError') {
9592
+ if (preferIphoneContinuityCamera) {
9593
+ set({
9594
+ iphoneContinuityCameraAvailable: false,
9595
+ iphoneContinuityCameraDenied: true
9596
+ });
9597
+ } else {
9598
+ set({
9599
+ cameraAccessDenied: true
9600
+ });
9601
+ }
9602
+ return [2 /*return*/];
9603
+ }
9604
+ return [3 /*break*/, 6];
9605
+ case 6:
9606
+ if (!!stream_1) return [3 /*break*/, 10];
9607
+ _e.label = 7;
9608
+ case 7:
9609
+ _e.trys.push([7, 9,, 10]);
9610
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
9611
+ audio: false,
9612
+ video: true
9613
+ })];
9614
+ case 8:
9615
+ stream_1 = _e.sent();
9616
+ debug('opened stream with no width and height constraints');
9617
+ return [3 /*break*/, 10];
9618
+ case 9:
9619
+ _e.sent();
9620
+ debug('cannot open stream at all');
9621
+ return [3 /*break*/, 10];
9622
+ case 10:
9623
+ if (!stream_1) {
9624
+ error('failed to open camera');
9625
+ throw new Error('failed to open camera');
9626
+ }
9627
+ debug('camera access granted with constraints', constraints);
9628
+ handleStreamEnded_1 = function handleStreamEnded_1() {
9629
+ if (preferIphoneContinuityCamera && get().iphoneContinuityCameraAvailable) {
9630
+ debug('someone unplugged the continuity camera');
9631
+ set({
9632
+ videoStream: null,
9633
+ videoDevice: null,
9634
+ cameraReady: false,
9635
+ iphoneContinuityCameraAvailable: false,
9636
+ iphoneContinuityCameraDenied: true
9637
+ });
9638
+ get().requestCameraAccess();
9639
+ } else {
9640
+ debug('someone unplugged the webcam');
9641
+ releaseCameraAccess();
9642
+ set({
9643
+ videoStream: null,
9644
+ videoDevice: null,
9645
+ videoLoaded: false,
9646
+ cameraReady: false,
9647
+ cameraAccessDenied: true
9648
+ });
9649
+ }
9650
+ };
9651
+ (_d = videoRef.current) === null || _d === void 0 ? void 0 : _d.addEventListener('ended', handleStreamEnded_1);
9652
+ videoTrack_1 = stream_1.getVideoTracks()[0];
9653
+ videoTrack_1.onended = handleStreamEnded_1;
9654
+ camera_1 = obtainCameraAccess(stream_1, selectedCamera.label, videoRef.current);
9655
+ setTimeout(function () {
9656
+ // iOS 17 has a strange behavior where the video track flickers between muted and unmuted
9657
+ // when the camera access is being requested. This delay is a workaround for that.
9658
+ videoTrack_1.onmute = function () {
9659
+ if (videoTrack_1.readyState !== 'live') handleStreamEnded_1();
9660
+ };
9661
+ set({
9662
+ camera: camera_1,
9663
+ cameraReady: true,
9664
+ cameraAccessDenied: false,
9665
+ isRearFacing: camera_1.isRearFacing,
9666
+ videoStream: stream_1
9667
+ });
9668
+ }, 500);
9669
+ return [3 /*break*/, 12];
9670
+ case 11:
9671
+ e_3 = _e.sent();
9672
+ if (e_3.name === 'NotAllowedError') {
9673
+ error('camera access has been blocked by the user', e_3);
9674
+ set({
9675
+ cameraAccessDenied: true
9676
+ });
9677
+ } else {
9678
+ error('camera access encountered some other error', e_3);
9679
+ throw e_3;
9680
+ }
9681
+ return [3 /*break*/, 12];
9682
+ case 12:
9683
+ return [2 /*return*/];
9684
+ }
9685
+ });
9686
+ });
9687
+ },
9688
+ releaseCameraAccess: function releaseCameraAccess() {
9689
+ return __awaiter(this, void 0, void 0, function () {
9690
+ var camera;
9691
+ return __generator(this, function (_a) {
9692
+ camera = get().camera;
9693
+ if (!camera) return [2 /*return*/];
9694
+ camera.release();
9695
+ set({
9696
+ camera: null,
9697
+ cameraReady: false,
9698
+ cameraAccessDenied: false
9699
+ });
9700
+ return [2 /*return*/];
9701
+ });
9702
+ });
9703
+ },
9704
+ requestMicrophoneAccess: function requestMicrophoneAccess() {
9705
+ return __awaiter(this, void 0, void 0, function () {
9706
+ var stream_2;
9707
+ return __generator(this, function (_a) {
9708
+ switch (_a.label) {
9709
+ case 0:
9710
+ get().releaseMicrophoneAccess();
9711
+ _a.label = 1;
9712
+ case 1:
9713
+ _a.trys.push([1, 3,, 4]);
9714
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
9715
+ audio: true,
9716
+ video: false
9717
+ })
9718
+ // iOS 17 has a strange behavior where the video track flickers between muted and unmuted
9719
+ // when the camera access is being requested. This delay is a workaround for that.
9720
+ ];
9721
+ case 2:
9722
+ stream_2 = _a.sent();
9723
+ // iOS 17 has a strange behavior where the video track flickers between muted and unmuted
9724
+ // when the camera access is being requested. This delay is a workaround for that.
9725
+ setTimeout(function () {
9726
+ set({
9727
+ audioStream: stream_2,
9728
+ microphoneReady: true,
9729
+ microphoneAccessDenied: false
9730
+ });
9731
+ var handleStreamEnded = function handleStreamEnded() {
9732
+ set({
9733
+ microphoneReady: false,
9734
+ microphoneAccessDenied: true
9735
+ });
9736
+ };
9737
+ var track = stream_2.getAudioTracks()[0];
9738
+ track.onended = handleStreamEnded;
9739
+ track.onmute = function () {
9740
+ if (track.readyState !== 'live') handleStreamEnded();
9741
+ };
9742
+ }, 500);
9743
+ return [3 /*break*/, 4];
9744
+ case 3:
9745
+ _a.sent();
9746
+ set({
9747
+ microphoneAccessDenied: true
9748
+ });
9749
+ return [3 /*break*/, 4];
9750
+ case 4:
9751
+ return [2 /*return*/];
9752
+ }
9753
+ });
9754
+ });
9755
+ },
9756
+ releaseMicrophoneAccess: function releaseMicrophoneAccess() {
9757
+ var _a;
9758
+ var audioStream = get().audioStream;
9759
+ (_a = audioStream === null || audioStream === void 0 ? void 0 : audioStream.stop) === null || _a === void 0 ? void 0 : _a.call(audioStream);
9760
+ audioStream === null || audioStream === void 0 ? void 0 : audioStream.getAudioTracks().forEach(function (track) {
9761
+ var _a;
9762
+ (_a = track.stop) === null || _a === void 0 ? void 0 : _a.call(track);
9763
+ });
9764
+ set({
9765
+ audioStream: null,
9766
+ microphoneReady: false,
9767
+ microphoneAccessDenied: false
9768
+ });
9769
+ }
9770
+ });
9771
+ });
9772
+ if (config.requestAccessAutomatically) {
9773
+ void store.getState().requestCameraAccess();
9774
+ }
9775
+ return _assign(_assign({}, store), {
9776
+ destroy: function destroy() {
9777
+ store.getState().releaseCameraAccess();
9778
+ store.getState().releaseMicrophoneAccess();
9779
+ }
9780
+ });
9781
+ };
9782
+ var CameraStoreContext = /*#__PURE__*/React.createContext(undefined);
9783
+ function CameraStoreProvider(_a) {
9784
+ var children = _a.children,
9785
+ _b = _a.requestAccessAutomatically,
9786
+ requestAccessAutomatically = _b === void 0 ? true : _b,
9787
+ _c = _a.preferIphoneContinuityCamera,
9788
+ preferIphoneContinuityCamera = _c === void 0 ? true : _c,
9789
+ _d = _a.preferFrontFacingCamera,
9790
+ preferFrontFacingCamera = _d === void 0 ? false : _d,
9791
+ _e = _a.maxVideoWidth,
9792
+ maxVideoWidth = _e === void 0 ? 1920 : _e,
9793
+ maxFps = _a.maxFps,
9794
+ onCameraAccessDenied = _a.onCameraAccessDenied,
9795
+ onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied,
9796
+ _f = _a.requireMicrophoneAccess,
9797
+ requireMicrophoneAccess = _f === void 0 ? false : _f;
9798
+ var videoRef = React.useRef(null);
9799
+ var store = React.useRef();
9800
+ store.current || (store.current = createCameraStore({
9801
+ videoRef: videoRef,
9802
+ requestAccessAutomatically: requestAccessAutomatically,
9803
+ preferIphoneContinuityCamera: preferIphoneContinuityCamera,
9804
+ preferFrontFacingCamera: preferFrontFacingCamera,
9805
+ maxVideoWidth: maxVideoWidth,
9806
+ maxFps: maxFps,
9807
+ onCameraAccessDenied: onCameraAccessDenied,
9808
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied,
9809
+ requireMicrophoneAccess: requireMicrophoneAccess
9810
+ }));
9811
+ React.useEffect(function () {
9812
+ var _a, _b, _c;
9813
+ var state = (_a = store.current) === null || _a === void 0 ? void 0 : _a.getState();
9814
+ if (!state) return;
9815
+ if (preferIphoneContinuityCamera !== (state === null || state === void 0 ? void 0 : state.preferIphoneContinuityCamera) || preferFrontFacingCamera !== (state === null || state === void 0 ? void 0 : state.preferFrontFacingCamera)) {
9816
+ (_b = store.current) === null || _b === void 0 ? void 0 : _b.setState({
9817
+ preferIphoneContinuityCamera: preferIphoneContinuityCamera,
9818
+ preferFrontFacingCamera: preferFrontFacingCamera
9819
+ });
9820
+ (_c = store.current) === null || _c === void 0 ? void 0 : _c.getState().requestCameraAccess();
9821
+ }
9822
+ }, [preferFrontFacingCamera, preferIphoneContinuityCamera]);
9823
+ React.useEffect(function () {
9824
+ var _a;
9825
+ if (!requireMicrophoneAccess) return;
9826
+ (_a = store.current) === null || _a === void 0 ? void 0 : _a.getState().requestMicrophoneAccess();
9843
9827
  return function () {
9844
- loopId.current += 1;
9845
- frameId.current && cancelAnimationFrame(frameId.current);
9846
- timer && clearTimeout(timer);
9828
+ var _a;
9829
+ return (_a = store.current) === null || _a === void 0 ? void 0 : _a.getState().releaseMicrophoneAccess();
9847
9830
  };
9848
- }, [fn, running, throttleMs]);
9849
- var start = React.useCallback(function () {
9850
- startedAtRef.current = new Date();
9851
- setRunning(true);
9852
- }, []);
9853
- var stop = React.useCallback(function () {
9854
- loopId.current += 1; // force the loop to stop immediately.
9855
- setRunning(false);
9856
- startedAtRef.current = null;
9857
- }, []);
9858
- React.useEffect(function startAutomatically() {
9859
- if (autoStart) start();
9831
+ }, [requireMicrophoneAccess]);
9832
+ React.useEffect(function () {
9860
9833
  return function () {
9861
- stop();
9834
+ var _a;
9835
+ return (_a = store.current) === null || _a === void 0 ? void 0 : _a.destroy();
9862
9836
  };
9863
- }, [autoStart, start, stop]);
9864
- return {
9865
- start: start,
9866
- stop: stop
9867
- };
9837
+ }, []);
9838
+ return /*#__PURE__*/React.createElement(CameraStoreContext.Provider, {
9839
+ value: store.current
9840
+ }, children);
9841
+ }
9842
+ function useCameraStore(selector) {
9843
+ var store = React.useContext(CameraStoreContext);
9844
+ if (!store) throw new Error('useCameraStore cannot be used without Provider');
9845
+ return useStore(store, selector);
9868
9846
  }
9869
9847
 
9870
9848
  var DocumentDetectionModelContext = /*#__PURE__*/React.createContext({
@@ -9912,7 +9890,7 @@
9912
9890
  _g = _a.documentDetectionModelLoadTimeoutMs,
9913
9891
  documentDetectionModelLoadTimeoutMs = _g === void 0 ? defaultDocumentDetectionModelLoadTimeoutMs : _g,
9914
9892
  onDocumentDetectionModelError = _a.onDocumentDetectionModelError;
9915
- var _h = React.useContext(CameraStateContext),
9893
+ var _h = useCameraStore(),
9916
9894
  videoRef = _h.videoRef,
9917
9895
  videoLoaded = _h.videoLoaded,
9918
9896
  cameraReady = _h.cameraReady;
@@ -9935,7 +9913,8 @@
9935
9913
  modelPath: documentDetectionModelPath,
9936
9914
  modelLoadTimeoutMs: documentDetectionModelLoadTimeoutMs,
9937
9915
  scoreThreshold: documentDetectionModelScoreThreshold,
9938
- onModelError: onDocumentDetectionModelError
9916
+ onModelError: onDocumentDetectionModelError,
9917
+ videoRef: videoRef
9939
9918
  }),
9940
9919
  ready = _o.ready,
9941
9920
  modelDownloadProgress = _o.modelDownloadProgress,
@@ -10052,10 +10031,12 @@
10052
10031
  var _e = React.useState({}),
10053
10032
  focusThresholds = _e[0],
10054
10033
  setFocusThresholds = _e[1];
10034
+ var videoRef = useCameraStore().videoRef;
10055
10035
  var _f = useLoadFocusModel({
10056
10036
  modelPath: focusModelPath,
10057
10037
  modelLoadTimeoutMs: focusModelLoadTimeoutMs,
10058
- onModelError: onFocusModelError
10038
+ onModelError: onFocusModelError,
10039
+ videoRef: videoRef
10059
10040
  }),
10060
10041
  ready = _f.ready,
10061
10042
  modelDownloadProgress = _f.modelDownloadProgress,
@@ -11495,9 +11476,9 @@
11495
11476
  return e;
11496
11477
  }
11497
11478
 
11498
- function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11499
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
11500
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
11479
+ function _createForOfIteratorHelperLoose$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11480
+ function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
11481
+ function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
11501
11482
  var consoleLogger = {
11502
11483
  type: 'logger',
11503
11484
  log: function log(args) {
@@ -12344,7 +12325,7 @@
12344
12325
  }
12345
12326
  if (!useOptionsReplaceForData) {
12346
12327
  data = _extends({}, data);
12347
- for (var _iterator = _createForOfIteratorHelperLoose(optionsKeys), _step; !(_step = _iterator()).done;) {
12328
+ for (var _iterator = _createForOfIteratorHelperLoose$1(optionsKeys), _step; !(_step = _iterator()).done;) {
12348
12329
  var key = _step.value;
12349
12330
  delete data[key];
12350
12331
  }
@@ -14050,31 +14031,33 @@
14050
14031
  var templateObject_1$D, templateObject_2$w, templateObject_3$o, templateObject_4$i, templateObject_5$b;
14051
14032
 
14052
14033
  var IdCapture = function IdCapture(_a) {
14053
- var _b, _c, _d, _e, _f, _g, _h, _j;
14034
+ var _b, _c, _d, _e, _f, _g, _h;
14054
14035
  var requiredDocumentType = _a.requiredDocumentType,
14055
- _k = _a.thresholds,
14056
- thresholds = _k === void 0 ? defaultIdCaptureThresholds : _k,
14036
+ _j = _a.thresholds,
14037
+ thresholds = _j === void 0 ? defaultIdCaptureThresholds : _j,
14057
14038
  guidanceMessage = _a.guidanceMessage,
14058
14039
  guidanceSatisfied = _a.guidanceSatisfied,
14059
14040
  onCapture = _a.onCapture,
14060
- _l = _a.classNames,
14061
- classNames = _l === void 0 ? {} : _l,
14062
- _m = _a.colors,
14063
- colors = _m === void 0 ? {} : _m,
14064
- _o = _a.verbiage,
14065
- rawVerbiage = _o === void 0 ? {} : _o,
14066
- _p = _a.debugMode,
14067
- debugMode = _p === void 0 ? false : _p;
14068
- var _q = useResizeObserver(),
14069
- ref = _q.ref,
14070
- _r = _q.width,
14071
- width = _r === void 0 ? 1 : _r,
14072
- _s = _q.height,
14073
- height = _s === void 0 ? 1 : _s;
14074
- var _t = useIdCaptureState(),
14075
- state = _t[0],
14076
- dispatch = _t[1];
14077
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
14041
+ _k = _a.classNames,
14042
+ classNames = _k === void 0 ? {} : _k,
14043
+ _l = _a.colors,
14044
+ colors = _l === void 0 ? {} : _l,
14045
+ _m = _a.verbiage,
14046
+ rawVerbiage = _m === void 0 ? {} : _m,
14047
+ _o = _a.debugMode,
14048
+ debugMode = _o === void 0 ? false : _o;
14049
+ var _p = useResizeObserver(),
14050
+ ref = _p.ref,
14051
+ _q = _p.width,
14052
+ width = _q === void 0 ? 1 : _q,
14053
+ _r = _p.height,
14054
+ height = _r === void 0 ? 1 : _r;
14055
+ var _s = useIdCaptureState(),
14056
+ state = _s[0],
14057
+ dispatch = _s[1];
14058
+ var _t = useCameraStore(),
14059
+ camera = _t.camera,
14060
+ isRearFacing = _t.isRearFacing;
14078
14061
  var _u = React.useContext(IdCaptureModelsContext),
14079
14062
  modelsReady = _u.ready,
14080
14063
  setThresholds = _u.setThresholds,
@@ -14186,17 +14169,16 @@
14186
14169
  classNames: classNames.overrideWrongDocumentTypeGuidanceDialog,
14187
14170
  verbiage: rawVerbiage.overrideWrongDocumentTypeGuidanceDialog
14188
14171
  }))), debugMode && ( /*#__PURE__*/React.createElement(DebugBoundingBoxOverlay, {
14189
- "$flipX": !((_j = cameraRef.current) === null || _j === void 0 ? void 0 : _j.isRearFacing),
14172
+ "$flipX": !isRearFacing,
14190
14173
  scaling: debugScalingDetails
14191
14174
  }, state.detectedObjects.map(function (obj, i) {
14192
- var _a;
14193
14175
  return /*#__PURE__*/React.createElement(IdCaptureDetectedObjectDebugBox, {
14194
14176
  key: i,
14195
14177
  obj: obj,
14196
14178
  scaling: debugScalingDetails,
14197
- flipX: !((_a = cameraRef.current) === null || _a === void 0 ? void 0 : _a.isRearFacing)
14179
+ flipX: !isRearFacing
14198
14180
  });
14199
- }))), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, cameraRef.current ? ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u2705 Camera: ", cameraRef.current.label, " (", cameraRef.current.width, "x", cameraRef.current.height, ")")) : '❌ Camera not ready', /*#__PURE__*/React.createElement("br", null), state.frameCaptureRate > 0.75 ? '✅' : '👎', " Frame Rate:", ' ', Math.round((state.frameCaptureRate + Number.EPSILON) * 1000) / 1000, ' ', "fps (", detectionTime, "ms doc detect, ", focusPredictionTime, "ms focus)", /*#__PURE__*/React.createElement("br", null), modelsReady ? ( /*#__PURE__*/React.createElement(React.Fragment, null, state.detectionThresholdMet ? '✅' : '❌', " Detected Document Type: ", state.detectedDocumentType, /*#__PURE__*/React.createElement("br", null), state.idCardFrontDetectionThresholdMet ? '✅' : '❌', " ID Card Front Score: ", state.idCardFrontDetectionScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.idCardBackDetectionThresholdMet ? '✅' : '❌', " ID Card Back Score: ", state.idCardBackDetectionScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.passportDetectionThresholdMet ? '✅' : '❌', " Passport Score: ", state.passportDetectionScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.focusThresholdMet ? '✅' : '❌', " Focus Score:", ' ', state.focusScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.documentInBounds ? '✅' : '❌', " Document In Bounds", /*#__PURE__*/React.createElement("br", null), state.documentIsStable ? '✅' : '❌', " Document Is Stable", /*#__PURE__*/React.createElement("br", null), state.goodFramesThresholdMet ? '✅' : '❌', " Good Frame Count:", ' ', state.goodFramesCount, "/", state.goodFramesThreshold)) : ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u274C Models not ready")))));
14181
+ }))), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, camera ? ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u2705 Camera: ", camera.label, " (", camera.width, "x", camera.height, ")")) : '❌ Camera not ready', /*#__PURE__*/React.createElement("br", null), state.frameCaptureRate > 0.75 ? '✅' : '👎', " Frame Rate:", ' ', Math.round((state.frameCaptureRate + Number.EPSILON) * 1000) / 1000, ' ', "fps (", detectionTime, "ms doc detect, ", focusPredictionTime, "ms focus)", /*#__PURE__*/React.createElement("br", null), modelsReady ? ( /*#__PURE__*/React.createElement(React.Fragment, null, state.detectionThresholdMet ? '✅' : '❌', " Detected Document Type: ", state.detectedDocumentType, /*#__PURE__*/React.createElement("br", null), state.idCardFrontDetectionThresholdMet ? '✅' : '❌', " ID Card Front Score: ", state.idCardFrontDetectionScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.idCardBackDetectionThresholdMet ? '✅' : '❌', " ID Card Back Score: ", state.idCardBackDetectionScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.passportDetectionThresholdMet ? '✅' : '❌', " Passport Score: ", state.passportDetectionScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.focusThresholdMet ? '✅' : '❌', " Focus Score:", ' ', state.focusScore.toFixed(3), /*#__PURE__*/React.createElement("br", null), state.documentInBounds ? '✅' : '❌', " Document In Bounds", /*#__PURE__*/React.createElement("br", null), state.documentIsStable ? '✅' : '❌', " Document Is Stable", /*#__PURE__*/React.createElement("br", null), state.goodFramesThresholdMet ? '✅' : '❌', " Good Frame Count:", ' ', state.goodFramesCount, "/", state.goodFramesThreshold)) : ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u274C Models not ready")))));
14200
14182
  };
14201
14183
  var timeSince = function timeSince(t) {
14202
14184
  if (!t) return 0;
@@ -14213,7 +14195,9 @@
14213
14195
  colors = _e === void 0 ? {} : _e,
14214
14196
  _f = _a.verbiage,
14215
14197
  rawVerbiage = _f === void 0 ? {} : _f;
14216
- var requestCameraAccess = React.useContext(CameraStateContext).requestCameraAccess;
14198
+ var requestCameraAccess = useCameraStore(function (state) {
14199
+ return state.requestCameraAccess;
14200
+ });
14217
14201
  assets.imageUrl || (assets.imageUrl = DEFAULT_CDN_URL + '/camera-disable-icon.png');
14218
14202
  var verbiage = useTranslations(rawVerbiage, {
14219
14203
  headingText: 'Your camera permission is disabled',
@@ -14861,7 +14845,7 @@
14861
14845
  var _o = React.useContext(IdCaptureModelsContext),
14862
14846
  modelsReady = _o.ready,
14863
14847
  modelDownloadProgress = _o.modelDownloadProgress;
14864
- var _p = React.useContext(CameraStateContext),
14848
+ var _p = useCameraStore(),
14865
14849
  cameraReady = _p.cameraReady,
14866
14850
  cameraAccessDenied = _p.cameraAccessDenied,
14867
14851
  iphoneContinuityCameraAvailable = _p.iphoneContinuityCameraAvailable,
@@ -15039,6 +15023,80 @@
15039
15023
  });
15040
15024
  var templateObject_1$y, templateObject_2$t, templateObject_3$l, templateObject_4$f, templateObject_5$a, templateObject_6$8, templateObject_7$5, templateObject_8$2, templateObject_9$2, templateObject_10$1, templateObject_11$1, templateObject_12$1, templateObject_13$1, templateObject_14$1, templateObject_15$1, templateObject_16, templateObject_17, templateObject_18;
15041
15025
 
15026
+ function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15027
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
15028
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
15029
+ var isIterable = function isIterable(obj) {
15030
+ return Symbol.iterator in obj;
15031
+ };
15032
+ var hasIterableEntries = function hasIterableEntries(value) {
15033
+ return (
15034
+ // HACK: avoid checking entries type
15035
+ "entries" in value
15036
+ );
15037
+ };
15038
+ var compareEntries = function compareEntries(valueA, valueB) {
15039
+ var mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());
15040
+ var mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());
15041
+ if (mapA.size !== mapB.size) {
15042
+ return false;
15043
+ }
15044
+ for (var _iterator = _createForOfIteratorHelperLoose(mapA), _step; !(_step = _iterator()).done;) {
15045
+ var _step$value = _step.value,
15046
+ key = _step$value[0],
15047
+ value = _step$value[1];
15048
+ if (!Object.is(value, mapB.get(key))) {
15049
+ return false;
15050
+ }
15051
+ }
15052
+ return true;
15053
+ };
15054
+ var compareIterables = function compareIterables(valueA, valueB) {
15055
+ var iteratorA = valueA[Symbol.iterator]();
15056
+ var iteratorB = valueB[Symbol.iterator]();
15057
+ var nextA = iteratorA.next();
15058
+ var nextB = iteratorB.next();
15059
+ while (!nextA.done && !nextB.done) {
15060
+ if (!Object.is(nextA.value, nextB.value)) {
15061
+ return false;
15062
+ }
15063
+ nextA = iteratorA.next();
15064
+ nextB = iteratorB.next();
15065
+ }
15066
+ return !!nextA.done && !!nextB.done;
15067
+ };
15068
+ function shallow(valueA, valueB) {
15069
+ if (Object.is(valueA, valueB)) {
15070
+ return true;
15071
+ }
15072
+ if (typeof valueA !== "object" || valueA === null || typeof valueB !== "object" || valueB === null) {
15073
+ return false;
15074
+ }
15075
+ if (!isIterable(valueA) || !isIterable(valueB)) {
15076
+ return compareEntries({
15077
+ entries: function entries() {
15078
+ return Object.entries(valueA);
15079
+ }
15080
+ }, {
15081
+ entries: function entries() {
15082
+ return Object.entries(valueB);
15083
+ }
15084
+ });
15085
+ }
15086
+ if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {
15087
+ return compareEntries(valueA, valueB);
15088
+ }
15089
+ return compareIterables(valueA, valueB);
15090
+ }
15091
+
15092
+ function useShallow(selector) {
15093
+ var prev = React.useRef();
15094
+ return function (state) {
15095
+ var next = selector(state);
15096
+ return shallow(prev.current, next) ? prev.current : prev.current = next;
15097
+ };
15098
+ }
15099
+
15042
15100
  var ContinuityCameraCheckboxContainer = styled.div(templateObject_1$x || (templateObject_1$x = __makeTemplateObject(["\n margin-top: 15px;\n margin-bottom: 15px;\n"], ["\n margin-top: 15px;\n margin-bottom: 15px;\n"])));
15043
15101
  var ContinuityCameraCheckbox = styled.input(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n margin-right: 8px;\n"], ["\n margin-right: 8px;\n"])));
15044
15102
  var IdCaptureLoadingOverlayLegacy = function IdCaptureLoadingOverlayLegacy(_a) {
@@ -15059,7 +15117,14 @@
15059
15117
  var _l = React.useContext(IdCaptureModelsContext),
15060
15118
  modelsReady = _l.ready,
15061
15119
  modelDownloadProgress = _l.modelDownloadProgress;
15062
- var _m = React.useContext(CameraStateContext),
15120
+ var _m = useCameraStore(useShallow(function (state) {
15121
+ return {
15122
+ cameraReady: state.cameraReady,
15123
+ cameraAccessDenied: state.cameraAccessDenied,
15124
+ iphoneContinuityCameraAvailable: state.iphoneContinuityCameraAvailable,
15125
+ setIphoneContinuityCameraAllowed: state.setIphoneContinuityCameraAllowed
15126
+ };
15127
+ })),
15063
15128
  cameraReady = _m.cameraReady,
15064
15129
  cameraAccessDenied = _m.cameraAccessDenied,
15065
15130
  iphoneContinuityCameraAvailable = _m.iphoneContinuityCameraAvailable,
@@ -15605,23 +15670,24 @@
15605
15670
  }
15606
15671
 
15607
15672
  var IdVideoCaptureFlipIdPrompt = function IdVideoCaptureFlipIdPrompt(_a) {
15608
- var _b;
15609
- var _c = _a.idCaptureGuideImages,
15610
- idCaptureGuideImages = _c === void 0 ? defaultIdCaptureGuideImages : _c,
15611
- _d = _a.classNames,
15612
- classNames = _d === void 0 ? {} : _d,
15673
+ var _b = _a.idCaptureGuideImages,
15674
+ idCaptureGuideImages = _b === void 0 ? defaultIdCaptureGuideImages : _b,
15675
+ _c = _a.classNames,
15676
+ classNames = _c === void 0 ? {} : _c,
15613
15677
  borderWidth = _a.borderWidth,
15614
15678
  borderColor = _a.borderColor,
15615
15679
  borderRadius = _a.borderRadius,
15616
15680
  imageStyle = _a.imageStyle;
15617
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
15618
- var isMirrored = !((_b = cameraRef.current) === null || _b === void 0 ? void 0 : _b.isRearFacing);
15619
- var _e = React.useState(1),
15620
- transitionTime = _e[0],
15621
- setTransitionTime = _e[1];
15622
- var _f = React.useState(0),
15623
- rotationAngle = _f[0],
15624
- setRotationAngle = _f[1];
15681
+ var isRearFacing = useCameraStore(function (state) {
15682
+ return state.isRearFacing;
15683
+ });
15684
+ var isMirrored = !isRearFacing;
15685
+ var _d = React.useState(1),
15686
+ transitionTime = _d[0],
15687
+ setTransitionTime = _d[1];
15688
+ var _e = React.useState(0),
15689
+ rotationAngle = _e[0],
15690
+ setRotationAngle = _e[1];
15625
15691
  var frontTransforms = ["rotateY(".concat(rotationAngle, "deg)")];
15626
15692
  if (isMirrored) frontTransforms.push('scaleX(-1)');
15627
15693
  var backTransforms = ["rotateY(".concat(180 - rotationAngle, "deg)")];
@@ -16145,29 +16211,30 @@
16145
16211
  var templateObject_1$r, templateObject_2$n;
16146
16212
 
16147
16213
  function IdCaptureGuides(_a) {
16148
- var _b, _c;
16149
- var _d = _a.guideType,
16150
- guideType = _d === void 0 ? 'fit' : _d,
16151
- _e = _a.status,
16152
- status = _e === void 0 ? 'ready' : _e,
16153
- _f = _a.progress,
16154
- progress = _f === void 0 ? 0 : _f,
16155
- _g = _a.portraitGuidesOnMobile,
16156
- portraitGuidesOnMobile = _g === void 0 ? true : _g,
16157
- _h = _a.requestedAction,
16158
- requestedAction = _h === void 0 ? 'SHOW_ID_FRONT' : _h,
16159
- _j = _a.isBackToFront,
16160
- isBackToFront = _j === void 0 ? false : _j,
16161
- _k = _a.images,
16162
- images = _k === void 0 ? defaultIdCaptureGuideImages : _k,
16163
- _l = _a.classNames,
16164
- classNames = _l === void 0 ? {} : _l,
16165
- _m = _a.colors,
16166
- colors = _m === void 0 ? {} : _m,
16167
- _o = _a.verbiage,
16168
- rawVerbiage = _o === void 0 ? {} : _o;
16214
+ var _b = _a.guideType,
16215
+ guideType = _b === void 0 ? 'fit' : _b,
16216
+ _c = _a.status,
16217
+ status = _c === void 0 ? 'ready' : _c,
16218
+ _d = _a.progress,
16219
+ progress = _d === void 0 ? 0 : _d,
16220
+ _e = _a.portraitGuidesOnMobile,
16221
+ portraitGuidesOnMobile = _e === void 0 ? true : _e,
16222
+ _f = _a.requestedAction,
16223
+ requestedAction = _f === void 0 ? 'SHOW_ID_FRONT' : _f,
16224
+ _g = _a.isBackToFront,
16225
+ isBackToFront = _g === void 0 ? false : _g,
16226
+ _h = _a.images,
16227
+ images = _h === void 0 ? defaultIdCaptureGuideImages : _h,
16228
+ _j = _a.classNames,
16229
+ classNames = _j === void 0 ? {} : _j,
16230
+ _k = _a.colors,
16231
+ colors = _k === void 0 ? {} : _k,
16232
+ _l = _a.verbiage,
16233
+ rawVerbiage = _l === void 0 ? {} : _l;
16169
16234
  var state = useIdCaptureState()[0];
16170
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
16235
+ var isRearFacing = useCameraStore(function (state) {
16236
+ return state.isRearFacing;
16237
+ });
16171
16238
  var verbiage = useTranslations(rawVerbiage, {
16172
16239
  instructionText: 'Scan the front of ID',
16173
16240
  capturingText: 'Capturing...',
@@ -16179,7 +16246,7 @@
16179
16246
  status: status,
16180
16247
  progress: progress,
16181
16248
  instruction: state.captureFailed ? verbiage.captureFailedText : state.capturing ? verbiage === null || verbiage === void 0 ? void 0 : verbiage.capturingText : verbiage.instructionText,
16182
- isMirrored: !((_b = cameraRef.current) === null || _b === void 0 ? void 0 : _b.isRearFacing),
16249
+ isMirrored: !isRearFacing,
16183
16250
  borderColor: state.isGoodFrame ? colors.guideBoxSatisfiedColor : colors.guideBoxUnsatisfiedColor,
16184
16251
  imageVisible: requestedAction === 'FLIP_ID' || !state.idCardFrontDetectionThresholdMet || !state.documentInBounds || state.documentTooClose
16185
16252
  })), guideType === 'fit' && ( /*#__PURE__*/React.createElement(IdCaptureFitGuide, {
@@ -16189,7 +16256,7 @@
16189
16256
  status: status,
16190
16257
  progress: progress,
16191
16258
  instruction: state.captureFailed ? verbiage.captureFailedText : state.capturing ? verbiage === null || verbiage === void 0 ? void 0 : verbiage.capturingText : verbiage.instructionText,
16192
- isMirrored: !((_c = cameraRef.current) === null || _c === void 0 ? void 0 : _c.isRearFacing),
16259
+ isMirrored: !isRearFacing,
16193
16260
  isBackToFront: isBackToFront,
16194
16261
  portraitGuidesOnMobile: portraitGuidesOnMobile,
16195
16262
  borderColor: state.isGoodFrame ? colors.guideBoxSatisfiedColor : colors.guideBoxUnsatisfiedColor,
@@ -16288,48 +16355,6 @@
16288
16355
  var ImagePreviewImageWrapper = styled.div(templateObject_4$b || (templateObject_4$b = __makeTemplateObject(["\n position: relative;\n height: calc(100% - 8px);\n padding: 4px;\n border-radius: 4px;\n background: white;\n\n & > img {\n border-radius: 4px;\n width: auto;\n max-height: 100%;\n }\n"], ["\n position: relative;\n height: calc(100% - 8px);\n padding: 4px;\n border-radius: 4px;\n background: white;\n\n & > img {\n border-radius: 4px;\n width: auto;\n max-height: 100%;\n }\n"])));
16289
16356
  var templateObject_1$q, templateObject_2$m, templateObject_3$h, templateObject_4$b;
16290
16357
 
16291
- var CameraVideoTag = function CameraVideoTag(_a) {
16292
- var _b;
16293
- var className = _a.className;
16294
- var _c = React.useContext(CameraStateContext),
16295
- videoRef = _c.videoRef,
16296
- setVideoLoaded = _c.setVideoLoaded,
16297
- onVideoUnmounted = _c.onVideoUnmounted,
16298
- cameraRef = _c.cameraRef;
16299
- React.useEffect(function notifyCameraProviderOfUnmount() {
16300
- var videoElement = videoRef.current;
16301
- if (!videoElement) return;
16302
- return function () {
16303
- onVideoUnmounted(videoElement);
16304
- };
16305
- }, [onVideoUnmounted, videoRef]);
16306
- React.useEffect(function setVideoLoadedToFalseOnMount() {
16307
- setVideoLoaded(false);
16308
- }, [setVideoLoaded]);
16309
- React.useEffect(function attachCameraStreamToVideoTagWhenReady() {
16310
- var _a;
16311
- if (videoRef.current && ((_a = cameraRef.current) === null || _a === void 0 ? void 0 : _a.stream)) {
16312
- videoRef.current.srcObject = cameraRef.current.stream;
16313
- }
16314
- }, [cameraRef, videoRef]);
16315
- var onLoadedData = React.useCallback(function () {
16316
- setVideoLoaded(true);
16317
- }, [setVideoLoaded]);
16318
- return /*#__PURE__*/React.createElement(FullscreenVideoTag, {
16319
- className: className,
16320
- autoPlay: true,
16321
- playsInline: true,
16322
- muted: true,
16323
- ref: videoRef,
16324
- onLoadedData: onLoadedData,
16325
- "$isRearFacing": (_b = cameraRef.current) === null || _b === void 0 ? void 0 : _b.isRearFacing
16326
- });
16327
- };
16328
- var FullscreenVideoTag = styled.video(templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["\n transform: ", ";\n transform-style: preserve-3d;\n min-width: 100%;\n min-height: 100%;\n width: auto;\n height: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n background: black;\n z-index: -2;\n"], ["\n transform: ", ";\n transform-style: preserve-3d;\n min-width: 100%;\n min-height: 100%;\n width: auto;\n height: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n background: black;\n z-index: -2;\n"])), function (props) {
16329
- return props.$isRearFacing ? '' : 'scaleX(-1)';
16330
- });
16331
- var templateObject_1$p;
16332
-
16333
16358
  var documentCaptureInitialState = {
16334
16359
  documents: [],
16335
16360
  currentDocumentIndex: 0,
@@ -16448,8 +16473,8 @@
16448
16473
  var _c = React.useReducer(documentCaptureStateReducer, documentCaptureInitialState),
16449
16474
  state = _c[0],
16450
16475
  dispatch = _c[1];
16451
- var _d = React.useContext(CameraStateContext),
16452
- cameraRef = _d.cameraRef,
16476
+ var _d = useCameraStore(),
16477
+ videoStream = _d.videoStream,
16453
16478
  videoRef = _d.videoRef;
16454
16479
  var uploadDocument = React.useContext(SubmissionContext).uploadDocument;
16455
16480
  var uploadCapturedDocument = React.useCallback(function (content, filetype) {
@@ -16540,8 +16565,7 @@
16540
16565
  }, [onResize]);
16541
16566
  var videoTag = videoRef.current;
16542
16567
  React.useEffect(function () {
16543
- if (!state.capturing) return;
16544
- if (!cameraRef.current) return;
16568
+ if (!state.capturing || !(videoStream === null || videoStream === void 0 ? void 0 : videoStream.active)) return;
16545
16569
  function onComplete(content) {
16546
16570
  if (!content) return;
16547
16571
  var contentUrl = URL.createObjectURL(content);
@@ -16554,7 +16578,7 @@
16554
16578
  });
16555
16579
  }
16556
16580
  if (typeof ImageCapture !== 'undefined') {
16557
- var tracks = cameraRef.current.stream.getTracks();
16581
+ var tracks = videoStream.getTracks();
16558
16582
  var videoCameraTrack = tracks.find(function (track) {
16559
16583
  return track.kind === 'video';
16560
16584
  });
@@ -16569,7 +16593,7 @@
16569
16593
  drawToCanvas(canvas, videoTag);
16570
16594
  canvas.toBlob(onComplete);
16571
16595
  }
16572
- }, [cameraRef, state.capturing, videoTag]);
16596
+ }, [state.capturing, videoStream, videoTag]);
16573
16597
  var stateWithActions = React.useMemo(function () {
16574
16598
  return _assign(_assign({}, state), {
16575
16599
  uploadCapturedDocument: uploadCapturedDocument
@@ -16684,52 +16708,85 @@
16684
16708
  ref: canvasRef
16685
16709
  }));
16686
16710
  };
16687
- var CanvasWrapper = styled.div(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n flex-grow: 1;\n background-clip: padding-box;\n box-shadow: inset 0 0 0 2px ", ";\n"], ["\n flex-grow: 1;\n background-clip: padding-box;\n box-shadow: inset 0 0 0 2px ", ";\n"])), function (props) {
16711
+ var CanvasWrapper = styled.div(templateObject_1$p || (templateObject_1$p = __makeTemplateObject(["\n flex-grow: 1;\n background-clip: padding-box;\n box-shadow: inset 0 0 0 2px ", ";\n"], ["\n flex-grow: 1;\n background-clip: padding-box;\n box-shadow: inset 0 0 0 2px ", ";\n"])), function (props) {
16688
16712
  return props.$maskColor;
16689
16713
  });
16690
16714
  var Canvas = styled.canvas(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n display: block;\n"], ["\n display: block;\n"])));
16691
- var templateObject_1$o, templateObject_2$l;
16715
+ var templateObject_1$p, templateObject_2$l;
16692
16716
 
16693
- var CameraFeedWrapper = styled.div(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (props) {
16717
+ var CameraFeedWrapper = styled.div(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (props) {
16694
16718
  return props.$mode === 'snapToGuides' ? "display: flex;\n position: absolute;\n left: ".concat(props.$x, "px;\n top: ").concat(props.$y, "px;\n width: ").concat(props.$w, "px;\n height: ").concat(props.$h, "px;") : "";
16695
16719
  });
16720
+ var templateObject_1$o;
16721
+
16722
+ var CameraVideoTag = function CameraVideoTag(props) {
16723
+ var _a = useCameraStore(useShallow(function (store) {
16724
+ return {
16725
+ videoRef: store.videoRef,
16726
+ videoStream: store.videoStream,
16727
+ onVideoMounted: store.onVideoMounted,
16728
+ isRearFacing: store.isRearFacing
16729
+ };
16730
+ })),
16731
+ videoRef = _a.videoRef,
16732
+ videoStream = _a.videoStream,
16733
+ onVideoMounted = _a.onVideoMounted,
16734
+ isRearFacing = _a.isRearFacing;
16735
+ React.useEffect(function attachCameraStreamToVideoTagWhenReady() {
16736
+ if (videoRef.current && videoStream) {
16737
+ debug('attaching camera stream to video tag');
16738
+ videoRef.current.srcObject = videoStream;
16739
+ }
16740
+ }, [videoStream, videoRef]);
16741
+ return /*#__PURE__*/React.createElement(FullscreenVideoTag, _assign({
16742
+ autoPlay: true,
16743
+ playsInline: true,
16744
+ muted: true,
16745
+ ref: videoRef,
16746
+ onLoadedData: onVideoMounted,
16747
+ "$isRearFacing": isRearFacing
16748
+ }, props));
16749
+ };
16750
+ var FullscreenVideoTag = styled.video(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n transform: ", ";\n transform-style: preserve-3d;\n min-width: 100%;\n min-height: 100%;\n width: auto;\n height: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n background: black;\n z-index: -2;\n"], ["\n transform: ", ";\n transform-style: preserve-3d;\n min-width: 100%;\n min-height: 100%;\n width: auto;\n height: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n background: black;\n z-index: -2;\n"])), function (props) {
16751
+ return props.$isRearFacing ? '' : 'scaleX(-1)';
16752
+ });
16696
16753
  var templateObject_1$n;
16697
16754
 
16698
16755
  var DocumentCaptureScreen = function DocumentCaptureScreen(_a) {
16699
- var _b, _c, _d, _e, _f, _g, _h;
16756
+ var _b, _c, _d, _e, _f;
16700
16757
  var onCaptureClicked = _a.onCaptureClicked,
16701
- _j = _a.classNames,
16702
- classNames = _j === void 0 ? {} : _j,
16703
- _k = _a.verbiage,
16704
- rawVerbiage = _k === void 0 ? {} : _k;
16705
- var _l = useDocumentCaptureState(),
16706
- _m = _l[0],
16707
- documents = _m.documents,
16708
- currentDocumentIndex = _m.currentDocumentIndex,
16709
- rectX = _m.rectX,
16710
- rectY = _m.rectY,
16711
- rectWidth = _m.rectWidth,
16712
- rectHeight = _m.rectHeight,
16713
- rectOffsetTop = _m.rectOffsetTop,
16714
- capturing = _m.capturing,
16715
- uploadCapturedDocument = _m.uploadCapturedDocument,
16716
- dispatch = _l[1];
16717
- var _o = (_b = documents[currentDocumentIndex]) !== null && _b !== void 0 ? _b : {},
16718
- title = _o.title,
16719
- aspectRatio = _o.aspectRatio,
16720
- cameraFeedMode = _o.cameraFeedMode,
16721
- instructions = _o.instructions,
16722
- contentUrl = _o.contentUrl,
16723
- content = _o.content,
16724
- uploadState = _o.uploadState;
16725
- var _p = React.useContext(CameraStateContext),
16726
- cameraRef = _p.cameraRef,
16727
- cameraReady = _p.cameraReady,
16728
- cameraAccessDenied = _p.cameraAccessDenied,
16729
- requestCameraAccess = _p.requestCameraAccess;
16730
- var _q = React.useState(false),
16731
- cameraAccessRequested = _q[0],
16732
- setCameraAccessRequested = _q[1];
16758
+ _g = _a.classNames,
16759
+ classNames = _g === void 0 ? {} : _g,
16760
+ _h = _a.verbiage,
16761
+ rawVerbiage = _h === void 0 ? {} : _h;
16762
+ var _j = useDocumentCaptureState(),
16763
+ _k = _j[0],
16764
+ documents = _k.documents,
16765
+ currentDocumentIndex = _k.currentDocumentIndex,
16766
+ rectX = _k.rectX,
16767
+ rectY = _k.rectY,
16768
+ rectWidth = _k.rectWidth,
16769
+ rectHeight = _k.rectHeight,
16770
+ rectOffsetTop = _k.rectOffsetTop,
16771
+ capturing = _k.capturing,
16772
+ uploadCapturedDocument = _k.uploadCapturedDocument,
16773
+ dispatch = _j[1];
16774
+ var _l = (_b = documents[currentDocumentIndex]) !== null && _b !== void 0 ? _b : {},
16775
+ title = _l.title,
16776
+ aspectRatio = _l.aspectRatio,
16777
+ cameraFeedMode = _l.cameraFeedMode,
16778
+ instructions = _l.instructions,
16779
+ contentUrl = _l.contentUrl,
16780
+ content = _l.content,
16781
+ uploadState = _l.uploadState;
16782
+ var _m = useCameraStore(),
16783
+ videoStream = _m.videoStream,
16784
+ cameraReady = _m.cameraReady,
16785
+ cameraAccessDenied = _m.cameraAccessDenied,
16786
+ requestCameraAccess = _m.requestCameraAccess;
16787
+ var _o = React.useState(false),
16788
+ cameraAccessRequested = _o[0],
16789
+ setCameraAccessRequested = _o[1];
16733
16790
  var cameraAccessNeeded =
16734
16791
  // we should force the browser to ask for camera access if...
16735
16792
  uploadState === 'not_started' &&
@@ -16738,14 +16795,14 @@
16738
16795
  // and the user hasn't passed a media blob for the current document...
16739
16796
  !cameraAccessRequested &&
16740
16797
  // and we haven't already tried to force a camera request...
16741
- !((_d = (_c = cameraRef.current) === null || _c === void 0 ? void 0 : _c.stream) === null || _d === void 0 ? void 0 : _d.active); // and we don't already have camera access.
16798
+ !(videoStream === null || videoStream === void 0 ? void 0 : videoStream.active); // and we don't already have camera access.
16742
16799
  React.useEffect(function requestCameraAccessIfNeeded() {
16743
16800
  if (!cameraAccessNeeded) return;
16744
16801
  setCameraAccessRequested(true);
16745
16802
  requestCameraAccess();
16746
16803
  }, [cameraAccessNeeded, requestCameraAccess]);
16747
16804
  var theme = styled.useTheme();
16748
- var maskColor = (_g = (_f = (_e = theme.documentCapture) === null || _e === void 0 ? void 0 : _e.guideBox) === null || _f === void 0 ? void 0 : _f.maskColor) !== null && _g !== void 0 ? _g : cameraFeedMode === 'snapToGuides' ? '#708090' : "rgba(0, 0, 0, 0.5)";
16805
+ var maskColor = (_e = (_d = (_c = theme.documentCapture) === null || _c === void 0 ? void 0 : _c.guideBox) === null || _d === void 0 ? void 0 : _d.maskColor) !== null && _e !== void 0 ? _e : cameraFeedMode === 'snapToGuides' ? '#708090' : "rgba(0, 0, 0, 0.5)";
16749
16806
  var verbiage = useTranslations(rawVerbiage, {
16750
16807
  headingText: title,
16751
16808
  loadingBtnText: 'Camera initializing...',
@@ -16778,7 +16835,7 @@
16778
16835
  });
16779
16836
  }
16780
16837
  return /*#__PURE__*/React.createElement(PageContainer, {
16781
- className: "flex ".concat((_h = classNames.container) !== null && _h !== void 0 ? _h : '')
16838
+ className: "flex ".concat((_f = classNames.container) !== null && _f !== void 0 ? _f : '')
16782
16839
  }, /*#__PURE__*/React.createElement(CameraFeedWrapper, {
16783
16840
  className: classNames.cameraFeedWrapper,
16784
16841
  "$mode": cameraFeedMode !== null && cameraFeedMode !== void 0 ? cameraFeedMode : 'snapToGuides',
@@ -17203,7 +17260,7 @@
17203
17260
  var _3 = useIdCaptureState(),
17204
17261
  state = _3[0],
17205
17262
  dispatch = _3[1];
17206
- var _4 = React.useContext(CameraStateContext),
17263
+ var _4 = useCameraStore(),
17207
17264
  cameraAccessDenied = _4.cameraAccessDenied,
17208
17265
  requestCameraAccess = _4.requestCameraAccess,
17209
17266
  releaseCameraAccess = _4.releaseCameraAccess;
@@ -17328,7 +17385,7 @@
17328
17385
  type: 'resetWizard'
17329
17386
  });
17330
17387
  onExitCapture === null || onExitCapture === void 0 ? void 0 : onExitCapture();
17331
- requestCameraAccess();
17388
+ void requestCameraAccess();
17332
17389
  }, [dispatch, onExitCapture, releaseCameraAccess, requestCameraAccess]);
17333
17390
  React.useEffect(function () {
17334
17391
  if (submissionStatus !== SubmissionStatus.READY) {
@@ -18151,7 +18208,13 @@
18151
18208
  modelLoadTimeoutMs = _c === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _c,
18152
18209
  _d = _a.requireVerticalFaceCentering,
18153
18210
  requireVerticalFaceCentering = _d === void 0 ? true : _d;
18154
- var _e = React.useContext(CameraStateContext),
18211
+ var _e = useCameraStore(useShallow(function (state) {
18212
+ return {
18213
+ videoRef: state.videoRef,
18214
+ videoLoaded: state.videoLoaded,
18215
+ cameraReady: state.cameraReady
18216
+ };
18217
+ })),
18155
18218
  videoRef = _e.videoRef,
18156
18219
  videoLoaded = _e.videoLoaded,
18157
18220
  cameraReady = _e.cameraReady;
@@ -18159,7 +18222,8 @@
18159
18222
  var onPredictionHandler = React.useRef();
18160
18223
  var _f = useLoadFaceDetector({
18161
18224
  onModelError: onModelError,
18162
- modelLoadTimeoutMs: modelLoadTimeoutMs
18225
+ modelLoadTimeoutMs: modelLoadTimeoutMs,
18226
+ videoRef: videoRef
18163
18227
  }),
18164
18228
  ready = _f.ready,
18165
18229
  modelDownloadProgress = _f.modelDownloadProgress,
@@ -18492,8 +18556,14 @@
18492
18556
  prediction = _t.prediction,
18493
18557
  dispatch = _s[1];
18494
18558
  var lastPredictionCanvas = React.useRef(null);
18495
- var _u = React.useContext(CameraStateContext),
18496
- cameraRef = _u.cameraRef,
18559
+ var _u = useCameraStore(useShallow(function (state) {
18560
+ return {
18561
+ camera: state.camera,
18562
+ cameraReady: state.cameraReady,
18563
+ videoRef: state.videoRef
18564
+ };
18565
+ })),
18566
+ camera = _u.camera,
18497
18567
  videoRef = _u.videoRef;
18498
18568
  var _v = React.useContext(SelfieGuidanceModelsContext),
18499
18569
  onPredictionMade = _v.onPredictionMade,
@@ -18583,7 +18653,7 @@
18583
18653
  face: prediction.face,
18584
18654
  scaling: debugScalingDetails,
18585
18655
  color: satisfied ? 'green' : 'red'
18586
- }))), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, cameraRef.current ? ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u2705 Camera: ", cameraRef.current.label, " (", cameraRef.current.width, "x", cameraRef.current.height, ")")) : '❌ Camera not ready', /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceNotCentered) ? '✅' : '❌', " Face Centered", /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceTooClose) && !(prediction === null || prediction === void 0 ? void 0 : prediction.faceTooFar) ? '✅' : '❌', ' ', "Face", ' ', (prediction === null || prediction === void 0 ? void 0 : prediction.faceTooClose) ? 'Too Close' : (prediction === null || prediction === void 0 ? void 0 : prediction.faceTooFar) ? 'Too Far' : 'Distance Correct', /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceLookingAway) ? '✅' : '❌', " Face Looking Forward", /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceIsStable) ? '✅' : '❌', " Face Is Stable", /*#__PURE__*/React.createElement("br", null), !timedOut ? '✅' : '❌', " Time Remaining:", ' ', Math.max(0, timeoutDurationMs - (new Date().getTime() - (timeoutStartedAt !== null && timeoutStartedAt !== void 0 ? timeoutStartedAt : new Date()).getTime())), "ms")), /*#__PURE__*/React.createElement(ExitCaptureButton, {
18656
+ }))), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, camera ? ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u2705 Camera: ", camera.label, " (", camera.width, "x", camera.height, ")")) : '❌ Camera not ready', /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceNotCentered) ? '✅' : '❌', " Face Centered", /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceTooClose) && !(prediction === null || prediction === void 0 ? void 0 : prediction.faceTooFar) ? '✅' : '❌', ' ', "Face", ' ', (prediction === null || prediction === void 0 ? void 0 : prediction.faceTooClose) ? 'Too Close' : (prediction === null || prediction === void 0 ? void 0 : prediction.faceTooFar) ? 'Too Far' : 'Distance Correct', /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceLookingAway) ? '✅' : '❌', " Face Looking Forward", /*#__PURE__*/React.createElement("br", null), !(prediction === null || prediction === void 0 ? void 0 : prediction.faceIsStable) ? '✅' : '❌', " Face Is Stable", /*#__PURE__*/React.createElement("br", null), !timedOut ? '✅' : '❌', " Time Remaining:", ' ', Math.max(0, timeoutDurationMs - (new Date().getTime() - (timeoutStartedAt !== null && timeoutStartedAt !== void 0 ? timeoutStartedAt : new Date()).getTime())), "ms")), /*#__PURE__*/React.createElement(ExitCaptureButton, {
18587
18657
  onClick: onExit,
18588
18658
  className: classNames.exitCaptureBtn
18589
18659
  }));
@@ -19039,7 +19109,9 @@
19039
19109
  colors = _e === void 0 ? {} : _e,
19040
19110
  _f = _a.verbiage,
19041
19111
  rawVerbiage = _f === void 0 ? {} : _f;
19042
- var requestMicrophoneAccess = React.useContext(CameraStateContext).requestMicrophoneAccess;
19112
+ var requestMicrophoneAccess = useCameraStore(function (state) {
19113
+ return state.requestMicrophoneAccess;
19114
+ });
19043
19115
  assets.imageUrl || (assets.imageUrl = DEFAULT_CDN_URL + '/microphone-disable-icon.svg');
19044
19116
  var verbiage = useTranslations(rawVerbiage, {
19045
19117
  headingText: 'Your microphone permission is disabled',
@@ -19087,7 +19159,13 @@
19087
19159
  colors = _e === void 0 ? {} : _e,
19088
19160
  _f = _a.verbiage,
19089
19161
  rawVerbiage = _f === void 0 ? {} : _f;
19090
- var _g = React.useContext(CameraStateContext),
19162
+ var _g = useCameraStore(useShallow(function (state) {
19163
+ return {
19164
+ cameraReady: state.cameraReady,
19165
+ cameraAccessDenied: state.cameraAccessDenied,
19166
+ microphoneAccessDenied: state.microphoneAccessDenied
19167
+ };
19168
+ })),
19091
19169
  cameraReady = _g.cameraReady,
19092
19170
  cameraAccessDenied = _g.cameraAccessDenied,
19093
19171
  microphoneAccessDenied = _g.microphoneAccessDenied;
@@ -19174,7 +19252,13 @@
19174
19252
  colors = _e === void 0 ? {} : _e,
19175
19253
  _f = _a.verbiage,
19176
19254
  rawVerbiage = _f === void 0 ? {} : _f;
19177
- var _g = React.useContext(CameraStateContext),
19255
+ var _g = useCameraStore(useShallow(function (state) {
19256
+ return {
19257
+ cameraReady: state.cameraReady,
19258
+ cameraAccessDenied: state.cameraAccessDenied,
19259
+ microphoneAccessDenied: state.microphoneAccessDenied
19260
+ };
19261
+ })),
19178
19262
  cameraReady = _g.cameraReady,
19179
19263
  cameraAccessDenied = _g.cameraAccessDenied,
19180
19264
  microphoneAccessDenied = _g.microphoneAccessDenied;
@@ -19391,7 +19475,13 @@
19391
19475
  livenessCheckRequest = _t.livenessCheckRequest,
19392
19476
  setSelfieImage = _t.setSelfieImage,
19393
19477
  logSelfieCaptureAttempt = _t.logSelfieCaptureAttempt;
19394
- var _u = React.useContext(CameraStateContext),
19478
+ var _u = useCameraStore(useShallow(function (state) {
19479
+ return {
19480
+ cameraAccessDenied: state.cameraAccessDenied,
19481
+ requestCameraAccess: state.requestCameraAccess,
19482
+ releaseCameraAccess: state.releaseCameraAccess
19483
+ };
19484
+ })),
19395
19485
  cameraAccessDenied = _u.cameraAccessDenied,
19396
19486
  requestCameraAccess = _u.requestCameraAccess,
19397
19487
  releaseCameraAccess = _u.releaseCameraAccess;
@@ -20880,10 +20970,10 @@
20880
20970
  setSignatureVideoUrl = _e[1];
20881
20971
  var signatureRecorder = React.useRef(null);
20882
20972
  var recordedChunks = React.useRef([]);
20883
- var _f = React.useContext(CameraStateContext),
20884
- cameraRef = _f.cameraRef,
20973
+ var _f = useCameraStore(),
20974
+ camera = _f.camera,
20885
20975
  videoRef = _f.videoRef;
20886
- var _g = useVideoRecorder(cameraRef.current),
20976
+ var _g = useVideoRecorder(camera),
20887
20977
  isRecordingVideo = _g.isRecordingVideo,
20888
20978
  startRecordingVideo = _g.startRecordingVideo,
20889
20979
  stopRecordingVideo = _g.stopRecordingVideo,
@@ -20951,8 +21041,8 @@
20951
21041
  var animationFrame = React.useRef(0);
20952
21042
  React.useEffect(function () {
20953
21043
  var _a;
20954
- if (!signaturePad.current || !videoRef.current || !outputCanvas.current || !cameraRef.current || !isRecording || !isRecordingVideo) return;
20955
- var _b = [cameraRef.current.width, cameraRef.current.height],
21044
+ if (!signaturePad.current || !videoRef.current || !outputCanvas.current || !camera || !isRecording || !isRecordingVideo) return;
21045
+ var _b = [camera.width, camera.height],
20956
21046
  w = _b[0],
20957
21047
  h = _b[1];
20958
21048
  var isPortrait = typeof window !== 'undefined' && window.innerWidth < window.innerHeight;
@@ -20985,7 +21075,7 @@
20985
21075
  return function () {
20986
21076
  cancelAnimationFrame(animationFrame.current);
20987
21077
  };
20988
- }, [cameraRef, isRecording, isRecordingVideo, videoRef]);
21078
+ }, [camera, isRecording, isRecordingVideo, videoRef]);
20989
21079
  var onAcceptClicked = React.useCallback(function () {
20990
21080
  return __awaiter(_this, void 0, void 0, function () {
20991
21081
  var imageUrl;
@@ -21114,27 +21204,29 @@
21114
21204
  var templateObject_1$9, templateObject_2$8, templateObject_3$8, templateObject_4$3, templateObject_5$2, templateObject_6$2, templateObject_7$1;
21115
21205
 
21116
21206
  var VideoSignatureCapture = function VideoSignatureCapture(_a) {
21117
- var _b, _c, _d;
21207
+ var _b;
21118
21208
  var onVideoCaptured = _a.onVideoCaptured,
21119
21209
  onFaceNotDetected = _a.onFaceNotDetected,
21120
21210
  onExit = _a.onExit,
21121
21211
  guidesComponent = _a.guidesComponent,
21122
- _e = _a.classNames,
21123
- classNames = _e === void 0 ? {} : _e,
21124
- _f = _a.colors,
21125
- colors = _f === void 0 ? {} : _f,
21126
- _g = _a.verbiage,
21127
- rawVerbiage = _g === void 0 ? {} : _g,
21128
- _h = _a.debugMode,
21129
- debugMode = _h === void 0 ? false : _h;
21130
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
21212
+ _c = _a.classNames,
21213
+ classNames = _c === void 0 ? {} : _c,
21214
+ _d = _a.colors,
21215
+ colors = _d === void 0 ? {} : _d,
21216
+ _e = _a.verbiage,
21217
+ rawVerbiage = _e === void 0 ? {} : _e,
21218
+ _f = _a.debugMode,
21219
+ debugMode = _f === void 0 ? false : _f;
21220
+ var camera = useCameraStore(function (state) {
21221
+ return state.camera;
21222
+ });
21131
21223
  var onPredictionMade = React.useContext(SelfieGuidanceModelsContext).onPredictionMade;
21132
- var _j = useVideoSignatureContext(),
21133
- signatureData = _j.signatureData,
21134
- signatureDataUrl = _j.signatureDataUrl,
21135
- signatureVideoData = _j.signatureVideoData,
21136
- startRecording = _j.startRecording,
21137
- stopRecording = _j.stopRecording;
21224
+ var _g = useVideoSignatureContext(),
21225
+ signatureData = _g.signatureData,
21226
+ signatureDataUrl = _g.signatureDataUrl,
21227
+ signatureVideoData = _g.signatureVideoData,
21228
+ startRecording = _g.startRecording,
21229
+ stopRecording = _g.stopRecording;
21138
21230
  React.useEffect(function () {
21139
21231
  startRecording();
21140
21232
  return function () {
@@ -21151,9 +21243,9 @@
21151
21243
  onVideoCaptured === null || onVideoCaptured === void 0 ? void 0 : onVideoCaptured(signatureVideoData, signatureData, signatureDataUrl);
21152
21244
  }
21153
21245
  }, [onVideoCaptured, signatureData, signatureDataUrl, signatureVideoData]);
21154
- var _k = React.useState(0),
21155
- numFramesWithoutFaces = _k[0],
21156
- setNumFramesWithoutFaces = _k[1];
21246
+ var _h = React.useState(0),
21247
+ numFramesWithoutFaces = _h[0],
21248
+ setNumFramesWithoutFaces = _h[1];
21157
21249
  React.useEffect(function () {
21158
21250
  onPredictionMade(function (_a) {
21159
21251
  var face = _a.face;
@@ -21180,7 +21272,7 @@
21180
21272
  }, verbiage.guidanceMessageText))), /*#__PURE__*/React.createElement(GuidesComponent, {
21181
21273
  classNames: classNames.videoSignatureGuidesClassNames,
21182
21274
  status: "success"
21183
- }), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, "Video: ", (_c = cameraRef.current) === null || _c === void 0 ? void 0 : _c.width, "x", (_d = cameraRef.current) === null || _d === void 0 ? void 0 : _d.height)), /*#__PURE__*/React.createElement(ExitCaptureButton, {
21275
+ }), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, "Video: ", camera === null || camera === void 0 ? void 0 : camera.width, "x", camera === null || camera === void 0 ? void 0 : camera.height)), /*#__PURE__*/React.createElement(ExitCaptureButton, {
21184
21276
  onClick: onExit,
21185
21277
  className: classNames.exitCaptureBtn
21186
21278
  }));
@@ -21274,7 +21366,13 @@
21274
21366
  setSignatureData = _l.setSignatureData,
21275
21367
  setSignatureVideoUrl = _l.setSignatureVideoUrl,
21276
21368
  logSelfieCaptureAttempt = _l.logSelfieCaptureAttempt;
21277
- var _m = React.useContext(CameraStateContext),
21369
+ var _m = useCameraStore(useShallow(function (state) {
21370
+ return {
21371
+ cameraAccessDenied: state.cameraAccessDenied,
21372
+ requestCameraAccess: state.requestCameraAccess,
21373
+ releaseCameraAccess: state.releaseCameraAccess
21374
+ };
21375
+ })),
21278
21376
  cameraAccessDenied = _m.cameraAccessDenied,
21279
21377
  requestCameraAccess = _m.requestCameraAccess,
21280
21378
  releaseCameraAccess = _m.releaseCameraAccess;
@@ -21434,27 +21532,29 @@
21434
21532
  };
21435
21533
 
21436
21534
  var IdVideoCaptureGuides = function IdVideoCaptureGuides(_a) {
21437
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
21438
- var _0 = _a.requestedAction,
21439
- requestedAction = _0 === void 0 ? 'SHOW_ID_FRONT' : _0,
21440
- _1 = _a.satisfied,
21441
- satisfied = _1 === void 0 ? false : _1,
21442
- _2 = _a.faceGuideStatus,
21443
- faceGuideStatus = _2 === void 0 ? 'success' : _2,
21535
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
21536
+ var _z = _a.requestedAction,
21537
+ requestedAction = _z === void 0 ? 'SHOW_ID_FRONT' : _z,
21538
+ _0 = _a.satisfied,
21539
+ satisfied = _0 === void 0 ? false : _0,
21540
+ _1 = _a.faceGuideStatus,
21541
+ faceGuideStatus = _1 === void 0 ? 'success' : _1,
21444
21542
  faceGuideBorderWidth = _a.faceGuideBorderWidth,
21445
21543
  faceGuideBorderColor = _a.faceGuideBorderColor,
21446
- _3 = _a.idCardGuideStatus,
21447
- idCardGuideStatus = _3 === void 0 ? 'ready' : _3,
21544
+ _2 = _a.idCardGuideStatus,
21545
+ idCardGuideStatus = _2 === void 0 ? 'ready' : _2,
21448
21546
  idCardGuideBorderWidth = _a.idCardGuideBorderWidth,
21449
21547
  idCardGuideBorderColor = _a.idCardGuideBorderColor,
21450
21548
  idCardCaptureProgress = _a.idCardCaptureProgress,
21451
- _4 = _a.idCardCaptureGuideImages,
21452
- userSuppliedImages = _4 === void 0 ? defaultIdCaptureGuideImages : _4,
21453
- _5 = _a.classNames,
21454
- classNames = _5 === void 0 ? {} : _5,
21455
- _6 = _a.verbiage,
21456
- rawVerbiage = _6 === void 0 ? {} : _6;
21457
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
21549
+ _3 = _a.idCardCaptureGuideImages,
21550
+ userSuppliedImages = _3 === void 0 ? defaultIdCaptureGuideImages : _3,
21551
+ _4 = _a.classNames,
21552
+ classNames = _4 === void 0 ? {} : _4,
21553
+ _5 = _a.verbiage,
21554
+ rawVerbiage = _5 === void 0 ? {} : _5;
21555
+ var isRearFacing = useCameraStore(function (state) {
21556
+ return state.isRearFacing;
21557
+ });
21458
21558
  var verbiage = useTranslations(rawVerbiage, {
21459
21559
  idFrontInstructionText: 'Display the front of your ID card...',
21460
21560
  idBackInstructionText: 'Display the back of your ID card...',
@@ -21467,17 +21567,17 @@
21467
21567
  if (faceGuideBorderColor === undefined) faceGuideBorderColor = (_j = satisfied ? (_f = (_e = theme.idVideoCapture) === null || _e === void 0 ? void 0 : _e.faceGuides) === null || _f === void 0 ? void 0 : _f.satisfiedColor : (_h = (_g = theme.idVideoCapture) === null || _g === void 0 ? void 0 : _g.faceGuides) === null || _h === void 0 ? void 0 : _h.unsatisfiedColor) !== null && _j !== void 0 ? _j : '#D6DCE7';
21468
21568
  if (idCardGuideBorderWidth === undefined) idCardGuideBorderWidth = (_m = (_l = (_k = theme.idVideoCapture) === null || _k === void 0 ? void 0 : _k.idCardGuides) === null || _l === void 0 ? void 0 : _l.borderWidth) !== null && _m !== void 0 ? _m : 20;
21469
21569
  if (idCardGuideBorderColor === undefined) idCardGuideBorderColor = (_s = satisfied ? (_p = (_o = theme.idVideoCapture) === null || _o === void 0 ? void 0 : _o.idCardGuides) === null || _p === void 0 ? void 0 : _p.satisfiedColor : (_r = (_q = theme.idVideoCapture) === null || _q === void 0 ? void 0 : _q.idCardGuides) === null || _r === void 0 ? void 0 : _r.unsatisfiedColor) !== null && _s !== void 0 ? _s : '#D6DCE7';
21470
- var _7 = useResizeObserver(),
21471
- idCardGuideRef = _7.ref,
21472
- _8 = _7.width,
21473
- idCardGuideWidth = _8 === void 0 ? 0 : _8,
21474
- _9 = _7.height,
21475
- idCardGuideHeight = _9 === void 0 ? 0 : _9;
21570
+ var _6 = useResizeObserver(),
21571
+ idCardGuideRef = _6.ref,
21572
+ _7 = _6.width,
21573
+ idCardGuideWidth = _7 === void 0 ? 0 : _7,
21574
+ _8 = _6.height,
21575
+ idCardGuideHeight = _8 === void 0 ? 0 : _8;
21476
21576
  var idCaptureGuideImages = useGuideImages(userSuppliedImages);
21477
21577
  var idCaptureGuideImagesByUrl = useGuideImagesByUrl(idCaptureGuideImages);
21478
- var _10 = React.useState(undefined),
21479
- aspectRatio = _10[0],
21480
- setAspectRatio = _10[1];
21578
+ var _9 = React.useState(undefined),
21579
+ aspectRatio = _9[0],
21580
+ setAspectRatio = _9[1];
21481
21581
  var onImageLoaded = React.useCallback(function (e) {
21482
21582
  var _a, _b, _c, _d;
21483
21583
  var img = e.currentTarget;
@@ -21524,7 +21624,7 @@
21524
21624
  }, /*#__PURE__*/React.createElement(IdCardGuideImage, {
21525
21625
  alt: "",
21526
21626
  className: classNames.idCardGuideImage,
21527
- "$isMirrored": !((_v = cameraRef.current) === null || _v === void 0 ? void 0 : _v.isRearFacing),
21627
+ "$isMirrored": !isRearFacing,
21528
21628
  style: idCardImageStyle,
21529
21629
  src: requestedAction === 'SHOW_ID_BACK' ? idCaptureGuideImages.landscape.SHOW_ID_BACK.url : idCaptureGuideImages.landscape.SHOW_ID_FRONT.url,
21530
21630
  onLoad: onImageLoaded
@@ -21538,8 +21638,8 @@
21538
21638
  className: classNames.idCardGuideInstructionsContainer
21539
21639
  }, /*#__PURE__*/React.createElement(IdCardGuideInstructions, {
21540
21640
  className: classNames.idCardGuideInstructions,
21541
- "$textColor": (_x = (_w = theme.idVideoCapture) === null || _w === void 0 ? void 0 : _w.idCardGuides) === null || _x === void 0 ? void 0 : _x.instructionsTextColor,
21542
- "$background": (_z = (_y = theme.idVideoCapture) === null || _y === void 0 ? void 0 : _y.idCardGuides) === null || _z === void 0 ? void 0 : _z.instructionsBackgroundColor
21641
+ "$textColor": (_w = (_v = theme.idVideoCapture) === null || _v === void 0 ? void 0 : _v.idCardGuides) === null || _w === void 0 ? void 0 : _w.instructionsTextColor,
21642
+ "$background": (_y = (_x = theme.idVideoCapture) === null || _x === void 0 ? void 0 : _x.idCardGuides) === null || _y === void 0 ? void 0 : _y.instructionsBackgroundColor
21543
21643
  }, instructionText))))));
21544
21644
  };
21545
21645
  var Container = styled.div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n display: flex;\n max-height: 100%;\n position: absolute;\n z-index: 1000;\n width: 100dvw;\n height: 100dvh;\n font-family: ", ";\n box-sizing: border-box;\n overflow: hidden;\n padding: 40px;\n"], ["\n display: flex;\n max-height: 100%;\n position: absolute;\n z-index: 1000;\n width: 100dvw;\n height: 100dvh;\n font-family: ", ";\n box-sizing: border-box;\n overflow: hidden;\n padding: 40px;\n"])), function (props) {
@@ -21684,99 +21784,100 @@
21684
21784
  flipShortcutThreshold: 0.7
21685
21785
  };
21686
21786
  var IdVideoCapture = function IdVideoCapture(_a) {
21687
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
21787
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
21688
21788
  var onComplete = _a.onComplete,
21689
21789
  onIdFrontImageCaptured = _a.onIdFrontImageCaptured,
21690
21790
  onIdBackImageCaptured = _a.onIdBackImageCaptured,
21691
21791
  onFaceNotDetected = _a.onFaceNotDetected,
21692
21792
  onRecordingFailed = _a.onRecordingFailed,
21693
21793
  onExitCapture = _a.onExitCapture,
21694
- _x = _a.idCaptureModelsEnabled,
21695
- idCaptureModelsEnabled = _x === void 0 ? true : _x,
21696
- _y = _a.idCardCaptureGuideImages,
21697
- idCardCaptureGuideImages = _y === void 0 ? defaultIdCaptureGuideImages : _y,
21698
- _z = _a.idCardFrontDelay,
21699
- idCardFrontDelay = _z === void 0 ? 1000 : _z,
21700
- _0 = _a.videoIdCaptureThresholds,
21701
- videoIdCaptureThresholds = _0 === void 0 ? defaultVideoIdCaptureThresholds : _0,
21702
- _1 = _a.skipShowIdCardBack,
21703
- skipShowIdCardBack = _1 === void 0 ? false : _1,
21704
- _2 = _a.captureCountdownSeconds,
21705
- captureCountdownSeconds = _2 === void 0 ? 3 : _2,
21794
+ _w = _a.idCaptureModelsEnabled,
21795
+ idCaptureModelsEnabled = _w === void 0 ? true : _w,
21796
+ _x = _a.idCardCaptureGuideImages,
21797
+ idCardCaptureGuideImages = _x === void 0 ? defaultIdCaptureGuideImages : _x,
21798
+ _y = _a.idCardFrontDelay,
21799
+ idCardFrontDelay = _y === void 0 ? 1000 : _y,
21800
+ _z = _a.videoIdCaptureThresholds,
21801
+ videoIdCaptureThresholds = _z === void 0 ? defaultVideoIdCaptureThresholds : _z,
21802
+ _0 = _a.skipShowIdCardBack,
21803
+ skipShowIdCardBack = _0 === void 0 ? false : _0,
21804
+ _1 = _a.captureCountdownSeconds,
21805
+ captureCountdownSeconds = _1 === void 0 ? 3 : _1,
21706
21806
  readTextPrompt = _a.readTextPrompt,
21707
- _3 = _a.readTextTimeoutDurationMs,
21708
- readTextTimeoutDurationMs = _3 === void 0 ? 15000 : _3,
21709
- _4 = _a.readTextMinReadingMs,
21710
- readTextMinReadingMs = _4 === void 0 ? 10000 : _4,
21711
- _5 = _a.disableFaceDetectionWhileAudioCapture,
21712
- disableFaceDetectionWhileAudioCapture = _5 === void 0 ? false : _5,
21713
- _6 = _a.disableFaceDetectionWhileAudioCaptureMsDelay,
21714
- disableFaceDetectionWhileAudioCaptureMsDelay = _6 === void 0 ? 2000 : _6,
21715
- _7 = _a.mergeAVStreams,
21716
- mergeAVStreams = _7 === void 0 ? false : _7,
21717
- _8 = _a.classNames,
21718
- classNames = _8 === void 0 ? {} : _8,
21719
- _9 = _a.colors,
21720
- colors = _9 === void 0 ? {} : _9,
21721
- _10 = _a.verbiage,
21722
- rawVerbiage = _10 === void 0 ? {} : _10,
21723
- _11 = _a.debugMode,
21724
- debugMode = _11 === void 0 ? false : _11;
21725
- var _12 = useResizeObserver(),
21726
- ref = _12.ref,
21727
- _13 = _12.width,
21728
- width = _13 === void 0 ? 1 : _13,
21729
- _14 = _12.height,
21730
- height = _14 === void 0 ? 1 : _14;
21731
- var _15 = React.useContext(CameraStateContext),
21732
- cameraRef = _15.cameraRef,
21733
- videoRef = _15.videoRef,
21734
- videoLoaded = _15.videoLoaded,
21735
- cameraReady = _15.cameraReady,
21736
- microphoneReady = _15.microphoneReady,
21737
- audioStream = _15.audioStream,
21738
- setVideoLoaded = _15.setVideoLoaded;
21739
- var _16 = React.useState([]),
21740
- detectedObjects = _16[0],
21741
- setDetectedObjects = _16[1];
21742
- var _17 = React.useState(null),
21743
- face = _17[0],
21744
- setFace = _17[1];
21745
- var _18 = React.useContext(IdCaptureModelsContext),
21746
- idModelsReady = _18.ready,
21747
- startIdModels = _18.start,
21748
- stopIdModels = _18.stop,
21749
- onIdPredictionMade = _18.onPredictionMade,
21750
- setThresholds = _18.setThresholds,
21751
- setDocumentDetectionBoundaries = _18.setDocumentDetectionBoundaries,
21752
- bestFrameDetails = _18.bestFrameDetails,
21753
- resetBestFrame = _18.resetBestFrame,
21754
- idModelError = _18.modelError;
21755
- var _19 = React.useState(null),
21756
- videoStartsAt = _19[0],
21757
- setVideoStartsAt = _19[1];
21758
- var _20 = React.useContext(SubmissionContext),
21759
- setIdCaptureVideoAudioStartsAt = _20.setIdCaptureVideoAudioStartsAt,
21760
- setExpectedAudioText = _20.setExpectedAudioText;
21761
- var _21 = React.useContext(SelfieGuidanceModelsContext),
21762
- startSelfieGuidance = _21.start,
21763
- stopSelfieGuidance = _21.stop,
21764
- onSelfiePredictionMade = _21.onPredictionMade,
21765
- selfieModelError = _21.error;
21766
- var _22 = useVideoRecorder(cameraRef.current, audioStream, mergeAVStreams),
21767
- isRecordingVideo = _22.isRecordingVideo,
21768
- startRecordingVideo = _22.startRecordingVideo,
21769
- startRecordingAudio = _22.startRecordingAudio,
21770
- stopRecordingVideo = _22.stopRecordingVideo,
21771
- stopRecordingAudio = _22.stopRecordingAudio,
21772
- videoRecordingUnintentionallyStopped = _22.videoRecordingUnintentionallyStopped,
21773
- audioRecordingUnintentionallyStopped = _22.audioRecordingUnintentionallyStopped,
21774
- videoUrl = _22.videoUrl,
21775
- audioUrl = _22.audioUrl;
21807
+ _2 = _a.readTextTimeoutDurationMs,
21808
+ readTextTimeoutDurationMs = _2 === void 0 ? 15000 : _2,
21809
+ _3 = _a.readTextMinReadingMs,
21810
+ readTextMinReadingMs = _3 === void 0 ? 10000 : _3,
21811
+ _4 = _a.disableFaceDetectionWhileAudioCapture,
21812
+ disableFaceDetectionWhileAudioCapture = _4 === void 0 ? false : _4,
21813
+ _5 = _a.disableFaceDetectionWhileAudioCaptureMsDelay,
21814
+ disableFaceDetectionWhileAudioCaptureMsDelay = _5 === void 0 ? 2000 : _5,
21815
+ _6 = _a.mergeAVStreams,
21816
+ mergeAVStreams = _6 === void 0 ? false : _6,
21817
+ _7 = _a.classNames,
21818
+ classNames = _7 === void 0 ? {} : _7,
21819
+ _8 = _a.colors,
21820
+ colors = _8 === void 0 ? {} : _8,
21821
+ _9 = _a.verbiage,
21822
+ rawVerbiage = _9 === void 0 ? {} : _9,
21823
+ _10 = _a.debugMode,
21824
+ debugMode = _10 === void 0 ? false : _10;
21825
+ var _11 = useResizeObserver(),
21826
+ ref = _11.ref,
21827
+ _12 = _11.width,
21828
+ width = _12 === void 0 ? 1 : _12,
21829
+ _13 = _11.height,
21830
+ height = _13 === void 0 ? 1 : _13;
21831
+ var _14 = useCameraStore(),
21832
+ camera = _14.camera,
21833
+ videoRef = _14.videoRef,
21834
+ videoLoaded = _14.videoLoaded,
21835
+ cameraReady = _14.cameraReady,
21836
+ microphoneReady = _14.microphoneReady,
21837
+ audioStream = _14.audioStream,
21838
+ isRearFacing = _14.isRearFacing,
21839
+ releaseCameraAccess = _14.releaseCameraAccess;
21840
+ var _15 = React.useState([]),
21841
+ detectedObjects = _15[0],
21842
+ setDetectedObjects = _15[1];
21843
+ var _16 = React.useState(null),
21844
+ face = _16[0],
21845
+ setFace = _16[1];
21846
+ var _17 = React.useContext(IdCaptureModelsContext),
21847
+ idModelsReady = _17.ready,
21848
+ startIdModels = _17.start,
21849
+ stopIdModels = _17.stop,
21850
+ onIdPredictionMade = _17.onPredictionMade,
21851
+ setThresholds = _17.setThresholds,
21852
+ setDocumentDetectionBoundaries = _17.setDocumentDetectionBoundaries,
21853
+ bestFrameDetails = _17.bestFrameDetails,
21854
+ resetBestFrame = _17.resetBestFrame,
21855
+ idModelError = _17.modelError;
21856
+ var _18 = React.useState(null),
21857
+ videoStartsAt = _18[0],
21858
+ setVideoStartsAt = _18[1];
21859
+ var _19 = React.useContext(SubmissionContext),
21860
+ setIdCaptureVideoAudioStartsAt = _19.setIdCaptureVideoAudioStartsAt,
21861
+ setExpectedAudioText = _19.setExpectedAudioText;
21862
+ var _20 = React.useContext(SelfieGuidanceModelsContext),
21863
+ startSelfieGuidance = _20.start,
21864
+ stopSelfieGuidance = _20.stop,
21865
+ onSelfiePredictionMade = _20.onPredictionMade,
21866
+ selfieModelError = _20.error;
21867
+ var _21 = useVideoRecorder(camera, audioStream, mergeAVStreams),
21868
+ isRecordingVideo = _21.isRecordingVideo,
21869
+ startRecordingVideo = _21.startRecordingVideo,
21870
+ startRecordingAudio = _21.startRecordingAudio,
21871
+ stopRecordingVideo = _21.stopRecordingVideo,
21872
+ stopRecordingAudio = _21.stopRecordingAudio,
21873
+ videoRecordingUnintentionallyStopped = _21.videoRecordingUnintentionallyStopped,
21874
+ audioRecordingUnintentionallyStopped = _21.audioRecordingUnintentionallyStopped,
21875
+ videoUrl = _21.videoUrl,
21876
+ audioUrl = _21.audioUrl;
21776
21877
  var countdownTimeoutRef = React.useRef(undefined);
21777
- var _23 = React.useState(-1),
21778
- countdownRemaining = _23[0],
21779
- setCountdownRemaining = _23[1];
21878
+ var _22 = React.useState(-1),
21879
+ countdownRemaining = _22[0],
21880
+ setCountdownRemaining = _22[1];
21780
21881
  React.useEffect(function () {
21781
21882
  if (!isRecordingVideo && !videoUrl) {
21782
21883
  startRecordingVideo();
@@ -21787,24 +21888,24 @@
21787
21888
  var needsAudio = !!readTextPrompt && !mergeAVStreams;
21788
21889
  var audioReady = !needsAudio || audioUrl;
21789
21890
  if (videoUrl && audioReady) {
21790
- setVideoLoaded(false);
21891
+ releaseCameraAccess();
21791
21892
  onComplete === null || onComplete === void 0 ? void 0 : onComplete(videoUrl, audioUrl);
21792
21893
  }
21793
- }, [audioUrl, isRecordingVideo, mergeAVStreams, onComplete, readTextPrompt, setVideoLoaded, startRecordingVideo, videoUrl]);
21894
+ }, [audioUrl, isRecordingVideo, mergeAVStreams, onComplete, readTextPrompt, releaseCameraAccess, startRecordingVideo, videoUrl]);
21794
21895
  React.useEffect(function () {
21795
- if (videoRecordingUnintentionallyStopped || audioRecordingUnintentionallyStopped) {
21896
+ if (videoRecordingUnintentionallyStopped || audioRecordingUnintentionallyStopped || !!readTextPrompt && !microphoneReady) {
21796
21897
  onRecordingFailed === null || onRecordingFailed === void 0 ? void 0 : onRecordingFailed();
21797
21898
  }
21798
- }, [audioRecordingUnintentionallyStopped, onRecordingFailed, videoRecordingUnintentionallyStopped]);
21799
- var _24 = React.useState('SHOW_ID_FRONT'),
21800
- requestedAction = _24[0],
21801
- setRequestedAction = _24[1];
21899
+ }, [audioRecordingUnintentionallyStopped, microphoneReady, onRecordingFailed, readTextPrompt, videoRecordingUnintentionallyStopped]);
21900
+ var _23 = React.useState('SHOW_ID_FRONT'),
21901
+ requestedAction = _23[0],
21902
+ setRequestedAction = _23[1];
21802
21903
  var shouldRunIdModels = idCaptureModelsEnabled && videoLoaded && cameraReady && idModelsReady && !idModelError && requestedAction !== 'READ_TEXT' && (!readTextPrompt || microphoneReady);
21803
21904
  React.useEffect(function startModelsWhenCapturing() {
21804
21905
  if (!shouldRunIdModels) return;
21805
21906
  startIdModels();
21806
21907
  return function () {
21807
- stopIdModels();
21908
+ return stopIdModels();
21808
21909
  };
21809
21910
  }, [shouldRunIdModels, startIdModels, stopIdModels]);
21810
21911
  React.useEffect(function () {
@@ -21818,18 +21919,18 @@
21818
21919
  bottom: 1
21819
21920
  });
21820
21921
  }, [setDocumentDetectionBoundaries]);
21821
- var _25 = React.useState(0),
21822
- currentDetectionScore = _25[0],
21823
- setCurrentDetectionScore = _25[1];
21824
- var _26 = React.useState('none'),
21825
- currentDetectedDocumentType = _26[0],
21826
- setCurrentDetectedDocumentType = _26[1];
21922
+ var _24 = React.useState(0),
21923
+ currentDetectionScore = _24[0],
21924
+ setCurrentDetectionScore = _24[1];
21925
+ var _25 = React.useState('none'),
21926
+ currentDetectedDocumentType = _25[0],
21927
+ setCurrentDetectedDocumentType = _25[1];
21928
+ var _26 = React.useState(0),
21929
+ currentFocusScore = _26[0],
21930
+ setCurrentFocusScore = _26[1];
21827
21931
  var _27 = React.useState(0),
21828
- currentFocusScore = _27[0],
21829
- setCurrentFocusScore = _27[1];
21830
- var _28 = React.useState(0),
21831
- goodFramesCount = _28[0],
21832
- setGoodFramesCount = _28[1];
21932
+ goodFramesCount = _27[0],
21933
+ setGoodFramesCount = _27[1];
21833
21934
  var goodFramesThreshold = requestedAction === 'SHOW_ID_FRONT' ? videoIdCaptureThresholds.goodFrames.idCardFront : videoIdCaptureThresholds.goodFrames.idCardBack;
21834
21935
  var goodFramesThresholdMet = goodFramesCount >= goodFramesThreshold;
21835
21936
  React.useEffect(function () {
@@ -21850,9 +21951,9 @@
21850
21951
  } : 0);
21851
21952
  });
21852
21953
  }, [idCaptureModelsEnabled, onIdPredictionMade, idModelError, requestedAction, videoIdCaptureThresholds.flipShortcutThreshold]);
21853
- var _29 = React.useState(null),
21854
- idFrontCaptureStartedAt = _29[0],
21855
- setFirstGoodFrameTime = _29[1];
21954
+ var _28 = React.useState(null),
21955
+ idFrontCaptureStartedAt = _28[0],
21956
+ setFirstGoodFrameTime = _28[1];
21856
21957
  React.useEffect(function () {
21857
21958
  if (goodFramesCount === 1) setFirstGoodFrameTime(new Date().getTime());
21858
21959
  }, [goodFramesCount]);
@@ -21873,9 +21974,9 @@
21873
21974
  var frameHeight = (_e = (_d = videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) !== null && _e !== void 0 ? _e : 0;
21874
21975
  var faceBox = face === null || face === void 0 ? void 0 : face.box;
21875
21976
  var faceCentered = !faceBox || !frameWidth || faceBox.xMin > frameWidth * edgeBoundary && faceBox.yMin > frameHeight * edgeBoundary && faceBox.xMax < frameWidth * (1 - edgeBoundary) && faceBox.yMax < frameHeight * (1 - edgeBoundary);
21876
- var _30 = React.useState(),
21877
- countdownStartedAt = _30[0],
21878
- setCountdownStartedAt = _30[1];
21977
+ var _29 = React.useState(),
21978
+ countdownStartedAt = _29[0],
21979
+ setCountdownStartedAt = _29[1];
21879
21980
  var photoCanvas = React.useRef(null);
21880
21981
  var frameLock = React.useRef(false);
21881
21982
  var captureFrame = React.useCallback(function () {
@@ -21998,9 +22099,9 @@
21998
22099
  stopSelfieGuidance();
21999
22100
  };
22000
22101
  }, [startSelfieGuidance, stopSelfieGuidance]);
22001
- var _31 = React.useState(0),
22002
- numFramesWithoutFaces = _31[0],
22003
- setNumFramesWithoutFaces = _31[1];
22102
+ var _30 = React.useState(0),
22103
+ numFramesWithoutFaces = _30[0],
22104
+ setNumFramesWithoutFaces = _30[1];
22004
22105
  onSelfiePredictionMade(f(React.useCallback(function (_a) {
22005
22106
  var face = _a.face;
22006
22107
  if (selfieModelError) return;
@@ -22016,12 +22117,12 @@
22016
22117
  }
22017
22118
  }, [disableFaceDetectionWhileAudioCapture, disableFaceDetectionWhileAudioCaptureMsDelay, numFramesWithoutFaces, onFaceNotDetected, timeoutStartedAt]);
22018
22119
  var theme = styled.useTheme();
22019
- var _32 = useTranslations(rawVerbiage, {
22120
+ var _31 = useTranslations(rawVerbiage, {
22020
22121
  faceNotCenteredText: 'Please move your face to the center...',
22021
22122
  captureBtnText: 'Capture'
22022
22123
  }),
22023
- captureBtnText = _32.captureBtnText,
22024
- faceNotCenteredText = _32.faceNotCenteredText;
22124
+ captureBtnText = _31.captureBtnText,
22125
+ faceNotCenteredText = _31.faceNotCenteredText;
22025
22126
  var debugScalingDetails = useDebugScalingDetails({
22026
22127
  enabled: debugMode,
22027
22128
  pageWidth: width,
@@ -22030,8 +22131,6 @@
22030
22131
  videoHeight: (_j = (_h = videoRef.current) === null || _h === void 0 ? void 0 : _h.videoHeight) !== null && _j !== void 0 ? _j : 0
22031
22132
  });
22032
22133
  var capturingId = ['SHOW_ID_FRONT', 'SHOW_ID_BACK'].includes(requestedAction);
22033
- // const searchingForIdCard =
22034
- // idCaptureModelsEnabled && capturingId && !goodFramesThresholdMet
22035
22134
  var guidanceText = !faceCentered ? faceNotCenteredText : undefined;
22036
22135
  return /*#__PURE__*/React.createElement(PageContainer, {
22037
22136
  ref: ref,
@@ -22057,15 +22156,14 @@
22057
22156
  faceGuideBorderColor: satisfied ? colors.guidesSatisfiedColor : colors.guidesUnsatisfiedColor,
22058
22157
  idCardGuideBorderColor: satisfied ? colors.guidesSatisfiedColor : colors.guidesUnsatisfiedColor
22059
22158
  }), debugMode && capturingId && ( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ObjectDetectionDebugOverlayDiv, {
22060
- "$flipX": !((_l = cameraRef.current) === null || _l === void 0 ? void 0 : _l.isRearFacing)
22159
+ "$flipX": !isRearFacing
22061
22160
  }, detectedObjects.map(function (obj, i) {
22062
- var _a;
22063
22161
  return /*#__PURE__*/React.createElement(IdCaptureDetectedObjectDebugBox, {
22064
22162
  key: i,
22065
22163
  obj: obj,
22066
22164
  scaling: debugScalingDetails,
22067
22165
  color: "blue",
22068
- flipX: !((_a = cameraRef.current) === null || _a === void 0 ? void 0 : _a.isRearFacing)
22166
+ flipX: !isRearFacing
22069
22167
  });
22070
22168
  })), /*#__PURE__*/React.createElement(DebugBoundingBoxOverlay, null, face && ( /*#__PURE__*/React.createElement(SelfieCaptureFaceDebugBox, {
22071
22169
  face: face,
@@ -22074,9 +22172,9 @@
22074
22172
  className: classNames.guidanceMessageContainer
22075
22173
  }, /*#__PURE__*/React.createElement(GuidanceMessage, {
22076
22174
  className: classNames.guidanceMessage,
22077
- "$background": (_p = (_o = (_m = theme.guidanceMessages) === null || _m === void 0 ? void 0 : _m.negative) === null || _o === void 0 ? void 0 : _o.backgroundColor) !== null && _p !== void 0 ? _p : 'red',
22078
- "$textColor": (_s = (_r = (_q = theme.guidanceMessages) === null || _q === void 0 ? void 0 : _q.negative) === null || _r === void 0 ? void 0 : _r.textColor) !== null && _s !== void 0 ? _s : 'white'
22079
- }, guidanceText))), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, cameraRef.current ? ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u2705 Camera: ", cameraRef.current.label, " (", cameraRef.current.width, "x", cameraRef.current.height, ")")) : '❌ Camera not ready', /*#__PURE__*/React.createElement("br", null), isRecordingVideo ? '✅ Recording' : '❌ Not recording', /*#__PURE__*/React.createElement("br", null), goodFramesThresholdMet ? '✅' : '❌', " Good Frame Count:", ' ', goodFramesCount, "/", goodFramesThreshold, /*#__PURE__*/React.createElement("br", null), "Document Type: ", currentDetectedDocumentType, /*#__PURE__*/React.createElement("br", null), "Detection Score: ", currentDetectionScore, /*#__PURE__*/React.createElement("br", null), "Focus Score: ", currentFocusScore, /*#__PURE__*/React.createElement("br", null), "Best Frame Detection Score:", ' ', (_u = (_t = bestFrameDetails.current) === null || _t === void 0 ? void 0 : _t.detectionScore) !== null && _u !== void 0 ? _u : 0, /*#__PURE__*/React.createElement("br", null), "Best Frame Focus Score: ", (_w = (_v = bestFrameDetails.current) === null || _v === void 0 ? void 0 : _v.focusScore) !== null && _w !== void 0 ? _w : 0)), countdownRemaining > 0 && capturingId && ( /*#__PURE__*/React.createElement(CountdownContainer, {
22175
+ "$background": (_o = (_m = (_l = theme.guidanceMessages) === null || _l === void 0 ? void 0 : _l.negative) === null || _m === void 0 ? void 0 : _m.backgroundColor) !== null && _o !== void 0 ? _o : 'red',
22176
+ "$textColor": (_r = (_q = (_p = theme.guidanceMessages) === null || _p === void 0 ? void 0 : _p.negative) === null || _q === void 0 ? void 0 : _q.textColor) !== null && _r !== void 0 ? _r : 'white'
22177
+ }, guidanceText))), debugMode && ( /*#__PURE__*/React.createElement(DebugStatsPane, null, camera ? ( /*#__PURE__*/React.createElement(React.Fragment, null, "\u2705 Camera: ", camera.label, " (", camera.width, "x", camera.height, ")")) : '❌ Camera not ready', /*#__PURE__*/React.createElement("br", null), isRecordingVideo ? '✅ Recording' : '❌ Not recording', /*#__PURE__*/React.createElement("br", null), goodFramesThresholdMet ? '✅' : '❌', " Good Frame Count:", ' ', goodFramesCount, "/", goodFramesThreshold, /*#__PURE__*/React.createElement("br", null), "Document Type: ", currentDetectedDocumentType, /*#__PURE__*/React.createElement("br", null), "Detection Score: ", currentDetectionScore, /*#__PURE__*/React.createElement("br", null), "Focus Score: ", currentFocusScore, /*#__PURE__*/React.createElement("br", null), "Best Frame Detection Score:", ' ', (_t = (_s = bestFrameDetails.current) === null || _s === void 0 ? void 0 : _s.detectionScore) !== null && _t !== void 0 ? _t : 0, /*#__PURE__*/React.createElement("br", null), "Best Frame Focus Score: ", (_v = (_u = bestFrameDetails.current) === null || _u === void 0 ? void 0 : _u.focusScore) !== null && _v !== void 0 ? _v : 0)), countdownRemaining > 0 && capturingId && ( /*#__PURE__*/React.createElement(CountdownContainer, {
22080
22178
  className: classNames.countdownContainer
22081
22179
  }, /*#__PURE__*/React.createElement(Countdown, {
22082
22180
  className: classNames.countdown
@@ -22085,7 +22183,7 @@
22085
22183
  }, /*#__PURE__*/React.createElement(CaptureButton, {
22086
22184
  finished: true,
22087
22185
  onClick: function onClick() {
22088
- setCountdownStartedAt(new Date());
22186
+ return setCountdownStartedAt(new Date());
22089
22187
  },
22090
22188
  disabled: !!countdownStartedAt || frameLock.current,
22091
22189
  className: classNames.captureBtn
@@ -22373,16 +22471,14 @@
22373
22471
  className: "flex"
22374
22472
  }, /*#__PURE__*/React.createElement(Spinner$1, null));
22375
22473
  }
22376
- return /*#__PURE__*/React.createElement(CameraProvider, {
22377
- key: "".concat(isCapturingId ? 'id' : 'selfie', "-camera-").concat(attempt),
22378
- preferContinuityCamera: isCapturingId,
22474
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22475
+ preferIphoneContinuityCamera: isCapturingId,
22379
22476
  preferFrontFacingCamera: !isCapturingId,
22380
22477
  requireMicrophoneAccess: !isCapturingId && !!readTextPrompt,
22381
22478
  maxVideoWidth: isCapturingId ? 1920 : 1280,
22382
22479
  maxFps: isCapturingId ? 60 : 30,
22383
22480
  onCameraAccessDenied: onCameraAccessDenied,
22384
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22385
- debugMode: debugMode
22481
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22386
22482
  }, /*#__PURE__*/React.createElement(IdCaptureModelsProvider, {
22387
22483
  autoStart: false,
22388
22484
  documentDetectionModelUrl: (_g = (_f = idCaptureProps.assets) === null || _f === void 0 ? void 0 : _f.documentDetectionModelUrl) !== null && _g !== void 0 ? _g : '',
@@ -22393,7 +22489,7 @@
22393
22489
  autoStart: false,
22394
22490
  onModelError: faceLivenessProps === null || faceLivenessProps === void 0 ? void 0 : faceLivenessProps.onModelError,
22395
22491
  modelLoadTimeoutMs: faceLivenessProps === null || faceLivenessProps === void 0 ? void 0 : faceLivenessProps.modelLoadTimeoutMs,
22396
- requireVerticalFaceCentering: captureState === 'CHECKING_LIVENESS'
22492
+ requireVerticalFaceCentering: false
22397
22493
  }, /*#__PURE__*/React.createElement(PageContainer, {
22398
22494
  className: "flex ".concat((_k = classNames.container) !== null && _k !== void 0 ? _k : '')
22399
22495
  }, ['CHECKING_LIVENESS', 'CAPTURING_VIDEO'].includes(captureState) && /*#__PURE__*/React.createElement(CameraVideoTag, {
@@ -22508,17 +22604,15 @@
22508
22604
  _o = _a.captureSignatureVideo,
22509
22605
  captureSignatureVideo = _o === void 0 ? false : _o,
22510
22606
  onCameraAccessDenied = _a.onCameraAccessDenied,
22511
- onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied,
22512
- _p = _a.debugMode,
22513
- debugMode = _p === void 0 ? false : _p;
22514
- var _q = React.useContext(SubmissionContext),
22515
- submit = _q.submit,
22516
- submissionStatus = _q.submissionStatus,
22517
- setSignatureData = _q.setSignatureData,
22518
- setAdditionalDocuments = _q.setAdditionalDocuments;
22519
- var _r = React.useState(0),
22520
- checkIndex = _r[0],
22521
- setCheckIndex = _r[1];
22607
+ onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied;
22608
+ var _p = React.useContext(SubmissionContext),
22609
+ submit = _p.submit,
22610
+ submissionStatus = _p.submissionStatus,
22611
+ setSignatureData = _p.setSignatureData,
22612
+ setAdditionalDocuments = _p.setAdditionalDocuments;
22613
+ var _q = React.useState(0),
22614
+ checkIndex = _q[0],
22615
+ setCheckIndex = _q[1];
22522
22616
  var checks = React.useMemo(function () {
22523
22617
  var _a, _b;
22524
22618
  var checks = __spreadArray([], userChecks, true);
@@ -22596,16 +22690,6 @@
22596
22690
  return i + 1;
22597
22691
  });
22598
22692
  }, [onVideoSignatureCompleteProp]);
22599
- var _s = React.useState(0),
22600
- videoSignatureAttempts = _s[0],
22601
- setVideoSignatureAttempts = _s[1];
22602
- var onVideoSignatureRetryProp = videoSignatureCaptureProps.onRetryClicked;
22603
- var onVideoSignatureRetry = React.useCallback(function () {
22604
- onVideoSignatureRetryProp === null || onVideoSignatureRetryProp === void 0 ? void 0 : onVideoSignatureRetryProp();
22605
- setVideoSignatureAttempts(function (n) {
22606
- return n + 1;
22607
- });
22608
- }, [onVideoSignatureRetryProp]);
22609
22693
  var onAdditionalDocumentCaptureCompleteProp = additionalDocumentCaptureProps === null || additionalDocumentCaptureProps === void 0 ? void 0 : additionalDocumentCaptureProps.onComplete;
22610
22694
  var onAdditionalDocumentCaptureComplete = React.useCallback(function (uploadedDocuments) {
22611
22695
  setAdditionalDocuments(uploadedDocuments);
@@ -22634,11 +22718,9 @@
22634
22718
  }
22635
22719
  switch (checks[checkIndex]) {
22636
22720
  case 'IdCapture':
22637
- return /*#__PURE__*/React.createElement(CameraProvider, {
22638
- key: "IdCaptureCamera",
22721
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22639
22722
  onCameraAccessDenied: onCameraAccessDenied,
22640
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22641
- debugMode: debugMode
22723
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22642
22724
  }, /*#__PURE__*/React.createElement(IdCaptureModelsProvider, {
22643
22725
  autoStart: false,
22644
22726
  documentDetectionModelUrl: (_d = (_c = idCaptureProps.assets) === null || _c === void 0 ? void 0 : _c.documentDetectionModelUrl) !== null && _d !== void 0 ? _d : '',
@@ -22655,13 +22737,11 @@
22655
22737
  onMicrophoneAccessDenied: onMicrophoneAccessDenied
22656
22738
  }));
22657
22739
  case 'FaceLiveness':
22658
- return /*#__PURE__*/React.createElement(CameraProvider, {
22659
- key: "FaceLivenessCamera",
22740
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22660
22741
  preferFrontFacingCamera: true,
22661
- preferContinuityCamera: false,
22742
+ preferIphoneContinuityCamera: false,
22662
22743
  onCameraAccessDenied: onCameraAccessDenied,
22663
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22664
- debugMode: debugMode
22744
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22665
22745
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
22666
22746
  autoStart: false,
22667
22747
  onModelError: faceLivenessProps.onModelError,
@@ -22674,15 +22754,13 @@
22674
22754
  onAccept: onSignatureCaptureSuccess
22675
22755
  }));
22676
22756
  case 'VideoSignatureCapture':
22677
- return /*#__PURE__*/React.createElement(CameraProvider, {
22678
- key: "SignatureKycCamera-".concat(videoSignatureAttempts),
22679
- preferContinuityCamera: false,
22757
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22758
+ preferIphoneContinuityCamera: false,
22680
22759
  preferFrontFacingCamera: true,
22681
22760
  maxVideoWidth: 1280,
22682
22761
  maxFps: 30,
22683
22762
  onCameraAccessDenied: onCameraAccessDenied,
22684
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22685
- debugMode: debugMode
22763
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22686
22764
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
22687
22765
  autoStart: false,
22688
22766
  throttleMs: 250,
@@ -22690,8 +22768,7 @@
22690
22768
  modelLoadTimeoutMs: videoSignatureCaptureProps.modelLoadTimeoutMs,
22691
22769
  requireVerticalFaceCentering: false
22692
22770
  }, /*#__PURE__*/React.createElement(VideoSignatureWizard, _assign({}, videoSignatureCaptureProps, {
22693
- onComplete: onVideoSignatureComplete,
22694
- onRetryClicked: onVideoSignatureRetry
22771
+ onComplete: onVideoSignatureComplete
22695
22772
  }))));
22696
22773
  case 'AdditionalDocumentCapture':
22697
22774
  return /*#__PURE__*/React.createElement(AdditionalDocumentCaptureWizard, _assign({}, additionalDocumentCaptureProps, {
@@ -23142,8 +23219,7 @@
23142
23219
  videoSignatureCaptureProps: videoSignatureCaptureProps,
23143
23220
  captureSignature: captureSignature,
23144
23221
  captureSignatureVideo: captureSignatureVideo,
23145
- onCameraAccessDenied: onCameraAccessDenied,
23146
- debugMode: debugMode
23222
+ onCameraAccessDenied: onCameraAccessDenied
23147
23223
  }))));
23148
23224
  };
23149
23225
 
@@ -23249,8 +23325,7 @@
23249
23325
  return ['FaceLiveness'];
23250
23326
  }, []),
23251
23327
  faceLivenessProps: faceLivenessProps,
23252
- onCameraAccessDenied: onCameraAccessDenied,
23253
- debugMode: debugMode
23328
+ onCameraAccessDenied: onCameraAccessDenied
23254
23329
  }))));
23255
23330
  };
23256
23331
 
@@ -23483,8 +23558,7 @@
23483
23558
  additionalDocumentCaptureProps: additionalDocumentCaptureProps,
23484
23559
  captureSignature: captureSignature,
23485
23560
  captureSignatureVideo: captureSignatureVideo,
23486
- onCameraAccessDenied: onCameraAccessDenied,
23487
- debugMode: debugMode
23561
+ onCameraAccessDenied: onCameraAccessDenied
23488
23562
  }))));
23489
23563
  };
23490
23564
 
@@ -23739,8 +23813,7 @@
23739
23813
  videoSignatureCaptureProps: videoSignatureCaptureProps,
23740
23814
  captureSignature: captureSignature,
23741
23815
  captureSignatureVideo: captureSignatureVideo,
23742
- onCameraAccessDenied: onCameraAccessDenied,
23743
- debugMode: debugMode
23816
+ onCameraAccessDenied: onCameraAccessDenied
23744
23817
  }))));
23745
23818
  };
23746
23819
 
@@ -24072,7 +24145,7 @@
24072
24145
  var _l = React.useState('LOADING'),
24073
24146
  captureState = _l[0],
24074
24147
  setCaptureState = _l[1];
24075
- var _m = React.useContext(CameraStateContext),
24148
+ var _m = useCameraStore(),
24076
24149
  cameraAccessDenied = _m.cameraAccessDenied,
24077
24150
  releaseCameraAccess = _m.releaseCameraAccess;
24078
24151
  var _o = React.useContext(SelfieGuidanceModelsContext),
@@ -24278,10 +24351,9 @@
24278
24351
  onSubmit: onSubmit,
24279
24352
  geolocationEnabled: geolocationEnabled,
24280
24353
  geolocationRequired: geolocationRequired
24281
- }, /*#__PURE__*/React.createElement(CameraProvider, {
24354
+ }, /*#__PURE__*/React.createElement(CameraStoreProvider, {
24282
24355
  preferFrontFacingCamera: true,
24283
- onCameraAccessDenied: onCameraAccessDenied,
24284
- debugMode: debugMode
24356
+ onCameraAccessDenied: onCameraAccessDenied
24285
24357
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
24286
24358
  autoStart: false,
24287
24359
  onModelError: onModelError,
@@ -24630,7 +24702,7 @@
24630
24702
  var _l = React.useState('LOADING'),
24631
24703
  captureState = _l[0],
24632
24704
  setCaptureState = _l[1];
24633
- var _m = React.useContext(CameraStateContext),
24705
+ var _m = useCameraStore(),
24634
24706
  cameraAccessDenied = _m.cameraAccessDenied,
24635
24707
  releaseCameraAccess = _m.releaseCameraAccess;
24636
24708
  var _o = React.useContext(SelfieGuidanceModelsContext),
@@ -24834,10 +24906,9 @@
24834
24906
  onSubmit: onSubmit,
24835
24907
  geolocationEnabled: geolocationEnabled,
24836
24908
  geolocationRequired: geolocationRequired
24837
- }, /*#__PURE__*/React.createElement(CameraProvider, {
24909
+ }, /*#__PURE__*/React.createElement(CameraStoreProvider, {
24838
24910
  preferFrontFacingCamera: true,
24839
- onCameraAccessDenied: onCameraAccessDenied,
24840
- debugMode: debugMode
24911
+ onCameraAccessDenied: onCameraAccessDenied
24841
24912
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
24842
24913
  autoStart: false,
24843
24914
  modelLoadTimeoutMs: modelLoadTimeoutMs,
@@ -25164,8 +25235,7 @@
25164
25235
  captureSignature: captureSignature,
25165
25236
  captureSignatureVideo: captureSignatureVideo,
25166
25237
  onCameraAccessDenied: onCameraAccessDenied,
25167
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
25168
- debugMode: debugMode
25238
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
25169
25239
  }))));
25170
25240
  };
25171
25241
 
@@ -25322,8 +25392,7 @@
25322
25392
  videoSignatureCaptureProps: videoSignatureCaptureProps,
25323
25393
  captureSignature: captureSignature,
25324
25394
  captureSignatureVideo: captureSignatureVideo,
25325
- onCameraAccessDenied: onCameraAccessDenied,
25326
- debugMode: debugMode
25395
+ onCameraAccessDenied: onCameraAccessDenied
25327
25396
  }))));
25328
25397
  };
25329
25398
 
@@ -25381,11 +25450,10 @@
25381
25450
  onDocumentUploadFailed: onDocumentUploadFailed,
25382
25451
  geolocationEnabled: geolocationEnabled,
25383
25452
  geolocationRequired: geolocationRequired
25384
- }, /*#__PURE__*/React.createElement(CameraProvider, {
25453
+ }, /*#__PURE__*/React.createElement(CameraStoreProvider, {
25385
25454
  requestAccessAutomatically: false,
25386
- preferContinuityCamera: true,
25387
- onCameraAccessDenied: onCameraAccessDenied,
25388
- debugMode: debugMode
25455
+ preferIphoneContinuityCamera: true,
25456
+ onCameraAccessDenied: onCameraAccessDenied
25389
25457
  }, /*#__PURE__*/React.createElement(DocumentCaptureWizard, {
25390
25458
  onSuccess: onComplete,
25391
25459
  onExitCapture: onExitCapture,