@jaak.ai/stamps 2.0.0-dev.42 → 2.0.0-dev.43

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 (40) hide show
  1. package/dist/cjs/jaak-stamps-webcomponent.cjs.js +1 -1
  2. package/dist/cjs/jaak-stamps.cjs.entry.js +14 -652
  3. package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
  4. package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/collection/components/my-component/my-component.css +40 -0
  7. package/dist/collection/components/my-component/my-component.js +35 -343
  8. package/dist/collection/components/my-component/my-component.js.map +1 -1
  9. package/dist/collection/services/DetectionService.js +1 -164
  10. package/dist/collection/services/DetectionService.js.map +1 -1
  11. package/dist/collection/services/ServiceContainer.js +1 -6
  12. package/dist/collection/services/ServiceContainer.js.map +1 -1
  13. package/dist/collection/services/interfaces/IDetectionService.js.map +1 -1
  14. package/dist/collection/types/component-types.js +2 -0
  15. package/dist/collection/types/component-types.js.map +1 -0
  16. package/dist/components/jaak-stamps.js +15 -663
  17. package/dist/components/jaak-stamps.js.map +1 -1
  18. package/dist/esm/jaak-stamps-webcomponent.js +1 -1
  19. package/dist/esm/jaak-stamps.entry.js +14 -652
  20. package/dist/esm/jaak-stamps.entry.js.map +1 -1
  21. package/dist/esm/loader.js +1 -1
  22. package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +1 -1
  23. package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -1
  24. package/dist/jaak-stamps-webcomponent/p-3074405d.entry.js +2 -0
  25. package/dist/jaak-stamps-webcomponent/p-3074405d.entry.js.map +1 -0
  26. package/dist/types/components/my-component/my-component.d.ts +4 -45
  27. package/dist/types/components.d.ts +11 -62
  28. package/dist/types/services/DetectionService.d.ts +2 -22
  29. package/dist/types/services/ServiceContainer.d.ts +0 -6
  30. package/dist/types/services/interfaces/IDetectionService.d.ts +0 -13
  31. package/dist/types/types/component-types.d.ts +36 -0
  32. package/package.json +1 -1
  33. package/dist/collection/services/ImageQualityService.js +0 -329
  34. package/dist/collection/services/ImageQualityService.js.map +0 -1
  35. package/dist/collection/services/interfaces/IImageQualityService.js +0 -2
  36. package/dist/collection/services/interfaces/IImageQualityService.js.map +0 -1
  37. package/dist/jaak-stamps-webcomponent/p-47f37982.entry.js +0 -2
  38. package/dist/jaak-stamps-webcomponent/p-47f37982.entry.js.map +0 -1
  39. package/dist/types/services/ImageQualityService.d.ts +0 -31
  40. package/dist/types/services/interfaces/IImageQualityService.d.ts +0 -58
@@ -5,7 +5,7 @@ var index = require('./index-BfhtOB0D.js');
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await index.globalScripts();
8
- return index.bootstrapLazy([["jaak-stamps.cjs",[[1,"jaak-stamps",{"debug":[4],"alignmentTolerance":[2,"alignment-tolerance"],"maskSize":[2,"mask-size"],"cropMargin":[2,"crop-margin"],"useDocumentClassification":[4,"use-document-classification"],"preferredCamera":[1,"preferred-camera"],"captureDelay":[2,"capture-delay"],"enableQualityValidation":[4,"enable-quality-validation"],"qualityThreshold":[2,"quality-threshold"],"minQualityScore":[2,"min-quality-score"],"minFocusScore":[2,"min-focus-score"],"minBlurScore":[2,"min-blur-score"],"maxReflectionScore":[2,"max-reflection-score"],"detectionBoxes":[32],"sideAlignment":[32],"isMaskReady":[32],"shouldMirrorVideo":[32],"showCameraSelector":[32],"isSwitchingCamera":[32],"hasDocumentDetected":[32],"currentStatus":[32],"qualityFeedback":[32],"performanceData":[32],"getCapturedImages":[64],"isProcessCompleted":[64],"startCapture":[64],"stopCapture":[64],"resetCapture":[64],"skipBackCapture":[64],"getStatus":[64],"preloadModel":[64],"getCameraInfo":[64],"setPreferredCamera":[64],"setCaptureDelay":[64],"getCaptureDelay":[64],"setTorchEnabled":[64],"focusAtPoint":[64],"getImageQuality":[64],"setQualityThresholds":[64],"getQualityThresholds":[64]}]]]], options);
8
+ return index.bootstrapLazy([["jaak-stamps.cjs",[[1,"jaak-stamps",{"debug":[4],"alignmentTolerance":[2,"alignment-tolerance"],"maskSize":[2,"mask-size"],"cropMargin":[2,"crop-margin"],"useDocumentClassification":[4,"use-document-classification"],"preferredCamera":[1,"preferred-camera"],"captureDelay":[2,"capture-delay"],"detectionBoxes":[32],"sideAlignment":[32],"isMaskReady":[32],"shouldMirrorVideo":[32],"showCameraSelector":[32],"isSwitchingCamera":[32],"hasDocumentDetected":[32],"currentStatus":[32],"performanceData":[32],"getCapturedImages":[64],"isProcessCompleted":[64],"startCapture":[64],"stopCapture":[64],"resetCapture":[64],"skipBackCapture":[64],"getStatus":[64],"preloadModel":[64],"getCameraInfo":[64],"setPreferredCamera":[64],"setCaptureDelay":[64],"getCaptureDelay":[64],"setTorchEnabled":[64],"focusAtPoint":[64]}]]]], options);
9
9
  };
10
10
 
11
11
  exports.setNonce = index.setNonce;
@@ -1031,6 +1031,33 @@ video {
1031
1031
  }
1032
1032
  }
1033
1033
 
1034
+ /* Quality Monitor */
1035
+ .quality-monitor {
1036
+ position: absolute;
1037
+ top: 200px;
1038
+ left: 16px;
1039
+ background: rgba(0, 0, 0, 0.25);
1040
+ backdrop-filter: blur(20px);
1041
+ border-radius: 12px;
1042
+ border: 1px solid rgba(255, 255, 255, 0.1);
1043
+ z-index: 35;
1044
+ width: fit-content;
1045
+ animation: slideInFromLeft 0.3s ease-out;
1046
+ transition: all 0.3s ease;
1047
+ }
1048
+
1049
+ .quality-text {
1050
+ padding: 6px 10px;
1051
+ font-size: 11px;
1052
+ color: white;
1053
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
1054
+ line-height: 1.4;
1055
+ }
1056
+
1057
+ .quality-fail {
1058
+ color: #ff9999;
1059
+ }
1060
+
1034
1061
  /* Animación pulsante para valores críticos */
