idmission-web-sdk 2.2.35 → 2.2.37

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 +1001 -1083
  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 +1001 -1083
  56. package/dist/sdk2.esm.js.map +1 -1
  57. package/dist/sdk2.umd.development.js +1121 -1086
  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.35';
214
+ var webSdkVersion = '2.2.37';
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],
@@ -3020,624 +3020,22 @@
3020
3020
  };
3021
3021
  }
3022
3022
  resizeObserverRef.current.instance.observe(element, {
3023
- box: opts.box
3024
- });
3025
- return function () {
3026
- if (resizeObserverRef.current) {
3027
- resizeObserverRef.current.instance.unobserve(element);
3028
- }
3029
- };
3030
- }, [opts.box, round]), opts.ref);
3031
- return React.useMemo(function () {
3032
- return {
3033
- ref: refCallback,
3034
- width: size.width,
3035
- height: size.height
3036
- };
3037
- }, [refCallback, size.width, size.height]);
3038
- }
3039
-
3040
- function getFrameDimensions(frame) {
3041
- var frameWidth = frame.width,
3042
- frameHeight = frame.height;
3043
- if (frame instanceof HTMLImageElement) {
3044
- frameWidth = frame.naturalWidth;
3045
- frameHeight = frame.naturalHeight;
3046
- }
3047
- if (frame instanceof HTMLVideoElement) {
3048
- frameWidth = frame.videoWidth;
3049
- frameHeight = frame.videoHeight;
3050
- }
3051
- return [frameWidth, frameHeight];
3052
- }
3053
-
3054
- var InvisibleCanvas = styled.canvas(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n display: none;\n"], ["\n display: none;\n"])));
3055
- function drawToCanvas(canvas, frame, width, height) {
3056
- if (!canvas) return;
3057
- var ctx = canvas.getContext('2d');
3058
- if (!ctx) return;
3059
- if (!width || !height) {
3060
- var _a = getFrameDimensions(frame),
3061
- frameWidth = _a[0],
3062
- frameHeight = _a[1];
3063
- width || (width = frameWidth);
3064
- height || (height = frameHeight);
3065
- }
3066
- canvas.width = width;
3067
- canvas.height = height;
3068
- ctx.drawImage(frame, 0, 0, width, height);
3069
- }
3070
- function clearCanvas(canvas) {
3071
- var _a;
3072
- (_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);
3073
- }
3074
- var templateObject_1$G;
3075
-
3076
- function listAvailableCameras(facingMode_1) {
3077
- return __awaiter(this, arguments, void 0, function (facingMode, requestMicAccess) {
3078
- var cameraEnumerationStream, videoDevices;
3079
- if (requestMicAccess === void 0) {
3080
- requestMicAccess = false;
3081
- }
3082
- return __generator(this, function (_a) {
3083
- switch (_a.label) {
3084
- case 0:
3085
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
3086
- video: {
3087
- facingMode: {
3088
- exact: facingMode
3089
- }
3090
- },
3091
- audio: requestMicAccess
3092
- })
3093
- // This lists all available cameras attached to the user's device.
3094
- ];
3095
- case 1:
3096
- cameraEnumerationStream = _a.sent();
3097
- return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];
3098
- case 2:
3099
- videoDevices = _a.sent().filter(function (_a) {
3100
- var kind = _a.kind;
3101
- return kind === 'videoinput';
3102
- });
3103
- // Release the access to the user's camera that we obtained for enumeration purposes.
3104
- cameraEnumerationStream.getVideoTracks().forEach(function (track) {
3105
- track.enabled = false;
3106
- track.stop();
3107
- });
3108
- cameraEnumerationStream = null;
3109
- return [2 /*return*/, videoDevices];
3110
- }
3111
- });
3112
- });
3113
- }
3114
- 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) {
3115
- return s.toLocaleLowerCase().split(' ').join('');
3116
- });
3117
- 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) {
3118
- return s.toLocaleLowerCase().split(' ').join('');
3119
- });
3120
- 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) {
3121
- return s.toLocaleLowerCase().split(' ').join('');
3122
- });
3123
- var labelMatches = function labelMatches(labelOrDevice, labelSetOrLabel) {
3124
- var label = labelOrDevice instanceof MediaDeviceInfo ? getDeviceLabel(labelOrDevice) : labelOrDevice;
3125
- var labelSet = typeof labelSetOrLabel === 'string' ? [labelSetOrLabel] : labelSetOrLabel;
3126
- return labelSet.some(function (l) {
3127
- return label.includes(l);
3128
- });
3129
- };
3130
- var getDeviceLabel = function getDeviceLabel(deviceInfo) {
3131
- return deviceInfo.label.toLocaleLowerCase().split(' ').join('');
3132
- };
3133
- var currentCamera;
3134
- var currentAudioStream;
3135
- function obtainCameraAccess(stream, deviceLabel, video) {
3136
- releaseCameraAccess();
3137
- log('obtaining camera access...');
3138
- var _a = stream.getVideoTracks()[0].getSettings(),
3139
- width = _a.width,
3140
- height = _a.height;
3141
- var label = deviceLabel.toLocaleLowerCase().split(' ').join('');
3142
- var isRearFacing = labelMatches(label, __spreadArray(__spreadArray(__spreadArray([], rearLabels, true), backUltraWideLabels, true), ['iphone'], false));
3143
- var release = function release() {
3144
- stream.getTracks().forEach(function (track) {
3145
- track.enabled = false;
3146
- track.stop();
3147
- });
3148
- if (video) {
3149
- video.pause();
3150
- video.srcObject = null;
3151
- video.src = '';
3152
- }
3153
- };
3154
- width || (width = 0);
3155
- height || (height = 0);
3156
- currentCamera = {
3157
- label: deviceLabel,
3158
- stream: stream,
3159
- width: width,
3160
- height: height,
3161
- isRearFacing: isRearFacing,
3162
- release: release
3163
- };
3164
- if (video) video.srcObject = stream;
3165
- return currentCamera;
3166
- }
3167
- function releaseCameraAccess() {
3168
- if (!currentCamera) return;
3169
- log('releasing camera access...');
3170
- currentCamera.release();
3171
- currentCamera = undefined;
3172
- }
3173
- function releaseMicrophoneAccess() {
3174
- var _a;
3175
- if (!currentAudioStream) return;
3176
- log('releasing microphone access...');
3177
- (_a = currentAudioStream.stop) === null || _a === void 0 ? void 0 : _a.call(currentAudioStream);
3178
- currentAudioStream.getAudioTracks().forEach(function (t) {
3179
- var _a;
3180
- (_a = t.stop) === null || _a === void 0 ? void 0 : _a.call(t);
3181
- });
3182
- currentAudioStream = undefined;
3183
- }
3184
- function usePreferredCaptureDevice(_a) {
3185
- var _b = _a === void 0 ? {} : _a,
3186
- _c = _b.requestAccessAutomatically,
3187
- requestAccessAutomatically = _c === void 0 ? true : _c,
3188
- _d = _b.preferFrontFacingCamera,
3189
- preferFrontFacingCamera = _d === void 0 ? false : _d,
3190
- _e = _b.preferContinuityCamera,
3191
- preferContinuityCamera = _e === void 0 ? true : _e,
3192
- _f = _b.requireMicrophoneAccess,
3193
- requireMicrophoneAccess = _f === void 0 ? false : _f,
3194
- _g = _b.maxVideoWidth,
3195
- maxVideoWidth = _g === void 0 ? 1920 : _g,
3196
- maxFps = _b.maxFps,
3197
- _h = _b.debugMode,
3198
- debugMode = _h === void 0 ? false : _h;
3199
- var videoRef = React.useRef(null);
3200
- var videoRefStack = React.useRef([]);
3201
- var cameraRef = React.useRef(null);
3202
- var _j = React.useState(false),
3203
- cameraReady = _j[0],
3204
- setCameraReady = _j[1];
3205
- var _k = React.useState(false),
3206
- microphoneReady = _k[0],
3207
- setMicrophoneReady = _k[1];
3208
- var _l = React.useState(null),
3209
- videoDevice = _l[0],
3210
- setVideoDevice = _l[1];
3211
- var _m = React.useState(null),
3212
- audioStream = _m[0],
3213
- setAudioStream = _m[1];
3214
- var _o = React.useState(false),
3215
- videoLoaded = _o[0],
3216
- setVideoLoaded = _o[1];
3217
- var _p = React.useState(false),
3218
- iphoneContinuityCameraAvailable = _p[0],
3219
- setIphoneContinuityCameraAvailable = _p[1];
3220
- var _q = React.useState(preferContinuityCamera),
3221
- iphoneContinuityCameraAllowed = _q[0],
3222
- setIphoneContinuityCameraAllowed = _q[1];
3223
- var _r = React.useState(false),
3224
- iphoneContinuityCameraDenied = _r[0],
3225
- setIphoneContinuityCameraDenied = _r[1];
3226
- var _s = React.useState(false),
3227
- cameraAccessDenied = _s[0],
3228
- setCameraAccessDenied = _s[1];
3229
- var _t = React.useState(false),
3230
- microphoneAccessDenied = _t[0],
3231
- setMicrophoneAccessDenied = _t[1];
3232
- var videoRefElement = videoRef.current;
3233
- React.useEffect(function pushVideoRefToStackWhenChanged() {
3234
- // proceed if the video element being mounted is not already at the top of the videoRefStack.
3235
- var topOfStack = videoRefStack.current.slice(-1)[0];
3236
- if (videoRefElement && videoRefElement !== topOfStack) {
3237
- log('adding video to stack', videoRefElement);
3238
- videoRefStack.current.push(videoRefElement);
3239
- }
3240
- }, [videoRefElement]);
3241
- var onVideoUnmounted = React.useCallback(function (videoElement) {
3242
- log('removing video from stack', videoElement);
3243
- videoRefStack.current = videoRefStack.current.filter(function (v) {
3244
- return v !== videoElement;
3245
- });
3246
- videoRef.current = videoRefStack.current.slice(-1)[0]; // top of stack.
3247
- log('new videoRef is', videoRef.current);
3248
- }, []);
3249
- React.useEffect(function resetCameraOnContinuityPreferenceChanged() {
3250
- if (debugMode) {
3251
- log('iphone continuity camera allowed changed', iphoneContinuityCameraAllowed);
3252
- }
3253
- releaseCameraAccess();
3254
- cameraRef.current = null;
3255
- setVideoLoaded(false);
3256
- }, [debugMode, iphoneContinuityCameraAllowed]);
3257
- // NOTE: the bound callback function here is called requestCameraAccess, because
3258
- // it initiates the useEffect chain that results in camera access being requested
3259
- // (requestCameraAccessAutomatically -> chooseFromAvailableCameras -> accessChosenCamera).
3260
- //
3261
- // We chose to title the inner function "chooseFromAvailableCameras" because
3262
- // that's all it literally does -- the available cameras are enumerated, and then
3263
- // the result is parsed to decide which one we like best, which is then passed to
3264
- // setVideoDevice, which causes accessChosenCamera to trigger.
3265
- //
3266
- // I am not a huge fan of getUserMedia's design -- you need to call it twice in order
3267
- // to select the "best" camera for your application's purposes.
3268
- var requestCameraAccess = React.useCallback(function chooseFromAvailableCameras() {
3269
- return __awaiter(this, void 0, void 0, function () {
3270
- var availableCameras, selectedCamera, platform_1, iphoneContinuityCamera, e_1;
3271
- var _a, _b;
3272
- return __generator(this, function (_c) {
3273
- switch (_c.label) {
3274
- case 0:
3275
- setCameraReady(false);
3276
- setCameraAccessDenied(false);
3277
- _c.label = 1;
3278
- case 1:
3279
- _c.trys.push([1, 3,, 4]);
3280
- return [4 /*yield*/, listAvailableCameras()];
3281
- case 2:
3282
- availableCameras = _c.sent();
3283
- selectedCamera = void 0;
3284
- if (debugMode) {
3285
- log('availableCameras', availableCameras);
3286
- }
3287
- platform_1 = getPlatform();
3288
- if (debugMode) {
3289
- log('platformDetails', platform_1);
3290
- }
3291
- if (!iphoneContinuityCameraDenied && (!(platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) || platform_1.os.family === 'OS X')) {
3292
- iphoneContinuityCamera = availableCameras.find(function (deviceInfo) {
3293
- return labelMatches(deviceInfo, 'iphone');
3294
- });
3295
- setIphoneContinuityCameraAvailable(!!iphoneContinuityCamera);
3296
- if (iphoneContinuityCamera && iphoneContinuityCameraAllowed) {
3297
- selectedCamera = iphoneContinuityCamera;
3298
- }
3299
- } 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) {
3300
- return c.label.startsWith('camera2 ');
3301
- })) {
3302
- availableCameras = availableCameras.sort(function (a, b) {
3303
- return a.label.toLowerCase().localeCompare(b.label.toLowerCase());
3304
- });
3305
- if (debugMode) {
3306
- log('cameras have been sorted', availableCameras);
3307
- }
3308
- }
3309
- if (preferFrontFacingCamera) {
3310
- selectedCamera = availableCameras.find(function (deviceInfo) {
3311
- return labelMatches(deviceInfo, frontLabels);
3312
- });
3313
- }
3314
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3315
- return labelMatches(deviceInfo, 'backtriplecamera');
3316
- }));
3317
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3318
- return labelMatches(deviceInfo, 'backdualcamera');
3319
- }));
3320
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3321
- return labelMatches(deviceInfo, rearLabels) && !labelMatches(deviceInfo, backUltraWideLabels);
3322
- }));
3323
- selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
3324
- return labelMatches(deviceInfo, rearLabels);
3325
- }));
3326
- // on iOS, the front facing camera always is at the first position in the list, so we skip it if all else fails.
3327
- 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) {
3328
- selectedCamera || (selectedCamera = availableCameras[1]);
3329
- }
3330
- selectedCamera || (selectedCamera = availableCameras[0]);
3331
- if (debugMode) log('selectedCamera', selectedCamera);
3332
- setVideoDevice(selectedCamera);
3333
- return [3 /*break*/, 4];
3334
- case 3:
3335
- e_1 = _c.sent();
3336
- if (e_1.name === 'NotAllowedError') {
3337
- error('camera access has been blocked by the user', e_1);
3338
- setCameraAccessDenied(true);
3339
- } else {
3340
- error('camera access encountered some other error', e_1);
3341
- throw e_1;
3342
- }
3343
- return [3 /*break*/, 4];
3344
- case 4:
3345
- return [2 /*return*/];
3346
- }
3347
- });
3348
- });
3349
- }, [debugMode, iphoneContinuityCameraAllowed, iphoneContinuityCameraDenied, preferFrontFacingCamera]);
3350
- React.useEffect(function requestCameraAccessAutomatically() {
3351
- if (requestAccessAutomatically && !cameraAccessDenied) {
3352
- requestCameraAccess()["catch"](error);
3353
- }
3354
- }, [cameraAccessDenied, requestAccessAutomatically, requestCameraAccess]);
3355
- React.useEffect(function accessChosenCamera() {
3356
- var _this = this;
3357
- var _a;
3358
- if (!videoDevice) return;
3359
- var cleanup = function cleanup() {
3360
- releaseCameraAccess();
3361
- cameraRef.current = null;
3362
- setVideoLoaded(false);
3363
- };
3364
- if (!((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia)) return cleanup;
3365
- (function () {
3366
- return __awaiter(_this, void 0, void 0, function () {
3367
- var constraints, stream, e_2, handleStreamEnded;
3368
- var _a;
3369
- return __generator(this, function (_b) {
3370
- switch (_b.label) {
3371
- case 0:
3372
- constraints = {
3373
- audio: false,
3374
- video: {
3375
- deviceId: {
3376
- exact: videoDevice.deviceId
3377
- },
3378
- width: {
3379
- ideal: maxVideoWidth
3380
- },
3381
- aspectRatio: 1.777777778,
3382
- frameRate: {}
3383
- }
3384
- };
3385
- if (maxFps) {
3386
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3387
- // @ts-ignore
3388
- constraints.video.frameRate = {
3389
- max: maxFps
3390
- };
3391
- }
3392
- stream = null;
3393
- _b.label = 1;
3394
- case 1:
3395
- _b.trys.push([1, 3,, 4]);
3396
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];
3397
- case 2:
3398
- stream = _b.sent();
3399
- return [3 /*break*/, 4];
3400
- case 3:
3401
- e_2 = _b.sent();
3402
- if (e_2.name === 'NotAllowedError') {
3403
- if (iphoneContinuityCameraAllowed) {
3404
- setIphoneContinuityCameraAvailable(false);
3405
- setIphoneContinuityCameraDenied(true);
3406
- } else {
3407
- setCameraAccessDenied(true);
3408
- }
3409
- return [2 /*return*/];
3410
- }
3411
- return [3 /*break*/, 4];
3412
- case 4:
3413
- if (!!stream) return [3 /*break*/, 8];
3414
- _b.label = 5;
3415
- case 5:
3416
- _b.trys.push([5, 7,, 8]);
3417
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
3418
- audio: false,
3419
- video: true
3420
- })];
3421
- case 6:
3422
- stream = _b.sent();
3423
- log('opened stream with no width and height constraints');
3424
- return [3 /*break*/, 8];
3425
- case 7:
3426
- _b.sent();
3427
- log('cannot open stream at all');
3428
- return [3 /*break*/, 8];
3429
- case 8:
3430
- if (!stream) {
3431
- throw new Error('failed to open camera');
3432
- }
3433
- handleStreamEnded = function handleStreamEnded() {
3434
- if (iphoneContinuityCameraAvailable && iphoneContinuityCameraAllowed) {
3435
- log('someone unplugged the continuity camera');
3436
- releaseCameraAccess();
3437
- cameraRef.current = null;
3438
- setIphoneContinuityCameraAvailable(false);
3439
- setIphoneContinuityCameraDenied(true);
3440
- setVideoDevice(null);
3441
- } else {
3442
- log('someone unplugged the webcam');
3443
- releaseCameraAccess();
3444
- cameraRef.current = null;
3445
- setVideoLoaded(false);
3446
- setCameraAccessDenied(true);
3447
- }
3448
- };
3449
- (_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('ended', handleStreamEnded);
3450
- stream.getVideoTracks().forEach(function (track) {
3451
- track.onended = handleStreamEnded;
3452
- });
3453
- cameraRef.current = obtainCameraAccess(stream, videoDevice.label, videoRef.current);
3454
- return [2 /*return*/];
3455
- }
3456
- });
3457
- });
3458
- })();
3459
- return cleanup;
3460
- }, [iphoneContinuityCameraAllowed, iphoneContinuityCameraAvailable, maxFps, maxVideoWidth, videoDevice]);
3461
- React.useEffect(function triggerCameraReady() {
3462
- // TODO: in the future let's evaluate whether we can simplify this to just
3463
- // setCameraReady(!!videoDevice && videoLoaded) -- we are wondering whether
3464
- // we somehow depend on this being set twice.
3465
- setCameraReady(false);
3466
- if (videoDevice && videoLoaded) {
3467
- setCameraReady(videoDevice && videoLoaded);
3468
- }
3469
- }, [videoLoaded, videoDevice]);
3470
- var requestMicrophoneAccess = React.useCallback(function _requestMicrophoneAccess() {
3471
- return __awaiter(this, void 0, void 0, function () {
3472
- var stream;
3473
- return __generator(this, function (_a) {
3474
- switch (_a.label) {
3475
- case 0:
3476
- setMicrophoneReady(false);
3477
- setMicrophoneAccessDenied(false);
3478
- _a.label = 1;
3479
- case 1:
3480
- _a.trys.push([1, 3,, 4]);
3481
- return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
3482
- audio: true,
3483
- video: false
3484
- })];
3485
- case 2:
3486
- stream = _a.sent();
3487
- currentAudioStream = stream;
3488
- setAudioStream(stream);
3489
- setMicrophoneReady(true);
3490
- stream.getAudioTracks().forEach(function (track) {
3491
- track.onended = function () {
3492
- setMicrophoneAccessDenied(true);
3493
- };
3494
- });
3495
- return [3 /*break*/, 4];
3496
- case 3:
3497
- _a.sent();
3498
- setMicrophoneAccessDenied(true);
3499
- return [3 /*break*/, 4];
3500
- case 4:
3501
- return [2 /*return*/];
3502
- }
3503
- });
3504
- });
3505
- }, []);
3506
- React.useEffect(function requestMicrophoneAccessIfNeeded() {
3507
- if (!requireMicrophoneAccess || microphoneAccessDenied) return;
3508
- requestMicrophoneAccess()["catch"](error);
3509
- return function () {
3510
- releaseMicrophoneAccess();
3511
- setAudioStream(null);
3512
- setMicrophoneReady(false);
3513
- };
3514
- }, [microphoneAccessDenied, requestMicrophoneAccess, requireMicrophoneAccess]);
3515
- var takePhoto = React.useCallback(function _takePhoto() {
3516
- return __awaiter(this, void 0, void 0, function () {
3517
- var canvas;
3518
- return __generator(this, function (_a) {
3519
- switch (_a.label) {
3520
- case 0:
3521
- if (!cameraRef.current) return [2 /*return*/, null];
3522
- if (!(typeof ImageCapture !== 'undefined')) return [3 /*break*/, 2];
3523
- return [4 /*yield*/, new ImageCapture(cameraRef.current.stream.getTracks()[0]).takePhoto()];
3524
- case 1:
3525
- return [2 /*return*/, _a.sent()];
3526
- case 2:
3527
- if (!videoRef.current) return [2 /*return*/, null];
3528
- canvas = document.createElement('canvas');
3529
- drawToCanvas(canvas, videoRef.current);
3530
- return [2 /*return*/, new Promise(function (resolve) {
3531
- return canvas.toBlob(resolve);
3532
- })];
3533
- }
3534
- });
3535
- });
3536
- }, []);
3537
- return React.useMemo(function () {
3538
- return {
3539
- videoRef: videoRef,
3540
- videoDevice: videoDevice,
3541
- videoLoaded: videoLoaded,
3542
- setVideoLoaded: setVideoLoaded,
3543
- onVideoUnmounted: onVideoUnmounted,
3544
- cameraRef: cameraRef,
3545
- cameraReady: cameraReady,
3546
- cameraAccessDenied: cameraAccessDenied,
3547
- requestCameraAccess: requestCameraAccess,
3548
- releaseCameraAccess: releaseCameraAccess,
3549
- iphoneContinuityCameraAvailable: iphoneContinuityCameraAvailable,
3550
- iphoneContinuityCameraAllowed: iphoneContinuityCameraAllowed,
3551
- setIphoneContinuityCameraAllowed: setIphoneContinuityCameraAllowed,
3552
- takePhoto: takePhoto,
3553
- audioStream: audioStream,
3554
- microphoneReady: microphoneReady,
3555
- microphoneAccessDenied: microphoneAccessDenied,
3556
- requestMicrophoneAccess: requestMicrophoneAccess
3557
- };
3558
- }, [audioStream, cameraAccessDenied, cameraReady, iphoneContinuityCameraAllowed, iphoneContinuityCameraAvailable, microphoneAccessDenied, microphoneReady, onVideoUnmounted, requestCameraAccess, requestMicrophoneAccess, takePhoto, videoDevice, videoLoaded]);
3559
- }
3560
-
3561
- var CameraStateContext = /*#__PURE__*/React.createContext({
3562
- videoRef: {
3563
- current: null
3564
- },
3565
- videoDevice: null,
3566
- videoLoaded: false,
3567
- cameraRef: {
3568
- current: null
3569
- },
3570
- cameraReady: false,
3571
- cameraAccessDenied: false,
3572
- requestCameraAccess: function requestCameraAccess() {
3573
- return null;
3574
- },
3575
- releaseCameraAccess: function releaseCameraAccess() {
3576
- return null;
3577
- },
3578
- iphoneContinuityCameraAvailable: false,
3579
- iphoneContinuityCameraAllowed: true,
3580
- setIphoneContinuityCameraAllowed: function setIphoneContinuityCameraAllowed() {
3581
- return null;
3582
- },
3583
- takePhoto: function takePhoto() {
3584
- return Promise.resolve(null);
3585
- },
3586
- setVideoLoaded: function setVideoLoaded() {
3587
- return null;
3588
- },
3589
- onVideoUnmounted: function onVideoUnmounted() {
3590
- return null;
3591
- },
3592
- audioStream: null,
3593
- microphoneReady: false,
3594
- microphoneAccessDenied: false,
3595
- requestMicrophoneAccess: function requestMicrophoneAccess() {
3596
- return null;
3597
- }
3598
- });
3599
- var CameraProvider = function CameraProvider(_a) {
3600
- var children = _a.children,
3601
- _b = _a.requestAccessAutomatically,
3602
- requestAccessAutomatically = _b === void 0 ? true : _b,
3603
- _c = _a.preferFrontFacingCamera,
3604
- preferFrontFacingCamera = _c === void 0 ? false : _c,
3605
- _d = _a.preferContinuityCamera,
3606
- preferContinuityCamera = _d === void 0 ? true : _d,
3607
- _e = _a.requireMicrophoneAccess,
3608
- requireMicrophoneAccess = _e === void 0 ? false : _e,
3609
- _f = _a.maxVideoWidth,
3610
- maxVideoWidth = _f === void 0 ? 1920 : _f,
3611
- maxFps = _a.maxFps,
3612
- onCameraAccessDenied = _a.onCameraAccessDenied,
3613
- onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied,
3614
- _g = _a.debugMode,
3615
- debugMode = _g === void 0 ? false : _g;
3616
- var captureDevice = usePreferredCaptureDevice({
3617
- requestAccessAutomatically: requestAccessAutomatically,
3618
- preferFrontFacingCamera: preferFrontFacingCamera,
3619
- preferContinuityCamera: preferContinuityCamera,
3620
- requireMicrophoneAccess: requireMicrophoneAccess,
3621
- maxVideoWidth: maxVideoWidth,
3622
- maxFps: maxFps,
3623
- debugMode: debugMode
3624
- });
3625
- React.useEffect(function () {
3626
- if (captureDevice.cameraAccessDenied) onCameraAccessDenied === null || onCameraAccessDenied === void 0 ? void 0 : onCameraAccessDenied();
3627
- }, [captureDevice.cameraAccessDenied, onCameraAccessDenied]);
3628
- React.useEffect(function () {
3629
- if (captureDevice.microphoneAccessDenied) onMicrophoneAccessDenied === null || onMicrophoneAccessDenied === void 0 ? void 0 : onMicrophoneAccessDenied();
3630
- }, [captureDevice.microphoneAccessDenied, onMicrophoneAccessDenied]);
3631
- var releaseCameraAccess = captureDevice.releaseCameraAccess;
3632
- React.useEffect(function () {
3023
+ box: opts.box
3024
+ });
3633
3025
  return function () {
3634
- releaseCameraAccess();
3026
+ if (resizeObserverRef.current) {
3027
+ resizeObserverRef.current.instance.unobserve(element);
3028
+ }
3635
3029
  };
3636
- }, [releaseCameraAccess]);
3637
- return /*#__PURE__*/React.createElement(CameraStateContext.Provider, {
3638
- value: captureDevice
3639
- }, children);
3640
- };
3030
+ }, [opts.box, round]), opts.ref);
3031
+ return React.useMemo(function () {
3032
+ return {
3033
+ ref: refCallback,
3034
+ width: size.width,
3035
+ height: size.height
3036
+ };
3037
+ }, [refCallback, size.width, size.height]);
3038
+ }
3641
3039
 
