@simprints/simface-sdk 0.5.1 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,12 +6,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { LitElement, html, css } from 'lit';
8
8
  import { customElement, property, query, state } from 'lit/decorators.js';
9
- import { blobToImage, captureFromCamera } from '../services/camera.js';
10
- import { assessFaceQuality, assessFaceQualityForVideo } from '../services/face-detection.js';
11
- const AUTO_CAPTURE_ANALYSIS_INTERVAL_MS = 180;
12
- const AUTO_CAPTURE_COUNTDOWN_MS = 5000;
13
- const GUIDE_PATH = 'M 50 17 C 60 17 68 19.5 74 25 C 79 29.5 81.5 36.5 81.5 46.5 V 54.5 C 81.5 63.5 78.5 71 71.5 76.5 C 65 81.5 57.5 84 50 84 C 42.5 84 35 81.5 28.5 76.5 C 21.5 71 18.5 63.5 18.5 54.5 V 46.5 C 18.5 36.5 21 29.5 26 25 C 32 19.5 40 17 50 17 Z';
14
- const GUIDE_MASK_PATH = `M 0 0 H 100 V 100 H 0 Z ${GUIDE_PATH}`;
9
+ import { captureFromCamera } from '../services/camera.js';
10
+ import { assessFaceQuality } from '../services/face-detection.js';
11
+ import { CAPTURE_GUIDE_MASK_PATH, CAPTURE_GUIDE_PATH, } from '../shared/auto-capture.js';
12
+ import { buildCapturePlan, normalizeCaptureOptions, resolveCaptureCapabilities, } from '../shared/capture-flow.js';
13
+ import { CameraCaptureSessionController, } from '../shared/capture-session.js';
14
+ import { CameraAccessError, blobToImage, captureFromFileInput, openUserFacingCameraStream, } from '../shared/capture-runtime.js';
15
15
  /**
16
16
  * <simface-capture> — Web Component for capturing and quality-checking face images.
17
17
  *
@@ -27,6 +27,8 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
27
27
  this.embedded = false;
28
28
  this.active = false;
29
29
  this.confirmLabel = 'Use this capture';
30
+ this.capturePreference = 'auto-preferred';
31
+ this.allowMediaPickerFallback = true;
30
32
  this.captureState = 'idle';
31
33
  this.errorMessage = '';
32
34
  this.feedbackMessage = 'Start a capture to see camera guidance here.';
@@ -34,30 +36,35 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
34
36
  this.previewUrl = '';
35
37
  this.countdownProgress = 0;
36
38
  this.qualityResult = null;
39
+ this.canTakePhoto = true;
37
40
  this.stream = null;
38
- this.animationFrameId = null;
39
- this.analysisInFlight = false;
40
- this.lastAnalysisTimestamp = 0;
41
+ this.sessionController = null;
42
+ this.currentCaptureStep = null;
41
43
  this.capturedBlob = null;
42
- this.countdownStartedAt = null;
43
- this.bestCaptureBlob = null;
44
- this.bestCaptureScore = -1;
45
- this.bestQualityResult = null;
44
+ this.pendingActiveSync = false;
46
45
  }
47
46
  disconnectedCallback() {
48
47
  super.disconnectedCallback();
49
48
  this.stopEmbeddedSession();
50
49
  }
51
50
  updated(changedProperties) {
52
- if (!this.embedded || !changedProperties.has('active')) {
51
+ if (!this.embedded || !changedProperties.has('active') || this.pendingActiveSync) {
53
52
  return;
54
53
  }
55
- if (this.active) {
56
- void this.startEmbeddedCapture();
57
- return;
58
- }
59
- this.stopEmbeddedSession();
60
- this.resetEmbeddedState();
54
+ this.pendingActiveSync = true;
55
+ queueMicrotask(() => {
56
+ this.pendingActiveSync = false;
57
+ if (!this.isConnected || !this.embedded) {
58
+ return;
59
+ }
60
+ if (this.active) {
61
+ if (this.captureState === 'idle') {
62
+ void this.beginEmbeddedCapture();
63
+ }
64
+ return;
65
+ }
66
+ this.endEmbeddedCapture();
67
+ });
61
68
  }
62
69
  render() {
63
70
  if (this.embedded) {
@@ -77,6 +84,7 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
77
84
  if (this.embedded) {
78
85
  this.active = true;
79
86
  await this.updateComplete;
87
+ await this.beginEmbeddedCapture();
80
88
  return;
81
89
  }
82
90
  await this.handlePopupCapture();
@@ -130,9 +138,9 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
130
138
  style=${`--capture-progress:${this.countdownProgress};`}
131
139
  >
132
140
  <svg viewBox="0 0 100 100" preserveAspectRatio="none" aria-hidden="true">
133
- <path class="guide-mask" d=${GUIDE_MASK_PATH}></path>
134
- <path class="ring-outline" d=${GUIDE_PATH}></path>
135
- <path class="ring-progress" d=${GUIDE_PATH} pathLength="100"></path>
141
+ <path class="guide-mask" d=${CAPTURE_GUIDE_MASK_PATH}></path>
142
+ <path class="ring-outline" d=${CAPTURE_GUIDE_PATH}></path>
143
+ <path class="ring-progress" d=${CAPTURE_GUIDE_PATH} pathLength="100"></path>
136
144
  </svg>
137
145
  </div>
138
146
  </div>
@@ -145,7 +153,7 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
145
153
  <div class="btn-row">
146
154
  ${this.captureState === 'live'
147
155
  ? html `
148
- <button class="btn btn-secondary" @click=${this.handleEmbeddedManualCapture}>Take photo now</button>
156
+ <button class="btn btn-secondary" ?disabled=${!this.canTakePhoto} @click=${this.handleEmbeddedManualCapture}>Take photo now</button>
149
157
  <button class="btn btn-ghost" @click=${this.handleEmbeddedCancel}>Cancel</button>
150
158
  `
151
159
  : ''}
@@ -160,7 +168,7 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
160
168
  : ''}
161
169
  ${this.captureState === 'error'
162
170
  ? html `
163
- <button class="btn btn-primary" @click=${this.startEmbeddedCapture}>Try again</button>
171
+ <button class="btn btn-primary" @click=${this.beginEmbeddedCapture}>Try again</button>
164
172
  <button class="btn btn-ghost" @click=${this.handleEmbeddedCancel}>Cancel</button>
165
173
  `
166
174
  : ''}
@@ -170,7 +178,11 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
170
178
  async handlePopupCapture() {
171
179
  this.captureState = 'starting';
172
180
  try {
173
- const blob = await captureFromCamera();
181
+ const blob = await captureFromCamera({
182
+ presentation: 'popup',
183
+ capturePreference: this.capturePreference,
184
+ allowMediaPickerFallback: this.allowMediaPickerFallback,
185
+ });
174
186
  if (!blob) {
175
187
  this.dispatchCancelled();
176
188
  this.captureState = 'idle';
@@ -193,7 +205,7 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
193
205
  this.dispatchCancelled();
194
206
  this.resetPopupState();
195
207
  }
196
- async startEmbeddedCapture() {
208
+ async beginEmbeddedCapture() {
197
209
  if (!this.active || this.captureState === 'starting' || this.captureState === 'live') {
198
210
  return;
199
211
  }
@@ -202,168 +214,130 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
202
214
  this.captureState = 'starting';
203
215
  this.feedbackMessage = 'Requesting camera access...';
204
216
  this.feedbackTone = 'neutral';
205
- await this.updateComplete;
206
- if (!navigator.mediaDevices?.getUserMedia) {
207
- this.handleEmbeddedError(new Error('This browser does not support inline camera capture.'));
217
+ const options = normalizeCaptureOptions({
218
+ presentation: 'embedded',
219
+ capturePreference: this.capturePreference,
220
+ allowMediaPickerFallback: this.allowMediaPickerFallback,
221
+ label: this.label,
222
+ confirmLabel: this.confirmLabel,
223
+ });
224
+ const capabilities = await resolveCaptureCapabilities({
225
+ capturePreference: options.capturePreference,
226
+ });
227
+ const plan = buildCapturePlan(options, capabilities);
228
+ const cameraStep = plan.steps.find((step) => step === 'auto-camera' || step === 'manual-camera') ?? null;
229
+ const hasMediaPickerFallback = plan.steps.includes('media-picker');
230
+ if (!cameraStep) {
231
+ await this.startEmbeddedMediaPicker();
208
232
  return;
209
233
  }
210
234
  try {
211
- this.stream = await navigator.mediaDevices.getUserMedia({
212
- video: { facingMode: { ideal: 'user' } },
213
- audio: false,
214
- });
215
- this.captureState = 'live';
216
- this.feedbackMessage = 'Center your face in the oval. We will capture automatically when framing looks good.';
217
- await this.updateComplete;
218
- const video = this.embeddedVideoElement;
219
- if (!video) {
220
- throw new Error('Inline camera preview could not be created.');
221
- }
222
- video.srcObject = this.stream;
223
- await this.waitForVideoReady(video);
224
- this.scheduleEmbeddedAnalysis();
235
+ this.stream = await openUserFacingCameraStream();
225
236
  }
226
237
  catch (error) {
238
+ if (error instanceof CameraAccessError && hasMediaPickerFallback) {
239
+ await this.startEmbeddedMediaPicker();
240
+ return;
241
+ }
227
242
  this.handleEmbeddedError(error);
228
- }
229
- }
230
- scheduleEmbeddedAnalysis() {
231
- if (this.captureState !== 'live' || !this.stream) {
232
243
  return;
233
244
  }
234
- if (typeof window.requestAnimationFrame !== 'function' ||
235
- typeof window.cancelAnimationFrame !== 'function') {
236
- this.feedbackMessage = 'Automatic analysis is unavailable. Use Take photo now.';
237
- this.feedbackTone = 'neutral';
245
+ await this.updateComplete;
246
+ if (!this.active) {
247
+ this.stopEmbeddedSession();
238
248
  return;
239
249
  }
240
- this.animationFrameId = window.requestAnimationFrame(async (timestamp) => {
241
- if (this.captureState !== 'live' ||
242
- this.analysisInFlight ||
243
- timestamp - this.lastAnalysisTimestamp < AUTO_CAPTURE_ANALYSIS_INTERVAL_MS) {
244
- this.scheduleEmbeddedAnalysis();
245
- return;
246
- }
247
- const video = this.embeddedVideoElement;
248
- if (!video) {
249
- return;
250
- }
251
- this.lastAnalysisTimestamp = timestamp;
252
- this.analysisInFlight = true;
253
- try {
254
- const qualityResult = await assessFaceQualityForVideo(video, timestamp);
255
- this.qualityResult = qualityResult;
256
- if (qualityResult.passesQualityChecks) {
257
- if (this.countdownStartedAt === null) {
258
- this.countdownStartedAt = timestamp;
259
- this.countdownProgress = 0;
260
- this.feedbackMessage = 'Great framing detected. Hold still while we pick the best frame.';
261
- this.feedbackTone = 'success';
262
- }
263
- await this.considerBestFrame(video, qualityResult);
264
- }
265
- if (this.countdownStartedAt !== null) {
266
- this.countdownProgress = Math.min((timestamp - this.countdownStartedAt) / AUTO_CAPTURE_COUNTDOWN_MS, 1);
267
- this.feedbackMessage = this.countdownMessage(timestamp, qualityResult);
268
- this.feedbackTone = qualityResult.passesQualityChecks ? 'success' : 'neutral';
269
- if (this.countdownProgress >= 1) {
270
- this.finishCountdownCapture();
271
- return;
272
- }
273
- }
274
- else {
275
- this.feedbackMessage = qualityResult.message;
276
- this.feedbackTone = 'neutral';
277
- }
278
- }
279
- catch {
280
- this.feedbackMessage = 'Automatic analysis is unavailable. Use Take photo now.';
281
- this.feedbackTone = 'neutral';
282
- return;
283
- }
284
- finally {
285
- this.analysisInFlight = false;
286
- }
287
- this.scheduleEmbeddedAnalysis();
288
- });
289
- }
290
- async captureEmbeddedFrame() {
291
250
  const video = this.embeddedVideoElement;
292
- if (!video || this.captureState !== 'live') {
251
+ if (!video || !this.stream) {
252
+ this.handleEmbeddedError(new Error('Inline camera preview could not be created.'));
293
253
  return;
294
254
  }
255
+ video.srcObject = this.stream;
256
+ this.currentCaptureStep = cameraStep;
257
+ this.sessionController = new CameraCaptureSessionController({
258
+ videoElement: video,
259
+ initialMode: cameraStep === 'auto-camera' ? 'auto' : 'manual',
260
+ copy: {
261
+ autoReadyMessage: 'Center your face in the oval. We will capture automatically when framing looks good.',
262
+ manualReadyMessage: 'When you are ready, use Take photo now.',
263
+ autoUnavailableMessage: 'Automatic analysis is unavailable. Use Take photo now.',
264
+ retakeReadyMessage: 'When you are ready, use Take photo now.',
265
+ },
266
+ onStateChange: (state) => this.applySessionState(state),
267
+ });
295
268
  try {
296
- const blob = await this.captureVideoFrame(video);
297
- const qualityResult = await this.assessCapturedBlob(blob);
298
- this.capturedBlob = blob;
299
- this.qualityResult = qualityResult;
300
- this.captureState = 'preview';
301
- this.feedbackMessage = qualityResult?.message ?? 'Review this capture before continuing.';
302
- this.feedbackTone = qualityResult
303
- ? qualityResult.passesQualityChecks
304
- ? 'success'
305
- : 'error'
306
- : 'neutral';
307
- if (this.previewUrl) {
308
- URL.revokeObjectURL(this.previewUrl);
309
- }
310
- this.previewUrl = URL.createObjectURL(blob);
311
- this.countdownProgress = 0;
269
+ await this.sessionController.start();
312
270
  }
313
271
  catch (error) {
314
272
  this.handleEmbeddedError(error);
315
273
  }
316
274
  }
317
- async considerBestFrame(video, qualityResult) {
318
- if (qualityResult.captureScore <= this.bestCaptureScore) {
319
- return;
320
- }
321
- const blob = await this.captureVideoFrame(video);
322
- this.bestCaptureBlob = blob;
323
- this.bestCaptureScore = qualityResult.captureScore;
324
- this.bestQualityResult = qualityResult;
325
- }
326
- finishCountdownCapture() {
327
- if (!this.bestCaptureBlob) {
328
- void this.captureEmbeddedFrame();
329
- return;
275
+ async startEmbeddedMediaPicker() {
276
+ this.stopEmbeddedSession();
277
+ this.currentCaptureStep = 'media-picker';
278
+ this.captureState = 'starting';
279
+ this.feedbackMessage = 'Opening media picker...';
280
+ this.feedbackTone = 'neutral';
281
+ try {
282
+ const blob = await captureFromFileInput();
283
+ if (!blob) {
284
+ this.handleEmbeddedCancel();
285
+ return;
286
+ }
287
+ await this.showPickedPreview(blob);
330
288
  }
331
- this.capturedBlob = this.bestCaptureBlob;
332
- this.qualityResult = this.bestQualityResult;
333
- this.captureState = 'preview';
334
- this.feedbackMessage = this.bestCaptureMessage();
335
- this.feedbackTone = 'success';
336
- if (this.previewUrl) {
337
- URL.revokeObjectURL(this.previewUrl);
289
+ catch (error) {
290
+ this.handleEmbeddedError(error);
338
291
  }
339
- this.previewUrl = URL.createObjectURL(this.bestCaptureBlob);
340
- this.countdownProgress = 1;
341
292
  }
342
- async assessCapturedBlob(blob) {
343
- try {
344
- const image = await blobToImage(blob);
345
- return await assessFaceQuality(image);
346
- }
347
- catch {
348
- return null;
293
+ applySessionState(state) {
294
+ this.captureState = state.phase;
295
+ this.feedbackMessage = state.feedbackMessage;
296
+ this.feedbackTone = state.feedbackTone;
297
+ this.countdownProgress = state.countdownProgress;
298
+ this.qualityResult = state.qualityResult;
299
+ this.errorMessage = state.phase === 'error' ? state.errorMessage : '';
300
+ this.canTakePhoto = state.canTakePhoto;
301
+ if (state.phase === 'preview') {
302
+ this.capturedBlob = state.previewBlob;
303
+ this.setPreviewBlob(state.previewBlob);
304
+ return;
349
305
  }
306
+ this.capturedBlob = null;
307
+ this.clearPreviewUrl();
308
+ }
309
+ async showPickedPreview(blob) {
310
+ const qualityResult = await this.assessPickedBlob(blob);
311
+ this.capturedBlob = blob;
312
+ this.qualityResult = qualityResult;
313
+ this.captureState = 'preview';
314
+ this.feedbackMessage = qualityResult?.message ?? 'Review this capture before continuing.';
315
+ this.feedbackTone = qualityResult
316
+ ? qualityResult.passesQualityChecks
317
+ ? 'success'
318
+ : 'error'
319
+ : 'neutral';
320
+ this.countdownProgress = qualityResult ? 1 : 0;
321
+ this.setPreviewBlob(blob);
350
322
  }
351
323
  handleEmbeddedManualCapture() {
352
- void this.captureEmbeddedFrame();
324
+ void this.sessionController?.takePhotoNow().catch((error) => {
325
+ this.handleEmbeddedError(error);
326
+ });
353
327
  }
354
328
  handleEmbeddedRetake() {
355
329
  this.capturedBlob = null;
356
330
  this.qualityResult = null;
357
- this.captureState = 'live';
358
- if (this.previewUrl) {
359
- URL.revokeObjectURL(this.previewUrl);
360
- this.previewUrl = '';
331
+ this.clearPreviewUrl();
332
+ if (this.currentCaptureStep === 'media-picker') {
333
+ if (this.active) {
334
+ void this.beginEmbeddedCapture();
335
+ }
336
+ return;
361
337
  }
362
- this.feedbackMessage = 'Ready to capture again.';
363
- this.feedbackTone = 'neutral';
364
- this.resetCountdown();
365
- this.resumeEmbeddedVideo();
366
- this.scheduleEmbeddedAnalysis();
338
+ void this.sessionController?.retake().catch((error) => {
339
+ this.handleEmbeddedError(error);
340
+ });
367
341
  }
368
342
  handleEmbeddedConfirm() {
369
343
  if (!this.capturedBlob) {
@@ -389,11 +363,14 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
389
363
  this.feedbackTone = 'error';
390
364
  this.dispatchError(this.errorMessage);
391
365
  }
366
+ endEmbeddedCapture() {
367
+ this.stopEmbeddedSession();
368
+ this.resetEmbeddedState();
369
+ }
392
370
  stopEmbeddedSession() {
393
- if (this.animationFrameId !== null) {
394
- window.cancelAnimationFrame(this.animationFrameId);
395
- this.animationFrameId = null;
396
- }
371
+ this.sessionController?.stop();
372
+ this.sessionController = null;
373
+ this.currentCaptureStep = null;
397
374
  if (this.stream) {
398
375
  this.stream.getTracks().forEach((track) => track.stop());
399
376
  this.stream = null;
@@ -402,15 +379,10 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
402
379
  if (video) {
403
380
  video.srcObject = null;
404
381
  }
405
- this.analysisInFlight = false;
406
- this.lastAnalysisTimestamp = 0;
407
- this.resetCountdown();
382
+ this.countdownProgress = 0;
408
383
  }
409
384
  resetEmbeddedState() {
410
- if (this.previewUrl) {
411
- URL.revokeObjectURL(this.previewUrl);
412
- this.previewUrl = '';
413
- }
385
+ this.clearPreviewUrl();
414
386
  this.captureState = 'idle';
415
387
  this.errorMessage = '';
416
388
  this.feedbackMessage = 'Start a capture to see camera guidance here.';
@@ -423,6 +395,16 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
423
395
  this.captureState = 'idle';
424
396
  this.errorMessage = '';
425
397
  }
398
+ setPreviewBlob(blob) {
399
+ this.clearPreviewUrl();
400
+ this.previewUrl = URL.createObjectURL(blob);
401
+ }
402
+ clearPreviewUrl() {
403
+ if (this.previewUrl) {
404
+ URL.revokeObjectURL(this.previewUrl);
405
+ this.previewUrl = '';
406
+ }
407
+ }
426
408
  dispatchCaptured(blob) {
427
409
  this.dispatchEvent(new CustomEvent('simface-captured', {
428
410
  detail: { imageBlob: blob },
@@ -450,84 +432,19 @@ let SimFaceCapture = class SimFaceCapture extends LitElement {
450
432
  if (this.feedbackTone === 'error') {
451
433
  return 'quality-bad';
452
434
  }
453
- return 'quality-neutral';
454
- }
455
- waitForVideoReady(video) {
456
- if (video.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {
457
- return video.play().then(() => undefined);
435
+ if (this.feedbackTone === 'manual') {
436
+ return 'quality-manual';
458
437
  }
459
- return new Promise((resolve, reject) => {
460
- const handleReady = () => {
461
- cleanup();
462
- video.play().then(() => resolve()).catch(reject);
463
- };
464
- const handleError = () => {
465
- cleanup();
466
- reject(new Error('Failed to start the inline camera preview.'));
467
- };
468
- const cleanup = () => {
469
- video.removeEventListener('loadedmetadata', handleReady);
470
- video.removeEventListener('error', handleError);
471
- };
472
- video.addEventListener('loadedmetadata', handleReady, { once: true });
473
- video.addEventListener('error', handleError, { once: true });
474
- });
475
- }
476
- captureVideoFrame(video) {
477
- if (!video.videoWidth || !video.videoHeight) {
478
- return Promise.reject(new Error('Camera preview is not ready yet.'));
479
- }
480
- const canvas = document.createElement('canvas');
481
- canvas.width = video.videoWidth;
482
- canvas.height = video.videoHeight;
483
- const context = canvas.getContext('2d');
484
- if (!context) {
485
- return Promise.reject(new Error('Failed to initialize camera capture.'));
486
- }
487
- context.drawImage(video, 0, 0, canvas.width, canvas.height);
488
- return new Promise((resolve, reject) => {
489
- canvas.toBlob((blob) => {
490
- if (!blob) {
491
- reject(new Error('Failed to capture an image.'));
492
- return;
493
- }
494
- resolve(blob);
495
- }, 'image/jpeg', 0.92);
496
- });
497
- }
498
- resumeEmbeddedVideo() {
499
- const video = this.embeddedVideoElement;
500
- if (!video) {
501
- return;
502
- }
503
- void video.play().catch(() => {
504
- // Ignore replay failures here; the initial preview startup path already errors loudly.
505
- });
506
- }
507
- resetCountdown() {
508
- this.countdownStartedAt = null;
509
- this.countdownProgress = 0;
510
- this.bestCaptureBlob = null;
511
- this.bestCaptureScore = -1;
512
- this.bestQualityResult = null;
438
+ return 'quality-neutral';
513
439
  }
514
- countdownMessage(timestamp, qualityResult) {
515
- if (this.countdownStartedAt === null) {
516
- return 'Center your face in the oval. We will capture automatically when framing looks good.';
517
- }
518
- const remainingMs = Math.max(AUTO_CAPTURE_COUNTDOWN_MS - (timestamp - this.countdownStartedAt), 0);
519
- const remainingSeconds = Math.max(Math.ceil(remainingMs / 1000), 0);
520
- if (qualityResult.passesQualityChecks) {
521
- return `Hold steady. Capturing the best frame in ${remainingSeconds}s.`;
440
+ async assessPickedBlob(blob) {
441
+ try {
442
+ const image = await blobToImage(blob);
443
+ return await assessFaceQuality(image);
522
444
  }
523
- return `${qualityResult.message} Best frame selection finishes in ${remainingSeconds}s.`;
524
- }
525
- bestCaptureMessage() {
526
- const score = this.bestQualityResult?.captureScore;
527
- if (typeof score === 'number' && score > 0) {
528
- return `Best frame captured. Review and confirm this photo.`;
445
+ catch {
446
+ return null;
529
447
  }
530
- return 'Capture complete. Review and confirm this photo.';
531
448
  }
532
449
  };
533
450
  SimFaceCapture.styles = css `
@@ -581,6 +498,7 @@ SimFaceCapture.styles = css `
581
498
  width: 100%;
582
499
  height: 100%;
583
500
  object-fit: cover;
501
+ transform: scaleX(-1);
584
502
  }
585
503
 
586
504
  .preview-img {
@@ -632,12 +550,6 @@ SimFaceCapture.styles = css `
632
550
  gap: 12px;
633
551
  }
634
552
 
635
- .preview-img-inline {
636
- max-width: 100%;
637
- border-radius: 8px;
638
- margin: 12px 0;
639
- }
640
-
641
553
  .btn {
642
554
  display: inline-flex;
643
555
  align-items: center;
@@ -703,6 +615,11 @@ SimFaceCapture.styles = css `
703
615
  color: #0f172a;
704
616
  }
705
617
 
618
+ .quality-manual {
619
+ background: #e0f2fe;
620
+ color: #0f172a;
621
+ }
622
+
706
623
  .spinner {
707
624
  display: inline-block;
708
625
  width: 24px;
@@ -736,6 +653,12 @@ __decorate([
736
653
  __decorate([
737
654
  property({ type: String, attribute: 'confirm-label' })
738
655
  ], SimFaceCapture.prototype, "confirmLabel", void 0);
656
+ __decorate([
657
+ property({ type: String, attribute: 'capture-preference' })
658
+ ], SimFaceCapture.prototype, "capturePreference", void 0);
659
+ __decorate([
660
+ property({ type: Boolean, attribute: 'allow-media-picker-fallback' })
661
+ ], SimFaceCapture.prototype, "allowMediaPickerFallback", void 0);
739
662
  __decorate([
740
663
  state()
741
664
  ], SimFaceCapture.prototype, "captureState", void 0);
@@ -757,6 +680,9 @@ __decorate([
757
680
  __decorate([
758
681
  state()
759
682
  ], SimFaceCapture.prototype, "qualityResult", void 0);
683
+ __decorate([
684
+ state()
685
+ ], SimFaceCapture.prototype, "canTakePhoto", void 0);
760
686
  __decorate([
761
687
  query('#embedded-video')
762
688
  ], SimFaceCapture.prototype, "embeddedVideoElement", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"simface-capture.js","sourceRoot":"","sources":["../../src/components/simface-capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simface-capture.js","sourceRoot":"","sources":["../../src/components/simface-capture.ts"],"names":[],"mappings":"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"}