@jaak.ai/stamps 2.5.5-dev.1 → 2.5.5-dev.2

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.
@@ -18950,6 +18950,14 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
18950
18950
  this.captureDelay = 1500;
18951
18951
  }
18952
18952
  }
18953
+ // Pin onnxruntime-web to a specific version so JS bindings and WASM binary
18954
+ // always come from the same release. Without a version pin, jsDelivr serves
18955
+ // "latest" and a browser that cached files from a previous release may end up
18956
+ // mixing old JS with newer WASM (or vice versa) → ABI mismatch → main-thread
18957
+ // freeze on InferenceSession.create. Bump this constant deliberately when
18958
+ // upgrading and validate against all supported browsers.
18959
+ ORT_VERSION = '1.24.3';
18960
+ ORT_CDN_BASE = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${this.ORT_VERSION}/dist/`;
18953
18961
  async loadOnnxRuntime() {
18954
18962
  if (!window.ort) {
18955
18963
  this.updateStatus('Preparando herramientas...', 'Configurando funciones de captura', 'initializing');
@@ -18958,18 +18966,18 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
18958
18966
  // All iOS browsers use WebKit, so this applies to Safari, Chrome, Firefox, etc.
18959
18967
  const ua = navigator.userAgent;
18960
18968
  const isIOS = /iPad|iPhone|iPod/.test(ua);
18961
- if (isIOS) {
18962
- script.src = 'https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.wasm.min.js';
18963
- }
18964
- else {
18965
- script.src = 'https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.min.js';
18966
- }
18969
+ script.src = `${this.ORT_CDN_BASE}${isIOS ? 'ort.wasm.min.js' : 'ort.min.js'}`;
18967
18970
  document.head.appendChild(script);
18968
18971
  await new Promise((resolve) => {
18969
18972
  script.onload = () => {
18973
+ const ort = window.ort;
18974
+ // Pin the WASM binary URLs to the same release as the JS bindings.
18975
+ // Without this, ort would resolve wasm files from "latest" again.
18976
+ if (ort?.env?.wasm) {
18977
+ ort.env.wasm.wasmPaths = this.ORT_CDN_BASE;
18978
+ }
18970
18979
  // Configure ONNX for iOS low memory mode
18971
- if (isIOS && window.ort?.env) {
18972
- const ort = window.ort;
18980
+ if (isIOS && ort?.env) {
18973
18981
  ort.env.wasm.simd = false;
18974
18982
  ort.env.wasm.numThreads = 1;
18975
18983
  ort.env.wasm.proxy = false;
@@ -20191,7 +20199,7 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
20191
20199
  isCapturing: false
20192
20200
  };
20193
20201
  const cameraInfo = this.cameraInfoWithAutofocus;
20194
- return (h("div", { key: '20689d87a0b2f3ec851837a57f97b4bb79ecf10a', class: "detector-container" }, !this.licenseValid && this.licenseError && (h("div", { key: '3dccc3f6fd3ed0db2c2e7034d5cb0940625bade1', class: "license-error-container" }, h("div", { key: '5f39d0762dc5fea0f5d5402cd61f696090e96865', class: "license-error-card" }, h("svg", { key: '34d8290684decfe194328eba1b4af1b582f02518', class: "license-error-icon", width: "64", height: "64", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: '2cc8b54522b550f127c1b05a6f8069b78156f84a', d: "M12 22C12 22 20 18 20 12V5L12 2L4 5V12C4 18 12 22 12 22Z", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), h("path", { key: 'b3c7918292661cfc92fbc0d3ec237acb80364fa5', d: "M12 8V12", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), h("circle", { key: '86a258f69cdf26588436cba2056bdf7c92d08244', cx: "12", cy: "16", r: "0.5", fill: "currentColor", stroke: "currentColor", "stroke-width": "1" })), h("h2", { key: '06e4fbde528663e485ae9a3b04945e6c95595ab2', class: "license-error-title" }, "Licencia Requerida"), h("p", { key: '7466b075c8cf31d67535512e4bdaa1473e89ed47', class: "license-error-message" }, this.licenseError), h("p", { key: 'ba4d06029ef7e896e51ad5c6e2dd72a9a162ef08', class: "license-error-help" }, "Contacte a soporte: ", h("a", { key: '177832433d66cf581743d8774a055405fa1f83fc', href: "mailto:support@jaak.ai" }, "support@jaak.ai")), h("div", { key: 'ce1b33ae5289689c3e07cbb2a68f4411aa3ed2d2', class: "license-error-footer" }, "JAAK Stamps")))), this.licenseValid && (h("div", { key: '394ee2b3c487c9673c1df3b483900720beb42ea5', class: "video-container" }, h("video", { key: '50ba3fb80f05ed35bdc58f9d75538d083cd7af32', ref: el => this.videoRef = el, autoplay: true, muted: true, playsinline: true, class: this.shouldMirrorVideo ? 'mirror' : '', style: {
20202
+ return (h("div", { key: 'a3d244546eaeef7149d64aa95ecbb8be015ada66', class: "detector-container" }, !this.licenseValid && this.licenseError && (h("div", { key: '6400a254607f90316927c6e4798b8a2db7464864', class: "license-error-container" }, h("div", { key: '08d6ac784c680b8ca326951c8dec078c4400525b', class: "license-error-card" }, h("svg", { key: 'bbd5a1989469beaf8c18b4d8c683ae993b29828f', class: "license-error-icon", width: "64", height: "64", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: 'a136775f4775c0f4619921493ef98ec2a4ee22c2', d: "M12 22C12 22 20 18 20 12V5L12 2L4 5V12C4 18 12 22 12 22Z", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), h("path", { key: '87b34ca04da868f1e4d109c2f8c41763d6442408', d: "M12 8V12", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), h("circle", { key: 'c4b81005418baa0ae7548c192719017a62824627', cx: "12", cy: "16", r: "0.5", fill: "currentColor", stroke: "currentColor", "stroke-width": "1" })), h("h2", { key: 'ed12b053433315b6f06b76388471f48fbeedf6ba', class: "license-error-title" }, "Licencia Requerida"), h("p", { key: '07d429c3568f7623656b349467ec0b45da85b974', class: "license-error-message" }, this.licenseError), h("p", { key: 'c03e509b2de76977c96929c5dc4995195e723c91', class: "license-error-help" }, "Contacte a soporte: ", h("a", { key: 'dacd34365bb1a34148e949638ebd02c792ed0591', href: "mailto:support@jaak.ai" }, "support@jaak.ai")), h("div", { key: 'e77324a34dd06629f599d32b019a30d042913004', class: "license-error-footer" }, "JAAK Stamps")))), this.licenseValid && (h("div", { key: 'ae30ba52e849f494cf2618802e0779d4cf84ec17', class: "video-container" }, h("video", { key: '9ae44f392d00753800a6313ce42cc0aee4344407', ref: el => this.videoRef = el, autoplay: true, muted: true, playsinline: true, class: this.shouldMirrorVideo ? 'mirror' : '', style: {
20195
20203
  // Keep the element rendered (display: block) so the browser
20196
20204
  // loads stream metadata and fires 'loadedmetadata'. Hiding it
20197
20205
  // with display:none prevents metadata loading in Chrome and
@@ -20200,7 +20208,7 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
20200
20208
  // render context alive.
20201
20209
  opacity: captureState.isVideoActive ? '1' : '0',
20202
20210
  visibility: captureState.isVideoActive ? 'visible' : 'hidden',
20203
- } }), h("div", { key: 'a4ff51674115afeeb2c36aedbbbdf3769bf0af96', 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: {
20211
+ } }), h("div", { key: '59a38f3b6802619fee5d842aeeb6a43836b7f968', 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: {
20204
20212
  position: 'absolute',
20205
20213
  left: `${box.x}px`,
20206
20214
  top: `${box.y}px`,
@@ -20209,9 +20217,9 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
20209
20217
  border: '2px solid #32406C',
20210
20218
  pointerEvents: 'none',
20211
20219
  boxSizing: 'border-box'
20212
- } })))), this.isMaskReady && (h("div", { key: '6c4e710e25971692bd933486f05a231b56150e5a', class: "overlay-mask" }, h("div", { key: 'd7ec408535cd68a5a9c12e51061f3fd61745b566', class: "card-outline" }, h("div", { key: '0e4c6066cf35cdb13843e54500db8e94603203fa', class: "side side-top" }), h("div", { key: '0c61ebf0940a01b09d509675d021051ac433ba1b', class: "side side-right" }), h("div", { key: 'e1c113fa666ba1ab0b77bac98ac4b08d99bea3af', class: "side side-bottom" }), h("div", { key: '666527c49665fe1d9d04a5d3620686b7471b8d44', class: "side side-left" })), !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '71eae3c5e89eeaffd95bc32d7ed9139a5b741cc6', class: `guide-text ${this.showPerformanceMessage ? 'performance-warning-text' : ''}` }, this.getGuideText(captureState.step))), captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: 'b4d6abc22c58eabd5afb6f440701f5b909bf949e', class: "back-capture-section" }, h("div", { key: '6d4bf99ff92829efb64d6dbc7d2d14c16b7c691c', class: "back-capture-buttons" }, (!this.useDocumentDetector || this.performanceDegradedMode || this.showManualCaptureButton) && (h("button", { key: 'f8965079e936e32722b5eb1f8dfb63a84160aa5d', class: "capture-button primary-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-back' && (h("span", { key: '7defab9f244899e188659fd07bf114897737bd48', class: "button-spinner" })), "Capturar Reverso")), h("button", { key: 'd5a501876ce24f25d21df5e8d47183e80be602f3', class: "skip-button", onClick: () => this.skipBackCapture(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'skip-back' && (h("span", { key: '54e08bed19e50abdd5f5faf9e0a21d8c2cb6a368', class: "button-spinner" })), this.enableBackDocumentTimer && this.backDocumentTimerRemaining > 0
20220
+ } })))), this.isMaskReady && (h("div", { key: '1ed03a5e802b37135a40d378626bd74bb073a43f', class: "overlay-mask" }, h("div", { key: '78a0b501f4843da323084c3d497a8f56328afb5b', class: "card-outline" }, h("div", { key: 'f0336bbed8bb46da78a39b65bb16d0270db35a57', class: "side side-top" }), h("div", { key: 'adc08df2c33f1b118eb4ce9db64bb601b8b8d12c', class: "side side-right" }), h("div", { key: '5ec3d1a15fe62b8ca5a55bf6627fd02afa8feb8f', class: "side side-bottom" }), h("div", { key: '426b2309dfd9285d915bdf6ec4cb291eb2069593', class: "side side-left" })), !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '8018f394316265e3057b47b89e5e9c452524ea71', class: `guide-text ${this.showPerformanceMessage ? 'performance-warning-text' : ''}` }, this.getGuideText(captureState.step))), captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '29925b48f81be064d2e33626bb8175c5243b3864', class: "back-capture-section" }, h("div", { key: '7f3308c16486accc43462c915ae6038d97f87b58', class: "back-capture-buttons" }, (!this.useDocumentDetector || this.performanceDegradedMode || this.showManualCaptureButton) && (h("button", { key: '8369d371a1c96758ca622bc8b4e8d24b29459719', class: "capture-button primary-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-back' && (h("span", { key: '019265cc28c7f080b1dae6f61e1cf219ee2c0a95', class: "button-spinner" })), "Capturar Reverso")), h("button", { key: '5c5a9e7d629d615102af2060548cb0a06b307906', class: "skip-button", onClick: () => this.skipBackCapture(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'skip-back' && (h("span", { key: 'df999e06a6e161591fa591117c75a0763954846b', class: "button-spinner" })), this.enableBackDocumentTimer && this.backDocumentTimerRemaining > 0
20213
20221
  ? `Saltar reverso (${this.backDocumentTimerRemaining}s)`
20214
- : 'Saltar reverso')))), captureState.isVideoActive && (h("div", { key: '85998cae72d19792d41f94b3fa08fd7054e25c5e', class: "camera-controls" }, h("button", { key: 'fe0471dad8bdc5b45327da52af8b47f94fe2531a', 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: 'de26a8eda76aeec8e7095f793750b2336e2ff6c6', class: "camera-selector-dropdown" }, h("div", { key: '9b4085d7be39ab227a33d02b55dd46e96a68d330', class: "camera-selector-header" }, h("span", { key: '84104fb85d91ccd258c78365cad2e66b62d787b0' }, "Seleccionar C\u00E1mara"), h("button", { key: 'ad1d2b52e64ab8f0028e2cb083f495c2b432c054', class: "close-selector", onClick: () => this.toggleCameraSelector(), type: "button" }, "\u00D7")), h("div", { key: 'e9f56e92ed01afac36ad0986dc78bfc816e60520', 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}`, camera.hasAutofocus && (h("span", { class: "autofocus-icon", title: "Autofoco disponible" }, "\u29BF"))), cameraInfo.selectedCameraId === camera.id && (h("span", { class: "selected-indicator" }, "\u2713")))))), h("div", { key: '6fa215b5f99d33272cd96a27b2295c95113bc257', class: "device-info" }, h("small", { key: 'f8399e02a4f2a288c09df9065e138ab8def9be5f' }, "Dispositivo: ", cameraInfo.deviceType)))), this.showManualCaptureButton && captureState.step === 'front' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '4a169ae520fd5ca67716f0fe190889ace448044e', class: "manual-capture-section" }, h("button", { key: '7d7808f0d1017f6eb4c701a8582152905a228e85', class: "manual-capture-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-front' && (h("span", { key: '89ee5a34898a8ba78777177001fa4406531dac3e', class: "button-spinner" })), "Capturar Frente"))))), captureState.isCapturing && (h("div", { key: '0711e1cb5619acbade20f63f6d46bdfdf827ed12', class: "capture-animation" })), captureState.showFlipAnimation && (h("div", { key: '720c0b1dcdb85646b4973ae15abeaef0f3a91a95', class: "flip-animation" }, h("div", { key: 'a31a9500ee6f2f35f762e2f5135219ed869c6188', class: "id-card-icon" }), h("div", { key: '7237f4284d4a5b8fb471d8a568a9c3dd2eae6409', class: "flip-text" }, "\u00A1Voltea tu identificaci\u00F3n!"))), captureState.showSuccessAnimation && (h("div", { key: '94a28257187330f5aaca2302840300460f288f71', class: "success-animation" }, h("div", { key: 'ef9d9072507faac3ae29c31b87c9439f67576c14', class: "check-icon" }), h("div", { key: '7f1c077a2b3b67ebba5d12c9b69ff943b74936e9', class: "success-text" }, "\u00A1Proceso completado!"))), h("div", { key: 'b9cae83d9d9717728a27bd969293fe28702befe3', class: `component-status status-${this.currentStatus.type}` }, (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (h("div", { key: '59382426b18de9f04dcfb179acd9a49b68af45ed', class: "status-spinner" })), h("div", { key: 'baa1972a55d439a95b3f91f38f91d9f35eecd7bd', class: "status-content" }, h("div", { key: '3fac24107d04a2b0abcbe6a3a0bff6d395c096b6', class: "status-message" }, this.currentStatus.message), this.currentStatus.description && (h("div", { key: '196c12a4fc3e8f213b17bdd366da9e61c594a0b1', class: "status-description" }, this.currentStatus.description)))), this.debug && (h("div", { key: 'd5c36522d3bd46f434b19e8323a30f441d69c67c', class: "performance-monitor" }, h("div", { key: 'ccc8ae6b27be8d5d89e2722319cfc66a92c3a32f', class: "performance-expanded" }, h("div", { key: 'd7bed7384567663fafe4fa49dd24da4bdd05c9a3', class: "metrics-row" }, h("div", { key: 'a4409744d7d9e8a6288caf077ba5ebdc6aaa5371', class: "metric-compact" }, h("span", { key: '939e03d6aa0138c2b0c1cce16bebf158b9b74bd6', class: "metric-label" }, "FPS"), h("span", { key: '76c20f96b11725d41493b627e7a6b0fb0d594d60', class: `metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}` }, this.performanceData.fps)), h("div", { key: 'fafe6b165149f1f590a0b7e26b4001b09a5c70c5', class: "metric-compact" }, h("span", { key: 'a7e99f9c05aced0cb951297ce3a6011500445421', class: "metric-label" }, "MEM"), h("span", { key: '68bd733671a9664c4533e0b24b04ad0422053f77', class: `metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}` }, this.performanceData.memoryUsage, "MB"))), h("div", { key: 'a53f1ac37527de249425529aff022858c8d924c5', class: "metrics-row" }, h("div", { key: '2213e3646b22056999d29107bb32e43c61dd202f', class: "metric-compact" }, h("span", { key: '31d84002498094f88f71858a91828f42b7157d23', class: "metric-label" }, "INF"), h("span", { key: 'f0ed4e90a338a05bd5193992e7f004df9d31239a', class: `metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}` }, this.performanceData.inferenceTime, "ms")), h("div", { key: '1288cf2f5a119f146886c08f8b7f036425ead78e', class: "metric-compact" }, h("span", { key: 'db75cca343f7c6ea588e9b62da04fc5d444604a6', class: "metric-label" }, "FRAME"), h("span", { key: '40aee793f30a9cf175be6372981ce7b7be82ed07', class: `metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}` }, this.performanceData.frameProcessingTime, "ms"))), h("div", { key: 'd193a9b4c56c6a712213a779dbc6ee161b82e828', class: "metrics-row" }, h("div", { key: '89d060083973e1931232aac0d0c0f813b8aab7ef', class: "metric-compact" }, h("span", { key: '35808d7a448e3f4c6dc27b2b325adf628b9aee16', class: "metric-label" }, "DET"), h("span", { key: 'b60da4f5a4d56e738a65fd0bc480626d4839a048', class: "metric-value good" }, this.performanceData.successfulDetections, "/", this.performanceData.totalDetections)), h("div", { key: 'da779be083f58be8e914d062379b565fdbf7333d', class: "metric-compact" }, h("span", { key: '44645db15818eab212bc5b966213dda67f461d14', class: "metric-label" }, "RATE"), h("span", { key: '39209bdf5a5fa7c74718492218ff4fa404e94879', class: `metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}` }, this.performanceData.detectionRate, "%")))))), h("div", { key: 'bb0fb66ffefa86eb6e4b72215acb930c81cb6b01', class: "watermark" }, h("img", { key: '93a1812ab9a1c91c4a81cdc939ef8410170dd6b9', src: "https://static.jaak.ai/commons/powered-by-jaak.png", alt: "Powered by Jaak", onError: (e) => { e.target.src = getAssetPath('/assets/powered-by-jaak.png'); } }))))));
20222
+ : 'Saltar reverso')))), captureState.isVideoActive && (h("div", { key: 'e6a79f49886c03ecf262ade76d53994887adb17c', class: "camera-controls" }, h("button", { key: '1ca0f1e46a853411d689b8228f7418f2e8ff24b5', 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: '2a8eb6c6938875ae9971a047c20b999efd6509dc', class: "camera-selector-dropdown" }, h("div", { key: 'd95f49de7bc6ab29c6254024cf1deba6e1e13cfc', class: "camera-selector-header" }, h("span", { key: 'fd423f2b078b758dec5283faa54e64a7f7ba0bce' }, "Seleccionar C\u00E1mara"), h("button", { key: '6aca1ad6dcafe54e144cf1c0dcd08dd3a2c497f0', class: "close-selector", onClick: () => this.toggleCameraSelector(), type: "button" }, "\u00D7")), h("div", { key: '2bc34b3d59cbd0a572eee969f5a305ca08673f83', 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}`, camera.hasAutofocus && (h("span", { class: "autofocus-icon", title: "Autofoco disponible" }, "\u29BF"))), cameraInfo.selectedCameraId === camera.id && (h("span", { class: "selected-indicator" }, "\u2713")))))), h("div", { key: '5d21a6b9e6c8e205f14643b6e84487dbda375548', class: "device-info" }, h("small", { key: '5d581972b430af0fc61cc42f7f0de000e6b174ee' }, "Dispositivo: ", cameraInfo.deviceType)))), this.showManualCaptureButton && captureState.step === 'front' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: 'eb18c71b9e514a619b1e112db5ae106b38c81190', class: "manual-capture-section" }, h("button", { key: '2edec59ada00c0429e84e27e4de01d813a366bc3', class: "manual-capture-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-front' && (h("span", { key: '505e7abe8858b90fe5683676a42d1634729e6b6f', class: "button-spinner" })), "Capturar Frente"))))), captureState.isCapturing && (h("div", { key: '7345607ae827e8cca3f3fc40c727f9042e239072', class: "capture-animation" })), captureState.showFlipAnimation && (h("div", { key: 'a683f98e07a91ef4b97c219180922efea393854e', class: "flip-animation" }, h("div", { key: '4b9ca137471d62e90d416690182bf222b7c498c1', class: "id-card-icon" }), h("div", { key: 'ac3f39c86800a3ea5010055068f64889fd35cfe0', class: "flip-text" }, "\u00A1Voltea tu identificaci\u00F3n!"))), captureState.showSuccessAnimation && (h("div", { key: 'bbb692da28e5564de42c1eb56284caa864dcb9b3', class: "success-animation" }, h("div", { key: '6cc653c662db4ef5d9b2c8b5c806c9776eaab816', class: "check-icon" }), h("div", { key: 'e486173624aec1d944015ad0a0a857b9127876fc', class: "success-text" }, "\u00A1Proceso completado!"))), h("div", { key: 'dc9dd48bd3cefe8ee90e2725a0ebc600f0382f17', class: `component-status status-${this.currentStatus.type}` }, (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (h("div", { key: '90961611abd91d6cf9eacc7950c89ecd8b017237', class: "status-spinner" })), h("div", { key: '43d8e13ccda8d7c64119ddad6d4ada0868b3f038', class: "status-content" }, h("div", { key: '39ff2f9d94580b3759bc5ad7d01eb050316d2cd2', class: "status-message" }, this.currentStatus.message), this.currentStatus.description && (h("div", { key: 'a0dba517725af922d83afd2f36dbc6e69d2acd56', class: "status-description" }, this.currentStatus.description)))), this.debug && (h("div", { key: '6d5f577de7bcea145355870ac7e246963f3fe85e', class: "performance-monitor" }, h("div", { key: '6f1bb9e5e74a84272fef5f13f7179a19fc162955', class: "performance-expanded" }, h("div", { key: '17fc9a04076d6b4104ccef4d010554263e0a6e9b', class: "metrics-row" }, h("div", { key: '9ba18148930854ab784f68d5e28952d891007fe9', class: "metric-compact" }, h("span", { key: '70918fd23d3039654d07231d2ebdaff0e2d3c986', class: "metric-label" }, "FPS"), h("span", { key: 'fa95b3d6446910fc9090408334bccd84b00baf5a', class: `metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}` }, this.performanceData.fps)), h("div", { key: 'fec1b176842e9731f8385bd2f121c0481c2df058', class: "metric-compact" }, h("span", { key: '3cabbd63dadb8d2f756f080dd8f4a4d7f6708dfb', class: "metric-label" }, "MEM"), h("span", { key: '84f2e1b13e2630b63bb2728705311ae13dc3e5b1', class: `metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}` }, this.performanceData.memoryUsage, "MB"))), h("div", { key: '2753b4ee2eb2698a9f664b738d87264a0f5cf192', class: "metrics-row" }, h("div", { key: '89e256e02ff73b9c1b348fd60c4e90803cbd52de', class: "metric-compact" }, h("span", { key: '7bf4f222a8b44d856717e44343d7471c96d23669', class: "metric-label" }, "INF"), h("span", { key: '3ddf0e7aa7daaf5d715b6867c77641ac56339225', class: `metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}` }, this.performanceData.inferenceTime, "ms")), h("div", { key: '396ce3d444bf4125e49b38862204c3ecf176e842', class: "metric-compact" }, h("span", { key: 'b95910b6a51c4639cd32cfe509b23229de8992f5', class: "metric-label" }, "FRAME"), h("span", { key: '5d66332f1d1a79fd882e72ea0d082a90f9ac8a1d', class: `metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}` }, this.performanceData.frameProcessingTime, "ms"))), h("div", { key: '93b93682098d0c05b35b93059f287dd06fbaefa4', class: "metrics-row" }, h("div", { key: '7336b87d7e9041620843786a497c906c67de3024', class: "metric-compact" }, h("span", { key: '8e2428de98ccf2fb3d85365d53170f061c564f51', class: "metric-label" }, "DET"), h("span", { key: '5c909118072f4b66f42439fe2ede035dcd5be7e3', class: "metric-value good" }, this.performanceData.successfulDetections, "/", this.performanceData.totalDetections)), h("div", { key: '16882eccf6996698a90f7c17ad65ebeac82af0fa', class: "metric-compact" }, h("span", { key: 'b5bed40ee58ff219c37f0c4d3e99b9647a0b0061', class: "metric-label" }, "RATE"), h("span", { key: 'ce1317db2062cca13c728dbc437f316b90d518d1', class: `metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}` }, this.performanceData.detectionRate, "%")))))), h("div", { key: '9e760ab7f19424f10bf7bf8d0e8a1e3892cee3da', class: "watermark" }, h("img", { key: 'ce2700c6224bdbd0a498bf0251cee4308442dbdd', src: "https://static.jaak.ai/commons/powered-by-jaak.png", alt: "Powered by Jaak", onError: (e) => { e.target.src = getAssetPath('/assets/powered-by-jaak.png'); } }))))));
20215
20223
  }
20216
20224
  // Utility methods
20217
20225
  updateDetectionBoxes(boxes) {