3642
3040
  function _typeof$1(o) {
3643
3041
  "@babel/helpers - typeof";
@@ -4111,9 +3509,9 @@
4111
3509
  }
4112
3510
  var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regenerator);
4113
3511
 
4114
- 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."); }
4115
- 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; } }
4116
- 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; }
3512
+ 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."); }
3513
+ 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; } }
3514
+ 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; }
4117
3515
  var t = self;
4118
3516
  function e() {
4119
3517
  throw Error("Invalid UTF8");
@@ -6340,7 +5738,7 @@
6340
5738
  height: (_hn4 = hn(e, 4)) != null ? _hn4 : 0,
6341
5739
  angle: 0
6342
5740
  }), (_en2 = en(t, ws, 4)) != null && _en2.g().length) {
6343
- for (var _iterator = _createForOfIteratorHelperLoose$1(en(t, ws, 4).g()), _step; !(_step = _iterator()).done;) {
5741
+ for (var _iterator = _createForOfIteratorHelperLoose$2(en(t, ws, 4).g()), _step; !(_step = _iterator()).done;) {
6344
5742
  var _We, _We2, _We3, _un3;
6345
5743
  var _e16 = _step.value;
6346
5744
  i.keypoints.push({
@@ -6355,7 +5753,7 @@
6355
5753
  }
6356
5754
  function Qi(t) {
6357
5755
  var e = [];
6358
- for (var _iterator2 = _createForOfIteratorHelperLoose$1(rn(t, Fs, 1)), _step2; !(_step2 = _iterator2()).done;) {
5756
+ for (var _iterator2 = _createForOfIteratorHelperLoose$2(rn(t, Fs, 1)), _step2; !(_step2 = _iterator2()).done;) {
6359
5757
  var _fn2, _fn3, _fn4;
6360
5758
  var _n14 = _step2.value;
6361
5759
  e.push({
@@ -6368,7 +5766,7 @@
6368
5766
  }
6369
5767
  function to(t) {
6370
5768
  var e = [];
6371
- for (var _iterator3 = _createForOfIteratorHelperLoose$1(rn(t, Ts, 1)), _step3; !(_step3 = _iterator3()).done;) {
5769
+ for (var _iterator3 = _createForOfIteratorHelperLoose$2(rn(t, Ts, 1)), _step3; !(_step3 = _iterator3()).done;) {
6372
5770
  var _fn5, _fn6, _fn7;
6373
5771
  var _n15 = _step3.value;
6374
5772
  e.push({
@@ -6516,7 +5914,7 @@
6516
5914
  var r = new Uint32Array(e.length);
6517
5915
  for (var _n16 = 0; _n16 < e.length; _n16++) r[_n16] = t.i.stringToNewUTF8(e[_n16]);
6518
5916
  e = t.i._malloc(4 * r.length), t.i.HEAPU32.set(r, e >> 2), n(e);
6519
- for (var _iterator4 = _createForOfIteratorHelperLoose$1(r), _step4; !(_step4 = _iterator4()).done;) {
5917
+ for (var _iterator4 = _createForOfIteratorHelperLoose$2(r), _step4; !(_step4 = _iterator4()).done;) {
6520
5918
  var _e17 = _step4.value;
6521
5919
  t.i._free(_e17);
6522
5920
  }
@@ -6882,7 +6280,7 @@
6882
6280
  }
6883
6281
  t.push(n);
6884
6282
  };
6885
- for (var _iterator7 = _createForOfIteratorHelperLoose$1(this.g), _step7; !(_step7 = _iterator7()).done;) {
6283
+ for (var _iterator7 = _createForOfIteratorHelperLoose$2(this.g), _step7; !(_step7 = _iterator7()).done;) {
6886
6284
  _loop();
6887
6285
  }
6888
6286
  return new _Yo(t, this.ba(), this.K(), this.canvas, this.l, this.width, this.height);
@@ -7014,7 +6412,7 @@
7014
6412
  }
7015
6413
  t.push(n);
7016
6414
  };
7017
- for (var _iterator8 = _createForOfIteratorHelperLoose$1(this.g), _step8; !(_step8 = _iterator8()).done;) {
6415
+ for (var _iterator8 = _createForOfIteratorHelperLoose$2(this.g), _step8; !(_step8 = _iterator8()).done;) {
7018
6416
  _loop2();
7019
6417
  }
7020
6418
  return new _ia(t, this.K(), this.canvas, this.l, this.width, this.height);
@@ -7494,7 +6892,7 @@
7494
6892
  yn(e, si, this.h);
7495
6893
  var n = new qr();
7496
6894
  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) {
7497
- for (var _iterator9 = _createForOfIteratorHelperLoose$1(t), _step9; !(_step9 = _iterator9()).done;) {
6895
+ for (var _iterator9 = _createForOfIteratorHelperLoose$2(t), _step9; !(_step9 = _iterator9()).done;) {
7498
6896
  var _e23 = _step9.value;
7499
6897
  t = Es(_e23), _this43.j.detections.push(Zi(t));
7500
6898
  }
@@ -7588,7 +6986,7 @@
7588
6986
  yn(e, di, this.h);
7589
6987
  var n = new qr();
7590
6988
  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) {
7591
- for (var _iterator10 = _createForOfIteratorHelperLoose$1(t), _step10; !(_step10 = _iterator10()).done;) {
6989
+ for (var _iterator10 = _createForOfIteratorHelperLoose$2(t), _step10; !(_step10 = _iterator10()).done;) {
7592
6990
  var _e24 = _step10.value;
7593
6991
  t = Ms(_e24), _this45.j.faceLandmarks.push(Qi(t));
7594
6992
  }
@@ -7597,7 +6995,7 @@
7597
6995
  _o(_this45, t);
7598
6996
  }), this.outputFaceBlendshapes && (rs(t, "blendshapes"), $r(n, "BLENDSHAPES:blendshapes"), this.g.attachProtoVectorListener("blendshapes", function (t, e) {
7599
6997
  if (_this45.outputFaceBlendshapes) {
7600
- for (var _iterator11 = _createForOfIteratorHelperLoose$1(t), _step11; !(_step11 = _iterator11()).done;) {
6998
+ for (var _iterator11 = _createForOfIteratorHelperLoose$2(t), _step11; !(_step11 = _iterator11()).done;) {
7601
6999
  var _t$g;
7602
7000
  var _e25 = _step11.value;
7603
7001
  t = fs(_e25), _this45.j.faceBlendshapes.push(Ji((_t$g = t.g()) != null ? _t$g : []));
@@ -7608,7 +7006,7 @@
7608
7006
  _o(_this45, t);
7609
7007
  })), this.outputFacialTransformationMatrixes && (rs(t, "face_geometry"), $r(n, "FACE_GEOMETRY:face_geometry"), this.g.attachProtoVectorListener("face_geometry", function (t, e) {
7610
7008
  if (_this45.outputFacialTransformationMatrixes) {
7611
- for (var _iterator12 = _createForOfIteratorHelperLoose$1(t), _step12; !(_step12 = _iterator12()).done;) {
7009
+ for (var _iterator12 = _createForOfIteratorHelperLoose$2(t), _step12; !(_step12 = _iterator12()).done;) {
7612
7010
  var _ln2, _ln3, _He;
7613
7011
  var _e26 = _step12.value;
7614
7012
  (t = en(ai(_e26), Ps, 2)) && _this45.j.facialTransformationMatrixes.push({
@@ -7739,11 +7137,11 @@
7739
7137
  e = !0;
7740
7138
  }
7741
7139
  var n = [];
7742
- for (var _iterator13 = _createForOfIteratorHelperLoose$1(t), _step13; !(_step13 = _iterator13()).done;) {
7140
+ for (var _iterator13 = _createForOfIteratorHelperLoose$2(t), _step13; !(_step13 = _iterator13()).done;) {
7743
7141
  var _s9 = _step13.value;
7744
7142
  var r = fs(_s9);
7745
7143
  t = [];
7746
- for (var _iterator14 = _createForOfIteratorHelperLoose$1(r.g()), _step14; !(_step14 = _iterator14()).done;) {
7144
+ for (var _iterator14 = _createForOfIteratorHelperLoose$2(r.g()), _step14; !(_step14 = _iterator14()).done;) {
7747
7145
  var _fn8, _ref9, _un4, _ref10, _un5;
7748
7146
  var _n24 = _step14.value;
7749
7147
  r = e && null != hn(_n24, 1) ? ln(hn(_n24, 1)) : -1, t.push({
@@ -7789,11 +7187,11 @@
7789
7187
  yn(e, Oi, this.v);
7790
7188
  var n = new qr();
7791
7189
  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) {
7792
- for (var _iterator15 = _createForOfIteratorHelperLoose$1(t), _step15; !(_step15 = _iterator15()).done;) {
7190
+ for (var _iterator15 = _createForOfIteratorHelperLoose$2(t), _step15; !(_step15 = _iterator15()).done;) {
7793
7191
  var _e28 = _step15.value;
7794
7192
  t = Ms(_e28);
7795
7193
  var _n25 = [];
7796
- for (var _iterator16 = _createForOfIteratorHelperLoose$1(rn(t, Fs, 1)), _step16; !(_step16 = _iterator16()).done;) {
7194
+ for (var _iterator16 = _createForOfIteratorHelperLoose$2(rn(t, Fs, 1)), _step16; !(_step16 = _iterator16()).done;) {
7797
7195
  var _fn9, _fn10, _fn11;
7798
7196
  var _e29 = _step16.value;
7799
7197
  _n25.push({
@@ -7808,11 +7206,11 @@
7808
7206
  }), this.g.attachEmptyPacketListener("hand_landmarks", function (t) {
7809
7207
  _o(_this49, t);
7810
7208
  }), this.g.attachProtoVectorListener("world_hand_landmarks", function (t, e) {
7811
- for (var _iterator17 = _createForOfIteratorHelperLoose$1(t), _step17; !(_step17 = _iterator17()).done;) {
7209
+ for (var _iterator17 = _createForOfIteratorHelperLoose$2(t), _step17; !(_step17 = _iterator17()).done;) {
7812
7210
  var _e30 = _step17.value;
7813
7211
  t = Ls(_e30);
7814
7212
  var _n26 = [];
7815
- for (var _iterator18 = _createForOfIteratorHelperLoose$1(rn(t, Ts, 1)), _step18; !(_step18 = _iterator18()).done;) {
7213
+ for (var _iterator18 = _createForOfIteratorHelperLoose$2(rn(t, Ts, 1)), _step18; !(_step18 = _iterator18()).done;) {
7816
7214
  var _fn12, _fn13, _fn14;
7817
7215
  var _e31 = _step18.value;
7818
7216
  _n26.push({
@@ -7897,7 +7295,7 @@
7897
7295
  yn(e, Si, this.j);
7898
7296
  var n = new qr();
7899
7297
  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) {
7900
- for (var _iterator19 = _createForOfIteratorHelperLoose$1(t), _step19; !(_step19 = _iterator19()).done;) {
7298
+ for (var _iterator19 = _createForOfIteratorHelperLoose$2(t), _step19; !(_step19 = _iterator19()).done;) {
7901
7299
  var _e32 = _step19.value;
7902
7300
  t = Ms(_e32), _this51.landmarks.push(Qi(t));
7903
7301
  }
@@ -7905,7 +7303,7 @@
7905
7303
  }), this.g.attachEmptyPacketListener("hand_landmarks", function (t) {
7906
7304
  _o(_this51, t);
7907
7305
  }), this.g.attachProtoVectorListener("world_hand_landmarks", function (t, e) {
7908
- for (var _iterator20 = _createForOfIteratorHelperLoose$1(t), _step20; !(_step20 = _iterator20()).done;) {
7306
+ for (var _iterator20 = _createForOfIteratorHelperLoose$2(t), _step20; !(_step20 = _iterator20()).done;) {
7909
7307
  var _e33 = _step20.value;
7910
7308
  t = Ls(_e33), _this51.worldLandmarks.push(to(t));
7911
7309
  }
@@ -7916,11 +7314,11 @@
7916
7314
  var n = _this51.handedness,
7917
7315
  r = n.push;
7918
7316
  var s = [];
7919
- for (var _iterator21 = _createForOfIteratorHelperLoose$1(t), _step21; !(_step21 = _iterator21()).done;) {
7317
+ for (var _iterator21 = _createForOfIteratorHelperLoose$2(t), _step21; !(_step21 = _iterator21()).done;) {
7920
7318
  var _e34 = _step21.value;
7921
7319
  t = fs(_e34);
7922
7320
  var _n27 = [];
7923
- for (var _iterator22 = _createForOfIteratorHelperLoose$1(t.g()), _step22; !(_step22 = _iterator22()).done;) {
7321
+ for (var _iterator22 = _createForOfIteratorHelperLoose$2(t.g()), _step22; !(_step22 = _iterator22()).done;) {
7924
7322
  var _fn15, _ln4, _ref11, _un6, _ref12, _un7;
7925
7323
  var _e35 = _step22.value;
7926
7324
  _n27.push({
@@ -8312,7 +7710,7 @@
8312
7710
  dn(a, 3, !0), gn(a, 1, e.keypoint.x), gn(a, 2, e.keypoint.y), on(i, 5, oh, a);
8313
7711
  } else {
8314
7712
  if (!e.scribble) throw Error("Must provide either a keypoint or a scribble.");
8315
- for (var _iterator23 = _createForOfIteratorHelperLoose$1((o = new sh(), e.scribble)), _step23; !(_step23 = _iterator23()).done;) {
7713
+ for (var _iterator23 = _createForOfIteratorHelperLoose$2((o = new sh(), e.scribble)), _step23; !(_step23 = _iterator23()).done;) {
8316
7714
  a = _step23.value;
8317
7715
  dn(e = new nh(), 3, !0), gn(e, 1, a.x), gn(e, 2, a.y), an(o, nh, e);
8318
7716
  }
@@ -8413,7 +7811,7 @@
8413
7811
  yn(e, Vi, this.h);
8414
7812
  var n = new qr();
8415
7813
  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) {
8416
- for (var _iterator24 = _createForOfIteratorHelperLoose$1(t), _step24; !(_step24 = _iterator24()).done;) {
7814
+ for (var _iterator24 = _createForOfIteratorHelperLoose$2(t), _step24; !(_step24 = _iterator24()).done;) {
8417
7815
  var _e37 = _step24.value;
8418
7816
  t = Es(_e37), _this61.j.detections.push(Zi(t));
8419
7817
  }
@@ -8513,7 +7911,7 @@
8513
7911
  var n = new qr();
8514
7912
  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) {
8515
7913
  _this63.landmarks = [];
8516
- for (var _iterator25 = _createForOfIteratorHelperLoose$1(t), _step25; !(_step25 = _iterator25()).done;) {
7914
+ for (var _iterator25 = _createForOfIteratorHelperLoose$2(t), _step25; !(_step25 = _iterator25()).done;) {
8517
7915
  var _e39 = _step25.value;
8518
7916
  t = Ms(_e39), _this63.landmarks.push(Qi(t));
8519
7917
  }
@@ -8522,7 +7920,7 @@
8522
7920
  _this63.landmarks = [], _o(_this63, t);
8523
7921
  }), this.g.attachProtoVectorListener("world_landmarks", function (t, e) {
8524
7922
  _this63.worldLandmarks = [];
8525
- for (var _iterator26 = _createForOfIteratorHelperLoose$1(t), _step26; !(_step26 = _iterator26()).done;) {
7923
+ for (var _iterator26 = _createForOfIteratorHelperLoose$2(t), _step26; !(_step26 = _iterator26()).done;) {
8526
7924
  var _e40 = _step26.value;
8527
7925
  t = Ls(_e40), _this63.worldLandmarks.push(to(t));
8528
7926
  }
@@ -8605,6 +8003,42 @@
8605
8003
  });
8606
8004
  }
8607
8005
 
8006
+ function getFrameDimensions(frame) {
8007
+ var frameWidth = frame.width,
8008
+ frameHeight = frame.height;
8009
+ if (frame instanceof HTMLImageElement) {
8010
+ frameWidth = frame.naturalWidth;
8011
+ frameHeight = frame.naturalHeight;
8012
+ }
8013
+ if (frame instanceof HTMLVideoElement) {
8014
+ frameWidth = frame.videoWidth;
8015
+ frameHeight = frame.videoHeight;
8016
+ }
8017
+ return [frameWidth, frameHeight];
8018
+ }
8019
+
8020
+ var InvisibleCanvas = styled.canvas(templateObject_1$G || (templateObject_1$G = __makeTemplateObject(["\n display: none;\n"], ["\n display: none;\n"])));
8021
+ function drawToCanvas(canvas, frame, width, height) {
8022
+ if (!canvas) return;
8023
+ var ctx = canvas.getContext('2d');
8024
+ if (!ctx) return;
8025
+ if (!width || !height) {
8026
+ var _a = getFrameDimensions(frame),
8027
+ frameWidth = _a[0],
8028
+ frameHeight = _a[1];
8029
+ width || (width = frameWidth);
8030
+ height || (height = frameHeight);
8031
+ }
8032
+ canvas.width = width;
8033
+ canvas.height = height;
8034
+ ctx.drawImage(frame, 0, 0, width, height);
8035
+ }
8036
+ function clearCanvas(canvas) {
8037
+ var _a;
8038
+ (_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);
8039
+ }
8040
+ var templateObject_1$G;
8041
+
8608
8042
  function cropToShoulders(rawCanvas, cropCanvas, resizeCanvas, frame, face, quality, maxHeight) {
8609
8043
  if (quality === void 0) {
8610
8044
  quality = 0.92;
@@ -8908,7 +8342,8 @@
8908
8342
  modelPath = _b === void 0 ? defaultFocusModelPath : _b,
8909
8343
  _c = _a.modelLoadTimeoutMs,
8910
8344
  modelLoadTimeoutMs = _c === void 0 ? defaultFocusModelLoadTimeoutMs : _c,
8911
- onModelError = _a.onModelError;
8345
+ onModelError = _a.onModelError,
8346
+ videoRef = _a.videoRef;
8912
8347
  var _d = React.useState(false),
8913
8348
  ready = _d[0],
8914
8349
  setReady = _d[1];
@@ -8918,7 +8353,6 @@
8918
8353
  var _f = React.useState(null),
8919
8354
  modelError = _f[0],
8920
8355
  setModelError = _f[1];
8921
- var videoRef = React.useContext(CameraStateContext).videoRef;
8922
8356
  React.useEffect(function loadModel() {
8923
8357
  var _this = this;
8924
8358
  setReady(false);
@@ -9056,7 +8490,8 @@
9056
8490
  function useLoadFaceDetector(_a) {
9057
8491
  var onModelError = _a.onModelError,
9058
8492
  _b = _a.modelLoadTimeoutMs,
9059
- modelLoadTimeoutMs = _b === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _b;
8493
+ modelLoadTimeoutMs = _b === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _b,
8494
+ videoRef = _a.videoRef;
9060
8495
  var _c = React.useState(false),
9061
8496
  ready = _c[0],
9062
8497
  setReady = _c[1];
@@ -9066,7 +8501,6 @@
9066
8501
  var _e = React.useState(null),
9067
8502
  modelError = _e[0],
9068
8503
  setModelError = _e[1];
9069
- var videoRef = React.useContext(CameraStateContext).videoRef;
9070
8504
  React.useEffect(function loadModel() {
9071
8505
  var _this = this;
9072
8506
  setReady(false);
@@ -9547,7 +8981,8 @@
9547
8981
  modelLoadTimeoutMs = _c === void 0 ? defaultDocumentDetectionModelLoadTimeoutMs : _c,
9548
8982
  _d = _a.scoreThreshold,
9549
8983
  scoreThreshold = _d === void 0 ? defaultDocumentDetectionScoreThreshold : _d,
9550
- onModelError = _a.onModelError;
8984
+ onModelError = _a.onModelError,
8985
+ videoRef = _a.videoRef;
9551
8986
  var _e = React.useState(false),
9552
8987
  ready = _e[0],
9553
8988
  setReady = _e[1];
@@ -9557,7 +8992,6 @@
9557
8992
  var _g = React.useState(null),
9558
8993
  modelError = _g[0],
9559
8994
  setModelError = _g[1];
9560
- var videoRef = React.useContext(CameraStateContext).videoRef;
9561
8995
  React.useEffect(function loadModel() {
9562
8996
  var _this = this;
9563
8997
  setReady(false);
@@ -9838,32 +9272,550 @@
9838
9272
  });
9839
9273
  });
9840
9274
  }
9841
- renderPrediction().then();
9275
+ renderPrediction().then();
9276
+ return function () {
9277
+ loopId.current += 1;
9278
+ frameId.current && cancelAnimationFrame(frameId.current);
9279
+ timer && clearTimeout(timer);
9280
+ };
9281
+ }, [fn, running, throttleMs]);
9282
+ var start = React.useCallback(function () {
9283
+ startedAtRef.current = new Date();
9284
+ setRunning(true);
9285
+ }, []);
9286
+ var stop = React.useCallback(function () {
9287
+ loopId.current += 1; // force the loop to stop immediately.
9288
+ setRunning(false);
9289
+ startedAtRef.current = null;
9290
+ }, []);
9291
+ React.useEffect(function startAutomatically() {
9292
+ if (autoStart) start();
9293
+ return function () {
9294
+ stop();
9295
+ };
9296
+ }, [autoStart, start, stop]);
9297
+ return {
9298
+ start: start,
9299
+ stop: stop
9300
+ };
9301
+ }
9302
+
9303
+ var createStoreImpl = function createStoreImpl(createState) {
9304
+ var state;
9305
+ var listeners = /* @__PURE__ */new Set();
9306
+ var setState = function setState(partial, replace) {
9307
+ var nextState = typeof partial === "function" ? partial(state) : partial;
9308
+ if (!Object.is(nextState, state)) {
9309
+ var previousState = state;
9310
+ state = (replace != null ? replace : typeof nextState !== "object" || nextState === null) ? nextState : Object.assign({}, state, nextState);
9311
+ listeners.forEach(function (listener) {
9312
+ return listener(state, previousState);
9313
+ });
9314
+ }
9315
+ };
9316
+ var getState = function getState() {
9317
+ return state;
9318
+ };
9319
+ var getInitialState = function getInitialState() {
9320
+ return initialState;
9321
+ };
9322
+ var subscribe = function subscribe(listener) {
9323
+ listeners.add(listener);
9324
+ return function () {
9325
+ return listeners["delete"](listener);
9326
+ };
9327
+ };
9328
+ var api = {
9329
+ setState: setState,
9330
+ getState: getState,
9331
+ getInitialState: getInitialState,
9332
+ subscribe: subscribe
9333
+ };
9334
+ var initialState = state = createState(setState, getState, api);
9335
+ return api;
9336
+ };
9337
+ var createStore = function createStore(createState) {
9338
+ return createState ? createStoreImpl(createState) : createStoreImpl;
9339
+ };
9340
+
9341
+ var identity = function identity(arg) {
9342
+ return arg;
9343
+ };
9344
+ function useStore(api, selector) {
9345
+ if (selector === void 0) {
9346
+ selector = identity;
9347
+ }
9348
+ var slice = React.useSyncExternalStore(api.subscribe, function () {
9349
+ return selector(api.getState());
9350
+ }, function () {
9351
+ return selector(api.getInitialState());
9352
+ });
9353
+ React.useDebugValue(slice);
9354
+ return slice;
9355
+ }
9356
+
9357
+ function listAvailableCameras(facingMode_1) {
9358
+ return __awaiter(this, arguments, void 0, function (facingMode, requestMicAccess) {
9359
+ var cameraEnumerationStream, videoDevices;
9360
+ if (requestMicAccess === void 0) {
9361
+ requestMicAccess = false;
9362
+ }
9363
+ return __generator(this, function (_a) {
9364
+ switch (_a.label) {
9365
+ case 0:
9366
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
9367
+ video: {
9368
+ facingMode: {
9369
+ exact: facingMode
9370
+ }
9371
+ },
9372
+ audio: requestMicAccess
9373
+ })
9374
+ // This lists all available cameras attached to the user's device.
9375
+ ];
9376
+ case 1:
9377
+ cameraEnumerationStream = _a.sent();
9378
+ return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];
9379
+ case 2:
9380
+ videoDevices = _a.sent().filter(function (_a) {
9381
+ var kind = _a.kind;
9382
+ return kind === 'videoinput';
9383
+ });
9384
+ // Release the access to the user's camera that we obtained for enumeration purposes.
9385
+ cameraEnumerationStream.getVideoTracks().forEach(function (track) {
9386
+ track.enabled = false;
9387
+ track.stop();
9388
+ });
9389
+ cameraEnumerationStream = null;
9390
+ return [2 /*return*/, videoDevices];
9391
+ }
9392
+ });
9393
+ });
9394
+ }
9395
+ 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) {
9396
+ return s.toLocaleLowerCase().split(' ').join('');
9397
+ });
9398
+ 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) {
9399
+ return s.toLocaleLowerCase().split(' ').join('');
9400
+ });
9401
+ 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) {
9402
+ return s.toLocaleLowerCase().split(' ').join('');
9403
+ });
9404
+ var cameraLabelMatches = function cameraLabelMatches(labelOrDevice, labelSetOrLabel) {
9405
+ var label = labelOrDevice instanceof MediaDeviceInfo ? getDeviceLabel(labelOrDevice) : labelOrDevice;
9406
+ var labelSet = typeof labelSetOrLabel === 'string' ? [labelSetOrLabel] : labelSetOrLabel;
9407
+ return labelSet.some(function (l) {
9408
+ return label.includes(l);
9409
+ });
9410
+ };
9411
+ var getDeviceLabel = function getDeviceLabel(deviceInfo) {
9412
+ return deviceInfo.label.toLocaleLowerCase().split(' ').join('');
9413
+ };
9414
+ var currentCamera;
9415
+ function obtainCameraAccess(stream, deviceLabel, video) {
9416
+ releaseCameraAccess();
9417
+ log('obtaining camera access...');
9418
+ var _a = stream.getVideoTracks()[0].getSettings(),
9419
+ width = _a.width,
9420
+ height = _a.height;
9421
+ log('camera dimensions', width, height);
9422
+ var label = deviceLabel.toLocaleLowerCase().split(' ').join('');
9423
+ log('camera label', label);
9424
+ var isRearFacing = cameraLabelMatches(label, __spreadArray(__spreadArray(__spreadArray([], rearCameraLabels, true), backUltraWideCameraLabels, true), ['iphone'], false));
9425
+ log('is rear facing?', isRearFacing);
9426
+ var release = function release() {
9427
+ stream.getTracks().forEach(function (track) {
9428
+ track.enabled = false;
9429
+ track.stop();
9430
+ });
9431
+ if (video) {
9432
+ video.pause();
9433
+ video.srcObject = null;
9434
+ video.src = '';
9435
+ }
9436
+ };
9437
+ width || (width = 0);
9438
+ height || (height = 0);
9439
+ currentCamera = {
9440
+ label: deviceLabel,
9441
+ stream: stream,
9442
+ width: width,
9443
+ height: height,
9444
+ isRearFacing: isRearFacing,
9445
+ release: release
9446
+ };
9447
+ log('camera access granted');
9448
+ if (video) video.srcObject = stream;
9449
+ log('video source initialized');
9450
+ return currentCamera;
9451
+ }
9452
+ function releaseCameraAccess() {
9453
+ if (!currentCamera) return;
9454
+ log('releasing camera access...');
9455
+ currentCamera.release();
9456
+ currentCamera = undefined;
9457
+ }
9458
+
9459
+ var initialState$5 = {
9460
+ videoRef: {
9461
+ current: null
9462
+ },
9463
+ videoLoaded: false,
9464
+ videoStream: null,
9465
+ videoDevice: null,
9466
+ isRearFacing: false,
9467
+ camera: null,
9468
+ cameraReady: false,
9469
+ cameraAccessDenied: false,
9470
+ iphoneContinuityCameraAvailable: false,
9471
+ iphoneContinuityCameraDenied: false,
9472
+ preferIphoneContinuityCamera: true,
9473
+ audioStream: null,
9474
+ microphoneReady: false,
9475
+ microphoneAccessDenied: false
9476
+ };
9477
+ var createCameraStore = function createCameraStore(config) {
9478
+ var store = createStore(function (set, get) {
9479
+ return _assign(_assign(_assign({}, initialState$5), config), {
9480
+ reset: function reset() {
9481
+ return set(_assign(_assign({}, initialState$5), config));
9482
+ },
9483
+ setConfig: function setConfig(config) {
9484
+ return set(config);
9485
+ },
9486
+ onVideoMounted: function onVideoMounted() {
9487
+ return set({
9488
+ videoLoaded: true
9489
+ });
9490
+ },
9491
+ setIphoneContinuityCameraAllowed: function setIphoneContinuityCameraAllowed(value) {
9492
+ return set({
9493
+ preferIphoneContinuityCamera: value
9494
+ });
9495
+ },
9496
+ requestCameraAccess: function requestCameraAccess() {
9497
+ return __awaiter(this, void 0, void 0, function () {
9498
+ var _a, releaseCameraAccess, preferIphoneContinuityCamera, iphoneContinuityCameraDenied, availableCameras, selectedCamera, platform_1, iphoneContinuityCamera, constraints, stream, e_1, iphoneContinuityCameraAvailable_1, handleStreamEnded_1, camera, e_3;
9499
+ var _b, _c, _d;
9500
+ return __generator(this, function (_e) {
9501
+ switch (_e.label) {
9502
+ case 0:
9503
+ _a = get(), releaseCameraAccess = _a.releaseCameraAccess, preferIphoneContinuityCamera = _a.preferIphoneContinuityCamera, iphoneContinuityCameraDenied = _a.iphoneContinuityCameraDenied;
9504
+ releaseCameraAccess();
9505
+ _e.label = 1;
9506
+ case 1:
9507
+ _e.trys.push([1, 11,, 12]);
9508
+ return [4 /*yield*/, listAvailableCameras()];
9509
+ case 2:
9510
+ availableCameras = _e.sent();
9511
+ selectedCamera = void 0;
9512
+ debug('availableCameras', availableCameras);
9513
+ platform_1 = getPlatform();
9514
+ debug('platformDetails', platform_1);
9515
+ if (!iphoneContinuityCameraDenied && (!(platform_1 === null || platform_1 === void 0 ? void 0 : platform_1.os) || platform_1.os.family === 'OS X')) {
9516
+ iphoneContinuityCamera = availableCameras.find(function (deviceInfo) {
9517
+ return cameraLabelMatches(deviceInfo, 'iphone');
9518
+ });
9519
+ set({
9520
+ iphoneContinuityCameraAvailable: !!iphoneContinuityCamera
9521
+ });
9522
+ if (iphoneContinuityCamera && preferIphoneContinuityCamera) {
9523
+ selectedCamera = iphoneContinuityCamera;
9524
+ }
9525
+ } 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) {
9526
+ return c.label.startsWith('camera2 ');
9527
+ })) {
9528
+ availableCameras = availableCameras.sort(function (a, b) {
9529
+ return a.label.toLowerCase().localeCompare(b.label.toLowerCase());
9530
+ });
9531
+ debug('cameras have been sorted', availableCameras);
9532
+ }
9533
+ if (config.preferFrontFacingCamera) {
9534
+ selectedCamera = availableCameras.find(function (deviceInfo) {
9535
+ return cameraLabelMatches(deviceInfo, frontCameraLabels);
9536
+ });
9537
+ }
9538
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9539
+ return cameraLabelMatches(deviceInfo, 'backtriplecamera');
9540
+ }));
9541
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9542
+ return cameraLabelMatches(deviceInfo, 'backdualcamera');
9543
+ }));
9544
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9545
+ return cameraLabelMatches(deviceInfo, rearCameraLabels) && !cameraLabelMatches(deviceInfo, backUltraWideCameraLabels);
9546
+ }));
9547
+ selectedCamera || (selectedCamera = availableCameras.find(function (deviceInfo) {
9548
+ return cameraLabelMatches(deviceInfo, rearCameraLabels);
9549
+ }));
9550
+ // on iOS, the front facing camera always is at the first position in the list, so we skip it if all else fails.
9551
+ if (!config.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) {
9552
+ selectedCamera || (selectedCamera = availableCameras[1]);
9553
+ }
9554
+ selectedCamera || (selectedCamera = availableCameras[0]);
9555
+ debug('selectedCamera', selectedCamera);
9556
+ set({
9557
+ videoDevice: selectedCamera
9558
+ });
9559
+ constraints = {
9560
+ audio: false,
9561
+ video: {
9562
+ deviceId: {
9563
+ exact: selectedCamera.deviceId
9564
+ },
9565
+ width: {
9566
+ ideal: config.maxVideoWidth
9567
+ },
9568
+ aspectRatio: 1.777777778,
9569
+ frameRate: {}
9570
+ }
9571
+ };
9572
+ if (config.maxFps) {
9573
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9574
+ // @ts-ignore
9575
+ constraints.video.frameRate = {
9576
+ max: config.maxFps
9577
+ };
9578
+ }
9579
+ stream = null;
9580
+ _e.label = 3;
9581
+ case 3:
9582
+ _e.trys.push([3, 5,, 6]);
9583
+ debug('obtaining camera access with constraints', constraints);
9584
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];
9585
+ case 4:
9586
+ stream = _e.sent();
9587
+ return [3 /*break*/, 6];
9588
+ case 5:
9589
+ e_1 = _e.sent();
9590
+ if (e_1.name === 'NotAllowedError') {
9591
+ if (preferIphoneContinuityCamera) {
9592
+ set({
9593
+ iphoneContinuityCameraAvailable: false,
9594
+ iphoneContinuityCameraDenied: true
9595
+ });
9596
+ } else {
9597
+ set({
9598
+ cameraAccessDenied: true
9599
+ });
9600
+ }
9601
+ return [2 /*return*/];
9602
+ }
9603
+ return [3 /*break*/, 6];
9604
+ case 6:
9605
+ if (!!stream) return [3 /*break*/, 10];
9606
+ _e.label = 7;
9607
+ case 7:
9608
+ _e.trys.push([7, 9,, 10]);
9609
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
9610
+ audio: false,
9611
+ video: true
9612
+ })];
9613
+ case 8:
9614
+ stream = _e.sent();
9615
+ debug('opened stream with no width and height constraints');
9616
+ return [3 /*break*/, 10];
9617
+ case 9:
9618
+ _e.sent();
9619
+ debug('cannot open stream at all');
9620
+ return [3 /*break*/, 10];
9621
+ case 10:
9622
+ if (!stream) {
9623
+ error('failed to open camera');
9624
+ throw new Error('failed to open camera');
9625
+ }
9626
+ debug('camera access granted with constraints', constraints);
9627
+ iphoneContinuityCameraAvailable_1 = get().iphoneContinuityCameraAvailable;
9628
+ handleStreamEnded_1 = function handleStreamEnded_1() {
9629
+ if (iphoneContinuityCameraAvailable_1 && preferIphoneContinuityCamera) {
9630
+ debug('someone unplugged the continuity camera');
9631
+ releaseCameraAccess();
9632
+ set({
9633
+ videoStream: null,
9634
+ videoDevice: null,
9635
+ iphoneContinuityCameraAvailable: false,
9636
+ iphoneContinuityCameraDenied: true
9637
+ });
9638
+ } else {
9639
+ debug('someone unplugged the webcam');
9640
+ releaseCameraAccess();
9641
+ set({
9642
+ videoStream: null,
9643
+ videoDevice: null,
9644
+ videoLoaded: false,
9645
+ cameraAccessDenied: true
9646
+ });
9647
+ }
9648
+ };
9649
+ (_d = config.videoRef.current) === null || _d === void 0 ? void 0 : _d.addEventListener('ended', handleStreamEnded_1);
9650
+ stream.getVideoTracks().forEach(function (track) {
9651
+ track.onended = handleStreamEnded_1;
9652
+ });
9653
+ camera = obtainCameraAccess(stream, selectedCamera.label, config.videoRef.current);
9654
+ set({
9655
+ camera: camera,
9656
+ cameraReady: true,
9657
+ isRearFacing: camera.isRearFacing,
9658
+ videoStream: stream
9659
+ });
9660
+ return [3 /*break*/, 12];
9661
+ case 11:
9662
+ e_3 = _e.sent();
9663
+ if (e_3.name === 'NotAllowedError') {
9664
+ error('camera access has been blocked by the user', e_3);
9665
+ set({
9666
+ cameraAccessDenied: true
9667
+ });
9668
+ } else {
9669
+ error('camera access encountered some other error', e_3);
9670
+ throw e_3;
9671
+ }
9672
+ return [3 /*break*/, 12];
9673
+ case 12:
9674
+ return [2 /*return*/];
9675
+ }
9676
+ });
9677
+ });
9678
+ },
9679
+ releaseCameraAccess: function releaseCameraAccess() {
9680
+ return __awaiter(this, void 0, void 0, function () {
9681
+ var camera;
9682
+ return __generator(this, function (_a) {
9683
+ camera = get().camera;
9684
+ if (!camera) return [2 /*return*/];
9685
+ camera.release();
9686
+ set({
9687
+ camera: null,
9688
+ cameraReady: false,
9689
+ cameraAccessDenied: false
9690
+ });
9691
+ return [2 /*return*/];
9692
+ });
9693
+ });
9694
+ },
9695
+ requestMicrophoneAccess: function requestMicrophoneAccess() {
9696
+ return __awaiter(this, void 0, void 0, function () {
9697
+ var stream;
9698
+ return __generator(this, function (_a) {
9699
+ switch (_a.label) {
9700
+ case 0:
9701
+ get().releaseMicrophoneAccess();
9702
+ _a.label = 1;
9703
+ case 1:
9704
+ _a.trys.push([1, 3,, 4]);
9705
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
9706
+ audio: true,
9707
+ video: false
9708
+ })];
9709
+ case 2:
9710
+ stream = _a.sent();
9711
+ set({
9712
+ audioStream: stream,
9713
+ microphoneReady: true
9714
+ });
9715
+ stream.getAudioTracks().forEach(function (track) {
9716
+ track.onended = function () {
9717
+ set({
9718
+ microphoneAccessDenied: true
9719
+ });
9720
+ };
9721
+ });
9722
+ return [3 /*break*/, 4];
9723
+ case 3:
9724
+ _a.sent();
9725
+ set({
9726
+ microphoneAccessDenied: true
9727
+ });
9728
+ return [3 /*break*/, 4];
9729
+ case 4:
9730
+ return [2 /*return*/];
9731
+ }
9732
+ });
9733
+ });
9734
+ },
9735
+ releaseMicrophoneAccess: function releaseMicrophoneAccess() {
9736
+ var _a;
9737
+ var audioStream = get().audioStream;
9738
+ (_a = audioStream === null || audioStream === void 0 ? void 0 : audioStream.stop) === null || _a === void 0 ? void 0 : _a.call(audioStream);
9739
+ audioStream === null || audioStream === void 0 ? void 0 : audioStream.getAudioTracks().forEach(function (track) {
9740
+ var _a;
9741
+ (_a = track.stop) === null || _a === void 0 ? void 0 : _a.call(track);
9742
+ });
9743
+ set({
9744
+ audioStream: null,
9745
+ microphoneReady: false,
9746
+ microphoneAccessDenied: false
9747
+ });
9748
+ }
9749
+ });
9750
+ });
9751
+ if (config.requestAccessAutomatically) {
9752
+ store.getState().requestCameraAccess();
9753
+ }
9754
+ if (config.requireMicrophoneAccess) {
9755
+ store.getState().requestMicrophoneAccess();
9756
+ }
9757
+ return _assign(_assign({}, store), {
9758
+ destroy: function destroy() {
9759
+ store.getState().releaseCameraAccess();
9760
+ store.getState().releaseMicrophoneAccess();
9761
+ }
9762
+ });
9763
+ };
9764
+ var CameraStoreContext = /*#__PURE__*/React.createContext(undefined);
9765
+ function CameraStoreProvider(_a) {
9766
+ var children = _a.children,
9767
+ _b = _a.requestAccessAutomatically,
9768
+ requestAccessAutomatically = _b === void 0 ? true : _b,
9769
+ _c = _a.preferIphoneContinuityCamera,
9770
+ preferIphoneContinuityCamera = _c === void 0 ? true : _c,
9771
+ _d = _a.preferFrontFacingCamera,
9772
+ preferFrontFacingCamera = _d === void 0 ? false : _d,
9773
+ _e = _a.maxVideoWidth,
9774
+ maxVideoWidth = _e === void 0 ? 1920 : _e,
9775
+ maxFps = _a.maxFps,
9776
+ onCameraAccessDenied = _a.onCameraAccessDenied,
9777
+ onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied,
9778
+ _f = _a.requireMicrophoneAccess,
9779
+ requireMicrophoneAccess = _f === void 0 ? false : _f;
9780
+ var videoRef = React.useRef(null);
9781
+ var store = React.useRef();
9782
+ store.current || (store.current = createCameraStore({
9783
+ videoRef: videoRef,
9784
+ requestAccessAutomatically: requestAccessAutomatically,
9785
+ preferIphoneContinuityCamera: preferIphoneContinuityCamera,
9786
+ preferFrontFacingCamera: preferFrontFacingCamera,
9787
+ maxVideoWidth: maxVideoWidth,
9788
+ maxFps: maxFps,
9789
+ onCameraAccessDenied: onCameraAccessDenied,
9790
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied,
9791
+ requireMicrophoneAccess: requireMicrophoneAccess
9792
+ }));
9793
+ React.useEffect(function () {
9794
+ var _a, _b, _c;
9795
+ var state = (_a = store.current) === null || _a === void 0 ? void 0 : _a.getState();
9796
+ if (!state) return;
9797
+ if (preferIphoneContinuityCamera !== (state === null || state === void 0 ? void 0 : state.preferIphoneContinuityCamera) || preferFrontFacingCamera !== (state === null || state === void 0 ? void 0 : state.preferFrontFacingCamera)) {
9798
+ (_b = store.current) === null || _b === void 0 ? void 0 : _b.setState({
9799
+ preferIphoneContinuityCamera: preferIphoneContinuityCamera,
9800
+ preferFrontFacingCamera: preferFrontFacingCamera
9801
+ });
9802
+ (_c = store.current) === null || _c === void 0 ? void 0 : _c.getState().requestCameraAccess();
9803
+ }
9804
+ }, [preferFrontFacingCamera, preferIphoneContinuityCamera]);
9805
+ React.useEffect(function () {
9842
9806
  return function () {
9843
- loopId.current += 1;
9844
- frameId.current && cancelAnimationFrame(frameId.current);
9845
- timer && clearTimeout(timer);
9807
+ var _a;
9808
+ return (_a = store.current) === null || _a === void 0 ? void 0 : _a.destroy();
9846
9809
  };
9847
- }, [fn, running, throttleMs]);
9848
- var start = React.useCallback(function () {
9849
- startedAtRef.current = new Date();
9850
- setRunning(true);
9851
- }, []);
9852
- var stop = React.useCallback(function () {
9853
- loopId.current += 1; // force the loop to stop immediately.
9854
- setRunning(false);
9855
- startedAtRef.current = null;
9856
9810
  }, []);
9857
- React.useEffect(function startAutomatically() {
9858
- if (autoStart) start();
9859
- return function () {
9860
- stop();
9861
- };
9862
- }, [autoStart, start, stop]);
9863
- return {
9864
- start: start,
9865
- stop: stop
9866
- };
9811
+ return /*#__PURE__*/React.createElement(CameraStoreContext.Provider, {
9812
+ value: store.current
9813
+ }, children);
9814
+ }
9815
+ function useCameraStore(selector) {
9816
+ var store = React.useContext(CameraStoreContext);
9817
+ if (!store) throw new Error('useCameraStore cannot be used without Provider');
9818
+ return useStore(store, selector);
9867
9819
  }
9868
9820
 
9869
9821
  var DocumentDetectionModelContext = /*#__PURE__*/React.createContext({
@@ -9911,7 +9863,7 @@
9911
9863
  _g = _a.documentDetectionModelLoadTimeoutMs,
9912
9864
  documentDetectionModelLoadTimeoutMs = _g === void 0 ? defaultDocumentDetectionModelLoadTimeoutMs : _g,
9913
9865
  onDocumentDetectionModelError = _a.onDocumentDetectionModelError;
9914
- var _h = React.useContext(CameraStateContext),
9866
+ var _h = useCameraStore(),
9915
9867
  videoRef = _h.videoRef,
9916
9868
  videoLoaded = _h.videoLoaded,
9917
9869
  cameraReady = _h.cameraReady;
@@ -9934,7 +9886,8 @@
9934
9886
  modelPath: documentDetectionModelPath,
9935
9887
  modelLoadTimeoutMs: documentDetectionModelLoadTimeoutMs,
9936
9888
  scoreThreshold: documentDetectionModelScoreThreshold,
9937
- onModelError: onDocumentDetectionModelError
9889
+ onModelError: onDocumentDetectionModelError,
9890
+ videoRef: videoRef
9938
9891
  }),
9939
9892
  ready = _o.ready,
9940
9893
  modelDownloadProgress = _o.modelDownloadProgress,
@@ -10051,10 +10004,12 @@
10051
10004
  var _e = React.useState({}),
10052
10005
  focusThresholds = _e[0],
10053
10006
  setFocusThresholds = _e[1];
10007
+ var videoRef = useCameraStore().videoRef;
10054
10008
  var _f = useLoadFocusModel({
10055
10009
  modelPath: focusModelPath,
10056
10010
  modelLoadTimeoutMs: focusModelLoadTimeoutMs,
10057
- onModelError: onFocusModelError
10011
+ onModelError: onFocusModelError,
10012
+ videoRef: videoRef
10058
10013
  }),
10059
10014
  ready = _f.ready,
10060
10015
  modelDownloadProgress = _f.modelDownloadProgress,
@@ -11494,9 +11449,9 @@
11494
11449
  return e;
11495
11450
  }
11496
11451
 
11497
- 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."); }
11498
- 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; } }
11499
- 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; }
11452
+ 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."); }
11453
+ 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; } }
11454
+ 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; }
11500
11455
  var consoleLogger = {
11501
11456
  type: 'logger',
11502
11457
  log: function log(args) {
@@ -12343,7 +12298,7 @@
12343
12298
  }
12344
12299
  if (!useOptionsReplaceForData) {
12345
12300
  data = _extends({}, data);
12346
- for (var _iterator = _createForOfIteratorHelperLoose(optionsKeys), _step; !(_step = _iterator()).done;) {
12301
+ for (var _iterator = _createForOfIteratorHelperLoose$1(optionsKeys), _step; !(_step = _iterator()).done;) {
12347
12302
  var key = _step.value;
12348
12303
  delete data[key];
12349
12304
  }
@@ -14049,31 +14004,33 @@
14049
14004
  var templateObject_1$D, templateObject_2$w, templateObject_3$o, templateObject_4$i, templateObject_5$b;
14050
14005
 
14051
14006
  var IdCapture = function IdCapture(_a) {
14052
- var _b, _c, _d, _e, _f, _g, _h, _j;
14007
+ var _b, _c, _d, _e, _f, _g, _h;
14053
14008
  var requiredDocumentType = _a.requiredDocumentType,
14054
- _k = _a.thresholds,
14055
- thresholds = _k === void 0 ? defaultIdCaptureThresholds : _k,
14009
+ _j = _a.thresholds,
14010
+ thresholds = _j === void 0 ? defaultIdCaptureThresholds : _j,
14056
14011
  guidanceMessage = _a.guidanceMessage,
14057
14012
  guidanceSatisfied = _a.guidanceSatisfied,
14058
14013
  onCapture = _a.onCapture,
14059
- _l = _a.classNames,
14060
- classNames = _l === void 0 ? {} : _l,
14061
- _m = _a.colors,
14062
- colors = _m === void 0 ? {} : _m,
14063
- _o = _a.verbiage,
14064
- rawVerbiage = _o === void 0 ? {} : _o,
14065
- _p = _a.debugMode,
14066
- debugMode = _p === void 0 ? false : _p;
14067
- var _q = useResizeObserver(),
14068
- ref = _q.ref,
14069
- _r = _q.width,
14070
- width = _r === void 0 ? 1 : _r,
14071
- _s = _q.height,
14072
- height = _s === void 0 ? 1 : _s;
14073
- var _t = useIdCaptureState(),
14074
- state = _t[0],
14075
- dispatch = _t[1];
14076
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
14014
+ _k = _a.classNames,
14015
+ classNames = _k === void 0 ? {} : _k,
14016
+ _l = _a.colors,
14017
+ colors = _l === void 0 ? {} : _l,
14018
+ _m = _a.verbiage,
14019
+ rawVerbiage = _m === void 0 ? {} : _m,
14020
+ _o = _a.debugMode,
14021
+ debugMode = _o === void 0 ? false : _o;
14022
+ var _p = useResizeObserver(),
14023
+ ref = _p.ref,
14024
+ _q = _p.width,
14025
+ width = _q === void 0 ? 1 : _q,
14026
+ _r = _p.height,
14027
+ height = _r === void 0 ? 1 : _r;
14028
+ var _s = useIdCaptureState(),
14029
+ state = _s[0],
14030
+ dispatch = _s[1];
14031
+ var _t = useCameraStore(),
14032
+ camera = _t.camera,
14033
+ isRearFacing = _t.isRearFacing;
14077
14034
  var _u = React.useContext(IdCaptureModelsContext),
14078
14035
  modelsReady = _u.ready,
14079
14036
  setThresholds = _u.setThresholds,
@@ -14185,17 +14142,16 @@
14185
14142
  classNames: classNames.overrideWrongDocumentTypeGuidanceDialog,
14186
14143
  verbiage: rawVerbiage.overrideWrongDocumentTypeGuidanceDialog
14187
14144
  }))), debugMode && ( /*#__PURE__*/React.createElement(DebugBoundingBoxOverlay, {
14188
- "$flipX": !((_j = cameraRef.current) === null || _j === void 0 ? void 0 : _j.isRearFacing),
14145
+ "$flipX": !isRearFacing,
14189
14146
  scaling: debugScalingDetails
14190
14147
  }, state.detectedObjects.map(function (obj, i) {
14191
- var _a;
14192
14148
  return /*#__PURE__*/React.createElement(IdCaptureDetectedObjectDebugBox, {
14193
14149
  key: i,
14194
14150
  obj: obj,
14195
14151
  scaling: debugScalingDetails,
14196
- flipX: !((_a = cameraRef.current) === null || _a === void 0 ? void 0 : _a.isRearFacing)
14152
+ flipX: !isRearFacing
14197
14153
  });
14198
- }))), 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")))));
14154
+ }))), 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")))));
14199
14155
  };
14200
14156
  var timeSince = function timeSince(t) {
14201
14157
  if (!t) return 0;
@@ -14212,7 +14168,9 @@
14212
14168
  colors = _e === void 0 ? {} : _e,
14213
14169
  _f = _a.verbiage,
14214
14170
  rawVerbiage = _f === void 0 ? {} : _f;
14215
- var requestCameraAccess = React.useContext(CameraStateContext).requestCameraAccess;
14171
+ var requestCameraAccess = useCameraStore(function (state) {
14172
+ return state.requestCameraAccess;
14173
+ });
14216
14174
  assets.imageUrl || (assets.imageUrl = DEFAULT_CDN_URL + '/camera-disable-icon.png');
14217
14175
  var verbiage = useTranslations(rawVerbiage, {
14218
14176
  headingText: 'Your camera permission is disabled',
@@ -14860,7 +14818,7 @@
14860
14818
  var _o = React.useContext(IdCaptureModelsContext),
14861
14819
  modelsReady = _o.ready,
14862
14820
  modelDownloadProgress = _o.modelDownloadProgress;
14863
- var _p = React.useContext(CameraStateContext),
14821
+ var _p = useCameraStore(),
14864
14822
  cameraReady = _p.cameraReady,
14865
14823
  cameraAccessDenied = _p.cameraAccessDenied,
14866
14824
  iphoneContinuityCameraAvailable = _p.iphoneContinuityCameraAvailable,
@@ -15038,6 +14996,71 @@
15038
14996
  });
15039
14997
  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;
15040
14998
 
14999
+ 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."); }
15000
+ 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; } }
15001
+ 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; }
15002
+ var isIterable = function isIterable(obj) {
15003
+ return Symbol.iterator in obj;
15004
+ };
15005
+ var compareMapLike = function compareMapLike(iterableA, iterableB) {
15006
+ var mapA = iterableA instanceof Map ? iterableA : new Map(iterableA);
15007
+ var mapB = iterableB instanceof Map ? iterableB : new Map(iterableB);
15008
+ if (mapA.size !== mapB.size) return false;
15009
+ for (var _iterator = _createForOfIteratorHelperLoose(mapA), _step; !(_step = _iterator()).done;) {
15010
+ var _step$value = _step.value,
15011
+ key = _step$value[0],
15012
+ value = _step$value[1];
15013
+ if (!Object.is(value, mapB.get(key))) {
15014
+ return false;
15015
+ }
15016
+ }
15017
+ return true;
15018
+ };
15019
+ function shallow(objA, objB) {
15020
+ if (Object.is(objA, objB)) {
15021
+ return true;
15022
+ }
15023
+ if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
15024
+ return false;
15025
+ }
15026
+ if (isIterable(objA) && isIterable(objB)) {
15027
+ var iteratorA = objA[Symbol.iterator]();
15028
+ var iteratorB = objB[Symbol.iterator]();
15029
+ var nextA = iteratorA.next();
15030
+ var nextB = iteratorB.next();
15031
+ if (Array.isArray(nextA.value) && Array.isArray(nextB.value) && nextA.value.length === 2 && nextB.value.length === 2) {
15032
+ return compareMapLike(objA, objB);
15033
+ }
15034
+ while (!nextA.done && !nextB.done) {
15035
+ if (!Object.is(nextA.value, nextB.value)) {
15036
+ return false;
15037
+ }
15038
+ nextA = iteratorA.next();
15039
+ nextB = iteratorB.next();
15040
+ }
15041
+ return !!nextA.done && !!nextB.done;
15042
+ }
15043
+ var keysA = Object.keys(objA);
15044
+ if (keysA.length !== Object.keys(objB).length) {
15045
+ return false;
15046
+ }
15047
+ for (var _i = 0, _keysA = keysA; _i < _keysA.length; _i++) {
15048
+ var keyA = _keysA[_i];
15049
+ if (!Object.hasOwn(objB, keyA) || !Object.is(objA[keyA], objB[keyA])) {
15050
+ return false;
15051
+ }
15052
+ }
15053
+ return true;
15054
+ }
15055
+
15056
+ function useShallow(selector) {
15057
+ var prev = React.useRef();
15058
+ return function (state) {
15059
+ var next = selector(state);
15060
+ return shallow(prev.current, next) ? prev.current : prev.current = next;
15061
+ };
15062
+ }
15063
+
15041
15064
  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"])));
15042
15065
  var ContinuityCameraCheckbox = styled.input(templateObject_2$s || (templateObject_2$s = __makeTemplateObject(["\n margin-right: 8px;\n"], ["\n margin-right: 8px;\n"])));
15043
15066
  var IdCaptureLoadingOverlayLegacy = function IdCaptureLoadingOverlayLegacy(_a) {
@@ -15058,7 +15081,14 @@
15058
15081
  var _l = React.useContext(IdCaptureModelsContext),
15059
15082
  modelsReady = _l.ready,
15060
15083
  modelDownloadProgress = _l.modelDownloadProgress;
15061
- var _m = React.useContext(CameraStateContext),
15084
+ var _m = useCameraStore(useShallow(function (state) {
15085
+ return {
15086
+ cameraReady: state.cameraReady,
15087
+ cameraAccessDenied: state.cameraAccessDenied,
15088
+ iphoneContinuityCameraAvailable: state.iphoneContinuityCameraAvailable,
15089
+ setIphoneContinuityCameraAllowed: state.setIphoneContinuityCameraAllowed
15090
+ };
15091
+ })),
15062
15092
  cameraReady = _m.cameraReady,
15063
15093
  cameraAccessDenied = _m.cameraAccessDenied,
15064
15094
  iphoneContinuityCameraAvailable = _m.iphoneContinuityCameraAvailable,
@@ -15604,23 +15634,24 @@
15604
15634
  }
15605
15635
 
15606
15636
  var IdVideoCaptureFlipIdPrompt = function IdVideoCaptureFlipIdPrompt(_a) {
15607
- var _b;
15608
- var _c = _a.idCaptureGuideImages,
15609
- idCaptureGuideImages = _c === void 0 ? defaultIdCaptureGuideImages : _c,
15610
- _d = _a.classNames,
15611
- classNames = _d === void 0 ? {} : _d,
15637
+ var _b = _a.idCaptureGuideImages,
15638
+ idCaptureGuideImages = _b === void 0 ? defaultIdCaptureGuideImages : _b,
15639
+ _c = _a.classNames,
15640
+ classNames = _c === void 0 ? {} : _c,
15612
15641
  borderWidth = _a.borderWidth,
15613
15642
  borderColor = _a.borderColor,
15614
15643
  borderRadius = _a.borderRadius,
15615
15644
  imageStyle = _a.imageStyle;
15616
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
15617
- var isMirrored = !((_b = cameraRef.current) === null || _b === void 0 ? void 0 : _b.isRearFacing);
15618
- var _e = React.useState(1),
15619
- transitionTime = _e[0],
15620
- setTransitionTime = _e[1];
15621
- var _f = React.useState(0),
15622
- rotationAngle = _f[0],
15623
- setRotationAngle = _f[1];
15645
+ var isRearFacing = useCameraStore(function (state) {
15646
+ return state.isRearFacing;
15647
+ });
15648
+ var isMirrored = !isRearFacing;
15649
+ var _d = React.useState(1),
15650
+ transitionTime = _d[0],
15651
+ setTransitionTime = _d[1];
15652
+ var _e = React.useState(0),
15653
+ rotationAngle = _e[0],
15654
+ setRotationAngle = _e[1];
15624
15655
  var frontTransforms = ["rotateY(".concat(rotationAngle, "deg)")];
15625
15656
  if (isMirrored) frontTransforms.push('scaleX(-1)');
15626
15657
  var backTransforms = ["rotateY(".concat(180 - rotationAngle, "deg)")];
@@ -16144,29 +16175,30 @@
16144
16175
  var templateObject_1$r, templateObject_2$n;
16145
16176
 
16146
16177
  function IdCaptureGuides(_a) {
16147
- var _b, _c;
16148
- var _d = _a.guideType,
16149
- guideType = _d === void 0 ? 'fit' : _d,
16150
- _e = _a.status,
16151
- status = _e === void 0 ? 'ready' : _e,
16152
- _f = _a.progress,
16153
- progress = _f === void 0 ? 0 : _f,
16154
- _g = _a.portraitGuidesOnMobile,
16155
- portraitGuidesOnMobile = _g === void 0 ? true : _g,
16156
- _h = _a.requestedAction,
16157
- requestedAction = _h === void 0 ? 'SHOW_ID_FRONT' : _h,
16158
- _j = _a.isBackToFront,
16159
- isBackToFront = _j === void 0 ? false : _j,
16160
- _k = _a.images,
16161
- images = _k === void 0 ? defaultIdCaptureGuideImages : _k,
16162
- _l = _a.classNames,
16163
- classNames = _l === void 0 ? {} : _l,
16164
- _m = _a.colors,
16165
- colors = _m === void 0 ? {} : _m,
16166
- _o = _a.verbiage,
16167
- rawVerbiage = _o === void 0 ? {} : _o;
16178
+ var _b = _a.guideType,
16179
+ guideType = _b === void 0 ? 'fit' : _b,
16180
+ _c = _a.status,
16181
+ status = _c === void 0 ? 'ready' : _c,
16182
+ _d = _a.progress,
16183
+ progress = _d === void 0 ? 0 : _d,
16184
+ _e = _a.portraitGuidesOnMobile,
16185
+ portraitGuidesOnMobile = _e === void 0 ? true : _e,
16186
+ _f = _a.requestedAction,
16187
+ requestedAction = _f === void 0 ? 'SHOW_ID_FRONT' : _f,
16188
+ _g = _a.isBackToFront,
16189
+ isBackToFront = _g === void 0 ? false : _g,
16190
+ _h = _a.images,
16191
+ images = _h === void 0 ? defaultIdCaptureGuideImages : _h,
16192
+ _j = _a.classNames,
16193
+ classNames = _j === void 0 ? {} : _j,
16194
+ _k = _a.colors,
16195
+ colors = _k === void 0 ? {} : _k,
16196
+ _l = _a.verbiage,
16197
+ rawVerbiage = _l === void 0 ? {} : _l;
16168
16198
  var state = useIdCaptureState()[0];
16169
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
16199
+ var isRearFacing = useCameraStore(function (state) {
16200
+ return state.isRearFacing;
16201
+ });
16170
16202
  var verbiage = useTranslations(rawVerbiage, {
16171
16203
  instructionText: 'Scan the front of ID',
16172
16204
  capturingText: 'Capturing...',
@@ -16178,7 +16210,7 @@
16178
16210
  status: status,
16179
16211
  progress: progress,
16180
16212
  instruction: state.captureFailed ? verbiage.captureFailedText : state.capturing ? verbiage === null || verbiage === void 0 ? void 0 : verbiage.capturingText : verbiage.instructionText,
16181
- isMirrored: !((_b = cameraRef.current) === null || _b === void 0 ? void 0 : _b.isRearFacing),
16213
+ isMirrored: !isRearFacing,
16182
16214
  borderColor: state.isGoodFrame ? colors.guideBoxSatisfiedColor : colors.guideBoxUnsatisfiedColor,
16183
16215
  imageVisible: requestedAction === 'FLIP_ID' || !state.idCardFrontDetectionThresholdMet || !state.documentInBounds || state.documentTooClose
16184
16216
  })), guideType === 'fit' && ( /*#__PURE__*/React.createElement(IdCaptureFitGuide, {
@@ -16188,7 +16220,7 @@
16188
16220
  status: status,
16189
16221
  progress: progress,
16190
16222
  instruction: state.captureFailed ? verbiage.captureFailedText : state.capturing ? verbiage === null || verbiage === void 0 ? void 0 : verbiage.capturingText : verbiage.instructionText,
16191
- isMirrored: !((_c = cameraRef.current) === null || _c === void 0 ? void 0 : _c.isRearFacing),
16223
+ isMirrored: !isRearFacing,
16192
16224
  isBackToFront: isBackToFront,
16193
16225
  portraitGuidesOnMobile: portraitGuidesOnMobile,
16194
16226
  borderColor: state.isGoodFrame ? colors.guideBoxSatisfiedColor : colors.guideBoxUnsatisfiedColor,
@@ -16287,48 +16319,6 @@
16287
16319
  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"])));
16288
16320
  var templateObject_1$q, templateObject_2$m, templateObject_3$h, templateObject_4$b;
16289
16321
 
16290
- var CameraVideoTag = function CameraVideoTag(_a) {
16291
- var _b;
16292
- var className = _a.className;
16293
- var _c = React.useContext(CameraStateContext),
16294
- videoRef = _c.videoRef,
16295
- setVideoLoaded = _c.setVideoLoaded,
16296
- onVideoUnmounted = _c.onVideoUnmounted,
16297
- cameraRef = _c.cameraRef;
16298
- React.useEffect(function notifyCameraProviderOfUnmount() {
16299
- var videoElement = videoRef.current;
16300
- if (!videoElement) return;
16301
- return function () {
16302
- onVideoUnmounted(videoElement);
16303
- };
16304
- }, [onVideoUnmounted, videoRef]);
16305
- React.useEffect(function setVideoLoadedToFalseOnMount() {
16306
- setVideoLoaded(false);
16307
- }, [setVideoLoaded]);
16308
- React.useEffect(function attachCameraStreamToVideoTagWhenReady() {
16309
- var _a;
16310
- if (videoRef.current && ((_a = cameraRef.current) === null || _a === void 0 ? void 0 : _a.stream)) {
16311
- videoRef.current.srcObject = cameraRef.current.stream;
16312
- }
16313
- }, [cameraRef, videoRef]);
16314
- var onLoadedData = React.useCallback(function () {
16315
- setVideoLoaded(true);
16316
- }, [setVideoLoaded]);
16317
- return /*#__PURE__*/React.createElement(FullscreenVideoTag, {
16318
- className: className,
16319
- autoPlay: true,
16320
- playsInline: true,
16321
- muted: true,
16322
- ref: videoRef,
16323
- onLoadedData: onLoadedData,
16324
- "$isRearFacing": (_b = cameraRef.current) === null || _b === void 0 ? void 0 : _b.isRearFacing
16325
- });
16326
- };
16327
- 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) {
16328
- return props.$isRearFacing ? '' : 'scaleX(-1)';
16329
- });
16330
- var templateObject_1$p;
16331
-
16332
16322
  var documentCaptureInitialState = {
16333
16323
  documents: [],
16334
16324
  currentDocumentIndex: 0,
@@ -16447,8 +16437,8 @@
16447
16437
  var _c = React.useReducer(documentCaptureStateReducer, documentCaptureInitialState),
16448
16438
  state = _c[0],
16449
16439
  dispatch = _c[1];
16450
- var _d = React.useContext(CameraStateContext),
16451
- cameraRef = _d.cameraRef,
16440
+ var _d = useCameraStore(),
16441
+ videoStream = _d.videoStream,
16452
16442
  videoRef = _d.videoRef;
16453
16443
  var uploadDocument = React.useContext(SubmissionContext).uploadDocument;
16454
16444
  var uploadCapturedDocument = React.useCallback(function (content, filetype) {
@@ -16539,8 +16529,7 @@
16539
16529
  }, [onResize]);
16540
16530
  var videoTag = videoRef.current;
16541
16531
  React.useEffect(function () {
16542
- if (!state.capturing) return;
16543
- if (!cameraRef.current) return;
16532
+ if (!state.capturing || !(videoStream === null || videoStream === void 0 ? void 0 : videoStream.active)) return;
16544
16533
  function onComplete(content) {
16545
16534
  if (!content) return;
16546
16535
  var contentUrl = URL.createObjectURL(content);
@@ -16553,7 +16542,7 @@
16553
16542
  });
16554
16543
  }
16555
16544
  if (typeof ImageCapture !== 'undefined') {
16556
- var tracks = cameraRef.current.stream.getTracks();
16545
+ var tracks = videoStream.getTracks();
16557
16546
  var videoCameraTrack = tracks.find(function (track) {
16558
16547
  return track.kind === 'video';
16559
16548
  });
@@ -16568,7 +16557,7 @@
16568
16557
  drawToCanvas(canvas, videoTag);
16569
16558
  canvas.toBlob(onComplete);
16570
16559
  }
16571
- }, [cameraRef, state.capturing, videoTag]);
16560
+ }, [state.capturing, videoStream, videoTag]);
16572
16561
  var stateWithActions = React.useMemo(function () {
16573
16562
  return _assign(_assign({}, state), {
16574
16563
  uploadCapturedDocument: uploadCapturedDocument
@@ -16683,52 +16672,85 @@
16683
16672
  ref: canvasRef
16684
16673
  }));
16685
16674
  };
16686
- 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) {
16675
+ 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) {
16687
16676
  return props.$maskColor;
16688
16677
  });
16689
16678
  var Canvas = styled.canvas(templateObject_2$l || (templateObject_2$l = __makeTemplateObject(["\n display: block;\n"], ["\n display: block;\n"])));
16690
- var templateObject_1$o, templateObject_2$l;
16679
+ var templateObject_1$p, templateObject_2$l;
16691
16680
 
16692
- var CameraFeedWrapper = styled.div(templateObject_1$n || (templateObject_1$n = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (props) {
16681
+ var CameraFeedWrapper = styled.div(templateObject_1$o || (templateObject_1$o = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (props) {
16693
16682
  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;") : "";
16694
16683
  });
16684
+ var templateObject_1$o;
16685
+
16686
+ var CameraVideoTag = function CameraVideoTag(props) {
16687
+ var _a = useCameraStore(useShallow(function (store) {
16688
+ return {
16689
+ videoRef: store.videoRef,
16690
+ videoStream: store.videoStream,
16691
+ onVideoMounted: store.onVideoMounted,
16692
+ isRearFacing: store.isRearFacing
16693
+ };
16694
+ })),
16695
+ videoRef = _a.videoRef,
16696
+ videoStream = _a.videoStream,
16697
+ onVideoMounted = _a.onVideoMounted,
16698
+ isRearFacing = _a.isRearFacing;
16699
+ React.useEffect(function attachCameraStreamToVideoTagWhenReady() {
16700
+ if (videoRef.current && videoStream) {
16701
+ debug('attaching camera stream to video tag');
16702
+ videoRef.current.srcObject = videoStream;
16703
+ }
16704
+ }, [videoStream, videoRef]);
16705
+ return /*#__PURE__*/React.createElement(FullscreenVideoTag, _assign({
16706
+ autoPlay: true,
16707
+ playsInline: true,
16708
+ muted: true,
16709
+ ref: videoRef,
16710
+ onLoadedData: onVideoMounted,
16711
+ "$isRearFacing": isRearFacing
16712
+ }, props));
16713
+ };
16714
+ 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) {
16715
+ return props.$isRearFacing ? '' : 'scaleX(-1)';
16716
+ });
16695
16717
  var templateObject_1$n;
16696
16718
 
16697
16719
  var DocumentCaptureScreen = function DocumentCaptureScreen(_a) {
16698
- var _b, _c, _d, _e, _f, _g, _h;
16720
+ var _b, _c, _d, _e, _f;
16699
16721
  var onCaptureClicked = _a.onCaptureClicked,
16700
- _j = _a.classNames,
16701
- classNames = _j === void 0 ? {} : _j,
16702
- _k = _a.verbiage,
16703
- rawVerbiage = _k === void 0 ? {} : _k;
16704
- var _l = useDocumentCaptureState(),
16705
- _m = _l[0],
16706
- documents = _m.documents,
16707
- currentDocumentIndex = _m.currentDocumentIndex,
16708
- rectX = _m.rectX,
16709
- rectY = _m.rectY,
16710
- rectWidth = _m.rectWidth,
16711
- rectHeight = _m.rectHeight,
16712
- rectOffsetTop = _m.rectOffsetTop,
16713
- capturing = _m.capturing,
16714
- uploadCapturedDocument = _m.uploadCapturedDocument,
16715
- dispatch = _l[1];
16716
- var _o = (_b = documents[currentDocumentIndex]) !== null && _b !== void 0 ? _b : {},
16717
- title = _o.title,
16718
- aspectRatio = _o.aspectRatio,
16719
- cameraFeedMode = _o.cameraFeedMode,
16720
- instructions = _o.instructions,
16721
- contentUrl = _o.contentUrl,
16722
- content = _o.content,
16723
- uploadState = _o.uploadState;
16724
- var _p = React.useContext(CameraStateContext),
16725
- cameraRef = _p.cameraRef,
16726
- cameraReady = _p.cameraReady,
16727
- cameraAccessDenied = _p.cameraAccessDenied,
16728
- requestCameraAccess = _p.requestCameraAccess;
16729
- var _q = React.useState(false),
16730
- cameraAccessRequested = _q[0],
16731
- setCameraAccessRequested = _q[1];
16722
+ _g = _a.classNames,
16723
+ classNames = _g === void 0 ? {} : _g,
16724
+ _h = _a.verbiage,
16725
+ rawVerbiage = _h === void 0 ? {} : _h;
16726
+ var _j = useDocumentCaptureState(),
16727
+ _k = _j[0],
16728
+ documents = _k.documents,
16729
+ currentDocumentIndex = _k.currentDocumentIndex,
16730
+ rectX = _k.rectX,
16731
+ rectY = _k.rectY,
16732
+ rectWidth = _k.rectWidth,
16733
+ rectHeight = _k.rectHeight,
16734
+ rectOffsetTop = _k.rectOffsetTop,
16735
+ capturing = _k.capturing,
16736
+ uploadCapturedDocument = _k.uploadCapturedDocument,
16737
+ dispatch = _j[1];
16738
+ var _l = (_b = documents[currentDocumentIndex]) !== null && _b !== void 0 ? _b : {},
16739
+ title = _l.title,
16740
+ aspectRatio = _l.aspectRatio,
16741
+ cameraFeedMode = _l.cameraFeedMode,
16742
+ instructions = _l.instructions,
16743
+ contentUrl = _l.contentUrl,
16744
+ content = _l.content,
16745
+ uploadState = _l.uploadState;
16746
+ var _m = useCameraStore(),
16747
+ videoStream = _m.videoStream,
16748
+ cameraReady = _m.cameraReady,
16749
+ cameraAccessDenied = _m.cameraAccessDenied,
16750
+ requestCameraAccess = _m.requestCameraAccess;
16751
+ var _o = React.useState(false),
16752
+ cameraAccessRequested = _o[0],
16753
+ setCameraAccessRequested = _o[1];
16732
16754
  var cameraAccessNeeded =
16733
16755
  // we should force the browser to ask for camera access if...
16734
16756
  uploadState === 'not_started' &&
@@ -16737,14 +16759,14 @@
16737
16759
  // and the user hasn't passed a media blob for the current document...
16738
16760
  !cameraAccessRequested &&
16739
16761
  // and we haven't already tried to force a camera request...
16740
- !((_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.
16762
+ !(videoStream === null || videoStream === void 0 ? void 0 : videoStream.active); // and we don't already have camera access.
16741
16763
  React.useEffect(function requestCameraAccessIfNeeded() {
16742
16764
  if (!cameraAccessNeeded) return;
16743
16765
  setCameraAccessRequested(true);
16744
16766
  requestCameraAccess();
16745
16767
  }, [cameraAccessNeeded, requestCameraAccess]);
16746
16768
  var theme = styled.useTheme();
16747
- 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)";
16769
+ 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)";
16748
16770
  var verbiage = useTranslations(rawVerbiage, {
16749
16771
  headingText: title,
16750
16772
  loadingBtnText: 'Camera initializing...',
@@ -16777,7 +16799,7 @@
16777
16799
  });
16778
16800
  }
16779
16801
  return /*#__PURE__*/React.createElement(PageContainer, {
16780
- className: "flex ".concat((_h = classNames.container) !== null && _h !== void 0 ? _h : '')
16802
+ className: "flex ".concat((_f = classNames.container) !== null && _f !== void 0 ? _f : '')
16781
16803
  }, /*#__PURE__*/React.createElement(CameraFeedWrapper, {
16782
16804
  className: classNames.cameraFeedWrapper,
16783
16805
  "$mode": cameraFeedMode !== null && cameraFeedMode !== void 0 ? cameraFeedMode : 'snapToGuides',
@@ -17202,7 +17224,7 @@
17202
17224
  var _3 = useIdCaptureState(),
17203
17225
  state = _3[0],
17204
17226
  dispatch = _3[1];
17205
- var _4 = React.useContext(CameraStateContext),
17227
+ var _4 = useCameraStore(),
17206
17228
  cameraAccessDenied = _4.cameraAccessDenied,
17207
17229
  requestCameraAccess = _4.requestCameraAccess,
17208
17230
  releaseCameraAccess = _4.releaseCameraAccess;
@@ -18150,7 +18172,13 @@
18150
18172
  modelLoadTimeoutMs = _c === void 0 ? defaultSelfieCaptureModelLoadTimeoutMs : _c,
18151
18173
  _d = _a.requireVerticalFaceCentering,
18152
18174
  requireVerticalFaceCentering = _d === void 0 ? true : _d;
18153
- var _e = React.useContext(CameraStateContext),
18175
+ var _e = useCameraStore(useShallow(function (state) {
18176
+ return {
18177
+ videoRef: state.videoRef,
18178
+ videoLoaded: state.videoLoaded,
18179
+ cameraReady: state.cameraReady
18180
+ };
18181
+ })),
18154
18182
  videoRef = _e.videoRef,
18155
18183
  videoLoaded = _e.videoLoaded,
18156
18184
  cameraReady = _e.cameraReady;
@@ -18158,7 +18186,8 @@
18158
18186
  var onPredictionHandler = React.useRef();
18159
18187
  var _f = useLoadFaceDetector({
18160
18188
  onModelError: onModelError,
18161
- modelLoadTimeoutMs: modelLoadTimeoutMs
18189
+ modelLoadTimeoutMs: modelLoadTimeoutMs,
18190
+ videoRef: videoRef
18162
18191
  }),
18163
18192
  ready = _f.ready,
18164
18193
  modelDownloadProgress = _f.modelDownloadProgress,
@@ -18491,8 +18520,14 @@
18491
18520
  prediction = _t.prediction,
18492
18521
  dispatch = _s[1];
18493
18522
  var lastPredictionCanvas = React.useRef(null);
18494
- var _u = React.useContext(CameraStateContext),
18495
- cameraRef = _u.cameraRef,
18523
+ var _u = useCameraStore(useShallow(function (state) {
18524
+ return {
18525
+ camera: state.camera,
18526
+ cameraReady: state.cameraReady,
18527
+ videoRef: state.videoRef
18528
+ };
18529
+ })),
18530
+ camera = _u.camera,
18496
18531
  videoRef = _u.videoRef;
18497
18532
  var _v = React.useContext(SelfieGuidanceModelsContext),
18498
18533
  onPredictionMade = _v.onPredictionMade,
@@ -18582,7 +18617,7 @@
18582
18617
  face: prediction.face,
18583
18618
  scaling: debugScalingDetails,
18584
18619
  color: satisfied ? 'green' : 'red'
18585
- }))), 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, {
18620
+ }))), 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, {
18586
18621
  onClick: onExit,
18587
18622
  className: classNames.exitCaptureBtn
18588
18623
  }));
