@jaak.ai/stamps 2.0.0-dev.30 → 2.0.0-dev.31

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 (68) hide show
  1. package/dist/cjs/jaak-stamps-webcomponent.cjs.js +1 -1
  2. package/dist/cjs/jaak-stamps.cjs.entry.js +1300 -1254
  3. package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
  4. package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/collection/components/my-component/my-component.css +132 -66
  7. package/dist/collection/components/my-component/my-component.js +455 -1389
  8. package/dist/collection/components/my-component/my-component.js.map +1 -1
  9. package/dist/collection/services/CameraService.js +292 -0
  10. package/dist/collection/services/CameraService.js.map +1 -0
  11. package/dist/collection/services/DetectionService.js +363 -0
  12. package/dist/collection/services/DetectionService.js.map +1 -0
  13. package/dist/collection/services/EventBusService.js +42 -0
  14. package/dist/collection/services/EventBusService.js.map +1 -0
  15. package/dist/collection/services/LoggerService.js +40 -0
  16. package/dist/collection/services/LoggerService.js.map +1 -0
  17. package/dist/collection/services/ServiceContainer.js +66 -0
  18. package/dist/collection/services/ServiceContainer.js.map +1 -0
  19. package/dist/collection/services/StateManagerService.js +109 -0
  20. package/dist/collection/services/StateManagerService.js.map +1 -0
  21. package/dist/collection/services/factories/DeviceStrategyFactory.js +16 -0
  22. package/dist/collection/services/factories/DeviceStrategyFactory.js.map +1 -0
  23. package/dist/collection/services/interfaces/ICameraService.js +2 -0
  24. package/dist/collection/services/interfaces/ICameraService.js.map +1 -0
  25. package/dist/collection/services/interfaces/IDetectionService.js +2 -0
  26. package/dist/collection/services/interfaces/IDetectionService.js.map +1 -0
  27. package/dist/collection/services/interfaces/IEventBus.js +2 -0
  28. package/dist/collection/services/interfaces/IEventBus.js.map +1 -0
  29. package/dist/collection/services/interfaces/ILogger.js +2 -0
  30. package/dist/collection/services/interfaces/ILogger.js.map +1 -0
  31. package/dist/collection/services/interfaces/IStateManager.js +2 -0
  32. package/dist/collection/services/interfaces/IStateManager.js.map +1 -0
  33. package/dist/collection/services/strategies/HighPerformanceDeviceStrategy.js +30 -0
  34. package/dist/collection/services/strategies/HighPerformanceDeviceStrategy.js.map +1 -0
  35. package/dist/collection/services/strategies/IDeviceStrategy.js +2 -0
  36. package/dist/collection/services/strategies/IDeviceStrategy.js.map +1 -0
  37. package/dist/collection/services/strategies/LowMemoryDeviceStrategy.js +30 -0
  38. package/dist/collection/services/strategies/LowMemoryDeviceStrategy.js.map +1 -0
  39. package/dist/components/jaak-stamps.js +1303 -1273
  40. package/dist/components/jaak-stamps.js.map +1 -1
  41. package/dist/esm/jaak-stamps-webcomponent.js +1 -1
  42. package/dist/esm/jaak-stamps.entry.js +1300 -1254
  43. package/dist/esm/jaak-stamps.entry.js.map +1 -1
  44. package/dist/esm/loader.js +1 -1
  45. package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +1 -1
  46. package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -1
  47. package/dist/jaak-stamps-webcomponent/p-5051b84e.entry.js +2 -0
  48. package/dist/jaak-stamps-webcomponent/p-5051b84e.entry.js.map +1 -0
  49. package/dist/types/components/my-component/my-component.d.ts +46 -100
  50. package/dist/types/components.d.ts +3 -3
  51. package/dist/types/services/CameraService.d.ts +41 -0
  52. package/dist/types/services/DetectionService.d.ts +35 -0
  53. package/dist/types/services/EventBusService.d.ts +9 -0
  54. package/dist/types/services/LoggerService.d.ts +12 -0
  55. package/dist/types/services/ServiceContainer.d.ts +26 -0
  56. package/dist/types/services/StateManagerService.d.ts +15 -0
  57. package/dist/types/services/factories/DeviceStrategyFactory.d.ts +4 -0
  58. package/dist/types/services/interfaces/ICameraService.d.ts +32 -0
  59. package/dist/types/services/interfaces/IDetectionService.d.ts +31 -0
  60. package/dist/types/services/interfaces/IEventBus.d.ts +16 -0
  61. package/dist/types/services/interfaces/ILogger.d.ts +8 -0
  62. package/dist/types/services/interfaces/IStateManager.d.ts +35 -0
  63. package/dist/types/services/strategies/HighPerformanceDeviceStrategy.d.ts +6 -0
  64. package/dist/types/services/strategies/IDeviceStrategy.d.ts +21 -0
  65. package/dist/types/services/strategies/LowMemoryDeviceStrategy.d.ts +6 -0
  66. package/package.json +1 -1
  67. package/dist/jaak-stamps-webcomponent/p-b62b53f8.entry.js +0 -2
  68. package/dist/jaak-stamps-webcomponent/p-b62b53f8.entry.js.map +0 -1
