scandoc-ai-components 0.0.61 → 0.0.62

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 (2) hide show
  1. package/dist/index.js +68 -31
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -11204,6 +11204,47 @@ class ExtractorVideo {
11204
11204
  this.unsupportedDocCount = 0;
11205
11205
  this.video = null;
11206
11206
  }
11207
+ async getCameraMargins() {
11208
+ const video = document.getElementById('ScanDocAIVideoElement');
11209
+ const canvas = document.createElement('canvas');
11210
+ const ctx = canvas.getContext('2d');
11211
+ canvas.width = video.videoWidth;
11212
+ canvas.height = video.videoHeight;
11213
+ ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
11214
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
11215
+ const isColumnBlack = x => {
11216
+ const threshold = 16;
11217
+ for (let y = 0; y < canvas.height; y++) {
11218
+ const i = (y * canvas.width + x) * 4;
11219
+ const [r, g, b] = [imageData[i], imageData[i + 1], imageData[i + 2]];
11220
+ if (r > threshold || g > threshold || b > threshold) return false;
11221
+ }
11222
+ return true;
11223
+ };
11224
+ const isRowBlack = y => {
11225
+ const threshold = 16;
11226
+ for (let x = 0; x < canvas.width; x++) {
11227
+ const i = (y * canvas.width + x) * 4;
11228
+ const [r, g, b] = [imageData[i], imageData[i + 1], imageData[i + 2]];
11229
+ if (r > threshold || g > threshold || b > threshold) return false;
11230
+ }
11231
+ return true;
11232
+ };
11233
+ let left = 0,
11234
+ right = 0,
11235
+ top = 0,
11236
+ bottom = 0;
11237
+ while (left < canvas.width && isColumnBlack(left)) left++;
11238
+ while (right < canvas.width && isColumnBlack(canvas.width - 1 - right)) right++;
11239
+ while (top < canvas.height && isRowBlack(top)) top++;
11240
+ while (bottom < canvas.height && isRowBlack(canvas.height - 1 - bottom)) bottom++;
11241
+ return {
11242
+ leftPct: left / canvas.width,
11243
+ rightPct: right / canvas.width,
11244
+ topPct: top / canvas.height,
11245
+ bottomPct: bottom / canvas.height
11246
+ };
11247
+ }
11207
11248
  async analyzeVideoStream() {
11208
11249
  if (!this.isRunning) {
11209
11250
  return;
@@ -11364,6 +11405,17 @@ class ExtractorVideo {
11364
11405
  await this.video.play().catch(e => {
11365
11406
  console.warn(`Error on video play: ${e}`);
11366
11407
  });
11408
+ setTimeout(async () => {
11409
+ const margins = await this.getCameraMargins();
11410
+ const rectangle = document.querySelector('.desktopRectangle');
11411
+ if (rectangle) {
11412
+ rectangle.style.top = `${margins.topPct * 100}%`;
11413
+ rectangle.style.bottom = `${margins.bottomPct * 100}%`;
11414
+ rectangle.style.left = `${margins.leftPct * 100}%`;
11415
+ rectangle.style.right = `${margins.rightPct * 100}%`;
11416
+ }
11417
+ }, 500); // Give time for video frame to show
11418
+
11367
11419
  this.scanStartTime = Date.now(); // Reset timer
11368
11420
  setTimeout(() => this.analyzeVideoStream(), ExtractorVideo.FREQUENCY_MS);
11369
11421
  this.showMessage("Starting scanning");
@@ -11401,11 +11453,9 @@ class ExtractorVideo {
11401
11453
  <div class="desktopFeedback" id="ScanDocAIMessage"></div>
11402
11454
  <div class="desktopVideoArea">
11403
11455
  <div class="desktopVideoHolder">
11404
- <div class="videoWrapper">
11405
- <video id="ScanDocAIVideoElement" class="desktopVideo" autoPlay muted playsInline></video>
11406
- <div class="backgroundOverlay"></div>
11407
- <div class="desktopRectangle dashedRectangle"></div>
11408
- </div>
11456
+ <video id="ScanDocAIVideoElement" class="desktopVideo" autoPlay muted playsInline></video>
11457
+ <div class="backgroundOverlay"></div>
11458
+ <div class="desktopRectangle dashedRectangle"></div>
11409
11459
  </div>
11410
11460
  </div>
11411
11461
 
@@ -11426,39 +11476,26 @@ class ExtractorVideo {
11426
11476
  position: relative;
11427
11477
  max-width: 100%;
11428
11478
  overflow: hidden;
11479
+ aspect-ratio: 16 / 9;
11429
11480
  }
11430
-
11431
- .videoWrapper {
11432
- position: relative;
11433
- width: 100%;
11434
- aspect-ratio: 16 / 9;
11435
- }
11481
+
11436
11482
  .desktopVideo {
11437
11483
  width: 100%;
11438
11484
  height: 100%;
11439
- object-fit: cover;
11485
+ object-fit: contain;
11440
11486
  display: block;
11441
11487
  }
11488
+
11442
11489
  .desktopRectangle {
11443
- position: absolute;
11444
- top: 5%;
11445
- left: 5%;
11446
- right: 5%;
11447
- bottom: 5%;
11448
- border-radius: 30px;
11449
- display: flex;
11450
- justify-content: center;
11451
- align-items: center;
11452
- z-index: 3;
11453
- }
11454
-
11455
- .dashedRectangle {
11456
- border: 5px dashed #5078bb;
11457
- }
11458
-
11459
- .solidRectangle {
11460
- border: 5px solid #5078bb;
11461
- }
11490
+ position: absolute;
11491
+ border-radius: 30px;
11492
+ display: flex;
11493
+ justify-content: center;
11494
+ align-items: center;
11495
+ z-index: 3;
11496
+ border: 5px dashed #5078bb;
11497
+ transition: all 0.3s ease;
11498
+ }
11462
11499
 
11463
11500
  .backgroundOverlay {
11464
11501
  position: absolute;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "scandoc-ai-components",
3
3
  "author": "ScanDoc-AI",
4
- "version": "0.0.61",
4
+ "version": "0.0.62",
5
5
  "private": false,
6
6
  "description": "Pure JavaScript package for integrating ScanDoc-AI services.",
7
7
  "keywords": [