@@ -19038,7 +19073,9 @@
19038
19073
  colors = _e === void 0 ? {} : _e,
19039
19074
  _f = _a.verbiage,
19040
19075
  rawVerbiage = _f === void 0 ? {} : _f;
19041
- var requestMicrophoneAccess = React.useContext(CameraStateContext).requestMicrophoneAccess;
19076
+ var requestMicrophoneAccess = useCameraStore(function (state) {
19077
+ return state.requestMicrophoneAccess;
19078
+ });
19042
19079
  assets.imageUrl || (assets.imageUrl = DEFAULT_CDN_URL + '/microphone-disable-icon.svg');
19043
19080
  var verbiage = useTranslations(rawVerbiage, {
19044
19081
  headingText: 'Your microphone permission is disabled',
@@ -19086,7 +19123,13 @@
19086
19123
  colors = _e === void 0 ? {} : _e,
19087
19124
  _f = _a.verbiage,
19088
19125
  rawVerbiage = _f === void 0 ? {} : _f;
19089
- var _g = React.useContext(CameraStateContext),
19126
+ var _g = useCameraStore(useShallow(function (state) {
19127
+ return {
19128
+ cameraReady: state.cameraReady,
19129
+ cameraAccessDenied: state.cameraAccessDenied,
19130
+ microphoneAccessDenied: state.microphoneAccessDenied
19131
+ };
19132
+ })),
19090
19133
  cameraReady = _g.cameraReady,
19091
19134
  cameraAccessDenied = _g.cameraAccessDenied,
19092
19135
  microphoneAccessDenied = _g.microphoneAccessDenied;
@@ -19173,7 +19216,13 @@
19173
19216
  colors = _e === void 0 ? {} : _e,
19174
19217
  _f = _a.verbiage,
19175
19218
  rawVerbiage = _f === void 0 ? {} : _f;
19176
- var _g = React.useContext(CameraStateContext),
19219
+ var _g = useCameraStore(useShallow(function (state) {
19220
+ return {
19221
+ cameraReady: state.cameraReady,
19222
+ cameraAccessDenied: state.cameraAccessDenied,
19223
+ microphoneAccessDenied: state.microphoneAccessDenied
19224
+ };
19225
+ })),
19177
19226
  cameraReady = _g.cameraReady,
19178
19227
  cameraAccessDenied = _g.cameraAccessDenied,
19179
19228
  microphoneAccessDenied = _g.microphoneAccessDenied;
@@ -19390,7 +19439,13 @@
19390
19439
  livenessCheckRequest = _t.livenessCheckRequest,
19391
19440
  setSelfieImage = _t.setSelfieImage,
19392
19441
  logSelfieCaptureAttempt = _t.logSelfieCaptureAttempt;
19393
- var _u = React.useContext(CameraStateContext),
19442
+ var _u = useCameraStore(useShallow(function (state) {
19443
+ return {
19444
+ cameraAccessDenied: state.cameraAccessDenied,
19445
+ requestCameraAccess: state.requestCameraAccess,
19446
+ releaseCameraAccess: state.releaseCameraAccess
19447
+ };
19448
+ })),
19394
19449
  cameraAccessDenied = _u.cameraAccessDenied,
19395
19450
  requestCameraAccess = _u.requestCameraAccess,
19396
19451
  releaseCameraAccess = _u.releaseCameraAccess;
@@ -20879,10 +20934,10 @@
20879
20934
  setSignatureVideoUrl = _e[1];
20880
20935
  var signatureRecorder = React.useRef(null);
20881
20936
  var recordedChunks = React.useRef([]);
20882
- var _f = React.useContext(CameraStateContext),
20883
- cameraRef = _f.cameraRef,
20937
+ var _f = useCameraStore(),
20938
+ camera = _f.camera,
20884
20939
  videoRef = _f.videoRef;
20885
- var _g = useVideoRecorder(cameraRef.current),
20940
+ var _g = useVideoRecorder(camera),
20886
20941
  isRecordingVideo = _g.isRecordingVideo,
20887
20942
  startRecordingVideo = _g.startRecordingVideo,
20888
20943
  stopRecordingVideo = _g.stopRecordingVideo,
@@ -20950,8 +21005,8 @@
20950
21005
  var animationFrame = React.useRef(0);
20951
21006
  React.useEffect(function () {
20952
21007
  var _a;
20953
- if (!signaturePad.current || !videoRef.current || !outputCanvas.current || !cameraRef.current || !isRecording || !isRecordingVideo) return;
20954
- var _b = [cameraRef.current.width, cameraRef.current.height],
21008
+ if (!signaturePad.current || !videoRef.current || !outputCanvas.current || !camera || !isRecording || !isRecordingVideo) return;
21009
+ var _b = [camera.width, camera.height],
20955
21010
  w = _b[0],
20956
21011
  h = _b[1];
20957
21012
  var isPortrait = typeof window !== 'undefined' && window.innerWidth < window.innerHeight;
@@ -20984,7 +21039,7 @@
20984
21039
  return function () {
20985
21040
  cancelAnimationFrame(animationFrame.current);
20986
21041
  };
20987
- }, [cameraRef, isRecording, isRecordingVideo, videoRef]);
21042
+ }, [camera, isRecording, isRecordingVideo, videoRef]);
20988
21043
  var onAcceptClicked = React.useCallback(function () {
20989
21044
  return __awaiter(_this, void 0, void 0, function () {
20990
21045
  var imageUrl;
@@ -21113,27 +21168,29 @@
21113
21168
  var templateObject_1$9, templateObject_2$8, templateObject_3$8, templateObject_4$3, templateObject_5$2, templateObject_6$2, templateObject_7$1;
21114
21169
 
21115
21170
  var VideoSignatureCapture = function VideoSignatureCapture(_a) {
21116
- var _b, _c, _d;
21171
+ var _b;
21117
21172
  var onVideoCaptured = _a.onVideoCaptured,
21118
21173
  onFaceNotDetected = _a.onFaceNotDetected,
21119
21174
  onExit = _a.onExit,
21120
21175
  guidesComponent = _a.guidesComponent,
21121
- _e = _a.classNames,
21122
- classNames = _e === void 0 ? {} : _e,
21123
- _f = _a.colors,
21124
- colors = _f === void 0 ? {} : _f,
21125
- _g = _a.verbiage,
21126
- rawVerbiage = _g === void 0 ? {} : _g,
21127
- _h = _a.debugMode,
21128
- debugMode = _h === void 0 ? false : _h;
21129
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
21176
+ _c = _a.classNames,
21177
+ classNames = _c === void 0 ? {} : _c,
21178
+ _d = _a.colors,
21179
+ colors = _d === void 0 ? {} : _d,
21180
+ _e = _a.verbiage,
21181
+ rawVerbiage = _e === void 0 ? {} : _e,
21182
+ _f = _a.debugMode,
21183
+ debugMode = _f === void 0 ? false : _f;
21184
+ var camera = useCameraStore(function (state) {
21185
+ return state.camera;
21186
+ });
21130
21187
  var onPredictionMade = React.useContext(SelfieGuidanceModelsContext).onPredictionMade;
21131
- var _j = useVideoSignatureContext(),
21132
- signatureData = _j.signatureData,
21133
- signatureDataUrl = _j.signatureDataUrl,
21134
- signatureVideoData = _j.signatureVideoData,
21135
- startRecording = _j.startRecording,
21136
- stopRecording = _j.stopRecording;
21188
+ var _g = useVideoSignatureContext(),
21189
+ signatureData = _g.signatureData,
21190
+ signatureDataUrl = _g.signatureDataUrl,
21191
+ signatureVideoData = _g.signatureVideoData,
21192
+ startRecording = _g.startRecording,
21193
+ stopRecording = _g.stopRecording;
21137
21194
  React.useEffect(function () {
21138
21195
  startRecording();
21139
21196
  return function () {
@@ -21150,9 +21207,9 @@
21150
21207
  onVideoCaptured === null || onVideoCaptured === void 0 ? void 0 : onVideoCaptured(signatureVideoData, signatureData, signatureDataUrl);
21151
21208
  }
21152
21209
  }, [onVideoCaptured, signatureData, signatureDataUrl, signatureVideoData]);
21153
- var _k = React.useState(0),
21154
- numFramesWithoutFaces = _k[0],
21155
- setNumFramesWithoutFaces = _k[1];
21210
+ var _h = React.useState(0),
21211
+ numFramesWithoutFaces = _h[0],
21212
+ setNumFramesWithoutFaces = _h[1];
21156
21213
  React.useEffect(function () {
21157
21214
  onPredictionMade(function (_a) {
21158
21215
  var face = _a.face;
@@ -21179,7 +21236,7 @@
21179
21236
  }, verbiage.guidanceMessageText))), /*#__PURE__*/React.createElement(GuidesComponent, {
21180
21237
  classNames: classNames.videoSignatureGuidesClassNames,
21181
21238
  status: "success"
21182
- }), 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, {
21239
+ }), 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, {
21183
21240
  onClick: onExit,
21184
21241
  className: classNames.exitCaptureBtn
21185
21242
  }));
@@ -21273,7 +21330,13 @@
21273
21330
  setSignatureData = _l.setSignatureData,
21274
21331
  setSignatureVideoUrl = _l.setSignatureVideoUrl,
21275
21332
  logSelfieCaptureAttempt = _l.logSelfieCaptureAttempt;
21276
- var _m = React.useContext(CameraStateContext),
21333
+ var _m = useCameraStore(useShallow(function (state) {
21334
+ return {
21335
+ cameraAccessDenied: state.cameraAccessDenied,
21336
+ requestCameraAccess: state.requestCameraAccess,
21337
+ releaseCameraAccess: state.releaseCameraAccess
21338
+ };
21339
+ })),
21277
21340
  cameraAccessDenied = _m.cameraAccessDenied,
21278
21341
  requestCameraAccess = _m.requestCameraAccess,
21279
21342
  releaseCameraAccess = _m.releaseCameraAccess;
@@ -21433,27 +21496,29 @@
21433
21496
  };
21434
21497
 
21435
21498
  var IdVideoCaptureGuides = function IdVideoCaptureGuides(_a) {
21436
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
21437
- var _0 = _a.requestedAction,
21438
- requestedAction = _0 === void 0 ? 'SHOW_ID_FRONT' : _0,
21439
- _1 = _a.satisfied,
21440
- satisfied = _1 === void 0 ? false : _1,
21441
- _2 = _a.faceGuideStatus,
21442
- faceGuideStatus = _2 === void 0 ? 'success' : _2,
21499
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
21500
+ var _z = _a.requestedAction,
21501
+ requestedAction = _z === void 0 ? 'SHOW_ID_FRONT' : _z,
21502
+ _0 = _a.satisfied,
21503
+ satisfied = _0 === void 0 ? false : _0,
21504
+ _1 = _a.faceGuideStatus,
21505
+ faceGuideStatus = _1 === void 0 ? 'success' : _1,
21443
21506
  faceGuideBorderWidth = _a.faceGuideBorderWidth,
21444
21507
  faceGuideBorderColor = _a.faceGuideBorderColor,
21445
- _3 = _a.idCardGuideStatus,
21446
- idCardGuideStatus = _3 === void 0 ? 'ready' : _3,
21508
+ _2 = _a.idCardGuideStatus,
21509
+ idCardGuideStatus = _2 === void 0 ? 'ready' : _2,
21447
21510
  idCardGuideBorderWidth = _a.idCardGuideBorderWidth,
21448
21511
  idCardGuideBorderColor = _a.idCardGuideBorderColor,
21449
21512
  idCardCaptureProgress = _a.idCardCaptureProgress,
21450
- _4 = _a.idCardCaptureGuideImages,
21451
- userSuppliedImages = _4 === void 0 ? defaultIdCaptureGuideImages : _4,
21452
- _5 = _a.classNames,
21453
- classNames = _5 === void 0 ? {} : _5,
21454
- _6 = _a.verbiage,
21455
- rawVerbiage = _6 === void 0 ? {} : _6;
21456
- var cameraRef = React.useContext(CameraStateContext).cameraRef;
21513
+ _3 = _a.idCardCaptureGuideImages,
21514
+ userSuppliedImages = _3 === void 0 ? defaultIdCaptureGuideImages : _3,
21515
+ _4 = _a.classNames,
21516
+ classNames = _4 === void 0 ? {} : _4,
21517
+ _5 = _a.verbiage,
21518
+ rawVerbiage = _5 === void 0 ? {} : _5;
21519
+ var isRearFacing = useCameraStore(function (state) {
21520
+ return state.isRearFacing;
21521
+ });
21457
21522
  var verbiage = useTranslations(rawVerbiage, {
21458
21523
  idFrontInstructionText: 'Display the front of your ID card...',
21459
21524
  idBackInstructionText: 'Display the back of your ID card...',
@@ -21466,17 +21531,17 @@
21466
21531
  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';
21467
21532
  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;
21468
21533
  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';
21469
- var _7 = useResizeObserver(),
21470
- idCardGuideRef = _7.ref,
21471
- _8 = _7.width,
21472
- idCardGuideWidth = _8 === void 0 ? 0 : _8,
21473
- _9 = _7.height,
21474
- idCardGuideHeight = _9 === void 0 ? 0 : _9;
21534
+ var _6 = useResizeObserver(),
21535
+ idCardGuideRef = _6.ref,
21536
+ _7 = _6.width,
21537
+ idCardGuideWidth = _7 === void 0 ? 0 : _7,
21538
+ _8 = _6.height,
21539
+ idCardGuideHeight = _8 === void 0 ? 0 : _8;
21475
21540
  var idCaptureGuideImages = useGuideImages(userSuppliedImages);
21476
21541
  var idCaptureGuideImagesByUrl = useGuideImagesByUrl(idCaptureGuideImages);
21477
- var _10 = React.useState(undefined),
21478
- aspectRatio = _10[0],
21479
- setAspectRatio = _10[1];
21542
+ var _9 = React.useState(undefined),
21543
+ aspectRatio = _9[0],
21544
+ setAspectRatio = _9[1];
21480
21545
  var onImageLoaded = React.useCallback(function (e) {
21481
21546
  var _a, _b, _c, _d;
21482
21547
  var img = e.currentTarget;
@@ -21523,7 +21588,7 @@
21523
21588
  }, /*#__PURE__*/React.createElement(IdCardGuideImage, {
21524
21589
  alt: "",
21525
21590
  className: classNames.idCardGuideImage,
21526
- "$isMirrored": !((_v = cameraRef.current) === null || _v === void 0 ? void 0 : _v.isRearFacing),
21591
+ "$isMirrored": !isRearFacing,
21527
21592
  style: idCardImageStyle,
21528
21593
  src: requestedAction === 'SHOW_ID_BACK' ? idCaptureGuideImages.landscape.SHOW_ID_BACK.url : idCaptureGuideImages.landscape.SHOW_ID_FRONT.url,
21529
21594
  onLoad: onImageLoaded
@@ -21537,8 +21602,8 @@
21537
21602
  className: classNames.idCardGuideInstructionsContainer
21538
21603
  }, /*#__PURE__*/React.createElement(IdCardGuideInstructions, {
21539
21604
  className: classNames.idCardGuideInstructions,
21540
- "$textColor": (_x = (_w = theme.idVideoCapture) === null || _w === void 0 ? void 0 : _w.idCardGuides) === null || _x === void 0 ? void 0 : _x.instructionsTextColor,
21541
- "$background": (_z = (_y = theme.idVideoCapture) === null || _y === void 0 ? void 0 : _y.idCardGuides) === null || _z === void 0 ? void 0 : _z.instructionsBackgroundColor
21605
+ "$textColor": (_w = (_v = theme.idVideoCapture) === null || _v === void 0 ? void 0 : _v.idCardGuides) === null || _w === void 0 ? void 0 : _w.instructionsTextColor,
21606
+ "$background": (_y = (_x = theme.idVideoCapture) === null || _x === void 0 ? void 0 : _x.idCardGuides) === null || _y === void 0 ? void 0 : _y.instructionsBackgroundColor
21542
21607
  }, instructionText))))));
21543
21608
  };
