@jaak.ai/stamps 2.0.0 → 2.1.0-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.
Files changed (45) hide show
  1. package/README.md +11 -1
  2. package/dist/cjs/jaak-stamps-webcomponent.cjs.js +1 -1
  3. package/dist/cjs/jaak-stamps.cjs.entry.js +759 -623
  4. package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
  5. package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/collection/components/my-component/my-component.css +178 -11
  8. package/dist/collection/components/my-component/my-component.js +566 -250
  9. package/dist/collection/components/my-component/my-component.js.map +1 -1
  10. package/dist/collection/services/CameraService.js +156 -344
  11. package/dist/collection/services/CameraService.js.map +1 -1
  12. package/dist/collection/services/DetectionService.js +68 -38
  13. package/dist/collection/services/DetectionService.js.map +1 -1
  14. package/dist/collection/services/EventBusService.js +1 -1
  15. package/dist/collection/services/EventBusService.js.map +1 -1
  16. package/dist/collection/services/ServiceContainer.js +4 -13
  17. package/dist/collection/services/ServiceContainer.js.map +1 -1
  18. package/dist/collection/services/interfaces/ICameraService.js.map +1 -1
  19. package/dist/collection/types/component-types.js.map +1 -1
  20. package/dist/components/jaak-stamps.js +763 -626
  21. package/dist/components/jaak-stamps.js.map +1 -1
  22. package/dist/esm/jaak-stamps-webcomponent.js +1 -1
  23. package/dist/esm/jaak-stamps.entry.js +759 -623
  24. package/dist/esm/jaak-stamps.entry.js.map +1 -1
  25. package/dist/esm/loader.js +1 -1
  26. package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +1 -1
  27. package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -1
  28. package/dist/jaak-stamps-webcomponent/p-41e88688.entry.js +2 -0
  29. package/dist/jaak-stamps-webcomponent/p-41e88688.entry.js.map +1 -0
  30. package/dist/types/components/my-component/my-component.d.ts +68 -17
  31. package/dist/types/components.d.ts +14 -8
  32. package/dist/types/services/CameraService.d.ts +12 -14
  33. package/dist/types/services/DetectionService.d.ts +10 -3
  34. package/dist/types/services/ServiceContainer.d.ts +1 -2
  35. package/dist/types/services/interfaces/ICameraService.d.ts +3 -12
  36. package/dist/types/types/component-types.d.ts +3 -0
  37. package/package.json +2 -2
  38. package/dist/collection/services/LoggerService.js +0 -40
  39. package/dist/collection/services/LoggerService.js.map +0 -1
  40. package/dist/collection/services/interfaces/ILogger.js +0 -2
  41. package/dist/collection/services/interfaces/ILogger.js.map +0 -1
  42. package/dist/jaak-stamps-webcomponent/p-2264b5b4.entry.js +0 -2
  43. package/dist/jaak-stamps-webcomponent/p-2264b5b4.entry.js.map +0 -1
  44. package/dist/types/services/LoggerService.d.ts +0 -12
  45. package/dist/types/services/interfaces/ILogger.d.ts +0 -8
@@ -1,4 +1,3 @@
1
- import { LoggerService } from "./LoggerService";
2
1
  import { EventBusService } from "./EventBusService";
3
2
  import { StateManagerService } from "./StateManagerService";
4
3
  import { CameraService } from "./CameraService";