1035
1062
  @keyframes pulse {
1036
1063
  0%, 100% {
@@ -1045,3 +1072,16 @@ video {
1045
1072
  animation: pulse 2s infinite;
1046
1073
  }
1047
1074
 
1075
+ /* Mobile optimizations */
1076
+ @media (max-width: 480px) {
1077
+ .quality-monitor {
1078
+ top: 160px;
1079
+ left: 12px;
1080
+ }
1081
+
1082
+ .quality-text {
1083
+ padding: 4px 8px;
1084
+ font-size: 10px;
1085
+ }
1086
+ }
1087
+
@@ -3,18 +3,12 @@ import { ServiceContainer } from "../../services/ServiceContainer";
3
3
  export class JaakStamps {
4
4
  el;
5
5
  debug = false;
6
- alignmentTolerance = 10;
7
- maskSize = 90;
8
- cropMargin = 0;
6
+ alignmentTolerance = 20;
7
+ maskSize = 80;
8
+ cropMargin = 20;
9
9
  useDocumentClassification = false;
10
10
  preferredCamera = 'auto';
11
11
  captureDelay = 1000;
12
- enableQualityValidation = true;
13
- qualityThreshold = 60;
14
- minQualityScore = 45;
15
- minFocusScore = 16;
16
- minBlurScore = 22;
17
- maxReflectionScore = 15;
18
12
  captureCompleted;
19
13
  isReady;
20
14
  // State derived from services
@@ -33,12 +27,6 @@ export class JaakStamps {
33
27
  type: 'initializing',
34
28
  isInitialized: false
35
29
  };
36
- qualityFeedback = {
37
- message: 'Analizando calidad...',
38
- score: 0,
39
- hasIssues: false,
40
- canCapture: false
41
- };
42
30
  performanceData = {
43
31
  fps: 0,
44
32
  inferenceTime: 0,
@@ -107,13 +95,7 @@ export class JaakStamps {
107
95
  cropMargin: this.cropMargin,
108
96
  useDocumentClassification: this.useDocumentClassification,
109
97
  preferredCamera: this.preferredCamera,
110
- captureDelay: this.captureDelay,
111
- enableQualityValidation: this.enableQualityValidation,
112
- qualityThreshold: this.qualityThreshold,
113
- minQualityScore: this.minQualityScore,
114
- minFocusScore: this.minFocusScore,
115
- minBlurScore: this.minBlurScore,
116
- maxReflectionScore: this.maxReflectionScore
98
+ captureDelay: this.captureDelay
117
99
  };
118
100
  this.serviceContainer = new ServiceContainer(config);
119
101
  this.logger = this.serviceContainer.getLogger();
@@ -173,26 +155,6 @@ export class JaakStamps {
173
155
  this.logger.warn(`Propiedad captureDelay inválida. Valor: ${this.captureDelay}, esperado: 0-10000. Usando valor por defecto: 1000`);
174
156
  this.captureDelay = 1000;
175
157
  }
176
- if (this.qualityThreshold < 0 || this.qualityThreshold > 100) {
177
- this.logger.warn(`Propiedad qualityThreshold inválida. Valor: ${this.qualityThreshold}, esperado: 0-100. Usando valor por defecto: 60`);
178
- this.qualityThreshold = 60;
179
- }
180
- if (this.minQualityScore < 0 || this.minQualityScore > 100) {
181
- this.logger.warn(`Propiedad minQualityScore inválida. Valor: ${this.minQualityScore}, esperado: 0-100. Usando valor por defecto: 45`);
182
- this.minQualityScore = 45;
183
- }
184
- if (this.minFocusScore < 0 || this.minFocusScore > 100) {
185
- this.logger.warn(`Propiedad minFocusScore inválida. Valor: ${this.minFocusScore}, esperado: 0-100. Usando valor por defecto: 16`);
186
- this.minFocusScore = 16;
187
- }
188
- if (this.minBlurScore < 0 || this.minBlurScore > 200) {
189
- this.logger.warn(`Propiedad minBlurScore inválida. Valor: ${this.minBlurScore}, esperado: 0-200. Usando valor por defecto: 22`);
190
- this.minBlurScore = 22;
191
- }
192
- if (this.maxReflectionScore < 0 || this.maxReflectionScore > 100) {
193
- this.logger.warn(`Propiedad maxReflectionScore inválida. Valor: ${this.maxReflectionScore}, esperado: 0-100. Usando valor por defecto: 15`);
194
- this.maxReflectionScore = 15;
195
- }
196
158
  }
197
159
  async loadOnnxRuntime() {
198
160
  if (!window.ort) {
@@ -445,63 +407,6 @@ export class JaakStamps {
445
407
  coordinates: { x, y }
446
408
  };
447
409
  }
448
- async getImageQuality() {
449
- if (!this.videoRef || !this.detectionService.isModelLoaded()) {
450
- return null;
451
- }
452
- try {
453
- const qualityResult = this.detectionService.validateImageQuality(this.videoRef);
454
- return {
455
- qualityScore: qualityResult.qualityScore,
456
- overallQuality: qualityResult.overallQuality,
457
- issues: qualityResult.issues,
458
- recommendations: qualityResult.recommendations,
459
- canCapture: this.detectionService.isImageQualityAcceptable(qualityResult)
460
- };
461
- }
462
- catch (error) {
463
- this.logger.error('Error al analizar calidad de imagen:', error);
464
- return null;
465
- }
466
- }
467
- async setQualityThresholds(thresholds) {
468
- // Validate thresholds
469
- if (thresholds.minQualityScore !== undefined && (thresholds.minQualityScore < 0 || thresholds.minQualityScore > 100)) {
470
- throw new Error('minQualityScore must be between 0 and 100');
471
- }
472
- if (thresholds.minFocusScore !== undefined && (thresholds.minFocusScore < 0 || thresholds.minFocusScore > 100)) {
473
- throw new Error('minFocusScore must be between 0 and 100');
474
- }
475
- if (thresholds.minBlurScore !== undefined && (thresholds.minBlurScore < 0 || thresholds.minBlurScore > 200)) {
476
- throw new Error('minBlurScore must be between 0 and 200');
477
- }
478
- if (thresholds.maxReflectionScore !== undefined && (thresholds.maxReflectionScore < 0 || thresholds.maxReflectionScore > 100)) {
479
- throw new Error('maxReflectionScore must be between 0 and 100');
480
- }
481
- // Update component properties
482
- if (thresholds.minQualityScore !== undefined)
483
- this.minQualityScore = thresholds.minQualityScore;
484
- if (thresholds.minFocusScore !== undefined)
485
- this.minFocusScore = thresholds.minFocusScore;
486
- if (thresholds.minBlurScore !== undefined)
487
- this.minBlurScore = thresholds.minBlurScore;
488
- if (thresholds.maxReflectionScore !== undefined)
489
- this.maxReflectionScore = thresholds.maxReflectionScore;
490
- // Update detection service
491
- this.detectionService.updateQualityThresholds(thresholds);
492
- return {
493
- success: true,
494
- thresholds: this.detectionService.getQualityThresholds()
495
- };
496
- }
497
- async getQualityThresholds() {
498
- return {
499
- minQualityScore: this.minQualityScore,
500
- minFocusScore: this.minFocusScore,
501
- minBlurScore: this.minBlurScore,
502
- maxReflectionScore: this.maxReflectionScore
503
- };
504
- }
505
410
  // DETECTION METHODS
506
411
  async startDetection() {
507
412
  this.logger.state('INICIANDO_DETECCION');
@@ -603,36 +508,8 @@ export class JaakStamps {
603
508
  // Measure preprocessing and inference time
604
509
  const inferenceStartTime = performance.now();
605
510
  const inputTensor = this.detectionService.preprocess(this.videoRef);
606
- // Enhanced detection with quality validation if enabled
607
- let detections;
608
- let qualityResult = null;
609
- let canCapture = true;
610
- if (this.enableQualityValidation) {
611
- // Use enhanced detection method with quality validation
612
- const enhancedResult = await this.detectionService.runInferenceWithQuality(inputTensor, this.videoRef);
613
- detections = enhancedResult.detections;
614
- qualityResult = enhancedResult.qualityResult;
615
- canCapture = enhancedResult.canCapture;
616
- // Update quality feedback state
617
- this.qualityFeedback = {
618
- message: enhancedResult.feedback,
619
- score: qualityResult.qualityScore,
620
- hasIssues: qualityResult.issues.length > 0,
621
- canCapture: canCapture
622
- };
623
- }
624
- else {
625
- // Standard detection without quality validation
626
- detections = await this.detectionService.runInference(inputTensor);
627
- // Quick quality feedback for real-time display
628
- const quickFeedback = this.detectionService.getQuickQualityFeedback(this.videoRef);
629
- this.qualityFeedback = {
630
- message: quickFeedback.feedback,
631
- score: 0, // Not calculated in quick mode
632
- hasIssues: quickFeedback.hasBlur || quickFeedback.hasReflections || !quickFeedback.isFocused,
633
- canCapture: true // Allow capture without strict validation
634
- };
635
- }
511
+ // Standard detection without quality validation
512
+ const detections = await this.detectionService.runInference(inputTensor);
636
513
  const inferenceTime = performance.now() - inferenceStartTime;
637
514
  // Record ONNX performance metrics
638
515
  if (this.debug) {
@@ -640,7 +517,7 @@ export class JaakStamps {
640
517
  }
641
518
  // Update best score logic
642
519
  if (this.startTime && Date.now() - this.startTime < 5000) {
643
- detections.forEach(detection => {
520
+ detections.forEach((detection) => {
644
521
  const isWellPositioned = this.detectionService.isCardInFrame(detection);
645
522
  const effectiveScore = isWellPositioned ? detection.score * 1.2 : detection.score;
646
523
  if (effectiveScore > captureState.bestScore) {
@@ -730,7 +607,7 @@ export class JaakStamps {
730
607
  deviceType: 'desktop',
731
608
  preferredFacing: null
732
609
  };
733
- return (h("div", { key: 'd71fc140c7fc87160ceaf479f9b9beae7685e9bc', class: "detector-container" }, h("div", { key: 'd83347ab6ccacfe940fb66d17adc21cff126d875', class: "video-container" }, h("video", { key: 'fb69de65e8133c7936cfb03ec86acdf89d2a8112', ref: el => this.videoRef = el, autoplay: true, muted: true, playsinline: true, class: this.shouldMirrorVideo ? 'mirror' : '', style: { display: captureState.isVideoActive ? 'block' : 'none' } }), h("div", { key: 'c957341c1a750a1732afd6bb1045c1ba9bb2993d', ref: el => this.detectionContainer = el, class: `detection-overlay ${this.shouldMirrorVideo ? 'mirror' : ''}` }, this.debug && this.detectionBoxes.map((box, index) => (h("div", { key: index, class: "detection-box", style: {
610
+ return (h("div", { key: '7af79a0ff25b51790a9477cd7b338a0584172fc2', class: "detector-container" }, h("div", { key: 'ebf6a3811e0e599f29e98325b975a645e3bfb5e0', class: "video-container" }, h("video", { key: '5208fc9574fa78b1149be5839bc26d04bf9bcdfc', ref: el => this.videoRef = el, autoplay: true, muted: true, playsinline: true, class: this.shouldMirrorVideo ? 'mirror' : '', style: { display: captureState.isVideoActive ? 'block' : 'none' } }), h("div", { key: 'b507c786eccbd21acdd884ef50bc6ec280b9d437', ref: el => this.detectionContainer = el, class: `detection-overlay ${this.shouldMirrorVideo ? 'mirror' : ''}` }, this.debug && this.detectionBoxes.map((box, index) => (h("div", { key: index, class: "detection-box", style: {
734
611
  position: 'absolute',
735
612
  left: `${box.x}px`,
736
613
  top: `${box.y}px`,
@@ -739,9 +616,7 @@ export class JaakStamps {
739
616
  border: '2px solid #32406C',
740
617
  pointerEvents: 'none',
741
618
  boxSizing: 'border-box'
742
- } })))), this.isMaskReady && (h("div", { key: 'cf81504f7f129a2bb2789dd7addfe8d365fd7973', class: "overlay-mask" }, h("div", { key: 'b0f8ab1e02d1731295b95cbca4b44be430c6104d', class: "card-outline" }, h("div", { key: 'fadb33b8dc3c2cbfbb78aa0ff4d273b2b26a3565', class: "side side-top" }), h("div", { key: '3f3ca187195c78f2c3daffa481cc275f970c68a5', class: "side side-right" }), h("div", { key: '1e6bac145a85bbee2dab24da81b8064bc4ac282b', class: "side side-bottom" }), h("div", { key: '9bef1cd7afcef6cb1975a1103ec57d33d89f7640', class: "side side-left" }), !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '9198d8b8fb1f4a17ec615943a09844f47a639048', class: "guide-text" }, this.enableQualityValidation && this.hasDocumentDetected && this.qualityFeedback.message ?
743
- this.qualityFeedback.message :
744
- 'Alinee su identificación con el marco')), this.enableQualityValidation && this.hasDocumentDetected && captureState.isVideoActive && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '04afa661c1d988d9bedb48c78672de233dd49f9b', class: `quality-indicator ${this.qualityFeedback.hasIssues ? 'warning' : 'good'}` }, h("div", { key: 'bc789e19894de1d3dfd4a232e05e612d804e0e6c', class: "quality-score" }, this.qualityFeedback.score > 0 ? `${this.qualityFeedback.score}%` : ''), h("div", { key: '0750f5e5dfdb7a7c054d01965146d34a5bb4485a', class: `quality-status ${this.qualityFeedback.canCapture ? 'ready' : 'not-ready'}` }, this.qualityFeedback.canCapture ? '✓' : '!')))), captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("button", { key: 'cbe391726b5d62acbb466c36b135e0556fc488f7', class: "skip-button", onClick: () => this.skipBackCapture(), type: "button" }, "Saltar reverso")), captureState.isVideoActive && (h("div", { key: '929f8fe054b30e3c30bf066319e957a633fa587c', class: "camera-controls" }, h("button", { key: 'b4f68dd3a6865cba49c3f5d38c43874b7b9b364d', class: `camera-selector-button ${this.isSwitchingCamera ? 'loading' : ''}`, onClick: () => this.toggleCameraSelector(), type: "button", title: "Seleccionar c\u00E1mara", disabled: this.isSwitchingCamera }, this.isSwitchingCamera ? (h("div", { class: "button-spinner" })) : ('Cámaras')))), this.showCameraSelector && cameraInfo.availableCameras.length > 0 && (h("div", { key: 'c9315ff70704fdc265af07bf765b6247814563e6', class: "camera-selector-dropdown" }, h("div", { key: 'f4950e7e3c3e279c48310a4049550f3143fb4d3f', class: "camera-selector-header" }, h("span", { key: '4cfacf909549b0e18bd8ac6e54e127ce09b75335' }, "Seleccionar C\u00E1mara"), h("button", { key: '13d7679c5235f41f0dbc38b9f397483cf4ec9ffd', class: "close-selector", onClick: () => this.toggleCameraSelector(), type: "button" }, "\u00D7")), h("div", { key: '6c97cb8ba9486c33a633901d9dd49765f87d92ed', class: "camera-list" }, cameraInfo.availableCameras.map((camera) => (h("button", { key: camera.id, class: `camera-option ${cameraInfo.selectedCameraId === camera.id ? 'selected' : ''}`, onClick: () => this.handleCameraSwitch(camera.id), type: "button" }, h("span", { class: "camera-label" }, camera.label || `Cámara ${cameraInfo.availableCameras.indexOf(camera) + 1}`), cameraInfo.selectedCameraId === camera.id && (h("span", { class: "selected-indicator" }, "\u2713")))))), h("div", { key: '35796316fc950b8491f6167303b549b098abbf58', class: "device-info" }, h("small", { key: '83c59a8cb0c0b67a37163fe75c1f1f383fcb00f4' }, "Dispositivo: ", cameraInfo.deviceType)))))), captureState.isCapturing && (h("div", { key: 'be5b316abb21c06cf5bb69ed090d43d45537a9e6', class: "capture-animation" })), captureState.showFlipAnimation && (h("div", { key: '43e64fcc325c7c96871a99838c5fa094c6774af2', class: "flip-animation" }, h("div", { key: '39223d9b593716e76912ade58b556c7212a7e05f', class: "id-card-icon" }), h("div", { key: '79463b43724c3c56c45bd5b41337117d7d415618', class: "flip-text" }, "\u00A1Voltea tu identificaci\u00F3n!"))), captureState.showSuccessAnimation && (h("div", { key: '7be8ca4d0bd59b1e4127254ff68e41321aa387cc', class: "success-animation" }, h("div", { key: '03a3e625f622c546a3016f85e029f9ea165f65c3', class: "check-icon" }), h("div", { key: '9c63faad517dad4b2ede8ec5a0998ad0b5c807d5', class: "success-text" }, "\u00A1Proceso completado!"))), h("div", { key: '94aa38c67fdaf328e74a2c1ec476987bf8e483d5', class: `component-status status-${this.currentStatus.type}` }, (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (h("div", { key: '52a460f2fe11505158331cc06d7121db80bdfed9', class: "status-spinner" })), h("div", { key: '1eabfed00df31ff30fdf818f3d33cd837a7f31a5', class: "status-content" }, h("div", { key: '4bdbadf18fc48f2fad5dafd9ddf4a78f0a81dbf5', class: "status-message" }, this.currentStatus.message), this.currentStatus.description && (h("div", { key: '14c41346fc9fc306315cdda1c54ec1e828c38f62', class: "status-description" }, this.currentStatus.description)))), this.debug && (h("div", { key: '21fb0ca08547143648097f2aa4f3eb3ade73bce1', class: "performance-monitor" }, h("div", { key: '88c990f42b5c87c9bc971acd228fc84bacec861b', class: "performance-expanded" }, h("div", { key: '351215f4b8ab202b42a4c9b0bfa8665485469f64', class: "metrics-row" }, h("div", { key: '28a2c5386ba99850f7dc41add6fb4ef073a6b8cb', class: "metric-compact" }, h("span", { key: '7a2ab758f9baf1264cd4ad70ff30f42a35c41065', class: "metric-label" }, "FPS"), h("span", { key: '1c4370d016f2bdcf61275b4869bddbd8109a7b2a', class: `metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}` }, this.performanceData.fps)), h("div", { key: 'e79c27b4cbad3e70f2df917a5147dd125d51304d', class: "metric-compact" }, h("span", { key: 'aee4c178ae751cfe94735ef9fcb78f273f9cb885', class: "metric-label" }, "MEM"), h("span", { key: '823e98dec413968ee5080b29839729e6ac9f91d2', class: `metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}` }, this.performanceData.memoryUsage, "MB"))), h("div", { key: 'e29037f684c82579a711aff022060c97ab9d93cf', class: "metrics-row" }, h("div", { key: '2917f3c4b026e3106fad741944e582aff36e10e0', class: "metric-compact" }, h("span", { key: 'e8783e8e2b18b29b37342eea376a75f257a46850', class: "metric-label" }, "INF"), h("span", { key: '30cdc1db3189135bc772aab5c31e081294ebd431', class: `metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}` }, this.performanceData.inferenceTime, "ms")), h("div", { key: 'c481ec26394e35efe38047e5fa1b835e520f49b8', class: "metric-compact" }, h("span", { key: 'c806cae91f3fcad896bd6053b6a0391ab518ab6f', class: "metric-label" }, "FRAME"), h("span", { key: 'af9996e2093c918ea903d036e637905baeef1aa2', class: `metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}` }, this.performanceData.frameProcessingTime, "ms"))), h("div", { key: '48422447a6d00f78a9f861bfc50de4ef5a628a57', class: "metrics-row" }, h("div", { key: 'c88a03fbff56f68796df33187256fd5a5a68f763', class: "metric-compact" }, h("span", { key: '5e366c35865f8bf45aecac126ce98e0e17be0825', class: "metric-label" }, "DET"), h("span", { key: '123570ac9ae59cf5ef1b992ea6c4563b753990c3', class: "metric-value good" }, this.performanceData.successfulDetections, "/", this.performanceData.totalDetections)), h("div", { key: 'dea3a496f84e80f9d6f27173c8fa2e4149bf8e0b', class: "metric-compact" }, h("span", { key: 'fe47d6c16ca84fff8824bef92d8ce9efe50dfa38', class: "metric-label" }, "RATE"), h("span", { key: '873846eb42c1ed97f4e9493871e51741766c852f', class: `metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}` }, this.performanceData.detectionRate, "%")))))), h("div", { key: 'b485b1d8fafee0314ffbf1c7934ffc9a3d4c6902', class: "watermark" }, h("img", { key: 'f5fae340c3e96ecafe26aa819dbc2411038aa953', src: "https://storage.googleapis.com/jaak-static/commons/powered-by-jaak.png", alt: "Powered by Jaak" })))));
619
+ } })))), this.isMaskReady && (h("div", { key: '53066c626b23daae351ea9a80409e8882434b0dd', class: "overlay-mask" }, h("div", { key: '77bb4048d43e328e57a5c7e1909e0a59c8957217', class: "card-outline" }, h("div", { key: 'ea0f2610d903f985286856ab69f8be24fd42148e', class: "side side-top" }), h("div", { key: 'dc671111ef4adf33aa41f4457fdf344ede23eb80', class: "side side-right" }), h("div", { key: '2475ec41577dca92b425542c8861c570ed7ecd3b', class: "side side-bottom" }), h("div", { key: 'a06171c8eb1bd6353a6464485604560d73ac04b7', class: "side side-left" }), !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: 'ecfd98f36d457fe7282b26f6a0efef5361380c76', class: "guide-text" }, "Alinee su identificaci\u00F3n con el marco"))), captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("button", { key: 'f3c7b66500110437e9e4a7442cb327f2fdc6d71f', class: "skip-button", onClick: () => this.skipBackCapture(), type: "button" }, "Saltar reverso")), captureState.isVideoActive && (h("div", { key: 'b5b2a8dfc6dbcf381c32c4caa562c27ced2e3e56', class: "camera-controls" }, h("button", { key: '6b40d4649dfa22c5ea8ca90cacce35cd0ca53ff3', class: `camera-selector-button ${this.isSwitchingCamera ? 'loading' : ''}`, onClick: () => this.toggleCameraSelector(), type: "button", title: "Seleccionar c\u00E1mara", disabled: this.isSwitchingCamera }, this.isSwitchingCamera ? (h("div", { class: "button-spinner" })) : ('Cámaras')))), this.showCameraSelector && cameraInfo.availableCameras.length > 0 && (h("div", { key: '41feec90287510b08bd1090ad15586b323007c30', class: "camera-selector-dropdown" }, h("div", { key: '8310ebe3db842c463ad428b973f841053315a76f', class: "camera-selector-header" }, h("span", { key: '6693bdfa33643dfe73798d4f25b0c2d9de7aac7c' }, "Seleccionar C\u00E1mara"), h("button", { key: '8552d45e1482c570d7ff85588d4404eec7c369d7', class: "close-selector", onClick: () => this.toggleCameraSelector(), type: "button" }, "\u00D7")), h("div", { key: '5333ec0e5fb2c50a07a7c0b7d4dfb1bb4ee0df1c', class: "camera-list" }, cameraInfo.availableCameras.map((camera) => (h("button", { key: camera.id, class: `camera-option ${cameraInfo.selectedCameraId === camera.id ? 'selected' : ''}`, onClick: () => this.handleCameraSwitch(camera.id), type: "button" }, h("span", { class: "camera-label" }, camera.label || `Cámara ${cameraInfo.availableCameras.indexOf(camera) + 1}`), cameraInfo.selectedCameraId === camera.id && (h("span", { class: "selected-indicator" }, "\u2713")))))), h("div", { key: '8adf70b0e632c56a4784dec44621688809a3ff56', class: "device-info" }, h("small", { key: '2ea23922386ecda4a9011b50faba5efe4b4e60bb' }, "Dispositivo: ", cameraInfo.deviceType)))))), captureState.isCapturing && (h("div", { key: '8e693db67fe1e6ae8f11082b8993682b6d19b11d', class: "capture-animation" })), captureState.showFlipAnimation && (h("div", { key: '474489ed7848cdc163c492a5e19f5f13231e17b3', class: "flip-animation" }, h("div", { key: 'a9bd24ca21330882f001b7811077630eb1c30f50', class: "id-card-icon" }), h("div", { key: 'ffadb660a61e0f5e3e29bdc473d987e87dc4ad8a', class: "flip-text" }, "\u00A1Voltea tu identificaci\u00F3n!"))), captureState.showSuccessAnimation && (h("div", { key: 'd2522ee33aa159d49f040a293775892fb1cb81b5', class: "success-animation" }, h("div", { key: 'e7f899fac58bc9a3d51cf2cb89ee33bb320b241f', class: "check-icon" }), h("div", { key: 'd5d0ee1f37dbc659ca625ad03cbce325be0cf0a6', class: "success-text" }, "\u00A1Proceso completado!"))), h("div", { key: '425d347666032c3982a660ebee13b47670b996cb', class: `component-status status-${this.currentStatus.type}` }, (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (h("div", { key: '4d396fa107872f9a1e526fd59dc4edf279a05792', class: "status-spinner" })), h("div", { key: '232e9ae24c8cf5ef8ac0e3442e45a920799c724d', class: "status-content" }, h("div", { key: 'fe9dc0ca6d8e8276052bac7d2d44f1c7c9730364', class: "status-message" }, this.currentStatus.message), this.currentStatus.description && (h("div", { key: '6910c7ac78fd89e6fa1165446ec6d46fb356035c', class: "status-description" }, this.currentStatus.description)))), this.debug && (h("div", { key: '7282b8afaf03da53b01a23d04babd772528c3c14', class: "performance-monitor" }, h("div", { key: 'b582b3124fed13387cd70a02a34ab2bb541f3bfc', class: "performance-expanded" }, h("div", { key: '764bac2d61224b9a5f306f50934d410e1bd27787', class: "metrics-row" }, h("div", { key: '261563f8314a9f6069b1ac6362eb9c38936a9dc7', class: "metric-compact" }, h("span", { key: '4feea98eff86620c1bc90eb65d9799102423109d', class: "metric-label" }, "FPS"), h("span", { key: 'eb15f13b27b8aa50701ad3d11c4cf87200010b67', class: `metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}` }, this.performanceData.fps)), h("div", { key: '0813c35c2c33286f2276bfb5adce59b32c7bb597', class: "metric-compact" }, h("span", { key: '201e7bcb556e63b141e42a3ffc3419eb4284bfa8', class: "metric-label" }, "MEM"), h("span", { key: '4f6703cbe0128440d0f2f22f631035ab85422c64', class: `metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}` }, this.performanceData.memoryUsage, "MB"))), h("div", { key: '6343c361c93138b9ea66e8ae8acd361b93333f8c', class: "metrics-row" }, h("div", { key: 'd3c81fe597004bf380fae2d32f3a8314317e7769', class: "metric-compact" }, h("span", { key: 'fce572af3e200a611974dceef4da02f6aecedffc', class: "metric-label" }, "INF"), h("span", { key: '18dd78d54dcecfb70ddf59b782f87f8c6f208b0f', class: `metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}` }, this.performanceData.inferenceTime, "ms")), h("div", { key: '4c31ebfd835b017fd3e41b23d6bd9b19add511aa', class: "metric-compact" }, h("span", { key: '66b1a380b9479a8fc1e8c2385cb72aa4158dc74e', class: "metric-label" }, "FRAME"), h("span", { key: '3c6e41f7f11123c524d3a9df409345929d63f352', class: `metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}` }, this.performanceData.frameProcessingTime, "ms"))), h("div", { key: '3b522e2cdfe4bd9f1dd6eb0f91ee3577dc43e490', class: "metrics-row" }, h("div", { key: 'fa1e6f687b43aa2582b8b3426feb03a16c6493fc', class: "metric-compact" }, h("span", { key: 'a9355091e71a33a6a0d7cc6c11171dcda2e51b22', class: "metric-label" }, "DET"), h("span", { key: 'beca5a7ccf4853675cf8366bcf577ebfbd46c4f0', class: "metric-value good" }, this.performanceData.successfulDetections, "/", this.performanceData.totalDetections)), h("div", { key: '4b07fc9b3d35f99bc6e77c8726192cde0476a787', class: "metric-compact" }, h("span", { key: 'a1674b538f45328ee0afb00e582c07e0b4ccf553', class: "metric-label" }, "RATE"), h("span", { key: 'fd384a5137bc3df6c939d3d698a3ef80e9087030', class: `metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}` }, this.performanceData.detectionRate, "%")))))), h("div", { key: 'ebbaf15a0ad96e4da5bbf746c32d7a4abb51b973', class: "watermark" }, h("img", { key: '8e7d274b529d1f7020ec4a7225579792763f871a', src: "https://storage.googleapis.com/jaak-static/commons/powered-by-jaak.png", alt: "Powered by Jaak" })))));
745
620
  }
746
621
  // Utility methods
747
622
  updateDetectionBoxes(boxes) {
@@ -813,19 +688,14 @@ export class JaakStamps {
813
688
  if (allSidesAligned && bestBox) {
814
689
  cardOutline?.classList.add('perfect-match');
815
690
  corners?.forEach(corner => corner.classList.add('perfect-match'));
816
- // Check quality validation before allowing capture
817
- const qualityCheckPassed = !this.enableQualityValidation || this.qualityFeedback.canCapture;
818
691
  // Debug logging
819
692
  this.logger.state('CAPTURE_EVALUATION', {
820
693
  allSidesAligned: true,
821
694
  hasScreenshotTaken: this.hasScreenshotTaken,
822
- qualityCheckPassed,
823
- enableQualityValidation: this.enableQualityValidation,
824
- qualityFeedback: this.qualityFeedback,
825
695
  captureDelay: this.captureDelay,
826
696
  alignmentStartTime: this.alignmentStartTime
827
697
  });
828
- if (!this.hasScreenshotTaken && qualityCheckPassed) {
698
+ if (!this.hasScreenshotTaken) {
829
699
  const currentTime = Date.now();
830
700
  // Initialize alignment start time if not set
831
701
  if (!this.alignmentStartTime) {
@@ -842,8 +712,7 @@ export class JaakStamps {
842
712
  if (alignmentDuration >= this.captureDelay) {
843
713
  this.logger.state('TRIGGERING_CAPTURE', {
844
714
  alignmentDuration,
845
- captureDelay: this.captureDelay,
846
- qualityScore: this.qualityFeedback.score
715
+ captureDelay: this.captureDelay
847
716
  });
848
717
  this.lastDetectedBox = bestBox;
849
718
  this.takeScreenshot().catch(error => {
@@ -856,17 +725,6 @@ export class JaakStamps {
856
725
  }, 2000);
857
726
  }
858
727
  }
859
- else if (!qualityCheckPassed) {
860
- // Reset alignment timer if quality check fails
861
- this.logger.state('QUALITY_CHECK_FAILED', {
862
- enableQualityValidation: this.enableQualityValidation,
863
- canCapture: this.qualityFeedback.canCapture,
864
- qualityScore: this.qualityFeedback.score,
865
- hasIssues: this.qualityFeedback.hasIssues
866
- });
867
- this.alignmentStartTime = undefined;
868
- cardOutline?.classList.add('quality-warning');
869
- }
870
728
  }
871
729
  else {
872
730
  cardOutline?.classList.remove('perfect-match');
@@ -1182,7 +1040,7 @@ export class JaakStamps {
1182
1040
  "getter": false,
1183
1041
  "setter": false,
1184
1042
  "reflect": false,
1185
- "defaultValue": "10"
1043
+ "defaultValue": "20"
1186
1044
  },
1187
1045
  "maskSize": {
1188
1046
  "type": "number",
@@ -1202,7 +1060,7 @@ export class JaakStamps {
1202
1060
  "getter": false,
1203
1061
  "setter": false,
1204
1062
  "reflect": false,
1205
- "defaultValue": "90"
1063
+ "defaultValue": "80"
1206
1064
  },
1207
1065
  "cropMargin": {
1208
1066
  "type": "number",
@@ -1222,7 +1080,7 @@ export class JaakStamps {
1222
1080
  "getter": false,
1223
1081
  "setter": false,
1224
1082
  "reflect": false,
1225
- "defaultValue": "0"
1083
+ "defaultValue": "20"
1226
1084
  },
1227
1085
  "useDocumentClassification": {
1228
1086
  "type": "boolean",
@@ -1283,126 +1141,6 @@ export class JaakStamps {
1283
1141
  "setter": false,
1284
1142
  "reflect": false,
1285
1143
  "defaultValue": "1000"
1286
- },
1287
- "enableQualityValidation": {
1288
- "type": "boolean",
1289
- "attribute": "enable-quality-validation",
1290
- "mutable": false,
1291
- "complexType": {
1292
- "original": "boolean",
1293
- "resolved": "boolean",
1294
- "references": {}
1295
- },
1296
- "required": false,
1297
- "optional": false,
1298
- "docs": {
1299
- "tags": [],
1300
- "text": ""
1301
- },
1302
- "getter": false,
1303
- "setter": false,
1304
- "reflect": false,
1305
- "defaultValue": "true"
1306
- },
1307
- "qualityThreshold": {
1308
- "type": "number",
1309
- "attribute": "quality-threshold",
1310
- "mutable": false,
1311
- "complexType": {
1312
- "original": "number",
1313
- "resolved": "number",
1314
- "references": {}
1315
- },
1316
- "required": false,
1317
- "optional": false,
1318
- "docs": {
1319
- "tags": [],
1320
- "text": ""
1321
- },
1322
- "getter": false,
1323
- "setter": false,
1324
- "reflect": false,
1325
- "defaultValue": "60"
1326
- },
1327
- "minQualityScore": {
1328
- "type": "number",
1329
- "attribute": "min-quality-score",
1330
- "mutable": false,
1331
- "complexType": {
1332
- "original": "number",
1333
- "resolved": "number",
1334
- "references": {}
1335
- },
1336
- "required": false,
1337
- "optional": false,
1338
- "docs": {
1339
- "tags": [],
1340
- "text": ""
1341
- },
1342
- "getter": false,
1343
- "setter": false,
1344
- "reflect": false,
1345
- "defaultValue": "45"
1346
- },
1347
- "minFocusScore": {
1348
- "type": "number",
1349
- "attribute": "min-focus-score",
1350
- "mutable": false,
1351
- "complexType": {
1352
- "original": "number",
1353
- "resolved": "number",
1354
- "references": {}
1355
- },
1356
- "required": false,
1357
- "optional": false,
1358
- "docs": {
1359
- "tags": [],
1360
- "text": ""
1361
- },
1362
- "getter": false,
1363
- "setter": false,
1364
- "reflect": false,
1365
- "defaultValue": "16"
1366
- },
1367
- "minBlurScore": {
1368
- "type": "number",
1369
- "attribute": "min-blur-score",
1370
- "mutable": false,
1371
- "complexType": {
1372
- "original": "number",
1373
- "resolved": "number",
1374
- "references": {}
1375
- },
1376
- "required": false,
1377
- "optional": false,
1378
- "docs": {
1379
- "tags": [],
1380
- "text": ""
1381
- },
1382
- "getter": false,
1383
- "setter": false,
1384
- "reflect": false,
1385
- "defaultValue": "22"
1386
- },
1387
- "maxReflectionScore": {
1388
- "type": "number",
1389
- "attribute": "max-reflection-score",
1390
- "mutable": false,
1391
- "complexType": {
1392
- "original": "number",
1393
- "resolved": "number",
1394
- "references": {}
1395
- },
1396
- "required": false,
1397
- "optional": false,
1398
- "docs": {
1399
- "tags": [],
1400
- "text": ""
1401
- },
1402
- "getter": false,
1403
- "setter": false,
1404
- "reflect": false,
1405
- "defaultValue": "15"
1406
1144
  }
1407
1145
  };
1408
1146
  }
@@ -1416,7 +1154,6 @@ export class JaakStamps {
1416
1154
  "isSwitchingCamera": {},
1417
1155
  "hasDocumentDetected": {},
1418
1156
  "currentStatus": {},
1419
- "qualityFeedback": {},
1420
1157
  "performanceData": {}
1421
1158
  };
1422
1159
  }
@@ -1457,15 +1194,20 @@ export class JaakStamps {
1457
1194
  return {
1458
1195
  "getCapturedImages": {
1459
1196
  "complexType": {
1460
- "signature": "() => Promise<import(\"/home/runner/work/jaak-stamps-webcomponent/jaak-stamps-webcomponent/src/services/interfaces/IStateManager\").CapturedImages>",
1197
+ "signature": "() => Promise<CapturedImagesResponse>",
1461
1198
  "parameters": [],
1462
1199
  "references": {
1463
1200
  "Promise": {
1464
1201
  "location": "global",
1465
1202
  "id": "global::Promise"
1203
+ },
1204
+ "CapturedImagesResponse": {
1205
+ "location": "import",
1206
+ "path": "../../types/component-types",
1207
+ "id": "src/types/component-types.ts::CapturedImagesResponse"
1466
1208
  }
1467
1209
  },
1468
- "return": "Promise<CapturedImages>"
1210
+ "return": "Promise<CapturedImagesResponse>"
1469
1211
  },
1470
1212
  "docs": {
1471
1213
  "text": "",
@@ -1559,15 +1301,20 @@ export class JaakStamps {
1559
1301
  },
1560
1302
  "getStatus": {
1561
1303
  "complexType": {
1562
- "signature": "() => Promise<{ isVideoActive: boolean; captureStep: \"front\" | \"back\" | \"completed\"; hasImages: boolean; isProcessCompleted: boolean; isModelPreloaded: boolean; }>",
1304
+ "signature": "() => Promise<StatusResponse>",
1563
1305
  "parameters": [],
1564
1306
  "references": {
1565
1307
  "Promise": {
1566
1308
  "location": "global",
1567
1309
  "id": "global::Promise"
1310
+ },
1311
+ "StatusResponse": {
1312
+ "location": "import",
1313
+ "path": "../../types/component-types",
1314
+ "id": "src/types/component-types.ts::StatusResponse"
1568
1315
  }
1569
1316
  },
1570
- "return": "Promise<{ isVideoActive: boolean; captureStep: \"front\" | \"back\" | \"completed\"; hasImages: boolean; isProcessCompleted: boolean; isModelPreloaded: boolean; }>"
1317
+ "return": "Promise<StatusResponse>"
1571
1318
  },
1572
1319
  "docs": {
1573
1320
  "text": "",
@@ -1593,15 +1340,20 @@ export class JaakStamps {
1593
1340
  },
1594
1341
  "getCameraInfo": {
1595
1342
  "complexType": {
1596
- "signature": "() => Promise<{ availableCameras: import(\"/home/runner/work/jaak-stamps-webcomponent/jaak-stamps-webcomponent/src/services/interfaces/ICameraService\").CameraInfo[]; selectedCameraId: string | null; deviceType: string; isMultipleCamerasAvailable: boolean; preferredFacing: \"environment\" | \"user\" | null; }>",
1343
+ "signature": "() => Promise<CameraInfoResponse>",
1597
1344
  "parameters": [],
1598
1345
  "references": {
1599
1346
  "Promise": {
1600
1347
  "location": "global",
1601
1348
  "id": "global::Promise"
1349
+ },
1350
+ "CameraInfoResponse": {
1351
+ "location": "import",
1352
+ "path": "../../types/component-types",
1353
+ "id": "src/types/component-types.ts::CameraInfoResponse"
1602
1354
  }
1603
1355
  },
1604
- "return": "Promise<{ availableCameras: CameraInfo[]; selectedCameraId: string; deviceType: string; isMultipleCamerasAvailable: boolean; preferredFacing: \"environment\" | \"user\"; }>"
1356
+ "return": "Promise<CameraInfoResponse>"
1605
1357
  },
1606
1358
  "docs": {
1607
1359
  "text": "",
@@ -1712,66 +1464,6 @@ export class JaakStamps {
1712
1464
  "text": "",
1713
1465
  "tags": []
1714
1466
  }
1715
- },
1716
- "getImageQuality": {
1717
- "complexType": {
1718
- "signature": "() => Promise<{ qualityScore: any; overallQuality: any; issues: any; recommendations: any; canCapture: boolean; }>",
1719
- "parameters": [],
1720
- "references": {
1721
- "Promise": {
1722
- "location": "global",
1723
- "id": "global::Promise"
1724
- }
1725
- },
1726
- "return": "Promise<{ qualityScore: any; overallQuality: any; issues: any; recommendations: any; canCapture: boolean; }>"
1727
- },
1728
- "docs": {
1729
- "text": "",
1730
- "tags": []
1731
- }
1732
- },
1733
- "setQualityThresholds": {
1734
- "complexType": {
1735
- "signature": "(thresholds: QualityThresholds) => Promise<{ success: boolean; thresholds: QualityThresholds; }>",
1736
- "parameters": [{
1737
- "name": "thresholds",
1738
- "type": "QualityThresholds",
1739
- "docs": ""
1740
- }],
1741
- "references": {
1742
- "Promise": {
1743
- "location": "global",
1744
- "id": "global::Promise"
1745
- },
1746
- "QualityThresholds": {
1747
- "location": "import",
1748
- "path": "../../services/interfaces/IDetectionService",
1749
- "id": "src/services/interfaces/IDetectionService.ts::QualityThresholds"
1750
- }
1751
- },
1752
- "return": "Promise<{ success: boolean; thresholds: QualityThresholds; }>"
1753
- },
1754
- "docs": {
1755
- "text": "",
1756
- "tags": []
1757
- }
1758
- },
1759
- "getQualityThresholds": {
1760
- "complexType": {
1761
- "signature": "() => Promise<{ minQualityScore: number; minFocusScore: number; minBlurScore: number; maxReflectionScore: number; }>",
1762
- "parameters": [],
1763
- "references": {
1764
- "Promise": {
1765
- "location": "global",
1766
- "id": "global::Promise"
1767
- }
1768
- },
1769
- "return": "Promise<{ minQualityScore: number; minFocusScore: number; minBlurScore: number; maxReflectionScore: number; }>"
1770
- },
1771
- "docs": {
1772
- "text": "",
1773
- "tags": []
1774
- }
1775
1467
  }
1776
1468
  };
1777
1469
  }