21544
21609
  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) {
@@ -21683,99 +21748,100 @@
21683
21748
  flipShortcutThreshold: 0.7
21684
21749
  };
21685
21750
  var IdVideoCapture = function IdVideoCapture(_a) {
21686
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
21751
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
21687
21752
  var onComplete = _a.onComplete,
21688
21753
  onIdFrontImageCaptured = _a.onIdFrontImageCaptured,
21689
21754
  onIdBackImageCaptured = _a.onIdBackImageCaptured,
21690
21755
  onFaceNotDetected = _a.onFaceNotDetected,
21691
21756
  onRecordingFailed = _a.onRecordingFailed,
21692
21757
  onExitCapture = _a.onExitCapture,
21693
- _x = _a.idCaptureModelsEnabled,
21694
- idCaptureModelsEnabled = _x === void 0 ? true : _x,
21695
- _y = _a.idCardCaptureGuideImages,
21696
- idCardCaptureGuideImages = _y === void 0 ? defaultIdCaptureGuideImages : _y,
21697
- _z = _a.idCardFrontDelay,
21698
- idCardFrontDelay = _z === void 0 ? 1000 : _z,
21699
- _0 = _a.videoIdCaptureThresholds,
21700
- videoIdCaptureThresholds = _0 === void 0 ? defaultVideoIdCaptureThresholds : _0,
21701
- _1 = _a.skipShowIdCardBack,
21702
- skipShowIdCardBack = _1 === void 0 ? false : _1,
21703
- _2 = _a.captureCountdownSeconds,
21704
- captureCountdownSeconds = _2 === void 0 ? 3 : _2,
21758
+ _w = _a.idCaptureModelsEnabled,
21759
+ idCaptureModelsEnabled = _w === void 0 ? true : _w,
21760
+ _x = _a.idCardCaptureGuideImages,
21761
+ idCardCaptureGuideImages = _x === void 0 ? defaultIdCaptureGuideImages : _x,
21762
+ _y = _a.idCardFrontDelay,
21763
+ idCardFrontDelay = _y === void 0 ? 1000 : _y,
21764
+ _z = _a.videoIdCaptureThresholds,
21765
+ videoIdCaptureThresholds = _z === void 0 ? defaultVideoIdCaptureThresholds : _z,
21766
+ _0 = _a.skipShowIdCardBack,
21767
+ skipShowIdCardBack = _0 === void 0 ? false : _0,
21768
+ _1 = _a.captureCountdownSeconds,
21769
+ captureCountdownSeconds = _1 === void 0 ? 3 : _1,
21705
21770
  readTextPrompt = _a.readTextPrompt,
21706
- _3 = _a.readTextTimeoutDurationMs,
21707
- readTextTimeoutDurationMs = _3 === void 0 ? 15000 : _3,
21708
- _4 = _a.readTextMinReadingMs,
21709
- readTextMinReadingMs = _4 === void 0 ? 10000 : _4,
21710
- _5 = _a.disableFaceDetectionWhileAudioCapture,
21711
- disableFaceDetectionWhileAudioCapture = _5 === void 0 ? false : _5,
21712
- _6 = _a.disableFaceDetectionWhileAudioCaptureMsDelay,
21713
- disableFaceDetectionWhileAudioCaptureMsDelay = _6 === void 0 ? 2000 : _6,
21714
- _7 = _a.mergeAVStreams,
21715
- mergeAVStreams = _7 === void 0 ? false : _7,
21716
- _8 = _a.classNames,
21717
- classNames = _8 === void 0 ? {} : _8,
21718
- _9 = _a.colors,
21719
- colors = _9 === void 0 ? {} : _9,
21720
- _10 = _a.verbiage,
21721
- rawVerbiage = _10 === void 0 ? {} : _10,
21722
- _11 = _a.debugMode,
21723
- debugMode = _11 === void 0 ? false : _11;
21724
- var _12 = useResizeObserver(),
21725
- ref = _12.ref,
21726
- _13 = _12.width,
21727
- width = _13 === void 0 ? 1 : _13,
21728
- _14 = _12.height,
21729
- height = _14 === void 0 ? 1 : _14;
21730
- var _15 = React.useContext(CameraStateContext),
21731
- cameraRef = _15.cameraRef,
21732
- videoRef = _15.videoRef,
21733
- videoLoaded = _15.videoLoaded,
21734
- cameraReady = _15.cameraReady,
21735
- microphoneReady = _15.microphoneReady,
21736
- audioStream = _15.audioStream,
21737
- setVideoLoaded = _15.setVideoLoaded;
21738
- var _16 = React.useState([]),
21739
- detectedObjects = _16[0],
21740
- setDetectedObjects = _16[1];
21741
- var _17 = React.useState(null),
21742
- face = _17[0],
21743
- setFace = _17[1];
21744
- var _18 = React.useContext(IdCaptureModelsContext),
21745
- idModelsReady = _18.ready,
21746
- startIdModels = _18.start,
21747
- stopIdModels = _18.stop,
21748
- onIdPredictionMade = _18.onPredictionMade,
21749
- setThresholds = _18.setThresholds,
21750
- setDocumentDetectionBoundaries = _18.setDocumentDetectionBoundaries,
21751
- bestFrameDetails = _18.bestFrameDetails,
21752
- resetBestFrame = _18.resetBestFrame,
21753
- idModelError = _18.modelError;
21754
- var _19 = React.useState(null),
21755
- videoStartsAt = _19[0],
21756
- setVideoStartsAt = _19[1];
21757
- var _20 = React.useContext(SubmissionContext),
21758
- setIdCaptureVideoAudioStartsAt = _20.setIdCaptureVideoAudioStartsAt,
21759
- setExpectedAudioText = _20.setExpectedAudioText;
21760
- var _21 = React.useContext(SelfieGuidanceModelsContext),
21761
- startSelfieGuidance = _21.start,
21762
- stopSelfieGuidance = _21.stop,
21763
- onSelfiePredictionMade = _21.onPredictionMade,
21764
- selfieModelError = _21.error;
21765
- var _22 = useVideoRecorder(cameraRef.current, audioStream, mergeAVStreams),
21766
- isRecordingVideo = _22.isRecordingVideo,
21767
- startRecordingVideo = _22.startRecordingVideo,
21768
- startRecordingAudio = _22.startRecordingAudio,
21769
- stopRecordingVideo = _22.stopRecordingVideo,
21770
- stopRecordingAudio = _22.stopRecordingAudio,
21771
- videoRecordingUnintentionallyStopped = _22.videoRecordingUnintentionallyStopped,
21772
- audioRecordingUnintentionallyStopped = _22.audioRecordingUnintentionallyStopped,
21773
- videoUrl = _22.videoUrl,
21774
- audioUrl = _22.audioUrl;
21771
+ _2 = _a.readTextTimeoutDurationMs,
21772
+ readTextTimeoutDurationMs = _2 === void 0 ? 15000 : _2,
21773
+ _3 = _a.readTextMinReadingMs,
21774
+ readTextMinReadingMs = _3 === void 0 ? 10000 : _3,
21775
+ _4 = _a.disableFaceDetectionWhileAudioCapture,
21776
+ disableFaceDetectionWhileAudioCapture = _4 === void 0 ? false : _4,
21777
+ _5 = _a.disableFaceDetectionWhileAudioCaptureMsDelay,
21778
+ disableFaceDetectionWhileAudioCaptureMsDelay = _5 === void 0 ? 2000 : _5,
21779
+ _6 = _a.mergeAVStreams,
21780
+ mergeAVStreams = _6 === void 0 ? false : _6,
21781
+ _7 = _a.classNames,
21782
+ classNames = _7 === void 0 ? {} : _7,
21783
+ _8 = _a.colors,
21784
+ colors = _8 === void 0 ? {} : _8,
21785
+ _9 = _a.verbiage,
21786
+ rawVerbiage = _9 === void 0 ? {} : _9,
21787
+ _10 = _a.debugMode,
21788
+ debugMode = _10 === void 0 ? false : _10;
21789
+ var _11 = useResizeObserver(),
21790
+ ref = _11.ref,
21791
+ _12 = _11.width,
21792
+ width = _12 === void 0 ? 1 : _12,
21793
+ _13 = _11.height,
21794
+ height = _13 === void 0 ? 1 : _13;
21795
+ var _14 = useCameraStore(),
21796
+ camera = _14.camera,
21797
+ videoRef = _14.videoRef,
21798
+ videoLoaded = _14.videoLoaded,
21799
+ cameraReady = _14.cameraReady,
21800
+ microphoneReady = _14.microphoneReady,
21801
+ audioStream = _14.audioStream,
21802
+ isRearFacing = _14.isRearFacing,
21803
+ releaseCameraAccess = _14.releaseCameraAccess;
21804
+ var _15 = React.useState([]),
21805
+ detectedObjects = _15[0],
21806
+ setDetectedObjects = _15[1];
21807
+ var _16 = React.useState(null),
21808
+ face = _16[0],
21809
+ setFace = _16[1];
21810
+ var _17 = React.useContext(IdCaptureModelsContext),
21811
+ idModelsReady = _17.ready,
21812
+ startIdModels = _17.start,
21813
+ stopIdModels = _17.stop,
21814
+ onIdPredictionMade = _17.onPredictionMade,
21815
+ setThresholds = _17.setThresholds,
21816
+ setDocumentDetectionBoundaries = _17.setDocumentDetectionBoundaries,
21817
+ bestFrameDetails = _17.bestFrameDetails,
21818
+ resetBestFrame = _17.resetBestFrame,
21819
+ idModelError = _17.modelError;
21820
+ var _18 = React.useState(null),
21821
+ videoStartsAt = _18[0],
21822
+ setVideoStartsAt = _18[1];
21823
+ var _19 = React.useContext(SubmissionContext),
21824
+ setIdCaptureVideoAudioStartsAt = _19.setIdCaptureVideoAudioStartsAt,
21825
+ setExpectedAudioText = _19.setExpectedAudioText;
21826
+ var _20 = React.useContext(SelfieGuidanceModelsContext),
21827
+ startSelfieGuidance = _20.start,
21828
+ stopSelfieGuidance = _20.stop,
21829
+ onSelfiePredictionMade = _20.onPredictionMade,
21830
+ selfieModelError = _20.error;
21831
+ var _21 = useVideoRecorder(camera, audioStream, mergeAVStreams),
21832
+ isRecordingVideo = _21.isRecordingVideo,
21833
+ startRecordingVideo = _21.startRecordingVideo,
21834
+ startRecordingAudio = _21.startRecordingAudio,
21835
+ stopRecordingVideo = _21.stopRecordingVideo,
21836
+ stopRecordingAudio = _21.stopRecordingAudio,
21837
+ videoRecordingUnintentionallyStopped = _21.videoRecordingUnintentionallyStopped,
21838
+ audioRecordingUnintentionallyStopped = _21.audioRecordingUnintentionallyStopped,
21839
+ videoUrl = _21.videoUrl,
21840
+ audioUrl = _21.audioUrl;
21775
21841
  var countdownTimeoutRef = React.useRef(undefined);
21776
- var _23 = React.useState(-1),
21777
- countdownRemaining = _23[0],
21778
- setCountdownRemaining = _23[1];
21842
+ var _22 = React.useState(-1),
21843
+ countdownRemaining = _22[0],
21844
+ setCountdownRemaining = _22[1];
21779
21845
  React.useEffect(function () {
21780
21846
  if (!isRecordingVideo && !videoUrl) {
21781
21847
  startRecordingVideo();
@@ -21786,18 +21852,18 @@
21786
21852
  var needsAudio = !!readTextPrompt && !mergeAVStreams;
21787
21853
  var audioReady = !needsAudio || audioUrl;
21788
21854
  if (videoUrl && audioReady) {
21789
- setVideoLoaded(false);
21855
+ releaseCameraAccess();
21790
21856
  onComplete === null || onComplete === void 0 ? void 0 : onComplete(videoUrl, audioUrl);
21791
21857
  }
21792
- }, [audioUrl, isRecordingVideo, mergeAVStreams, onComplete, readTextPrompt, setVideoLoaded, startRecordingVideo, videoUrl]);
21858
+ }, [audioUrl, isRecordingVideo, mergeAVStreams, onComplete, readTextPrompt, releaseCameraAccess, startRecordingVideo, videoUrl]);
21793
21859
  React.useEffect(function () {
21794
21860
  if (videoRecordingUnintentionallyStopped || audioRecordingUnintentionallyStopped) {
21795
21861
  onRecordingFailed === null || onRecordingFailed === void 0 ? void 0 : onRecordingFailed();
21796
21862
  }
21797
21863
  }, [audioRecordingUnintentionallyStopped, onRecordingFailed, videoRecordingUnintentionallyStopped]);
