@jaak.ai/stamps 2.5.7 → 2.5.8-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/{index-D6NBn_qu.js → index-BcFBOmM6.js} +30 -4
- package/dist/cjs/index-BcFBOmM6.js.map +1 -0
- package/dist/cjs/jaak-stamps-webcomponent.cjs.js +2 -2
- package/dist/cjs/jaak-stamps.cjs.entry.js +195 -74
- package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
- package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/{my-component/my-component.js → jaak-stamps/jaak-stamps.js} +140 -36
- package/dist/collection/components/jaak-stamps/jaak-stamps.js.map +1 -0
- package/dist/collection/components/jaak-stamps/watermark-fallback.js.map +1 -0
- package/dist/collection/services/DetectionService.js +60 -38
- package/dist/collection/services/DetectionService.js.map +1 -1
- package/dist/components/index.js +20 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/jaak-stamps.js +197 -73
- package/dist/components/jaak-stamps.js.map +1 -1
- package/dist/esm/{index-BCfAsrzL.js → index-Cb0ILUvS.js} +30 -4
- package/dist/esm/index-Cb0ILUvS.js.map +1 -0
- package/dist/esm/jaak-stamps-webcomponent.js +3 -3
- package/dist/esm/jaak-stamps.entry.js +195 -74
- package/dist/esm/jaak-stamps.entry.js.map +1 -1
- package/dist/esm/loader.js +3 -3
- 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-63c2c085.entry.js → p-474f6bec.entry.js} +3 -3
- package/dist/jaak-stamps-webcomponent/p-474f6bec.entry.js.map +1 -0
- package/dist/jaak-stamps-webcomponent/p-Cb0ILUvS.js +3 -0
- package/dist/jaak-stamps-webcomponent/p-Cb0ILUvS.js.map +1 -0
- package/dist/types/components/{my-component/my-component.d.ts → jaak-stamps/jaak-stamps.d.ts} +7 -0
- package/dist/types/services/DetectionService.d.ts +5 -4
- package/package.json +4 -4
- package/dist/cjs/index-D6NBn_qu.js.map +0 -1
- package/dist/collection/components/my-component/my-component.js.map +0 -1
- package/dist/collection/components/my-component/watermark-fallback.js.map +0 -1
- package/dist/collection/utils/utils.js +0 -4
- package/dist/collection/utils/utils.js.map +0 -1
- package/dist/esm/index-BCfAsrzL.js.map +0 -1
- package/dist/jaak-stamps-webcomponent/p-63c2c085.entry.js.map +0 -1
- package/dist/jaak-stamps-webcomponent/p-BCfAsrzL.js +0 -3
- package/dist/jaak-stamps-webcomponent/p-BCfAsrzL.js.map +0 -1
- package/dist/types/utils/utils.d.ts +0 -1
- /package/dist/collection/components/{my-component/my-component.css → jaak-stamps/jaak-stamps.css} +0 -0
- /package/dist/collection/components/{my-component → jaak-stamps}/watermark-fallback.js +0 -0
- /package/dist/types/components/{my-component → jaak-stamps}/watermark-fallback.d.ts +0 -0
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-BcFBOmM6.js');
|
|
4
4
|
var appGlobals = require('./app-globals-V2Kpy_OQ.js');
|
|
5
5
|
|
|
6
6
|
const defineCustomElements = async (win, options) => {
|
|
7
7
|
if (typeof window === 'undefined') return undefined;
|
|
8
8
|
await appGlobals.globalScripts();
|
|
9
|
-
return index.bootstrapLazy([["jaak-stamps.cjs",[[257,"jaak-stamps",{"debug":[4],"alignmentTolerance":[2,"alignment-tolerance"],"maskSize":[2,"mask-size"],"cropMargin":[2,"crop-margin"],"useDocumentClassification":[4,"use-document-classification"],"useDocumentDetector":[4,"use-document-detector"],"preferredCamera":[1,"preferred-camera"],"captureDelay":[2,"capture-delay"],"enableBackDocumentTimer":[4,"enable-back-document-timer"],"backDocumentTimerDuration":[2,"back-document-timer-duration"],"telemetryCollectorUrl":[1,"telemetry-collector-url"],"metricsCollectorUrl":[1,"metrics-collector-url"],"enableTelemetry":[4,"enable-telemetry"],"enableMetrics":[4,"enable-metrics"],"customerId":[1,"customer-id"],"tenantId":[1,"tenant-id"],"environment":[1],"propagateTraceHeaderCorsUrls":[1,"propagate-trace-header-cors-urls"],"metricsExportIntervalMillis":[2,"metrics-export-interval-millis"],"license":[1],"licenseEnvironment":[1,"license-environment"],"traceId":[1,"trace-id"],"appId":[1,"app-id"],"detectionBoxes":[32],"sideAlignment":[32],"isMaskReady":[32],"shouldMirrorVideo":[32],"showCameraSelector":[32],"isSwitchingCamera":[32],"hasDocumentDetected":[32],"cameraInfoWithAutofocus":[32],"currentStatus":[32],"performanceData":[32],"backDocumentTimerRemaining":[32],"showManualCaptureButton":[32],"performanceDegradedMode":[32],"showPerformanceMessage":[32],"captureStateVersion":[32],"processingButton":[32],"licenseValid":[32],"licenseError":[32],"classificationDisabled":[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]}]]]], options);
|
|
9
|
+
return index.bootstrapLazy([["jaak-stamps.cjs",[[257,"jaak-stamps",{"debug":[4],"alignmentTolerance":[2,"alignment-tolerance"],"maskSize":[2,"mask-size"],"cropMargin":[2,"crop-margin"],"useDocumentClassification":[4,"use-document-classification"],"useDocumentDetector":[4,"use-document-detector"],"preferredCamera":[1,"preferred-camera"],"captureDelay":[2,"capture-delay"],"enableBackDocumentTimer":[4,"enable-back-document-timer"],"backDocumentTimerDuration":[2,"back-document-timer-duration"],"telemetryCollectorUrl":[1,"telemetry-collector-url"],"metricsCollectorUrl":[1,"metrics-collector-url"],"enableTelemetry":[4,"enable-telemetry"],"enableMetrics":[4,"enable-metrics"],"customerId":[1,"customer-id"],"tenantId":[1,"tenant-id"],"environment":[1],"propagateTraceHeaderCorsUrls":[1,"propagate-trace-header-cors-urls"],"metricsExportIntervalMillis":[2,"metrics-export-interval-millis"],"license":[1],"licenseEnvironment":[1,"license-environment"],"traceId":[1,"trace-id"],"appId":[1,"app-id"],"detectionBoxes":[32],"sideAlignment":[32],"isMaskReady":[32],"shouldMirrorVideo":[32],"showCameraSelector":[32],"isSwitchingCamera":[32],"hasDocumentDetected":[32],"cameraInfoWithAutofocus":[32],"currentStatus":[32],"performanceData":[32],"backDocumentTimerRemaining":[32],"showManualCaptureButton":[32],"performanceDegradedMode":[32],"showPerformanceMessage":[32],"captureStateVersion":[32],"processingButton":[32],"licenseValid":[32],"licenseError":[32],"classificationDisabled":[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]},null,{"license":["onLicenseChanged"],"licenseEnvironment":["onLicenseEnvironmentChanged"]}]]]], options);
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
exports.setNonce = index.setNonce;
|
package/dist/collection/components/{my-component/my-component.js → jaak-stamps/jaak-stamps.js}
RENAMED
|
@@ -24,7 +24,7 @@ export class JaakStamps {
|
|
|
24
24
|
propagateTraceHeaderCorsUrls; // Comma-separated URLs or regex patterns
|
|
25
25
|
metricsExportIntervalMillis = 60000; // Export metrics every 60 seconds
|
|
26
26
|
license; // License key for validation
|
|
27
|
-
licenseEnvironment = 'prod';
|
|
27
|
+
licenseEnvironment = 'prod';
|
|
28
28
|
traceId; // Optional trace ID for tracking
|
|
29
29
|
appId = 'jaak-stamps-web'; // Application ID for license validation
|
|
30
30
|
captureCompleted;
|
|
@@ -72,6 +72,10 @@ export class JaakStamps {
|
|
|
72
72
|
licenseValid = true; // License validation status
|
|
73
73
|
licenseError = null; // License validation error message
|
|
74
74
|
classificationDisabled = false; // Classification disabled at runtime due to errors
|
|
75
|
+
_initialized = false;
|
|
76
|
+
_initializing = false;
|
|
77
|
+
_pendingEnvironmentRetry = false;
|
|
78
|
+
_pendingInit = null;
|
|
75
79
|
// Services
|
|
76
80
|
licenseValidationService = null;
|
|
77
81
|
serviceContainer;
|
|
@@ -141,45 +145,111 @@ export class JaakStamps {
|
|
|
141
145
|
canvasPool = [];
|
|
142
146
|
MAX_CANVAS_POOL_SIZE = 3;
|
|
143
147
|
async componentWillLoad() {
|
|
148
|
+
// @Watch handlers fire synchronously when Angular sets properties, which happens
|
|
149
|
+
// BEFORE componentWillLoad (Stencil schedules componentWillLoad as a microtask after
|
|
150
|
+
// connectedCallback, while Angular sets props synchronously in that same call stack).
|
|
151
|
+
// @Watch('license') defers init to a macrotask so @Watch('licenseEnvironment') fires
|
|
152
|
+
// first. By the time we resume here, init may already be in progress.
|
|
153
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
144
154
|
if (this.debug) {
|
|
145
|
-
console.log('[JAAK-DEBUG] componentWillLoad() - Props
|
|
155
|
+
console.log('[JAAK-DEBUG] componentWillLoad() - Props after yield:');
|
|
156
|
+
console.log('[JAAK-DEBUG] license:', this.license ? this.license.substring(0, 8) + '...' : 'EMPTY');
|
|
157
|
+
console.log('[JAAK-DEBUG] licenseEnvironment:', this.licenseEnvironment);
|
|
158
|
+
console.log('[JAAK-DEBUG] _initializing:', this._initializing);
|
|
159
|
+
console.log('[JAAK-DEBUG] _initialized:', this._initialized);
|
|
146
160
|
console.log('[JAAK-DEBUG] useDocumentDetector:', this.useDocumentDetector, '(type:', typeof this.useDocumentDetector, ')');
|
|
147
161
|
console.log('[JAAK-DEBUG] useDocumentClassification:', this.useDocumentClassification);
|
|
148
162
|
console.log('[JAAK-DEBUG] debug:', this.debug);
|
|
149
|
-
console.log('[JAAK-DEBUG] license:', this.license ? this.license.substring(0, 8) + '...' : 'EMPTY');
|
|
150
|
-
console.log('[JAAK-DEBUG] licenseEnvironment:', this.licenseEnvironment);
|
|
151
163
|
console.log('[JAAK-DEBUG] alignmentTolerance:', this.alignmentTolerance);
|
|
152
164
|
console.log('[JAAK-DEBUG] maskSize:', this.maskSize);
|
|
153
165
|
console.log('[JAAK-DEBUG] captureDelay:', this.captureDelay);
|
|
154
166
|
console.log('[JAAK-DEBUG] preferredCamera:', this.preferredCamera);
|
|
155
167
|
console.log('[JAAK-DEBUG] appId:', this.appId);
|
|
156
168
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
this.updateStatus('Validando licencia...', 'Verificando autorización de uso', 'initializing');
|
|
165
|
-
await this.validateLicense();
|
|
166
|
-
// If license validation failed, stop initialization
|
|
167
|
-
if (!this.licenseValid) {
|
|
168
|
-
if (this.debug) {
|
|
169
|
-
console.error('[JAAK-DEBUG] License validation FAILED. Stopping initialization.');
|
|
169
|
+
if (!this.license) {
|
|
170
|
+
if (!this._initialized && !this._initializing) {
|
|
171
|
+
// No license and init not started — show blocking error UI
|
|
172
|
+
this.licenseValid = false;
|
|
173
|
+
this.licenseError = 'Se requiere una licencia para continuar. Por favor, proporcione una licencia usando el atributo "license".';
|
|
174
|
+
this.updateStatus('Licencia requerida', 'Proporcione una licencia para continuar', 'error');
|
|
170
175
|
}
|
|
171
|
-
return;
|
|
172
176
|
}
|
|
173
|
-
if (this.
|
|
174
|
-
|
|
177
|
+
else if (!this._initialized && !this._initializing) {
|
|
178
|
+
// License present but init hasn't started yet (no @Watch fired) — set initial status
|
|
179
|
+
// so the first render already shows it without a redundant state change in componentDidLoad
|
|
180
|
+
this.updateStatus('Validando licencia...', 'Verificando autorización de uso', 'initializing');
|
|
175
181
|
}
|
|
182
|
+
// Heavy initialization is deferred to componentDidLoad so the first render is not blocked
|
|
176
183
|
}
|
|
177
184
|
async componentDidLoad() {
|
|
185
|
+
// If @Watch('license') already scheduled or started init, let it proceed
|
|
186
|
+
if (!this.license || this._initialized || this._initializing || this._pendingInit !== null) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
await this.validateAndInitialize();
|
|
190
|
+
}
|
|
191
|
+
onLicenseChanged(newLicense) {
|
|
192
|
+
if (!newLicense || this._initialized || this._initializing) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Defer init by one macrotask (setTimeout 0) so @Watch('licenseEnvironment') fires
|
|
196
|
+
// first. Angular applies [license] before [licenseEnvironment] in template order,
|
|
197
|
+
// meaning a synchronous start here would use the Stencil default "prod" for the env.
|
|
198
|
+
if (this._pendingInit !== null)
|
|
199
|
+
clearTimeout(this._pendingInit);
|
|
200
|
+
this._pendingInit = setTimeout(async () => {
|
|
201
|
+
this._pendingInit = null;
|
|
202
|
+
if (!this._initialized && !this._initializing && this.license) {
|
|
203
|
+
this.updateStatus('Validando licencia...', 'Verificando autorización de uso', 'initializing');
|
|
204
|
+
await this.validateAndInitialize();
|
|
205
|
+
}
|
|
206
|
+
}, 0);
|
|
207
|
+
}
|
|
208
|
+
async onLicenseEnvironmentChanged() {
|
|
209
|
+
// Always recreate the service so the correct environment URL is ready.
|
|
210
|
+
this.licenseValidationService = new LicenseValidationService(this.licenseEnvironment);
|
|
211
|
+
if (this._initializing) {
|
|
212
|
+
// Validation is already in-flight with the wrong environment.
|
|
213
|
+
// Flag a retry so validateAndInitialize restarts once the current attempt ends.
|
|
214
|
+
this._pendingEnvironmentRetry = true;
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
// If @Watch('license') already scheduled a deferred init, that init will read
|
|
218
|
+
// this.licenseEnvironment at fire time (after this handler returns), so the
|
|
219
|
+
// correct URL will be used — no need to trigger a second init here.
|
|
220
|
+
if (this._pendingInit !== null) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (this._initialized) {
|
|
224
|
+
// Component was fully initialized with the wrong env URL (e.g. Ionic animation
|
|
225
|
+
// delayed Angular's CD past the initial validateAndInitialize() cycle).
|
|
226
|
+
// Re-validate the license only — services and camera are already running.
|
|
227
|
+
await this.validateLicense();
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (this.license) {
|
|
231
|
+
this.updateStatus('Validando licencia...', 'Verificando autorización de uso', 'initializing');
|
|
232
|
+
await this.validateAndInitialize();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async validateAndInitialize() {
|
|
236
|
+
if (this._initialized || this._initializing) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this._initializing = true;
|
|
178
240
|
try {
|
|
179
|
-
//
|
|
241
|
+
// Status was already set synchronously by the caller (componentWillLoad or @Watch)
|
|
242
|
+
// to avoid a state change inside componentDidLoad that Stencil warns about.
|
|
243
|
+
await this.validateLicense();
|
|
180
244
|
if (!this.licenseValid) {
|
|
245
|
+
if (this.debug) {
|
|
246
|
+
console.error('[JAAK-DEBUG] License validation FAILED. Stopping initialization.');
|
|
247
|
+
}
|
|
181
248
|
return;
|
|
182
249
|
}
|
|
250
|
+
if (this.debug) {
|
|
251
|
+
console.log('[JAAK-DEBUG] License validation OK');
|
|
252
|
+
}
|
|
183
253
|
this.updateStatus('Preparando capturador...', 'Configurando herramientas de captura', 'initializing');
|
|
184
254
|
await this.initializeServices();
|
|
185
255
|
this.updateStatus('Preparando funciones...', 'Configurando herramientas de trabajo', 'initializing');
|
|
@@ -189,9 +259,30 @@ export class JaakStamps {
|
|
|
189
259
|
if (this.debug) {
|
|
190
260
|
this.initializePerformanceMonitor();
|
|
191
261
|
}
|
|
262
|
+
this._initialized = true;
|
|
192
263
|
}
|
|
193
264
|
catch (error) {
|
|
194
|
-
|
|
265
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
266
|
+
this.updateStatus('Error de inicialización', errorMessage, 'error');
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
this._initializing = false;
|
|
270
|
+
if (this._pendingEnvironmentRetry && this.license) {
|
|
271
|
+
this._pendingEnvironmentRetry = false;
|
|
272
|
+
if (this._initialized) {
|
|
273
|
+
// Already fully initialized with wrong env URL — re-validate only the license.
|
|
274
|
+
// Services and camera are already running and don't depend on the env URL.
|
|
275
|
+
await this.validateLicense();
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Not yet initialized — full retry with the correct environment.
|
|
279
|
+
this.updateStatus('Validando licencia...', 'Verificando autorización de uso', 'initializing');
|
|
280
|
+
await this.validateAndInitialize();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this._pendingEnvironmentRetry = false;
|
|
285
|
+
}
|
|
195
286
|
}
|
|
196
287
|
}
|
|
197
288
|
async initializeServices() {
|
|
@@ -241,14 +332,14 @@ export class JaakStamps {
|
|
|
241
332
|
}
|
|
242
333
|
async validateLicense() {
|
|
243
334
|
if (!this.license) {
|
|
244
|
-
console.error('❌ No license provided for JAAK Stamps component');
|
|
245
335
|
this.licenseError = 'Este componente requiere una licencia válida. Por favor, proporcione una licencia usando el atributo "license".';
|
|
246
336
|
this.licenseValid = false;
|
|
247
337
|
this.updateStatus('Error de licencia', 'Licencia no proporcionada', 'error');
|
|
248
338
|
return;
|
|
249
339
|
}
|
|
250
340
|
try {
|
|
251
|
-
|
|
341
|
+
if (this.debug)
|
|
342
|
+
console.log('[jaak-stamps] validating license...');
|
|
252
343
|
// Initialize license validation service
|
|
253
344
|
this.licenseValidationService = new LicenseValidationService(this.licenseEnvironment);
|
|
254
345
|
// Validate the license, passing traceId and appId if provided
|
|
@@ -256,18 +347,21 @@ export class JaakStamps {
|
|
|
256
347
|
if (response && response.access_token) {
|
|
257
348
|
this.licenseValid = true;
|
|
258
349
|
this.licenseError = null;
|
|
259
|
-
|
|
350
|
+
if (this.debug)
|
|
351
|
+
console.log('[jaak-stamps] license validated successfully');
|
|
260
352
|
// Emit the traceId (either provided or generated)
|
|
261
353
|
if (response.traceId) {
|
|
262
354
|
this.traceIdGenerated.emit({ traceId: response.traceId });
|
|
263
|
-
|
|
355
|
+
if (this.debug)
|
|
356
|
+
console.log('[jaak-stamps] traceId:', response.traceId);
|
|
264
357
|
}
|
|
265
358
|
}
|
|
266
359
|
else {
|
|
267
360
|
this.licenseValid = false;
|
|
268
361
|
this.licenseError = 'La licencia proporcionada no es válida. Por favor, verifique su licencia e intente nuevamente.';
|
|
269
362
|
this.updateStatus('Error de licencia', 'Licencia inválida', 'error');
|
|
270
|
-
|
|
363
|
+
if (this.debug)
|
|
364
|
+
console.error('[jaak-stamps] invalid license');
|
|
271
365
|
}
|
|
272
366
|
}
|
|
273
367
|
catch (error) {
|
|
@@ -275,7 +369,8 @@ export class JaakStamps {
|
|
|
275
369
|
const licenseError = error;
|
|
276
370
|
this.licenseError = licenseError.error_description || 'Error al validar la licencia. Por favor, verifique su conexión e intente nuevamente.';
|
|
277
371
|
this.updateStatus('Error de licencia', 'Fallo en la validación', 'error');
|
|
278
|
-
|
|
372
|
+
if (this.debug)
|
|
373
|
+
console.error('[jaak-stamps] license validation failed:', error);
|
|
279
374
|
}
|
|
280
375
|
}
|
|
281
376
|
async setupEventListeners() {
|
|
@@ -1562,7 +1657,7 @@ export class JaakStamps {
|
|
|
1562
1657
|
isCapturing: false
|
|
1563
1658
|
};
|
|
1564
1659
|
const cameraInfo = this.cameraInfoWithAutofocus;
|
|
1565
|
-
return (h("div", { key: '
|
|
1660
|
+
return (h("div", { key: 'c0a28d9fd8a66fc8589c0111508ea959f07c143f', class: "detector-container" }, !this.licenseValid && this.licenseError && (h("div", { key: '1d0162e9d56c65f646884d12a3c73f4ed7e4c1fc', class: "license-error-container" }, h("div", { key: 'a50de01af3d60f4dbe2d17c9d059f79ad0fc8191', class: "license-error-card" }, h("svg", { key: '1dd6b599a3ca9bf818aec832638bab23b4ae4074', 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: 'c7175baf6b409428d820326e24522c7dd0b28811', 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: '1ff3c700981b50ed670a499054ceb7b4afc12bc2', d: "M12 8V12", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" }), h("circle", { key: 'f0adaa57bc3a218eedf92478f577a381fdb29268', cx: "12", cy: "16", r: "0.5", fill: "currentColor", stroke: "currentColor", "stroke-width": "1" })), h("h2", { key: '076e4aaf687e47d2553ba264af3de5ff67b03c60', class: "license-error-title" }, "Licencia Requerida"), h("p", { key: '607d2793649698c5686ee98af1e4c48921cba094', class: "license-error-message" }, this.licenseError), h("p", { key: '2d5eef84366fabdfea2106e7e5a198ab085c3a01', class: "license-error-help" }, "Contacte a soporte: ", h("a", { key: '91d7d22d72f78ae52bc8ddc0955b3ac559474579', href: "mailto:support@jaak.ai" }, "support@jaak.ai")), h("div", { key: '0ccf2e04602f740b6dd8551068c044d17691ba38', class: "license-error-footer" }, "JAAK Stamps")))), this.licenseValid && (h("div", { key: '339a6066a03d820c74cfd77ce7d582d2282dbf05', class: "video-container" }, h("video", { key: '680e86ddef25468ea253febbbc2a5b895b9be955', ref: el => this.videoRef = el, autoplay: true, muted: true, playsinline: true, class: this.shouldMirrorVideo ? 'mirror' : '', style: {
|
|
1566
1661
|
// Keep the element rendered (display: block) so the browser
|
|
1567
1662
|
// loads stream metadata and fires 'loadedmetadata'. Hiding it
|
|
1568
1663
|
// with display:none prevents metadata loading in Chrome and
|
|
@@ -1571,7 +1666,7 @@ export class JaakStamps {
|
|
|
1571
1666
|
// render context alive.
|
|
1572
1667
|
opacity: captureState.isVideoActive ? '1' : '0',
|
|
1573
1668
|
visibility: captureState.isVideoActive ? 'visible' : 'hidden',
|
|
1574
|
-
} }), h("div", { key: '
|
|
1669
|
+
} }), h("div", { key: '521004bb615866dcf160086009810a543fe26a24', 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: {
|
|
1575
1670
|
position: 'absolute',
|
|
1576
1671
|
left: `${box.x}px`,
|
|
1577
1672
|
top: `${box.y}px`,
|
|
@@ -1580,9 +1675,9 @@ export class JaakStamps {
|
|
|
1580
1675
|
border: '2px solid #32406C',
|
|
1581
1676
|
pointerEvents: 'none',
|
|
1582
1677
|
boxSizing: 'border-box'
|
|
1583
|
-
} })))), this.isMaskReady && (h("div", { key: '
|
|
1678
|
+
} })))), this.isMaskReady && (h("div", { key: '7b4657df6b922001c726e004c326fe2bc5b20e65', class: "overlay-mask" }, h("div", { key: 'c5075a15c4cb994f5628df2be55c0b01077f20f3', class: "card-outline" }, h("div", { key: '5028c29cb564a77d7e29ea8fa5877da2d93659e3', class: "side side-top" }), h("div", { key: 'e8ce9c8bf2e771ad7862e5127a7d137755f85038', class: "side side-right" }), h("div", { key: '351b74462df5ae239fa0519a4cbd994b5e5c5bac', class: "side side-bottom" }), h("div", { key: 'e0e8bbe59c665db264ed6174d18cb258dfaddc30', class: "side side-left" })), !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '6e995dbe5753cdbb54773c519389aa0822c3913a', class: `guide-text ${this.showPerformanceMessage ? 'performance-warning-text' : ''}` }, this.getGuideText(captureState.step))), captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: 'e1a10fcb0e57765247aea911eb24d2c079cde8ee', class: "back-capture-section" }, h("div", { key: '3da2aacdce5badcab9017ea5316a124690773b55', class: "back-capture-buttons" }, (!this.useDocumentDetector || this.performanceDegradedMode || this.showManualCaptureButton) && (h("button", { key: 'e04c02cfa13728d7a771243167e9c94c92e3c934', class: "capture-button primary-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-back' && (h("span", { key: '47759f79990eb34c69e39b2b9f6d71e6c2d8bb33', class: "button-spinner" })), "Capturar Reverso")), h("button", { key: 'e41860634d1df34bfa30c2559fc85322088888ee', class: "skip-button", onClick: () => this.skipBackCapture(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'skip-back' && (h("span", { key: '44358375377638cd7a7c0699fba5739f38230727', class: "button-spinner" })), this.enableBackDocumentTimer && this.backDocumentTimerRemaining > 0
|
|
1584
1679
|
? `Saltar reverso (${this.backDocumentTimerRemaining}s)`
|
|
1585
|
-
: 'Saltar reverso')))), captureState.isVideoActive && (h("div", { key: '
|
|
1680
|
+
: 'Saltar reverso')))), captureState.isVideoActive && (h("div", { key: '2f3d35c91e490da2cb458f317fb2a7ece836ca01', class: "camera-controls" }, h("button", { key: '21718e9ab6932bb8bd88ca16cc820081b1ed6469', 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: '1873af9e9d2ff2761e750713606a3b06295fb2f7', class: "camera-selector-dropdown" }, h("div", { key: 'df3f445f7ff51efe298f070c56dbfdd217397ea0', class: "camera-selector-header" }, h("span", { key: 'f9f33b0c4ed4bf62e18020f54b90f6ce09e923aa' }, "Seleccionar C\u00E1mara"), h("button", { key: '28c29c4c82557c80e42b3f524041ab8e160cfce1', class: "close-selector", onClick: () => this.toggleCameraSelector(), type: "button" }, "\u00D7")), h("div", { key: '95d06551595ca0b7d23ed16c8c4ead633f98ed2f', 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: '6844114f4fa6e6a49d1194c4eaac71db4e2c2030', class: "device-info" }, h("small", { key: 'db82272ae5d253dd59fb42326e11ca1d50c70e3e' }, "Dispositivo: ", cameraInfo.deviceType)))), this.showManualCaptureButton && captureState.step === 'front' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (h("div", { key: '04bc5e0a469478dab6a5e1e957fa830be15555bc', class: "manual-capture-section" }, h("button", { key: '4fae0d4ca89e718a69143d6167dc3f295bc2fafa', class: "manual-capture-button", onClick: () => this.takeManualScreenshot(), type: "button", disabled: this.processingButton !== null }, this.processingButton === 'capture-front' && (h("span", { key: '5cb26e80c3216ce4940cf24ff1c18e0664a45eb7', class: "button-spinner" })), "Capturar Frente"))))), captureState.isCapturing && (h("div", { key: 'c4e99932aca8940f339aa80d1c9659223d026395', class: "capture-animation" })), captureState.showFlipAnimation && (h("div", { key: '4102bccccbae2163e7bb520761d871e07a30e34d', class: "flip-animation" }, h("div", { key: '1f9cd0f6d54f643251d24553fe6022f9045a50d6', class: "id-card-icon" }), h("div", { key: '1fba0dd3d1b25a1b39f3bda66c8706fd43bf996d', class: "flip-text" }, "\u00A1Voltea tu identificaci\u00F3n!"))), captureState.showSuccessAnimation && (h("div", { key: '08a0df4e7f7dbf5134cc89d2e300c04825b00495', class: "success-animation" }, h("div", { key: 'f94b29abea00c8293da5420981215f929fda19c3', class: "check-icon" }), h("div", { key: '01380c7e83e147bf841540178ba56d705c7f3258', class: "success-text" }, "\u00A1Proceso completado!"))), h("div", { key: '37d9824236643701b13de9d54adf83662625e6d5', class: `component-status status-${this.currentStatus.type}` }, (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (h("div", { key: '37d6da93b822edf62161a1657887ae1050d16e29', class: "status-spinner" })), h("div", { key: '6275ed024cbbeb436b7f04e0dd3bb7cfed1a6a9d', class: "status-content" }, h("div", { key: '9c983c432febd71eff737e395e3104711bf8b994', class: "status-message" }, this.currentStatus.message), this.currentStatus.description && (h("div", { key: '721704c457c378f9563cd28e1e52fa35c68636d8', class: "status-description" }, this.currentStatus.description)))), this.debug && (h("div", { key: '0e0ed8e26c2ce73601a88ea74f97da447ad957a3', class: "performance-monitor" }, h("div", { key: 'ce46a8da032a38c4c7e6afaf706af5a7ba258f74', class: "performance-expanded" }, h("div", { key: '50566325fd8e54d9b5146c95a7965b262b5cbe7e', class: "metrics-row" }, h("div", { key: '2c255f1ab96cc0fb3e454b58a37dfe22f6df8ef2', class: "metric-compact" }, h("span", { key: '151e4bbf19f362bf32bb4ec838c5ff858ae5c8e6', class: "metric-label" }, "FPS"), h("span", { key: '4dcf58fd6d13106ca1fdb28331aebf6ff71c7886', class: `metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}` }, this.performanceData.fps)), h("div", { key: '58d0745fb27b0b216fd3865e8fac4731811536c8', class: "metric-compact" }, h("span", { key: '0c16975cb5f84351fbad0b6daa6a8d1214f3226e', class: "metric-label" }, "MEM"), h("span", { key: 'cf8edc14a7ad690c80dfaeae4f2eaa0b07f88ca3', class: `metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}` }, this.performanceData.memoryUsage, "MB"))), h("div", { key: 'c50c14ac229f3a71fc37b256fd5caab77f0c43b2', class: "metrics-row" }, h("div", { key: 'b67d2719f42ae342c791d64a52e702af4d54bdbb', class: "metric-compact" }, h("span", { key: 'c2ecf87d853dc935b1dad5dd77adee52d1c56404', class: "metric-label" }, "INF"), h("span", { key: '86cad05a1846ed3e4e73175acd9a6acabbecb801', class: `metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}` }, this.performanceData.inferenceTime, "ms")), h("div", { key: '82268593f3edea53553b35d4a7ef4c4677ab56c6', class: "metric-compact" }, h("span", { key: '937ff57182396d280cb753818b62829d73f7ca4d', class: "metric-label" }, "FRAME"), h("span", { key: '6f605b44484ed9e916f16fd50c91e7eb55d45172', class: `metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}` }, this.performanceData.frameProcessingTime, "ms"))), h("div", { key: '5c3c1bd6bde1d43338be02d3f711314fc7c9603c', class: "metrics-row" }, h("div", { key: 'bfa796075c5be71dbd8f78471ad2243392561edd', class: "metric-compact" }, h("span", { key: '9c2a2999f7026c96f24ef049c2779b1b63b7759a', class: "metric-label" }, "DET"), h("span", { key: '5ea705bcde4f534d23d23cf1bfbdbf228d394b22', class: "metric-value good" }, this.performanceData.successfulDetections, "/", this.performanceData.totalDetections)), h("div", { key: 'cd73965baaed7267be05bf6a8990707b94ad3761', class: "metric-compact" }, h("span", { key: 'f7ddd8f95353e21c776c31298c4508e0ee9fffc3', class: "metric-label" }, "RATE"), h("span", { key: '2388af4b2ec742889a01b922a44f0d169e747b56', class: `metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}` }, this.performanceData.detectionRate, "%")))))), h("div", { key: '822ae802489dc1621a2edebfb513c0966ea1d4b8', class: "watermark" }, h("img", { key: 'bc98d9afb9cb8336bfac25d3f1af3a09f49aafb3', src: "https://static.jaak.ai/commons/powered-by-jaak.png", alt: "Powered by Jaak", onError: (e) => {
|
|
1586
1681
|
const img = e.target;
|
|
1587
1682
|
img.onerror = null;
|
|
1588
1683
|
img.src = POWERED_BY_JAAK_FALLBACK;
|
|
@@ -2130,7 +2225,7 @@ export class JaakStamps {
|
|
|
2130
2225
|
await this.tracingService.flush();
|
|
2131
2226
|
}
|
|
2132
2227
|
catch (error) {
|
|
2133
|
-
console.error('[
|
|
2228
|
+
console.error('[jaak-stamps] Failed to flush traces:', error);
|
|
2134
2229
|
}
|
|
2135
2230
|
}
|
|
2136
2231
|
this.captureCompleted.emit(finalImages);
|
|
@@ -2406,12 +2501,12 @@ export class JaakStamps {
|
|
|
2406
2501
|
static get encapsulation() { return "shadow"; }
|
|
2407
2502
|
static get originalStyleUrls() {
|
|
2408
2503
|
return {
|
|
2409
|
-
"$": ["
|
|
2504
|
+
"$": ["jaak-stamps.css"]
|
|
2410
2505
|
};
|
|
2411
2506
|
}
|
|
2412
2507
|
static get styleUrls() {
|
|
2413
2508
|
return {
|
|
2414
|
-
"$": ["
|
|
2509
|
+
"$": ["jaak-stamps.css"]
|
|
2415
2510
|
};
|
|
2416
2511
|
}
|
|
2417
2512
|
static get assetsDirs() { return ["../../assets"]; }
|
|
@@ -3177,5 +3272,14 @@ export class JaakStamps {
|
|
|
3177
3272
|
};
|
|
3178
3273
|
}
|
|
3179
3274
|
static get elementRef() { return "el"; }
|
|
3275
|
+
static get watchers() {
|
|
3276
|
+
return [{
|
|
3277
|
+
"propName": "license",
|
|
3278
|
+
"methodName": "onLicenseChanged"
|
|
3279
|
+
}, {
|
|
3280
|
+
"propName": "licenseEnvironment",
|
|
3281
|
+
"methodName": "onLicenseEnvironmentChanged"
|
|
3282
|
+
}];
|
|
3283
|
+
}
|
|
3180
3284
|
}
|
|
3181
|
-
//# sourceMappingURL=
|
|
3285
|
+
//# sourceMappingURL=jaak-stamps.js.map
|