@@ -11,13 +10,11 @@ export class ServiceContainer {
11
10
  initializeServices(config) {
12
11
  // Initialize services in dependency order
13
12
  const eventBus = new EventBusService();
14
- const logger = new LoggerService(config.debug);
15
13
  const stateManager = new StateManagerService(eventBus);
16
- const cameraService = new CameraService(logger, eventBus, config.preferredCamera);
17
- const detectionService = new DetectionService(logger, config.debug, config.useDocumentClassification);
14
+ const cameraService = new CameraService(eventBus, config.preferredCamera);
15
+ const detectionService = new DetectionService(config.debug, config.useDocumentClassification, config.useDocumentDetector);
18
16
  // Register services
19
17
  this.services.set('eventBus', eventBus);
20
- this.services.set('logger', logger);
21
18
  this.services.set('stateManager', stateManager);
22
19
  this.services.set('cameraService', cameraService);
23
20
  this.services.set('detectionService', detectionService);
@@ -29,9 +26,6 @@ export class ServiceContainer {
29
26
  }
30
27
  return service;
31
28
  }
32
- getLogger() {
33
- return this.get('logger');
34
- }
35
29
  getEventBus() {
36
30
  return this.get('eventBus');
37
31
  }
@@ -45,13 +39,10 @@ export class ServiceContainer {
45
39
  return this.get('detectionService');
46
40
  }
47
41
  updateConfig(config) {
48
- if (config.debug !== undefined) {
49
- const logger = this.services.get('logger');
50
- logger.setDebugMode(config.debug);
51
- }
52
42
  // Reinitialize services that depend on configuration changes
53
43
  if (config.preferredCamera !== undefined ||
54
- config.useDocumentClassification !== undefined) {
44
+ config.useDocumentClassification !== undefined ||
45
+ config.useDocumentDetector !== undefined) {
55
46
  // Would need to reinitialize specific services
56
47
  // For simplicity, this is omitted in this example
57
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceContainer.js","sourceRoot":"","sources":["../../src/services/ServiceContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILogger } from './interfaces/ILogger';\nimport { ICameraService } from './interfaces/ICameraService';\nimport { IDetectionService } from './interfaces/IDetectionService';\nimport { IStateManager } from './interfaces/IStateManager';\nimport { IEventBus } from './interfaces/IEventBus';\n\nimport { LoggerService } from './LoggerService';\nimport { EventBusService } from './EventBusService';\nimport { StateManagerService } from './StateManagerService';\nimport { CameraService } from './CameraService';\nimport { DetectionService } from './DetectionService';\n\nexport interface ComponentConfig {\n debug: boolean;\n alignmentTolerance: number;\n maskSize: number;\n cropMargin: number;\n useDocumentClassification: boolean;\n preferredCamera: 'auto' | 'front' | 'back';\n captureDelay: number;\n}\n\nexport class ServiceContainer {\n private services = new Map<string, any>();\n\n constructor(config: ComponentConfig) {\n this.initializeServices(config);\n }\n\n private initializeServices(config: ComponentConfig): void {\n // Initialize services in dependency order\n const eventBus = new EventBusService();\n const logger = new LoggerService(config.debug);\n const stateManager = new StateManagerService(eventBus);\n const cameraService = new CameraService(logger as any, eventBus, config.preferredCamera);\n const detectionService = new DetectionService(\n logger as any, \n config.debug, \n config.useDocumentClassification\n );\n\n // Register services\n this.services.set('eventBus', eventBus);\n this.services.set('logger', logger);\n this.services.set('stateManager', stateManager);\n this.services.set('cameraService', cameraService);\n this.services.set('detectionService', detectionService);\n }\n\n get<T>(serviceName: string): T {\n const service = this.services.get(serviceName);\n if (!service) {\n throw new Error(`Service ${serviceName} not found`);\n }\n return service as T;\n }\n\n getLogger(): ILogger {\n return this.get<ILogger>('logger');\n }\n\n getEventBus(): IEventBus {\n return this.get<IEventBus>('eventBus');\n }\n\n getStateManager(): IStateManager {\n return this.get<IStateManager>('stateManager');\n }\n\n getCameraService(): ICameraService {\n return this.get<ICameraService>('cameraService');\n }\n\n getDetectionService(): IDetectionService {\n return this.get<IDetectionService>('detectionService');\n }\n\n updateConfig(config: Partial<ComponentConfig>): void {\n if (config.debug !== undefined) {\n const logger = this.services.get('logger') as LoggerService;\n logger.setDebugMode(config.debug);\n }\n\n // Reinitialize services that depend on configuration changes\n if (config.preferredCamera !== undefined || \n config.useDocumentClassification !== undefined) {\n // Would need to reinitialize specific services\n // For simplicity, this is omitted in this example\n }\n }\n\n cleanup(): void {\n // Cleanup services in reverse order\n this.getDetectionService().cleanup();\n this.getEventBus().clear();\n this.services.clear();\n }\n}"]}
1
+ {"version":3,"file":"ServiceContainer.js","sourceRoot":"","sources":["../../src/services/ServiceContainer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAatD,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;IAE1C,YAAY,MAAuB;QACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAEO,kBAAkB,CAAC,MAAuB;QAChD,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAC3C,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,yBAAyB,EAChC,MAAM,CAAC,mBAAmB,CAC3B,CAAC;QAEF,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IAC1D,CAAC;IAED,GAAG,CAAI,WAAmB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,YAAY,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,OAAY,CAAC;IACtB,CAAC;IAGD,WAAW;QACT,OAAO,IAAI,CAAC,GAAG,CAAY,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,GAAG,CAAgB,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,GAAG,CAAiB,eAAe,CAAC,CAAC;IACnD,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,GAAG,CAAoB,kBAAkB,CAAC,CAAC;IACzD,CAAC;IAED,YAAY,CAAC,MAAgC;QAC3C,6DAA6D;QAC7D,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;YACpC,MAAM,CAAC,yBAAyB,KAAK,SAAS;YAC9C,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC7C,+CAA+C;YAC/C,kDAAkD;QACpD,CAAC;IACH,CAAC;IAED,OAAO;QACL,oCAAoC;QACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["import { ICameraService } from './interfaces/ICameraService';\nimport { IDetectionService } from './interfaces/IDetectionService';\nimport { IStateManager } from './interfaces/IStateManager';\nimport { IEventBus } from './interfaces/IEventBus';\n\nimport { EventBusService } from './EventBusService';\nimport { StateManagerService } from './StateManagerService';\nimport { CameraService } from './CameraService';\nimport { DetectionService } from './DetectionService';\n\nexport interface ComponentConfig {\n debug: boolean;\n alignmentTolerance: number;\n maskSize: number;\n cropMargin: number;\n useDocumentClassification: boolean;\n useDocumentDetector: boolean;\n preferredCamera: 'auto' | 'front' | 'back';\n captureDelay: number;\n}\n\nexport class ServiceContainer {\n private services = new Map<string, any>();\n\n constructor(config: ComponentConfig) {\n this.initializeServices(config);\n }\n\n private initializeServices(config: ComponentConfig): void {\n // Initialize services in dependency order\n const eventBus = new EventBusService();\n const stateManager = new StateManagerService(eventBus);\n const cameraService = new CameraService(eventBus, config.preferredCamera);\n const detectionService = new DetectionService(\n config.debug, \n config.useDocumentClassification,\n config.useDocumentDetector\n );\n\n // Register services\n this.services.set('eventBus', eventBus);\n this.services.set('stateManager', stateManager);\n this.services.set('cameraService', cameraService);\n this.services.set('detectionService', detectionService);\n }\n\n get<T>(serviceName: string): T {\n const service = this.services.get(serviceName);\n if (!service) {\n throw new Error(`Service ${serviceName} not found`);\n }\n return service as T;\n }\n\n\n getEventBus(): IEventBus {\n return this.get<IEventBus>('eventBus');\n }\n\n getStateManager(): IStateManager {\n return this.get<IStateManager>('stateManager');\n }\n\n getCameraService(): ICameraService {\n return this.get<ICameraService>('cameraService');\n }\n\n getDetectionService(): IDetectionService {\n return this.get<IDetectionService>('detectionService');\n }\n\n updateConfig(config: Partial<ComponentConfig>): void {\n // Reinitialize services that depend on configuration changes\n if (config.preferredCamera !== undefined || \n config.useDocumentClassification !== undefined ||\n config.useDocumentDetector !== undefined) {\n // Would need to reinitialize specific services\n // For simplicity, this is omitted in this example\n }\n }\n\n cleanup(): void {\n // Cleanup services in reverse order\n this.getDetectionService().cleanup();\n this.getEventBus().clear();\n this.services.clear();\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ICameraService.js","sourceRoot":"","sources":["../../../src/services/interfaces/ICameraService.ts"],"names":[],"mappings":"","sourcesContent":["export interface CameraInfo {\n id: string;\n label: string;\n selected: boolean;\n}\n\nexport interface CameraPreference {\n cameraId: string;\n facing: 'environment' | 'user' | null;\n timestamp: number;\n}\n\nexport interface ICameraService {\n detectDeviceType(): Promise<'mobile' | 'desktop' | 'tablet'>;\n enumerateDevices(): Promise<MediaDeviceInfo[]>;\n getAvailableCameras(): MediaDeviceInfo[];\n isMultipleCamerasAvailable(): boolean;\n getSelectedCameraId(): string | null;\n setSelectedCamera(cameraId: string): Promise<void>;\n getPreferredFacing(): 'environment' | 'user' | null;\n setupCamera(constraints?: MediaTrackConstraints): Promise<MediaStream>;\n switchCamera(cameraId: string): Promise<void>;\n flipToNextCamera(): Promise<void>;\n savePreference(): void;\n loadPreference(): void;\n isRearCamera(stream: MediaStream): boolean;\n setTorchEnabled(enabled: boolean, stream?: MediaStream): Promise<boolean>;\n focusAtPoint(x: number, y: number, stream?: MediaStream): Promise<boolean>;\n getCameraInfo(): {\n availableCameras: CameraInfo[];\n selectedCameraId: string | null;\n deviceType: string;\n isMultipleCamerasAvailable: boolean;\n preferredFacing: 'environment' | 'user' | null;\n };\n}"]}
1
+ {"version":3,"file":"ICameraService.js","sourceRoot":"","sources":["../../../src/services/interfaces/ICameraService.ts"],"names":[],"mappings":"","sourcesContent":["export interface CameraInfo {\n id: string;\n label: string;\n selected: boolean;\n hasAutofocus: boolean;\n}\n\n\nexport interface ICameraService {\n detectDeviceType(): Promise<'mobile' | 'desktop' | 'tablet'>;\n enumerateDevices(): Promise<MediaDeviceInfo[]>;\n getAvailableCameras(): MediaDeviceInfo[];\n isMultipleCamerasAvailable(): boolean;\n getSelectedCameraId(): string | null;\n setSelectedCamera(cameraId: string): Promise<void>;\n getPreferredFacing(): 'environment' | 'user' | null;\n setupCamera(constraints?: MediaTrackConstraints): Promise<MediaStream>;\n switchCamera(cameraId: string): Promise<void>;\n isRearCamera(stream: MediaStream): boolean;\n getCameraInfo(): Promise<{\n availableCameras: CameraInfo[];\n selectedCameraId: string | null;\n deviceType: string;\n isMultipleCamerasAvailable: boolean;\n preferredFacing: 'environment' | 'user' | null;\n }>;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"component-types.js","sourceRoot":"","sources":["../../src/types/component-types.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * Type definitions for component methods to avoid absolute paths in components.d.ts\n */\n\nexport interface CameraInfoResponse {\n availableCameras: Array<{ id: string; label: string; selected: boolean }>;\n selectedCameraId: string | null;\n deviceType: string;\n isMultipleCamerasAvailable: boolean;\n preferredFacing: 'environment' | 'user' | null;\n}\n\nexport interface CapturedImagesResponse {\n front: {\n fullFrame: string | null;\n cropped: string | null;\n };\n back: {\n fullFrame: string | null;\n cropped: string | null;\n };\n metadata: {\n totalImages: number;\n processCompleted: boolean;\n backCaptureSkipped: boolean;\n };\n}\n\n\nexport interface StatusResponse {\n isVideoActive: boolean;\n captureStep: 'front' | 'back' | 'completed';\n hasImages: boolean;\n isProcessCompleted: boolean;\n isModelPreloaded: boolean;\n}"]}
1
+ {"version":3,"file":"component-types.js","sourceRoot":"","sources":["../../src/types/component-types.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * Type definitions for component methods to avoid absolute paths in components.d.ts\n */\n\nexport interface CameraInfoResponse {\n availableCameras: Array<{ id: string; label: string; selected: boolean }>;\n selectedCameraId: string | null;\n deviceType: string;\n isMultipleCamerasAvailable: boolean;\n preferredFacing: 'environment' | 'user' | null;\n error?: string;\n}\n\nexport interface CapturedImagesResponse {\n front: {\n fullFrame: string | null;\n cropped: string | null;\n };\n back: {\n fullFrame: string | null;\n cropped: string | null;\n };\n metadata: {\n totalImages: number;\n processCompleted: boolean;\n backCaptureSkipped: boolean;\n };\n}\n\n\nexport interface StatusResponse {\n isVideoActive: boolean;\n captureStep: 'front' | 'back' | 'completed';\n hasImages: boolean;\n isProcessCompleted: boolean;\n isModelPreloaded: boolean;\n componentStatus?: 'initializing' | 'loading' | 'ready' | 'error';\n componentMessage?: string;\n}"]}