21798
- var _24 = React.useState('SHOW_ID_FRONT'),
21799
- requestedAction = _24[0],
21800
- setRequestedAction = _24[1];
21864
+ var _23 = React.useState('SHOW_ID_FRONT'),
21865
+ requestedAction = _23[0],
21866
+ setRequestedAction = _23[1];
21801
21867
  var shouldRunIdModels = idCaptureModelsEnabled && videoLoaded && cameraReady && idModelsReady && !idModelError && requestedAction !== 'READ_TEXT' && (!readTextPrompt || microphoneReady);
21802
21868
  React.useEffect(function startModelsWhenCapturing() {
21803
21869
  if (!shouldRunIdModels) return;
@@ -21817,18 +21883,18 @@
21817
21883
  bottom: 1
21818
21884
  });
21819
21885
  }, [setDocumentDetectionBoundaries]);
21820
- var _25 = React.useState(0),
21821
- currentDetectionScore = _25[0],
21822
- setCurrentDetectionScore = _25[1];
21823
- var _26 = React.useState('none'),
21824
- currentDetectedDocumentType = _26[0],
21825
- setCurrentDetectedDocumentType = _26[1];
21886
+ var _24 = React.useState(0),
21887
+ currentDetectionScore = _24[0],
21888
+ setCurrentDetectionScore = _24[1];
21889
+ var _25 = React.useState('none'),
21890
+ currentDetectedDocumentType = _25[0],
21891
+ setCurrentDetectedDocumentType = _25[1];
21892
+ var _26 = React.useState(0),
21893
+ currentFocusScore = _26[0],
21894
+ setCurrentFocusScore = _26[1];
21826
21895
  var _27 = React.useState(0),
