@jaak.ai/stamps 2.2.0 → 2.3.0-dev.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.
- package/dist/cjs/jaak-stamps.cjs.entry.js +58 -4
- package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
- package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
- package/dist/collection/components/my-component/my-component.js +19 -4
- package/dist/collection/components/my-component/my-component.js.map +1 -1
- package/dist/collection/services/factories/DeviceStrategyFactory.js +7 -0
- package/dist/collection/services/factories/DeviceStrategyFactory.js.map +1 -1
- package/dist/collection/services/strategies/IOSSafariStrategy.js +33 -0
- package/dist/collection/services/strategies/IOSSafariStrategy.js.map +1 -0
- package/dist/components/jaak-stamps.js +58 -4
- package/dist/components/jaak-stamps.js.map +1 -1
- package/dist/esm/jaak-stamps.entry.js +58 -4
- package/dist/esm/jaak-stamps.entry.js.map +1 -1
- package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +1 -1
- package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -1
- package/dist/jaak-stamps-webcomponent/p-04f57d50.entry.js +7 -0
- package/dist/jaak-stamps-webcomponent/p-04f57d50.entry.js.map +1 -0
- package/dist/types/services/strategies/IOSSafariStrategy.d.ts +12 -0
- package/package.json +1 -1
- package/dist/jaak-stamps-webcomponent/p-34bcebb1.entry.js +0 -7
- package/dist/jaak-stamps-webcomponent/p-34bcebb1.entry.js.map +0 -1
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { LowMemoryDeviceStrategy } from "../strategies/LowMemoryDeviceStrategy";
|
|
2
2
|
import { HighPerformanceDeviceStrategy } from "../strategies/HighPerformanceDeviceStrategy";
|
|
3
|
+
import { IOSSafariStrategy } from "../strategies/IOSSafariStrategy";
|
|
3
4
|
export class DeviceStrategyFactory {
|
|
4
5
|
static createStrategy() {
|
|
5
6
|
const nav = navigator;
|
|
7
|
+
const ua = navigator.userAgent;
|
|
8
|
+
// iOS Safari requires special handling due to WebKit memory constraints
|
|
9
|
+
const isIOSSafari = /iPad|iPhone|iPod/.test(ua) && /Safari/.test(ua) && !/CriOS|FxiOS|OPiOS|EdgiOS/.test(ua);
|
|
10
|
+
if (isIOSSafari) {
|
|
11
|
+
return new IOSSafariStrategy();
|
|
12
|
+
}
|
|
6
13
|
const memory = nav.deviceMemory || nav.hardwareConcurrency || 4;
|
|
7
14
|
const isLowMemory = memory <= 4;
|
|
8
15
|
if (isLowMemory) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceStrategyFactory.js","sourceRoot":"","sources":["../../../src/services/factories/DeviceStrategyFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"DeviceStrategyFactory.js","sourceRoot":"","sources":["../../../src/services/factories/DeviceStrategyFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,OAAO,qBAAqB;IAChC,MAAM,CAAC,cAAc;QACnB,MAAM,GAAG,GAAG,SAAgB,CAAC;QAC7B,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC;QAE/B,wEAAwE;QACxE,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7G,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,mBAAmB,IAAI,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,CAAC;QAEhC,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,6BAA6B,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;CACF","sourcesContent":["import { IDeviceStrategy } from '../strategies/IDeviceStrategy';\nimport { LowMemoryDeviceStrategy } from '../strategies/LowMemoryDeviceStrategy';\nimport { HighPerformanceDeviceStrategy } from '../strategies/HighPerformanceDeviceStrategy';\nimport { IOSSafariStrategy } from '../strategies/IOSSafariStrategy';\n\nexport class DeviceStrategyFactory {\n static createStrategy(): IDeviceStrategy {\n const nav = navigator as any;\n const ua = navigator.userAgent;\n\n // iOS Safari requires special handling due to WebKit memory constraints\n const isIOSSafari = /iPad|iPhone|iPod/.test(ua) && /Safari/.test(ua) && !/CriOS|FxiOS|OPiOS|EdgiOS/.test(ua);\n\n if (isIOSSafari) {\n return new IOSSafariStrategy();\n }\n\n const memory = nav.deviceMemory || nav.hardwareConcurrency || 4;\n const isLowMemory = memory <= 4;\n\n if (isLowMemory) {\n return new LowMemoryDeviceStrategy();\n } else {\n return new HighPerformanceDeviceStrategy();\n }\n }\n}"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy for iOS Safari to prevent jetsam memory kills.
|
|
3
|
+
* WebKit 26+ has a known bug with ONNX Runtime JSEP mode that causes memory exhaustion.
|
|
4
|
+
* This strategy forces pure WASM execution without GPU acceleration.
|
|
5
|
+
* See: https://github.com/microsoft/onnxruntime/issues/26827
|
|
6
|
+
*/
|
|
7
|
+
export class IOSSafariStrategy {
|
|
8
|
+
getDeviceInfo() {
|
|
9
|
+
return {
|
|
10
|
+
estimatedRAM: 3, // Assume low memory for iOS
|
|
11
|
+
isLowMemory: true,
|
|
12
|
+
isSlowConnection: false
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
getSessionOptions(_debug) {
|
|
16
|
+
return {
|
|
17
|
+
// Force pure WASM - no WebGL, no WebGPU, no JSEP
|
|
18
|
+
executionProviders: ['wasm'],
|
|
19
|
+
graphOptimizationLevel: 'disabled', // Disable graph optimization to reduce memory
|
|
20
|
+
logSeverityLevel: 4,
|
|
21
|
+
logVerbosityLevel: 0,
|
|
22
|
+
enableCpuMemArena: false, // Don't use CPU memory arena
|
|
23
|
+
enableMemPattern: false, // Don't use memory pattern optimization
|
|
24
|
+
executionMode: 'sequential', // Sequential execution uses less memory
|
|
25
|
+
interOpNumThreads: 1, // Single thread
|
|
26
|
+
intraOpNumThreads: 1, // Single thread
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
shouldUseSequentialLoading() {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=IOSSafariStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IOSSafariStrategy.js","sourceRoot":"","sources":["../../../src/services/strategies/IOSSafariStrategy.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAC5B,aAAa;QACX,OAAO;YACL,YAAY,EAAE,CAAC,EAAE,4BAA4B;YAC7C,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,MAAe;QAC/B,OAAO;YACL,iDAAiD;YACjD,kBAAkB,EAAE,CAAC,MAAM,CAAC;YAC5B,sBAAsB,EAAE,UAAU,EAAE,8CAA8C;YAClF,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,KAAK,EAAE,6BAA6B;YACvD,gBAAgB,EAAE,KAAK,EAAE,wCAAwC;YACjE,aAAa,EAAE,YAAY,EAAE,wCAAwC;YACrE,iBAAiB,EAAE,CAAC,EAAE,gBAAgB;YACtC,iBAAiB,EAAE,CAAC,EAAE,gBAAgB;SACvC,CAAC;IACJ,CAAC;IAED,0BAA0B;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { IDeviceStrategy, DeviceInfo, SessionOptions } from './IDeviceStrategy';\n\n/**\n * Strategy for iOS Safari to prevent jetsam memory kills.\n * WebKit 26+ has a known bug with ONNX Runtime JSEP mode that causes memory exhaustion.\n * This strategy forces pure WASM execution without GPU acceleration.\n * See: https://github.com/microsoft/onnxruntime/issues/26827\n */\nexport class IOSSafariStrategy implements IDeviceStrategy {\n getDeviceInfo(): DeviceInfo {\n return {\n estimatedRAM: 3, // Assume low memory for iOS\n isLowMemory: true,\n isSlowConnection: false\n };\n }\n\n getSessionOptions(_debug: boolean): SessionOptions {\n return {\n // Force pure WASM - no WebGL, no WebGPU, no JSEP\n executionProviders: ['wasm'],\n graphOptimizationLevel: 'disabled', // Disable graph optimization to reduce memory\n logSeverityLevel: 4,\n logVerbosityLevel: 0,\n enableCpuMemArena: false, // Don't use CPU memory arena\n enableMemPattern: false, // Don't use memory pattern optimization\n executionMode: 'sequential', // Sequential execution uses less memory\n interOpNumThreads: 1, // Single thread\n intraOpNumThreads: 1, // Single thread\n };\n }\n\n shouldUseSequentialLoading(): boolean {\n return true;\n }\n}\n"]}
|
|
@@ -727,9 +727,48 @@ class HighPerformanceDeviceStrategy {
|
|
|
727
727
|
}
|
|
728
728
|
}
|
|
729
729
|
|
|
730
|
+
/**
|
|
731
|
+
* Strategy for iOS Safari to prevent jetsam memory kills.
|
|
732
|
+
* WebKit 26+ has a known bug with ONNX Runtime JSEP mode that causes memory exhaustion.
|
|
733
|
+
* This strategy forces pure WASM execution without GPU acceleration.
|
|
734
|
+
* See: https://github.com/microsoft/onnxruntime/issues/26827
|
|
735
|
+
*/
|
|
736
|
+
class IOSSafariStrategy {
|
|
737
|
+
getDeviceInfo() {
|
|
738
|
+
return {
|
|
739
|
+
estimatedRAM: 3, // Assume low memory for iOS
|
|
740
|
+
isLowMemory: true,
|
|
741
|
+
isSlowConnection: false
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
getSessionOptions(_debug) {
|
|
745
|
+
return {
|
|
746
|
+
// Force pure WASM - no WebGL, no WebGPU, no JSEP
|
|
747
|
+
executionProviders: ['wasm'],
|
|
748
|
+
graphOptimizationLevel: 'disabled', // Disable graph optimization to reduce memory
|
|
749
|
+
logSeverityLevel: 4,
|
|
750
|
+
logVerbosityLevel: 0,
|
|
751
|
+
enableCpuMemArena: false, // Don't use CPU memory arena
|
|
752
|
+
enableMemPattern: false, // Don't use memory pattern optimization
|
|
753
|
+
executionMode: 'sequential', // Sequential execution uses less memory
|
|
754
|
+
interOpNumThreads: 1, // Single thread
|
|
755
|
+
intraOpNumThreads: 1, // Single thread
|
|
756
|
+
};
|
|
757
|
+
}
|
|
758
|
+
shouldUseSequentialLoading() {
|
|
759
|
+
return true;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
730
763
|
class DeviceStrategyFactory {
|
|
731
764
|
static createStrategy() {
|
|
732
765
|
const nav = navigator;
|
|
766
|
+
const ua = navigator.userAgent;
|
|
767
|
+
// iOS Safari requires special handling due to WebKit memory constraints
|
|
768
|
+
const isIOSSafari = /iPad|iPhone|iPod/.test(ua) && /Safari/.test(ua) && !/CriOS|FxiOS|OPiOS|EdgiOS/.test(ua);
|
|
769
|
+
if (isIOSSafari) {
|
|
770
|
+
return new IOSSafariStrategy();
|
|
771
|
+
}
|
|
733
772
|
const memory = nav.deviceMemory || nav.hardwareConcurrency || 4;
|
|
734
773
|
const isLowMemory = memory <= 4;
|
|
735
774
|
if (isLowMemory) {
|
|
@@ -18876,10 +18915,25 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
|
|
|
18876
18915
|
if (!window.ort) {
|
|
18877
18916
|
this.updateStatus('Preparando herramientas...', 'Configurando funciones de captura', 'initializing');
|
|
18878
18917
|
const script = document.createElement('script');
|
|
18879
|
-
|
|
18918
|
+
// iOS Safari uses WASM-only build to prevent memory issues (WebKit 26+ bug)
|
|
18919
|
+
const ua = navigator.userAgent;
|
|
18920
|
+
const isIOSSafari = /iPad|iPhone|iPod/.test(ua) && /Safari/.test(ua) && !/CriOS|FxiOS|OPiOS|EdgiOS/.test(ua);
|
|
18921
|
+
if (isIOSSafari) {
|
|
18922
|
+
script.src = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.23.0/dist/ort.wasm.min.js';
|
|
18923
|
+
}
|
|
18924
|
+
else {
|
|
18925
|
+
script.src = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.23.0/dist/ort.min.js';
|
|
18926
|
+
}
|
|
18880
18927
|
document.head.appendChild(script);
|
|
18881
18928
|
await new Promise((resolve) => {
|
|
18882
18929
|
script.onload = () => {
|
|
18930
|
+
// Configure ONNX for iOS Safari low memory mode
|
|
18931
|
+
if (isIOSSafari && window.ort?.env) {
|
|
18932
|
+
const ort = window.ort;
|
|
18933
|
+
ort.env.wasm.simd = false;
|
|
18934
|
+
ort.env.wasm.numThreads = 1;
|
|
18935
|
+
ort.env.wasm.proxy = false;
|
|
18936
|
+
}
|
|
18883
18937
|
setTimeout(async () => {
|
|
18884
18938
|
await this.finalizeInitialization();
|
|
18885
18939
|
resolve(undefined);
|
|
@@ -19736,7 +19790,7 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
|
|
|
19736
19790
|
isCapturing: false
|
|
19737
19791
|
};
|
|
19738
19792
|
const cameraInfo = this.cameraInfoWithAutofocus;
|
|
19739
|
-
return (h("div", { key: '
|
|
19793
|
+
return (h("div", { key: 'dc3aed0b4d2d84039b4a123d4bdfe484ea3320ef', class: "detector-container" }, !this.licenseValid && this.licenseError && (h("div", { key: 'a9da275905e2d051252f191be944675781632d10', class: "license-error-container" }, h("div", { key: 'a36f7408f0d862edd1183ba813c64d9be91f15c6', class: "license-error-card" }, h("svg", { key: 'a8e5f3eefc224e16fb62fc0b6d152c85cee249d1', 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: 'f645fb46a62004309dee1ede871d980c104fedc5', 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: 'ee472eb3d17cddf46bef7e96561296ff6fbb1aed', d: "M12 8V12", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), h("circle", { key: 'c58c787c6c9e307159b3103fdd240e282823aa2f', cx: "12", cy: "16", r: "0.5", fill: "currentColor", stroke: "currentColor", "stroke-width": "1" })), h("h2", { key: 'f737ae630fb7661d12a17b7e48cb2c3a1cb6cb4e', class: "license-error-title" }, "Licencia Requerida"), h("p", { key: 'fb5cf8d815cddc79f7b5e9ff39f34852a43bc976', class: "license-error-message" }, this.licenseError), h("p", { key: 'b47831ee55110b100aa0ea9cbe21d39d2fc19306', class: "license-error-help" }, "Contacte a soporte: ", h("a", { key: '52eb8dea1dfdc989b921134f57f1f3f188429061', href: "mailto:support@jaak.ai" }, "support@jaak.ai")), h("div", { key: 'fd78565f67049165236694de5ddd415421d0063e', class: "license-error-footer" }, "JAAK Stamps")))), this.licenseValid && (h("div", { key: '19e5854e1683f57dbde2d857289095db75084496', class: "video-container" }, h("video", { key: 'e44fbc4c020317899620e8aa9e7e3c854ca5a2d9', ref: el => this.videoRef = el, autoplay: true, muted: true, playsinline: true, class: this.shouldMirrorVideo ? 'mirror' : '', style: { display: captureState.isVideoActive ? 'block' : 'none' } }), h("div", { key: '2b3af557f8ccb39fd7dbcef07fa6d41d021fd772', 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: {
|
|
19740
19794
|
position: 'absolute',
|
|
19741
19795
|
left: `${box.x}px`,
|
|
19742
19796
|
top: `${box.y}px`,
|
|
@@ -19745,9 +19799,9 @@ const JaakStamps$1 = /*@__PURE__*/ proxyCustomElement(class JaakStamps extends H
|
|
|
19745
19799
|
border: '2px solid #32406C',
|
|
19746
19800
|
pointerEvents: 'none',
|
|
19747
19801
|
boxSizing: 'border-box'
|
|
19748
|
-
} })))), this.isMaskReady && (h("div", { key: '
|
|
19802
|
+
} })))), this.isMaskReady && (h("div", { key: '2cf20cef5e5dc4d5d3282413dce2af0f75b1babe', class: "overlay-mask" }, h("div", { key: '241879ebba739d63a736eca258b735c5c8fdac00', class: "card-outline" }, h("div", { key: '30d895b1a438636d9cd9a759b0fc096446e256a1', class: "side side-top" }), h("div", { key: 'dcca6a422e4c1c20bfc1bd17d7f45305422386a8', class: "side side-right" }), h("div", { key: '2cec938bd863737ae9c0906ed0bce2f16b7461fa', class: "side side-bottom" }), h("div", { key: 'c6045def438350be85f4333b9166111a9820c8fd', class: "side side-left" })), !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '187bb5013fe6e7454bfc498b3f24844bb16881a3', class: `guide-text ${this.showPerformanceMessage ? 'performance-warning-text' : ''}` }, this.getGuideText(captureState.step))), captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: 'a8ffba382875432493eb6564e4d8872d5d7e485a', class: "back-capture-section" }, h("div", { key: '562c149a1f81b8a73df631c81dc2119c1b9427cd', class: "back-capture-buttons" }, (!this.useDocumentDetector || this.performanceDegradedMode || this.showManualCaptureButton) && (h("button", { key: '6dc9a222959df902caec68d72c885fba11e41a79', class: "capture-button primary-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-back' && (h("span", { key: 'dd3ae6cdba5f4e6085d4d31abebda12f1c1367f8', class: "button-spinner" })), "Capturar Reverso")), h("button", { key: 'cddd1951d4370da5165bf0fa450e3c176ec6cf61', class: "skip-button", onClick: () => this.skipBackCapture(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'skip-back' && (h("span", { key: 'da8c1c0af97e164150110cce97d4f4d83e9ffb20', class: "button-spinner" })), this.enableBackDocumentTimer && this.backDocumentTimerRemaining > 0
|
|
19749
19803
|
? `Saltar reverso (${this.backDocumentTimerRemaining}s)`
|
|
19750
|
-
: 'Saltar reverso')))), captureState.isVideoActive && (h("div", { key: '
|
|
19804
|
+
: 'Saltar reverso')))), captureState.isVideoActive && (h("div", { key: 'd6478c7161d61e1f9f95a9d7bd13cd0cde157061', class: "camera-controls" }, h("button", { key: 'dfede9b72f07c88fc5133d3951ddfb6e507b8e8a', 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: '9218f824cc57b7a8b08f87ed0728c3995fa8b57e', class: "camera-selector-dropdown" }, h("div", { key: '48828e7532f49c3e9eece8051585aa803ea3c69e', class: "camera-selector-header" }, h("span", { key: '49488cbea9f196788e4110cb9b1f132b8097a771' }, "Seleccionar C\u00E1mara"), h("button", { key: '5b762a2da1719c645a490e5234703ba07c50d294', class: "close-selector", onClick: () => this.toggleCameraSelector(), type: "button" }, "\u00D7")), h("div", { key: '4c13d185e4166dc59621dd8a79a2e7123d810dff', 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: '6860e0fbc0578a74fcd59b3567dd6e4f9a5a4139', class: "device-info" }, h("small", { key: '45e6045c7fdc0f4d58bc3c4da059a6b7c2ce09f6' }, "Dispositivo: ", cameraInfo.deviceType)))), this.showManualCaptureButton && captureState.step === 'front' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '600d4932b6a7ae7529ef9dc8c22bb352e0f3ae5d', class: "manual-capture-section" }, h("button", { key: '6ad22fbe065602d9214530c374aed05d728114cc', class: "manual-capture-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-front' && (h("span", { key: 'd54d5624764ef2774bac1f77551d4c657f4b3e92', class: "button-spinner" })), "Capturar Frente"))))), captureState.isCapturing && (h("div", { key: 'ab8c46dd497c3911e72d685310c4dccd0e5aca57', class: "capture-animation" })), captureState.showFlipAnimation && (h("div", { key: '545fc8d38085825921e5d61e9d20960b5767a50a', class: "flip-animation" }, h("div", { key: 'fd8540ca1e388070233e366aef791e00c1970de1', class: "id-card-icon" }), h("div", { key: 'f952bdf0b5eccffe5d6b36930250e699ebfb8fd8', class: "flip-text" }, "\u00A1Voltea tu identificaci\u00F3n!"))), captureState.showSuccessAnimation && (h("div", { key: 'cd9b11e3de2f799096b610582b66e044eda64c2e', class: "success-animation" }, h("div", { key: '73091c9dae5e6c0f2dbd23bf2e0b760f2495f33b', class: "check-icon" }), h("div", { key: 'ad2f9b0b90190b385740bb2fd4ed9454858f13a2', class: "success-text" }, "\u00A1Proceso completado!"))), h("div", { key: 'd74d66f12fab510f0aff01f0e233482ed6f63e46', class: `component-status status-${this.currentStatus.type}` }, (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (h("div", { key: '9060ae79961c7b1b473d5148493fda6462e50388', class: "status-spinner" })), h("div", { key: 'fd0c61e49a751afd826d30ed9f63b96b58c8e275', class: "status-content" }, h("div", { key: 'd0f0e155fba7a09658f7c21beae5f07c26c0701e', class: "status-message" }, this.currentStatus.message), this.currentStatus.description && (h("div", { key: '0694da4ec0ef14750097e69e8caf1db88cf58ed5', class: "status-description" }, this.currentStatus.description)))), this.debug && (h("div", { key: '277369112303b12a3cef89c1b7218fdc6f130723', class: "performance-monitor" }, h("div", { key: 'f6456cfd210c0d4b8b02b2b73d2405fa7c12923d', class: "performance-expanded" }, h("div", { key: '2cd33cbccf2cf3422f09bd3b914a3bc37b0a1190', class: "metrics-row" }, h("div", { key: '7871e7fe4f63249731ff33f87023351d9c5ded77', class: "metric-compact" }, h("span", { key: 'b864eb43b44838fd5c67c8e430bfa04553130473', class: "metric-label" }, "FPS"), h("span", { key: '7a0e6f4ebcf80b1483102094e0906b2b1a5aa83b', class: `metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}` }, this.performanceData.fps)), h("div", { key: 'ef5e590957e12bd6e9371710654278396baa5314', class: "metric-compact" }, h("span", { key: '5cc740e4a2a1e07eb53bcb0cc8c5c3df59f27730', class: "metric-label" }, "MEM"), h("span", { key: '758018f1731d7f26aa5d84e7563b059f352be361', class: `metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}` }, this.performanceData.memoryUsage, "MB"))), h("div", { key: '1bedd37486ae4b8ba547507f2664ea19c67a18c7', class: "metrics-row" }, h("div", { key: '4f99be14cda01b199cae93905043a6e03a852d1b', class: "metric-compact" }, h("span", { key: 'c29a4a3461633e776cd86168c59c89c6b39af18d', class: "metric-label" }, "INF"), h("span", { key: '9401828ffd1d3e41ce473ba3d0aec592a683472f', class: `metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}` }, this.performanceData.inferenceTime, "ms")), h("div", { key: '7d4fdad150bb665640add08464ea361aeaa8ef6b', class: "metric-compact" }, h("span", { key: '7c21d775970466b339fdbb392227ec7006b87e31', class: "metric-label" }, "FRAME"), h("span", { key: '255d408312a11f350ea75654fc64edf0d4bcfef2', class: `metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}` }, this.performanceData.frameProcessingTime, "ms"))), h("div", { key: '54ab129c3ffda4f1a32a2b0f437a7c38cb480aba', class: "metrics-row" }, h("div", { key: 'a246db2ef3a69d0d64827a73dd32968cb1e978e9', class: "metric-compact" }, h("span", { key: '8da1c9a5be45bcc23584234cb04f0e75fa3662c6', class: "metric-label" }, "DET"), h("span", { key: 'ad05c2b885a6b344391f70ce3acee8b41523743d', class: "metric-value good" }, this.performanceData.successfulDetections, "/", this.performanceData.totalDetections)), h("div", { key: '7449e8f7cbd15a6b828b90c923212c3578de3d11', class: "metric-compact" }, h("span", { key: 'da37f89e9641edfdfd60de7fdbf2f6285a2a4120', class: "metric-label" }, "RATE"), h("span", { key: 'de71b2072ce451a304ceb6b158d32b0ecde6d64a', class: `metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}` }, this.performanceData.detectionRate, "%")))))), h("div", { key: '6e2c10e239bca24062cd2972b5e4a3eb0951d0eb', class: "watermark" }, h("img", { key: '63fbe0ade07a191ccc9c007fc2813ac8f6e5ab2f', src: "https://storage.googleapis.com/jaak-static/commons/powered-by-jaak.png", alt: "Powered by Jaak" }))))));
|
|
19751
19805
|
}
|
|
19752
19806
|
// Utility methods
|
|
19753
19807
|
updateDetectionBoxes(boxes) {
|