@@ -5,7 +5,7 @@ var index = require('./index-BfhtOB0D.js');
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await index.globalScripts();
8
- return index.bootstrapLazy([["jaak-stamps.cjs",[[1,"jaak-stamps",{"debug":[4],"alignmentTolerance":[2,"alignment-tolerance"],"maskSize":[2,"mask-size"],"cropMargin":[2,"crop-margin"],"useDocumentClassification":[4,"use-document-classification"],"preferredCamera":[1,"preferred-camera"],"isVideoActive":[32],"statusMessage":[32],"statusColor":[32],"bestScore":[32],"capturedFullFrame":[32],"capturedCroppedId":[32],"capturedBackFullFrame":[32],"capturedBackCroppedId":[32],"captureStep":[32],"isCapturing":[32],"showFlipAnimation":[32],"showSuccessAnimation":[32],"shouldMirrorVideo":[32],"sideAlignment":[32],"isDetectionPaused":[32],"isLoading":[32],"isModelPreloaded":[32],"isMaskReady":[32],"availableCameras":[32],"selectedCameraId":[32],"showCameraSelector":[32],"isMultipleCamerasAvailable":[32],"getCapturedImages":[64],"isProcessCompleted":[64],"startCapture":[64],"stopCapture":[64],"resetCapture":[64],"getStatus":[64],"preloadModel":[64],"skipBackCapture":[64],"getCameraInfo":[64],"setPreferredCamera":[64]}]]]], options);
8
+ return index.bootstrapLazy([["jaak-stamps.cjs",[[1,"jaak-stamps",{"debug":[4],"alignmentTolerance":[2,"alignment-tolerance"],"maskSize":[2,"mask-size"],"cropMargin":[2,"crop-margin"],"useDocumentClassification":[4,"use-document-classification"],"preferredCamera":[1,"preferred-camera"],"detectionBoxes":[32],"sideAlignment":[32],"isMaskReady":[32],"shouldMirrorVideo":[32],"showCameraSelector":[32],"currentStatus":[32],"getCapturedImages":[64],"isProcessCompleted":[64],"startCapture":[64],"stopCapture":[64],"resetCapture":[64],"skipBackCapture":[64],"getStatus":[64],"preloadModel":[64],"getCameraInfo":[64],"setPreferredCamera":[64]}]]]], options);
9
9
  };
10
10
 
11
11
  exports.setNonce = index.setNonce;
@@ -31,25 +31,31 @@ h1 {
31
31
  overflow: hidden;
32
32
  }
33
33
 