21827
- currentFocusScore = _27[0],
21828
- setCurrentFocusScore = _27[1];
21829
- var _28 = React.useState(0),
21830
- goodFramesCount = _28[0],
21831
- setGoodFramesCount = _28[1];
21896
+ goodFramesCount = _27[0],
21897
+ setGoodFramesCount = _27[1];
21832
21898
  var goodFramesThreshold = requestedAction === 'SHOW_ID_FRONT' ? videoIdCaptureThresholds.goodFrames.idCardFront : videoIdCaptureThresholds.goodFrames.idCardBack;
21833
21899
  var goodFramesThresholdMet = goodFramesCount >= goodFramesThreshold;
21834
21900
  React.useEffect(function () {
@@ -21849,9 +21915,9 @@
21849
21915
  } : 0);
21850
21916
  });
21851
21917
  }, [idCaptureModelsEnabled, onIdPredictionMade, idModelError, requestedAction, videoIdCaptureThresholds.flipShortcutThreshold]);
21852
- var _29 = React.useState(null),
21853
- idFrontCaptureStartedAt = _29[0],
21854
- setFirstGoodFrameTime = _29[1];
21918
+ var _28 = React.useState(null),
21919
+ idFrontCaptureStartedAt = _28[0],
21920
+ setFirstGoodFrameTime = _28[1];
21855
21921
  React.useEffect(function () {
21856
21922
  if (goodFramesCount === 1) setFirstGoodFrameTime(new Date().getTime());
21857
21923
  }, [goodFramesCount]);
@@ -21872,9 +21938,9 @@
21872
21938
  var frameHeight = (_e = (_d = videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) !== null && _e !== void 0 ? _e : 0;
21873
21939
  var faceBox = face === null || face === void 0 ? void 0 : face.box;
21874
21940
  var faceCentered = !faceBox || !frameWidth || faceBox.xMin > frameWidth * edgeBoundary && faceBox.yMin > frameHeight * edgeBoundary && faceBox.xMax < frameWidth * (1 - edgeBoundary) && faceBox.yMax < frameHeight * (1 - edgeBoundary);
21875
- var _30 = React.useState(),
21876
- countdownStartedAt = _30[0],
21877
- setCountdownStartedAt = _30[1];
21941
+ var _29 = React.useState(),
21942
+ countdownStartedAt = _29[0],
21943
+ setCountdownStartedAt = _29[1];
21878
21944
  var photoCanvas = React.useRef(null);
21879
21945
  var frameLock = React.useRef(false);
21880
21946
  var captureFrame = React.useCallback(function () {
@@ -21997,9 +22063,9 @@
21997
22063
  stopSelfieGuidance();
21998
22064
  };
21999
22065
  }, [startSelfieGuidance, stopSelfieGuidance]);
22000
- var _31 = React.useState(0),
22001
- numFramesWithoutFaces = _31[0],
22002
- setNumFramesWithoutFaces = _31[1];
22066
+ var _30 = React.useState(0),
22067
+ numFramesWithoutFaces = _30[0],
22068
+ setNumFramesWithoutFaces = _30[1];
22003
22069
  onSelfiePredictionMade(f(React.useCallback(function (_a) {
22004
22070
  var face = _a.face;
22005
22071
  if (selfieModelError) return;
@@ -22015,12 +22081,12 @@
22015
22081
  }
22016
22082
  }, [disableFaceDetectionWhileAudioCapture, disableFaceDetectionWhileAudioCaptureMsDelay, numFramesWithoutFaces, onFaceNotDetected, timeoutStartedAt]);
22017
22083
  var theme = styled.useTheme();
22018
- var _32 = useTranslations(rawVerbiage, {
22084
+ var _31 = useTranslations(rawVerbiage, {
22019
22085
  faceNotCenteredText: 'Please move your face to the center...',
22020
22086
  captureBtnText: 'Capture'
22021
22087
  }),
22022
- captureBtnText = _32.captureBtnText,
22023
- faceNotCenteredText = _32.faceNotCenteredText;
22088
+ captureBtnText = _31.captureBtnText,
22089
+ faceNotCenteredText = _31.faceNotCenteredText;
22024
22090
  var debugScalingDetails = useDebugScalingDetails({
22025
22091
  enabled: debugMode,
22026
22092
  pageWidth: width,
@@ -22056,15 +22122,14 @@
22056
22122
  faceGuideBorderColor: satisfied ? colors.guidesSatisfiedColor : colors.guidesUnsatisfiedColor,
22057
22123
  idCardGuideBorderColor: satisfied ? colors.guidesSatisfiedColor : colors.guidesUnsatisfiedColor
22058
22124
  }), debugMode && capturingId && ( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ObjectDetectionDebugOverlayDiv, {
22059
- "$flipX": !((_l = cameraRef.current) === null || _l === void 0 ? void 0 : _l.isRearFacing)
22125
+ "$flipX": !isRearFacing
22060
22126
  }, detectedObjects.map(function (obj, i) {
22061
- var _a;
22062
22127
  return /*#__PURE__*/React.createElement(IdCaptureDetectedObjectDebugBox, {
22063
22128
  key: i,
22064
22129
  obj: obj,
22065
22130
  scaling: debugScalingDetails,
22066
22131
  color: "blue",
22067
- flipX: !((_a = cameraRef.current) === null || _a === void 0 ? void 0 : _a.isRearFacing)
22132
+ flipX: !isRearFacing
22068
22133
  });
22069
22134
  })), /*#__PURE__*/React.createElement(DebugBoundingBoxOverlay, null, face && ( /*#__PURE__*/React.createElement(SelfieCaptureFaceDebugBox, {
22070
22135
  face: face,
@@ -22073,9 +22138,9 @@
22073
22138
  className: classNames.guidanceMessageContainer
22074
22139
  }, /*#__PURE__*/React.createElement(GuidanceMessage, {
22075
22140
  className: classNames.guidanceMessage,
22076
- "$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',
22077
- "$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'
22078
- }, 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, {
22141
+ "$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',
22142
+ "$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'
22143
+ }, 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, {
22079
22144
  className: classNames.countdownContainer
22080
22145
  }, /*#__PURE__*/React.createElement(Countdown, {
22081
22146
  className: classNames.countdown
@@ -22338,7 +22403,7 @@
22338
22403
  });
22339
22404
  setCaptureState('CAPTURING_ID');
22340
22405
  }, []);
22341
- var isCapturingId = ['LOADING', 'CAPTURING_ID'].includes(captureState);
22406
+ var isCapturingId = !skipIdCapture && ['LOADING', 'CAPTURING_ID'].includes(captureState);
22342
22407
  React.useEffect(function () {
22343
22408
  if (submissionStatus === SubmissionStatus.SUBMITTING) releaseCameraAccess();
22344
22409
  }, [submissionStatus]);
@@ -22372,16 +22437,14 @@
22372
22437
  className: "flex"
22373
22438
  }, /*#__PURE__*/React.createElement(Spinner$1, null));
22374
22439
  }
22375
- return /*#__PURE__*/React.createElement(CameraProvider, {
22376
- key: "".concat(isCapturingId ? 'id' : 'selfie', "-camera-").concat(attempt),
22377
- preferContinuityCamera: isCapturingId,
22440
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22441
+ preferIphoneContinuityCamera: isCapturingId,
22378
22442
  preferFrontFacingCamera: !isCapturingId,
22379
22443
  requireMicrophoneAccess: !isCapturingId && !!readTextPrompt,
22380
22444
  maxVideoWidth: isCapturingId ? 1920 : 1280,
22381
22445
  maxFps: isCapturingId ? 60 : 30,
22382
22446
  onCameraAccessDenied: onCameraAccessDenied,
22383
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22384
- debugMode: debugMode
22447
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22385
22448
  }, /*#__PURE__*/React.createElement(IdCaptureModelsProvider, {
22386
22449
  autoStart: false,
22387
22450
  documentDetectionModelUrl: (_g = (_f = idCaptureProps.assets) === null || _f === void 0 ? void 0 : _f.documentDetectionModelUrl) !== null && _g !== void 0 ? _g : '',
@@ -22507,17 +22570,15 @@
22507
22570
  _o = _a.captureSignatureVideo,
22508
22571
  captureSignatureVideo = _o === void 0 ? false : _o,
22509
22572
  onCameraAccessDenied = _a.onCameraAccessDenied,
22510
- onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied,
22511
- _p = _a.debugMode,
22512
- debugMode = _p === void 0 ? false : _p;
22513
- var _q = React.useContext(SubmissionContext),
22514
- submit = _q.submit,
22515
- submissionStatus = _q.submissionStatus,
22516
- setSignatureData = _q.setSignatureData,
22517
- setAdditionalDocuments = _q.setAdditionalDocuments;
22518
- var _r = React.useState(0),
22519
- checkIndex = _r[0],
22520
- setCheckIndex = _r[1];
22573
+ onMicrophoneAccessDenied = _a.onMicrophoneAccessDenied;
22574
+ var _p = React.useContext(SubmissionContext),
22575
+ submit = _p.submit,
22576
+ submissionStatus = _p.submissionStatus,
22577
+ setSignatureData = _p.setSignatureData,
22578
+ setAdditionalDocuments = _p.setAdditionalDocuments;
22579
+ var _q = React.useState(0),
22580
+ checkIndex = _q[0],
22581
+ setCheckIndex = _q[1];
22521
22582
  var checks = React.useMemo(function () {
22522
22583
  var _a, _b;
22523
22584
  var checks = __spreadArray([], userChecks, true);
@@ -22595,16 +22656,6 @@
22595
22656
  return i + 1;
22596
22657
  });
22597
22658
  }, [onVideoSignatureCompleteProp]);
22598
- var _s = React.useState(0),
22599
- videoSignatureAttempts = _s[0],
22600
- setVideoSignatureAttempts = _s[1];
22601
- var onVideoSignatureRetryProp = videoSignatureCaptureProps.onRetryClicked;
22602
- var onVideoSignatureRetry = React.useCallback(function () {
22603
- onVideoSignatureRetryProp === null || onVideoSignatureRetryProp === void 0 ? void 0 : onVideoSignatureRetryProp();
22604
- setVideoSignatureAttempts(function (n) {
22605
- return n + 1;
22606
- });
22607
- }, [onVideoSignatureRetryProp]);
22608
22659
  var onAdditionalDocumentCaptureCompleteProp = additionalDocumentCaptureProps === null || additionalDocumentCaptureProps === void 0 ? void 0 : additionalDocumentCaptureProps.onComplete;
22609
22660
  var onAdditionalDocumentCaptureComplete = React.useCallback(function (uploadedDocuments) {
22610
22661
  setAdditionalDocuments(uploadedDocuments);
@@ -22633,11 +22684,9 @@
22633
22684
  }
22634
22685
  switch (checks[checkIndex]) {
22635
22686
  case 'IdCapture':
22636
- return /*#__PURE__*/React.createElement(CameraProvider, {
22637
- key: "IdCaptureCamera",
22687
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22638
22688
  onCameraAccessDenied: onCameraAccessDenied,
22639
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22640
- debugMode: debugMode
22689
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22641
22690
  }, /*#__PURE__*/React.createElement(IdCaptureModelsProvider, {
22642
22691
  autoStart: false,
22643
22692
  documentDetectionModelUrl: (_d = (_c = idCaptureProps.assets) === null || _c === void 0 ? void 0 : _c.documentDetectionModelUrl) !== null && _d !== void 0 ? _d : '',
@@ -22654,13 +22703,11 @@
22654
22703
  onMicrophoneAccessDenied: onMicrophoneAccessDenied
22655
22704
  }));
22656
22705
  case 'FaceLiveness':
22657
- return /*#__PURE__*/React.createElement(CameraProvider, {
22658
- key: "FaceLivenessCamera",
22706
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22659
22707
  preferFrontFacingCamera: true,
22660
- preferContinuityCamera: false,
22708
+ preferIphoneContinuityCamera: false,
22661
22709
  onCameraAccessDenied: onCameraAccessDenied,
22662
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22663
- debugMode: debugMode
22710
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22664
22711
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
22665
22712
  autoStart: false,
22666
22713
  onModelError: faceLivenessProps.onModelError,
@@ -22673,15 +22720,13 @@
22673
22720
  onAccept: onSignatureCaptureSuccess
22674
22721
  }));
22675
22722
  case 'VideoSignatureCapture':
22676
- return /*#__PURE__*/React.createElement(CameraProvider, {
22677
- key: "SignatureKycCamera-".concat(videoSignatureAttempts),
22678
- preferContinuityCamera: false,
22723
+ return /*#__PURE__*/React.createElement(CameraStoreProvider, {
22724
+ preferIphoneContinuityCamera: false,
22679
22725
  preferFrontFacingCamera: true,
22680
22726
  maxVideoWidth: 1280,
22681
22727
  maxFps: 30,
22682
22728
  onCameraAccessDenied: onCameraAccessDenied,
22683
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
22684
- debugMode: debugMode
22729
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
22685
22730
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
22686
22731
  autoStart: false,
22687
22732
  throttleMs: 250,
@@ -22689,8 +22734,7 @@
22689
22734
  modelLoadTimeoutMs: videoSignatureCaptureProps.modelLoadTimeoutMs,
22690
22735
  requireVerticalFaceCentering: false
22691
22736
  }, /*#__PURE__*/React.createElement(VideoSignatureWizard, _assign({}, videoSignatureCaptureProps, {
22692
- onComplete: onVideoSignatureComplete,
22693
- onRetryClicked: onVideoSignatureRetry
22737
+ onComplete: onVideoSignatureComplete
22694
22738
  }))));
22695
22739
  case 'AdditionalDocumentCapture':
22696
22740
  return /*#__PURE__*/React.createElement(AdditionalDocumentCaptureWizard, _assign({}, additionalDocumentCaptureProps, {
@@ -23141,8 +23185,7 @@
23141
23185
  videoSignatureCaptureProps: videoSignatureCaptureProps,
23142
23186
  captureSignature: captureSignature,
23143
23187
  captureSignatureVideo: captureSignatureVideo,
23144
- onCameraAccessDenied: onCameraAccessDenied,
23145
- debugMode: debugMode
23188
+ onCameraAccessDenied: onCameraAccessDenied
23146
23189
  }))));
23147
23190
  };
23148
23191
 
@@ -23248,8 +23291,7 @@
23248
23291
  return ['FaceLiveness'];
23249
23292
  }, []),