34
- video, canvas {
34
+ video, .detection-overlay {
35
35
  position: absolute;
36
36
  width: 100%;
37
37
  height: 100%;
38
38
  border-radius: 8px;
39
39
  }
40
40
 
41
- video.mirror, canvas.mirror {
41
+ video.mirror, .detection-overlay.mirror {
42
42
  transform: rotateY(180deg);
43
43
  }
44
44
 
45
- canvas {
45
+ .detection-overlay {
46
46
  z-index: 1;
47
+ pointer-events: none;
47
48
  }
48
49
 
49
50
  video {
50
51
  z-index: 0;
51
52
  }
52
53
 
54
+ /* Detection boxes for debug mode */
55
+ .detection-box {
56
+ transition: opacity 0.2s ease;
57
+ }
58
+
53
59
 
54
60
  .status {
55
61
  margin-top: 16px;
@@ -481,25 +487,6 @@ video {
481
487
  pointer-events: auto;
482
488
  }
483
489
 
484
- .flip-camera-button {
485
- height: 40px;
486
- padding: 0 16px;
487
- border: none;
488
- border-radius: 8px;
489
- background: rgba(0, 0, 0, 0.6);
490
- backdrop-filter: blur(12px);
491
- color: #ffffff;
492
- font-size: 12px;
493
- font-weight: 500;
494
- cursor: pointer;
495
- transition: all 0.2s ease;
496
- display: flex;
497
- align-items: center;
498
- justify-content: center;
499
- border: 1px solid rgba(255, 255, 255, 0.1);
500
- white-space: nowrap;
501
- min-width: fit-content;
502
- }
503
490
 
504
491
  .camera-selector-button {
505
492
  height: 40px;
@@ -521,14 +508,12 @@ video {
521
508
  min-width: fit-content;
522
509
  }
523
510
 
524
- .flip-camera-button:hover,
525
511
  .camera-selector-button:hover {
526
512
  background: rgba(0, 0, 0, 0.8);
527
513
  border-color: rgba(255, 255, 255, 0.2);
528
514
  transform: translateY(-1px);
529
515
  }
530
516
 
531
- .flip-camera-button:active,
532
517
  .camera-selector-button:active {
533
518
  transform: translateY(0);
534
519
  background: rgba(0, 0, 0, 0.9);
@@ -663,13 +648,6 @@ video {
663
648
  gap: 6px;
664
649
  }
665
650
 
666
- .flip-camera-button {
667
- height: 36px;
668
- padding: 0 12px;
669
- font-size: 11px;
670
- border-radius: 6px;
671
- }
672
-
673
651
  .camera-selector-button {
674
652
  height: 36px;
675
653
  padding: 0 12px;
@@ -713,38 +691,150 @@ video {
713
691
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));
714
692
  }
715
693
 
716
- /* Animación de carga */
694
+ /* Estado siempre visible del componente */
695
+ .component-status {
696
+ position: absolute;
697
+ top: 16px;
698
+ left: 16px;
699
+ right: 16px;
700
+ background: rgba(26, 26, 26, 0.95);
701
+ backdrop-filter: blur(8px);
702
+ display: flex;
703
+ align-items: center;
704
+ gap: 12px;
705
+ padding: 12px 16px;
706
+ border-radius: 12px;
707
+ z-index: 40;
708
+ transition: all 0.3s ease;
709
+ min-height: 48px;
710
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
711
+ }
712
+
713
+ /* Estados específicos */
714
+ .component-status.status-initializing {
715
+ background: rgba(26, 26, 26, 0.95);
716
+ }
717
+
718
+ .component-status.status-loading {
719
+ background: rgba(26, 26, 26, 0.95);
720
+ }
721
+
722
+ .component-status.status-ready {
723
+ background: rgba(26, 26, 26, 0.95);
724
+ }
725
+
726
+ .component-status.status-error {
727
+ background: rgba(26, 26, 26, 0.95);
728
+ }
729
+
730
+ .status-spinner {
731
+ width: 24px;
732
+ height: 24px;
733
+ border: 2px solid rgba(255, 255, 255, 0.2);
734
+ border-top: 2px solid #ffffff;
735
+ border-radius: 50%;
736
+ animation: statusSpin 1.2s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
737
+ flex-shrink: 0;
738
+ }
739
+
740
+ .status-content {
741
+ display: flex;
742
+ flex-direction: column;
743
+ gap: 2px;
744
+ }
745
+
746
+ .status-message {
747
+ color: #e6edf3;
748
+ font-size: 14px;
749
+ font-weight: 600;
750
+ opacity: 0.95;
751
+ letter-spacing: 0.3px;
752
+ margin: 0;
753
+ }
754
+
755
+ .status-description {
756
+ color: #8b949e;
757
+ font-size: 12px;
758
+ line-height: 1.3;
759
+ opacity: 0.9;
760
+ margin: 0;
761
+ }
762
+
763
+ @keyframes statusSpin {
764
+ 0% {
765
+ transform: rotate(0deg);
766
+ }
767
+ 100% {
768
+ transform: rotate(360deg);
769
+ }
770
+ }
771
+
772
+ /* Responsive para estado en móviles */
773
+ @media (max-width: 480px) {
774
+ .component-status {
775
+ top: 12px;
776
+ left: 12px;
777
+ right: 12px;
778
+ padding: 10px 14px;
779
+ gap: 10px;
780
+ min-height: 44px;
781
+ }
782
+
783
+ .status-spinner {
784
+ width: 20px;
785
+ height: 20px;
786
+ }
787
+
788
+ .status-message {
789
+ font-size: 13px;
790
+ }
791
+
792
+ .status-description {
793
+ font-size: 11px;
794
+ }
795
+ }
796
+
797
+ /* Animación de carga mejorada */
717
798
  .loading-overlay {
718
799
  position: absolute;
719
800
  top: 0;
720
801
  left: 0;
721
802
  width: 100%;
722
803
  height: 100%;
723
- background: rgba(0, 0, 0, 0.8);
804
+ background: rgba(0, 0, 0, 0.85);
805
+ backdrop-filter: blur(4px);
724
806
  display: flex;
725
807
  flex-direction: column;
726
808
  align-items: center;
727
809
  justify-content: center;
728
810
  z-index: 30;
729
- border-radius: 20px;
811
+ border-radius: 8px;
730
812
  }
731
813
 
732
814
  .loading-spinner {
733
- width: 60px;
734
- height: 60px;
735
- border: 4px solid rgba(255, 255, 255, 0.2);
736
- border-top: 4px solid #007bff;
815
+ width: 50px;
816
+ height: 50px;
817
+ border: 3px solid rgba(255, 255, 255, 0.15);
818
+ border-top: 3px solid #28a745;
737
819
  border-radius: 50%;
738
- animation: spin 1s linear infinite;
739
- margin-bottom: 20px;
820
+ animation: spin 1s ease-in-out infinite;
821
+ margin-bottom: 16px;
740
822
  }
741
823
 
742
824
  .loading-text {
743
- color: white;
744
- font-size: 16px;
825
+ color: #ffffff;
826
+ font-size: 14px;
745
827
  font-weight: 500;
746
828
  text-align: center;
747
829
  opacity: 0.9;
830
+ margin-bottom: 4px;
831
+ }
832
+
833
+ .loading-description {
834
+ color: rgba(255, 255, 255, 0.7);
835
+ font-size: 12px;
836
+ text-align: center;
837
+ opacity: 0.8;
748
838
  }
749
839
 
750
840
  @keyframes spin {
@@ -756,27 +846,3 @@ video {
756
846
  }
757
847
  }
758
848
 
759
- /* Status bar always visible */
760
- .status-bar {
761
- position: absolute;
762
- bottom: 10px;
763
- left: 50%;
764
- transform: translateX(-50%);
765
- background: rgba(0, 0, 0, 0.7);
766
- border-radius: 15px;
767
- padding: 8px 16px;
768
- z-index: 40;
769
- backdrop-filter: blur(5px);
770
- border: 1px solid rgba(255, 255, 255, 0.1);
771
- }
772
-
773
- .status-message {
774
- font-size: 12px;
775
- font-weight: 500;
776
- text-align: center;
777
- color: #fff;
778
- white-space: nowrap;
779
- max-width: 280px;
780
- overflow: hidden;
781
- text-overflow: ellipsis;
782
- }