23250
23293
  faceLivenessProps: faceLivenessProps,
23251
- onCameraAccessDenied: onCameraAccessDenied,
23252
- debugMode: debugMode
23294
+ onCameraAccessDenied: onCameraAccessDenied
23253
23295
  }))));
23254
23296
  };
23255
23297
 
@@ -23482,8 +23524,7 @@
23482
23524
  additionalDocumentCaptureProps: additionalDocumentCaptureProps,
23483
23525
  captureSignature: captureSignature,
23484
23526
  captureSignatureVideo: captureSignatureVideo,
23485
- onCameraAccessDenied: onCameraAccessDenied,
23486
- debugMode: debugMode
23527
+ onCameraAccessDenied: onCameraAccessDenied
23487
23528
  }))));
23488
23529
  };
23489
23530
 
@@ -23738,8 +23779,7 @@
23738
23779
  videoSignatureCaptureProps: videoSignatureCaptureProps,
23739
23780
  captureSignature: captureSignature,
23740
23781
  captureSignatureVideo: captureSignatureVideo,
23741
- onCameraAccessDenied: onCameraAccessDenied,
23742
- debugMode: debugMode
23782
+ onCameraAccessDenied: onCameraAccessDenied
23743
23783
  }))));
23744
23784
  };
23745
23785
 
@@ -24071,7 +24111,7 @@
24071
24111
  var _l = React.useState('LOADING'),
24072
24112
  captureState = _l[0],
24073
24113
  setCaptureState = _l[1];
24074
- var _m = React.useContext(CameraStateContext),
24114
+ var _m = useCameraStore(),
24075
24115
  cameraAccessDenied = _m.cameraAccessDenied,
24076
24116
  releaseCameraAccess = _m.releaseCameraAccess;
24077
24117
  var _o = React.useContext(SelfieGuidanceModelsContext),
@@ -24277,10 +24317,9 @@
24277
24317
  onSubmit: onSubmit,
24278
24318
  geolocationEnabled: geolocationEnabled,
24279
24319
  geolocationRequired: geolocationRequired
24280
- }, /*#__PURE__*/React.createElement(CameraProvider, {
24320
+ }, /*#__PURE__*/React.createElement(CameraStoreProvider, {
24281
24321
  preferFrontFacingCamera: true,
24282
- onCameraAccessDenied: onCameraAccessDenied,
24283
- debugMode: debugMode
24322
+ onCameraAccessDenied: onCameraAccessDenied
24284
24323
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
24285
24324
  autoStart: false,
24286
24325
  onModelError: onModelError,
@@ -24629,7 +24668,7 @@
24629
24668
  var _l = React.useState('LOADING'),
24630
24669
  captureState = _l[0],
24631
24670
  setCaptureState = _l[1];
24632
- var _m = React.useContext(CameraStateContext),
24671
+ var _m = useCameraStore(),
24633
24672
  cameraAccessDenied = _m.cameraAccessDenied,
24634
24673
  releaseCameraAccess = _m.releaseCameraAccess;
24635
24674
  var _o = React.useContext(SelfieGuidanceModelsContext),
@@ -24833,10 +24872,9 @@
24833
24872
  onSubmit: onSubmit,
24834
24873
  geolocationEnabled: geolocationEnabled,
24835
24874
  geolocationRequired: geolocationRequired
24836
- }, /*#__PURE__*/React.createElement(CameraProvider, {
24875
+ }, /*#__PURE__*/React.createElement(CameraStoreProvider, {
24837
24876
  preferFrontFacingCamera: true,
24838
- onCameraAccessDenied: onCameraAccessDenied,
24839
- debugMode: debugMode
24877
+ onCameraAccessDenied: onCameraAccessDenied
24840
24878
  }, /*#__PURE__*/React.createElement(SelfieGuidanceModelsProvider, {
24841
24879
  autoStart: false,
24842
24880
  modelLoadTimeoutMs: modelLoadTimeoutMs,
@@ -25163,8 +25201,7 @@
25163
25201
  captureSignature: captureSignature,
25164
25202
  captureSignatureVideo: captureSignatureVideo,
25165
25203
  onCameraAccessDenied: onCameraAccessDenied,
25166
- onMicrophoneAccessDenied: onMicrophoneAccessDenied,
25167
- debugMode: debugMode
25204
+ onMicrophoneAccessDenied: onMicrophoneAccessDenied
25168
25205
  }))));
25169
25206
  };
25170
25207
 
@@ -25321,8 +25358,7 @@
25321
25358
  videoSignatureCaptureProps: videoSignatureCaptureProps,
25322
25359
  captureSignature: captureSignature,
25323
25360
  captureSignatureVideo: captureSignatureVideo,
25324
- onCameraAccessDenied: onCameraAccessDenied,
25325
- debugMode: debugMode
25361
+ onCameraAccessDenied: onCameraAccessDenied
25326
25362
  }))));
25327
25363
  };
25328
25364
 
@@ -25380,11 +25416,10 @@
25380
25416
  onDocumentUploadFailed: onDocumentUploadFailed,
25381
25417
  geolocationEnabled: geolocationEnabled,
25382
25418
  geolocationRequired: geolocationRequired
25383
- }, /*#__PURE__*/React.createElement(CameraProvider, {
25419
+ }, /*#__PURE__*/React.createElement(CameraStoreProvider, {
25384
25420
  requestAccessAutomatically: false,
25385
- preferContinuityCamera: true,
25386
- onCameraAccessDenied: onCameraAccessDenied,
25387
- debugMode: debugMode
25421
+ preferIphoneContinuityCamera: true,
25422
+ onCameraAccessDenied: onCameraAccessDenied
25388
25423
  }, /*#__PURE__*/React.createElement(DocumentCaptureWizard, {
25389
25424
  onSuccess: onComplete,
25390
25425
  onExitCapture: onExitCapture,